@baasix/lexical 0.0.2 → 0.0.4
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/dist/content.css +700 -0
- package/dist/content.css.map +1 -0
- package/dist/content.js +1 -0
- package/dist/content.js.map +1 -0
- package/dist/index.css +32 -0
- package/dist/index.css.map +1 -1
- package/dist/index.js +94 -43
- package/dist/index.js.map +1 -1
- package/dist/plus-CQISIKEC.svg +1 -0
- package/package.json +3 -2
package/dist/index.js
CHANGED
|
@@ -67,7 +67,7 @@ import { LexicalComposer as LexicalComposer2 } from "@lexical/react/LexicalCompo
|
|
|
67
67
|
import { OnChangePlugin as OnChangePlugin2 } from "@lexical/react/LexicalOnChangePlugin";
|
|
68
68
|
import { useLexicalComposerContext as useLexicalComposerContext46 } from "@lexical/react/LexicalComposerContext";
|
|
69
69
|
import { $generateHtmlFromNodes, $generateNodesFromDOM } from "@lexical/html";
|
|
70
|
-
import { $getRoot as $getRoot3, $insertNodes as $insertNodes6 } from "lexical";
|
|
70
|
+
import { $getRoot as $getRoot3, $insertNodes as $insertNodes6, $setSelection as $setSelection7 } from "lexical";
|
|
71
71
|
|
|
72
72
|
// src/Editor.tsx
|
|
73
73
|
import { CharacterLimitPlugin } from "@lexical/react/LexicalCharacterLimitPlugin";
|
|
@@ -102,7 +102,8 @@ import {
|
|
|
102
102
|
$getRoot,
|
|
103
103
|
$isParagraphNode as $isParagraphNode2,
|
|
104
104
|
CLEAR_EDITOR_COMMAND,
|
|
105
|
-
HISTORIC_TAG
|
|
105
|
+
HISTORIC_TAG,
|
|
106
|
+
SELECTION_CHANGE_COMMAND
|
|
106
107
|
} from "lexical";
|
|
107
108
|
import { useCallback as useCallback4, useEffect as useEffect4, useState as useState4 } from "react";
|
|
108
109
|
|
|
@@ -752,6 +753,8 @@ function ActionsPlugin({
|
|
|
752
753
|
const [isEditable, setIsEditable] = useState4(() => editor.isEditable());
|
|
753
754
|
const [isSpeechToText, setIsSpeechToText] = useState4(false);
|
|
754
755
|
const [isEditorEmpty, setIsEditorEmpty] = useState4(true);
|
|
756
|
+
const [isConverting, setIsConverting] = useState4(false);
|
|
757
|
+
const [isMarkdown, setIsMarkdown] = useState4(false);
|
|
755
758
|
const [modal, showModal] = useModal();
|
|
756
759
|
const { isFullscreen, toggleFullscreen } = useFullscreen();
|
|
757
760
|
useEffect4(() => {
|
|
@@ -770,11 +773,15 @@ function ActionsPlugin({
|
|
|
770
773
|
editor.getEditorState().read(() => {
|
|
771
774
|
const root = $getRoot();
|
|
772
775
|
const children = root.getChildren();
|
|
776
|
+
const firstChild = children[0];
|
|
777
|
+
setIsMarkdown(
|
|
778
|
+
children.length === 1 && $isCodeNode(firstChild) && firstChild.getLanguage() === "markdown"
|
|
779
|
+
);
|
|
773
780
|
if (children.length > 1) {
|
|
774
781
|
setIsEditorEmpty(false);
|
|
775
782
|
} else {
|
|
776
|
-
if ($isParagraphNode2(
|
|
777
|
-
const paragraphChildren =
|
|
783
|
+
if ($isParagraphNode2(firstChild)) {
|
|
784
|
+
const paragraphChildren = firstChild.getChildren();
|
|
778
785
|
setIsEditorEmpty(paragraphChildren.length === 0);
|
|
779
786
|
} else {
|
|
780
787
|
setIsEditorEmpty(false);
|
|
@@ -785,33 +792,73 @@ function ActionsPlugin({
|
|
|
785
792
|
);
|
|
786
793
|
}, [editor, isEditable]);
|
|
787
794
|
const handleMarkdownToggle = useCallback4(() => {
|
|
788
|
-
|
|
795
|
+
if (isConverting) return;
|
|
796
|
+
const currentlyMarkdown = editor.getEditorState().read(() => {
|
|
789
797
|
const root = $getRoot();
|
|
790
798
|
const firstChild = root.getFirstChild();
|
|
791
|
-
|
|
792
|
-
$convertFromMarkdownString2(
|
|
793
|
-
firstChild.getTextContent(),
|
|
794
|
-
PLAYGROUND_TRANSFORMERS,
|
|
795
|
-
void 0,
|
|
796
|
-
// node
|
|
797
|
-
shouldPreserveNewLinesInMarkdown
|
|
798
|
-
);
|
|
799
|
-
} else {
|
|
800
|
-
const markdown = $convertToMarkdownString2(
|
|
801
|
-
PLAYGROUND_TRANSFORMERS,
|
|
802
|
-
void 0,
|
|
803
|
-
//node
|
|
804
|
-
shouldPreserveNewLinesInMarkdown
|
|
805
|
-
);
|
|
806
|
-
const codeNode = $createCodeNode("markdown");
|
|
807
|
-
codeNode.append($createTextNode2(markdown));
|
|
808
|
-
root.clear().append(codeNode);
|
|
809
|
-
if (markdown.length === 0) {
|
|
810
|
-
codeNode.select();
|
|
811
|
-
}
|
|
812
|
-
}
|
|
799
|
+
return $isCodeNode(firstChild) && firstChild.getLanguage() === "markdown";
|
|
813
800
|
});
|
|
814
|
-
|
|
801
|
+
if (currentlyMarkdown) {
|
|
802
|
+
setIsConverting(true);
|
|
803
|
+
requestAnimationFrame(() => {
|
|
804
|
+
requestAnimationFrame(() => {
|
|
805
|
+
try {
|
|
806
|
+
const markdownText = editor.getEditorState().read(() => {
|
|
807
|
+
const root = $getRoot();
|
|
808
|
+
const firstChild = root.getFirstChild();
|
|
809
|
+
return $isCodeNode(firstChild) ? firstChild.getTextContent() : "";
|
|
810
|
+
});
|
|
811
|
+
editor.update(
|
|
812
|
+
() => {
|
|
813
|
+
const root = $getRoot();
|
|
814
|
+
root.clear();
|
|
815
|
+
$convertFromMarkdownString2(
|
|
816
|
+
markdownText,
|
|
817
|
+
PLAYGROUND_TRANSFORMERS,
|
|
818
|
+
void 0,
|
|
819
|
+
// operate on $getRoot()
|
|
820
|
+
shouldPreserveNewLinesInMarkdown
|
|
821
|
+
);
|
|
822
|
+
$getRoot().selectEnd();
|
|
823
|
+
},
|
|
824
|
+
{ tag: "historic" }
|
|
825
|
+
);
|
|
826
|
+
editor.dispatchCommand(SELECTION_CHANGE_COMMAND, void 0);
|
|
827
|
+
} finally {
|
|
828
|
+
setIsConverting(false);
|
|
829
|
+
}
|
|
830
|
+
});
|
|
831
|
+
});
|
|
832
|
+
} else {
|
|
833
|
+
setIsConverting(true);
|
|
834
|
+
requestAnimationFrame(() => {
|
|
835
|
+
requestAnimationFrame(() => {
|
|
836
|
+
try {
|
|
837
|
+
const markdown = editor.getEditorState().read(
|
|
838
|
+
() => $convertToMarkdownString2(
|
|
839
|
+
PLAYGROUND_TRANSFORMERS,
|
|
840
|
+
void 0,
|
|
841
|
+
shouldPreserveNewLinesInMarkdown
|
|
842
|
+
)
|
|
843
|
+
);
|
|
844
|
+
editor.update(
|
|
845
|
+
() => {
|
|
846
|
+
const root = $getRoot();
|
|
847
|
+
const codeNode = $createCodeNode("markdown");
|
|
848
|
+
codeNode.append($createTextNode2(markdown));
|
|
849
|
+
root.clear().append(codeNode);
|
|
850
|
+
codeNode.select();
|
|
851
|
+
},
|
|
852
|
+
{ tag: "historic" }
|
|
853
|
+
);
|
|
854
|
+
editor.dispatchCommand(SELECTION_CHANGE_COMMAND, void 0);
|
|
855
|
+
} finally {
|
|
856
|
+
setIsConverting(false);
|
|
857
|
+
}
|
|
858
|
+
});
|
|
859
|
+
});
|
|
860
|
+
}
|
|
861
|
+
}, [editor, shouldPreserveNewLinesInMarkdown, isConverting]);
|
|
815
862
|
return /* @__PURE__ */ jsxs2("div", { className: "actions", children: [
|
|
816
863
|
/* @__PURE__ */ jsx3(
|
|
817
864
|
"button",
|
|
@@ -872,11 +919,11 @@ function ActionsPlugin({
|
|
|
872
919
|
"button",
|
|
873
920
|
{
|
|
874
921
|
type: "button",
|
|
875
|
-
className:
|
|
922
|
+
className: `action-button ${isMarkdown ? "active" : ""}`,
|
|
876
923
|
onClick: handleMarkdownToggle,
|
|
877
|
-
title: "Convert
|
|
878
|
-
"aria-label": "Convert
|
|
879
|
-
children: /* @__PURE__ */ jsx3("i", { className: "markdown" })
|
|
924
|
+
title: isMarkdown ? "Convert to Rich Text" : "Convert to Markdown",
|
|
925
|
+
"aria-label": isMarkdown ? "Convert to rich text" : "Convert to markdown",
|
|
926
|
+
children: isConverting ? /* @__PURE__ */ jsx3("span", { className: "action-button-spinner" }) : /* @__PURE__ */ jsx3("i", { className: "markdown" })
|
|
880
927
|
}
|
|
881
928
|
),
|
|
882
929
|
modal
|
|
@@ -9833,7 +9880,7 @@ import {
|
|
|
9833
9880
|
COMMAND_PRIORITY_LOW as COMMAND_PRIORITY_LOW8,
|
|
9834
9881
|
getDOMSelection as getDOMSelection2,
|
|
9835
9882
|
KEY_ESCAPE_COMMAND as KEY_ESCAPE_COMMAND2,
|
|
9836
|
-
SELECTION_CHANGE_COMMAND
|
|
9883
|
+
SELECTION_CHANGE_COMMAND as SELECTION_CHANGE_COMMAND2
|
|
9837
9884
|
} from "lexical";
|
|
9838
9885
|
import { useCallback as useCallback20, useEffect as useEffect31, useRef as useRef10, useState as useState28 } from "react";
|
|
9839
9886
|
import { createPortal as createPortal8 } from "react-dom";
|
|
@@ -9996,7 +10043,7 @@ function FloatingLinkEditor({
|
|
|
9996
10043
|
});
|
|
9997
10044
|
}),
|
|
9998
10045
|
editor.registerCommand(
|
|
9999
|
-
|
|
10046
|
+
SELECTION_CHANGE_COMMAND2,
|
|
10000
10047
|
() => {
|
|
10001
10048
|
$updateLinkEditor();
|
|
10002
10049
|
return true;
|
|
@@ -10203,7 +10250,7 @@ function useFloatingLinkEditorToolbar(editor, anchorElem, isLinkEditMode, setIsL
|
|
|
10203
10250
|
});
|
|
10204
10251
|
}),
|
|
10205
10252
|
editor.registerCommand(
|
|
10206
|
-
|
|
10253
|
+
SELECTION_CHANGE_COMMAND2,
|
|
10207
10254
|
(_payload, newEditor) => {
|
|
10208
10255
|
$updateToolbar();
|
|
10209
10256
|
setActiveEditor(newEditor);
|
|
@@ -10271,7 +10318,7 @@ import {
|
|
|
10271
10318
|
COMMAND_PRIORITY_LOW as COMMAND_PRIORITY_LOW9,
|
|
10272
10319
|
FORMAT_TEXT_COMMAND,
|
|
10273
10320
|
getDOMSelection as getDOMSelection3,
|
|
10274
|
-
SELECTION_CHANGE_COMMAND as
|
|
10321
|
+
SELECTION_CHANGE_COMMAND as SELECTION_CHANGE_COMMAND3
|
|
10275
10322
|
} from "lexical";
|
|
10276
10323
|
import { useCallback as useCallback21, useEffect as useEffect32, useRef as useRef11, useState as useState29 } from "react";
|
|
10277
10324
|
import { createPortal as createPortal9 } from "react-dom";
|
|
@@ -10441,7 +10488,7 @@ function TextFormatFloatingToolbar({
|
|
|
10441
10488
|
});
|
|
10442
10489
|
}),
|
|
10443
10490
|
editor.registerCommand(
|
|
10444
|
-
|
|
10491
|
+
SELECTION_CHANGE_COMMAND3,
|
|
10445
10492
|
() => {
|
|
10446
10493
|
$updateTextFormatFloatingToolbar();
|
|
10447
10494
|
return false;
|
|
@@ -11494,7 +11541,7 @@ import {
|
|
|
11494
11541
|
COMMAND_PRIORITY_CRITICAL as COMMAND_PRIORITY_CRITICAL2,
|
|
11495
11542
|
getDOMSelection as getDOMSelection4,
|
|
11496
11543
|
isDOMNode as isDOMNode2,
|
|
11497
|
-
SELECTION_CHANGE_COMMAND as
|
|
11544
|
+
SELECTION_CHANGE_COMMAND as SELECTION_CHANGE_COMMAND4
|
|
11498
11545
|
} from "lexical";
|
|
11499
11546
|
import { useCallback as useCallback22, useEffect as useEffect37, useRef as useRef13, useState as useState31 } from "react";
|
|
11500
11547
|
import { createPortal as createPortal10 } from "react-dom";
|
|
@@ -12501,7 +12548,7 @@ function TableCellActionMenuContainer({
|
|
|
12501
12548
|
return mergeRegister12(
|
|
12502
12549
|
editor.registerUpdateListener(delayedCallback),
|
|
12503
12550
|
editor.registerCommand(
|
|
12504
|
-
|
|
12551
|
+
SELECTION_CHANGE_COMMAND4,
|
|
12505
12552
|
delayedCallback,
|
|
12506
12553
|
COMMAND_PRIORITY_CRITICAL2
|
|
12507
12554
|
),
|
|
@@ -13831,7 +13878,7 @@ import {
|
|
|
13831
13878
|
INDENT_CONTENT_COMMAND as INDENT_CONTENT_COMMAND2,
|
|
13832
13879
|
OUTDENT_CONTENT_COMMAND as OUTDENT_CONTENT_COMMAND2,
|
|
13833
13880
|
REDO_COMMAND as REDO_COMMAND2,
|
|
13834
|
-
SELECTION_CHANGE_COMMAND as
|
|
13881
|
+
SELECTION_CHANGE_COMMAND as SELECTION_CHANGE_COMMAND5,
|
|
13835
13882
|
SKIP_DOM_SELECTION_TAG as SKIP_DOM_SELECTION_TAG2,
|
|
13836
13883
|
SKIP_SELECTION_FOCUS_TAG as SKIP_SELECTION_FOCUS_TAG2,
|
|
13837
13884
|
UNDO_COMMAND as UNDO_COMMAND2
|
|
@@ -14516,8 +14563,9 @@ function ToolbarPlugin({
|
|
|
14516
14563
|
);
|
|
14517
14564
|
const theme2 = element.getTheme();
|
|
14518
14565
|
updateToolbarState("codeTheme", theme2 || "");
|
|
14519
|
-
return;
|
|
14566
|
+
return true;
|
|
14520
14567
|
}
|
|
14568
|
+
return false;
|
|
14521
14569
|
},
|
|
14522
14570
|
[updateToolbarState, isCodeHighlighted, isCodeShiki]
|
|
14523
14571
|
);
|
|
@@ -14561,7 +14609,9 @@ function ToolbarPlugin({
|
|
|
14561
14609
|
updateToolbarState("blockType", type);
|
|
14562
14610
|
} else {
|
|
14563
14611
|
$handleHeadingNode(element);
|
|
14564
|
-
$handleCodeNode(element)
|
|
14612
|
+
if ($handleCodeNode(element)) {
|
|
14613
|
+
return;
|
|
14614
|
+
}
|
|
14565
14615
|
}
|
|
14566
14616
|
}
|
|
14567
14617
|
updateToolbarState(
|
|
@@ -14644,7 +14694,7 @@ function ToolbarPlugin({
|
|
|
14644
14694
|
]);
|
|
14645
14695
|
useEffect43(() => {
|
|
14646
14696
|
return editor.registerCommand(
|
|
14647
|
-
|
|
14697
|
+
SELECTION_CHANGE_COMMAND5,
|
|
14648
14698
|
(_payload, newEditor) => {
|
|
14649
14699
|
setActiveEditor(newEditor);
|
|
14650
14700
|
$updateToolbar();
|
|
@@ -15924,6 +15974,7 @@ function HtmlPlugin({
|
|
|
15924
15974
|
lastExternalValue.current = value;
|
|
15925
15975
|
editor.update(
|
|
15926
15976
|
() => {
|
|
15977
|
+
$setSelection7(null);
|
|
15927
15978
|
const root = $getRoot3();
|
|
15928
15979
|
if (!value || value === "<p></p>" || value === "<p><br></p>") {
|
|
15929
15980
|
root.clear();
|