miyuan-editor 0.0.3
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.
- package/README.md +525 -0
- package/dist/core/index.cjs.js +40 -0
- package/dist/core/index.esm.js +4 -0
- package/dist/dist-5Q_Z9Ell.js +6390 -0
- package/dist/dist-5Q_Z9Ell.js.map +1 -0
- package/dist/dist-CMM6n8DO.cjs +4629 -0
- package/dist/dist-CMM6n8DO.cjs.map +1 -0
- package/dist/dist-CRSJDo2G.cjs +6617 -0
- package/dist/dist-CRSJDo2G.cjs.map +1 -0
- package/dist/dist-CZw77IJK.js +4612 -0
- package/dist/dist-CZw77IJK.js.map +1 -0
- package/dist/dist-CnVrDtsI.js +556 -0
- package/dist/dist-CnVrDtsI.js.map +1 -0
- package/dist/dist-rItBfhNb.cjs +591 -0
- package/dist/dist-rItBfhNb.cjs.map +1 -0
- package/dist/export-utils-CYaNoyVg.cjs +167 -0
- package/dist/export-utils-CYaNoyVg.cjs.map +1 -0
- package/dist/export-utils-DN0Gu8Vu.js +144 -0
- package/dist/export-utils-DN0Gu8Vu.js.map +1 -0
- package/dist/extension-BPFuYyzN.cjs +338 -0
- package/dist/extension-BPFuYyzN.cjs.map +1 -0
- package/dist/extension-Cl6x5MDR.js +321 -0
- package/dist/extension-Cl6x5MDR.js.map +1 -0
- package/dist/extensions/index.cjs.js +3462 -0
- package/dist/extensions/index.cjs.js.map +1 -0
- package/dist/extensions/index.esm.js +3412 -0
- package/dist/extensions/index.esm.js.map +1 -0
- package/dist/prompt-B4AOP8f_.js +24143 -0
- package/dist/prompt-B4AOP8f_.js.map +1 -0
- package/dist/prompt-CGLw2O21.cjs +25530 -0
- package/dist/prompt-CGLw2O21.cjs.map +1 -0
- package/dist/react/index.cjs.js +839 -0
- package/dist/react/index.cjs.js.map +1 -0
- package/dist/react/index.esm.js +820 -0
- package/dist/react/index.esm.js.map +1 -0
- package/dist/shortcut-panel-BskGXV8n.js +49468 -0
- package/dist/shortcut-panel-BskGXV8n.js.map +1 -0
- package/dist/shortcut-panel-yP4RPTFt.cjs +49563 -0
- package/dist/shortcut-panel-yP4RPTFt.cjs.map +1 -0
- package/dist/toc-extension-BESc0uEW.js +150 -0
- package/dist/toc-extension-BESc0uEW.js.map +1 -0
- package/dist/toc-extension-SRvSuskn.cjs +173 -0
- package/dist/toc-extension-SRvSuskn.cjs.map +1 -0
- package/dist/toolbar-config-Cgc9mV2v.js +243 -0
- package/dist/toolbar-config-Cgc9mV2v.js.map +1 -0
- package/dist/toolbar-config-Cjt_fPMi.cjs +260 -0
- package/dist/toolbar-config-Cjt_fPMi.cjs.map +1 -0
- package/dist/ui/index.cjs.js +18 -0
- package/dist/ui/index.esm.js +3 -0
- package/dist/vue/index.cjs.js +323 -0
- package/dist/vue/index.cjs.js.map +1 -0
- package/dist/vue/index.esm.js +307 -0
- package/dist/vue/index.esm.js.map +1 -0
- package/dist/vue2/index.cjs.js +323 -0
- package/dist/vue2/index.cjs.js.map +1 -0
- package/dist/vue2/index.esm.js +307 -0
- package/dist/vue2/index.esm.js.map +1 -0
- package/package.json +116 -0
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
const require_dist = require("./dist-CRSJDo2G.cjs");
|
|
2
|
+
const require_dist$1 = require("./dist-CMM6n8DO.cjs");
|
|
3
|
+
//#region src/core/editor-view.ts
|
|
4
|
+
/**
|
|
5
|
+
* EditorView wraps ProseMirror's EditorView, providing a stable API
|
|
6
|
+
* that matches our editor's interface contract.
|
|
7
|
+
*/
|
|
8
|
+
var EditorView = class {
|
|
9
|
+
constructor(config) {
|
|
10
|
+
const { element, state, editable = true, dispatchTransaction } = config;
|
|
11
|
+
this._pm = new require_dist$1.EditorView(element, {
|
|
12
|
+
state,
|
|
13
|
+
editable: () => editable,
|
|
14
|
+
dispatchTransaction: dispatchTransaction ? (tr) => dispatchTransaction(tr) : void 0
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
/** The root DOM element managed by ProseMirror */
|
|
18
|
+
get dom() {
|
|
19
|
+
return this._pm.dom;
|
|
20
|
+
}
|
|
21
|
+
/** Alias for backward compatibility */
|
|
22
|
+
get editableDom() {
|
|
23
|
+
return this.dom;
|
|
24
|
+
}
|
|
25
|
+
/** Current editor state */
|
|
26
|
+
get state() {
|
|
27
|
+
return this._pm.state;
|
|
28
|
+
}
|
|
29
|
+
/** Dispatch a transaction */
|
|
30
|
+
dispatch(tr) {
|
|
31
|
+
this._pm.dispatch(tr);
|
|
32
|
+
}
|
|
33
|
+
/** Replace the editor state entirely */
|
|
34
|
+
updateState(state) {
|
|
35
|
+
this._pm.updateState(state);
|
|
36
|
+
}
|
|
37
|
+
/** Destroy the editor and clean up DOM */
|
|
38
|
+
destroy() {
|
|
39
|
+
this._pm.destroy();
|
|
40
|
+
}
|
|
41
|
+
/** Focus the editor */
|
|
42
|
+
focus() {
|
|
43
|
+
this._pm.focus();
|
|
44
|
+
}
|
|
45
|
+
/** Whether the editor has focus */
|
|
46
|
+
get hasFocus() {
|
|
47
|
+
return this._pm.hasFocus();
|
|
48
|
+
}
|
|
49
|
+
/** Get the ProseMirror position from a DOM coordinate */
|
|
50
|
+
posAtDOM(node, offset) {
|
|
51
|
+
return this._pm.posAtDOM(node, offset);
|
|
52
|
+
}
|
|
53
|
+
/** Get DOM coordinates for a ProseMirror position */
|
|
54
|
+
coordsAtPos(pos, side) {
|
|
55
|
+
return this._pm.coordsAtPos(pos, side);
|
|
56
|
+
}
|
|
57
|
+
/** Access the underlying ProseMirror EditorView */
|
|
58
|
+
get pmView() {
|
|
59
|
+
return this._pm;
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
//#endregion
|
|
63
|
+
//#region node_modules/.pnpm/w3c-keyname@2.2.8/node_modules/w3c-keyname/index.js
|
|
64
|
+
var base = {
|
|
65
|
+
8: "Backspace",
|
|
66
|
+
9: "Tab",
|
|
67
|
+
10: "Enter",
|
|
68
|
+
12: "NumLock",
|
|
69
|
+
13: "Enter",
|
|
70
|
+
16: "Shift",
|
|
71
|
+
17: "Control",
|
|
72
|
+
18: "Alt",
|
|
73
|
+
20: "CapsLock",
|
|
74
|
+
27: "Escape",
|
|
75
|
+
32: " ",
|
|
76
|
+
33: "PageUp",
|
|
77
|
+
34: "PageDown",
|
|
78
|
+
35: "End",
|
|
79
|
+
36: "Home",
|
|
80
|
+
37: "ArrowLeft",
|
|
81
|
+
38: "ArrowUp",
|
|
82
|
+
39: "ArrowRight",
|
|
83
|
+
40: "ArrowDown",
|
|
84
|
+
44: "PrintScreen",
|
|
85
|
+
45: "Insert",
|
|
86
|
+
46: "Delete",
|
|
87
|
+
59: ";",
|
|
88
|
+
61: "=",
|
|
89
|
+
91: "Meta",
|
|
90
|
+
92: "Meta",
|
|
91
|
+
106: "*",
|
|
92
|
+
107: "+",
|
|
93
|
+
108: ",",
|
|
94
|
+
109: "-",
|
|
95
|
+
110: ".",
|
|
96
|
+
111: "/",
|
|
97
|
+
144: "NumLock",
|
|
98
|
+
145: "ScrollLock",
|
|
99
|
+
160: "Shift",
|
|
100
|
+
161: "Shift",
|
|
101
|
+
162: "Control",
|
|
102
|
+
163: "Control",
|
|
103
|
+
164: "Alt",
|
|
104
|
+
165: "Alt",
|
|
105
|
+
173: "-",
|
|
106
|
+
186: ";",
|
|
107
|
+
187: "=",
|
|
108
|
+
188: ",",
|
|
109
|
+
189: "-",
|
|
110
|
+
190: ".",
|
|
111
|
+
191: "/",
|
|
112
|
+
192: "`",
|
|
113
|
+
219: "[",
|
|
114
|
+
220: "\\",
|
|
115
|
+
221: "]",
|
|
116
|
+
222: "'"
|
|
117
|
+
};
|
|
118
|
+
var shift = {
|
|
119
|
+
48: ")",
|
|
120
|
+
49: "!",
|
|
121
|
+
50: "@",
|
|
122
|
+
51: "#",
|
|
123
|
+
52: "$",
|
|
124
|
+
53: "%",
|
|
125
|
+
54: "^",
|
|
126
|
+
55: "&",
|
|
127
|
+
56: "*",
|
|
128
|
+
57: "(",
|
|
129
|
+
59: ":",
|
|
130
|
+
61: "+",
|
|
131
|
+
173: "_",
|
|
132
|
+
186: ":",
|
|
133
|
+
187: "+",
|
|
134
|
+
188: "<",
|
|
135
|
+
189: "_",
|
|
136
|
+
190: ">",
|
|
137
|
+
191: "?",
|
|
138
|
+
192: "~",
|
|
139
|
+
219: "{",
|
|
140
|
+
220: "|",
|
|
141
|
+
221: "}",
|
|
142
|
+
222: "\""
|
|
143
|
+
};
|
|
144
|
+
var mac$1 = typeof navigator != "undefined" && /Mac/.test(navigator.platform);
|
|
145
|
+
var ie = typeof navigator != "undefined" && /MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent);
|
|
146
|
+
for (var i = 0; i < 10; i++) base[48 + i] = base[96 + i] = String(i);
|
|
147
|
+
for (var i = 1; i <= 24; i++) base[i + 111] = "F" + i;
|
|
148
|
+
for (var i = 65; i <= 90; i++) {
|
|
149
|
+
base[i] = String.fromCharCode(i + 32);
|
|
150
|
+
shift[i] = String.fromCharCode(i);
|
|
151
|
+
}
|
|
152
|
+
for (var code in base) if (!shift.hasOwnProperty(code)) shift[code] = base[code];
|
|
153
|
+
function keyName(event) {
|
|
154
|
+
var name = !(mac$1 && event.metaKey && event.shiftKey && !event.ctrlKey && !event.altKey || ie && event.shiftKey && event.key && event.key.length == 1 || event.key == "Unidentified") && event.key || (event.shiftKey ? shift : base)[event.keyCode] || event.key || "Unidentified";
|
|
155
|
+
if (name == "Esc") name = "Escape";
|
|
156
|
+
if (name == "Del") name = "Delete";
|
|
157
|
+
if (name == "Left") name = "ArrowLeft";
|
|
158
|
+
if (name == "Up") name = "ArrowUp";
|
|
159
|
+
if (name == "Right") name = "ArrowRight";
|
|
160
|
+
if (name == "Down") name = "ArrowDown";
|
|
161
|
+
return name;
|
|
162
|
+
}
|
|
163
|
+
//#endregion
|
|
164
|
+
//#region node_modules/.pnpm/prosemirror-keymap@1.2.3/node_modules/prosemirror-keymap/dist/index.js
|
|
165
|
+
var mac = typeof navigator != "undefined" && /Mac|iP(hone|[oa]d)/.test(navigator.platform);
|
|
166
|
+
var windows = typeof navigator != "undefined" && /Win/.test(navigator.platform);
|
|
167
|
+
function normalizeKeyName(name) {
|
|
168
|
+
let parts = name.split(/-(?!$)/), result = parts[parts.length - 1];
|
|
169
|
+
if (result == "Space") result = " ";
|
|
170
|
+
let alt, ctrl, shift, meta;
|
|
171
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
172
|
+
let mod = parts[i];
|
|
173
|
+
if (/^(cmd|meta|m)$/i.test(mod)) meta = true;
|
|
174
|
+
else if (/^a(lt)?$/i.test(mod)) alt = true;
|
|
175
|
+
else if (/^(c|ctrl|control)$/i.test(mod)) ctrl = true;
|
|
176
|
+
else if (/^s(hift)?$/i.test(mod)) shift = true;
|
|
177
|
+
else if (/^mod$/i.test(mod)) if (mac) meta = true;
|
|
178
|
+
else ctrl = true;
|
|
179
|
+
else throw new Error("Unrecognized modifier name: " + mod);
|
|
180
|
+
}
|
|
181
|
+
if (alt) result = "Alt-" + result;
|
|
182
|
+
if (ctrl) result = "Ctrl-" + result;
|
|
183
|
+
if (meta) result = "Meta-" + result;
|
|
184
|
+
if (shift) result = "Shift-" + result;
|
|
185
|
+
return result;
|
|
186
|
+
}
|
|
187
|
+
function normalize(map) {
|
|
188
|
+
let copy = Object.create(null);
|
|
189
|
+
for (let prop in map) copy[normalizeKeyName(prop)] = map[prop];
|
|
190
|
+
return copy;
|
|
191
|
+
}
|
|
192
|
+
function modifiers(name, event, shift = true) {
|
|
193
|
+
if (event.altKey) name = "Alt-" + name;
|
|
194
|
+
if (event.ctrlKey) name = "Ctrl-" + name;
|
|
195
|
+
if (event.metaKey) name = "Meta-" + name;
|
|
196
|
+
if (shift && event.shiftKey) name = "Shift-" + name;
|
|
197
|
+
return name;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
Create a keymap plugin for the given set of bindings.
|
|
201
|
+
|
|
202
|
+
Bindings should map key names to [command](https://prosemirror.net/docs/ref/#commands)-style
|
|
203
|
+
functions, which will be called with `(EditorState, dispatch,
|
|
204
|
+
EditorView)` arguments, and should return true when they've handled
|
|
205
|
+
the key. Note that the view argument isn't part of the command
|
|
206
|
+
protocol, but can be used as an escape hatch if a binding needs to
|
|
207
|
+
directly interact with the UI.
|
|
208
|
+
|
|
209
|
+
Key names may be strings like `"Shift-Ctrl-Enter"`—a key
|
|
210
|
+
identifier prefixed with zero or more modifiers. Key identifiers
|
|
211
|
+
are based on the strings that can appear in
|
|
212
|
+
[`KeyEvent.key`](https:developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key).
|
|
213
|
+
Use lowercase letters to refer to letter keys (or uppercase letters
|
|
214
|
+
if you want shift to be held). You may use `"Space"` as an alias
|
|
215
|
+
for the `" "` name.
|
|
216
|
+
|
|
217
|
+
Modifiers can be given in any order. `Shift-` (or `s-`), `Alt-` (or
|
|
218
|
+
`a-`), `Ctrl-` (or `c-` or `Control-`) and `Cmd-` (or `m-` or
|
|
219
|
+
`Meta-`) are recognized. For characters that are created by holding
|
|
220
|
+
shift, the `Shift-` prefix is implied, and should not be added
|
|
221
|
+
explicitly.
|
|
222
|
+
|
|
223
|
+
You can use `Mod-` as a shorthand for `Cmd-` on Mac and `Ctrl-` on
|
|
224
|
+
other platforms.
|
|
225
|
+
|
|
226
|
+
You can add multiple keymap plugins to an editor. The order in
|
|
227
|
+
which they appear determines their precedence (the ones early in
|
|
228
|
+
the array get to dispatch first).
|
|
229
|
+
*/
|
|
230
|
+
function keymap(bindings) {
|
|
231
|
+
return new require_dist.Plugin({ props: { handleKeyDown: keydownHandler(bindings) } });
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
Given a set of bindings (using the same format as
|
|
235
|
+
[`keymap`](https://prosemirror.net/docs/ref/#keymap.keymap)), return a [keydown
|
|
236
|
+
handler](https://prosemirror.net/docs/ref/#view.EditorProps.handleKeyDown) that handles them.
|
|
237
|
+
*/
|
|
238
|
+
function keydownHandler(bindings) {
|
|
239
|
+
let map = normalize(bindings);
|
|
240
|
+
return function(view, event) {
|
|
241
|
+
let name = keyName(event), baseName, direct = map[modifiers(name, event)];
|
|
242
|
+
if (direct && direct(view.state, view.dispatch, view)) return true;
|
|
243
|
+
if (name.length == 1 && name != " ") {
|
|
244
|
+
if (event.shiftKey) {
|
|
245
|
+
let noShift = map[modifiers(name, event, false)];
|
|
246
|
+
if (noShift && noShift(view.state, view.dispatch, view)) return true;
|
|
247
|
+
}
|
|
248
|
+
if ((event.altKey || event.metaKey || event.ctrlKey) && !(windows && event.ctrlKey && event.altKey) && (baseName = base[event.keyCode]) && baseName != name) {
|
|
249
|
+
let fromCode = map[modifiers(baseName, event)];
|
|
250
|
+
if (fromCode && fromCode(view.state, view.dispatch, view)) return true;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
return false;
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
//#endregion
|
|
257
|
+
//#region src/core/extension.ts
|
|
258
|
+
/**
|
|
259
|
+
* ExtensionManager collects all extensions, compiles them into
|
|
260
|
+
* a ProseMirror Schema, Plugin list, Command registry, and Keymap.
|
|
261
|
+
*/
|
|
262
|
+
var ExtensionManager = class {
|
|
263
|
+
constructor(extensions) {
|
|
264
|
+
this._schema = null;
|
|
265
|
+
this._plugins = null;
|
|
266
|
+
this._commands = null;
|
|
267
|
+
this.extensions = extensions;
|
|
268
|
+
}
|
|
269
|
+
/** Compile all extension nodes/marks into a ProseMirror Schema */
|
|
270
|
+
get schema() {
|
|
271
|
+
if (this._schema) return this._schema;
|
|
272
|
+
const nodes = {};
|
|
273
|
+
const marks = {};
|
|
274
|
+
for (const ext of this.extensions) {
|
|
275
|
+
if (ext.addNodes) Object.assign(nodes, ext.addNodes());
|
|
276
|
+
if (ext.addMarks) Object.assign(marks, ext.addMarks());
|
|
277
|
+
}
|
|
278
|
+
if (!nodes.doc) nodes.doc = { content: "block+" };
|
|
279
|
+
if (!nodes.text) nodes.text = { group: "inline" };
|
|
280
|
+
this._schema = new require_dist.Schema({
|
|
281
|
+
nodes,
|
|
282
|
+
marks
|
|
283
|
+
});
|
|
284
|
+
return this._schema;
|
|
285
|
+
}
|
|
286
|
+
/** Compile all extension plugins including keymap and baseKeymap */
|
|
287
|
+
get plugins() {
|
|
288
|
+
if (this._plugins) return this._plugins;
|
|
289
|
+
const plugins = [];
|
|
290
|
+
const allShortcuts = {};
|
|
291
|
+
for (const ext of this.extensions) if (ext.addKeyboardShortcuts) Object.assign(allShortcuts, ext.addKeyboardShortcuts());
|
|
292
|
+
if (Object.keys(allShortcuts).length > 0) plugins.push(keymap(allShortcuts));
|
|
293
|
+
plugins.push(keymap(require_dist.baseKeymap));
|
|
294
|
+
for (const ext of this.extensions) if (ext.addPlugins) plugins.push(...ext.addPlugins());
|
|
295
|
+
this._plugins = plugins;
|
|
296
|
+
return this._plugins;
|
|
297
|
+
}
|
|
298
|
+
get commands() {
|
|
299
|
+
if (this._commands) return this._commands;
|
|
300
|
+
const commands = {};
|
|
301
|
+
for (const ext of this.extensions) if (ext.addCommands) Object.assign(commands, ext.addCommands());
|
|
302
|
+
this._commands = commands;
|
|
303
|
+
return this._commands;
|
|
304
|
+
}
|
|
305
|
+
callBeforeCreate() {
|
|
306
|
+
for (const ext of this.extensions) if (ext.onBeforeCreate) ext.onBeforeCreate();
|
|
307
|
+
}
|
|
308
|
+
callCreate(editor) {
|
|
309
|
+
for (const ext of this.extensions) if (ext.onCreate) ext.onCreate(editor);
|
|
310
|
+
}
|
|
311
|
+
callUpdate(editor) {
|
|
312
|
+
for (const ext of this.extensions) if (ext.onUpdate) ext.onUpdate(editor);
|
|
313
|
+
}
|
|
314
|
+
callDestroy() {
|
|
315
|
+
for (const ext of this.extensions) if (ext.onDestroy) ext.onDestroy();
|
|
316
|
+
}
|
|
317
|
+
};
|
|
318
|
+
//#endregion
|
|
319
|
+
Object.defineProperty(exports, "EditorView", {
|
|
320
|
+
enumerable: true,
|
|
321
|
+
get: function() {
|
|
322
|
+
return EditorView;
|
|
323
|
+
}
|
|
324
|
+
});
|
|
325
|
+
Object.defineProperty(exports, "ExtensionManager", {
|
|
326
|
+
enumerable: true,
|
|
327
|
+
get: function() {
|
|
328
|
+
return ExtensionManager;
|
|
329
|
+
}
|
|
330
|
+
});
|
|
331
|
+
Object.defineProperty(exports, "keymap", {
|
|
332
|
+
enumerable: true,
|
|
333
|
+
get: function() {
|
|
334
|
+
return keymap;
|
|
335
|
+
}
|
|
336
|
+
});
|
|
337
|
+
|
|
338
|
+
//# sourceMappingURL=extension-BPFuYyzN.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension-BPFuYyzN.cjs","names":["mac","Plugin"],"sources":["../src/core/editor-view.ts","../node_modules/.pnpm/w3c-keyname@2.2.8/node_modules/w3c-keyname/index.js","../node_modules/.pnpm/prosemirror-keymap@1.2.3/node_modules/prosemirror-keymap/dist/index.js","../src/core/extension.ts"],"sourcesContent":["import { EditorView as PMEditorView } from 'prosemirror-view'\r\nimport { EditorState } from 'prosemirror-state'\r\nimport type { Transaction } from 'prosemirror-state'\r\nimport type { Plugin } from 'prosemirror-state'\r\n\r\n// Re-export PM types for consumers\r\nexport type { EditorState, Transaction, Plugin }\r\n\r\nexport interface EditorViewConfig {\r\n /** The DOM element to mount into */\r\n element: HTMLElement\r\n /** Initial editor state */\r\n state: EditorState\r\n /** Whether the editor is editable */\r\n editable?: boolean\r\n /** Transaction dispatch callback */\r\n dispatchTransaction?: (tr: Transaction) => void\r\n}\r\n\r\n/**\r\n * EditorView wraps ProseMirror's EditorView, providing a stable API\r\n * that matches our editor's interface contract.\r\n */\r\nexport class EditorView {\r\n private _pm: PMEditorView\r\n\r\n constructor(config: EditorViewConfig) {\r\n const { element, state, editable = true, dispatchTransaction } = config\r\n\r\n this._pm = new PMEditorView(element, {\r\n state,\r\n editable: () => editable,\r\n dispatchTransaction: dispatchTransaction\r\n ? (tr) => dispatchTransaction(tr)\r\n : undefined,\r\n })\r\n }\r\n\r\n /** The root DOM element managed by ProseMirror */\r\n get dom(): HTMLElement {\r\n return this._pm.dom as HTMLElement\r\n }\r\n\r\n /** Alias for backward compatibility */\r\n get editableDom(): HTMLElement {\r\n return this.dom\r\n }\r\n\r\n /** Current editor state */\r\n get state(): EditorState {\r\n return this._pm.state\r\n }\r\n\r\n /** Dispatch a transaction */\r\n dispatch(tr: Transaction): void {\r\n this._pm.dispatch(tr)\r\n }\r\n\r\n /** Replace the editor state entirely */\r\n updateState(state: EditorState): void {\r\n this._pm.updateState(state)\r\n }\r\n\r\n /** Destroy the editor and clean up DOM */\r\n destroy(): void {\r\n this._pm.destroy()\r\n }\r\n\r\n /** Focus the editor */\r\n focus(): void {\r\n this._pm.focus()\r\n }\r\n\r\n /** Whether the editor has focus */\r\n get hasFocus(): boolean {\r\n return this._pm.hasFocus()\r\n }\r\n\r\n /** Get the ProseMirror position from a DOM coordinate */\r\n posAtDOM(node: HTMLElement, offset: number): number {\r\n return this._pm.posAtDOM(node, offset)\r\n }\r\n\r\n /** Get DOM coordinates for a ProseMirror position */\r\n coordsAtPos(pos: number, side?: number): { left: number; right: number; top: number; bottom: number } {\r\n return this._pm.coordsAtPos(pos, side)\r\n }\r\n\r\n /** Access the underlying ProseMirror EditorView */\r\n get pmView(): PMEditorView {\r\n return this._pm\r\n }\r\n}\r\n\r\nexport type { NodeView, NodeViewConstructor } from 'prosemirror-view'\r\n","export var base = {\n 8: \"Backspace\",\n 9: \"Tab\",\n 10: \"Enter\",\n 12: \"NumLock\",\n 13: \"Enter\",\n 16: \"Shift\",\n 17: \"Control\",\n 18: \"Alt\",\n 20: \"CapsLock\",\n 27: \"Escape\",\n 32: \" \",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"ArrowLeft\",\n 38: \"ArrowUp\",\n 39: \"ArrowRight\",\n 40: \"ArrowDown\",\n 44: \"PrintScreen\",\n 45: \"Insert\",\n 46: \"Delete\",\n 59: \";\",\n 61: \"=\",\n 91: \"Meta\",\n 92: \"Meta\",\n 106: \"*\",\n 107: \"+\",\n 108: \",\",\n 109: \"-\",\n 110: \".\",\n 111: \"/\",\n 144: \"NumLock\",\n 145: \"ScrollLock\",\n 160: \"Shift\",\n 161: \"Shift\",\n 162: \"Control\",\n 163: \"Control\",\n 164: \"Alt\",\n 165: \"Alt\",\n 173: \"-\",\n 186: \";\",\n 187: \"=\",\n 188: \",\",\n 189: \"-\",\n 190: \".\",\n 191: \"/\",\n 192: \"`\",\n 219: \"[\",\n 220: \"\\\\\",\n 221: \"]\",\n 222: \"'\"\n}\n\nexport var shift = {\n 48: \")\",\n 49: \"!\",\n 50: \"@\",\n 51: \"#\",\n 52: \"$\",\n 53: \"%\",\n 54: \"^\",\n 55: \"&\",\n 56: \"*\",\n 57: \"(\",\n 59: \":\",\n 61: \"+\",\n 173: \"_\",\n 186: \":\",\n 187: \"+\",\n 188: \"<\",\n 189: \"_\",\n 190: \">\",\n 191: \"?\",\n 192: \"~\",\n 219: \"{\",\n 220: \"|\",\n 221: \"}\",\n 222: \"\\\"\"\n}\n\nvar mac = typeof navigator != \"undefined\" && /Mac/.test(navigator.platform)\nvar ie = typeof navigator != \"undefined\" && /MSIE \\d|Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(navigator.userAgent)\n\n// Fill in the digit keys\nfor (var i = 0; i < 10; i++) base[48 + i] = base[96 + i] = String(i)\n\n// The function keys\nfor (var i = 1; i <= 24; i++) base[i + 111] = \"F\" + i\n\n// And the alphabetic keys\nfor (var i = 65; i <= 90; i++) {\n base[i] = String.fromCharCode(i + 32)\n shift[i] = String.fromCharCode(i)\n}\n\n// For each code that doesn't have a shift-equivalent, copy the base name\nfor (var code in base) if (!shift.hasOwnProperty(code)) shift[code] = base[code]\n\nexport function keyName(event) {\n // On macOS, keys held with Shift and Cmd don't reflect the effect of Shift in `.key`.\n // On IE, shift effect is never included in `.key`.\n var ignoreKey = mac && event.metaKey && event.shiftKey && !event.ctrlKey && !event.altKey ||\n ie && event.shiftKey && event.key && event.key.length == 1 ||\n event.key == \"Unidentified\"\n var name = (!ignoreKey && event.key) ||\n (event.shiftKey ? shift : base)[event.keyCode] ||\n event.key || \"Unidentified\"\n // Edge sometimes produces wrong names (Issue #3)\n if (name == \"Esc\") name = \"Escape\"\n if (name == \"Del\") name = \"Delete\"\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/8860571/\n if (name == \"Left\") name = \"ArrowLeft\"\n if (name == \"Up\") name = \"ArrowUp\"\n if (name == \"Right\") name = \"ArrowRight\"\n if (name == \"Down\") name = \"ArrowDown\"\n return name\n}\n","import { keyName, base } from 'w3c-keyname';\nimport { Plugin } from 'prosemirror-state';\n\nconst mac = typeof navigator != \"undefined\" && /Mac|iP(hone|[oa]d)/.test(navigator.platform);\nconst windows = typeof navigator != \"undefined\" && /Win/.test(navigator.platform);\nfunction normalizeKeyName(name) {\n let parts = name.split(/-(?!$)/), result = parts[parts.length - 1];\n if (result == \"Space\")\n result = \" \";\n let alt, ctrl, shift, meta;\n for (let i = 0; i < parts.length - 1; i++) {\n let mod = parts[i];\n if (/^(cmd|meta|m)$/i.test(mod))\n meta = true;\n else if (/^a(lt)?$/i.test(mod))\n alt = true;\n else if (/^(c|ctrl|control)$/i.test(mod))\n ctrl = true;\n else if (/^s(hift)?$/i.test(mod))\n shift = true;\n else if (/^mod$/i.test(mod)) {\n if (mac)\n meta = true;\n else\n ctrl = true;\n }\n else\n throw new Error(\"Unrecognized modifier name: \" + mod);\n }\n if (alt)\n result = \"Alt-\" + result;\n if (ctrl)\n result = \"Ctrl-\" + result;\n if (meta)\n result = \"Meta-\" + result;\n if (shift)\n result = \"Shift-\" + result;\n return result;\n}\nfunction normalize(map) {\n let copy = Object.create(null);\n for (let prop in map)\n copy[normalizeKeyName(prop)] = map[prop];\n return copy;\n}\nfunction modifiers(name, event, shift = true) {\n if (event.altKey)\n name = \"Alt-\" + name;\n if (event.ctrlKey)\n name = \"Ctrl-\" + name;\n if (event.metaKey)\n name = \"Meta-\" + name;\n if (shift && event.shiftKey)\n name = \"Shift-\" + name;\n return name;\n}\n/**\nCreate a keymap plugin for the given set of bindings.\n\nBindings should map key names to [command](https://prosemirror.net/docs/ref/#commands)-style\nfunctions, which will be called with `(EditorState, dispatch,\nEditorView)` arguments, and should return true when they've handled\nthe key. Note that the view argument isn't part of the command\nprotocol, but can be used as an escape hatch if a binding needs to\ndirectly interact with the UI.\n\nKey names may be strings like `\"Shift-Ctrl-Enter\"`—a key\nidentifier prefixed with zero or more modifiers. Key identifiers\nare based on the strings that can appear in\n[`KeyEvent.key`](https:developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key).\nUse lowercase letters to refer to letter keys (or uppercase letters\nif you want shift to be held). You may use `\"Space\"` as an alias\nfor the `\" \"` name.\n\nModifiers can be given in any order. `Shift-` (or `s-`), `Alt-` (or\n`a-`), `Ctrl-` (or `c-` or `Control-`) and `Cmd-` (or `m-` or\n`Meta-`) are recognized. For characters that are created by holding\nshift, the `Shift-` prefix is implied, and should not be added\nexplicitly.\n\nYou can use `Mod-` as a shorthand for `Cmd-` on Mac and `Ctrl-` on\nother platforms.\n\nYou can add multiple keymap plugins to an editor. The order in\nwhich they appear determines their precedence (the ones early in\nthe array get to dispatch first).\n*/\nfunction keymap(bindings) {\n return new Plugin({ props: { handleKeyDown: keydownHandler(bindings) } });\n}\n/**\nGiven a set of bindings (using the same format as\n[`keymap`](https://prosemirror.net/docs/ref/#keymap.keymap)), return a [keydown\nhandler](https://prosemirror.net/docs/ref/#view.EditorProps.handleKeyDown) that handles them.\n*/\nfunction keydownHandler(bindings) {\n let map = normalize(bindings);\n return function (view, event) {\n let name = keyName(event), baseName, direct = map[modifiers(name, event)];\n if (direct && direct(view.state, view.dispatch, view))\n return true;\n // A character key\n if (name.length == 1 && name != \" \") {\n if (event.shiftKey) {\n // In case the name was already modified by shift, try looking\n // it up without its shift modifier\n let noShift = map[modifiers(name, event, false)];\n if (noShift && noShift(view.state, view.dispatch, view))\n return true;\n }\n if ((event.altKey || event.metaKey || event.ctrlKey) &&\n // Ctrl-Alt may be used for AltGr on Windows\n !(windows && event.ctrlKey && event.altKey) &&\n (baseName = base[event.keyCode]) && baseName != name) {\n // Try falling back to the keyCode when there's a modifier\n // active or the character produced isn't ASCII, and our table\n // produces a different name from the the keyCode. See #668,\n // #1060, #1529.\n let fromCode = map[modifiers(baseName, event)];\n if (fromCode && fromCode(view.state, view.dispatch, view))\n return true;\n }\n }\n return false;\n };\n}\n\nexport { keydownHandler, keymap };\n","import { Schema, type NodeSpec, type MarkSpec } from 'prosemirror-model'\r\nimport { Plugin } from 'prosemirror-state'\r\nimport { keymap } from 'prosemirror-keymap'\r\nimport { history } from 'prosemirror-history'\r\nimport { baseKeymap } from 'prosemirror-commands'\r\nimport type { Command } from 'prosemirror-state'\r\n\r\n// ---------------------------------------------------------------------------\r\n// Extension types\r\n// ---------------------------------------------------------------------------\r\n\r\n/** Global attribute definition */\r\nexport interface GlobalAttribute {\r\n types: string[]\r\n attributes: Record<string, AttrDef>\r\n}\r\n\r\nexport interface AttrDef {\r\n default?: unknown\r\n rendered?: boolean\r\n}\r\n\r\nexport type ExtensionType = 'node' | 'mark' | 'extension'\r\n\r\n// ---------------------------------------------------------------------------\r\n// Extension interface\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Extension is the composable unit of editor functionality.\r\n * Uses ProseMirror NodeSpec/MarkSpec/Plugin/Command types directly.\r\n */\r\nexport interface Extension {\r\n name: string\r\n type: ExtensionType\r\n\r\n /** Schema extension: add node types (ProseMirror NodeSpec with toDOM/parseDOM) */\r\n addNodes?(): Record<string, NodeSpec>\r\n /** Schema extension: add mark types (ProseMirror MarkSpec with toDOM/parseDOM) */\r\n addMarks?(): Record<string, MarkSpec>\r\n\r\n /** Behavior extension: add commands */\r\n addCommands?(): Record<string, (...args: unknown[]) => Command>\r\n /** Behavior extension: add keyboard shortcuts */\r\n addKeyboardShortcuts?(): Record<string, Command>\r\n\r\n /** Low-level ProseMirror plugin generation */\r\n addPlugins?(): Plugin[]\r\n\r\n /** Global attributes */\r\n addGlobalAttributes?(): GlobalAttribute[]\r\n\r\n /** Extension options */\r\n options?: Record<string, unknown>\r\n\r\n /** Lifecycle hooks */\r\n onBeforeCreate?(): void\r\n onCreate?(editor: unknown): void\r\n onUpdate?(editor: unknown): void\r\n onDestroy?(): void\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// ExtensionManager\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * ExtensionManager collects all extensions, compiles them into\r\n * a ProseMirror Schema, Plugin list, Command registry, and Keymap.\r\n */\r\nexport class ExtensionManager {\r\n readonly extensions: Extension[]\r\n private _schema: Schema | null = null\r\n private _plugins: Plugin[] | null = null\r\n private _commands: Record<string, (...args: unknown[]) => Command> | null = null\r\n\r\n constructor(extensions: Extension[]) {\r\n this.extensions = extensions\r\n }\r\n\r\n // ---------------------------------------------------------------------------\r\n // Schema compilation\r\n // ---------------------------------------------------------------------------\r\n\r\n /** Compile all extension nodes/marks into a ProseMirror Schema */\r\n get schema(): Schema {\r\n if (this._schema) return this._schema\r\n\r\n const nodes: Record<string, NodeSpec> = {}\r\n const marks: Record<string, MarkSpec> = {}\r\n\r\n for (const ext of this.extensions) {\r\n if (ext.addNodes) {\r\n Object.assign(nodes, ext.addNodes())\r\n }\r\n if (ext.addMarks) {\r\n Object.assign(marks, ext.addMarks())\r\n }\r\n }\r\n\r\n // Ensure doc node exists (required by ProseMirror)\r\n if (!nodes.doc) {\r\n nodes.doc = { content: 'block+' }\r\n }\r\n\r\n // Ensure text node exists (required for inline content)\r\n if (!nodes.text) {\r\n nodes.text = { group: 'inline' }\r\n }\r\n\r\n this._schema = new Schema({ nodes, marks })\r\n return this._schema\r\n }\r\n\r\n // ---------------------------------------------------------------------------\r\n // Plugin compilation\r\n // ---------------------------------------------------------------------------\r\n\r\n /** Compile all extension plugins including keymap and baseKeymap */\r\n get plugins(): Plugin[] {\r\n if (this._plugins) return this._plugins\r\n\r\n const plugins: Plugin[] = []\r\n\r\n // Collect keyboard shortcuts from all extensions and merge into a single keymap plugin\r\n const allShortcuts: Record<string, Command> = {}\r\n for (const ext of this.extensions) {\r\n if (ext.addKeyboardShortcuts) {\r\n Object.assign(allShortcuts, ext.addKeyboardShortcuts())\r\n }\r\n }\r\n if (Object.keys(allShortcuts).length > 0) {\r\n plugins.push(keymap(allShortcuts))\r\n }\r\n\r\n // Add base keymap (Enter, Backspace, etc.)\r\n plugins.push(keymap(baseKeymap))\r\n\r\n // Collect explicit plugins from extensions (but skip history — added separately)\r\n for (const ext of this.extensions) {\r\n if (ext.addPlugins) {\r\n plugins.push(...ext.addPlugins())\r\n }\r\n }\r\n\r\n this._plugins = plugins\r\n return this._plugins\r\n }\r\n\r\n // ---------------------------------------------------------------------------\r\n // Command registry\r\n // ---------------------------------------------------------------------------\r\n\r\n get commands(): Record<string, (...args: unknown[]) => Command> {\r\n if (this._commands) return this._commands\r\n\r\n const commands: Record<string, (...args: unknown[]) => Command> = {}\r\n for (const ext of this.extensions) {\r\n if (ext.addCommands) {\r\n Object.assign(commands, ext.addCommands())\r\n }\r\n }\r\n\r\n this._commands = commands\r\n return this._commands\r\n }\r\n\r\n // ---------------------------------------------------------------------------\r\n // Lifecycle\r\n // ---------------------------------------------------------------------------\r\n\r\n callBeforeCreate(): void {\r\n for (const ext of this.extensions) {\r\n if (ext.onBeforeCreate) ext.onBeforeCreate()\r\n }\r\n }\r\n\r\n callCreate(editor: unknown): void {\r\n for (const ext of this.extensions) {\r\n if (ext.onCreate) ext.onCreate(editor)\r\n }\r\n }\r\n\r\n callUpdate(editor: unknown): void {\r\n for (const ext of this.extensions) {\r\n if (ext.onUpdate) ext.onUpdate(editor)\r\n }\r\n }\r\n\r\n callDestroy(): void {\r\n for (const ext of this.extensions) {\r\n if (ext.onDestroy) ext.onDestroy()\r\n }\r\n }\r\n}\r\n"],"x_google_ignoreList":[1,2],"mappings":"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"}
|