@kerebron/extension-basic-editor 0.4.27 → 0.4.28

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 (146) hide show
  1. package/esm/ExtensionBaseKeymap.d.ts +7 -0
  2. package/esm/ExtensionBaseKeymap.d.ts.map +1 -0
  3. package/esm/ExtensionBaseKeymap.js +55 -0
  4. package/esm/ExtensionBasicCodeEditor.d.ts +11 -0
  5. package/esm/ExtensionBasicCodeEditor.d.ts.map +1 -0
  6. package/esm/ExtensionBasicCodeEditor.js +61 -0
  7. package/esm/ExtensionBasicEditor.d.ts +49 -0
  8. package/esm/ExtensionBasicEditor.d.ts.map +1 -0
  9. package/esm/ExtensionBasicEditor.js +94 -0
  10. package/esm/ExtensionDropcursor.d.ts +19 -0
  11. package/esm/ExtensionDropcursor.d.ts.map +1 -0
  12. package/esm/ExtensionDropcursor.js +186 -0
  13. package/esm/ExtensionGapcursor.d.ts +32 -0
  14. package/esm/ExtensionGapcursor.d.ts.map +1 -0
  15. package/esm/ExtensionGapcursor.js +249 -0
  16. package/esm/ExtensionHistory.d.ts +14 -0
  17. package/esm/ExtensionHistory.d.ts.map +1 -0
  18. package/esm/ExtensionHistory.js +34 -0
  19. package/esm/ExtensionHtml.d.ts +15 -0
  20. package/esm/ExtensionHtml.d.ts.map +1 -0
  21. package/esm/ExtensionHtml.js +99 -0
  22. package/esm/ExtensionMediaUpload.d.ts +24 -0
  23. package/esm/ExtensionMediaUpload.d.ts.map +1 -0
  24. package/esm/ExtensionMediaUpload.js +167 -0
  25. package/esm/ExtensionSelection.d.ts +11 -0
  26. package/esm/ExtensionSelection.d.ts.map +1 -0
  27. package/esm/ExtensionSelection.js +229 -0
  28. package/esm/ExtensionTextAlign.d.ts +11 -0
  29. package/esm/ExtensionTextAlign.d.ts.map +1 -0
  30. package/esm/ExtensionTextAlign.js +39 -0
  31. package/esm/MarkBookmark.d.ts +8 -0
  32. package/esm/MarkBookmark.d.ts.map +1 -0
  33. package/esm/MarkBookmark.js +16 -0
  34. package/esm/MarkChange.d.ts +8 -0
  35. package/esm/MarkChange.d.ts.map +1 -0
  36. package/esm/MarkChange.js +13 -0
  37. package/esm/MarkCode.d.ts +11 -0
  38. package/esm/MarkCode.d.ts.map +1 -0
  39. package/esm/MarkCode.js +23 -0
  40. package/esm/MarkHighlight.d.ts +8 -0
  41. package/esm/MarkHighlight.d.ts.map +1 -0
  42. package/esm/MarkHighlight.js +35 -0
  43. package/esm/MarkItalic.d.ts +11 -0
  44. package/esm/MarkItalic.d.ts.map +1 -0
  45. package/esm/MarkItalic.js +29 -0
  46. package/esm/MarkLink.d.ts +8 -0
  47. package/esm/MarkLink.d.ts.map +1 -0
  48. package/esm/MarkLink.js +29 -0
  49. package/esm/MarkStrike.d.ts +11 -0
  50. package/esm/MarkStrike.d.ts.map +1 -0
  51. package/esm/MarkStrike.js +26 -0
  52. package/esm/MarkStrong.d.ts +11 -0
  53. package/esm/MarkStrong.d.ts.map +1 -0
  54. package/esm/MarkStrong.js +38 -0
  55. package/esm/MarkSubscript.d.ts +11 -0
  56. package/esm/MarkSubscript.d.ts.map +1 -0
  57. package/esm/MarkSubscript.js +30 -0
  58. package/esm/MarkSuperscript.d.ts +11 -0
  59. package/esm/MarkSuperscript.d.ts.map +1 -0
  60. package/esm/MarkSuperscript.js +30 -0
  61. package/esm/MarkTextColor.d.ts +8 -0
  62. package/esm/MarkTextColor.d.ts.map +1 -0
  63. package/esm/MarkTextColor.js +27 -0
  64. package/esm/MarkUnderline.d.ts +11 -0
  65. package/esm/MarkUnderline.d.ts.map +1 -0
  66. package/esm/MarkUnderline.js +33 -0
  67. package/esm/NodeAside.d.ts +8 -0
  68. package/esm/NodeAside.d.ts.map +1 -0
  69. package/esm/NodeAside.js +16 -0
  70. package/esm/NodeBlockquote.d.ts +13 -0
  71. package/esm/NodeBlockquote.d.ts.map +1 -0
  72. package/esm/NodeBlockquote.js +34 -0
  73. package/esm/NodeBookmark.d.ts +8 -0
  74. package/esm/NodeBookmark.d.ts.map +1 -0
  75. package/esm/NodeBookmark.js +19 -0
  76. package/esm/NodeBulletList.d.ts +13 -0
  77. package/esm/NodeBulletList.d.ts.map +1 -0
  78. package/esm/NodeBulletList.js +34 -0
  79. package/esm/NodeCodeBlock.d.ts +9 -0
  80. package/esm/NodeCodeBlock.d.ts.map +1 -0
  81. package/esm/NodeCodeBlock.js +50 -0
  82. package/esm/NodeDefinitionDesc.d.ts +8 -0
  83. package/esm/NodeDefinitionDesc.d.ts.map +1 -0
  84. package/esm/NodeDefinitionDesc.js +16 -0
  85. package/esm/NodeDefinitionList.d.ts +13 -0
  86. package/esm/NodeDefinitionList.d.ts.map +1 -0
  87. package/esm/NodeDefinitionList.js +28 -0
  88. package/esm/NodeDefinitionTerm.d.ts +8 -0
  89. package/esm/NodeDefinitionTerm.d.ts.map +1 -0
  90. package/esm/NodeDefinitionTerm.js +16 -0
  91. package/esm/NodeDocument.d.ts +7 -0
  92. package/esm/NodeDocument.d.ts.map +1 -0
  93. package/esm/NodeDocument.js +19 -0
  94. package/esm/NodeDocumentCode.d.ts +7 -0
  95. package/esm/NodeDocumentCode.d.ts.map +1 -0
  96. package/esm/NodeDocumentCode.js +29 -0
  97. package/esm/NodeFrontmatter.d.ts +8 -0
  98. package/esm/NodeFrontmatter.d.ts.map +1 -0
  99. package/esm/NodeFrontmatter.js +16 -0
  100. package/esm/NodeHardBreak.d.ts +14 -0
  101. package/esm/NodeHardBreak.d.ts.map +1 -0
  102. package/esm/NodeHardBreak.js +67 -0
  103. package/esm/NodeHeading.d.ts +13 -0
  104. package/esm/NodeHeading.d.ts.map +1 -0
  105. package/esm/NodeHeading.js +49 -0
  106. package/esm/NodeHorizontalRule.d.ts +11 -0
  107. package/esm/NodeHorizontalRule.d.ts.map +1 -0
  108. package/esm/NodeHorizontalRule.js +29 -0
  109. package/esm/NodeImage.d.ts +8 -0
  110. package/esm/NodeImage.d.ts.map +1 -0
  111. package/esm/NodeImage.js +33 -0
  112. package/esm/NodeInlineShortCode.d.ts +11 -0
  113. package/esm/NodeInlineShortCode.d.ts.map +1 -0
  114. package/esm/NodeInlineShortCode.js +39 -0
  115. package/esm/NodeListItem.d.ts +14 -0
  116. package/esm/NodeListItem.d.ts.map +1 -0
  117. package/esm/NodeListItem.js +201 -0
  118. package/esm/NodeMath.d.ts +8 -0
  119. package/esm/NodeMath.d.ts.map +1 -0
  120. package/esm/NodeMath.js +99 -0
  121. package/esm/NodeOrderedList.d.ts +23 -0
  122. package/esm/NodeOrderedList.d.ts.map +1 -0
  123. package/esm/NodeOrderedList.js +52 -0
  124. package/esm/NodeParagraph.d.ts +11 -0
  125. package/esm/NodeParagraph.d.ts.map +1 -0
  126. package/esm/NodeParagraph.js +44 -0
  127. package/esm/NodeTaskItem.d.ts +24 -0
  128. package/esm/NodeTaskItem.d.ts.map +1 -0
  129. package/esm/NodeTaskItem.js +146 -0
  130. package/esm/NodeTaskList.d.ts +11 -0
  131. package/esm/NodeTaskList.d.ts.map +1 -0
  132. package/esm/NodeTaskList.js +25 -0
  133. package/esm/NodeText.d.ts +7 -0
  134. package/esm/NodeText.d.ts.map +1 -0
  135. package/esm/NodeText.js +9 -0
  136. package/esm/NodeVideo.d.ts +8 -0
  137. package/esm/NodeVideo.d.ts.map +1 -0
  138. package/esm/NodeVideo.js +45 -0
  139. package/esm/package.json +3 -0
  140. package/esm/remote-selection/ExtensionRemoteSelection.d.ts +24 -0
  141. package/esm/remote-selection/ExtensionRemoteSelection.d.ts.map +1 -0
  142. package/esm/remote-selection/ExtensionRemoteSelection.js +22 -0
  143. package/esm/remote-selection/remoteSelectionPlugin.d.ts +25 -0
  144. package/esm/remote-selection/remoteSelectionPlugin.d.ts.map +1 -0
  145. package/esm/remote-selection/remoteSelectionPlugin.js +96 -0
  146. package/package.json +2 -3
