@lobehub/editor 1.14.0 → 1.14.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/es/const/hotkey.js
CHANGED
|
@@ -55,4 +55,9 @@ export var HOTKEYS_REGISTRATION = [{
|
|
|
55
55
|
keys: combineKeys([KeyEnum.Mod, KeyEnum.Shift, '8']),
|
|
56
56
|
priority: COMMAND_PRIORITY_EDITOR,
|
|
57
57
|
scopes: [HotkeyScopeEnum.Insert, HotkeyScopeEnum.Plugin]
|
|
58
|
+
}, {
|
|
59
|
+
id: HotkeyEnum.PasteAsPlainText,
|
|
60
|
+
keys: combineKeys([KeyEnum.Mod, KeyEnum.Shift, 'v']),
|
|
61
|
+
priority: COMMAND_PRIORITY_EDITOR,
|
|
62
|
+
scopes: [HotkeyScopeEnum.Format]
|
|
58
63
|
}];
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
+
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
|
|
3
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
4
|
+
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
1
5
|
import { $isCodeHighlightNode, $isCodeNode } from '@lexical/code';
|
|
2
6
|
import { $isHeadingNode } from '@lexical/rich-text';
|
|
3
7
|
import { mergeRegister } from '@lexical/utils';
|
|
@@ -136,7 +140,39 @@ export function registerRichKeydown(editor, kernel, options) {
|
|
|
136
140
|
var _ref = options || {},
|
|
137
141
|
_ref$enableHotkey = _ref.enableHotkey,
|
|
138
142
|
enableHotkey = _ref$enableHotkey === void 0 ? true : _ref$enableHotkey;
|
|
139
|
-
return mergeRegister(kernel.registerHotkey(HotkeyEnum.
|
|
143
|
+
return mergeRegister(kernel.registerHotkey(HotkeyEnum.PasteAsPlainText, /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
144
|
+
var text;
|
|
145
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
146
|
+
while (1) switch (_context.prev = _context.next) {
|
|
147
|
+
case 0:
|
|
148
|
+
_context.prev = 0;
|
|
149
|
+
_context.next = 3;
|
|
150
|
+
return navigator.clipboard.readText();
|
|
151
|
+
case 3:
|
|
152
|
+
text = _context.sent;
|
|
153
|
+
editor.update(function () {
|
|
154
|
+
var selection = $getSelection();
|
|
155
|
+
if (!$isRangeSelection(selection)) return;
|
|
156
|
+
|
|
157
|
+
// Simply insert the plain text
|
|
158
|
+
selection.insertText(text);
|
|
159
|
+
});
|
|
160
|
+
_context.next = 10;
|
|
161
|
+
break;
|
|
162
|
+
case 7:
|
|
163
|
+
_context.prev = 7;
|
|
164
|
+
_context.t0 = _context["catch"](0);
|
|
165
|
+
console.error('Failed to paste as plain text:', _context.t0);
|
|
166
|
+
case 10:
|
|
167
|
+
case "end":
|
|
168
|
+
return _context.stop();
|
|
169
|
+
}
|
|
170
|
+
}, _callee, null, [[0, 7]]);
|
|
171
|
+
})), {
|
|
172
|
+
enabled: enableHotkey,
|
|
173
|
+
preventDefault: true,
|
|
174
|
+
stopPropagation: true
|
|
175
|
+
}), kernel.registerHotkey(HotkeyEnum.Bold, function () {
|
|
140
176
|
return editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'bold');
|
|
141
177
|
}, {
|
|
142
178
|
enabled: enableHotkey,
|
|
@@ -293,8 +329,8 @@ export function registerRichKeydown(editor, kernel, options) {
|
|
|
293
329
|
var NEEDS_FOLLOWING_PARAGRAPH_TYPES = new Set(['code', 'table']);
|
|
294
330
|
export function registerLastElement(editor) {
|
|
295
331
|
var isProcessing = false;
|
|
296
|
-
return editor.registerUpdateListener(function (
|
|
297
|
-
var dirtyElements =
|
|
332
|
+
return editor.registerUpdateListener(function (_ref3) {
|
|
333
|
+
var dirtyElements = _ref3.dirtyElements;
|
|
298
334
|
// Only process when root node or its direct children have changes
|
|
299
335
|
if (!dirtyElements.has('root') && !Array.from(dirtyElements.keys()).some(function (key) {
|
|
300
336
|
var _node$getParent;
|
|
@@ -123,15 +123,24 @@ export var MarkdownPlugin = (_class = /*#__PURE__*/function (_KernelPlugin) {
|
|
|
123
123
|
var clipboardData = event.clipboardData;
|
|
124
124
|
if (!clipboardData) return false;
|
|
125
125
|
|
|
126
|
-
// Get
|
|
126
|
+
// Get clipboard content
|
|
127
127
|
var text = clipboardData.getData('text/plain');
|
|
128
128
|
var html = clipboardData.getData('text/html');
|
|
129
|
+
|
|
130
|
+
// If there's no text content, let Lexical handle it
|
|
129
131
|
if (!text) return false;
|
|
130
132
|
|
|
131
|
-
//
|
|
133
|
+
// If there's HTML content, it's a rich text paste
|
|
134
|
+
// Let Lexical's rich text handler process it
|
|
135
|
+
if (html && html.trim()) {
|
|
136
|
+
console.log('paste content analysis: HTML detected, letting Lexical handle it');
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Only handle plain text paste - check for markdown patterns
|
|
132
141
|
var hasMarkdownContent = _this2.detectMarkdownContent(text);
|
|
133
142
|
console.log('paste content analysis:', {
|
|
134
|
-
hasHTML:
|
|
143
|
+
hasHTML: false,
|
|
135
144
|
hasMarkdown: hasMarkdownContent,
|
|
136
145
|
markdownPatterns: _this2.getMarkdownPatterns(text),
|
|
137
146
|
text: text.slice(0, 100) + (text.length > 100 ? '...' : '')
|
package/es/types/hotkey.d.ts
CHANGED
|
@@ -43,6 +43,7 @@ export declare const HotkeyEnum: {
|
|
|
43
43
|
readonly Link: "link";
|
|
44
44
|
readonly Mention: "mention";
|
|
45
45
|
readonly NumberList: "numberList";
|
|
46
|
+
readonly PasteAsPlainText: "pasteAsPlainText";
|
|
46
47
|
readonly Redo: "redo";
|
|
47
48
|
readonly Slash: "slash";
|
|
48
49
|
readonly Strikethrough: "strikethrough";
|
package/es/types/hotkey.js
CHANGED
package/package.json
CHANGED