@lobehub/editor 4.6.2 → 4.8.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.
@@ -1,7 +1,7 @@
1
1
  import { A as $createCodeMirrorNode, At as createDebugLogger, B as Editor, C as $createCodeNode$1, D as getCodeInlineNode, Ft as init_debug, Gt as INodeHelper, H as DataSource, Ht as exportNodeToJSON$1, Jt as __exportAll, K as $closest, Kt as init_helper, L as CursorNode, Lt as $canShowPlaceholderCurry, N as $createCursorNode, O as styles$2, Ot as init_hotkey, R as cursorNodeSerialized, Rt as $isCursorInQuote, Tt as HotkeyEnum, Ut as init_utils$1, Vt as createBlockNode, Wt as sampleReader, Xt as __toESM, Y as $getNodeFromDOMNode, d as $isLinkHighlightNode, i as MentionNode, it as genServiceId, k as themeStyles, mt as noop, n as $createMentionNode, p as getLinkHighlightNode, q as $closestNodeType, qt as __commonJSMin, r as $isMentionNode, t as styles$3, tt as assert, u as $createLinkHighlightNode, ut as init_utils, vt as KernelPlugin, w as $isCodeInlineNode, yt as init_plugin, z as registerCursorNode, zt as $isCursorInTable } from "./style-Ub1LiKko.js";
2
2
  import { registerHistory } from "@lexical/history";
3
3
  import { $isTableSelection } from "@lexical/table";