@@ -0,0 +1,7 @@
1
+ import { Extension } from '@kerebron/editor';
2
+ import { type CommandShortcuts } from '@kerebron/editor/commands';
3
+ export declare class ExtensionBaseKeymap extends Extension {
4
+ name: string;
5
+ getKeyboardShortcuts(): Partial<CommandShortcuts>;
6
+ }
7
+ //# sourceMappingURL=ExtensionBaseKeymap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExtensionBaseKeymap.d.ts","sourceRoot":"","sources":["../src/ExtensionBaseKeymap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AA4ClE,qBAAa,mBAAoB,SAAQ,SAAS;IAChD,IAAI,SAAiB;IAEZ,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,CAAC;CAe3D"}
@@ -0,0 +1,55 @@
1
+ import { Extension } from '@kerebron/editor';
2
+ /// A basic keymap containing bindings not specific to any schema.
3
+ /// Binds the following keys (when multiple commands are listed, they
4
+ /// are chained with [`chainCommands`](#commands.chainCommands)):
5
+ ///
6
+ /// * **Enter** to `newlineInCode`, `createParagraphNear`, `liftEmptyBlock`, `splitBlock`
7
+ /// * **Mod-Enter** to `exitCode`
8
+ /// * **Backspace** and **Mod-Backspace** to `deleteSelection`, `joinBackward`, `selectNodeBackward`
9
+ /// * **Delete** and **Mod-Delete** to `deleteSelection`, `joinForward`, `selectNodeForward`
10
+ /// * **Mod-Delete** to `deleteSelection`, `joinForward`, `selectNodeForward`
11
+ /// * **Mod-a** to `selectAll`
12
+ const pcBaseKeymap = {
13
+ 'Mod-Enter': 'exitCode',
14
+ 'Backspace': 'backspace',
15
+ 'Mod-Backspace': 'backspace',
16
+ 'Shift-Backspace': 'backspace',
17
+ 'Delete': 'del',
18
+ 'Mod-Delete': 'del',
19
+ 'Mod-a': 'selectAll',
20
+ };
21
+ /// A copy of `pcBaseKeymap` that also binds **Ctrl-h** like Backspace,
22
+ /// **Ctrl-d** like Delete, **Alt-Backspace** like Ctrl-Backspace, and
23
+ /// **Ctrl-Alt-Backspace**, **Alt-Delete**, and **Alt-d** like
24
+ /// Ctrl-Delete.
25
+ const macBaseKeymap = {
26
+ ...pcBaseKeymap,
27
+ 'Ctrl-h': pcBaseKeymap['Backspace'],
28
+ 'Alt-Backspace': pcBaseKeymap['Mod-Backspace'],
29
+ 'Ctrl-d': pcBaseKeymap['Delete'],
30
+ 'Ctrl-Alt-Backspace': pcBaseKeymap['Mod-Delete'],
31
+ 'Alt-Delete': pcBaseKeymap['Mod-Delete'],
32
+ 'Alt-d': pcBaseKeymap['Mod-Delete'],
33
+ 'Ctrl-a': 'selectTextblockStart',
34
+ 'Ctrl-e': 'selectTextblockEnd',
35
+ };
36
+ const mac = /(Mac|iPhone|iPod|iPad)/i.test(navigator?.platform);
37
+ const baseKeymap = mac
38
+ ? macBaseKeymap
39
+ : pcBaseKeymap;
40
+ export class ExtensionBaseKeymap extends Extension {
41
+ name = 'base-keymap';
42
+ getKeyboardShortcuts() {
43
+ const shortcuts = {
44
+ 'Enter': 'enter',
45
+ 'Alt-ArrowUp': 'joinUp',
46
+ 'Alt-ArrowDown': 'joinDown',
47
+ 'Mod-BracketLeft': 'lift',
48
+ 'Escape': 'selectParentNode',
49
+ };
50
+ for (const key in baseKeymap) {
51
+ shortcuts[key] = baseKeymap[key];
52
+ }
53
+ return shortcuts;
54
+ }
55
+ }
@@ -0,0 +1,11 @@
1
+ import { Node } from 'prosemirror-model';
2
+ import { AnyExtensionOrReq, Extension, RawTextResult } from '@kerebron/editor';
3
+ export declare class ExtensionBasicCodeEditor extends Extension {
4
+ name: string;
5
+ requires: AnyExtensionOrReq[];
6
+ constructor({ lang }: {
7
+ lang: string;
8
+ });
9
+ toRawText(doc: Node): RawTextResult;
10
+ }
11
+ //# sourceMappingURL=ExtensionBasicCodeEditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExtensionBasicCodeEditor.d.ts","sourceRoot":"","sources":["../src/ExtensionBasicCodeEditor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,OAAO,EACL,iBAAiB,EACjB,SAAS,EAET,aAAa,EACd,MAAM,kBAAkB,CAAC;AAW1B,qBAAa,wBAAyB,SAAQ,SAAS;IACrD,IAAI,SAAuB;IAC3B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;gBAElB,EAAE,IAAI,EAAE,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;IAetC,SAAS,CAAC,GAAG,EAAE,IAAI,GAAG,aAAa;CA4CpC"}
@@ -0,0 +1,61 @@
1
+ import { Extension, } from '@kerebron/editor';
2
+ import { NodeDocumentCode } from './NodeDocumentCode.js';
3
+ import { ExtensionSelection } from './ExtensionSelection.js';
4
+ import { ExtensionBaseKeymap } from './ExtensionBaseKeymap.js';
5
+ import { ExtensionDropcursor } from './ExtensionDropcursor.js';
6
+ import { ExtensionGapcursor } from './ExtensionGapcursor.js';
7
+ import { ExtensionHtml } from './ExtensionHtml.js';
8
+ import { NodeText } from './NodeText.js';
9
+ import { ExtensionRemoteSelection } from './remote-selection/ExtensionRemoteSelection.js';
10
+ export class ExtensionBasicCodeEditor extends Extension {
11
+ name = 'basic-code-editor';
12
+ requires;
13
+ constructor({ lang }) {
14
+ super();
15
+ this.requires = [
16
+ new ExtensionBaseKeymap(),
17
+ new ExtensionDropcursor(),
18
+ new ExtensionGapcursor(),
19
+ new ExtensionHtml(),
20
+ new ExtensionRemoteSelection(),
21
+ new ExtensionSelection(),
22
+ new NodeDocumentCode({ lang }),
23
+ new NodeText(),
24
+ ];
25
+ }
26
+ toRawText(doc) {
27
+ const topNodeType = this.editor.schema.topNodeType;
28
+ const spec = topNodeType.spec;
29
+ const singleNodeDoc = spec.content?.indexOf('*') === -1;
30
+ if (!singleNodeDoc) {
31
+ throw new Error('Not a single node doc');
32
+ }
33
+ if (doc.children.length !== 1) {
34
+ throw new Error('Not a single node doc');
35
+ }
36
+ const codeBlock = doc.children[0];
37
+ const content = codeBlock.content.content
38
+ .map((node) => node.text)
39
+ .join('');
40
+ const lines = content.split('\n');
41
+ const rawTextMap = [];
42
+ let nodeIdx = 1;
43
+ let targetPos = 0;
44
+ let targetRow = 0;
45
+ for (const line of lines) {
46
+ rawTextMap.push({
47
+ nodeIdx: nodeIdx,
48
+ targetRow,
49
+ targetCol: 0,
50
+ targetPos,
51
+ });
52
+ targetRow++;
53
+ targetPos += line.length + 1;
54
+ nodeIdx += line.length + 1;
55
+ }
56
+ return {
57
+ content,
58
+ rawTextMap,
59
+ };
60
+ }
61
+ }
@@ -0,0 +1,49 @@
1
+ import { Extension } from '@kerebron/editor';
2
+ import { ExtensionSelection } from './ExtensionSelection.js';
3
+ import { ExtensionBaseKeymap } from './ExtensionBaseKeymap.js';
4
+ import { ExtensionDropcursor } from './ExtensionDropcursor.js';
5
+ import { ExtensionGapcursor } from './ExtensionGapcursor.js';
6
+ import { ExtensionHtml } from './ExtensionHtml.js';
7
+ import { ExtensionMediaUpload } from './ExtensionMediaUpload.js';
8
+ import { ExtensionRemoteSelection } from './remote-selection/ExtensionRemoteSelection.js';
9
+ import { ExtensionTextAlign } from './ExtensionTextAlign.js';
10
+ import { MarkLink } from './MarkLink.js';
11
+ import { MarkStrong } from './MarkStrong.js';
12
+ import { MarkItalic } from './MarkItalic.js';
13
+ import { MarkUnderline } from './MarkUnderline.js';
14
+ import { MarkStrike } from './MarkStrike.js';
15
+ import { MarkCode } from './MarkCode.js';
16
+ import { MarkChange } from './MarkChange.js';
17
+ import { MarkBookmark } from './MarkBookmark.js';
18
+ import { MarkTextColor } from './MarkTextColor.js';
19
+ import { MarkHighlight } from './MarkHighlight.js';
20
+ import { MarkSuperscript } from './MarkSuperscript.js';
21
+ import { MarkSubscript } from './MarkSubscript.js';
22
+ import { NodeDocument } from './NodeDocument.js';
23
+ import { NodeText } from './NodeText.js';
24
+ import { NodeCodeBlock } from './NodeCodeBlock.js';
25
+ import { NodeBookmark } from './NodeBookmark.js';
26
+ import { NodeParagraph } from './NodeParagraph.js';
27
+ import { NodeHardBreak } from './NodeHardBreak.js';
28
+ import { NodeHorizontalRule } from './NodeHorizontalRule.js';
29
+ import { NodeOrderedList } from './NodeOrderedList.js';
30
+ import { NodeBulletList } from './NodeBulletList.js';
31
+ import { NodeListItem } from './NodeListItem.js';
32
+ import { NodeImage } from './NodeImage.js';
33
+ import { NodeVideo } from './NodeVideo.js';
34
+ import { NodeBlockquote } from './NodeBlockquote.js';
35
+ import { NodeAside } from './NodeAside.js';
36
+ import { NodeHeading } from './NodeHeading.js';
37
+ import { NodeMath } from './NodeMath.js';
38
+ import { NodeDefinitionList } from './NodeDefinitionList.js';
39
+ import { NodeDefinitionTerm } from './NodeDefinitionTerm.js';
40
+ import { NodeDefinitionDesc } from './NodeDefinitionDesc.js';
41
+ import { NodeFrontmatter } from './NodeFrontmatter.js';
42
+ import { NodeTaskList } from './NodeTaskList.js';
43
+ import { NodeTaskItem } from './NodeTaskItem.js';
44
+ import { NodeInlineShortCode } from './NodeInlineShortCode.js';
45
+ export declare class ExtensionBasicEditor extends Extension {
46
+ name: string;
47
+ requires: (ExtensionSelection | ExtensionBaseKeymap | ExtensionDropcursor | ExtensionGapcursor | ExtensionHtml | ExtensionMediaUpload | ExtensionRemoteSelection | ExtensionTextAlign | MarkLink | MarkStrong | MarkItalic | MarkUnderline | MarkStrike | MarkCode | MarkChange | MarkBookmark | MarkTextColor | MarkHighlight | MarkSuperscript | MarkSubscript | NodeDocument | NodeText | NodeCodeBlock | NodeBookmark | NodeParagraph | NodeHardBreak | NodeHorizontalRule | NodeOrderedList | NodeBulletList | NodeListItem | NodeImage | NodeVideo | NodeBlockquote | NodeAside | NodeHeading | NodeMath | NodeDefinitionList | NodeDefinitionTerm | NodeDefinitionDesc | NodeFrontmatter | NodeTaskList | NodeTaskItem | NodeInlineShortCode)[];
48
+ }
49
+ //# sourceMappingURL=ExtensionBasicEditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExtensionBasicEditor.d.ts","sourceRoot":"","sources":["../src/ExtensionBasicEditor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,gDAAgD,CAAC;AAC1F,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,qBAAa,oBAAqB,SAAQ,SAAS;IACjD,IAAI,SAAkB;IACtB,QAAQ,+sBA8CN;CACH"}
@@ -0,0 +1,94 @@
1
+ import { Extension } from '@kerebron/editor';
2
+ import { ExtensionSelection } from './ExtensionSelection.js';
3
+ import { ExtensionBaseKeymap } from './ExtensionBaseKeymap.js';
4
+ import { ExtensionDropcursor } from './ExtensionDropcursor.js';
5
+ import { ExtensionGapcursor } from './ExtensionGapcursor.js';
6
+ import { ExtensionHtml } from './ExtensionHtml.js';
7
+ import { ExtensionMediaUpload } from './ExtensionMediaUpload.js';
8
+ import { ExtensionRemoteSelection } from './remote-selection/ExtensionRemoteSelection.js';
9
+ import { ExtensionTextAlign } from './ExtensionTextAlign.js';
10
+ import { MarkLink } from './MarkLink.js';
11
+ import { MarkStrong } from './MarkStrong.js';
12
+ import { MarkItalic } from './MarkItalic.js';
13
+ import { MarkUnderline } from './MarkUnderline.js';
14
+ import { MarkStrike } from './MarkStrike.js';
15
+ import { MarkCode } from './MarkCode.js';
16
+ import { MarkChange } from './MarkChange.js';
17
+ import { MarkBookmark } from './MarkBookmark.js';
18
+ import { MarkTextColor } from './MarkTextColor.js';
19
+ import { MarkHighlight } from './MarkHighlight.js';
20
+ import { MarkSuperscript } from './MarkSuperscript.js';
21
+ import { MarkSubscript } from './MarkSubscript.js';
22
+ import { NodeDocument } from './NodeDocument.js';
23
+ import { NodeText } from './NodeText.js';
24
+ import { NodeCodeBlock } from './NodeCodeBlock.js';
25
+ import { NodeBookmark } from './NodeBookmark.js';
26
+ import { NodeParagraph } from './NodeParagraph.js';
27
+ import { NodeHardBreak } from './NodeHardBreak.js';
28
+ import { NodeHorizontalRule } from './NodeHorizontalRule.js';
29
+ import { NodeOrderedList } from './NodeOrderedList.js';
30
+ import { NodeBulletList } from './NodeBulletList.js';
31
+ import { NodeListItem } from './NodeListItem.js';
32
+ import { NodeImage } from './NodeImage.js';
33
+ import { NodeVideo } from './NodeVideo.js';
34
+ import { NodeBlockquote } from './NodeBlockquote.js';
35
+ import { NodeAside } from './NodeAside.js';
36
+ import { NodeHeading } from './NodeHeading.js';
37
+ import { NodeMath } from './NodeMath.js';
38
+ import { NodeDefinitionList } from './NodeDefinitionList.js';
39
+ import { NodeDefinitionTerm } from './NodeDefinitionTerm.js';
40
+ import { NodeDefinitionDesc } from './NodeDefinitionDesc.js';
41
+ import { NodeFrontmatter } from './NodeFrontmatter.js';
42
+ import { NodeTaskList } from './NodeTaskList.js';
43
+ import { NodeTaskItem } from './NodeTaskItem.js';
44
+ import { NodeInlineShortCode } from './NodeInlineShortCode.js';
45
+ export class ExtensionBasicEditor extends Extension {
46
+ name = 'basic-editor';
47
+ requires = [
48
+ new ExtensionBaseKeymap(),
49
+ new ExtensionDropcursor(),
50
+ new ExtensionGapcursor(),
51
+ new ExtensionHtml(),
52
+ new ExtensionMediaUpload(),
53
+ new ExtensionRemoteSelection(),
54
+ new ExtensionSelection(),
55
+ new ExtensionTextAlign(),
56
+ new NodeDocument(),
57
+ new NodeText(),
58
+ new NodeParagraph(),
59
+ new NodeHardBreak(),
60
+ new NodeCodeBlock(),
61
+ new NodeBookmark(),
62
+ new NodeHorizontalRule(),
63
+ new NodeOrderedList(),
64
+ new NodeBulletList(),
65
+ new NodeListItem(),
66
+ new NodeTaskList(),
67
+ new NodeTaskItem(),
68
+ new NodeDefinitionList(),
69
+ new NodeDefinitionTerm(),
70
+ new NodeDefinitionDesc(),
71
+ new NodeTaskList(),
72
+ new NodeTaskItem(),
73
+ new NodeFrontmatter(),
74
+ new NodeImage(),
75
+ new NodeVideo(),
76
+ new NodeBlockquote(),
77
+ new NodeAside(),
78
+ new NodeHeading(),
79
+ new NodeMath(),
80
+ new NodeInlineShortCode(),
81
+ new MarkLink(),
82
+ new MarkItalic(),
83
+ new MarkStrong(),
84
+ new MarkUnderline(),
85
+ new MarkStrike(),
86
+ new MarkCode(),
87
+ new MarkChange(),
88
+ new MarkBookmark(),
89
+ new MarkTextColor(),
90
+ new MarkHighlight(),
91
+ new MarkSuperscript(),
92
+ new MarkSubscript(),
93
+ ];
94
+ }
@@ -0,0 +1,19 @@
1
+ import { Plugin } from 'prosemirror-state';
2
+ import { Extension } from '@kerebron/editor';
3
+ interface DropCursorOptions {
4
+ color?: string | false;
5
+ width?: number;
6
+ class?: string;
7
+ }
8
+ export declare function dropCursor(options?: DropCursorOptions): Plugin;
9
+ export declare class ExtensionDropcursor extends Extension {
10
+ name: string;
11
+ options: {
12
+ color: string;
13
+ width: number;
14
+ class: undefined;
15
+ };
16
+ getProseMirrorPlugins(): Plugin[];
17
+ }
18
+ export {};
19
+ //# sourceMappingURL=ExtensionDropcursor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExtensionDropcursor.d.ts","sourceRoot":"","sources":["../src/ExtensionDropcursor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAIxD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,UAAU,iBAAiB;IAEzB,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAGvB,KAAK,CAAC,EAAE,MAAM,CAAC;IAGf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAUD,wBAAgB,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,MAAM,CAMlE;AA+KD,qBAAa,mBAAoB,SAAQ,SAAS;IAChD,IAAI,SAAgB;IAEpB,OAAO;;;;MAIL;IAEO,qBAAqB,IAAI,MAAM,EAAE;CAK3C"}
@@ -0,0 +1,186 @@
1
+ import { Plugin } from 'prosemirror-state';
2
+ import { dropPoint } from 'prosemirror-transform';
3
+ import { Extension } from '@kerebron/editor';
4
+ /// Create a plugin that, when added to a ProseMirror instance,
5
+ /// causes a decoration to show up at the drop position when something
6
+ /// is dragged over the editor.
7
+ ///
8
+ /// Nodes may add a `disableDropCursor` property to their spec to
9
+ /// control the showing of a drop cursor inside them. This may be a
10
+ /// boolean or a function, which will be called with a view and a
11
+ /// position, and should return a boolean.
12
+ export function dropCursor(options = {}) {
13
+ return new Plugin({
14
+ view(editorView) {
15
+ return new DropCursorView(editorView, options);
16
+ },
17
+ });
18
+ }
19
+ class DropCursorView {
20
+ editorView;
21
+ width;
22
+ color;
23
+ class;
24
+ cursorPos = null;
25
+ element = null;
26
+ timeout = -1;
27
+ handlers;
28
+ constructor(editorView, options) {
29
+ this.editorView = editorView;
30
+ this.width = options.width ?? 1;
31
+ this.color = options.color === false
32
+ ? undefined
33
+ : (options.color || 'black');
34
+ this.class = options.class;
35
+ this.handlers = ['dragover', 'dragend', 'drop', 'dragleave'].map((name) => {
36
+ let handler = (e) => {
37
+ this[name](e);
38
+ };
39
+ editorView.dom.addEventListener(name, handler);
40
+ return { name, handler };
41
+ });
42
+ }
43
+ destroy() {
44
+ this.handlers.forEach(({ name, handler }) => this.editorView.dom.removeEventListener(name, handler));
45
+ }
46
+ update(editorView, prevState) {
47
+ if (this.cursorPos != null && prevState.doc != editorView.state.doc) {
48
+ if (this.cursorPos > editorView.state.doc.content.size) {
49
+ this.setCursor(null);
50
+ }
51
+ else
52
+ this.updateOverlay();
53
+ }
54
+ }
55
+ setCursor(pos) {
56
+ if (pos == this.cursorPos)
57
+ return;
58
+ this.cursorPos = pos;
59
+ if (pos == null) {
60
+ this.element.parentNode.removeChild(this.element);
61
+ this.element = null;
62
+ }
63
+ else {
64
+ this.updateOverlay();
65
+ }
66
+ }
67
+ updateOverlay() {
68
+ let $pos = this.editorView.state.doc.resolve(this.cursorPos);
69
+ let isBlock = !$pos.parent.inlineContent, rect;
70
+ let editorDOM = this.editorView.dom, editorRect = editorDOM.getBoundingClientRect();
71
+ let scaleX = editorRect.width / editorDOM.offsetWidth, scaleY = editorRect.height / editorDOM.offsetHeight;
72
+ if (isBlock) {
73
+ let before = $pos.nodeBefore, after = $pos.nodeAfter;
74
+ if (before || after) {
75
+ let node = this.editorView.nodeDOM(this.cursorPos - (before ? before.nodeSize : 0));
76
+ if (node) {
77
+ let nodeRect = node.getBoundingClientRect();
78
+ let top = before ? nodeRect.bottom : nodeRect.top;
79
+ if (before && after) {
80
+ top = (top +
81
+ this.editorView.nodeDOM(this.cursorPos)
82
+ .getBoundingClientRect().top) / 2;
83
+ }
84
+ let halfWidth = (this.width / 2) * scaleY;
85
+ rect = {
86
+ left: nodeRect.left,
87
+ right: nodeRect.right,
88
+ top: top - halfWidth,
89
+ bottom: top + halfWidth,
90
+ };
91
+ }
92
+ }
93
+ }
94
+ if (!rect) {
95
+ let coords = this.editorView.coordsAtPos(this.cursorPos);
96
+ let halfWidth = (this.width / 2) * scaleX;
97
+ rect = {
98
+ left: coords.left - halfWidth,
99
+ right: coords.left + halfWidth,
100
+ top: coords.top,
101
+ bottom: coords.bottom,
102
+ };
103
+ }
104
+ let parent = this.editorView.dom.offsetParent;
105
+ if (!this.element) {
106
+ this.element = parent.appendChild(document.createElement('div'));
107
+ if (this.class)
108
+ this.element.className = this.class;
109
+ this.element.style.cssText =
110
+ 'position: absolute; z-index: 50; pointer-events: none;';
111
+ if (this.color) {
112
+ this.element.style.backgroundColor = this.color;
113
+ }
114
+ }
115
+ this.element.classList.toggle('prosemirror-dropcursor-block', isBlock);
116
+ this.element.classList.toggle('prosemirror-dropcursor-inline', !isBlock);
117
+ let parentLeft, parentTop;
118
+ if (!parent ||
119
+ parent == document.body && getComputedStyle(parent).position == 'static') {
120
+ parentLeft = -pageXOffset;
121
+ parentTop = -pageYOffset;
122
+ }
123
+ else {
124
+ let rect = parent.getBoundingClientRect();
125
+ let parentScaleX = rect.width / parent.offsetWidth, parentScaleY = rect.height / parent.offsetHeight;
126
+ parentLeft = rect.left - parent.scrollLeft * parentScaleX;
127
+ parentTop = rect.top - parent.scrollTop * parentScaleY;
128
+ }
129
+ this.element.style.left = (rect.left - parentLeft) / scaleX + 'px';
130
+ this.element.style.top = (rect.top - parentTop) / scaleY + 'px';
131
+ this.element.style.width = (rect.right - rect.left) / scaleX + 'px';
132
+ this.element.style.height = (rect.bottom - rect.top) / scaleY + 'px';
133
+ }
134
+ scheduleRemoval(timeout) {
135
+ clearTimeout(this.timeout);
136
+ this.timeout = setTimeout(() => this.setCursor(null), timeout);
137
+ }
138
+ dragover(event) {
139
+ if (!this.editorView.editable)
140
+ return;
141
+ let pos = this.editorView.posAtCoords({
142
+ left: event.clientX,
143
+ top: event.clientY,
144
+ });
145
+ let node = pos && pos.inside >= 0 &&
146
+ this.editorView.state.doc.nodeAt(pos.inside);
147
+ let disableDropCursor = node && node.type.spec.disableDropCursor;
148
+ let disabled = typeof disableDropCursor == 'function'
149
+ ? disableDropCursor(this.editorView, pos, event)
150
+ : disableDropCursor;
151
+ if (pos && !disabled) {
152
+ let target = pos.pos;
153
+ if (this.editorView.dragging && this.editorView.dragging.slice) {
154
+ let point = dropPoint(this.editorView.state.doc, target, this.editorView.dragging.slice);
155
+ if (point != null)
156
+ target = point;
157
+ }
158
+ this.setCursor(target);
159
+ this.scheduleRemoval(5000);
160
+ }
161
+ }
162
+ dragend() {
163
+ this.scheduleRemoval(20);
164
+ }
165
+ drop() {
166
+ this.scheduleRemoval(20);
167
+ }
168
+ dragleave(event) {
169
+ if (!this.editorView.dom.contains(event.relatedTarget)) {
170
+ this.setCursor(null);
171
+ }
172
+ }
173
+ }
174
+ export class ExtensionDropcursor extends Extension {
175
+ name = 'dropcursor';
176
+ options = {
177
+ color: 'currentColor',
178
+ width: 1,
179
+ class: undefined,
180
+ };
181
+ getProseMirrorPlugins() {
182
+ return [
183
+ dropCursor(this.options),
184
+ ];
185
+ }
186
+ }
@@ -0,0 +1,32 @@
1
+ import { Plugin, Selection } from 'prosemirror-state';
2
+ import { Node, ResolvedPos, Slice } from 'prosemirror-model';
3
+ import { Mappable } from 'prosemirror-transform';
4
+ import { Extension } from '@kerebron/editor';
5
+ export declare class GapCursor extends Selection {
6
+ constructor($pos: ResolvedPos);
7
+ map(doc: Node, mapping: Mappable): Selection;
8
+ content(): Slice;
9
+ eq(other: Selection): boolean;
10
+ toJSON(): any;
11
+ static fromJSONToGapCursor(doc: Node, json: any): GapCursor;
12
+ getBookmark(): GapBookmark;
13
+ static valid($pos: ResolvedPos): any;
14
+ static findGapCursorFrom($pos: ResolvedPos, dir: number, mustMove?: boolean): ResolvedPos | null;
15
+ }
16
+ declare class GapBookmark {
17
+ readonly pos: number;
18
+ constructor(pos: number);
19
+ map(mapping: Mappable): GapBookmark;
20
+ resolve(doc: Node): Selection;
21
+ }
22
+ export declare class ExtensionGapcursor extends Extension {
23
+ name: string;
24
+ options: {
25
+ color: string;
26
+ width: number;
27
+ class: undefined;
28
+ };
29
+ getProseMirrorPlugins(): Plugin[];
30
+ }
31
+ export {};
32
+ //# sourceMappingURL=ExtensionGapcursor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExtensionGapcursor.d.ts","sourceRoot":"","sources":["../src/ExtensionGapcursor.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,MAAM,EACN,SAAS,EAEV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAY,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAIjD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAK7C,qBAAa,SAAU,SAAQ,SAAS;gBAE1B,IAAI,EAAE,WAAW;IAK7B,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,GAAG,SAAS;IAKnC,OAAO;IAIhB,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO;IAI7B,MAAM,IAAI,GAAG;IAKb,MAAM,CAAC,mBAAmB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,GAAG,SAAS;IAQlD,WAAW,IAAI,WAAW;IAKnC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW;IAY9B,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,UAAQ;CA0C1E;AAID,cAAM,WAAW;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM;gBAAX,GAAG,EAAE,MAAM;IAEhC,GAAG,CAAC,OAAO,EAAE,QAAQ;IAGrB,OAAO,CAAC,GAAG,EAAE,IAAI,GAAG,SAAS;CAI9B;AA4ID,qBAAa,kBAAmB,SAAQ,SAAS;IAC/C,IAAI,SAAe;IAEnB,OAAO;;;;MAIL;IAEO,qBAAqB,IAAI,MAAM,EAAE;CAK3C"}