@witchcraft/editor 0.0.5 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (400) hide show
  1. package/dist/module.d.mts +15 -2
  2. package/dist/module.json +1 -1
  3. package/dist/module.mjs +67 -13
  4. package/dist/runtime/assets/base.css +1 -0
  5. package/dist/runtime/assets/handle-arrow.svg +16 -0
  6. package/dist/runtime/assets/handle-border-circles-single.svg +44 -0
  7. package/dist/runtime/assets/handle-border-circles.svg +27 -0
  8. package/dist/runtime/assets/handle-temp.svg +1 -0
  9. package/dist/runtime/assets/utils.css +1 -0
  10. package/dist/runtime/components/CodeBlockThemePicker.d.vue.ts +12 -0
  11. package/dist/runtime/components/CodeBlockThemePicker.vue +123 -0
  12. package/dist/runtime/components/CodeBlockThemePicker.vue.d.ts +12 -0
  13. package/dist/runtime/components/Commands.d.vue.ts +10 -0
  14. package/dist/runtime/components/Commands.vue +60 -0
  15. package/dist/runtime/components/Commands.vue.d.ts +10 -0
  16. package/dist/runtime/components/Editor.d.vue.ts +40 -0
  17. package/dist/runtime/components/Editor.vue +208 -0
  18. package/dist/runtime/components/Editor.vue.d.ts +40 -0
  19. package/dist/runtime/components/EditorDemoApp.d.vue.ts +2 -0
  20. package/dist/runtime/components/EditorDemoApp.vue +104 -0
  21. package/dist/runtime/components/EditorDemoApp.vue.d.ts +2 -0
  22. package/dist/runtime/components/EditorDemoControls.d.vue.ts +12 -0
  23. package/dist/runtime/components/EditorDemoControls.vue +36 -0
  24. package/dist/runtime/components/EditorDemoControls.vue.d.ts +12 -0
  25. package/dist/runtime/components/TestWrapper.d.vue.ts +11 -0
  26. package/dist/runtime/components/TestWrapper.vue +63 -0
  27. package/dist/runtime/components/TestWrapper.vue.d.ts +11 -0
  28. package/dist/runtime/composables/useEditor.d.ts +9 -0
  29. package/dist/runtime/composables/useEditor.js +21 -0
  30. package/dist/runtime/composables/useWindowDebugging.d.ts +3 -0
  31. package/dist/runtime/composables/useWindowDebugging.js +16 -0
  32. package/dist/runtime/demo/App.d.vue.ts +2 -0
  33. package/dist/runtime/demo/App.vue +101 -0
  34. package/dist/runtime/demo/App.vue.d.ts +2 -0
  35. package/dist/runtime/demo/README.md +1 -0
  36. package/dist/runtime/demo/main.d.ts +1 -0
  37. package/dist/runtime/demo/main.js +4 -0
  38. package/dist/runtime/demo/tailwind.css +1 -0
  39. package/dist/runtime/env.d.ts +2 -0
  40. package/dist/runtime/injectionKeys.d.ts +6 -0
  41. package/dist/runtime/injectionKeys.js +3 -0
  42. package/dist/runtime/main.lib.d.ts +2 -0
  43. package/dist/runtime/main.lib.js +2 -0
  44. package/dist/runtime/pm/commands/backspace.d.ts +12 -0
  45. package/dist/runtime/pm/commands/backspace.js +26 -0
  46. package/dist/runtime/pm/commands/changeAttrs.d.ts +9 -0
  47. package/dist/runtime/pm/commands/changeAttrs.js +15 -0
  48. package/dist/runtime/pm/commands/deleteSelection.d.ts +9 -0
  49. package/dist/runtime/pm/commands/deleteSelection.js +8 -0
  50. package/dist/runtime/pm/commands/enter.d.ts +14 -0
  51. package/dist/runtime/pm/commands/enter.js +9 -0
  52. package/dist/runtime/pm/commands/insertBreak.d.ts +9 -0
  53. package/dist/runtime/pm/commands/insertBreak.js +22 -0
  54. package/dist/runtime/pm/features/Base/Base.d.ts +4 -0
  55. package/dist/runtime/pm/features/Base/Base.js +32 -0
  56. package/dist/runtime/pm/features/Base/commands/deleteNodes.d.ts +10 -0
  57. package/dist/runtime/pm/features/Base/commands/deleteNodes.js +29 -0
  58. package/dist/runtime/pm/features/Base/commands/setCursorVisible.d.ts +12 -0
  59. package/dist/runtime/pm/features/Base/commands/setCursorVisible.js +7 -0
  60. package/dist/runtime/pm/features/Base/plugins/debugSelectionPlugin.d.ts +9 -0
  61. package/dist/runtime/pm/features/Base/plugins/debugSelectionPlugin.js +48 -0
  62. package/dist/runtime/pm/features/Base/plugins/isCursorVisiblePlugin.d.ts +3 -0
  63. package/dist/runtime/pm/features/Base/plugins/isCursorVisiblePlugin.js +26 -0
  64. package/dist/runtime/pm/features/Base/plugins/isUsingTouchPlugin.d.ts +3 -0
  65. package/dist/runtime/pm/features/Base/plugins/isUsingTouchPlugin.js +38 -0
  66. package/dist/runtime/pm/features/Base/plugins/selectingIndicator.d.ts +5 -0
  67. package/dist/runtime/pm/features/Base/plugins/selectingIndicator.js +35 -0
  68. package/dist/runtime/pm/features/Base/plugins/unfocusedSelectionIndicatorPlugin.d.ts +33 -0
  69. package/dist/runtime/pm/features/Base/plugins/unfocusedSelectionIndicatorPlugin.js +66 -0
  70. package/dist/runtime/pm/features/Base/types.d.ts +3 -0
  71. package/dist/runtime/pm/features/Base/types.js +0 -0
  72. package/dist/runtime/pm/features/BaseShortcuts/BaseShortcuts.d.ts +3 -0
  73. package/dist/runtime/pm/features/BaseShortcuts/BaseShortcuts.js +34 -0
  74. package/dist/runtime/pm/features/Blockquote/Blockquote.d.ts +5 -0
  75. package/dist/runtime/pm/features/Blockquote/Blockquote.js +65 -0
  76. package/dist/runtime/pm/features/Blockquote/commands/blockquoteEnter.d.ts +11 -0
  77. package/dist/runtime/pm/features/Blockquote/commands/blockquoteEnter.js +31 -0
  78. package/dist/runtime/pm/features/Blockquote/commands/blockquoteShiftEnter.d.ts +11 -0
  79. package/dist/runtime/pm/features/Blockquote/commands/blockquoteShiftEnter.js +12 -0
  80. package/dist/runtime/pm/features/Blocks/Blocks.d.ts +2 -0
  81. package/dist/runtime/pm/features/Blocks/Blocks.js +2 -0
  82. package/dist/runtime/pm/features/Blocks/Item.d.ts +11 -0
  83. package/dist/runtime/pm/features/Blocks/Item.js +157 -0
  84. package/dist/runtime/pm/features/Blocks/List.d.ts +4 -0
  85. package/dist/runtime/pm/features/Blocks/List.js +59 -0
  86. package/dist/runtime/pm/features/Blocks/commands/changeItemType.d.ts +20 -0
  87. package/dist/runtime/pm/features/Blocks/commands/changeItemType.js +40 -0
  88. package/dist/runtime/pm/features/Blocks/commands/changeTypeAttr.d.ts +14 -0
  89. package/dist/runtime/pm/features/Blocks/commands/changeTypeAttr.js +28 -0
  90. package/dist/runtime/pm/features/Blocks/commands/copyOrMoveItem.d.ts +23 -0
  91. package/dist/runtime/pm/features/Blocks/commands/copyOrMoveItem.js +124 -0
  92. package/dist/runtime/pm/features/Blocks/commands/deleteItem.d.ts +12 -0
  93. package/dist/runtime/pm/features/Blocks/commands/deleteItem.js +8 -0
  94. package/dist/runtime/pm/features/Blocks/commands/indentItem.d.ts +12 -0
  95. package/dist/runtime/pm/features/Blocks/commands/indentItem.js +58 -0
  96. package/dist/runtime/pm/features/Blocks/commands/itemMenuCommands.d.ts +18 -0
  97. package/dist/runtime/pm/features/Blocks/commands/itemMenuCommands.js +40 -0
  98. package/dist/runtime/pm/features/Blocks/commands/moveItem.d.ts +12 -0
  99. package/dist/runtime/pm/features/Blocks/commands/moveItem.js +80 -0
  100. package/dist/runtime/pm/features/Blocks/commands/setNode.d.ts +20 -0
  101. package/dist/runtime/pm/features/Blocks/commands/setNode.js +87 -0
  102. package/dist/runtime/pm/features/Blocks/commands/splitItem.d.ts +17 -0
  103. package/dist/runtime/pm/features/Blocks/commands/splitItem.js +87 -0
  104. package/dist/runtime/pm/features/Blocks/commands/unindentItem.d.ts +12 -0
  105. package/dist/runtime/pm/features/Blocks/commands/unindentItem.js +42 -0
  106. package/dist/runtime/pm/features/Blocks/components/DragTreeHandle.d.vue.ts +0 -0
  107. package/dist/runtime/pm/features/Blocks/components/DragTreeHandle.vue +122 -0
  108. package/dist/runtime/pm/features/Blocks/components/DragTreeHandle.vue.d.ts +0 -0
  109. package/dist/runtime/pm/features/Blocks/components/ItemMenu.d.vue.ts +6 -0
  110. package/dist/runtime/pm/features/Blocks/components/ItemMenu.vue +78 -0
  111. package/dist/runtime/pm/features/Blocks/components/ItemMenu.vue.d.ts +6 -0
  112. package/dist/runtime/pm/features/Blocks/components/ItemNodeView.d.vue.ts +92 -0
  113. package/dist/runtime/pm/features/Blocks/components/ItemNodeView.vue +350 -0
  114. package/dist/runtime/pm/features/Blocks/components/ItemNodeView.vue.d.ts +92 -0
  115. package/dist/runtime/pm/features/Blocks/components/defaultItemMenu.d.ts +5 -0
  116. package/dist/runtime/pm/features/Blocks/components/defaultItemMenu.js +42 -0
  117. package/dist/runtime/pm/features/Blocks/composables/useDragWithThreshold.d.ts +1 -0
  118. package/dist/runtime/pm/features/Blocks/composables/useDragWithThreshold.js +0 -0
  119. package/dist/runtime/pm/features/Blocks/composables/useHandleHeight.d.ts +5 -0
  120. package/dist/runtime/pm/features/Blocks/composables/useHandleHeight.js +22 -0
  121. package/dist/runtime/pm/features/Blocks/composables/useHasChildren.d.ts +5 -0
  122. package/dist/runtime/pm/features/Blocks/composables/useHasChildren.js +10 -0
  123. package/dist/runtime/pm/features/Blocks/composables/useNodeStates.d.ts +7 -0
  124. package/dist/runtime/pm/features/Blocks/composables/useNodeStates.js +20 -0
  125. package/dist/runtime/pm/features/Blocks/itemMenuMenuItems.d.ts +20 -0
  126. package/dist/runtime/pm/features/Blocks/itemMenuMenuItems.js +138 -0
  127. package/dist/runtime/pm/features/Blocks/plugins/ensureLastItemIsContentPlugin.d.ts +11 -0
  128. package/dist/runtime/pm/features/Blocks/plugins/ensureLastItemIsContentPlugin.js +36 -0
  129. package/dist/runtime/pm/features/Blocks/plugins/itemBlockIdPlugin.d.ts +8 -0
  130. package/dist/runtime/pm/features/Blocks/plugins/itemBlockIdPlugin.js +30 -0
  131. package/dist/runtime/pm/features/Blocks/plugins/itemHasSingularSelectionPlugin.d.ts +3 -0
  132. package/dist/runtime/pm/features/Blocks/plugins/itemHasSingularSelectionPlugin.js +30 -0
  133. package/dist/runtime/pm/features/Blocks/plugins/itemMenuPlugin.d.ts +4 -0
  134. package/dist/runtime/pm/features/Blocks/plugins/itemMenuPlugin.js +17 -0
  135. package/dist/runtime/pm/features/Blocks/states/stateful.d.ts +2 -0
  136. package/dist/runtime/pm/features/Blocks/states/stateful.js +37 -0
  137. package/dist/runtime/pm/features/Blocks/states/task/cancelled.svg +32 -0
  138. package/dist/runtime/pm/features/Blocks/states/task/checked.svg +27 -0
  139. package/dist/runtime/pm/features/Blocks/states/task/checked2.svg +24 -0
  140. package/dist/runtime/pm/features/Blocks/states/task/partial.svg +24 -0
  141. package/dist/runtime/pm/features/Blocks/states/task/partial2.svg +31 -0
  142. package/dist/runtime/pm/features/Blocks/states/task/unchecked.svg +20 -0
  143. package/dist/runtime/pm/features/Blocks/types.d.ts +43 -0
  144. package/dist/runtime/pm/features/Blocks/types.js +2 -0
  145. package/dist/runtime/pm/features/Blocks/utils/createItemMenuCommandExecuter.d.ts +3 -0
  146. package/dist/runtime/pm/features/Blocks/utils/createItemMenuCommandExecuter.js +24 -0
  147. package/dist/runtime/pm/features/Blocks/utils/fixBlockIds.d.ts +4 -0
  148. package/dist/runtime/pm/features/Blocks/utils/fixBlockIds.js +23 -0
  149. package/dist/runtime/pm/features/Blocks/utils/isValidId.d.ts +2 -0
  150. package/dist/runtime/pm/features/Blocks/utils/isValidId.js +7 -0
  151. package/dist/runtime/pm/features/CodeBlock/CodeBlock.d.ts +16 -0
  152. package/dist/runtime/pm/features/CodeBlock/CodeBlock.js +91 -0
  153. package/dist/runtime/pm/features/CodeBlock/build/generateHighlightJsInfo.d.ts +1 -0
  154. package/dist/runtime/pm/features/CodeBlock/build/generateHighlightJsInfo.js +63 -0
  155. package/dist/runtime/pm/features/CodeBlock/commands/codeBlockEnterOrSplit.d.ts +9 -0
  156. package/dist/runtime/pm/features/CodeBlock/commands/codeBlockEnterOrSplit.js +28 -0
  157. package/dist/runtime/pm/features/CodeBlock/commands/codeBlockIndent.d.ts +9 -0
  158. package/dist/runtime/pm/features/CodeBlock/commands/codeBlockIndent.js +39 -0
  159. package/dist/runtime/pm/features/CodeBlock/commands/codeBlockUnindent.d.ts +9 -0
  160. package/dist/runtime/pm/features/CodeBlock/commands/codeBlockUnindent.js +50 -0
  161. package/dist/runtime/pm/features/CodeBlock/commands/focusCodeBlockLanguage.d.ts +9 -0
  162. package/dist/runtime/pm/features/CodeBlock/commands/focusCodeBlockLanguage.js +27 -0
  163. package/dist/runtime/pm/features/CodeBlock/components/CodeBlockView.d.vue.ts +92 -0
  164. package/dist/runtime/pm/features/CodeBlock/components/CodeBlockView.vue +112 -0
  165. package/dist/runtime/pm/features/CodeBlock/components/CodeBlockView.vue.d.ts +92 -0
  166. package/dist/runtime/pm/features/CodeBlock/composables/useAsyncCodeBlockHighlighting.d.ts +28 -0
  167. package/dist/runtime/pm/features/CodeBlock/composables/useAsyncCodeBlockHighlighting.js +137 -0
  168. package/dist/runtime/pm/features/CodeBlock/composables/useHighlightJsTheme.d.ts +37 -0
  169. package/dist/runtime/pm/features/CodeBlock/composables/useHighlightJsTheme.js +101 -0
  170. package/dist/runtime/pm/features/CodeBlock/highlightJsInfo.d.ts +17 -0
  171. package/dist/runtime/pm/features/CodeBlock/highlightJsInfo.js +711 -0
  172. package/dist/runtime/pm/features/CodeBlock/types.d.ts +4 -0
  173. package/dist/runtime/pm/features/CodeBlock/types.js +2 -0
  174. package/dist/runtime/pm/features/Collaboration/Collaboration.d.ts +66 -0
  175. package/dist/runtime/pm/features/Collaboration/Collaboration.js +169 -0
  176. package/dist/runtime/pm/features/CommandsMenus/CommandBar.d.ts +19 -0
  177. package/dist/runtime/pm/features/CommandsMenus/CommandBar.js +97 -0
  178. package/dist/runtime/pm/features/CommandsMenus/commandBarMenuItems.d.ts +20 -0
  179. package/dist/runtime/pm/features/CommandsMenus/commandBarMenuItems.js +188 -0
  180. package/dist/runtime/pm/features/CommandsMenus/components/CommandBar.d.vue.ts +8 -0
  181. package/dist/runtime/pm/features/CommandsMenus/components/CommandBar.vue +58 -0
  182. package/dist/runtime/pm/features/CommandsMenus/components/CommandBar.vue.d.ts +8 -0
  183. package/dist/runtime/pm/features/CommandsMenus/components/CommandBarItem.d.vue.ts +12 -0
  184. package/dist/runtime/pm/features/CommandsMenus/components/CommandBarItem.vue +42 -0
  185. package/dist/runtime/pm/features/CommandsMenus/components/CommandBarItem.vue.d.ts +12 -0
  186. package/dist/runtime/pm/features/CommandsMenus/components/CommandMenuGroup.d.vue.ts +10 -0
  187. package/dist/runtime/pm/features/CommandsMenus/components/CommandMenuGroup.vue +55 -0
  188. package/dist/runtime/pm/features/CommandsMenus/components/CommandMenuGroup.vue.d.ts +10 -0
  189. package/dist/runtime/pm/features/CommandsMenus/components/CommandMenuItem.d.vue.ts +11 -0
  190. package/dist/runtime/pm/features/CommandsMenus/components/CommandMenuItem.vue +58 -0
  191. package/dist/runtime/pm/features/CommandsMenus/components/CommandMenuItem.vue.d.ts +11 -0
  192. package/dist/runtime/pm/features/CommandsMenus/components/CommandMenuList.d.vue.ts +11 -0
  193. package/dist/runtime/pm/features/CommandsMenus/components/CommandMenuList.vue +54 -0
  194. package/dist/runtime/pm/features/CommandsMenus/components/CommandMenuList.vue.d.ts +11 -0
  195. package/dist/runtime/pm/features/CommandsMenus/components/TextIcon.d.vue.ts +5 -0
  196. package/dist/runtime/pm/features/CommandsMenus/components/TextIcon.vue +13 -0
  197. package/dist/runtime/pm/features/CommandsMenus/components/TextIcon.vue.d.ts +5 -0
  198. package/dist/runtime/pm/features/CommandsMenus/icons/HighlightIcon.d.vue.ts +8 -0
  199. package/dist/runtime/pm/features/CommandsMenus/icons/HighlightIcon.vue +45 -0
  200. package/dist/runtime/pm/features/CommandsMenus/icons/HighlightIcon.vue.d.ts +8 -0
  201. package/dist/runtime/pm/features/CommandsMenus/icons/SubscriptIcon.d.vue.ts +2 -0
  202. package/dist/runtime/pm/features/CommandsMenus/icons/SubscriptIcon.vue +5 -0
  203. package/dist/runtime/pm/features/CommandsMenus/icons/SubscriptIcon.vue.d.ts +2 -0
  204. package/dist/runtime/pm/features/CommandsMenus/icons/SuperscriptIcon.d.vue.ts +2 -0
  205. package/dist/runtime/pm/features/CommandsMenus/icons/SuperscriptIcon.vue +5 -0
  206. package/dist/runtime/pm/features/CommandsMenus/icons/SuperscriptIcon.vue.d.ts +2 -0
  207. package/dist/runtime/pm/features/CommandsMenus/types.d.ts +61 -0
  208. package/dist/runtime/pm/features/CommandsMenus/types.js +5 -0
  209. package/dist/runtime/pm/features/CommandsMenus/utils/defaultCommandExecutor.d.ts +3 -0
  210. package/dist/runtime/pm/features/CommandsMenus/utils/defaultCommandExecutor.js +11 -0
  211. package/dist/runtime/pm/features/CommandsMenus/utils/findCommand.d.ts +10 -0
  212. package/dist/runtime/pm/features/CommandsMenus/utils/findCommand.js +16 -0
  213. package/dist/runtime/pm/features/CommandsMenus/utils/popupPositionModifier.d.ts +5 -0
  214. package/dist/runtime/pm/features/CommandsMenus/utils/popupPositionModifier.js +9 -0
  215. package/dist/runtime/pm/features/CommandsMenus/utils/popupVerticalPositioner.d.ts +5 -0
  216. package/dist/runtime/pm/features/CommandsMenus/utils/popupVerticalPositioner.js +11 -0
  217. package/dist/runtime/pm/features/Document/Document.d.ts +3 -0
  218. package/dist/runtime/pm/features/Document/Document.js +6 -0
  219. package/dist/runtime/pm/features/DocumentApi/DocumentApi.d.ts +86 -0
  220. package/dist/runtime/pm/features/DocumentApi/DocumentApi.js +170 -0
  221. package/dist/runtime/pm/features/DocumentApi/composables/useEditorContent.d.ts +13 -0
  222. package/dist/runtime/pm/features/DocumentApi/composables/useEditorContent.js +76 -0
  223. package/dist/runtime/pm/features/DocumentApi/composables/useTestDocumentApi.d.ts +23 -0
  224. package/dist/runtime/pm/features/DocumentApi/composables/useTestDocumentApi.js +70 -0
  225. package/dist/runtime/pm/features/DocumentApi/types.d.ts +133 -0
  226. package/dist/runtime/pm/features/DocumentApi/types.js +1 -0
  227. package/dist/runtime/pm/features/DocumentApi/utils/convertFullTransactionForPartialState.d.ts +3 -0
  228. package/dist/runtime/pm/features/DocumentApi/utils/convertFullTransactionForPartialState.js +37 -0
  229. package/dist/runtime/pm/features/DocumentApi/utils/convertTrForInstance.d.ts +4 -0
  230. package/dist/runtime/pm/features/DocumentApi/utils/convertTrForInstance.js +13 -0
  231. package/dist/runtime/pm/features/DocumentApi/utils/convertTransactionForFullState.d.ts +2 -0
  232. package/dist/runtime/pm/features/DocumentApi/utils/convertTransactionForFullState.js +22 -0
  233. package/dist/runtime/pm/features/DocumentApi/utils/copyMeta.d.ts +2 -0
  234. package/dist/runtime/pm/features/DocumentApi/utils/copyMeta.js +6 -0
  235. package/dist/runtime/pm/features/DocumentApi/utils/getEmbedJson.d.ts +1 -0
  236. package/dist/runtime/pm/features/DocumentApi/utils/getEmbedJson.js +14 -0
  237. package/dist/runtime/pm/features/DocumentApi/utils/getEmbedNodeFromDoc.d.ts +1 -0
  238. package/dist/runtime/pm/features/DocumentApi/utils/getEmbedNodeFromDoc.js +14 -0
  239. package/dist/runtime/pm/features/DocumentApi/utils/getStateEmbedRange.d.ts +9 -0
  240. package/dist/runtime/pm/features/DocumentApi/utils/getStateEmbedRange.js +19 -0
  241. package/dist/runtime/pm/features/DocumentApi/utils/isEmbedId.d.ts +2 -0
  242. package/dist/runtime/pm/features/DocumentApi/utils/isEmbedId.js +3 -0
  243. package/dist/runtime/pm/features/EmbeddedDocument/Embedded.d.ts +24 -0
  244. package/dist/runtime/pm/features/EmbeddedDocument/Embedded.js +73 -0
  245. package/dist/runtime/pm/features/EmbeddedDocument/EmbeddedDocument.d.ts +23 -0
  246. package/dist/runtime/pm/features/EmbeddedDocument/EmbeddedDocument.js +70 -0
  247. package/dist/runtime/pm/features/EmbeddedDocument/components/EmbeddedDocumentPicker.d.vue.ts +14 -0
  248. package/dist/runtime/pm/features/EmbeddedDocument/components/EmbeddedDocumentPicker.vue +169 -0
  249. package/dist/runtime/pm/features/EmbeddedDocument/components/EmbeddedDocumentPicker.vue.d.ts +14 -0
  250. package/dist/runtime/pm/features/EmbeddedDocument/components/EmbeddedNodeView.d.vue.ts +92 -0
  251. package/dist/runtime/pm/features/EmbeddedDocument/components/EmbeddedNodeView.vue +170 -0
  252. package/dist/runtime/pm/features/EmbeddedDocument/components/EmbeddedNodeView.vue.d.ts +92 -0
  253. package/dist/runtime/pm/features/EmbeddedDocument/composables/useEmbeddedEditor.d.ts +31 -0
  254. package/dist/runtime/pm/features/EmbeddedDocument/composables/useEmbeddedEditor.js +199 -0
  255. package/dist/runtime/pm/features/EmbeddedDocument/types.d.ts +49 -0
  256. package/dist/runtime/pm/features/EmbeddedDocument/types.js +6 -0
  257. package/dist/runtime/pm/features/EmbeddedDocument/utils/isEmbeddedBlock.d.ts +9 -0
  258. package/dist/runtime/pm/features/EmbeddedDocument/utils/isEmbeddedBlock.js +3 -0
  259. package/dist/runtime/pm/features/EmbeddedDocument/utils/redirectFromEmbedded.d.ts +28 -0
  260. package/dist/runtime/pm/features/EmbeddedDocument/utils/redirectFromEmbedded.js +17 -0
  261. package/dist/runtime/pm/features/FileLoader/FileLoader.d.ts +16 -0
  262. package/dist/runtime/pm/features/FileLoader/FileLoader.js +99 -0
  263. package/dist/runtime/pm/features/FileLoader/FileLoaderHandler/FileLoaderHandler.d.ts +28 -0
  264. package/dist/runtime/pm/features/FileLoader/FileLoaderHandler/FileLoaderHandler.js +69 -0
  265. package/dist/runtime/pm/features/FileLoader/FileLoaderHandler/TestFileLoaderHandler.d.ts +11 -0
  266. package/dist/runtime/pm/features/FileLoader/FileLoaderHandler/TestFileLoaderHandler.js +49 -0
  267. package/dist/runtime/pm/features/FileLoader/commands/insertFile.d.ts +17 -0
  268. package/dist/runtime/pm/features/FileLoader/commands/insertFile.js +39 -0
  269. package/dist/runtime/pm/features/FileLoader/components/FileLoaderNodeView.d.vue.ts +92 -0
  270. package/dist/runtime/pm/features/FileLoader/components/FileLoaderNodeView.vue +38 -0
  271. package/dist/runtime/pm/features/FileLoader/components/FileLoaderNodeView.vue.d.ts +92 -0
  272. package/dist/runtime/pm/features/FileLoader/plugins/fileLoaderPlugin.d.ts +5 -0
  273. package/dist/runtime/pm/features/FileLoader/plugins/fileLoaderPlugin.js +61 -0
  274. package/dist/runtime/pm/features/FileLoader/types.d.ts +73 -0
  275. package/dist/runtime/pm/features/FileLoader/types.js +0 -0
  276. package/dist/runtime/pm/features/FileLoader/utils/cleanupFileLoaderNode.d.ts +4 -0
  277. package/dist/runtime/pm/features/FileLoader/utils/cleanupFileLoaderNode.js +27 -0
  278. package/dist/runtime/pm/features/FileLoader/utils/cleanupFileLoaderNodes.d.ts +9 -0
  279. package/dist/runtime/pm/features/FileLoader/utils/cleanupFileLoaderNodes.js +22 -0
  280. package/dist/runtime/pm/features/FileLoader/utils/findLoadingNodePos.d.ts +2 -0
  281. package/dist/runtime/pm/features/FileLoader/utils/findLoadingNodePos.js +11 -0
  282. package/dist/runtime/pm/features/FileLoader/utils/optionsCheck.d.ts +3 -0
  283. package/dist/runtime/pm/features/FileLoader/utils/optionsCheck.js +8 -0
  284. package/dist/runtime/pm/features/FileLoader/utils/readAsDataUrl.d.ts +1 -0
  285. package/dist/runtime/pm/features/FileLoader/utils/readAsDataUrl.js +12 -0
  286. package/dist/runtime/pm/features/HardBreak/HardBreak.d.ts +5 -0
  287. package/dist/runtime/pm/features/HardBreak/HardBreak.js +14 -0
  288. package/dist/runtime/pm/features/Heading/Heading.d.ts +24 -0
  289. package/dist/runtime/pm/features/Heading/Heading.js +85 -0
  290. package/dist/runtime/pm/features/Heading/commands/changeLevelAttr.d.ts +16 -0
  291. package/dist/runtime/pm/features/Heading/commands/changeLevelAttr.js +33 -0
  292. package/dist/runtime/pm/features/Heading/types.d.ts +14 -0
  293. package/dist/runtime/pm/features/Heading/types.js +0 -0
  294. package/dist/runtime/pm/features/Highlight/Highlight.d.ts +72 -0
  295. package/dist/runtime/pm/features/Highlight/Highlight.js +163 -0
  296. package/dist/runtime/pm/features/Highlight/retyped/tiptapHighlight.d.ts +3 -0
  297. package/dist/runtime/pm/features/Highlight/retyped/tiptapHighlight.js +5 -0
  298. package/dist/runtime/pm/features/Highlight/types.d.ts +27 -0
  299. package/dist/runtime/pm/features/Highlight/types.js +2 -0
  300. package/dist/runtime/pm/features/History/History.d.ts +35 -0
  301. package/dist/runtime/pm/features/History/History.js +63 -0
  302. package/dist/runtime/pm/features/Iframe/Iframe.d.ts +21 -0
  303. package/dist/runtime/pm/features/Iframe/Iframe.js +127 -0
  304. package/dist/runtime/pm/features/Iframe/IframeParsers.d.ts +37 -0
  305. package/dist/runtime/pm/features/Iframe/IframeParsers.js +88 -0
  306. package/dist/runtime/pm/features/Iframe/components/IframeNodeView.d.vue.ts +92 -0
  307. package/dist/runtime/pm/features/Iframe/components/IframeNodeView.vue +79 -0
  308. package/dist/runtime/pm/features/Iframe/components/IframeNodeView.vue.d.ts +92 -0
  309. package/dist/runtime/pm/features/Iframe/types.d.ts +5 -0
  310. package/dist/runtime/pm/features/Iframe/types.js +0 -0
  311. package/dist/runtime/pm/features/Image/Image.d.ts +2 -0
  312. package/dist/runtime/pm/features/Image/Image.js +13 -0
  313. package/dist/runtime/pm/features/Link/Link.d.ts +38 -0
  314. package/dist/runtime/pm/features/Link/Link.js +241 -0
  315. package/dist/runtime/pm/features/Link/components/BubbleMenuExternalLink.d.vue.ts +28 -0
  316. package/dist/runtime/pm/features/Link/components/BubbleMenuExternalLink.vue +113 -0
  317. package/dist/runtime/pm/features/Link/components/BubbleMenuExternalLink.vue.d.ts +28 -0
  318. package/dist/runtime/pm/features/Link/components/BubbleMenuInternalLink.d.vue.ts +29 -0
  319. package/dist/runtime/pm/features/Link/components/BubbleMenuInternalLink.vue +104 -0
  320. package/dist/runtime/pm/features/Link/components/BubbleMenuInternalLink.vue.d.ts +29 -0
  321. package/dist/runtime/pm/features/Link/components/BubbleMenuLink.d.vue.ts +11 -0
  322. package/dist/runtime/pm/features/Link/components/BubbleMenuLink.vue +126 -0
  323. package/dist/runtime/pm/features/Link/components/BubbleMenuLink.vue.d.ts +11 -0
  324. package/dist/runtime/pm/features/Link/components/BubbleMenuLinkActions.d.vue.ts +18 -0
  325. package/dist/runtime/pm/features/Link/components/BubbleMenuLinkActions.vue +54 -0
  326. package/dist/runtime/pm/features/Link/components/BubbleMenuLinkActions.vue.d.ts +18 -0
  327. package/dist/runtime/pm/features/Link/types.d.ts +44 -0
  328. package/dist/runtime/pm/features/Link/types.js +3 -0
  329. package/dist/runtime/pm/features/Menus/Menus.d.ts +45 -0
  330. package/dist/runtime/pm/features/Menus/Menus.js +142 -0
  331. package/dist/runtime/pm/features/Menus/components/MarkMenuManager.d.vue.ts +6 -0
  332. package/dist/runtime/pm/features/Menus/components/MarkMenuManager.vue +165 -0
  333. package/dist/runtime/pm/features/Menus/components/MarkMenuManager.vue.d.ts +6 -0
  334. package/dist/runtime/pm/features/Menus/types.d.ts +51 -0
  335. package/dist/runtime/pm/features/Menus/types.js +3 -0
  336. package/dist/runtime/pm/features/Menus/utils/isMarkMenu.d.ts +2 -0
  337. package/dist/runtime/pm/features/Menus/utils/isMarkMenu.js +3 -0
  338. package/dist/runtime/pm/features/Tables/commands/tableEnter.d.ts +15 -0
  339. package/dist/runtime/pm/features/Tables/commands/tableEnter.js +19 -0
  340. package/dist/runtime/pm/features/Tables/index.d.ts +9 -0
  341. package/dist/runtime/pm/features/Tables/index.js +44 -0
  342. package/dist/runtime/pm/schema.d.ts +4 -0
  343. package/dist/runtime/pm/schema.js +80 -0
  344. package/dist/runtime/pm/testSchema.d.ts +5 -0
  345. package/dist/runtime/pm/testSchema.js +30 -0
  346. package/dist/runtime/pm/utils/createDropIndicator.d.ts +23 -0
  347. package/dist/runtime/pm/utils/createDropIndicator.js +36 -0
  348. package/dist/runtime/pm/utils/createStateOnlyPluginApply.d.ts +2 -0
  349. package/dist/runtime/pm/utils/createStateOnlyPluginApply.js +9 -0
  350. package/dist/runtime/pm/utils/createStateOnlyPluginObjApply.d.ts +2 -0
  351. package/dist/runtime/pm/utils/createStateOnlyPluginObjApply.js +14 -0
  352. package/dist/runtime/pm/utils/dropPointInfo.d.ts +56 -0
  353. package/dist/runtime/pm/utils/dropPointInfo.js +28 -0
  354. package/dist/runtime/pm/utils/findUpwards.d.ts +20 -0
  355. package/dist/runtime/pm/utils/findUpwards.js +18 -0
  356. package/dist/runtime/pm/utils/getChildChunks.d.ts +3 -0
  357. package/dist/runtime/pm/utils/getChildChunks.js +15 -0
  358. package/dist/runtime/pm/utils/getDiffReplacementRange.d.ts +20 -0
  359. package/dist/runtime/pm/utils/getDiffReplacementRange.js +9 -0
  360. package/dist/runtime/pm/utils/getElMaxVisualSize.d.ts +9 -0
  361. package/dist/runtime/pm/utils/getElMaxVisualSize.js +7 -0
  362. package/dist/runtime/pm/utils/getElPropertyAsInt.d.ts +4 -0
  363. package/dist/runtime/pm/utils/getElPropertyAsInt.js +8 -0
  364. package/dist/runtime/pm/utils/getGroupNodeNames.d.ts +2 -0
  365. package/dist/runtime/pm/utils/getGroupNodeNames.js +7 -0
  366. package/dist/runtime/pm/utils/getMarkPosition.d.ts +11 -0
  367. package/dist/runtime/pm/utils/getMarkPosition.js +34 -0
  368. package/dist/runtime/pm/utils/getMarksInSelection.d.ts +3 -0
  369. package/dist/runtime/pm/utils/getMarksInSelection.js +16 -0
  370. package/dist/runtime/pm/utils/getTypeByName.d.ts +2 -0
  371. package/dist/runtime/pm/utils/getTypeByName.js +5 -0
  372. package/dist/runtime/pm/utils/index.d.ts +15 -0
  373. package/dist/runtime/pm/utils/index.js +15 -0
  374. package/dist/runtime/pm/utils/internal/createNodeTypesList.d.ts +2 -0
  375. package/dist/runtime/pm/utils/internal/createNodeTypesList.js +17 -0
  376. package/dist/runtime/pm/utils/internal/debugMap.d.ts +7 -0
  377. package/dist/runtime/pm/utils/internal/debugMap.js +24 -0
  378. package/dist/runtime/pm/utils/internal/debugNode.d.ts +2 -0
  379. package/dist/runtime/pm/utils/internal/debugNode.js +18 -0
  380. package/dist/runtime/pm/utils/internal/debugSel.d.ts +5 -0
  381. package/dist/runtime/pm/utils/internal/debugSel.js +8 -0
  382. package/dist/runtime/pm/utils/internal/recurse.d.ts +2 -0
  383. package/dist/runtime/pm/utils/internal/recurse.js +39 -0
  384. package/dist/runtime/pm/utils/internal/stripBlockId.d.ts +2 -0
  385. package/dist/runtime/pm/utils/internal/stripBlockId.js +9 -0
  386. package/dist/runtime/pm/utils/mapSelection.d.ts +8 -0
  387. package/dist/runtime/pm/utils/mapSelection.js +12 -0
  388. package/dist/runtime/pm/utils/nodesBetween.d.ts +21 -0
  389. package/dist/runtime/pm/utils/nodesBetween.js +21 -0
  390. package/dist/runtime/pm/utils/pointToPmPoint.d.ts +2 -0
  391. package/dist/runtime/pm/utils/pointToPmPoint.js +3 -0
  392. package/dist/runtime/pm/utils/splitIntoChunks.d.ts +32 -0
  393. package/dist/runtime/pm/utils/splitIntoChunks.js +31 -0
  394. package/dist/runtime/testDocuments.d.ts +53 -0
  395. package/dist/runtime/testDocuments.js +122 -0
  396. package/dist/runtime/types/index.d.ts +53 -0
  397. package/dist/runtime/types/index.js +9 -0
  398. package/dist/types.d.mts +2 -12
  399. package/package.json +5 -5
  400. package/dist/module.d.cts +0 -2
