@kerebron/extension-codemirror 0.2.0 → 0.3.0

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 (96) hide show
  1. package/README.md +4 -3
  2. package/esm/editor/src/CoreEditor.d.ts +31 -0
  3. package/esm/editor/src/CoreEditor.d.ts.map +1 -0
  4. package/esm/editor/src/CoreEditor.js +198 -0
  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 +26 -0
  9. package/esm/editor/src/Extension.d.ts.map +1 -0
  10. package/esm/editor/src/Extension.js +33 -0
  11. package/esm/editor/src/ExtensionManager.d.ts +33 -0
  12. package/esm/editor/src/ExtensionManager.d.ts.map +1 -0
  13. package/esm/editor/src/ExtensionManager.js +272 -0
  14. package/esm/editor/src/Mark.d.ts +20 -0
  15. package/esm/editor/src/Mark.d.ts.map +1 -0
  16. package/esm/editor/src/Mark.js +40 -0
  17. package/esm/editor/src/Node.d.ts +29 -0
  18. package/esm/editor/src/Node.d.ts.map +1 -0
  19. package/esm/editor/src/Node.js +49 -0
  20. package/esm/editor/src/commands/CommandManager.d.ts +16 -0
  21. package/esm/editor/src/commands/CommandManager.d.ts.map +1 -0
  22. package/esm/editor/src/commands/CommandManager.js +61 -0
  23. package/esm/editor/src/commands/createChainableState.d.ts +3 -0
  24. package/esm/editor/src/commands/createChainableState.d.ts.map +1 -0
  25. package/esm/editor/src/commands/createChainableState.js +29 -0
  26. package/esm/editor/src/commands/mod.d.ts +55 -0
  27. package/esm/editor/src/commands/mod.d.ts.map +1 -0
  28. package/esm/editor/src/commands/mod.js +883 -0
  29. package/esm/editor/src/mod.d.ts +7 -0
  30. package/esm/editor/src/mod.d.ts.map +1 -0
  31. package/esm/editor/src/mod.js +6 -0
  32. package/esm/editor/src/nodeToTreeString.d.ts +4 -0
  33. package/esm/editor/src/nodeToTreeString.d.ts.map +1 -0
  34. package/esm/editor/src/nodeToTreeString.js +58 -0
  35. package/esm/editor/src/plugins/input-rules/InputRulesPlugin.d.ts +23 -0
  36. package/esm/editor/src/plugins/input-rules/InputRulesPlugin.d.ts.map +1 -0
  37. package/esm/editor/src/plugins/input-rules/InputRulesPlugin.js +163 -0
  38. package/esm/editor/src/plugins/input-rules/mod.d.ts +3 -0
  39. package/esm/editor/src/plugins/input-rules/mod.d.ts.map +1 -0
  40. package/esm/editor/src/plugins/input-rules/mod.js +2 -0
  41. package/esm/editor/src/plugins/input-rules/rulebuilders.d.ts +5 -0
  42. package/esm/editor/src/plugins/input-rules/rulebuilders.d.ts.map +1 -0
  43. package/esm/editor/src/plugins/input-rules/rulebuilders.js +50 -0
  44. package/esm/editor/src/plugins/keymap/keymap.d.ts +11 -0
  45. package/esm/editor/src/plugins/keymap/keymap.d.ts.map +1 -0
  46. package/esm/editor/src/plugins/keymap/keymap.js +125 -0
  47. package/esm/editor/src/plugins/keymap/w3c-keyname.d.ts +4 -0
  48. package/esm/editor/src/plugins/keymap/w3c-keyname.d.ts.map +1 -0
  49. package/esm/editor/src/plugins/keymap/w3c-keyname.js +124 -0
  50. package/esm/editor/src/types.d.ts +34 -0
  51. package/esm/editor/src/types.d.ts.map +1 -0
  52. package/esm/editor/src/types.js +1 -0
  53. package/esm/editor/src/utilities/createNodeFromContent.d.ts +9 -0
  54. package/esm/editor/src/utilities/createNodeFromContent.d.ts.map +1 -0
  55. package/esm/editor/src/utilities/createNodeFromContent.js +32 -0
  56. package/esm/editor/src/utilities/getHtmlAttributes.d.ts +9 -0
  57. package/esm/editor/src/utilities/getHtmlAttributes.d.ts.map +1 -0
  58. package/esm/editor/src/utilities/getHtmlAttributes.js +47 -0
  59. package/esm/editor/src/utilities/mod.d.ts +3 -0
  60. package/esm/editor/src/utilities/mod.d.ts.map +1 -0
  61. package/esm/editor/src/utilities/mod.js +2 -0
  62. package/esm/extension-codemirror/src/ExtensionCodeMirror.d.ts +5 -0
  63. package/esm/extension-codemirror/src/ExtensionCodeMirror.d.ts.map +1 -0
  64. package/esm/extension-codemirror/src/ExtensionCodeMirror.js +4 -0
  65. package/esm/extension-codemirror/src/NodeCodeMirror.d.ts +16 -0
  66. package/esm/extension-codemirror/src/NodeCodeMirror.d.ts.map +1 -0
  67. package/esm/extension-codemirror/src/NodeCodeMirror.js +186 -0
  68. package/esm/extension-codemirror/src/NodeDocumentCode.d.ts +7 -0
  69. package/esm/extension-codemirror/src/NodeDocumentCode.d.ts.map +1 -0
  70. package/esm/extension-codemirror/src/NodeDocumentCode.js +37 -0
  71. package/esm/extension-codemirror/src/codeMirrorBlockNodeView.d.ts +6 -0
  72. package/esm/extension-codemirror/src/codeMirrorBlockNodeView.d.ts.map +1 -0
  73. package/esm/extension-codemirror/src/codeMirrorBlockNodeView.js +267 -0
  74. package/esm/extension-codemirror/src/defaults.d.ts +6 -0
  75. package/esm/extension-codemirror/src/defaults.d.ts.map +1 -0
  76. package/esm/extension-codemirror/src/defaults.js +57 -0
  77. package/esm/extension-codemirror/src/languageLoaders.d.ts +5 -0
  78. package/esm/extension-codemirror/src/languageLoaders.d.ts.map +1 -0
  79. package/esm/extension-codemirror/src/languageLoaders.js +113 -0
  80. package/esm/extension-codemirror/src/languages.d.ts +109 -0
  81. package/esm/extension-codemirror/src/languages.d.ts.map +1 -0
  82. package/esm/extension-codemirror/src/languages.js +110 -0
  83. package/esm/extension-codemirror/src/types.d.ts +30 -0
  84. package/esm/extension-codemirror/src/types.d.ts.map +1 -0
  85. package/esm/extension-codemirror/src/types.js +1 -0
  86. package/esm/extension-codemirror/src/utils.d.ts +39 -0
  87. package/esm/extension-codemirror/src/utils.d.ts.map +1 -0
  88. package/esm/extension-codemirror/src/utils.js +199 -0
  89. package/esm/extension-codemirror/src/y-remote-selections.d.ts +15 -0
  90. package/esm/extension-codemirror/src/y-remote-selections.d.ts.map +1 -0
  91. package/esm/extension-codemirror/src/y-remote-selections.js +273 -0
  92. package/esm/extension-codemirror/src/y-sync.d.ts +11 -0
  93. package/esm/extension-codemirror/src/y-sync.d.ts.map +1 -0
  94. package/esm/extension-codemirror/src/y-sync.js +29 -0
  95. package/esm/package.json +3 -0
  96. package/package.json +2 -6
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/editor/src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,IAAI,eAAe,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC;AACnD,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG;IAC7C,QAAQ,EAAE,KAAK,CAAC,iBAAiB,GAAG,MAAM,CAAC,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,WAAW,GAAG,WAAW,EAAE,GAAG,IAAI,CAAC;AAEzD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,YAAY,CAAC;IAC3B,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,EAAE,CAAC;IACJ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI;IACzB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,CAAC,CAAC;IACtC,OAAO,EAAE,CAAC,CAAC;IACX,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,CAAC,CAAC;CACtC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,9 @@
1
+ import { Fragment, Node as ProseMirrorNode, Schema } from 'prosemirror-model';
2
+ import type { JSONContent } from '../types.js';
3
+ export type CreateNodeFromContentOptions = {
4
+ errorOnInvalidContent?: boolean;
5
+ };
6
+ export declare function createNodeFromObject(content: JSONContent | ProseMirrorNode | Fragment, schema: Schema, options?: CreateNodeFromContentOptions): ProseMirrorNode;
7
+ export declare function createNodeFromArray(content: JSONContent[], schema: Schema): Fragment;
8
+ export declare function createNodeFromContent(content: JSONContent | ProseMirrorNode | Fragment, schema: Schema, options?: CreateNodeFromContentOptions): ProseMirrorNode | Fragment;
9
+ //# sourceMappingURL=createNodeFromContent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createNodeFromContent.d.ts","sourceRoot":"","sources":["../../../../src/editor/src/utilities/createNodeFromContent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,IAAI,eAAe,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE9E,OAAO,KAAK,EAAW,WAAW,EAAE,MAAM,aAAa,CAAC;AAExD,MAAM,MAAM,4BAA4B,GAAG;IACzC,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC,CAAC;AAEF,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,WAAW,GAAG,eAAe,GAAG,QAAQ,EACjD,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,4BAA4B,GACrC,eAAe,CA0BjB;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,WAAW,EAAE,EACtB,MAAM,EAAE,MAAM,GACb,QAAQ,CAIV;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,WAAW,GAAG,eAAe,GAAG,QAAQ,EACjD,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,4BAA4B,GACrC,eAAe,GAAG,QAAQ,CAY5B"}
@@ -0,0 +1,32 @@
1
+ import { Fragment, Node as ProseMirrorNode } from 'prosemirror-model';
2
+ export function createNodeFromObject(content, schema, options) {
3
+ try {
4
+ const node = schema.nodeFromJSON(content);
5
+ if (options?.errorOnInvalidContent) {
6
+ node.check();
7
+ }
8
+ return node;
9
+ }
10
+ catch (error) {
11
+ if (options?.errorOnInvalidContent) {
12
+ throw new Error('Invalid JSON content', {
13
+ cause: error,
14
+ });
15
+ }
16
+ console.warn('Invalid content.', 'Passed value:', content, 'Error:', error);
17
+ return schema.topNodeType.createAndFill(null, []);
18
+ }
19
+ }
20
+ export function createNodeFromArray(content, schema) {
21
+ return Fragment.fromArray(content.map((item) => schema.nodeFromJSON(item)));
22
+ }
23
+ export function createNodeFromContent(content, schema, options) {
24
+ if (content instanceof ProseMirrorNode || content instanceof Fragment) {
25
+ return content;
26
+ }
27
+ const isJSONContent = typeof content === 'object' && content !== null;
28
+ if (isJSONContent) {
29
+ return createNodeFromObject(content, schema, options);
30
+ }
31
+ return schema.topNodeType.createAndFill(null, []);
32
+ }
@@ -0,0 +1,9 @@
1
+ import type { MarkSpec, Node as ProseMirrorNode, NodeSpec } from 'prosemirror-model';
2
+ import type { Mark } from '../Mark.js';
3
+ import type { Node } from '../Node.js';
4
+ type MarkOfNode = Mark | Node;
5
+ export declare function getHtmlAttributes(extension: MarkOfNode, node: ProseMirrorNode): Record<string, any>;
6
+ export declare function setHtmlAttributes(extension: MarkOfNode, element: HTMLElement): Record<string, any>;
7
+ export declare function addAttributesToSchema(spec: MarkSpec | NodeSpec, extension: MarkOfNode): void;
8
+ export {};
9
+ //# sourceMappingURL=getHtmlAttributes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getHtmlAttributes.d.ts","sourceRoot":"","sources":["../../../../src/editor/src/utilities/getHtmlAttributes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,IAAI,IAAI,eAAe,EACvB,QAAQ,EACT,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,KAAK,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC;AAE9B,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,UAAU,EACrB,IAAI,EAAE,eAAe,uBAmBtB;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,uBAc5E;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,QAAQ,GAAG,QAAQ,EACzB,SAAS,EAAE,UAAU,QAetB"}
@@ -0,0 +1,47 @@
1
+ export function getHtmlAttributes(extension, node) {
2
+ const attrs = {};
3
+ if (extension.attributes) {
4
+ for (const [key, value] of Object.entries(extension.attributes)) {
5
+ if ('undefined' !== typeof node.attrs[key]) {
6
+ attrs[key] = node.attrs[key];
7
+ }
8
+ else {
9
+ if (value.toDom) {
10
+ attrs[key] = value.toDom(node);
11
+ }
12
+ else {
13
+ attrs[key] = value.default;
14
+ }
15
+ }
16
+ }
17
+ }
18
+ return attrs;
19
+ }
20
+ export function setHtmlAttributes(extension, element) {
21
+ const attrs = {};
22
+ if (extension.attributes) {
23
+ for (const [key, value] of Object.entries(extension.attributes)) {
24
+ if (value.fromDom) {
25
+ attrs[key] = value.fromDom(element);
26
+ }
27
+ else {
28
+ attrs[key] = value.default;
29
+ }
30
+ }
31
+ }
32
+ return attrs;
33
+ }
34
+ export function addAttributesToSchema(spec, extension) {
35
+ const attrs = {};
36
+ if (extension.attributes) {
37
+ if (!spec.attrs) {
38
+ spec.attrs = {};
39
+ }
40
+ for (const [key, value] of Object.entries(extension.attributes)) {
41
+ spec.attrs[key] = value;
42
+ if (!value.toDom) {
43
+ value.toDom = (node) => node.attrs[key];
44
+ }
45
+ }
46
+ }
47
+ }
@@ -0,0 +1,3 @@
1
+ export * from './getHtmlAttributes.js';
2
+ export * from './createNodeFromContent.js';
3
+ //# sourceMappingURL=mod.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../../src/editor/src/utilities/mod.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './getHtmlAttributes.js';
2
+ export * from './createNodeFromContent.js';
@@ -0,0 +1,5 @@
1
+ export * from './NodeDocumentCode.js';
2
+ export * from './NodeCodeMirror.js';
3
+ export declare class ExtensionCodeMirror {
4
+ }
5
+ //# sourceMappingURL=ExtensionCodeMirror.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExtensionCodeMirror.d.ts","sourceRoot":"","sources":["../../../src/extension-codemirror/src/ExtensionCodeMirror.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AAEpC,qBAAa,mBAAmB;CAC/B"}
@@ -0,0 +1,4 @@
1
+ export * from './NodeDocumentCode.js';
2
+ export * from './NodeCodeMirror.js';
3
+ export class ExtensionCodeMirror {
4
+ }
@@ -0,0 +1,16 @@
1
+ import { Plugin, PluginKey } from 'prosemirror-state';
2
+ import type { NodeSpec, NodeType, Schema } from 'prosemirror-model';
3
+ import { Converter, type CoreEditor, Node } from '../../editor/src/mod.js';
4
+ import { type CommandFactories, type CommandShortcuts } from '../../editor/src/commands/mod.js';
5
+ import { type InputRule } from '../../editor/src/plugins/input-rules/mod.js';
6
+ export declare const codeMirrorBlockKey: PluginKey<any>;
7
+ export declare class NodeCodeMirror extends Node {
8
+ name: string;
9
+ getConverters(editor: CoreEditor, schema: Schema): Record<string, Converter>;
10
+ getNodeSpec(): NodeSpec;
11
+ getInputRules(type: NodeType): InputRule[];
12
+ getCommandFactories(editor: CoreEditor, type: NodeType): Partial<CommandFactories>;
13
+ getKeyboardShortcuts(): Partial<CommandShortcuts>;
14
+ getProseMirrorPlugins(editor: CoreEditor): Plugin[];
15
+ }
16
+ //# sourceMappingURL=NodeCodeMirror.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeCodeMirror.d.ts","sourceRoot":"","sources":["../../../src/extension-codemirror/src/NodeCodeMirror.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,MAAM,EAAE,SAAS,EAAa,MAAM,mBAAmB,CAAC;AAC9E,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,EAAE,SAAS,EAAE,KAAK,UAAU,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EAEtB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,KAAK,SAAS,EAEf,MAAM,6CAA6C,CAAC;AAOrD,eAAO,MAAM,kBAAkB,gBAAoC,CAAC;AAyCpE,qBAAa,cAAe,SAAQ,IAAI;IAC7B,IAAI,SAAgB;IAGpB,aAAa,CACpB,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,MAAM,GACb,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC;IAgDnB,WAAW,IAAI,QAAQ;IA0CvB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,EAAE;IAQ1C,mBAAmB,CAC1B,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,QAAQ,GACb,OAAO,CAAC,gBAAgB,CAAC;IAUnB,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAUjD,qBAAqB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,EAAE;CA8B7D"}
@@ -0,0 +1,186 @@
1
+ import { Plugin, PluginKey, Selection } from 'prosemirror-state';
2
+ import { Node } from '../../editor/src/mod.js';
3
+ import { setBlockType, } from '../../editor/src/commands/mod.js';
4
+ import { textblockTypeInputRule, } from '../../editor/src/plugins/input-rules/mod.js';
5
+ import { codeMirrorBlockNodeView } from './codeMirrorBlockNodeView.js';
6
+ import { defaultSettings } from './defaults.js';
7
+ import languageLoaders, { legacyLanguageLoaders } from './languageLoaders.js';
8
+ import { createNodeFromObject } from '../../editor/src/utilities/mod.js';
9
+ export const codeMirrorBlockKey = new PluginKey('codemirror-block');
10
+ function arrowHandler(dir) {
11
+ return (state, dispatch, view) => {
12
+ if (state.selection.empty && view.endOfTextblock(dir)) {
13
+ let side = dir == 'left' || dir == 'up' ? -1 : 1;
14
+ let $head = state.selection.$head;
15
+ let nextPos = Selection.near(state.doc.resolve(side > 0 ? $head.after() : $head.before()), side);
16
+ if (nextPos.$head && nextPos.$head.parent.type.name == 'code_block') {
17
+ dispatch(state.tr.setSelection(nextPos));
18
+ return true;
19
+ }
20
+ }
21
+ return false;
22
+ };
23
+ }
24
+ const LANGS = [
25
+ 'diff',
26
+ 'dockerfile',
27
+ 'http',
28
+ 'nginx',
29
+ 'properties',
30
+ 'shell',
31
+ 'toml',
32
+ 'yaml',
33
+ 'sql',
34
+ 'javascript',
35
+ 'cpp',
36
+ 'css',
37
+ 'xml',
38
+ 'java',
39
+ 'json',
40
+ 'markdown',
41
+ 'rust',
42
+ 'html',
43
+ ];
44
+ export class NodeCodeMirror extends Node {
45
+ constructor() {
46
+ super(...arguments);
47
+ Object.defineProperty(this, "name", {
48
+ enumerable: true,
49
+ configurable: true,
50
+ writable: true,
51
+ value: 'code_block'
52
+ });
53
+ }
54
+ // requires = ['doc'];
55
+ getConverters(editor, schema) {
56
+ return {
57
+ 'text/code-only': {
58
+ fromDoc: async (document) => {
59
+ const retVal = [];
60
+ if (document.content) {
61
+ for (const node of document.content.toJSON()) {
62
+ if ('code_block' === node.type && Array.isArray(node.content)) {
63
+ for (const content of node.content) {
64
+ retVal.push(content.text);
65
+ }
66
+ }
67
+ }
68
+ }
69
+ return retVal.join('');
70
+ },
71
+ toDoc: async (buffer) => {
72
+ const content = {
73
+ 'type': 'doc_code',
74
+ 'content': [
75
+ {
76
+ 'type': 'code_block',
77
+ 'attrs': {
78
+ 'lang': schema.topNodeType.spec.defaultAttrs?.lang,
79
+ },
80
+ 'content': [
81
+ {
82
+ 'type': 'text',
83
+ 'text': code,
84
+ },
85
+ ],
86
+ },
87
+ ],
88
+ };
89
+ return createNodeFromObject(content, schema, {
90
+ slice: false,
91
+ errorOnInvalidContent: false,
92
+ });
93
+ },
94
+ },
95
+ };
96
+ }
97
+ getNodeSpec() {
98
+ const langs = this.config.languageWhitelist || LANGS;
99
+ return {
100
+ content: 'text*',
101
+ marks: '',
102
+ group: 'block',
103
+ code: true,
104
+ defining: true,
105
+ parseDOM: [
106
+ {
107
+ tag: 'pre',
108
+ preserveWhitespace: 'full',
109
+ getAttrs(dom) {
110
+ let lang = dom.getAttribute('lang');
111
+ if (!lang) {
112
+ for (const className of dom.classList) {
113
+ if (className.startsWith('lang-') &&
114
+ langs.indexOf(className.substring('lang-'.length)) > -1) {
115
+ lang = className.substring('lang-'.length);
116
+ break;
117
+ }
118
+ }
119
+ }
120
+ return {
121
+ lang,
122
+ };
123
+ },
124
+ },
125
+ ],
126
+ attrs: { lang: { default: null } },
127
+ toDOM(node) {
128
+ const { lang } = node.attrs;
129
+ return ['pre', { lang }, ['code', 0]];
130
+ },
131
+ };
132
+ }
133
+ getInputRules(type) {
134
+ /// Given a code block node type, returns an input rule that turns a
135
+ /// textblock starting with three backticks into a code block.
136
+ return [
137
+ textblockTypeInputRule(/^```$/, type),
138
+ ];
139
+ }
140
+ getCommandFactories(editor, type) {
141
+ return {
142
+ 'setCodeBlock': (lang) => setBlockType(type, { lang }),
143
+ ArrowLeft: () => arrowHandler('left'),
144
+ ArrowRight: () => arrowHandler('right'),
145
+ ArrowUp: () => arrowHandler('up'),
146
+ ArrowDown: () => arrowHandler('down'),
147
+ };
148
+ }
149
+ getKeyboardShortcuts() {
150
+ return {
151
+ 'Shift-Ctrl-"': 'setCodeBlock',
152
+ 'ArrowLeft': 'ArrowLeft',
153
+ 'ArrowRight': 'ArrowRight',
154
+ 'ArrowUp': 'ArrowUp',
155
+ 'ArrowDown': 'ArrowDown',
156
+ };
157
+ }
158
+ getProseMirrorPlugins(editor) {
159
+ const codeMirrorBlockPlugin = (settings) => new Plugin({
160
+ key: codeMirrorBlockKey,
161
+ props: {
162
+ nodeViews: {
163
+ [this.name]: codeMirrorBlockNodeView(settings),
164
+ },
165
+ },
166
+ });
167
+ return [
168
+ codeMirrorBlockPlugin({
169
+ provider: this.config.provider,
170
+ languageWhitelist: this.config.languageWhitelist || LANGS,
171
+ shadowRoot: this.config.shadowRoot,
172
+ ...defaultSettings,
173
+ readOnly: this.config.readOnly,
174
+ languageLoaders: { ...languageLoaders, ...legacyLanguageLoaders },
175
+ undo: () => {
176
+ editor.chain().undo().run();
177
+ },
178
+ redo: () => {
179
+ editor.chain().redo().run();
180
+ },
181
+ theme: [...(this.config.theme || [])],
182
+ }),
183
+ // keymap(codeBlockKeymap),
184
+ ];
185
+ }
186
+ }
@@ -0,0 +1,7 @@
1
+ import { NodeSpec } from 'prosemirror-model';
2
+ import { Node } from '../../editor/src/mod.js';
3
+ export declare class NodeDocumentCode extends Node {
4
+ name: string;
5
+ getNodeSpec(): NodeSpec;
6
+ }
7
+ //# sourceMappingURL=NodeDocumentCode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeDocumentCode.d.ts","sourceRoot":"","sources":["../../../src/extension-codemirror/src/NodeDocumentCode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAE/C,qBAAa,gBAAiB,SAAQ,IAAI;IAC/B,IAAI,SAAc;IAElB,WAAW,IAAI,QAAQ;CAyBjC"}
@@ -0,0 +1,37 @@
1
+ import { Node } from '../../editor/src/mod.js';
2
+ export class NodeDocumentCode extends Node {
3
+ constructor() {
4
+ super(...arguments);
5
+ Object.defineProperty(this, "name", {
6
+ enumerable: true,
7
+ configurable: true,
8
+ writable: true,
9
+ value: 'doc_code'
10
+ });
11
+ }
12
+ getNodeSpec() {
13
+ return {
14
+ content: 'code_block',
15
+ defaultAttrs: {
16
+ 'lang': this.config.lang || null,
17
+ },
18
+ EMPTY_DOC: {
19
+ 'type': this.name,
20
+ 'content': [
21
+ {
22
+ 'type': 'code_block',
23
+ 'attrs': {
24
+ 'lang': this.config.lang || null,
25
+ },
26
+ 'content': [
27
+ // {
28
+ // "type": "text",
29
+ // "text": ""
30
+ // }
31
+ ],
32
+ },
33
+ ],
34
+ },
35
+ };
36
+ }
37
+ }
@@ -0,0 +1,6 @@
1
+ import { Node } from 'prosemirror-model';
2
+ import { EditorView as PMEditorView, NodeView } from 'prosemirror-view';
3
+ import { CodeBlockSettings } from './types.js';
4
+ export declare const themeCallbacks: Array<(theme: string) => void>;
5
+ export declare const codeMirrorBlockNodeView: (settings: CodeBlockSettings) => (pmNode: Node, view: PMEditorView, getPos: (() => number) | boolean) => NodeView;
6
+ //# sourceMappingURL=codeMirrorBlockNodeView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codeMirrorBlockNodeView.d.ts","sourceRoot":"","sources":["../../../src/extension-codemirror/src/codeMirrorBlockNodeView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAEL,UAAU,IAAI,YAAY,EAC1B,QAAQ,EACT,MAAM,kBAAkB,CAAC;AA0C1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAO/C,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAM,CAAC;AA0QjE,eAAO,MAAM,uBAAuB,EAAE,CACpC,QAAQ,EAAE,iBAAiB,KACxB,CACH,MAAM,EAAE,IAAI,EACZ,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,CAAC,MAAM,MAAM,CAAC,GAAG,OAAO,KAC7B,QAQJ,CAAC"}