@kerebron/editor 0.1.3 → 0.2.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 (60) hide show
  1. package/assets/base.css +100 -0
  2. package/assets/content.css +35 -0
  3. package/assets/gapcursor.css +32 -0
  4. package/assets/index.css +7 -0
  5. package/assets/mobile.css +33 -0
  6. package/assets/prosemirror.css +20 -0
  7. package/assets/vars.css +86 -0
  8. package/package.json +4 -1
  9. package/esm/CoreEditor.d.ts +0 -25
  10. package/esm/CoreEditor.d.ts.map +0 -1
  11. package/esm/CoreEditor.js +0 -194
  12. package/esm/Extension.d.ts +0 -26
  13. package/esm/Extension.d.ts.map +0 -1
  14. package/esm/Extension.js +0 -33
  15. package/esm/ExtensionManager.d.ts +0 -32
  16. package/esm/ExtensionManager.d.ts.map +0 -1
  17. package/esm/ExtensionManager.js +0 -253
  18. package/esm/Mark.d.ts +0 -18
  19. package/esm/Mark.d.ts.map +0 -1
  20. package/esm/Mark.js +0 -34
  21. package/esm/Node.d.ts +0 -27
  22. package/esm/Node.d.ts.map +0 -1
  23. package/esm/Node.js +0 -43
  24. package/esm/commands/CommandManager.d.ts +0 -20
  25. package/esm/commands/CommandManager.d.ts.map +0 -1
  26. package/esm/commands/CommandManager.js +0 -60
  27. package/esm/commands/createChainableState.d.ts +0 -3
  28. package/esm/commands/createChainableState.d.ts.map +0 -1
  29. package/esm/commands/createChainableState.js +0 -29
  30. package/esm/commands/mod.d.ts +0 -49
  31. package/esm/commands/mod.d.ts.map +0 -1
  32. package/esm/commands/mod.js +0 -928
  33. package/esm/mod.d.ts +0 -6
  34. package/esm/mod.d.ts.map +0 -1
  35. package/esm/mod.js +0 -5
  36. package/esm/nodeToTreeString.d.ts +0 -4
  37. package/esm/nodeToTreeString.d.ts.map +0 -1
  38. package/esm/nodeToTreeString.js +0 -56
  39. package/esm/package.json +0 -3
  40. package/esm/plugins/input-rules/InputRulesPlugin.d.ts +0 -23
  41. package/esm/plugins/input-rules/InputRulesPlugin.d.ts.map +0 -1
  42. package/esm/plugins/input-rules/InputRulesPlugin.js +0 -163
  43. package/esm/plugins/input-rules/mod.d.ts +0 -3
  44. package/esm/plugins/input-rules/mod.d.ts.map +0 -1
  45. package/esm/plugins/input-rules/mod.js +0 -2
  46. package/esm/plugins/input-rules/rulebuilders.d.ts +0 -5
  47. package/esm/plugins/input-rules/rulebuilders.d.ts.map +0 -1
  48. package/esm/plugins/input-rules/rulebuilders.js +0 -50
  49. package/esm/types.d.ts +0 -29
  50. package/esm/types.d.ts.map +0 -1
  51. package/esm/types.js +0 -1
  52. package/esm/utilities/createNodeFromContent.d.ts +0 -8
  53. package/esm/utilities/createNodeFromContent.d.ts.map +0 -1
  54. package/esm/utilities/createNodeFromContent.js +0 -33
  55. package/esm/utilities/getHtmlAttributes.d.ts +0 -4
  56. package/esm/utilities/getHtmlAttributes.d.ts.map +0 -1
  57. package/esm/utilities/getHtmlAttributes.js +0 -47
  58. package/esm/utilities/mod.d.ts +0 -3
  59. package/esm/utilities/mod.d.ts.map +0 -1
  60. package/esm/utilities/mod.js +0 -2
