@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,55 @@
1
+ import type { Command } from "@tiptap/core"
2
+
3
+ declare module "@tiptap/core" {
4
+
5
+ // eslint-disable-next-line @typescript-eslint/naming-convention
6
+ interface Commands<ReturnType> {
7
+ codeBlockEnterOrSplit: {
8
+ codeBlockEnterOrSplit: (pos?: number) => ReturnType
9
+ }
10
+ }
11
+ }
12
+
13
+ export const codeBlockEnterOrSplit = (
14
+ codeBlockType: string
15
+ ) => (pos?: number): Command =>
16
+ ({ state, chain, tr }) => {
17
+ const sel = state.selection.map(tr.doc, tr.mapping)
18
+ const { $from, $to } = sel
19
+ let { empty, from } = sel
20
+ if (pos !== undefined) {
21
+ from = pos
22
+ empty = true
23
+ }
24
+
25
+ if ($from.parent.type.name !== codeBlockType || $to.parent.type.name !== codeBlockType || $from.parent !== $to.parent) {
26
+ return false
27
+ }
28
+
29
+ const isAtEnd = empty && from === $from.end()
30
+ const endsWithDoubleNewline = $from.parent.textContent.endsWith("\n\n")
31
+
32
+ if (isAtEnd && endsWithDoubleNewline) {
33
+ return chain()
34
+
35
+ .command(({ tr, dispatch }) => {
36
+ // Delete the two empty lines at the end
37
+ if (dispatch) {
38
+ tr.delete(from - 1, $from.pos)
39
+ }
40
+ return true
41
+ })
42
+ .splitItem()
43
+ .run()
44
+ }
45
+
46
+ return chain()
47
+ .command(({ commands }) => {
48
+ if (!empty) {
49
+ return commands.deleteSelection()
50
+ }
51
+ return true
52
+ })
53
+ .newlineInCode()
54
+ .run()
55
+ }
@@ -0,0 +1,67 @@
1
+ import type { Command } from "@tiptap/core"
2
+ import { TextSelection } from "@tiptap/pm/state"
3
+
4
+ declare module "@tiptap/core" {
5
+
6
+ // eslint-disable-next-line @typescript-eslint/naming-convention
7
+ interface Commands<ReturnType> {
8
+ codeBlockIndent: {
9
+ codeBlockIndent: () => ReturnType
10
+ }
11
+ }
12
+ }
13
+
14
+ export const codeBlockIndent = (
15
+ codeBlockType: string
16
+ ) => (): Command =>
17
+ ({ state, tr, dispatch }) => {
18
+ const { $from, $to, empty, from, to } = state.selection.map(tr.doc, tr.mapping)
19
+
20
+ if ($from.parent.type.name !== codeBlockType || $to.parent.type.name !== codeBlockType || $from.parent !== $to.parent) {
21
+ return false
22
+ }
23
+ if (!dispatch) return true
24
+
25
+ if (empty) {
26
+ tr.insertText("\t")
27
+ return true
28
+ }
29
+
30
+ const textContent = $from.parent.textContent
31
+ const nodeStart = $from.start()
32
+ let start = from - nodeStart
33
+ let end = to - nodeStart
34
+
35
+ // shift the start/ends to capture the start/end of the lines
36
+ for (let i = start; i > 0; i--) {
37
+ if (textContent[i - 1] === "\n") {
38
+ break
39
+ }
40
+ start--
41
+ }
42
+
43
+ for (let j = end; j < textContent.length; j++) {
44
+ if (textContent[j] === "\n") {
45
+ break
46
+ }
47
+ end++
48
+ }
49
+
50
+ const blockSelection = textContent.slice(start, end)
51
+ const lines = blockSelection.split("\n")
52
+ // count the number of tabs we will be adding
53
+ // so we know how much to move the end of the selection
54
+ let tabCount = 0
55
+
56
+ for (let i = 0; i < lines.length; i++) {
57
+ lines[i] = `\t${lines[i]}`
58
+ tabCount++
59
+ }
60
+ const content = lines.join("\n")
61
+ tr.insertText(content, nodeStart + start, nodeStart + end)
62
+
63
+ // +1 for the start tab, this is already included in tabCount
64
+ tr.setSelection(TextSelection.create(tr.doc, from + 1, to + tabCount))
65
+
66
+ return true
67
+ }
@@ -0,0 +1,74 @@
1
+ import type { Command } from "@tiptap/core"
2
+ import { TextSelection } from "@tiptap/pm/state"
3
+
4
+ declare module "@tiptap/core" {
5
+
6
+ // eslint-disable-next-line @typescript-eslint/naming-convention
7
+ interface Commands<ReturnType> {
8
+ codeBlockUnindent: {
9
+ codeBlockUnindent: () => ReturnType
10
+ }
11
+ }
12
+ }
13
+
14
+ export const codeBlockUnindent = (
15
+ codeBlockType: string
16
+ ) => (): Command =>
17
+ ({ state, tr, dispatch }) => {
18
+ const { $from, $to, from, to } = state.selection.map(tr.doc, tr.mapping)
19
+
20
+ if ($from.parent.type.name !== codeBlockType || $to.parent.type.name !== codeBlockType || $from.parent !== $to.parent) {
21
+ return false
22
+ }
23
+ if (!dispatch) return true
24
+
25
+ const textContent = $from.parent.textContent
26
+ const nodeStart = $from.start()
27
+ let start = from - nodeStart
28
+ let end = to - nodeStart
29
+
30
+ const lastCharIsNewline = textContent[end - 1] === "\n"
31
+ const nextCharIsTab = textContent[end] === "\t"
32
+
33
+ // shift the start/ends to capture the start/end of the lines
34
+ for (let i = start; i > 0; i--) {
35
+ if (textContent[i - 1] === "\n") {
36
+ break
37
+ }
38
+ start--
39
+ }
40
+
41
+ for (let j = end; j < textContent.length; j++) {
42
+ if (textContent[j] === "\n") {
43
+ break
44
+ }
45
+ end++
46
+ }
47
+
48
+ const blockSelection = textContent.slice(start, end)
49
+ const lines = blockSelection.split("\n")
50
+ let tabCount = 0
51
+ let firstLineHadTab = false
52
+ for (let i = 0; i < lines.length; i++) {
53
+ if (lines[i].startsWith("\t")) {
54
+ lines[i] = lines[i].slice(1)
55
+ tabCount++
56
+ if (i === 0) {
57
+ firstLineHadTab = true
58
+ }
59
+ }
60
+ }
61
+ const content = lines.join("\n")
62
+ tr.insertText(content, nodeStart + start, nodeStart + end)
63
+
64
+ tr.setSelection(TextSelection.create(
65
+ tr.doc,
66
+ from - (firstLineHadTab ? 1 : 0),
67
+ // there's a weird bug? when the cursor ends at a newline (and is technically on that line and block selecting it) and the next char is a tab
68
+ // where you can't keep unindenting the last line
69
+ // this grows the selection to workaround it
70
+ to - tabCount + (lastCharIsNewline && nextCharIsTab ? 1 : 0)
71
+ ))
72
+
73
+ return true
74
+ }
@@ -0,0 +1,44 @@
1
+ import type { Command, Dispatch } from "@tiptap/core"
2
+
3
+ import { debugNode } from "../../../utils/internal/debugNode.js"
4
+
5
+ declare module "@tiptap/core" {
6
+
7
+ // eslint-disable-next-line @typescript-eslint/naming-convention
8
+ interface Commands<ReturnType> {
9
+ focusCodeBlockLanguage: {
10
+ focusCodeBlockLanguage: (dir: "up" | "down") => ReturnType
11
+ }
12
+ }
13
+ }
14
+
15
+ function focusInput(domNode: Node, langPickerClass: string, dispatch: Dispatch): boolean {
16
+ if (domNode instanceof HTMLElement) {
17
+ const langPickerEl = domNode.querySelector(`.${langPickerClass}`)
18
+ if (langPickerEl instanceof HTMLElement) {
19
+ if (dispatch) {
20
+ langPickerEl.focus()
21
+ }
22
+ return true
23
+ }
24
+ }
25
+ return false
26
+ }
27
+
28
+ export const focusCodeBlockLanguage = (
29
+ codeBlockType: string,
30
+ langPickerClass: string = "lang-picker-input"
31
+ ) =>
32
+ (): Command =>
33
+ ({ state, tr, view, dispatch }) => {
34
+ const { from, empty } = state.selection.map(tr.doc, tr.mapping)
35
+ if (!empty) { return false }
36
+ const $node = tr.doc.resolve(from)
37
+ debugNode($node.node())
38
+ const isCodeBlock = $node.node()?.type.name === codeBlockType
39
+ if (isCodeBlock) {
40
+ const domNode = view.domAtPos($node.start(-1)).node
41
+ return focusInput(domNode, langPickerClass, dispatch)
42
+ }
43
+ return false
44
+ }
@@ -0,0 +1,126 @@
1
+ <template>
2
+ <node-view-wrapper
3
+ :class="`
4
+ border
5
+ border-[var(--pmCodeBlockBgColor)]
6
+ code-block
7
+ bg-[var(--pmCodeBlockBgColor)]
8
+ rounded-sm
9
+ `"
10
+ v-extract-root-el="(el:any) => codeBlockEl = el"
11
+ >
12
+ <!-- dark class is not added directly to style this because we don't want to style the input, it should match the app theme instead -->
13
+ <div
14
+ contenteditable="false"
15
+ :class="`
16
+ lang-picker
17
+ rem-[0.7]
18
+ ${codeBlockThemeIsDark
19
+ ? `bg-neutral-600`
20
+ : `bg-neutral-400`
21
+ }
22
+ `"
23
+ ref="codeBlockLangPickerEl"
24
+ >
25
+ <!-- and here we only style everything but the suggestions so the input matches the code block background -->
26
+ <!-- @vue-expect-error -->
27
+ <WSimpleInput
28
+ :border="false"
29
+ wrapper-class="lang-picker-input flex-nowrap z-10"
30
+ :inner-wrapper-class="`
31
+ ${codeBlockThemeIsDark
32
+ ? `[&>*:not(.suggestions)]:text-neutral-300`
33
+ : `[&>*:not(.suggestions)]:text-neutral-700`
34
+ }
35
+ `"
36
+ suggestions-class="max-h-[200px] overflow-y-auto"
37
+ :suggestions="keys(langsInfo.aliases)"
38
+ :restrict-to-suggestions="true"
39
+ :aria-label="`Language:`"
40
+ :model-value="lang"
41
+ @blur="lang=lang"
42
+ @focus="savePosition"
43
+ @submit="focusCodeBlock"
44
+ />
45
+ </div>
46
+
47
+ <!-- @vue-expect-error -->
48
+ <node-view-content
49
+ :class="twMerge(`
50
+ hljs
51
+ py-1
52
+ px-2
53
+ ${codeBlockThemeIsDark ? `dark` : ``}
54
+ `,
55
+ node.attrs.language ? `language-${node.attrs.language}`: undefined
56
+ )"
57
+ as="pre"
58
+ :language="node.attrs.language"
59
+ :loading="node.attrs.loading"
60
+ />
61
+ </node-view-wrapper>
62
+ </template>
63
+
64
+ <script setup lang="ts">
65
+ import { keys } from "@alanscodelog/utils/keys"
66
+ import type { Selection } from "@tiptap/pm/state"
67
+ import { TextSelection } from "@tiptap/pm/state"
68
+ import { NodeViewContent, nodeViewProps, NodeViewWrapper } from "@tiptap/vue-3"
69
+ import WSimpleInput from "@witchcraft/ui/components/LibSimpleInput"
70
+ import { vExtractRootEl } from "@witchcraft/ui/directives/vExtractRootEl"
71
+ import { twMerge } from "tailwind-merge"
72
+ import { inject, ref, watch } from "vue"
73
+
74
+ import { codeBlockThemeIsDarkInjectionKey, langsInfoInjectionKey } from "../types.js"
75
+
76
+ const langsInfo = inject(langsInfoInjectionKey, ref({ languages: {}, aliases: {} }))
77
+
78
+ const codeBlockThemeIsDark = inject(codeBlockThemeIsDarkInjectionKey, ref(false))
79
+
80
+ const props = defineProps(nodeViewProps)
81
+ const lang = ref(props.node.attrs.language ?? "")
82
+ const codeBlockEl = ref<HTMLElement | null>(null)
83
+ watch(() => props.node.attrs.language, val => {
84
+ lang.value = val
85
+ })
86
+
87
+ let savedPos: Selection | undefined
88
+ function focusCodeBlock(newVal: string): void {
89
+ if (!codeBlockEl.value) return
90
+ // const pos = props.getPos()
91
+ props.editor.view.focus()
92
+ props.editor.commands.command(({ tr, dispatch }) => {
93
+ const thisNodePos = props.editor.view.posAtDOM(codeBlockEl.value!, 0)
94
+ if (thisNodePos < 0) return false
95
+ const $node = tr.doc.resolve(thisNodePos + props.node.nodeSize - 1)
96
+ if (savedPos) {
97
+ tr.setSelection(savedPos)
98
+ } else {
99
+ const sel = TextSelection.findFrom($node, -1, true)
100
+ if (!sel) return false
101
+ tr.setSelection(sel)
102
+ }
103
+ tr.setNodeMarkup($node.start(), undefined, {
104
+ ...props.node.attrs,
105
+ language: newVal,
106
+ loading: true
107
+ })
108
+ tr.scrollIntoView()
109
+ if (dispatch) dispatch(tr)
110
+ savedPos = undefined
111
+ return true
112
+ })
113
+ codeBlockEl.value.querySelector("code")?.focus()
114
+ }
115
+
116
+ function savePosition(): void {
117
+ if (!codeBlockEl.value) return
118
+ const nodePos = props.editor.view.posAtDOM(codeBlockEl.value, 0)
119
+ const $node = props.editor.state.doc.resolve(nodePos)
120
+
121
+ savedPos = props.editor.state.selection
122
+ if (savedPos.from < $node.start() || savedPos.to > $node.end()) {
123
+ savedPos = undefined
124
+ }
125
+ }
126
+ </script>
@@ -0,0 +1,185 @@
1
+ import { keys } from "@alanscodelog/utils/keys"
2
+ import { pushIfNotIn } from "@alanscodelog/utils/pushIfNotIn"
3
+ import type { Editor, Editor as PmEditor } from "@tiptap/core"
4
+ import type { Transaction } from "@tiptap/pm/state"
5
+ import type { createLowlight } from "lowlight"
6
+ import { provide, type Ref, ref, type ShallowRef, watch } from "vue"
7
+
8
+ import { highlightJsLanaguages, type HighlightJsLanguageInfo } from "../highlightJsInfo.js"
9
+ import { langsInfoInjectionKey } from "../types.js"
10
+
11
+ let langModulesDirectory = "../../../../../../../../highlight.js/es/languages"
12
+ // see https://github.com/vitejs/vite/issues/14102
13
+ // doing it directly for now to avoid build issues
14
+ // in the future we might be able to import diretly
15
+ let langModules = import.meta.glob("../../../../../../../../highlight.js/es/languages/*.js", { import: "default" })
16
+
17
+ const fallback = import.meta.glob("../../../../../../node_modules/highlight.js/es/languages/*.js", { import: "default" })
18
+ if (keys(langModules).length === 0 && keys(fallback).length !== 0) {
19
+ langModules = fallback
20
+ langModulesDirectory = "../../../../../../node_modules/highlight.js/es/languages"
21
+ // eslint-disable-next-line no-console
22
+ console.warn("Using fallback highlight.js languages locations. This should not be happening unless developing the library locally from it's playground using the linked module.")
23
+ }
24
+ if (keys(langModules).length === 0) {
25
+ // eslint-disable-next-line no-console
26
+ console.warn("Could not find any highlight.js languages. This is probably an issue with the editor package. Please report it.")
27
+ }
28
+
29
+ function defaultOnError(e: any): void {
30
+ // eslint-disable-next-line no-console
31
+ console.log(e)
32
+ }
33
+ /**
34
+ * Listens for transactions and scans the document, dynamically loading the used highlight.js language themes.
35
+ *
36
+ * Automatically provides them using {@link langsInfoInjectionKey}.
37
+ *
38
+ * Allows passing additional themes via the additionalThemes prop.
39
+ *
40
+ * You should not need to use them directly, but returns the functions used to load, lazy load, and query the editor, and also the provided langsInfo.
41
+ *
42
+ */
43
+ export function useAsyncCodeBlockHighlighting(
44
+ {
45
+ lowlightInstance,
46
+ editor: editorRef,
47
+ onError = defaultOnError,
48
+ debug = false
49
+ }: {
50
+ lowlightInstance: ReturnType<typeof createLowlight>
51
+ editor: ShallowRef<Editor | undefined>
52
+ onError?: ((e: any) => void)
53
+ debug?: boolean
54
+ }): {
55
+ loadLang: (lang: string) => Promise<string | Error>
56
+ lazyLoadCodeBlockLangs: ({ editor }: { editor: PmEditor }) => Promise<void>
57
+ getLangListFromEditor: (editor: PmEditor) => string[]
58
+ /** All importable highlight.js languages. */
59
+ langsInfo: Ref<HighlightJsLanguageInfo>
60
+ } {
61
+ const allLangs = ref<HighlightJsLanguageInfo>(highlightJsLanaguages)
62
+ if (debug) {
63
+ // eslint-disable-next-line no-console
64
+ console.log({ langModulesDirectory, langModules, allLangs })
65
+ }
66
+ provide(langsInfoInjectionKey, allLangs)
67
+
68
+ /**
69
+ * Load a language. Can return an error.
70
+ *
71
+ * Does not throw because even when using promise.allSettled it trigger's chrome's uncaught exception and is very annoying.
72
+ */
73
+ async function loadLang(lang: string): Promise<string | Error> {
74
+ if (lowlightInstance.registered(lang)) {
75
+ // eslint-disable-next-line no-console
76
+ if (debug) { console.log(`Already registered: ${lang}`) }
77
+ const error = new Error(`Already registered: ${lang}`)
78
+ ;(error as any).code = "ALREADY_REGISTERED"
79
+ return error
80
+ }
81
+ if (allLangs.value.aliases[lang] === undefined) {
82
+ // eslint-disable-next-line no-console
83
+ if (debug) { console.error(`Unknown language or alias: ${lang}`) }
84
+
85
+ return new Error(`Unknown language or alias: ${lang}`)
86
+ }
87
+ const fullName = allLangs.value.aliases[lang]
88
+ const langLoadingKey = `${langModulesDirectory}/${fullName}.js`
89
+ const func = langModules[langLoadingKey]
90
+ if (func === undefined) {
91
+ return new Error(`Could not find language: ${langLoadingKey} in ${langModulesDirectory}. Valid paths are:\n${keys(langModules).join(",\n")}`)
92
+ }
93
+ const hljs = await func()
94
+ lowlightInstance.register(lang, hljs as any)
95
+ return lang
96
+ }
97
+
98
+ function getLangListFromEditor(editor: PmEditor): string[] {
99
+ const langs: string[] = []
100
+ const doc = editor.state.doc
101
+ editor.state.doc.nodesBetween(0, doc.nodeSize - 2, (node, pos) => {
102
+ if (node.type?.name === "codeBlock") {
103
+ const lang = node.attrs?.language
104
+ const loading = node.attrs.loading
105
+ if (debug) {
106
+ // eslint-disable-next-line no-console
107
+ console.log(`Looked at node at pos ${pos} (lang: ${lang}, loading: ${loading}).`)
108
+ }
109
+ if (lang && loading) {
110
+ // eslint-disable-next-line no-console
111
+ if (debug) { console.log(`Found node at pos ${pos}.`) }
112
+ pushIfNotIn(langs, [lang])
113
+ }
114
+ return false
115
+ }
116
+ return true
117
+ })
118
+ return langs
119
+ }
120
+
121
+ async function lazyLoadCodeBlocks({ editor, transaction }: { editor: PmEditor, transaction?: Transaction }): Promise<void> {
122
+ if (debug) {
123
+ // eslint-disable-next-line no-console
124
+ console.log(`lazyLoadCodeBlocks called, docChanged: ${transaction?.docChanged}.`)
125
+ }
126
+ if (!transaction?.docChanged) return
127
+ const tr = editor.state.tr
128
+ const langs = getLangListFromEditor(editor)
129
+ const loadableLangs = (await Promise.allSettled(langs.map(loadLang)))
130
+ .filter(_ => {
131
+ if (_.status === "rejected") {
132
+ onError(_.reason)
133
+ }
134
+ return _.status === "fulfilled" && !((_ as any).value instanceof Error)
135
+ })
136
+ .map(_ => (_ as any).value)
137
+ if (debug) {
138
+ // eslint-disable-next-line no-console
139
+ console.log(`Found ${loadableLangs.length} loadable languages. \n\t${loadableLangs.join("\n\t")}`)
140
+ }
141
+
142
+ editor.state.doc.nodesBetween(0, editor.state.doc.resolve(0).end(), (node, pos) => {
143
+ if (node.type?.name === "codeBlock") {
144
+ const langAttr = node.attrs?.language
145
+ const loading = node.attrs.loading
146
+ if (langAttr && loading && loadableLangs.includes(langAttr)) {
147
+ // eslint-disable-next-line no-console
148
+ if (debug) { console.log(`Set node at pos ${pos} as loaded.`) }
149
+ tr.setNodeMarkup(pos, undefined, {
150
+ ...node.attrs,
151
+ language: langAttr,
152
+ loading: false
153
+ })
154
+ }
155
+ return false
156
+ }
157
+ return true
158
+ })
159
+ if (debug) {
160
+ // eslint-disable-next-line no-console
161
+ console.log(`tr.docChanged: ${tr.docChanged}.`)
162
+ }
163
+ if (tr.docChanged) {
164
+ editor.view.dispatch(tr)
165
+ }
166
+ }
167
+
168
+ watch(editorRef, () => {
169
+ if (editorRef.value) {
170
+ editorRef.value.on("transaction", lazyLoadCodeBlocks)
171
+ } else {
172
+ editorRef.value!.off("transaction", lazyLoadCodeBlocks)
173
+ }
174
+ })
175
+ if (editorRef.value) {
176
+ editorRef.value.on("transaction", lazyLoadCodeBlocks)
177
+ }
178
+
179
+ return {
180
+ loadLang,
181
+ lazyLoadCodeBlockLangs: lazyLoadCodeBlocks,
182
+ getLangListFromEditor,
183
+ langsInfo: allLangs
184
+ }
185
+ }
@@ -0,0 +1,150 @@
1
+ import { crop } from "@alanscodelog/utils/crop"
2
+ import { dedupe } from "@alanscodelog/utils/dedupe"
3
+ import { indent } from "@alanscodelog/utils/indent"
4
+ import { isWhitespace } from "@alanscodelog/utils/isWhitespace"
5
+ import { keys } from "@alanscodelog/utils/keys"
6
+ import { computed, type Ref, ref, watch } from "vue"
7
+
8
+ // careful, this needs to point to the highlight.js package beside the package (in the node_modules above it), not in the package or it won't work when used normally (but will when linked in the playground), it also needs to be the shortest path, otherwise our key won't work
9
+ let themeModulePath = "../../../../../../../../highlight.js/styles/"
10
+
11
+ let themeModules = import.meta.glob("../../../../../../../../highlight.js/styles/*.css", {
12
+ query: "?raw",
13
+ import: "default"
14
+ })
15
+ // fallback for the node_modules inside the package for when using "../src/module" in the playground
16
+ const fallback = import.meta.glob("../../../../../../node_modules/highlight.js/styles/*.css", {
17
+ query: "?raw",
18
+ import: "default"
19
+ })
20
+
21
+ if (keys(themeModules).length === 0 && keys(fallback).length !== 0) {
22
+ themeModules = fallback
23
+ themeModulePath = "../../../../../../node_modules/highlight.js/styles/"
24
+ // eslint-disable-next-line no-console
25
+ console.warn("Using fallback highlight.js themes locations. This should not be happening unless developing the library locally from it's playground using the linked module.")
26
+ }
27
+ if (keys(themeModules).length === 0) {
28
+ // eslint-disable-next-line no-console
29
+ console.warn("Could not find any highlight.js themes. This is probably an issue with the editor package. Please report it.")
30
+ }
31
+
32
+ const themeModuleNames = dedupe(keys(themeModules)
33
+ .map(k => {
34
+ const end = k.endsWith(".min.css") ? ".min.css" : ".css"
35
+ return k.slice((`${themeModulePath}`).length, end.length * -1)
36
+ }))
37
+
38
+ /**
39
+ * Dynamically loads and creates the css for a given theme.
40
+ *
41
+ * It's result, themeCss should be added as a head tag (e.g. using useHead or teleporting a `<component :is="'style'">` to the head).
42
+ *
43
+ * By default it's an array of one item so you can more easily pass it to {@link unhead https://unhead.unjs.io/}'s useHead.
44
+ *
45
+ * By default, it will only apply the theme to the code blocks in the prosemirror editor. This is done via css nesting so might not work in older browsers.
46
+ *
47
+ * While additionalThemes can be provided, it is dangerous to inject them from user input.
48
+ *
49
+ * Instead, you can create a theme that only uses css variables, then allow the user to customize the css variables instead.
50
+ *
51
+ * Dark theme detection is just done by checking if the theme name contains "dark".
52
+ *
53
+ * You can provide different background colors for dark and light themes by providing a `darkLightBgs` and it will automatically apply them.
54
+ */
55
+
56
+ export function useHighlightJsTheme({
57
+ defaultTheme = "github-dark",
58
+ darkLightBgs,
59
+ additionalThemes,
60
+ classes = ".ProseMirror",
61
+ debug = false
62
+ }: {
63
+ defaultTheme?: string
64
+ darkLightBgs?: Ref<{
65
+ dark: string
66
+ light: string
67
+ }>
68
+ /** Additional class to wrap the loaded css in. */
69
+ classes?: string
70
+ additionalThemes?: Ref<Record<string, string>>
71
+ debug?: boolean
72
+ } = {}) {
73
+ if (debug) {
74
+ // eslint-disable-next-line no-console
75
+ console.log({ themeModules, themeModuleNames })
76
+ }
77
+ const theme = ref(defaultTheme)
78
+ const knownThemes = ref(themeModuleNames)
79
+ const loadedThemes = ref<Record<string, string>>({})
80
+
81
+ if (additionalThemes) {
82
+ watch(additionalThemes, newThemes => {
83
+ if (debug) {
84
+ // eslint-disable-next-line no-console
85
+ console.log("Adding additional themes:", additionalThemes)
86
+ }
87
+ for (const [themeName, themeCss] of Object.entries(newThemes)) {
88
+ loadedThemes.value[themeName] = themeCss
89
+ }
90
+ })
91
+ }
92
+
93
+ const rawThemeCss = ref<string>("")
94
+ async function loadTheme(themeName: string): Promise<undefined | Error> {
95
+ if (loadedThemes.value[themeName]) return
96
+ const themeLoadingKey = `${themeModulePath}${themeName}.css`
97
+ const func = themeModules[themeLoadingKey]
98
+ if (func === undefined) {
99
+ throw new Error(`Could not find theme: ${themeLoadingKey} in ${themeModulePath}. Valid paths are:\n${keys(themeModules).join(",\n")}`)
100
+ }
101
+ const themeStyle = await func()
102
+ if (debug) {
103
+ // eslint-disable-next-line no-console
104
+ console.log("Loading theme:", { themeName, themeLoadingKey, themeStyle })
105
+ }
106
+ rawThemeCss.value = themeStyle as any
107
+ return undefined
108
+ }
109
+
110
+ void loadTheme(theme.value)
111
+ const isDark = computed(() => theme.value.includes("dark"))
112
+ const backgroundColor = computed(() => {
113
+ const colors = {
114
+ dark: "#1e1e1e",
115
+ light: "#ffffff",
116
+ ...(darkLightBgs?.value ?? {})
117
+ }
118
+ return colors[isDark.value ? "dark" : "light"]
119
+ })
120
+ const themeCss = computed(() => {
121
+ const innerCss = `
122
+ ${indent(rawThemeCss.value, 3)}
123
+ .hljs {
124
+ background-color: ${backgroundColor.value};
125
+ }
126
+ `
127
+ // if we run into issues with known browsers, we can
128
+ // replace ($|\s|,)+(.*?.hljs\S*) and wrap each selector
129
+ // but this seems very fragile
130
+ return [
131
+ isWhitespace(classes)
132
+ ? innerCss
133
+ : crop`
134
+ ${classes} {
135
+ ${indent(innerCss, 1)}
136
+ }
137
+ `
138
+ ]
139
+ })
140
+
141
+ return {
142
+ theme,
143
+ knownThemes,
144
+ loadTheme,
145
+ isDark,
146
+ backgroundColor,
147
+ themeCss,
148
+ rawThemeCss
149
+ }
150
+ }