@kerebron/extension-basic-editor 0.2.1 → 0.4.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 (197) hide show
  1. package/README.md +4 -2
  2. package/esm/editor/src/CoreEditor.d.ts +24 -9
  3. package/esm/editor/src/CoreEditor.d.ts.map +1 -1
  4. package/esm/editor/src/CoreEditor.js +125 -70
  5. package/esm/editor/src/DummyEditorView.d.ts +60 -0
  6. package/esm/editor/src/DummyEditorView.d.ts.map +1 -0
  7. package/esm/editor/src/DummyEditorView.js +277 -0
  8. package/esm/editor/src/Extension.d.ts +15 -10
  9. package/esm/editor/src/Extension.d.ts.map +1 -1
  10. package/esm/editor/src/Extension.js +23 -3
  11. package/esm/editor/src/ExtensionManager.d.ts +9 -9
  12. package/esm/editor/src/ExtensionManager.d.ts.map +1 -1
  13. package/esm/editor/src/ExtensionManager.js +81 -74
  14. package/esm/editor/src/Mark.d.ts +11 -6
  15. package/esm/editor/src/Mark.d.ts.map +1 -1
  16. package/esm/editor/src/Mark.js +19 -2
  17. package/esm/editor/src/Node.d.ts +18 -13
  18. package/esm/editor/src/Node.d.ts.map +1 -1
  19. package/esm/editor/src/Node.js +22 -5
  20. package/esm/editor/src/commands/CommandManager.d.ts +14 -11
  21. package/esm/editor/src/commands/CommandManager.d.ts.map +1 -1
  22. package/esm/editor/src/commands/CommandManager.js +64 -6
  23. package/esm/editor/src/commands/baseCommandFactories.d.ts +3 -0
  24. package/esm/editor/src/commands/baseCommandFactories.d.ts.map +1 -0
  25. package/esm/editor/src/commands/baseCommandFactories.js +836 -0
  26. package/esm/editor/src/commands/keyCommandFactories.d.ts +3 -0
  27. package/esm/editor/src/commands/keyCommandFactories.d.ts.map +1 -0
  28. package/esm/editor/src/commands/keyCommandFactories.js +10 -0
  29. package/esm/editor/src/commands/mod.d.ts +5 -47
  30. package/esm/editor/src/commands/mod.d.ts.map +1 -1
  31. package/esm/editor/src/commands/mod.js +14 -866
  32. package/esm/editor/src/commands/replaceCommandFactories.d.ts +3 -0
  33. package/esm/editor/src/commands/replaceCommandFactories.d.ts.map +1 -0
  34. package/esm/editor/src/commands/replaceCommandFactories.js +94 -0
  35. package/esm/editor/src/commands/types.d.ts +18 -0
  36. package/esm/editor/src/commands/types.d.ts.map +1 -0
  37. package/esm/editor/src/commands/types.js +1 -0
  38. package/esm/editor/src/mod.d.ts +3 -0
  39. package/esm/editor/src/mod.d.ts.map +1 -1
  40. package/esm/editor/src/mod.js +3 -0
  41. package/esm/editor/src/nodeToTreeString.d.ts +8 -2
  42. package/esm/editor/src/nodeToTreeString.d.ts.map +1 -1
  43. package/esm/editor/src/nodeToTreeString.js +47 -29
  44. package/esm/editor/src/plugins/TrackSelecionPlugin.d.ts +6 -0
  45. package/esm/editor/src/plugins/TrackSelecionPlugin.d.ts.map +1 -0
  46. package/esm/editor/src/plugins/TrackSelecionPlugin.js +24 -0
  47. package/esm/editor/src/plugins/input-rules/InputRulesPlugin.js +2 -2
  48. package/esm/editor/src/plugins/keymap/keymap.d.ts +11 -0
  49. package/esm/editor/src/plugins/keymap/keymap.d.ts.map +1 -0
  50. package/esm/editor/src/plugins/keymap/keymap.js +125 -0
  51. package/esm/editor/src/plugins/keymap/mod.d.ts +2 -0
  52. package/esm/editor/src/plugins/keymap/mod.d.ts.map +1 -0
  53. package/esm/editor/src/plugins/keymap/mod.js +1 -0
  54. package/esm/editor/src/plugins/keymap/w3c-keyname.d.ts +4 -0
  55. package/esm/editor/src/plugins/keymap/w3c-keyname.d.ts.map +1 -0
  56. package/esm/editor/src/plugins/keymap/w3c-keyname.js +124 -0
  57. package/esm/editor/src/types.d.ts +30 -7
  58. package/esm/editor/src/types.d.ts.map +1 -1
  59. package/esm/editor/src/ui.d.ts +15 -0
  60. package/esm/editor/src/ui.d.ts.map +1 -0
  61. package/esm/editor/src/ui.js +16 -0
  62. package/esm/editor/src/utilities/SmartOutput.d.ts +41 -0
  63. package/esm/editor/src/utilities/SmartOutput.d.ts.map +1 -0
  64. package/esm/editor/src/utilities/SmartOutput.js +228 -0
  65. package/esm/editor/src/utilities/createNodeFromContent.d.ts +4 -3
  66. package/esm/editor/src/utilities/createNodeFromContent.d.ts.map +1 -1
  67. package/esm/editor/src/utilities/createNodeFromContent.js +4 -5
  68. package/esm/editor/src/utilities/getHtmlAttributes.d.ts +8 -3
  69. package/esm/editor/src/utilities/getHtmlAttributes.d.ts.map +1 -1
  70. package/esm/editor/src/utilities/getShadowRoot.d.ts +2 -0
  71. package/esm/editor/src/utilities/getShadowRoot.d.ts.map +1 -0
  72. package/esm/editor/src/utilities/getShadowRoot.js +16 -0
  73. package/esm/editor/src/utilities/mod.d.ts +3 -0
  74. package/esm/editor/src/utilities/mod.d.ts.map +1 -1
  75. package/esm/editor/src/utilities/mod.js +3 -0
  76. package/esm/editor/src/utilities/toRawTextResult.d.ts +3 -0
  77. package/esm/editor/src/utilities/toRawTextResult.d.ts.map +1 -0
  78. package/esm/editor/src/utilities/toRawTextResult.js +21 -0
  79. package/esm/extension-basic-editor/src/ExtensionBaseKeymap.d.ts +1 -2
  80. package/esm/extension-basic-editor/src/ExtensionBaseKeymap.d.ts.map +1 -1
  81. package/esm/extension-basic-editor/src/ExtensionBaseKeymap.js +40 -14
  82. package/esm/extension-basic-editor/src/ExtensionBasicCodeEditor.d.ts +11 -0
  83. package/esm/extension-basic-editor/src/ExtensionBasicCodeEditor.d.ts.map +1 -0
  84. package/esm/extension-basic-editor/src/ExtensionBasicCodeEditor.js +71 -0
  85. package/esm/extension-basic-editor/src/ExtensionBasicEditor.d.ts +23 -9
  86. package/esm/extension-basic-editor/src/ExtensionBasicEditor.d.ts.map +1 -1
  87. package/esm/extension-basic-editor/src/ExtensionBasicEditor.js +38 -8
  88. package/esm/extension-basic-editor/src/ExtensionDropcursor.d.ts +7 -0
  89. package/esm/extension-basic-editor/src/ExtensionDropcursor.d.ts.map +1 -1
  90. package/esm/extension-basic-editor/src/ExtensionDropcursor.js +211 -1
  91. package/esm/extension-basic-editor/src/ExtensionGapcursor.d.ts +21 -1
  92. package/esm/extension-basic-editor/src/ExtensionGapcursor.d.ts.map +1 -1
  93. package/esm/extension-basic-editor/src/ExtensionGapcursor.js +239 -1
  94. package/esm/extension-basic-editor/src/ExtensionHistory.d.ts +4 -3
  95. package/esm/extension-basic-editor/src/ExtensionHistory.d.ts.map +1 -1
  96. package/esm/extension-basic-editor/src/ExtensionHistory.js +29 -3
  97. package/esm/extension-basic-editor/src/ExtensionHtml.d.ts.map +1 -1
  98. package/esm/extension-basic-editor/src/ExtensionHtml.js +7 -4
  99. package/esm/extension-basic-editor/src/ExtensionMediaUpload.d.ts +24 -0
  100. package/esm/extension-basic-editor/src/ExtensionMediaUpload.d.ts.map +1 -0
  101. package/esm/extension-basic-editor/src/ExtensionMediaUpload.js +176 -0
  102. package/esm/extension-basic-editor/src/ExtensionSelection.d.ts +11 -0
  103. package/esm/extension-basic-editor/src/ExtensionSelection.d.ts.map +1 -0
  104. package/esm/extension-basic-editor/src/ExtensionSelection.js +237 -0
  105. package/esm/extension-basic-editor/src/MarkBookmark.d.ts.map +1 -1
  106. package/esm/extension-basic-editor/src/MarkChange.d.ts.map +1 -1
  107. package/esm/extension-basic-editor/src/MarkCode.d.ts +4 -7
  108. package/esm/extension-basic-editor/src/MarkCode.d.ts.map +1 -1
  109. package/esm/extension-basic-editor/src/MarkCode.js +2 -11
  110. package/esm/extension-basic-editor/src/MarkHighlight.d.ts +8 -0
  111. package/esm/extension-basic-editor/src/MarkHighlight.d.ts.map +1 -0
  112. package/esm/extension-basic-editor/src/MarkHighlight.js +43 -0
  113. package/esm/extension-basic-editor/src/MarkItalic.d.ts +4 -6
  114. package/esm/extension-basic-editor/src/MarkItalic.d.ts.map +1 -1
  115. package/esm/extension-basic-editor/src/MarkItalic.js +2 -11
  116. package/esm/extension-basic-editor/src/MarkLink.d.ts +1 -11
  117. package/esm/extension-basic-editor/src/MarkLink.d.ts.map +1 -1
  118. package/esm/extension-basic-editor/src/MarkLink.js +0 -32
  119. package/esm/extension-basic-editor/src/MarkStrike.d.ts +11 -0
  120. package/esm/extension-basic-editor/src/MarkStrike.d.ts.map +1 -0
  121. package/esm/extension-basic-editor/src/MarkStrike.js +39 -0
  122. package/esm/extension-basic-editor/src/MarkStrong.d.ts +4 -7
  123. package/esm/extension-basic-editor/src/MarkStrong.d.ts.map +1 -1
  124. package/esm/extension-basic-editor/src/MarkStrong.js +2 -11
  125. package/esm/extension-basic-editor/src/MarkTextColor.d.ts +8 -0
  126. package/esm/extension-basic-editor/src/MarkTextColor.d.ts.map +1 -0
  127. package/esm/extension-basic-editor/src/MarkTextColor.js +35 -0
  128. package/esm/extension-basic-editor/src/MarkUnderline.d.ts +3 -5
  129. package/esm/extension-basic-editor/src/MarkUnderline.d.ts.map +1 -1
  130. package/esm/extension-basic-editor/src/MarkUnderline.js +2 -11
  131. package/esm/extension-basic-editor/src/NodeAside.d.ts +0 -3
  132. package/esm/extension-basic-editor/src/NodeAside.d.ts.map +1 -1
  133. package/esm/extension-basic-editor/src/NodeAside.js +0 -8
  134. package/esm/extension-basic-editor/src/NodeBlockquote.d.ts +3 -6
  135. package/esm/extension-basic-editor/src/NodeBlockquote.d.ts.map +1 -1
  136. package/esm/extension-basic-editor/src/NodeBlockquote.js +2 -11
  137. package/esm/extension-basic-editor/src/NodeBulletList.d.ts +4 -7
  138. package/esm/extension-basic-editor/src/NodeBulletList.d.ts.map +1 -1
  139. package/esm/extension-basic-editor/src/NodeBulletList.js +2 -11
  140. package/esm/extension-basic-editor/src/NodeCodeBlock.d.ts +9 -0
  141. package/esm/extension-basic-editor/src/NodeCodeBlock.d.ts.map +1 -0
  142. package/esm/extension-basic-editor/src/NodeCodeBlock.js +58 -0
  143. package/esm/extension-basic-editor/src/NodeDefinitionDesc.d.ts +8 -0
  144. package/esm/extension-basic-editor/src/NodeDefinitionDesc.d.ts.map +1 -0
  145. package/esm/extension-basic-editor/src/NodeDefinitionDesc.js +29 -0
  146. package/esm/extension-basic-editor/src/NodeDefinitionList.d.ts +13 -0
  147. package/esm/extension-basic-editor/src/NodeDefinitionList.d.ts.map +1 -0
  148. package/esm/extension-basic-editor/src/NodeDefinitionList.js +41 -0
  149. package/esm/extension-basic-editor/src/NodeDefinitionTerm.d.ts +8 -0
  150. package/esm/extension-basic-editor/src/NodeDefinitionTerm.d.ts.map +1 -0
  151. package/esm/extension-basic-editor/src/NodeDefinitionTerm.js +29 -0
  152. package/esm/extension-basic-editor/src/NodeDocumentCode.d.ts +7 -0
  153. package/esm/extension-basic-editor/src/NodeDocumentCode.d.ts.map +1 -0
  154. package/esm/extension-basic-editor/src/NodeDocumentCode.js +37 -0
  155. package/esm/extension-basic-editor/src/NodeFrontmatter.d.ts +8 -0
  156. package/esm/extension-basic-editor/src/NodeFrontmatter.d.ts.map +1 -0
  157. package/esm/extension-basic-editor/src/NodeFrontmatter.js +29 -0
  158. package/esm/extension-basic-editor/src/NodeHardBreak.d.ts +5 -2
  159. package/esm/extension-basic-editor/src/NodeHardBreak.d.ts.map +1 -1
  160. package/esm/extension-basic-editor/src/NodeHardBreak.js +40 -53
  161. package/esm/extension-basic-editor/src/NodeHeading.d.ts +3 -14
  162. package/esm/extension-basic-editor/src/NodeHeading.d.ts.map +1 -1
  163. package/esm/extension-basic-editor/src/NodeHeading.js +2 -15
  164. package/esm/extension-basic-editor/src/NodeHorizontalRule.d.ts +4 -4
  165. package/esm/extension-basic-editor/src/NodeHorizontalRule.d.ts.map +1 -1
  166. package/esm/extension-basic-editor/src/NodeHorizontalRule.js +1 -2
  167. package/esm/extension-basic-editor/src/NodeListItem.d.ts +7 -5
  168. package/esm/extension-basic-editor/src/NodeListItem.d.ts.map +1 -1
  169. package/esm/extension-basic-editor/src/NodeListItem.js +10 -15
  170. package/esm/extension-basic-editor/src/NodeMath.d.ts +8 -0
  171. package/esm/extension-basic-editor/src/NodeMath.d.ts.map +1 -0
  172. package/esm/extension-basic-editor/src/NodeMath.js +112 -0
  173. package/esm/extension-basic-editor/src/NodeOrderedList.d.ts +3 -6
  174. package/esm/extension-basic-editor/src/NodeOrderedList.d.ts.map +1 -1
  175. package/esm/extension-basic-editor/src/NodeOrderedList.js +4 -14
  176. package/esm/extension-basic-editor/src/NodeParagraph.d.ts +2 -5
  177. package/esm/extension-basic-editor/src/NodeParagraph.d.ts.map +1 -1
  178. package/esm/extension-basic-editor/src/NodeParagraph.js +2 -11
  179. package/esm/extension-basic-editor/src/NodeTaskItem.d.ts +24 -0
  180. package/esm/extension-basic-editor/src/NodeTaskItem.d.ts.map +1 -0
  181. package/esm/extension-basic-editor/src/NodeTaskItem.js +153 -0
  182. package/esm/extension-basic-editor/src/NodeTaskList.d.ts +11 -0
  183. package/esm/extension-basic-editor/src/NodeTaskList.d.ts.map +1 -0
  184. package/esm/extension-basic-editor/src/NodeTaskList.js +38 -0
  185. package/esm/extension-basic-editor/src/NodeText.d.ts +0 -1
  186. package/esm/extension-basic-editor/src/NodeText.d.ts.map +1 -1
  187. package/esm/extension-basic-editor/src/NodeText.js +0 -6
  188. package/esm/extension-basic-editor/src/NodeVideo.d.ts +8 -0
  189. package/esm/extension-basic-editor/src/NodeVideo.d.ts.map +1 -0
  190. package/esm/extension-basic-editor/src/NodeVideo.js +58 -0
  191. package/esm/extension-basic-editor/src/remote-selection/ExtensionRemoteSelection.d.ts +24 -0
  192. package/esm/extension-basic-editor/src/remote-selection/ExtensionRemoteSelection.d.ts.map +1 -0
  193. package/esm/extension-basic-editor/src/remote-selection/ExtensionRemoteSelection.js +35 -0
  194. package/esm/extension-basic-editor/src/remote-selection/remoteSelectionPlugin.d.ts +25 -0
  195. package/esm/extension-basic-editor/src/remote-selection/remoteSelectionPlugin.d.ts.map +1 -0
  196. package/esm/extension-basic-editor/src/remote-selection/remoteSelectionPlugin.js +96 -0
  197. package/package.json +29 -6