4
- import { $caretFromPoint, $createLineBreakNode, $createNodeSelection, $createParagraphNode, $createPoint, $createRangeSelection, $createTabNode, $createTextNode, $getCaretRange, $getCaretRangeInDirection, $getCharacterOffsets, $getChildCaret, $getNearestNodeFromDOMNode, $getNodeByKey, $getRoot, $getSelection, $getSiblingCaret, $getTextPointCaret, $insertNodes, $isBlockElementNode, $isDecoratorNode, $isElementNode, $isLineBreakNode, $isNodeSelection, $isRangeSelection, $isRootOrShadowRoot, $isTabNode, $isTextNode, $isTextPointCaret, $normalizeCaret, $parseSerializedNode, $setSelection, $setSelectionFromCaretRange, CLICK_COMMAND, COLLABORATION_TAG, COMMAND_PRIORITY_CRITICAL, COMMAND_PRIORITY_EDITOR, COMMAND_PRIORITY_HIGH, COMMAND_PRIORITY_LOW, COMMAND_PRIORITY_NORMAL, CONTROLLED_TEXT_INSERTION_COMMAND, FORMAT_TEXT_COMMAND, HISTORIC_TAG, HISTORY_PUSH_TAG, INDENT_CONTENT_COMMAND, INSERT_LINE_BREAK_COMMAND, INSERT_PARAGRAPH_COMMAND, INSERT_TAB_COMMAND, IS_BOLD, IS_CODE, IS_ITALIC, IS_STRIKETHROUGH, IS_SUBSCRIPT, IS_SUPERSCRIPT, IS_UNDERLINE, KEY_ARROW_DOWN_COMMAND, KEY_ARROW_LEFT_COMMAND, KEY_ARROW_RIGHT_COMMAND, KEY_ARROW_UP_COMMAND, KEY_BACKSPACE_COMMAND, KEY_DOWN_COMMAND, KEY_ENTER_COMMAND, KEY_ESCAPE_COMMAND, KEY_TAB_COMMAND, MOVE_TO_END, MOVE_TO_START, OUTDENT_CONTENT_COMMAND, PASTE_COMMAND, ParagraphNode, REDO_COMMAND, SELECTION_CHANGE_COMMAND, SELECTION_INSERT_CLIPBOARD_NODES_COMMAND, TEXT_TYPE_TO_FORMAT, TabNode, TextNode, UNDO_COMMAND, createCommand, getDOMSelection, getNearestEditorFromDOMNode, resetRandomKey } from "lexical";
4
+ import { $caretFromPoint, $createLineBreakNode, $createNodeSelection, $createParagraphNode, $createPoint, $createRangeSelection, $createTabNode, $createTextNode, $getCaretRange, $getCaretRangeInDirection, $getCharacterOffsets, $getChildCaret, $getNearestNodeFromDOMNode, $getNodeByKey, $getRoot, $getSelection, $getSiblingCaret, $getTextPointCaret, $insertNodes, $isBlockElementNode, $isDecoratorNode, $isElementNode, $isLineBreakNode, $isNodeSelection, $isRangeSelection, $isRootOrShadowRoot, $isTabNode, $isTextNode, $isTextPointCaret, $normalizeCaret, $parseSerializedNode, $setSelection, $setSelectionFromCaretRange, CLICK_COMMAND, COLLABORATION_TAG, COMMAND_PRIORITY_CRITICAL, COMMAND_PRIORITY_EDITOR, COMMAND_PRIORITY_HIGH, COMMAND_PRIORITY_LOW, COMMAND_PRIORITY_NORMAL, CONTROLLED_TEXT_INSERTION_COMMAND, COPY_COMMAND, FORMAT_TEXT_COMMAND, HISTORIC_TAG, HISTORY_PUSH_TAG, INDENT_CONTENT_COMMAND, INSERT_LINE_BREAK_COMMAND, INSERT_PARAGRAPH_COMMAND, INSERT_TAB_COMMAND, IS_BOLD, IS_CODE, IS_ITALIC, IS_STRIKETHROUGH, IS_SUBSCRIPT, IS_SUPERSCRIPT, IS_UNDERLINE, KEY_ARROW_DOWN_COMMAND, KEY_ARROW_LEFT_COMMAND, KEY_ARROW_RIGHT_COMMAND, KEY_ARROW_UP_COMMAND, KEY_BACKSPACE_COMMAND, KEY_DOWN_COMMAND, KEY_ENTER_COMMAND, KEY_ESCAPE_COMMAND, KEY_TAB_COMMAND, MOVE_TO_END, MOVE_TO_START, OUTDENT_CONTENT_COMMAND, PASTE_COMMAND, ParagraphNode, REDO_COMMAND, SELECTION_CHANGE_COMMAND, SELECTION_INSERT_CLIPBOARD_NODES_COMMAND, TEXT_TYPE_TO_FORMAT, TabNode, TextNode, UNDO_COMMAND, createCommand, getDOMSelection, getNearestEditorFromDOMNode, resetRandomKey } from "lexical";
5
5
  import { $createHeadingNode, $createQuoteNode, $isHeadingNode, $isQuoteNode, HeadingNode, QuoteNode, registerRichText } from "@lexical/rich-text";
6
6
  import { $findMatchingParent, $wrapNodeInElement, CAN_USE_DOM, calculateZoomLevel, isHTMLElement as isHTMLElement$1, mergeRegister } from "@lexical/utils";
7
7
  import { ErrorBoundary } from "react-error-boundary";