@@ -0,0 +1,100 @@
1
+ /* Base editor container */
2
+ .kb-component {
3
+ background: var(--kb-color-surface);
4
+ color: var(--kb-color-text);
5
+ background-clip: padding-box;
6
+ border-radius: var(--kb-radius-md);
7
+ border: 2px solid var(--kb-color-border);
8
+ padding: var(--kb-space-sm) 0;
9
+ margin-bottom: var(--kb-space-lg);
10
+ font-family:
11
+ -apple-system,
12
+ BlinkMacSystemFont,
13
+ 'Segoe UI',
14
+ Roboto,
15
+ 'Helvetica Neue',
16
+ Arial,
17
+ sans-serif;
18
+ line-height: 1.5;
19
+ }
20
+
21
+ /* ProseMirror core styles */
22
+ .kb-editor {
23
+ position: relative;
24
+ word-wrap: break-word;
25
+ white-space: pre-wrap;
26
+ -webkit-font-variant-ligatures: none;
27
+ font-variant-ligatures: none;
28
+ padding: var(--kb-space-sm) var(--kb-space-md) var(--kb-space-sm)
29
+ var(--kb-space-lg);
30
+ outline: none;
31
+ font-size: var(--kb-text-base);
32
+ line-height: 1.6;
33
+ }
34
+
35
+ /* Mobile optimization */
36
+ @media (max-width: 767px) {
37
+ .kb-editor {
38
+ padding: var(--kb-space-md);
39
+ font-size: var(--kb-text-base);
40
+ line-height: 1.7;
41
+ }
42
+ }
43
+
44
+ /* Selection styles */
45
+ .kb-editor-hideselection *::selection {
46
+ background: transparent;
47
+ }
48
+
49
+ .kb-editor-hideselection *::-moz-selection {
50
+ background: transparent;
51
+ }
52
+
53
+ .kb-editor-hideselection {
54
+ caret-color: transparent;
55
+ }
56
+
57
+ @keyframes kb-cursor-blink {
58
+ to {
59
+ visibility: hidden;
60
+ }
61
+ }
62
+
63
+ /* Horizontal rule styling */
64
+ .kb-editor hr {
65
+ padding: var(--kb-space-sm) var(--kb-space-md);
66
+ border: none;
67
+ margin: 1em 0;
68
+ }
69
+
70
+ .kb-editor hr:after {
71
+ content: '';
72
+ display: block;
73
+ height: 1px;
74
+ background-color: var(--kb-color-border);
75
+ line-height: 2px;
76
+ }
77
+
78
+ /* Image styles */
79
+ .kb-editor img {
80
+ cursor: default;
81
+ max-width: 100%;
82
+ height: auto;
83
+ }
84
+
85
+ /* Focus states */
86
+ .kb-component:focus-within {
87
+ border-color: var(--kb-color-primary);
88
+ box-shadow: 0 0 0 3px var(--kb-color-focus);
89
+ }
90
+
91
+ /* High contrast mode support */
92
+ @media (prefers-contrast: high) {
93
+ .kb-component {
94
+ border-width: 3px;
95
+ }
96
+
97
+ .ProseMirror-selectednode {
98
+ outline-width: 3px;
99
+ }
100
+ }
@@ -0,0 +1,35 @@
1
+ /* Typography */
2
+ .kb-editor p {
3
+ margin-bottom: 1em;
4
+ }
5
+
6
+ .kb-editor p:first-child,
7
+ .kb-editor h1:first-child,
8
+ .kb-editor h2:first-child,
9
+ .kb-editor h3:first-child,
10
+ .kb-editor h4:first-child,
11
+ .kb-editor h5:first-child,
12
+ .kb-editor h6:first-child {
13
+ margin-top: var(--kb-space-md);
14
+ }
15
+
16
+ .kb-editor pre {
17
+ white-space: pre-wrap;
18
+ }
19
+
20
+ .kb-editor li {
21
+ position: relative;
22
+ }
23
+
24
+ .kb-editor ul,
25
+ .kb-editor ol {
26
+ padding-left: 30px;
27
+ }
28
+
29
+ .kb-editor blockquote {
30
+ padding-left: 1em;
31
+ border-left: 3px solid var(--kb-color-border);
32
+ margin-left: 0;
33
+ margin-right: 0;
34
+ color: var(--kb-color-text-muted);
35
+ }
@@ -0,0 +1,32 @@
1
+ .ProseMirror-gapcursor {
2
+ display: none;
3
+ pointer-events: none;
4
+ position: absolute;
5
+ }
6
+
7
+ .ProseMirror-gapcursor:after {
8
+ content: '';
9
+ display: block;
10
+ position: absolute;
11
+ top: -2px;
12
+ width: 20px;
13
+ border-top: 1px solid black;
14
+ animation: ProseMirror-cursor-blink 1.1s steps(2, start) infinite;
15
+ }
16
+
17
+ @keyframes ProseMirror-cursor-blink {
18
+ to {
19
+ visibility: hidden;
20
+ }
21
+ }
22
+
23
+ .ProseMirror-focused .ProseMirror-gapcursor {
24
+ display: block;
25
+ }
26
+
27
+ /* Accessibility: Reduced motion support */
28
+ @media (prefers-reduced-motion: reduce) {
29
+ .ProseMirror-gapcursor:after {
30
+ animation: none;
31
+ }
32
+ }
@@ -0,0 +1,7 @@
1
+ @import 'base.css';
2
+
3
+ @import 'content.css';
4
+ @import 'prosemirror.css';
5
+ @import 'gapcursor.css';
6
+
7
+ @import 'mobile.css';
@@ -0,0 +1,33 @@
1
+ /* Mobile viewport handling */
2
+ @supports (-webkit-touch-callout: none) {
3
+ /* iOS Safari specific fixes */
4
+ .kb-component {
5
+ -webkit-text-size-adjust: 100%;
6
+ -webkit-font-smoothing: antialiased;
7
+ }
8
+ }
9
+
10
+ /* Selection handles for mobile text selection */
11
+ @media (max-width: 767px) {
12
+ .kb-editor::selection {
13
+ background: rgba(var(--kb-color-primary-rgb), 0.3);
14
+ }
15
+
16
+ .kb-editor::-moz-selection {
17
+ background: rgba(var(--kb-color-primary-rgb), 0.3);
18
+ }
19
+ }
20
+
21
+ /* Print styles */
22
+ @media print {
23
+ .kb-component {
24
+ border: none;
25
+ box-shadow: none;
26
+ margin: 0;
27
+ padding: 0;
28
+ }
29
+
30
+ .kb-editor {
31
+ padding: 0;
32
+ }
33
+ }
@@ -0,0 +1,20 @@
1
+ .ProseMirror-selectednode {
2
+ outline: 2px solid var(--kb-color-primary);
3
+ outline-offset: 2px;
4
+ }
5
+
6
+ /* List item selection styling */
7
+ li.ProseMirror-selectednode {
8
+ outline: none;
9
+ }
10
+
11
+ li.ProseMirror-selectednode:after {
12
+ content: '';
13
+ position: absolute;
14
+ left: -32px;
15
+ right: -2px;
16
+ top: -2px;
17
+ bottom: -2px;
18
+ border: 2px solid var(--kb-color-primary);
19
+ pointer-events: none;
20
+ }
@@ -0,0 +1,86 @@
1
+ :root {
2
+ /* Spacing System */
3
+ --kb-space-xs: 0.25rem; /* 4px */
4
+ --kb-space-sm: 0.5rem; /* 8px */
5
+ --kb-space-md: 1rem; /* 16px */
6
+ --kb-space-lg: 1.5rem; /* 24px */
7
+ --kb-space-xl: 2rem; /* 32px */
8
+
9
+ /* Typography Scale */
10
+ --kb-text-xs: 0.75rem; /* 12px */
11
+ --kb-text-sm: 0.875rem; /* 14px */
12
+ --kb-text-base: 1rem; /* 16px */
13
+ --kb-text-lg: 1.125rem; /* 18px */
14
+
15
+ /* Touch Targets */
16
+ --kb-touch-target-min: 44px;
17
+ --kb-touch-target-comfortable: 48px;
18
+
19
+ /* Interactive States */
20
+ --kb-color-hover: rgba(59, 130, 246, 0.05);
21
+ --kb-color-active: rgba(59, 130, 246, 0.1);
22
+ --kb-color-focus: rgba(59, 130, 246, 0.2);
23
+
24
+ /* Layout & Borders */
25
+ --kb-radius-sm: 4px;
26
+ --kb-radius-md: 6px;
27
+ --kb-radius-lg: 8px;
28
+ --kb-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
29
+ --kb-shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1);
30
+ --kb-shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1);
31
+
32
+ /* Z-index Scale */
33
+ --kb-z-dropdown: 100;
34
+ --kb-z-tooltip: 200;
35
+ --kb-z-modal: 300;
36
+ --kb-z-notification: 400;
37
+
38
+ /* Brand Colors (Customizable) */
39
+ --kb-color-primary: #3b82f6;
40
+ --kb-color-primary-hover: #2563eb;
41
+ --kb-color-primary-rgb: 59, 130, 246;
42
+ --kb-color-text: #1f2937;
43
+ --kb-color-text-muted: #6b7280;
44
+ --kb-color-surface: #ffffff;
45
+ --kb-color-surface-elevated: #f9fafb;
46
+ --kb-color-border: #e5e7eb;
47
+ --kb-color-border-strong: #d1d5db;
48
+ }
49
+
50
+ /* Dark mode support */
51
+ @media (prefers-color-scheme: dark) {
52
+ :root {
53
+ --kb-color-text: #f9fafb;
54
+ --kb-color-text-muted: #9ca3af;
55
+ --kb-color-surface: #1f2937;
56
+ --kb-color-surface-elevated: #374151;
57
+ --kb-color-border: #374151;
58
+ --kb-color-border-strong: #4b5563;
59
+ --kb-color-hover: rgba(59, 130, 246, 0.1);
60
+ --kb-color-active: rgba(59, 130, 246, 0.2);
61
+ }
62
+ }
63
+
64
+ /* Theme variants */
65
+ .kb-component--brand-corporate {
66
+ --kb-color-primary: #1e40af;
67
+ --kb-color-primary-hover: #1e3a8a;
68
+ --kb-color-primary-rgb: 30, 64, 175;
69
+ }
70
+
71
+ .kb-component--brand-creative {
72
+ --kb-color-primary: #7c3aed;
73
+ --kb-color-primary-hover: #6d28d9;
74
+ --kb-color-primary-rgb: 124, 58, 237;
75
+ }
76
+
77
+ .kb-component--dark {
78
+ --kb-color-text: #f9fafb;
79
+ --kb-color-text-muted: #9ca3af;
80
+ --kb-color-surface: #1f2937;
81
+ --kb-color-surface-elevated: #374151;
82
+ --kb-color-border: #374151;
83
+ --kb-color-border-strong: #4b5563;
84
+ --kb-color-hover: rgba(59, 130, 246, 0.1);
85
+ --kb-color-active: rgba(59, 130, 246, 0.2);
86
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kerebron/editor",
3
- "version": "0.1.3",
3
+ "version": "0.2.0",
4
4
  "license": "MIT",
5
5
  "module": "./esm/mod.js",
6
6
  "exports": {
@@ -18,6 +18,9 @@
18
18
  }
19
19
  },