package/README.md CHANGED
@@ -23,9 +23,11 @@ this.editor = new CoreEditor({
23
23
  ```
24
24
 
25
25
  ```js
26
- this.editor.setDocument('# TEST \n\n1. aaa\n2. bbb', 'text/x-markdown');
26
+ const buffer = new TextEncoder().encode('# TEST \n\n1. aaa\n2. bbb');
27
+ await this.editor.loadDocument('text/x-markdown', buffer);
27
28
  ```
28
29
 
29
30
  ```js
30
- const markdown = this.editor.getDocument('text/x-markdown');
31
+ const buffer = await this.editor.saveDocument('text/x-markdown');
32
+ const markdown = new TextDecoder().decode(buffer);
31
33
  ```
@@ -1,25 +1,40 @@
1
1
  import { EditorView } from 'prosemirror-view';
2
- import { Node as ProseMirrorNode, type Schema } from 'prosemirror-model';
3
- import type { EditorOptions, JSONContent } from './types.js';
2
+ import { Node as ProseMirrorNode, Schema } from 'prosemirror-model';
3
+ import type { EditorConfig, JSONContent } from './types.js';
4
4
  import { EditorState, Transaction } from 'prosemirror-state';
5
- import { ChainedCommands } from './commands/CommandManager.js';
5
+ import { DummyEditorView } from './DummyEditorView.js';
6
+ import { ChainedCommands } from './commands/mod.js';
7
+ import { Extension } from './Extension.js';
8
+ import { EditorUi } from './ui.js';
6
9
  export declare class CoreEditor extends EventTarget {
7
- readonly options: Partial<EditorOptions>;
10
+ readonly config: Partial<EditorConfig>;
8
11
  private extensionManager;
9
12
  private commandManager;
10
- view: EditorView;
13
+ view: EditorView | DummyEditorView;
11
14
  state: EditorState;
12
- constructor(options?: Partial<EditorOptions>);
15
+ ui: EditorUi;
16
+ constructor(config?: Partial<EditorConfig>);
17
+ getExtension<T extends Extension>(name: string): T | undefined;
13
18
  get schema(): Schema<any, any>;
19
+ get run(): {
20
+ [key: string]: (...args: any[]) => boolean;
21
+ };
22
+ get commandFactories(): {
23
+ [key: string]: import("./commands/types.js").CommandFactory;
24
+ };
14
25
  chain(): ChainedCommands;
15
26
  can(): ChainedCommands;
16
27
  private createView;
17
28
  dispatchTransaction(transaction: Transaction): void;
18
29
  private setupPlugins;
19
- setDocument(content?: any, mediaType?: string): void;
20
- getDocument(mediaType?: string): void | ProseMirrorNode | JSONContent;
30
+ clearDocument(): void;
31
+ setDocument(content: any): void;
32
+ getDocument(): ProseMirrorNode;
33
+ loadDocument(mediaType: string, content: Uint8Array): Promise<void>;
34
+ saveDocument(mediaType: string): Promise<Uint8Array>;
21
35
  getJSON(): JSONContent;
22
- clone(options?: Partial<EditorOptions>): CoreEditor;
36
+ clone(options?: Partial<EditorConfig>): CoreEditor;
23
37
  debug(doc?: ProseMirrorNode): void;
38
+ destroy(): void;
24
39
  }
25
40
  //# sourceMappingURL=CoreEditor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CoreEditor.d.ts","sourceRoot":"","sources":["../../../src/editor/src/CoreEditor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,IAAI,IAAI,eAAe,EAAE,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGzE,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE7D,OAAO,EAAE,eAAe,EAAkB,MAAM,8BAA8B,CAAC;AAgC/E,qBAAa,UAAW,SAAQ,WAAW;IACzC,SAAgB,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,CAG7C;IACF,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,cAAc,CAAiB;IAChC,IAAI,EAAG,UAAU,CAAC;IAClB,KAAK,EAAG,WAAW,CAAC;gBAEf,OAAO,GAAE,OAAO,CAAC,aAAa,CAAM;IAyBhD,IAAW,MAAM,qBAEhB;IAEM,KAAK,IAAI,eAAe;IAIxB,GAAG,IAAI,eAAe;IAI7B,OAAO,CAAC,UAAU;IAgBX,mBAAmB,CAAC,WAAW,EAAE,WAAW;IAcnD,OAAO,CAAC,YAAY;IAcb,WAAW,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,MAAM;IAwC7C,WAAW,CAAC,SAAS,CAAC,EAAE,MAAM;IAkB9B,OAAO,IAAI,WAAW;IAItB,KAAK,CAAC,OAAO,GAAE,OAAO,CAAC,aAAa,CAAM,GAAG,UAAU;IAOvD,KAAK,CAAC,GAAG,CAAC,EAAE,eAAe;CAMnC"}
1
+ {"version":3,"file":"CoreEditor.d.ts","sourceRoot":"","sources":["../../../src/editor/src/CoreEditor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,IAAI,IAAI,eAAe,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGpE,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAG7D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAa,QAAQ,EAAE,MAAM,SAAS,CAAC;AAc9C,qBAAa,UAAW,SAAQ,WAAW;IACzC,SAAgB,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,CAG3C;IACF,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,cAAc,CAAiB;IAChC,IAAI,EAAG,UAAU,GAAG,eAAe,CAAC;IACpC,KAAK,EAAG,WAAW,CAAC;IACpB,EAAE,EAAE,QAAQ,CAAmB;gBAE1B,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM;IA+B9C,YAAY,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAI9D,IAAW,MAAM,qBAEhB;IAED,IAAW,GAAG;;MAEb;IAED,IAAW,gBAAgB;;MAE1B;IAEM,KAAK,IAAI,eAAe;IAIxB,GAAG,IAAI,eAAe;IAI7B,OAAO,CAAC,UAAU;IA8CX,mBAAmB,CAAC,WAAW,EAAE,WAAW;IAsBnD,OAAO,CAAC,YAAY;IAcb,aAAa;IASb,WAAW,CAAC,OAAO,EAAE,GAAG;IAyBxB,WAAW;IAIL,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU;IA0BnD,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAY1D,OAAO,IAAI,WAAW;IAItB,KAAK,CAAC,OAAO,GAAE,OAAO,CAAC,YAAY,CAAM,GAAG,UAAU;IAOtD,KAAK,CAAC,GAAG,CAAC,EAAE,eAAe;IAO3B,OAAO;CAOf"}
@@ -2,45 +2,27 @@ import { EditorView } from 'prosemirror-view';
2
2
  import { Node as ProseMirrorNode } from 'prosemirror-model';
3
3
  import { ExtensionManager } from './ExtensionManager.js';
4
4
  import { EditorState } from 'prosemirror-state';
5
- import { createNodeFromContent } from './utilities/createNodeFromContent.js';
6
5
  import { CommandManager } from './commands/CommandManager.js';
7
6
  import { nodeToTreeString } from './nodeToTreeString.js';
7
+ import { DummyEditorView } from './DummyEditorView.js';
8
+ import { createNodeFromObject } from './utilities/createNodeFromContent.js';
9
+ import { defaultUi } from './ui.js';
8
10
  function ensureDocSchema(doc, schema) {
9
- if (doc.type.schema != schema) {
10
- const findNode = (nodeName) => {
11
- if (!schema.nodes[nodeName]) {
12
- throw new Error(`Not able to rewrite schema for node '${nodeName}'`);
13
- }
14
- return schema.nodes[nodeName];
15
- };
16
- const findMark = (markName) => {
17
- if (!schema.marks[markName]) {
18
- throw new Error(`Not able to rewrite schema for mark '${markName}'`);
19
- }
20
- return schema.marks[markName];
21
- };
22
- // TODO fix readonly warnings
23
- doc.type = findNode(doc.type.name);
24
- doc.marks.forEach((mark) => {
25
- mark.type = findMark(mark.type.name);
26
- });
27
- doc.descendants((node) => {
28
- node.type = findNode(node.type.name);
29
- node.marks.forEach((mark) => {
30
- mark.type = findMark(mark.type.name);
31
- });
32
- });
11
+ if (doc.type.schema === schema) {
12
+ return doc;
33
13
  }
14
+ const json = doc.toJSON();
15
+ return ProseMirrorNode.fromJSON(schema, json);
34
16
  }
35
17
  export class CoreEditor extends EventTarget {
36
- constructor(options = {}) {
18
+ constructor(config = {}) {
37
19
  super();
38
- Object.defineProperty(this, "options", {
20
+ Object.defineProperty(this, "config", {
39
21
  enumerable: true,
40
22
  configurable: true,
41
23
  writable: true,
42
24
  value: {
43
- element: null, // document.createElement('div'),
25
+ element: undefined,
44
26
  extensions: [],
45
27
  }
46
28
  });
@@ -68,43 +50,88 @@ export class CoreEditor extends EventTarget {
68
50
  writable: true,
69
51
  value: void 0
70
52
  });
71
- this.options = {
72
- ...this.options,
73
- ...options,
53
+ Object.defineProperty(this, "ui", {
54
+ enumerable: true,
55
+ configurable: true,
56
+ writable: true,
57
+ value: defaultUi(this)
58
+ });
59
+ this.config = {
60
+ ...this.config,
61
+ ...config,
74
62
  };
75
- this.extensionManager = new ExtensionManager(this.options.extensions, this);
63
+ this.commandManager = new CommandManager(this);
64
+ this.extensionManager = new ExtensionManager(this.config.extensions || [], this, this.commandManager);
65
+ this.extensionManager.created();
76
66
  // const content = this.options.content ? this.options.content : {
77
67
  // type: this.extensionManager.schema.topNodeType.name,
78
68
  // content: this.extensionManager.schema.topNodeType.spec.EMPTY_DOC,
79
69
  // };
80
- const content = this.options.content
81
- ? this.options.content
70
+ const content = this.config.content
71
+ ? this.config.content
82
72
  : this.extensionManager.schema.topNodeType.spec.EMPTY_DOC;
83
73
  this.createView(content);
84
- this.commandManager = new CommandManager(this, this.extensionManager.commandConstructors);
85
74
  this.setupPlugins();
86
75
  }
76
+ getExtension(name) {
77
+ return this.extensionManager.getExtension(name);
78
+ }
87
79
  get schema() {
88
80
  return this.extensionManager.schema;
89
81
  }
82
+ get run() {
83
+ return this.commandManager.run;
84
+ }
85
+ get commandFactories() {
86
+ return this.commandManager.commandFactories;
87
+ }
90
88
  chain() {
91
- return this.commandManager.chain();
89
+ return this.commandManager.createChain();
92
90
  }
93
91
  can() {
94
- return this.commandManager.can();
92
+ return this.commandManager.createCan();
95
93
  }
96
94
  createView(content) {
97
- const doc = createNodeFromContent(content, this.schema);
95
+ const doc = createNodeFromObject(content, this.schema);
98
96
  this.state = EditorState.create({ doc });
99
- if (this.options.element) {
100
- this.view = new EditorView(this.options.element, {
97
+ if (this.config.element) {
98
+ const view = new EditorView(this.config.element, {
101
99
  state: this.state,
102
100
  attributes: {
103
101
  class: 'kb-editor',
104
102
  },
105
103
  dispatchTransaction: (tx) => this.dispatchTransaction(tx),
106
104
  });
105
+ this.view = view;
106
+ const parent = this.config.element.parentNode;
107
+ if (parent) {
108
+ const observer = new MutationObserver((mutations) => {
109
+ for (const mutation of mutations) {
110
+ for (const removedNode of mutation.removedNodes) {
111
+ if (removedNode.contains(view.dom)) {
112
+ // Editor DOM was removed
113
+ observer.disconnect(); // Prevent multiple calls
114
+ view.destroy();
115
+ return;
116
+ }
117
+ }
118
+ }
119
+ });
120
+ }
121
+ }
122
+ else {
123
+ this.view = new DummyEditorView({
124
+ state: this.state,
125
+ dispatchTransaction: (tx) => this.dispatchTransaction(tx),
126
+ });
107
127
  }
128
+ const event = new CustomEvent('doc:loaded', {
129
+ detail: {
130
+ editor: this,
131
+ doc,
132
+ },
133
+ });
134
+ this.dispatchEvent(event);
108
135
  }
109
136
  dispatchTransaction(transaction) {
110
137
  this.state = this.state.apply(transaction);
@@ -118,6 +145,14 @@ export class CoreEditor extends EventTarget {
118
145
  });
119
146
  this.dispatchEvent(event);
120
147
  }
148
+ if (transaction.docChanged) {
149
+ const event = new CustomEvent('changed', {
150
+ detail: {
151
+ editor: this,
152
+ },
153
+ });
154
+ this.dispatchEvent(event);
155
+ }
121
156
  }
122
157
  setupPlugins() {
123
158
  this.state = this.state.reconfigure({
@@ -130,25 +165,43 @@ export class CoreEditor extends EventTarget {
130
165
  });
131
166
  }
132
167
  }
133
- setDocument(content, mediaType) {
134
- if (!content) {
135
- content = {
136
- type: this.extensionManager.schema.topNodeType.name,
137
- content: this.extensionManager.schema.topNodeType.spec.EMPTY_DOC.content,
138
- };
139
- mediaType = undefined;
140
- }
141
- let doc;
142
- if (mediaType) {
143
- const converter = this.extensionManager.converters[mediaType];
144
- if (converter) {
145
- doc = converter.toDoc(content);
146
- }
168
+ clearDocument() {
169
+ const content = {
170
+ type: this.extensionManager.schema.topNodeType.name,
171
+ content: this.extensionManager.schema.topNodeType.spec.EMPTY_DOC.content,
172
+ };
173
+ this.setDocument(content);
174
+ }
175
+ setDocument(content) {
176
+ let doc = createNodeFromObject(content, this.schema, {
177
+ errorOnInvalidContent: true,
178
+ });
179
+ doc = ensureDocSchema(doc, this.schema);
180
+ this.state = EditorState.create({
181
+ doc,
182
+ plugins: this.state.plugins,
183
+ storedMarks: this.state.storedMarks,
184
+ });
185
+ if (this.view) {
186
+ this.view.updateState(this.state);
147
187
  }
148
- else {
149
- doc = createNodeFromContent(content, this.schema);
188
+ const event = new CustomEvent('doc:loaded', {
189
+ detail: {
190
+ editor: this,
191
+ doc,
192
+ },
193
+ });
194
+ this.dispatchEvent(event);
195
+ }
196
+ getDocument() {
197
+ return this.state.doc;
198
+ }
199
+ async loadDocument(mediaType, content) {
200
+ const converter = this.extensionManager.converters[mediaType];
201
+ if (!converter) {
202
+ throw new Error('Converter not found for: ' + mediaType);
150
203
  }
151
- ensureDocSchema(doc, this.schema);
204
+ const doc = await converter.toDoc(content);
152
205
  this.state = EditorState.create({
153
206
  doc,
154
207
  plugins: this.state.plugins,
@@ -165,19 +218,14 @@ export class CoreEditor extends EventTarget {
165
218
  });
166
219
  this.dispatchEvent(event);
167
220
  }
168
- getDocument(mediaType) {
169
- if (mediaType) {
170
- const converter = this.extensionManager.converters[mediaType];
171
- if (converter) {
172
- const json = this.state.doc.toJSON();
173
- const clonedDoc = ProseMirrorNode.fromJSON(this.state.schema, json);
174
- return converter.fromDoc(clonedDoc);
175
- }
176
- if (mediaType === 'text/json') {
177
- return this.getJSON();
178
- }
221
+ async saveDocument(mediaType) {
222
+ const converter = this.extensionManager.converters[mediaType];
223
+ if (!converter) {
224
+ throw new Error('Converter not found for: ' + mediaType);
179
225
  }
180
- return this.state.doc;
226
+ const json = this.state.doc.toJSON();
227
+ const clonedDoc = ProseMirrorNode.fromJSON(this.state.schema, json);
228
+ return await converter.fromDoc(clonedDoc);
181
229
  }
182
230
  getJSON() {
183
231
  return this.state.doc.toJSON();
@@ -185,7 +233,7 @@ export class CoreEditor extends EventTarget {
185
233
  clone(options = {}) {
186
234
  return new CoreEditor({
187
235
  ...options,
188
- extensions: [...this.options.extensions],
236
+ extensions: [...(this.config.extensions || [])],
189
237
  });
190
238
  }
191
239
  debug(doc) {
@@ -194,4 +242,11 @@ export class CoreEditor extends EventTarget {
194
242
  }
195
243
  console.debug(nodeToTreeString(doc));
196
244
  }
245
+ destroy() {
246
+ const event = new CustomEvent('beforeDestroy', {
247
+ detail: {},
248
+ });
249
+ this.dispatchEvent(event);
250
+ this.view.destroy();
251
+ }
197
252
  }
@@ -0,0 +1,60 @@
1
+ import { EditorState, Plugin, Transaction } from 'prosemirror-state';
2
+ import { Mark, Node } from 'prosemirror-model';
3
+ import { EditorView, MarkView, NodeView } from 'prosemirror-view';
4
+ import { Decoration, DecorationSource } from 'prosemirror-view';
5
+ export declare class DummyEditorView {
6
+ private _props;
7
+ private directPlugins;
8
+ private nodeViews;
9
+ private prevDirectPlugins;
10
+ private pluginViews;
11
+ state: EditorState;
12
+ constructor(props: DirectEditorProps);
13
+ editable: boolean;
14
+ get composing(): boolean;
15
+ get dom(): {
16
+ addEventListener(): void;
17
+ removeEventListener(): void;
18
+ };
19
+ get props(): DirectEditorProps;
20
+ update(props: DirectEditorProps): void;
21
+ setProps(props: Partial<DirectEditorProps>): void;
22
+ updateState(state: EditorState): void;
23
+ private updateStateInner;
24
+ scrollToSelection(): void;
25
+ private destroyPluginViews;
26
+ private updatePluginViews;
27
+ someProp<PropName extends keyof EditorProps, Result>(propName: PropName, f: (value: NonNullable<EditorProps[PropName]>) => Result): Result | undefined;
28
+ someProp<PropName extends keyof EditorProps>(propName: PropName): NonNullable<EditorProps[PropName]> | undefined;
29
+ hasFocus(): boolean;
30
+ focus(): void;
31
+ destroy(): void;
32
+ get isDestroyed(): boolean;
33
+ dispatchEvent(event: Event): void;
34
+ dispatch: (tr: Transaction) => void;
35
+ }
36
+ export type NodeViewConstructor = (node: Node, view: EditorView, getPos: () => number | undefined, decorations: readonly Decoration[], innerDecorations: DecorationSource) => NodeView;
37
+ export type MarkViewConstructor = (mark: Mark, view: EditorView, inline: boolean) => MarkView;
38
+ export interface DOMEventMap extends HTMLElementEventMap {
39
+ [event: string]: any;
40
+ }
41
+ export interface EditorProps<P = any> {
42
+ nodeViews?: {
43
+ [node: string]: NodeViewConstructor;
44
+ };
45
+ markViews?: {
46
+ [mark: string]: MarkViewConstructor;
47
+ };
48
+ editable?: (this: P, state: EditorState) => boolean;
49
+ attributes?: {
50
+ [name: string]: string;
51
+ } | ((state: EditorState) => {
52
+ [name: string]: string;
53
+ });
54
+ }
55
+ export interface DirectEditorProps extends EditorProps {
56
+ state: EditorState;
57
+ plugins?: readonly Plugin[];
58
+ dispatchTransaction?: (tr: Transaction) => void;
59
+ }
60
+ //# sourceMappingURL=DummyEditorView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DummyEditorView.d.ts","sourceRoot":"","sources":["../../../src/editor/src/DummyEditorView.ts"],"names":[],"mappings":"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"}