@@ -9,6 +9,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
9
9
  import { Children, Suspense, createContext, memo, use, useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
10
10
  import { Menu, ShikiLobeTheme, preprocessMarkdownContent, toast } from "@lobehub/ui";
11
11
  import remarkCjkFriendly from "remark-cjk-friendly";
12
+ import { $getClipboardDataFromSelection, setLexicalClipboardDataTransfer } from "@lexical/clipboard";
12
13
  import { $createCodeHighlightNode, $createCodeNode, $getEndOfCodeInLine, $getFirstCodeNodeOfLine, $getLastCodeNodeOfLine, $getStartOfCodeInLine, $isCodeHighlightNode, $isCodeNode, CodeHighlightNode, CodeNode, DEFAULT_CODE_LANGUAGE } from "@lexical/code-core";
13
14
  import { createStaticStyles, cx } from "antd-style";
14
15
  import { $isAtNodeEnd, $setBlocksType } from "@lexical/selection";
@@ -19515,9 +19516,10 @@ const MarkdownPlugin = class extends KernelPlugin {
19515
19516
  this.logger = createDebugLogger("plugin", "markdown");
19516
19517
  this.service = new MarkdownShortCutService(kernel);
19517
19518
  kernel.registerService(IMarkdownShortCutService, this.service);
19518
- kernel.registerDataSource(new MarkdownDataSource("markdown", this.service, (serviceId) => {
19519
+ this.markdownDataSource = new MarkdownDataSource("markdown", this.service, (serviceId) => {
19519
19520
  return kernel.requireService(serviceId);
19520
- }));
19521
+ });
19522
+ kernel.registerDataSource(this.markdownDataSource);
19521
19523
  }
19522
19524
  onInit(editor) {
19523
19525
  this.register(editor.registerUpdateListener(({ tags, dirtyLeaves, editorState, prevEditorState }) => {
@@ -19606,6 +19608,21 @@ const MarkdownPlugin = class extends KernelPlugin {
19606
19608
  return false;
19607
19609
  }, COMMAND_PRIORITY_CRITICAL));
19608
19610
  this.register(registerMarkdownCommand(editor, this.kernel, this.service));
19611
+ this.register(editor.registerCommand(COPY_COMMAND, (event) => {
19612
+ if (!(event instanceof ClipboardEvent)) return false;
19613
+ const clipboardData = event.clipboardData;
19614
+ if (!clipboardData) return false;
19615
+ const selection = $getSelection();
19616
+ if (!selection || selection.isCollapsed()) return false;
19617
+ const markdown = this.markdownDataSource.write(editor, { selection: true });
19618
+ if (!markdown) return false;
19619
+ event.preventDefault();
19620
+ setLexicalClipboardDataTransfer(clipboardData, $getClipboardDataFromSelection(selection));
19621
+ clipboardData.setData("text/plain", markdown);
19622
+ clipboardData.setData("text/markdown", markdown);
19623
+ this.logger.debug("copy with text/markdown:", { markdownLength: markdown.length });
19624
+ return true;
19625
+ }, COMMAND_PRIORITY_LOW));
19609
19626
  }
19610
19627
  /**
19611
19628
  * Detect if content is code and should be inserted as code block
package/es/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { $ as DOM_TEXT_TYPE, A as $createCodeMirrorNode, At as createDebugLogger, C as $createCodeNode$1, Ct as CONTROL_OR_META, Dt as KeyEnum, E as CodeNode$1, Et as HotkeyScopeEnum, F as $isCursorNode, Ft as init_debug, G as kernel_exports, Gt as INodeHelper, H as DataSource, I as CardLikeElementNode, It as prodSafeLogger, J as $getNearestNodeFromDOMNode, K as $closest, Kt as init_helper, M as CodeMirrorNode, Mt as debugLoggers, N as $createCursorNode, Nt as debug_exports, Ot as init_hotkey, P as $isCardLikeElementNode, Pt as devConsole, Q as DOM_ELEMENT_TYPE, R as cursorNodeSerialized, S as formatUrl, St as init_registerHotkey, Tt as HotkeyEnum, U as Kernel, V as resetRandomKey, W as init_kernel, X as DOM_DOCUMENT_FRAGMENT_TYPE, Y as $getNodeFromDOMNode, Yt as __toCommonJS, Z as DOM_DOCUMENT_TYPE, _ as AutoLinkNode, _t as unregisterEditorKernel, a as $createMathBlockNode, at as generateEditorId, b as LinkNode, bt as HOVER_COMMAND, c as MathBlockNode, ct as getNodeKeyFromDOMNode, dt as isDOMNode, et as EDITOR_THEME_KEY, f as LinkHighlightNode, ft as isDocumentFragment, g as $toggleLink, gt as registerEditorKernel, h as $isLinkNode, ht as reconcileDecorator, it as genServiceId, j as $isCodeMirrorNode, jt as debugLogger, kt as browserDebug, l as MathInlineNode, lt as getParentElement, m as $createLinkNode, mt as noop, nt as compareNodeOrder, o as $createMathInlineNode, ot as getKernelFromEditor, pt as moment, q as $closestNodeType, rt as createEmptyEditorState, s as $isMathNode, st as getKernelFromEditorConfig, tt as assert, u as $createLinkHighlightNode, ut as init_utils, v as HOVER_LINK_COMMAND, vt as KernelPlugin, wt as init_sys, x as TOGGLE_LINK_COMMAND, xt as getHotkeyById, y as HOVER_OUT_LINK_COMMAND, yt as init_plugin } from "./style-Ub1LiKko.js";
2
- import { A as idToChar, B as MARKDOWN_READER_LEVEL_NORMAL, C as ReactEditorContent, D as $cloneNode, E as LitexmlService, F as MarkdownPlugin, G as INSERT_MARKDOWN_COMMAND, H as INodePlugin, I as detectCodeLanguage, J as ReactEditor, K as isPunctuationChar, L as detectLanguage, M as INSERT_QUOTE_COMMAND, N as ReactMarkdownPlugin, O as $parseSerializedNodeImpl, P as useTranslation, R as IMarkdownShortCutService, S as ReactPlainText, T as ILitexmlService, U as INodeService, V as MARKDOWN_WRITER_LEVEL_MAX, W as GET_MARKDOWN_SELECTION_COMMAND, X as LexicalErrorBoundary, Y as useLexicalComposerContext, _ as bundledLanguagesInfo, a as ReactMentionPlugin, b as INSERT_CODEINLINE_COMMAND, c as INSERT_CHECK_LIST_COMMAND, d as registerLinkHighlightCommand, f as extractUrlFromText, g as useLexicalNodeSelection, i as SlashPlugin, j as INSERT_HEADING_COMMAND, k as charToId, l as registerCheckList, m as sanitizeUrl, n as ReactSlashOption, o as MentionPlugin, p as getSelectedNode, q as useLexicalEditor, r as SlashMenu, s as INSERT_MENTION_COMMAND, t as ReactSlashPlugin, u as INSERT_LINK_HIGHLIGHT_COMMAND, v as CodeblockPlugin, w as CommonPlugin, x as registerCodeInlineCommand, y as UPDATE_CODEBLOCK_LANG, z as MARKDOWN_READER_LEVEL_HIGH } from "./ReactSlashPlugin-GxCNaj2T.js";
2
+ import { A as idToChar, B as MARKDOWN_READER_LEVEL_NORMAL, C as ReactEditorContent, D as $cloneNode, E as LitexmlService, F as MarkdownPlugin, G as INSERT_MARKDOWN_COMMAND, H as INodePlugin, I as detectCodeLanguage, J as ReactEditor, K as isPunctuationChar, L as detectLanguage, M as INSERT_QUOTE_COMMAND, N as ReactMarkdownPlugin, O as $parseSerializedNodeImpl, P as useTranslation, R as IMarkdownShortCutService, S as ReactPlainText, T as ILitexmlService, U as INodeService, V as MARKDOWN_WRITER_LEVEL_MAX, W as GET_MARKDOWN_SELECTION_COMMAND, X as LexicalErrorBoundary, Y as useLexicalComposerContext, _ as bundledLanguagesInfo, a as ReactMentionPlugin, b as INSERT_CODEINLINE_COMMAND, c as INSERT_CHECK_LIST_COMMAND, d as registerLinkHighlightCommand, f as extractUrlFromText, g as useLexicalNodeSelection, i as SlashPlugin, j as INSERT_HEADING_COMMAND, k as charToId, l as registerCheckList, m as sanitizeUrl, n as ReactSlashOption, o as MentionPlugin, p as getSelectedNode, q as useLexicalEditor, r as SlashMenu, s as INSERT_MENTION_COMMAND, t as ReactSlashPlugin, u as INSERT_LINK_HIGHLIGHT_COMMAND, v as CodeblockPlugin, w as CommonPlugin, x as registerCodeInlineCommand, y as UPDATE_CODEBLOCK_LANG, z as MARKDOWN_READER_LEVEL_HIGH } from "./ReactSlashPlugin-Dp1bUEGK.js";
3
3
  import { S as PlaceholderNode, _ as $isFileNode, a as styles$16, b as DiffNode, c as ImageNode, d as BlockImageNode, f as $createHorizontalRuleNode, g as $createFileNode, h as styles$15, i as imageBroken, l as $createBlockImageNode, m as HorizontalRuleNode, n as styles$18, o as $createImageNode, p as $isHorizontalRuleNode, r as styles$17, s as $isImageNode, t as styles$19, u as $isBlockImageNode, v as FileNode, x as PlaceholderBlockNode, y as $createDiffNode } from "./style-CFkese2R.js";
4
4
  import { $computeTableMapSkipCellCheck, $createTableNodeWithDimensions, $createTableSelection, $deleteTableColumnAtSelection, $deleteTableRowAtSelection, $findTableNode, $getElementForTableNode, $getNodeTriplet, $getTableAndElementByKey, $getTableCellNodeFromLexicalNode, $getTableColumnIndexFromTableCellNode, $getTableNodeFromLexicalNodeOrThrow, $getTableRowIndexFromTableCellNode, $insertTableColumnAtSelection, $insertTableRowAtSelection, $isTableCellNode, $isTableNode, $isTableRowNode, $isTableSelection, $mergeCells, $unmergeCell, TableCellHeaderStates, TableCellNode, TableNode, TableNode as TableNode$1, TableRowNode, getDOMCellFromTarget, getTableElement, getTableObserverFromTableElement, registerTableCellUnmergeTransform, registerTablePlugin, registerTableSelectionObserver, setScrollableTablesActive } from "@lexical/table";
5
5
  import { debounce } from "es-toolkit/compat";
package/es/react.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { A as $createCodeMirrorNode, B as Editor$2, Bt as $isRootTextContentEmpty, S as formatUrl, T as $isSelectionInCodeInline, Ut as init_utils, a as $createMathBlockNode, d as $isLinkHighlightNode, h as $isLinkNode, j as $isCodeMirrorNode, mt as noop, o as $createMathInlineNode, x as TOGGLE_LINK_COMMAND } from "./style-Ub1LiKko.js";
2
- import { C as ReactEditorContent, J as ReactEditor, N as ReactMarkdownPlugin, S as ReactPlainText, a as ReactMentionPlugin, b as INSERT_CODEINLINE_COMMAND, c as INSERT_CHECK_LIST_COMMAND, f as extractUrlFromText, h as validateUrl, m as sanitizeUrl, n as ReactSlashOption, t as ReactSlashPlugin, u as INSERT_LINK_HIGHLIGHT_COMMAND, y as UPDATE_CODEBLOCK_LANG } from "./ReactSlashPlugin-GxCNaj2T.js";
2
+ import { C as ReactEditorContent, J as ReactEditor, N as ReactMarkdownPlugin, S as ReactPlainText, a as ReactMentionPlugin, b as INSERT_CODEINLINE_COMMAND, c as INSERT_CHECK_LIST_COMMAND, f as extractUrlFromText, h as validateUrl, m as sanitizeUrl, n as ReactSlashOption, t as ReactSlashPlugin, u as INSERT_LINK_HIGHLIGHT_COMMAND, y as UPDATE_CODEBLOCK_LANG } from "./ReactSlashPlugin-Dp1bUEGK.js";
3
3
  import { $createNodeSelection, $createParagraphNode, $getSelection, $isParagraphNode, $isRangeSelection, $isRootOrShadowRoot, $setSelection, CAN_REDO_COMMAND, CAN_UNDO_COMMAND, COMMAND_PRIORITY_LOW, FORMAT_TEXT_COMMAND, REDO_COMMAND, SELECTION_CHANGE_COMMAND, UNDO_COMMAND } from "lexical";
4
4
  import { $createQuoteNode, $isHeadingNode, $isQuoteNode } from "@lexical/rich-text";
5
5
  import { $findMatchingParent, $getNearestNodeOfType, mergeRegister } from "@lexical/utils";
package/es/renderer.d.ts CHANGED
@@ -2,6 +2,9 @@ import { Klass, LexicalNode, SerializedEditorState, SerializedLexicalNode } from
2
2
  import * as _$react_jsx_runtime0 from "react/jsx-runtime";
3
3
  import { CSSProperties, JSX, ReactElement, ReactNode } from "react";
4
4
 
5
+ //#region src/renderer/diff/style.d.ts
6
+ type DiffAppearance = 'borderless' | 'default';
7
+ //#endregion
5
8
  //#region src/renderer/diff/types.d.ts
6
9
  type LexicalDiffRowKind = 'delete' | 'equal' | 'insert' | 'modify';
7
10
  interface LexicalDiffCell {
@@ -60,6 +63,7 @@ interface LexicalRendererProps {
60
63
  //#endregion
61
64
  //#region src/renderer/LexicalDiff.d.ts
62
65
  interface LexicalDiffProps {
66
+ appearance?: DiffAppearance;
63
67
  blockRenderers?: Record<string, LexicalDiffBlockRenderer>;
64
68
  className?: string;
65
69
  extraNodes?: LexicalRendererProps['extraNodes'];
@@ -79,6 +83,7 @@ declare function LexicalDiff({
79
83
  oldValue,
80
84
  newValue,
81
85
  variant,
86
+ appearance,
82
87
  extraNodes,
83
88
  overrides,
84
89
  renderContext,
@@ -107,4 +112,4 @@ declare const rendererNodes: Array<Klass<LexicalNode>>;
107
112
  //#region src/renderer/renderers/index.d.ts
108
113
  declare function createDefaultRenderers(): RendererRegistry;
109
114
  //#endregion
110
- export { type HeadlessRenderContext, type HeadlessRenderableNode, LexicalDiff, type LexicalDiffBlockRenderContext, type LexicalDiffBlockRenderer, type LexicalDiffCell, type LexicalDiffProps, type LexicalDiffRow, type LexicalDiffRowKind, LexicalRenderer, type LexicalRendererContext, type LexicalRendererProps, type NodeRenderer, type RendererRegistry, createDefaultRenderers, loadLanguage, rendererNodes };
115
+ export { type DiffAppearance, type HeadlessRenderContext, type HeadlessRenderableNode, LexicalDiff, type LexicalDiffBlockRenderContext, type LexicalDiffBlockRenderer, type LexicalDiffCell, type LexicalDiffProps, type LexicalDiffRow, type LexicalDiffRowKind, LexicalRenderer, type LexicalRendererContext, type LexicalRendererProps, type NodeRenderer, type RendererRegistry, createDefaultRenderers, loadLanguage, rendererNodes };
package/es/renderer.js CHANGED
@@ -1,5 +1,5 @@
1
- import { E as CodeNode, L as CursorNode, M as CodeMirrorNode, O as styles$1, _ as AutoLinkNode, b as LinkNode, c as MathBlockNode, f as LinkHighlightNode, i as MentionNode, l as MathInlineNode, t as styles$2 } from "./style-Ub1LiKko.js";
2
- import { S as PlaceholderNode, a as styles$6, b as DiffNode, c as ImageNode, d as BlockImageNode, h as styles$7, m as HorizontalRuleNode, n as styles$5, r as styles$3, t as styles$4, v as FileNode, x as PlaceholderBlockNode } from "./style-CFkese2R.js";
1
+ import { E as CodeNode, L as CursorNode, M as CodeMirrorNode, O as styles, _ as AutoLinkNode, b as LinkNode, c as MathBlockNode, f as LinkHighlightNode, i as MentionNode, l as MathInlineNode, t as styles$1 } from "./style-Ub1LiKko.js";
2
+ import { S as PlaceholderNode, a as styles$5, b as DiffNode, c as ImageNode, d as BlockImageNode, h as styles$6, m as HorizontalRuleNode, n as styles$4, r as styles$2, t as styles$3, v as FileNode, x as PlaceholderBlockNode } from "./style-CFkese2R.js";
3
3
  import { TableCellNode, TableNode, TableRowNode } from "@lexical/table";
4
4
  import { $getRoot, $isElementNode, $isTextNode } from "lexical";
5
5
  import { HeadingNode, QuoteNode } from "@lexical/rich-text";
@@ -44,28 +44,28 @@ const tableHeaderFix = createStaticStyles(({ css, cssVar }) => css`
44
44
  }
45
45
  `);
46
46
  function getRendererClassName(className) {
47
- return cx(styles$1.root, styles$1.variant, className);
47
+ return cx(styles.root, styles.variant, className);
48
48
  }
49
49
  function getListClassName(listType) {
50
- return cx(listType === "number" ? "editor_listOrdered" : "editor_listUnordered", styles$3);
50
+ return cx(listType === "number" ? "editor_listOrdered" : "editor_listUnordered", styles$2);
51
51
  }
52
52
  function getTableWrapperClassName() {
53
- return cx("editor_table_scrollable_wrapper", styles$4, tableHeaderFix);
53
+ return cx("editor_table_scrollable_wrapper", styles$3, tableHeaderFix);
54
54
  }
55
55
  function getMathInlineClassName() {
56
- return styles$5.mathInline;
56
+ return styles$4.mathInline;
57
57
  }
58
58
  function getMathBlockClassName() {
59
- return styles$5.mathBlock;
59
+ return styles$4.mathBlock;
60
60
  }
61
61
  function getImageClassName() {
62
- return styles$6.image;
62
+ return styles$5.image;
63
63
  }
64
64
  function getBlockImageClassName() {
65
- return styles$6.blockImage;
65
+ return styles$5.blockImage;
66
66
  }
67
67
  function getMentionClassName() {
68
- return cx("editor_mention", styles$2.mention);
68
+ return cx("editor_mention", styles$1.mention);
69
69
  }
70
70
  function getCSSVariables(variant) {
71
71
  const isChat = variant === "chat";
@@ -343,7 +343,7 @@ function renderCodeBlock(node, key) {
343
343
  //#region src/renderer/renderers/file.tsx
344
344
  function renderFile(node, key) {
345
345
  const { name, fileUrl, status, message } = node;
346
- const cls = styles$7.file;
346
+ const cls = styles$6.file;
347
347
  if (status === "error") return /* @__PURE__ */ jsxs("span", {
348
348
  className: cls,
349
349
  "data-file-status": "error",
@@ -901,7 +901,7 @@ function computeLexicalDiffRows(oldState, newState) {
901
901
  }
902
902
  //#endregion
903
903
  //#region src/renderer/diff/style.ts
904
- const styles = createStaticStyles(({ css, cssVar }) => ({
904
+ const base = createStaticStyles(({ css, cssVar }) => ({
905
905
  body: css`
906
906
  display: flex;
907
907
  flex-direction: column;
@@ -917,13 +917,22 @@ const styles = createStaticStyles(({ css, cssVar }) => ({
917
917
  min-width: 0;
918
918
  }
919
919
  `,
920
- cellOld: css``,
921
920
  deleteCell: css`
922
921
  background: color-mix(in srgb, ${cssVar.colorError} 10%, transparent);
923
922
  `,
924
923
  emptyCell: css`
925
924
  background: ${cssVar.colorFillQuaternary};
926
925
  `,
926
+ insertCell: css`
927
+ background: color-mix(in srgb, ${cssVar.colorSuccess} 10%, transparent);
928
+ `,
929
+ row: css`
930
+ display: grid;
931
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
932
+ `
933
+ }));
934
+ const defaultOverrides = createStaticStyles(({ css, cssVar }) => ({
935
+ cellOld: css``,
927
936
  header: css`
928
937
  display: grid;
929
938
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
@@ -942,9 +951,6 @@ const styles = createStaticStyles(({ css, cssVar }) => ({
942
951
  `,
943
952
  headerOld: css`
944
953
  border-inline-end: 1px solid ${cssVar.colorBorderSecondary};
945
- `,
946
- insertCell: css`
947
- background: color-mix(in srgb, ${cssVar.colorSuccess} 10%, transparent);
948
954
  `,
949
955
  root: css`
950
956
  overflow: hidden;
@@ -955,12 +961,50 @@ const styles = createStaticStyles(({ css, cssVar }) => ({
955
961
  font-size: 14px;
956
962
 
957
963
  background: ${cssVar.colorBgContainer};
964
+ `
965
+ }));
966
+ const borderlessOverrides = createStaticStyles(({ css, cssVar }) => ({
967
+ body: css`
968
+ & > *:nth-child(odd) {
969
+ background: ${cssVar.colorFillQuaternary};
970
+ }
958
971
  `,
959
- row: css`
972
+ cellOld: css``,
973
+ header: css`
960
974
  display: grid;
961
975
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
976
+ column-gap: 12px;
977
+ `,
978
+ headerCell: css`
979
+ padding-block: 8px;
980
+ padding-inline: 16px;
981
+
982
+ font-size: 12px;
983
+ font-weight: 600;
984
+ color: ${cssVar.colorTextSecondary};
985
+ text-transform: uppercase;
986
+ letter-spacing: 0.05em;
987
+ `,
988
+ headerOld: css``,
989
+ root: css`
990
+ overflow: hidden;
991
+ font-size: 14px;
992
+ background: ${cssVar.colorBgContainer};
993
+ `,
994
+ row: css`
995
+ column-gap: 12px;
962
996
  `
963
997
  }));
998
+ function merge(baseSet, overrides) {
999
+ const result = {};
1000
+ const allKeys = new Set([...Object.keys(baseSet), ...Object.keys(overrides)]);
1001
+ for (const key of allKeys) result[key] = cx(baseSet[key], overrides[key]);
1002
+ return result;
1003
+ }
1004
+ const diffStyles = {
1005
+ borderless: merge(base, borderlessOverrides),
1006
+ default: merge(base, defaultOverrides)
1007
+ };
964
1008
  //#endregion
965
1009
  //#region src/renderer/LexicalDiff.tsx
966
1010
  function wrapBlock(block) {
@@ -979,7 +1023,8 @@ function RowCell({ className, content }) {
979
1023
  children: content
980
1024
  });
981
1025
  }
982
- function LexicalDiff({ oldValue, newValue, variant = "default", extraNodes, overrides, renderContext, labels, blockRenderers, renderBlockDiff, className, style }) {
1026
+ function LexicalDiff({ oldValue, newValue, variant = "default", appearance = "default", extraNodes, overrides, renderContext, labels, blockRenderers, renderBlockDiff, className, style }) {
1027
+ const styles = diffStyles[appearance];
983
1028
  const rows = useMemo(() => computeLexicalDiffRows(oldValue, newValue), [oldValue, newValue]);
984
1029
  const renderDefaultCell = (block) => {
985
1030
  if (!block) return null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lobehub/editor",
3
- "version": "4.6.2",
3
+ "version": "4.8.0",
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",
@@ -71,6 +71,7 @@
71
71
  "dependencies": {
72
72
  "@floating-ui/dom": "^1.7.4",
73
73
  "@floating-ui/react": "^0.27.16",
74
+ "@lexical/clipboard": "^0.42.0",
74
75
  "@lexical/code-core": "^0.42.0",
75
76
  "@lexical/dragon": "^0.42.0",
76
77
  "@lexical/headless": "^0.42.0",