@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.
@@ -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.Bold, function () {
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 (_ref2) {
297
- var dirtyElements = _ref2.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 plain text content
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
- // Check if content contains markdown patterns
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: !!html,
143
+ hasHTML: false,
135
144
  hasMarkdown: hasMarkdownContent,
136
145
  markdownPatterns: _this2.getMarkdownPatterns(text),
137
146
  text: text.slice(0, 100) + (text.length > 100 ? '...' : '')
@@ -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";
@@ -57,6 +57,7 @@ export var HotkeyEnum = {
57
57
  Link: 'link',
58
58
  Mention: 'mention',
59
59
  NumberList: 'numberList',
60
+ PasteAsPlainText: 'pasteAsPlainText',
60
61
  Redo: 'redo',
61
62
  Slash: 'slash',
62
63
  Strikethrough: 'strikethrough',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lobehub/editor",
3
- "version": "1.14.0",
3
+ "version": "1.14.1",
4
4
  "description": "A powerful and extensible rich text editor built on Meta's Lexical framework, providing a modern editing experience with React integration.",
5
5
  "keywords": [
6
6
  "lobehub",