20
20
  "scripts": {},
21
+ "files": [
22
+ "assets/*.css"
23
+ ],
21
24
  "dependencies": {
22
25
  "prosemirror-keymap": "1.2.2",
23
26
  "prosemirror-model": "1.25.1",
@@ -1,25 +0,0 @@
1
- import { EditorView } from 'prosemirror-view';
2
- import { Node as ProseMirrorNode, type Schema } from 'prosemirror-model';
3
- import type { EditorOptions, JSONContent } from './types.js';
4
- import { EditorState, Transaction } from 'prosemirror-state';
5
- import { ChainedCommands } from './commands/CommandManager.js';
6
- export declare class CoreEditor extends EventTarget {
7
- readonly options: Partial<EditorOptions>;
8
- private extensionManager;
9
- private commandManager;
10
- view: EditorView;
11
- state: EditorState;
12
- constructor(options?: Partial<EditorOptions>);
13
- get schema(): Schema<any, any>;
14
- chain(): ChainedCommands;
15
- can(): ChainedCommands;
16
- private createView;
17
- dispatchTransaction(transaction: Transaction): void;
18
- private setupPlugins;
19
- setDocument(content?: any, mediaType?: string): void;
20
- getDocument(mediaType?: string): void | ProseMirrorNode | JSONContent;
21
- getJSON(): JSONContent;
22
- clone(options?: Partial<EditorOptions>): CoreEditor;
23
- debug(doc?: ProseMirrorNode): void;
24
- }
25
- //# sourceMappingURL=CoreEditor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CoreEditor.d.ts","sourceRoot":"","sources":["../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;IAaX,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"}
package/esm/CoreEditor.js DELETED
@@ -1,194 +0,0 @@
1
- import { EditorView } from 'prosemirror-view';
2
- import { Node as ProseMirrorNode } from 'prosemirror-model';
3
- import { ExtensionManager } from './ExtensionManager.js';
4
- import { EditorState } from 'prosemirror-state';
5
- import { createNodeFromContent } from './utilities/createNodeFromContent.js';
6
- import { CommandManager } from './commands/CommandManager.js';
7
- import { nodeToTreeString } from './nodeToTreeString.js';
8
- 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
- });
33
- }
34
- }
35
- export class CoreEditor extends EventTarget {
36
- constructor(options = {}) {
37
- super();
38
- Object.defineProperty(this, "options", {
39
- enumerable: true,
40
- configurable: true,
41
- writable: true,
42
- value: {
43
- element: null, // document.createElement('div'),
44
- extensions: [],
45
- }
46
- });
47
- Object.defineProperty(this, "extensionManager", {
48
- enumerable: true,
49
- configurable: true,
50
- writable: true,
51
- value: void 0
52
- });
53
- Object.defineProperty(this, "commandManager", {
54
- enumerable: true,
55
- configurable: true,
56
- writable: true,
57
- value: void 0
58
- });
59
- Object.defineProperty(this, "view", {
60
- enumerable: true,
61
- configurable: true,
62
- writable: true,
63
- value: void 0
64
- });
65
- Object.defineProperty(this, "state", {
66
- enumerable: true,
67
- configurable: true,
68
- writable: true,
69
- value: void 0
70
- });
71
- this.options = {
72
- ...this.options,
73
- ...options,
74
- };
75
- this.extensionManager = new ExtensionManager(this.options.extensions, this);
76
- // const content = this.options.content ? this.options.content : {
77
- // type: this.extensionManager.schema.topNodeType.name,
78
- // content: this.extensionManager.schema.topNodeType.spec.EMPTY_DOC,
79
- // };
80
- const content = this.options.content
81
- ? this.options.content
82
- : this.extensionManager.schema.topNodeType.spec.EMPTY_DOC;
83
- this.createView(content);
84
- this.commandManager = new CommandManager(this, this.extensionManager.commandConstructors);
85
- this.setupPlugins();
86
- }
87
- get schema() {
88
- return this.extensionManager.schema;
89
- }
90
- chain() {
91
- return this.commandManager.chain();
92
- }
93
- can() {
94
- return this.commandManager.can();
95
- }
96
- createView(content) {
97
- const doc = createNodeFromContent(content, this.schema);
98
- this.state = EditorState.create({ doc });
99
- if (this.options.element) {
100
- this.view = new EditorView(this.options.element, {
101
- state: this.state,
102
- dispatchTransaction: (tx) => this.dispatchTransaction(tx),
103
- });
104
- }
105
- }
106
- dispatchTransaction(transaction) {
107
- this.state = this.state.apply(transaction);
108
- if (this.view) {
109
- this.view.updateState(this.state);
110
- const event = new CustomEvent('transaction', {
111
- detail: {
112
- editor: this,
113
- transaction,
114
- },
115
- });
116
- this.dispatchEvent(event);
117
- }
118
- }
119
- setupPlugins() {
120
- this.state = this.state.reconfigure({
121
- plugins: this.extensionManager.plugins,
122
- });
123
- if (this.view) {
124
- this.view.updateState(this.state);
125
- this.view.setProps({
126
- nodeViews: this.extensionManager.nodeViews,
127
- });
128
- }
129
- }
130
- setDocument(content, mediaType) {
131
- if (!content) {
132
- content = {
133
- type: this.extensionManager.schema.topNodeType.name,
134
- content: this.extensionManager.schema.topNodeType.spec.EMPTY_DOC.content,
135
- };
136
- mediaType = undefined;
137
- }
138
- let doc;
139
- if (mediaType) {
140
- const converter = this.extensionManager.converters[mediaType];
141
- if (converter) {
142
- doc = converter.toDoc(content);
143
- }
144
- }
145
- else {
146
- doc = createNodeFromContent(content, this.schema);
147
- }
148
- ensureDocSchema(doc, this.schema);
149
- this.state = EditorState.create({
150
- doc,
151
- plugins: this.state.plugins,
152
- storedMarks: this.state.storedMarks,
153
- });
154
- if (this.view) {
155
- this.view.updateState(this.state);
156
- }
157
- const event = new CustomEvent('doc:loaded', {
158
- detail: {
159
- editor: this,
160
- doc,
161
- },
162
- });
163
- this.dispatchEvent(event);
164
- }
165
- getDocument(mediaType) {
166
- if (mediaType) {
167
- const converter = this.extensionManager.converters[mediaType];
168
- if (converter) {
169
- const json = this.state.doc.toJSON();
170
- const clonedDoc = ProseMirrorNode.fromJSON(this.state.schema, json);
171
- return converter.fromDoc(clonedDoc);
172
- }
173
- if (mediaType === 'text/json') {
174
- return this.getJSON();
175
- }
176
- }
177
- return this.state.doc;
178
- }
179
- getJSON() {
180
- return this.state.doc.toJSON();
181
- }
182
- clone(options = {}) {
183
- return new CoreEditor({
184
- ...options,
185
- extensions: [...this.options.extensions],
186
- });
187
- }
188
- debug(doc) {
189
- if (!doc) {
190
- doc = this.state.doc;
191
- }
192
- console.debug(nodeToTreeString(doc));
193
- }
194
- }
@@ -1,26 +0,0 @@
1
- import { Plugin } from 'prosemirror-state';
2
- import { type CoreEditor } from './CoreEditor.js';
3
- import { InputRule } from './plugins/input-rules/InputRulesPlugin.js';
4
- import { Commands, CommandShortcuts } from './commands/mod.js';
5
- import { Schema, type SchemaSpec } from 'prosemirror-model';
6
- export interface ExtensionConfig {
7
- [key: string]: any;
8
- requires: Array<Extension | string>;
9
- }
10
- export interface Converter {
11
- fromDoc(document: unknown): void;
12
- toDoc(content: unknown): any;
13
- }
14
- export declare abstract class Extension {
15
- protected config: Partial<ExtensionConfig>;
16
- readonly type = "extension";
17
- abstract name: string;
18
- protected constructor(config?: Partial<ExtensionConfig>);
19
- getInputRules(): InputRule[];
20
- getProseMirrorPlugins(editor: CoreEditor, schema: Schema): Plugin[];
21
- getCommands(editor: CoreEditor): Partial<Commands>;
22
- getKeyboardShortcuts(): Partial<CommandShortcuts>;
23
- getConverters(editor: CoreEditor, schema: Schema): Record<string, Converter>;
24
- setupSpec(spec: SchemaSpec): void;
25
- }
26
- //# sourceMappingURL=Extension.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Extension.d.ts","sourceRoot":"","sources":["../src/Extension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,2CAA2C,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE5D,MAAM,WAAW,eAAe;IAE9B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IAEnB,QAAQ,EAAE,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,GAAG,CAAC;CAC9B;AAED,8BAAsB,SAAS;IAIP,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC;IAHhE,QAAQ,CAAC,IAAI,eAAe;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,SAAS,aAAuB,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM;IAGrE,aAAa,IAAI,SAAS,EAAE;IAI5B,qBAAqB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAInE,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC;IAIlD,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAIjD,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC;IAI5E,SAAS,CAAC,IAAI,EAAE,UAAU;CAE3B"}
package/esm/Extension.js DELETED
@@ -1,33 +0,0 @@
1
- export class Extension {
2
- constructor(config = {}) {
3
- Object.defineProperty(this, "config", {
4
- enumerable: true,
5
- configurable: true,
6
- writable: true,
7
- value: config
8
- });
9
- Object.defineProperty(this, "type", {
10
- enumerable: true,
11
- configurable: true,
12
- writable: true,
13
- value: 'extension'
14
- });
15
- }
16
- getInputRules() {
17
- return [];
18
- }
19
- getProseMirrorPlugins(editor, schema) {
20
- return [];
21
- }
22
- getCommands(editor) {
23
- return {};
24
- }
25
- getKeyboardShortcuts() {
26
- return {};
27
- }
28
- getConverters(editor, schema) {
29
- return {};
30
- }
31
- setupSpec(spec) {
32
- }
33
- }
@@ -1,32 +0,0 @@
1
- import { Schema } from 'prosemirror-model';
2
- import { Plugin } from 'prosemirror-state';
3
- import { NodeViewConstructor } from 'prosemirror-view';
4
- import { Extension } from './Extension.js';
5
- import { AnyExtension } from './types.js';
6
- import { CoreEditor } from './CoreEditor.js';
7
- import { Mark } from './Mark.js';
8
- import { Node } from './Node.js';
9
- import { type Command } from 'prosemirror-state';
10
- export declare function findDuplicates(items: any[]): any[];
11
- export declare function splitExtensions(extensions: Iterable<AnyExtension>): {
12
- baseExtensions: Extension[];
13
- nodeExtensions: Node[];
14
- markExtensions: Mark[];
15
- };
16
- export declare class ExtensionManager {
17
- private editor;
18
- readonly schema: Schema;
19
- private extensions;
20
- readonly plugins: Plugin[];
21
- readonly nodeViews: Record<string, NodeViewConstructor>;
22
- readonly commandConstructors: {
23
- [key: string]: () => Command;
24
- };
25
- private converters;
26
- private debug;
27
- constructor(extensions: Set<AnyExtension>, editor: CoreEditor);
28
- private getPlugins;
29
- private setupExtensions;
30
- getSchemaByResolvedExtensions(editor: CoreEditor): Schema;
31
- }
32
- //# sourceMappingURL=ExtensionManager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ExtensionManager.d.ts","sourceRoot":"","sources":["../src/ExtensionManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAa,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAMjC,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAGjD,wBAAgB,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,CAIlD;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC,YAAY,CAAC;;;;EAgBjE;AAED,qBAAa,gBAAgB;IAYgB,OAAO,CAAC,MAAM;IAXzD,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B,OAAO,CAAC,UAAU,CAAgC;IAClD,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAM;IAE7D,QAAQ,CAAC,mBAAmB,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,OAAO,CAAA;KAAE,CAAM;IACpE,OAAO,CAAC,UAAU,CAAiC;IAEnD,OAAO,CAAC,KAAK,CAAQ;gBAET,UAAU,EAAE,GAAG,CAAC,YAAY,CAAC,EAAU,MAAM,EAAE,UAAU;IAcrE,OAAO,CAAC,UAAU;IAkIlB,OAAO,CAAC,eAAe;IA6DvB,6BAA6B,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;CA6C1D"}