@@ -0,0 +1,24 @@
1
+ import { Extension } from "@tiptap/core";
2
+ import type { EmbeddedDocumentNodeOptions } from "./types.js";
3
+ declare module "@tiptap/core" {
4
+ interface Commands<ReturnType> {
5
+ embeddedCommandRedirect: {
6
+ embeddedCommandRedirect: (commandName: string, args: any) => ReturnType;
7
+ };
8
+ }
9
+ }
10
+ /**
11
+ * This is for "internal" use by the embedded editor only.
12
+ *
13
+ * It should not be registered by the root editor or the documentApi.
14
+ *
15
+ * It provides some additional communication between the embedded editor and the root editor.
16
+ *
17
+ * See {@link EmbeddedDocumentNodeOptions.embeddedBlockCommandRedirect} for more info.
18
+ *
19
+ * See also {@link redirectFromEmbedded} for creating redirectable commands.
20
+ *
21
+ * This extension should always be configured with the root editor and the getPos function from the embedded node view.
22
+ *
23
+ */
24
+ export declare const Embedded: Extension<EmbeddedDocumentNodeOptions, any>;
@@ -0,0 +1,73 @@
1
+ import { Extension } from "@tiptap/core";
2
+ import { TextSelection } from "@tiptap/pm/state";
3
+ export const Embedded = Extension.create({
4
+ name: "embedded",
5
+ addOptions() {
6
+ return {
7
+ embeddedBlockCommandRedirect: void 0,
8
+ getPos: void 0,
9
+ rootEditor: void 0,
10
+ getEmbedId: void 0
11
+ };
12
+ },
13
+ addCommands() {
14
+ if (!this.options.rootEditor) {
15
+ throw new Error("Embedded: Extension must be configured with the root editor.");
16
+ }
17
+ if (!this.options.getPos) {
18
+ throw new Error("Embedded: Extension must be configured with the getPos function.");
19
+ }
20
+ if (!this.options.getEmbedId) {
21
+ throw new Error("Embedded: Extension must be configured with the getEmbedId function.");
22
+ }
23
+ const { rootEditor, getPos, getEmbedId } = this.options;
24
+ return {
25
+ embeddedCommandRedirect: (commandName, args) => ({ editor, dispatch }) => {
26
+ const embedId = getEmbedId();
27
+ const nodePos = getPos();
28
+ if (this.options.embeddedBlockCommandRedirect) {
29
+ const res = this.options.embeddedBlockCommandRedirect(commandName, args, { editor, rootEditor, nodePos, embedId, dispatch });
30
+ if (res !== void 0) return res;
31
+ }
32
+ switch (commandName) {
33
+ case "insertFile":
34
+ return rootEditor.commands.insertFile(args[0], nodePos);
35
+ case "splitItem":
36
+ if (!nodePos) return false;
37
+ return rootEditor.commands.command(({ tr, commands, state, dispatch: dispatch2 }) => {
38
+ const from = nodePos;
39
+ const schema = state.schema;
40
+ if (schema.nodes.item) {
41
+ if (!dispatch2) return true;
42
+ const node = schema.nodes.item.createAndFill();
43
+ if (!node) return false;
44
+ tr.insert(from + 1, node);
45
+ tr.setSelection(TextSelection.create(tr.doc, from + 3));
46
+ commands.focus();
47
+ return true;
48
+ }
49
+ return false;
50
+ });
51
+ case "indentItem":
52
+ if (!nodePos) return false;
53
+ return rootEditor.commands.command(() => {
54
+ rootEditor.commands.indentItem(nodePos);
55
+ rootEditor.commands.setNodeSelection(nodePos + 2);
56
+ return true;
57
+ });
58
+ case "unindentItem":
59
+ if (!nodePos) return false;
60
+ return rootEditor.commands.command(() => {
61
+ rootEditor.commands.unindentItem(nodePos);
62
+ rootEditor.commands.setNodeSelection(nodePos - 2);
63
+ return true;
64
+ });
65
+ default:
66
+ console.warn(`No redirect handler found for command ${commandName}`);
67
+ break;
68
+ }
69
+ return false;
70
+ }
71
+ };
72
+ }
73
+ });
@@ -0,0 +1,23 @@
1
+ import { Node } from "@tiptap/core";
2
+ import type { HTMLAttributesOptions } from "../../../types/index.js";
3
+ declare module "@tiptap/core" {
4
+ interface Commands<ReturnType> {
5
+ embeddedDocument: {};
6
+ }
7
+ }
8
+ /**
9
+ * Extension that adds support for embedded documents.
10
+ *
11
+ * Must be used with the provided `History` extension instead of the normal one.
12
+ *
13
+ * The node view provides `isEmbedded` and `isDeepEmbedded` for any child component instances.
14
+ *
15
+ * If using a custom editor wrapper, you will need to:
16
+ *
17
+ * - Provide the custom editor wrapper component with the {@link embeddedEditorComponentInjectionKey} injection key. The component should expose the tiptap editor instance with `defineExpose` as the `editor` property.
18
+ * - Provide the document api by creating an instance of the {@link DocumentApi} class and providing it with the {@link documentApiInjectionKey}.
19
+ * - Provide a ref to it's document's id with the {@link parentEditorIdInjectionKey} if it's using ids to load documents so that the EmbeddedNodeview can detect circular embeds and avoid rendering them.
20
+ * - Add the class `editor-is-embedded-block` to the editor wrapper (it must be the immediate parent of view.dom) so commands such as enter can check if they should act differently. See {@link isEmbeddedBlock}.
21
+ */
22
+ export declare const EmbeddedDocument: Node<HTMLAttributesOptions, any>;
23
+ export type NodeEmbeddedDocumentName = "embeddedDoc";
@@ -0,0 +1,70 @@
1
+ import { isBlank } from "@alanscodelog/utils/isBlank";
2
+ import { mergeAttributes, Node } from "@tiptap/core";
3
+ import { VueNodeViewRenderer } from "@tiptap/vue-3";
4
+ import EmbeddedNodeView from "./components/EmbeddedNodeView.vue";
5
+ import { isValidId } from "../Blocks/utils/isValidId.js";
6
+ export const EmbeddedDocument = Node.create({
7
+ name: "embeddedDoc",
8
+ group: "block",
9
+ draggable: false,
10
+ atom: true,
11
+ // defining: true,
12
+ addNodeView() {
13
+ return VueNodeViewRenderer(EmbeddedNodeView, {
14
+ stopEvent() {
15
+ return true;
16
+ },
17
+ ignoreMutation() {
18
+ return true;
19
+ }
20
+ });
21
+ },
22
+ addOptions() {
23
+ return {
24
+ HTMLAttributes: {
25
+ default: {}
26
+ }
27
+ };
28
+ },
29
+ addAttributes() {
30
+ return {
31
+ embedId: {
32
+ default: { docId: void 0, blockId: void 0 }
33
+ }
34
+ };
35
+ },
36
+ parseHTML() {
37
+ return [{
38
+ tag: `div[type=${this.name}]`,
39
+ getAttrs: (element) => {
40
+ const docId = element.getAttribute("embeddocid");
41
+ if (docId === void 0 || docId === null) {
42
+ return false;
43
+ }
44
+ if (isBlank(docId) || !isValidId(docId)) {
45
+ return { embedId: { docId: void 0, blockId: void 0 } };
46
+ }
47
+ const blockId = element.getAttribute("embedblockid");
48
+ return {
49
+ embedId: {
50
+ docId: isBlank(docId) || !isValidId(docId) ? void 0 : docId,
51
+ blockId
52
+ }
53
+ };
54
+ }
55
+ }];
56
+ },
57
+ // eslint-disable-next-line @typescript-eslint/naming-convention
58
+ renderHTML({ HTMLAttributes }) {
59
+ const mergedHTMLAttributes = mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, {
60
+ embeddocid: HTMLAttributes.embedId.docId ?? "",
61
+ embedblockid: HTMLAttributes.embedId.blockId,
62
+ type: this.name
63
+ });
64
+ delete mergedHTMLAttributes.embedId;
65
+ return [
66
+ "div",
67
+ mergedHTMLAttributes
68
+ ];
69
+ }
70
+ });
@@ -0,0 +1,14 @@
1
+ import { type MaybeEmbedId } from "../../DocumentApi/types.js";
2
+ type __VLS_Props = {
3
+ embedId: MaybeEmbedId;
4
+ /** We need this, otherwise prosemirror? gets in an infinite loop because the component is not actually displayed? I think... Chrome debugger freezes completely. */
5
+ isShown: boolean;
6
+ };
7
+ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
8
+ cancel: () => any;
9
+ submit: (embedId: MaybeEmbedId) => any;
10
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
11
+ onCancel?: (() => any) | undefined;
12
+ onSubmit?: ((embedId: MaybeEmbedId) => any) | undefined;
13
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
14
+ export default _default;
@@ -0,0 +1,169 @@
1
+ <template>
2
+ <!-- v-if is to prevent styles from existing/getting applied to other documents when the popup is hidden, and also not having v-if on the editor causes problems with prosemirror -->
3
+ <div
4
+ v-if="isShown"
5
+ class="
6
+ embedded-document-picker
7
+ w-[calc(100dvw-var(--spacing-20))]
8
+ max-h-[calc(100dvh-var(--spacing-20))]
9
+ overflow-auto
10
+ bg-neutral-100
11
+ dark:bg-neutral-900
12
+ p-2
13
+ rounded-sm
14
+ flex-1
15
+ flex
16
+ flex-col
17
+ gap-2
18
+ "
19
+ >
20
+ <component
21
+ :is="'style'"
22
+ >
23
+ .embedded-document-picker li[blockid="{{ newEmbedId.blockId }}"]:not(:has(li:hover)):after {
24
+ border-color: rgb(var(--color-accent-500));
25
+ }
26
+ .embedded-document-picker li[blockid="{{ newEmbedId.blockId }}"]:has(li:hover):after {
27
+ border-color: rgb(var(--color-accent-500)/50%);
28
+ }
29
+ </component>
30
+ <!-- @vue-expect-error -->
31
+ <WSimpleInput
32
+ placeholder="Change document."
33
+ suggestions-class="max-h-[200px] overflow-y-auto"
34
+ :suggestions="searchSuggestions"
35
+ :suggestion-label="(suggestion) => suggestion.title"
36
+ :restrict-to-suggestions="false"
37
+ ref="inputComponent"
38
+ v-model="searchString"
39
+ @submit="pickDocId"
40
+ >
41
+ <!-- @vue-expect-error -->
42
+ <template
43
+ v-if="searchLoading"
44
+ #right
45
+ >
46
+ <WIcon><i-line-md-loading-loop/></WIcon>
47
+ </template>
48
+ <!-- @vue-expect-error -->
49
+ <template #suggestion-item="{ item }">
50
+ {{ item.title }}
51
+ </template>
52
+ </WSimpleInput>
53
+ <WCheckbox v-model="embedFullDocument">
54
+ Embed Full Document
55
+ </WCheckbox>
56
+ <div
57
+ v-if="!embedFullDocument && newEmbedId.docId"
58
+ class="border border-neutral-500 rounded-sm"
59
+ >
60
+ <div class="bg-neutral-200 dark:bg-neutral-800 rounded-t-sm p-1">
61
+ Pick a block to embed:
62
+ </div>
63
+ <div
64
+ class="
65
+ flex-1
66
+ [&_li]:after:rounded-sm
67
+ [&_li]:after:border-2
68
+ [&_li]:after:border-transparent
69
+ [&_li]:after:content-['']
70
+ [&_li]:after:absolute
71
+ [&_li]:after:inset-[-3px]
72
+ [&_li]:after:transition-all
73
+ [&_li]:cursor-pointer
74
+ [&_li]:after:pointer-events-none
75
+ [&_li:hover:not(:has(li:hover))]:after:content-['']
76
+ [&_li:hover:not(:has(li:hover))]:after:border-accent-500
77
+ [&_li:hover:not(:has(li:hover))]:after:bg-accent-500/30
78
+ [&_li:hover:not(:has(li:hover))]:after:pointer-events-none
79
+ [&_li:hover:not(:has(li:hover))]:pointer-events-all
80
+ [&_a]:pointer-events-none
81
+ overflow-y-auto
82
+ p-2
83
+ "
84
+ @pointerdown.prevent
85
+ @pointerup.prevent="pickBlockId"
86
+ >
87
+ <!-- @vue-expect-error -->
88
+ <Editor
89
+ :is-embedded="true"
90
+ :doc-id="newEmbedId.docId"
91
+ :editor-options="{ editable: false }"
92
+ />
93
+ </div>
94
+ </div>
95
+ <div class="flex flex-row no-wrap gap-2 justify-end">
96
+ <WButton
97
+ color="danger"
98
+ @click="emit('cancel')"
99
+ >
100
+ Cancel
101
+ </WButton>
102
+ <WButton
103
+ color="ok"
104
+ @click="submit"
105
+ >
106
+ Submit
107
+ </WButton>
108
+ </div>
109
+ </div>
110
+ </template>
111
+
112
+ <script setup>
113
+ import WIcon from "@witchcraft/ui/components/Icon";
114
+ import WButton from "@witchcraft/ui/components/LibButton";
115
+ import WCheckbox from "@witchcraft/ui/components/LibCheckbox";
116
+ import WSimpleInput from "@witchcraft/ui/components/LibSimpleInput";
117
+ import { inject, nextTick, provide, ref, toRef, watch } from "vue";
118
+ import ILineMdLoadingLoop from "~icons/line-md/loading-loop";
119
+ import Editor from "../../../../components/Editor.vue";
120
+ import { documentApiInjectionKey } from "../../DocumentApi/types.js";
121
+ import { isDeepEmbeddedInjectionKey } from "../types.js";
122
+ const props = defineProps({
123
+ embedId: { type: Object, required: true },
124
+ isShown: { type: Boolean, required: true }
125
+ });
126
+ const emit = defineEmits(["submit", "cancel"]);
127
+ const embedId = toRef(props, "embedId");
128
+ const newEmbedId = ref({ ...props.embedId });
129
+ const documentApi = inject(documentApiInjectionKey);
130
+ provide(isDeepEmbeddedInjectionKey, true);
131
+ function pickBlockId(e) {
132
+ const el = e.target;
133
+ const item = el.closest(".item-content");
134
+ const id = item?.getAttribute("blockid");
135
+ if (id) {
136
+ newEmbedId.value.blockId = id;
137
+ }
138
+ }
139
+ const justPicked = ref(false);
140
+ const inputComponent = ref(null);
141
+ const searchString = ref("");
142
+ const searchLoading = ref(false);
143
+ const searchSuggestions = ref([]);
144
+ watch(searchString, async (newVal) => {
145
+ if (justPicked.value) return;
146
+ searchLoading.value = true;
147
+ inputComponent.value?.suggestionsComponent?.suggestions.close();
148
+ searchSuggestions.value = await documentApi.getSuggestions(newVal);
149
+ inputComponent.value?.suggestionsComponent?.suggestions.open();
150
+ searchLoading.value = false;
151
+ }, { immediate: true });
152
+ function pickDocId(_val, suggestion) {
153
+ if (suggestion?.docId) {
154
+ newEmbedId.value.docId = suggestion.docId;
155
+ justPicked.value = true;
156
+ nextTick(() => {
157
+ justPicked.value = false;
158
+ });
159
+ }
160
+ }
161
+ const embedFullDocument = ref(embedId.value.blockId === void 0);
162
+ function submit() {
163
+ if (embedFullDocument.value) {
164
+ emit("submit", { ...newEmbedId.value, blockId: void 0 });
165
+ } else {
166
+ emit("submit", newEmbedId.value);
167
+ }
168
+ }
169
+ </script>
@@ -0,0 +1,14 @@
1
+ import { type MaybeEmbedId } from "../../DocumentApi/types.js";
2
+ type __VLS_Props = {
3
+ embedId: MaybeEmbedId;
4
+ /** We need this, otherwise prosemirror? gets in an infinite loop because the component is not actually displayed? I think... Chrome debugger freezes completely. */
5
+ isShown: boolean;
6
+ };
7
+ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
8
+ cancel: () => any;
9
+ submit: (embedId: MaybeEmbedId) => any;
10
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
11
+ onCancel?: (() => any) | undefined;
12
+ onSubmit?: ((embedId: MaybeEmbedId) => any) | undefined;
13
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
14
+ export default _default;
@@ -0,0 +1,92 @@
1
+ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
2
+ editor: {
3
+ type: import("vue").PropType<import("@tiptap/core").NodeViewProps["editor"]>;
4
+ required: true;
5
+ };
6
+ node: {
7
+ type: import("vue").PropType<import("@tiptap/core").NodeViewProps["node"]>;
8
+ required: true;
9
+ };
10
+ decorations: {
11
+ type: import("vue").PropType<import("@tiptap/core").NodeViewProps["decorations"]>;
12
+ required: true;
13
+ };
14
+ selected: {
15
+ type: import("vue").PropType<import("@tiptap/core").NodeViewProps["selected"]>;
16
+ required: true;
17
+ };
18
+ extension: {
19
+ type: import("vue").PropType<import("@tiptap/core").NodeViewProps["extension"]>;
20
+ required: true;
21
+ };
22
+ getPos: {
23
+ type: import("vue").PropType<import("@tiptap/core").NodeViewProps["getPos"]>;
24
+ required: true;
25
+ };
26
+ updateAttributes: {
27
+ type: import("vue").PropType<import("@tiptap/core").NodeViewProps["updateAttributes"]>;
28
+ required: true;
29
+ };
30
+ deleteNode: {
31
+ type: import("vue").PropType<import("@tiptap/core").NodeViewProps["deleteNode"]>;
32
+ required: true;
33
+ };
34
+ view: {
35
+ type: import("vue").PropType<import("@tiptap/core").NodeViewProps["view"]>;
36
+ required: true;
37
+ };
38
+ innerDecorations: {
39
+ type: import("vue").PropType<import("@tiptap/core").NodeViewProps["innerDecorations"]>;
40
+ required: true;
41
+ };
42
+ HTMLAttributes: {
43
+ type: import("vue").PropType<import("@tiptap/core").NodeViewProps["HTMLAttributes"]>;
44
+ required: true;
45
+ };
46
+ }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
47
+ editor: {
48
+ type: import("vue").PropType<import("@tiptap/core").NodeViewProps["editor"]>;
49
+ required: true;
50
+ };
51
+ node: {
52
+ type: import("vue").PropType<import("@tiptap/core").NodeViewProps["node"]>;
53
+ required: true;
54
+ };
55
+ decorations: {
56
+ type: import("vue").PropType<import("@tiptap/core").NodeViewProps["decorations"]>;
57
+ required: true;
58
+ };
59
+ selected: {
60
+ type: import("vue").PropType<import("@tiptap/core").NodeViewProps["selected"]>;
61
+ required: true;
62
+ };
63
+ extension: {
64
+ type: import("vue").PropType<import("@tiptap/core").NodeViewProps["extension"]>;
65
+ required: true;
66
+ };
67
+ getPos: {
68
+ type: import("vue").PropType<import("@tiptap/core").NodeViewProps["getPos"]>;
69
+ required: true;
70
+ };
71
+ updateAttributes: {
72
+ type: import("vue").PropType<import("@tiptap/core").NodeViewProps["updateAttributes"]>;
73
+ required: true;
74
+ };
75
+ deleteNode: {
76
+ type: import("vue").PropType<import("@tiptap/core").NodeViewProps["deleteNode"]>;
77
+ required: true;
78
+ };
79
+ view: {
80
+ type: import("vue").PropType<import("@tiptap/core").NodeViewProps["view"]>;
81
+ required: true;
82
+ };
83
+ innerDecorations: {
84
+ type: import("vue").PropType<import("@tiptap/core").NodeViewProps["innerDecorations"]>;
85
+ required: true;
86
+ };
87
+ HTMLAttributes: {
88
+ type: import("vue").PropType<import("@tiptap/core").NodeViewProps["HTMLAttributes"]>;
89
+ required: true;
90
+ };
91
+ }>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
92
+ export default _default;
@@ -0,0 +1,170 @@
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: void 0,
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 items-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
+ <WButton
45
+ v-if="editor?.isEditable"
46
+ title="Change embed link."
47
+ :border="true"
48
+ @click="showChangeEmbed = true"
49
+ >
50
+ <WIcon><i-fa-solid-link class="w-[0.7rem]"/></WIcon>
51
+ </WButton>
52
+ <WPopup
53
+ :use-backdrop="true"
54
+ :preferred-horizontal="['center-screen']"
55
+ :preferred-vertical="['center-screen']"
56
+ class="backdrop:bg-neutral-900/50 backdrop:dark:bg-neutral-100/50"
57
+ v-model="showChangeEmbed"
58
+ >
59
+ <template #popup="{ extractEl }">
60
+ <EmbeddedDocumentPicker
61
+ :is-shown="showChangeEmbed"
62
+ :embed-id="embedId"
63
+ v-extract-root-el="extractEl"
64
+ @submit="pickEmbed"
65
+ @cancel="showChangeEmbed = false"
66
+ />
67
+ </template>
68
+ >
69
+ </WPopup>
70
+ </div>
71
+ <Transition>
72
+ <div
73
+ v-if="showUndoWarning"
74
+ class="absolute inset-0 bg-red-100 dark:bg-red-900 text-red-600 dark:text-red-400 px-2"
75
+ contenteditable="false"
76
+ >
77
+ Warning: Undo applied to document part that is not visible/embedded.
78
+ </div>
79
+ </Transition>
80
+ </div>
81
+
82
+ <div v-if="!name"/>
83
+ <div
84
+ v-else-if="isEmbeddedTooDeep"
85
+ class="px-2 text-center"
86
+ contenteditable="false"
87
+ >
88
+ Cannot preview nested content deeper than one level.
89
+ </div>
90
+ <div
91
+ v-else-if="isRecursivelyEmbedded"
92
+ class="px-2 text-center"
93
+ contenteditable="false"
94
+ >
95
+ Cannot preview recursively embedded content.
96
+ </div>
97
+
98
+ <template
99
+ v-else-if="content"
100
+ >
101
+ <component
102
+ :is-embedded="true"
103
+ :content="content"
104
+ :editor-options="editorOptions"
105
+ :is="editorComponent"
106
+ ref="editorWrapper"
107
+ />
108
+ </template>
109
+ <div
110
+ v-else
111
+ class="px-2 text-center"
112
+ >
113
+ {{ isLoading ? "Loading..." : "Could not find reference to wanted block." }}
114
+ </div>
115
+ </node-view-wrapper>
116
+ </template>
117
+
118
+ <script setup>
119
+ import { nodeViewProps, NodeViewWrapper } from "@tiptap/vue-3";
120
+ import WIcon from "@witchcraft/ui/components/Icon";
121
+ import WButton from "@witchcraft/ui/components/LibButton";
122
+ import WPopup from "@witchcraft/ui/components/LibPopup";
123
+ import { vExtractRootEl } from "@witchcraft/ui/directives/vExtractRootEl";
124
+ import { computed, inject, ref, watch } from "vue";
125
+ import EmbeddedDocumentPicker from "./EmbeddedDocumentPicker.vue";
126
+ import IFaSolidLink from "~icons/fa-solid/link";
127
+ import Editor from "../../../../components/Editor.vue";
128
+ import { useEmbeddedEditor } from "../composables/useEmbeddedEditor.js";
129
+ import { embeddedEditorComponentInjectionKey } from "../types.js";
130
+ const props = defineProps(nodeViewProps);
131
+ const editorComponent = inject(embeddedEditorComponentInjectionKey, Editor);
132
+ const editorWrapper = ref(null);
133
+ const innerEditor = computed(() => editorWrapper.value?.editor);
134
+ const embedId = computed(() => props.node.attrs.embedId);
135
+ const showChangeEmbed = ref(false);
136
+ function pickEmbed(newEmbedId) {
137
+ showChangeEmbed.value = false;
138
+ props.updateAttributes({ ...props.node.attrs, embedId: { ...newEmbedId } });
139
+ }
140
+ function setEditorSelection() {
141
+ const pos = props.getPos();
142
+ if (props.editor.state.selection.from !== pos && pos) {
143
+ props.editor?.commands.setNodeSelection(pos);
144
+ }
145
+ }
146
+ function autoFocusOnSelection() {
147
+ if (props.editor.state.selection.from === props.getPos() && document.activeElement !== innerEditor.value?.view.dom) {
148
+ innerEditor.value?.commands.focus();
149
+ }
150
+ }
151
+ watch([() => props.editor.state.selection.from, innerEditor], () => {
152
+ autoFocusOnSelection();
153
+ });
154
+ const {
155
+ content,
156
+ // api,
157
+ isEmbeddedTooDeep,
158
+ // isEmbeddedBlock,
159
+ isRecursivelyEmbedded,
160
+ showUndoWarning,
161
+ name,
162
+ isLoading,
163
+ editorOptions
164
+ } = useEmbeddedEditor(
165
+ embedId,
166
+ innerEditor,
167
+ props.editor,
168
+ props.getPos
169
+ );
170
+ </script>