@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.
- package/es/{ReactSlashPlugin-GxCNaj2T.js → ReactSlashPlugin-Dp1bUEGK.js} +20 -3
- package/es/index.js +1 -1
- package/es/react.js +1 -1
- package/es/renderer.d.ts +6 -1
- package/es/renderer.js +63 -18
- package/package.json +2 -1
|
@@ -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
|
-
|
|
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-
|
|
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-
|
|
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
|
|
2
|
-
import { S as PlaceholderNode, a as styles$
|
|
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
|
|
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$
|
|
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$
|
|
53
|
+
return cx("editor_table_scrollable_wrapper", styles$3, tableHeaderFix);
|
|
54
54
|
}
|
|
55
55
|
function getMathInlineClassName() {
|
|
56
|
-
return styles$
|
|
56
|
+
return styles$4.mathInline;
|
|
57
57
|
}
|
|
58
58
|
function getMathBlockClassName() {
|
|
59
|
-
return styles$
|
|
59
|
+
return styles$4.mathBlock;
|
|
60
60
|
}
|
|
61
61
|
function getImageClassName() {
|
|
62
|
-
return styles$
|
|
62
|
+
return styles$5.image;
|
|
63
63
|
}
|
|
64
64
|
function getBlockImageClassName() {
|
|
65
|
-
return styles$
|
|
65
|
+
return styles$5.blockImage;
|
|
66
66
|
}
|
|
67
67
|
function getMentionClassName() {
|
|
68
|
-
return cx("editor_mention", styles$
|
|
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$
|
|
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
|
|
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
|
-
|
|
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.
|
|
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",
|