@lexical/react 0.1.3 → 0.1.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/DEPRECATED_useLexicalList.js +1 -1
- package/DEPRECATED_useLexicalPlainText.js +1 -1
- package/DEPRECATED_useLexicalRichText.js +26 -25
- package/LexicalContentEditable.js +2 -2
- package/LexicalHorizontalRulePlugin.js +1 -0
- package/LexicalListPlugin.js +1 -1
- package/LexicalPlainTextPlugin.js +1 -1
- package/LexicalRichTextPlugin.js +25 -24
- package/LexicalTablePlugin.js +4 -4
- package/LexicalTreeView.js +11 -11
- package/README.md +76 -0
- package/package.json +4 -6
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';var g=require("react"),l=require("lexical"),m=require("lexical/ListItemNode"),p=require("lexical/ListNode"),q=require("lexical/ParagraphNode");function r(d){d=d.getParent();if(!p.$isListNode(d))throw Error("Minified Lexical error #2; see codes.json for the full message or use the non-minified dev environment for full errors and additional helpful warnings.");let a=d;for(;null!==a;)a=a.getParent(),p.$isListNode(a)&&(d=a);return d}
|
|
2
2
|
function t(d){let a=[];d=d.getChildren().filter(m.$isListItemNode);for(let b=0;b<d.length;b++){const c=d[b],e=c.getFirstChild();p.$isListNode(e)?a=a.concat(t(e)):a.push(c)}return a}function u(d,a){for(;null!=d&&!(d instanceof a);)d=d.getParent();return d}
|
|
3
3
|
function v(d){d.update(()=>{l.$log("removeList");var a=l.$getSelection();if(null!==a){const c=new Set,e=a.getNodes();a=a.anchor.getNode();if(0===e.length&&m.$isListItemNode(a))c.add(r(a));else for(a=0;a<e.length;a++){var b=e[a];l.$isLeafNode(b)&&(b=u(b,m.ListItemNode),null!=b&&c.add(r(b)))}c.forEach(f=>{let h=f;t(f).forEach(k=>{if(null!=k){const n=q.$createParagraphNode();n.append(...k.getChildren());h.insertAfter(n);h=n;k.remove()}});f.remove()})}})}
|
|
4
|
-
function w(d,a){if(p.$isListNode(d))return d;const b=d.getPreviousSibling(),c=d.getNextSibling(),e=m.$createListItemNode();if(p.$isListNode(b))return e.append(d),b.append(e),p.$isListNode(c)&&(b.append(...c.getChildren()),c.remove()),b;if(p.$isListNode(c))return e.append(d),c.getFirstChildOrThrow().insertBefore(e),c;a=p.$createListNode(a);a.append(e);d.replace(a);e.append(d);return a}
|
|
4
|
+
function w(d,a){if(p.$isListNode(d))return d;const b=d.getPreviousSibling(),c=d.getNextSibling(),e=m.$createListItemNode();if(p.$isListNode(b)&&a===b.getTag())return e.append(d),b.append(e),p.$isListNode(c)&&a===c.getTag()&&(b.append(...c.getChildren()),c.remove()),b;if(p.$isListNode(c)&&a===c.getTag())return e.append(d),c.getFirstChildOrThrow().insertBefore(e),c;a=p.$createListNode(a);a.append(e);d.replace(a);e.append(d);return a}
|
|
5
5
|
function x(d,a){d.update(()=>{l.$log("formatList");var b=l.$getSelection();if(null!==b){var c=b.getNodes();b=b.anchor.getNode();var e=b.getParent();if(0===c.length)c=p.$createListNode(a),l.$isRootNode(e)?(b.replace(c),b=m.$createListItemNode(),c.append(b)):m.$isListItemNode(b)&&(b=b.getParentOrThrow(),c.append(...b.getChildren()),b.replace(c));else for(b=new Set,e=0;e<c.length;e++){var f=c[e];if(l.$isElementNode(f)&&f.isEmpty()&&!b.has(f.getKey()))w(f,a);else if(l.$isLeafNode(f))for(f=f.getParent();null!=
|
|
6
6
|
f;){const k=f.getKey();if(p.$isListNode(f)){if(!b.has(k)){var h=p.$createListNode(a);h.append(...f.getChildren());f.replace(h);b.add(k)}break}else{h=f.getParent();if(l.$isRootNode(h)&&!b.has(k)){b.add(k);w(f,a);break}f=h}}}}})}
|
|
7
7
|
function y(d){var a=l.$getSelection();if(null===a)return!1;var b=a.getNodes(),c=[];0===b.length&&b.push(a.anchor.getNode());if(1===b.length){a:{for(b=b[0];null!==b;){if(m.$isListItemNode(b))break a;b=b.getParent()}b=null}null!==b&&(c=[b])}else{c=new Set;for(a=0;a<b.length;a++){const e=b[a];m.$isListItemNode(e)&&c.add(e)}c=Array.from(c)}return 0<c.length?("indent"===d?z(c):A(c),!0):!1}function B(d){return m.$isListItemNode(d)&&p.$isListNode(d.getFirstChild())}
|
|
@@ -6,7 +6,7 @@ function B(a,b){C(a,b);b.update(()=>{h.$log("onCutForPlainText");const e=h.$getS
|
|
|
6
6
|
var D="undefined"!==typeof window&&"undefined"!==typeof window.document&&"undefined"!==typeof window.document.createElement?v.useLayoutEffect:v.useEffect;function E(a,b){const e=u.$createParagraphNode();a.append(e);a=document.activeElement;(null!==h.$getSelection()||null!==a&&a===b.getRootElement())&&e.select()}function F(a){a.update(()=>{h.$log("initEditor");const b=h.$getRoot();null===b.getFirstChild()&&E(b,a)})}
|
|
7
7
|
function G(a,b){a.update(()=>{h.$log("clearEditor");const e=h.$getRoot();e.clear();E(e,a)},{onUpdate:b})}
|
|
8
8
|
function H(a,b){D(()=>{const e=w(a.registerNodes([u.ParagraphNode]),a.addListener("command",(d,c)=>{const f=h.$getSelection();if(null===f)return!1;switch(d){case "deleteCharacter":return f.deleteCharacter(c),!0;case "deleteWord":return f.deleteWord(c),!0;case "deleteLine":return f.deleteLine(c),!0;case "insertText":return"string"===typeof c?f.insertText(c):(d=c.dataTransfer,null!=d?y(d,f):(c=c.data)&&f.insertText(c)),!0;case "removeText":return f.removeText(),!0;case "insertLineBreak":return f.insertLineBreak(c),
|
|
9
|
-
!0;case "insertParagraph":return f.insertLineBreak(),!0;case "indentContent":case "outdentContent":case "insertImage":case "insertTable":case "formatElement":case "formatText":return!0;case "keyArrowLeft":d=c.shiftKey;if(z(f,!0))return c.preventDefault(),c=d,d="rtl"===f.anchor.getNode().getParentOrThrow().getDirection(),f.modify(c?"extend":"move",!d,"character"),!0;break;case "keyArrowRight":d=c.shiftKey;if(z(f,!1))return c.preventDefault(),c=d,d="rtl"===f.anchor.getNode().getParentOrThrow().getDirection(),
|
|
9
|
+
!0;case "insertParagraph":return f.insertLineBreak(),!0;case "indentContent":case "outdentContent":case "insertHorizontalRule":case "insertImage":case "insertTable":case "formatElement":case "formatText":return!0;case "keyArrowLeft":d=c.shiftKey;if(z(f,!0))return c.preventDefault(),c=d,d="rtl"===f.anchor.getNode().getParentOrThrow().getDirection(),f.modify(c?"extend":"move",!d,"character"),!0;break;case "keyArrowRight":d=c.shiftKey;if(z(f,!1))return c.preventDefault(),c=d,d="rtl"===f.anchor.getNode().getParentOrThrow().getDirection(),
|
|
10
10
|
f.modify(c?"extend":"move",d,"character"),!0;break;case "keyBackspace":return c.preventDefault(),a.execCommand("deleteCharacter",!0);case "keyDelete":return c.preventDefault(),a.execCommand("deleteCharacter",!1);case "keyEnter":return c.preventDefault(),a.execCommand("insertLineBreak");case "clearEditor":G(a);break;case "copy":return C(c,a),!0;case "cut":return B(c,a),!0;case "paste":return A(c,a),!0;case "drop":case "dragstart":return c.preventDefault(),!0}return!1},0));b&&F(a);return e},[a,b]);
|
|
11
11
|
x(a)}function I(a,b,e){b=Array.from(b);e=Array.from(e);a=a._nodeMap;const d=[];for(var c=0;c<b.length;c++){const f=a.get(b[c]);void 0!==f&&d.push(f)}for(b=0;b<e.length;b++)e[b][1]&&(c=a.get(e[b][0]),void 0===c||h.$isRootNode(c)||d.push(c));return d}
|
|
12
12
|
function J(a,b,e,d,c){if(null===a||0===e.size&&0===d.size)return 0;var f=b._selection,g=a._selection;if(c)return 1;if(null===f||null===g||!g.isCollapsed()||!f.isCollapsed())return 0;e=I(b,e,d);if(0===e.length)return 0;if(1<e.length){b=b._nodeMap;g=b.get(g.anchor.key);const k=b.get(f.anchor.key);return h.$isTextNode(k)&&h.$isElementNode(g)&&!a._nodeMap.has(k.__key)&&1===k.__text.length&&1===f.anchor.offset?e.every(l=>l===k||!h.$isTextNode(l))?2:0:0}b=e[0];a=a._nodeMap.get(b.__key);if(!h.$isTextNode(a)||
|
|
@@ -1,29 +1,30 @@
|
|
|
1
1
|
'use strict';var k=require("lexical"),w=require("lexical/HeadingNode"),x=require("lexical/ListNode"),z=require("lexical/QuoteNode"),A=require("lexical/CodeNode"),B=require("lexical/ParagraphNode"),C=require("lexical/ListItemNode"),D=require("react"),E=require("lexical/LinkNode"),F=require("@lexical/react/withSubscriptions");
|
|
2
|
-
function G(a){D.useEffect(()=>{const c=
|
|
3
|
-
t));if(q!==t||""!==
|
|
2
|
+
function G(a){D.useEffect(()=>{const c=e=>{var d=a.getRootElement();if(document.activeElement===d&&(d=e.data,"string"===typeof d)){try{var f=JSON.parse(d)}catch(b){return}if(f&&"nuanria_messaging"===f.protocol&&"request"===f.type&&(f=f.payload)&&"makeChanges"===f.functionId&&(f=f.args)){const [b,g,h,l,p]=f;a.update(()=>{k.$log("useLexicalDragonSupport");const n=k.$getSelection();if(null!==n){var m=n.anchor;let r=m.getNode(),q=0,t=0;k.$isTextNode(r)&&0<=b&&0<=g&&(q=b,t=b+g,n.setTextNodeRange(r,q,r,
|
|
3
|
+
t));if(q!==t||""!==h)n.insertRawText(h),r=m.getNode();k.$isTextNode(r)&&(q=l,t=l+p,m=r.getTextContentSize(),q=q>m?m:q,t=t>m?m:t,n.setTextNodeRange(r,q,r,t));e.stopImmediatePropagation()}})}}};window.addEventListener("message",c,!0);return()=>{window.removeEventListener("message",c,!0)}},[a])}
|
|
4
4
|
function H(a){a=a.getLatest();const c=a.constructor.clone(a);c.__parent=a.__parent;k.$isElementNode(a)&&k.$isElementNode(c)?(c.__children=Array.from(a.__children),c.__format=a.__format,c.__indent=a.__indent,c.__dir=a.__dir):k.$isTextNode(a)&&k.$isTextNode(c)?(c.__format=a.__format,c.__style=a.__style,c.__mode=a.__mode,c.__detail=a.__detail):k.$isDecoratorNode(a)&&k.$isDecoratorNode(c)&&(c.__state=a.__state);return c}
|
|
5
|
-
function I(a,c,
|
|
5
|
+
function I(a,c,e,d,f){for(var b=c;null!==a;){for(c=a.getParent();null!==c&&c.excludeFromCopy();)c=c.getParent();if(null===c)break;if(!k.$isElementNode(a)||!a.excludeFromCopy()){const g=a.getKey();let h=f.get(g);const l=void 0===h;l&&(h=H(a),f.set(g,h));!k.$isTextNode(h)||h.isSegmented()||h.isToken()?k.$isElementNode(h)&&(h.__children=h.__children.slice(e?b:0,e?void 0:b+1)):h.__text=h.__text.slice(e?b:0,e?void 0:b);if(k.$isRootNode(c)){l&&d.push(g);break}}b=f.get(c.getKey());b=k.$isElementNode(b)?
|
|
6
6
|
b.__children.indexOf(a.getKey()):a.getIndexWithinParent();a=c}}
|
|
7
|
-
const J={
|
|
8
|
-
|
|
9
|
-
A.$createCodeNode():null}),span:a=>
|
|
10
|
-
|
|
11
|
-
function
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
function
|
|
15
|
-
function
|
|
7
|
+
const J={ul:()=>({node:x.$createListNode("ul")}),ol:()=>({node:x.$createListNode("ol")}),li:()=>({node:C.$createListItemNode()}),h1:()=>({node:w.$createHeadingNode("h1")}),h2:()=>({node:w.$createHeadingNode("h2")}),h3:()=>({node:w.$createHeadingNode("h3")}),h4:()=>({node:w.$createHeadingNode("h4")}),h5:()=>({node:w.$createHeadingNode("h5")}),p:()=>({node:B.$createParagraphNode()}),br:()=>({node:k.$createLineBreakNode()}),a:a=>({node:a instanceof HTMLAnchorElement?E.$createLinkNode(a.href):k.$createTextNode(a.textContent)}),
|
|
8
|
+
u:()=>({node:null,forChild:a=>{k.$isTextNode(a)&&a.toggleFormat("underline")}}),b:a=>{const c="normal"===a.style.fontWeight;return{node:null,forChild:e=>{k.$isTextNode(e)&&!c&&e.toggleFormat("bold")}}},strong:()=>({node:null,forChild:a=>{k.$isTextNode(a)&&a.toggleFormat("bold")}}),i:()=>({node:null,forChild:a=>{k.$isTextNode(a)&&a.toggleFormat("italic")}}),em:()=>({node:null,forChild:a=>{k.$isTextNode(a)&&a.toggleFormat("italic")}}),td:a=>{const c=a.classList.contains("js-file-line");return{node:null,
|
|
9
|
+
after:e=>{c&&a.parentNode&&a.parentNode.nextSibling&&e.push(k.$createLineBreakNode());return e}}},table:a=>({node:a.classList.contains("js-file-line-container")?A.$createCodeNode():null}),span:a=>{const c="700"===a.style.fontWeight;return{node:null,forChild:e=>{k.$isTextNode(e)&&c&&e.toggleFormat("bold")}}},"#text":a=>({node:k.$createTextNode(a.textContent)}),pre:()=>({node:A.$createCodeNode()}),div:a=>({node:null!==a.style.fontFamily.match("monospace")?A.$createCodeNode():null,after:c=>{const e=
|
|
10
|
+
a.parentNode;null!=e&&a!==e.lastChild&&c.push(k.$createLineBreakNode());return c}})};
|
|
11
|
+
function K(a,c,e,d=new Map){let f=[],b=null;var g=a.nodeName.toLowerCase(),h=(e._config.htmlTransforms||{})[g]||c[g],l=h?h(a):null;h=null;if(null!==l){h=l.after;b=l.node;if(null!==b){f.push(b);const p=Array.from(d.values());for(let n=0;n<p.length;n++)p[n](b)}null!=l.forChild&&d.set(g,l.forChild)}a=a.childNodes;g=[];for(l=0;l<a.length;l++)g.push(...K(a[l],c,e,d));null!=h&&(g=h(g));null==b?f=f.concat(g):k.$isElementNode(b)&&b.append(...g);return f}
|
|
12
|
+
function L(a,c,e){var d=a.getData("application/x-lexical-editor");if(d){var f=e._config.namespace;try{const l=JSON.parse(d);if(l.namespace===f){const {range:p,nodeMap:n}=l.state;var b=new Map(n);d=[];for(f=0;f<p.length;f++){var g=b.get(p[f]);if(void 0!==g){var h=k.$createNodeFromParse(g,b);d.push(h)}}c.insertNodes(d);return}}catch(l){}}if(b=a.getData("text/html")){b=(new DOMParser).parseFromString(b,"text/html");a=[];b=b.body?Array.from(b.body.childNodes):[];g=b.length;for(h=0;h<g;h++)d=K(b[h],J,
|
|
13
|
+
e),null!==d&&(a=a.concat(d));e=a;a=[];b=null;for(g=0;g<e.length;g++)h=e[g],!k.$isElementNode(h)||h.isInline()?(null===b&&(b=B.$createParagraphNode(),a.push(b)),null!==b&&b.append(h)):(a.push(h),b=null);c.insertNodes(a)}else e=a.getData("text/plain"),null!=e&&c.insertRawText(e)}
|
|
14
|
+
function M(a,c){var e=a.focus;a=e.offset;"element"===e.type?c=e.getNode().getChildAtIndex(c?a-1:a):(e=e.getNode(),c=c&&0===a||!c&&a===e.getTextContentSize()?c?e.getPreviousSibling():e.getNextSibling():null);return k.$isDecoratorNode(c)}function N(a,c){a.preventDefault();c.update(()=>{k.$log("onPasteForRichText");const e=k.$getSelection(),d=a.clipboardData;null!=d&&null!==e&&L(d,e,c)})}
|
|
15
|
+
function O(a,c){P(a,c);c.update(()=>{k.$log("onCutForRichText");const e=k.$getSelection();null!==e&&e.removeText()})}
|
|
16
|
+
function P(a,c){a.preventDefault();c.update(()=>{k.$log("onCopyForRichText");const e=a.clipboardData;var d=k.$getSelection();if(null!==d&&null!=e){var f=window.getSelection();if(!f.isCollapsed){var b=f.getRangeAt(0);b&&(f=document.createElement("div"),b=b.cloneContents(),f.appendChild(b),e.setData("text/html",f.innerHTML));e.setData("text/plain",d.getTextContent());f=c._config.namespace;b=e.setData;var g=JSON,h=g.stringify;{var l=d.anchor,p=d.focus;var n=l.getCharacterOffset();const y=p.getCharacterOffset();
|
|
16
17
|
var m=l.getNode(),r=p.getNode(),q=m.getParentOrThrow();if(m===r&&k.$isTextNode(m)&&(q.canBeEmpty()||1<q.getChildrenSize()))d=H(m),m=y>n,d.__text=d.__text.slice(m?n:y,m?y:n),n=d.getKey(),n={range:[n],nodeMap:[[n,d]]};else if(d=d.getNodes(),0===d.length)n={range:[],nodeMap:[]};else{m=d.length;r=d[0];q=r.getParent();if(null!==q&&!q.canBeEmpty()){var t=q.__children;if(t.length===m){var u=!0;for(var v=0;v<t.length;v++)if(t[v]!==d[v].__key){u=!1;break}u&&(m++,d.push(q))}}q=d[m-1];l=l.isBefore(p);p=new Map;
|
|
17
|
-
t=[];I(r,l?n:y,!0,t,p);for(r=0;r<m;r++)if(u=d[r],v=u.getKey(),!(p.has(v)||k.$isElementNode(u)&&u.excludeFromCopy())){const
|
|
18
|
-
function
|
|
19
|
-
function
|
|
20
|
-
!0;case "formatText":return b.formatText(
|
|
21
|
-
|
|
22
|
-
b.modify(
|
|
23
|
-
a),!0;case "cut":return
|
|
24
|
-
function
|
|
25
|
-
!k.$isTextNode(c)||a.__mode!==c.__mode)return 0;a=a.__text;c=c.__text;if(a===c)return 0;b=b.anchor;
|
|
26
|
-
function
|
|
27
|
-
function
|
|
28
|
-
{tag:"historic"})}return!0;case "redo":return
|
|
29
|
-
t=null===m?null:m.editorState;if(null===m||
|
|
18
|
+
t=[];I(r,l?n:y,!0,t,p);for(r=0;r<m;r++)if(u=d[r],v=u.getKey(),!(p.has(v)||k.$isElementNode(u)&&u.excludeFromCopy())){const R=H(u);k.$isRootNode(u.getParent())&&t.push(u.getKey());p.set(v,R)}I(q,l?y:n,!1,t,p);n={range:t,nodeMap:Array.from(p.entries())}}}b.call(e,"application/x-lexical-editor",h.call(g,{namespace:f,state:n}))}}})}var Q="undefined"!==typeof window&&"undefined"!==typeof window.document&&"undefined"!==typeof window.document.createElement?D.useLayoutEffect:D.useEffect;
|
|
19
|
+
function S(a,c){const e=B.$createParagraphNode();a.append(e);a=document.activeElement;(null!==k.$getSelection()||null!==a&&a===c.getRootElement())&&e.select()}function T(a){a.update(()=>{k.$log("initEditor");const c=k.$getRoot();null===c.getFirstChild()&&S(c,a)})}function U(a,c){a.update(()=>{k.$log("clearEditor");const e=k.$getRoot();e.clear();S(e,a)},{onUpdate:c})}
|
|
20
|
+
function V(a,c){Q(()=>{const e=F(a.registerNodes([w.HeadingNode,x.ListNode,z.QuoteNode,A.CodeNode,B.ParagraphNode,C.ListItemNode]),a.addListener("command",(d,f)=>{var b=k.$getSelection();if(null===b)return!1;switch(d){case "deleteCharacter":return b.deleteCharacter(f),!0;case "deleteWord":return b.deleteWord(f),!0;case "deleteLine":return b.deleteLine(f),!0;case "insertText":return"string"===typeof f?b.insertText(f):(d=f.dataTransfer,null!=d?L(d,b,a):(f=f.data)&&b.insertText(f)),!0;case "removeText":return b.removeText(),
|
|
21
|
+
!0;case "formatText":return b.formatText(f),!0;case "formatElement":return b=b.anchor.getNode(),(k.$isElementNode(b)?b:b.getParentOrThrow()).setFormat(f),!0;case "insertLineBreak":return b.insertLineBreak(f),!0;case "insertParagraph":return b.insertParagraph(),!0;case "indentContent":return b=b.anchor,b="element"===b.type?b.getNode():b.getNode().getParentOrThrow(),b.canInsertTab()?a.execCommand("insertText","\t"):10!==b.getIndent()&&b.setIndent(b.getIndent()+1),!0;case "outdentContent":return b=b.anchor,
|
|
22
|
+
f=b.getNode(),d="element"===b.type?b.getNode():b.getNode().getParentOrThrow(),d.canInsertTab()?"\t"===f.getTextContent()[b.offset-1]&&a.execCommand("deleteCharacter",!0):0!==d.getIndent()&&d.setIndent(d.getIndent()-1),!0;case "keyArrowLeft":d=f.shiftKey;if(M(b,!0))return f.preventDefault(),f=d,d="rtl"===b.anchor.getNode().getParentOrThrow().getDirection(),b.modify(f?"extend":"move",!d,"character"),!0;break;case "keyArrowRight":d=f.shiftKey;if(M(b,!1))return f.preventDefault(),f=d,d="rtl"===b.anchor.getNode().getParentOrThrow().getDirection(),
|
|
23
|
+
b.modify(f?"extend":"move",d,"character"),!0;break;case "keyBackspace":return f.preventDefault(),a.execCommand("deleteCharacter",!0);case "keyDelete":return f.preventDefault(),a.execCommand("deleteCharacter",!1);case "keyEnter":return f.preventDefault(),f.shiftKey?a.execCommand("insertLineBreak"):a.execCommand("insertParagraph");case "keyTab":return f.preventDefault(),a.execCommand(f.shiftKey?"outdentContent":"indentContent");case "keyEscape":return a.blur(),!0;case "clearEditor":U(a);break;case "copy":return P(f,
|
|
24
|
+
a),!0;case "cut":return O(f,a),!0;case "paste":return N(f,a),!0;case "drop":case "dragstart":return f.preventDefault(),!0}return!1},0));c&&T(a);return e},[a,c]);G(a)}function W(a,c,e){c=Array.from(c);e=Array.from(e);a=a._nodeMap;const d=[];for(var f=0;f<c.length;f++){const b=a.get(c[f]);void 0!==b&&d.push(b)}for(c=0;c<e.length;c++)e[c][1]&&(f=a.get(e[c][0]),void 0===f||k.$isRootNode(f)||d.push(f));return d}
|
|
25
|
+
function X(a,c,e,d,f){if(null===a||0===e.size&&0===d.size)return 0;var b=c._selection,g=a._selection;if(f)return 1;if(null===b||null===g||!g.isCollapsed()||!b.isCollapsed())return 0;e=W(c,e,d);if(0===e.length)return 0;if(1<e.length){c=c._nodeMap;g=c.get(g.anchor.key);const h=c.get(b.anchor.key);return k.$isTextNode(h)&&k.$isElementNode(g)&&!a._nodeMap.has(h.__key)&&1===h.__text.length&&1===b.anchor.offset?e.every(l=>l===h||!k.$isTextNode(l))?2:0:0}c=e[0];a=a._nodeMap.get(c.__key);if(!k.$isTextNode(a)||
|
|
26
|
+
!k.$isTextNode(c)||a.__mode!==c.__mode)return 0;a=a.__text;c=c.__text;if(a===c)return 0;b=b.anchor;g=g.anchor;if(b.key!==g.key||"text"!==b.type)return 0;b=b.offset;g=g.offset;a=c.length-a.length;return 1===a&&g===b-1?2:-1===a&&g===b+1?3:-1===a&&g===b?4:0}
|
|
27
|
+
function Y(a,c){let e=Date.now(),d=0;return(f,b,g,h,l,p)=>{const n=Date.now();if(p.has("historic"))return d=0,e=n,2;const m=X(f,b,h,l,a.isComposing()),r=(()=>{if(p.has("without-history"))return 0;if(null===f)return 1;var q=b._selection;const t=f._selection;if(!(0<h.size||0<l.size))return null===t&&null!==q?0:2;q=null===g||g.editor===a;return 0!==m&&m===d&&n<e+c&&q?0:1})();e=n;d=m;return r}}
|
|
28
|
+
function Z(a,c,e=1E3){const d=D.useMemo(()=>c||{current:null,redoStack:[],undoStack:[]},[c]),f=D.useCallback(()=>{d.undoStack=[];d.redoStack=[];d.current=null},[d]);D.useEffect(()=>{const b=Y(a,e);return F(a.addListener("command",g=>{switch(g){case "undo":g=d.redoStack;var h=d.undoStack;if(0!==h.length){var l=d.current;const p=h.pop();null!==l&&(g.push(l),a.execCommand("canRedo",!0));0===h.length&&a.execCommand("canUndo",!1);d.current=p;p.editor.setEditorState(p.editorState.clone(p.undoSelection),
|
|
29
|
+
{tag:"historic"})}return!0;case "redo":return g=d.redoStack,h=d.undoStack,0!==g.length&&(l=d.current,null!==l&&(h.push(l),a.execCommand("canUndo",!0)),h=g.pop(),0===g.length&&a.execCommand("canRedo",!1),d.current=h,h.editor.setEditorState(h.editorState,{tag:"historic"})),!0;case "clearEditor":return f(),!1;case "clearHistory":return f(),!0;default:return!1}},0),a.addListener("update",({editorState:g,prevEditorState:h,dirtyLeaves:l,dirtyElements:p,tags:n})=>{const m=d.current,r=d.redoStack,q=d.undoStack,
|
|
30
|
+
t=null===m?null:m.editorState;if(null===m||g!==t){l=b(h,g,m,l,p,n);if(1===l)0!==r.length&&(d.redoStack=[]),null!==m&&(q.push({...m,undoSelection:h.read(k.$getSelection)}),a.execCommand("canUndo",!0));else if(2===l)return;d.current={editor:a,editorState:g}}}))},[f,e,a,d])}function aa(a,c,e=1E3){return Z(a,c,e)}module.exports=function(a,c){V(a,!0);aa(a,c)};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
'use strict';var b=require("react"),e=require("@lexical/react/LexicalComposerContext");
|
|
2
|
-
module.exports=function({ariaActiveDescendantID:f,ariaAutoComplete:g,ariaControls:h,ariaDescribedBy:k,ariaExpanded:l,ariaLabel:m,ariaLabelledBy:n,ariaMultiline:p,ariaOwneeID:q,ariaRequired:r,autoCapitalize:t,autoComplete:u,autoCorrect:v,className:w,readOnly:a=!1,role:c="textbox",spellCheck:x=!0,
|
|
3
|
-
null:h,"aria-describedby":k,"aria-expanded":a?null:"combobox"===c?!!l:null,"aria-label":m,"aria-labelledby":n,"aria-multiline":p,"aria-owns":a?null:q,"aria-required":r,autoCapitalize:t,autoComplete:u,autoCorrect:v,className:w,contentEditable:!a,"data-testid":
|
|
2
|
+
module.exports=function({ariaActiveDescendantID:f,ariaAutoComplete:g,ariaControls:h,ariaDescribedBy:k,ariaExpanded:l,ariaLabel:m,ariaLabelledBy:n,ariaMultiline:p,ariaOwneeID:q,ariaRequired:r,autoCapitalize:t,autoComplete:u,autoCorrect:v,className:w,readOnly:a=!1,role:c="textbox",spellCheck:x=!0,style:y,tabIndex:z,testid:A}){const [d]=e.useLexicalComposerContext(),C=b.useCallback(B=>{d.setRootElement(B)},[d]);return b.createElement("div",{"aria-activedescendant":a?null:f,"aria-autocomplete":a?null:
|
|
3
|
+
g,"aria-controls":a?null:h,"aria-describedby":k,"aria-expanded":a?null:"combobox"===c?!!l:null,"aria-label":m,"aria-labelledby":n,"aria-multiline":p,"aria-owns":a?null:q,"aria-required":r,autoCapitalize:t,autoComplete:u,autoCorrect:v,className:w,contentEditable:!a,"data-testid":A,ref:C,role:a?null:c,spellCheck:x,style:y,tabIndex:z})};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
'use strict';var b=require("lexical"),d=require("@lexical/react/LexicalComposerContext"),e=require("react");module.exports=function(){const [c]=d.useLexicalComposerContext();e.useEffect(()=>c.addListener("command",a=>{if("insertHorizontalRule"===a){b.$log("insertHorizontalRule");a=b.$getSelection();if(null===a)return!1;if(null!==a.focus.getNode()){const f=b.$createHorizontalRuleNode();a.insertParagraph();a.focus.getNode().getTopLevelElementOrThrow().insertBefore(f)}return!0}return!1},0),[c]);return null};
|
package/LexicalListPlugin.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';var g=require("@lexical/react/LexicalComposerContext"),l=require("react"),m=require("lexical"),p=require("lexical/ListItemNode"),q=require("lexical/ListNode"),r=require("lexical/ParagraphNode");function t(d){d=d.getParent();if(!q.$isListNode(d))throw Error("Minified Lexical error #2; see codes.json for the full message or use the non-minified dev environment for full errors and additional helpful warnings.");let a=d;for(;null!==a;)a=a.getParent(),q.$isListNode(a)&&(d=a);return d}
|
|
2
2
|
function u(d){let a=[];d=d.getChildren().filter(p.$isListItemNode);for(let b=0;b<d.length;b++){const c=d[b],e=c.getFirstChild();q.$isListNode(e)?a=a.concat(u(e)):a.push(c)}return a}function v(d,a){for(;null!=d&&!(d instanceof a);)d=d.getParent();return d}
|
|
3
3
|
function w(d){d.update(()=>{m.$log("removeList");var a=m.$getSelection();if(null!==a){const c=new Set,e=a.getNodes();a=a.anchor.getNode();if(0===e.length&&p.$isListItemNode(a))c.add(t(a));else for(a=0;a<e.length;a++){var b=e[a];m.$isLeafNode(b)&&(b=v(b,p.ListItemNode),null!=b&&c.add(t(b)))}c.forEach(f=>{let h=f;u(f).forEach(k=>{if(null!=k){const n=r.$createParagraphNode();n.append(...k.getChildren());h.insertAfter(n);h=n;k.remove()}});f.remove()})}})}
|
|
4
|
-
function x(d,a){if(q.$isListNode(d))return d;const b=d.getPreviousSibling(),c=d.getNextSibling(),e=p.$createListItemNode();if(q.$isListNode(b))return e.append(d),b.append(e),q.$isListNode(c)&&(b.append(...c.getChildren()),c.remove()),b;if(q.$isListNode(c))return e.append(d),c.getFirstChildOrThrow().insertBefore(e),c;a=q.$createListNode(a);a.append(e);d.replace(a);e.append(d);return a}
|
|
4
|
+
function x(d,a){if(q.$isListNode(d))return d;const b=d.getPreviousSibling(),c=d.getNextSibling(),e=p.$createListItemNode();if(q.$isListNode(b)&&a===b.getTag())return e.append(d),b.append(e),q.$isListNode(c)&&a===c.getTag()&&(b.append(...c.getChildren()),c.remove()),b;if(q.$isListNode(c)&&a===c.getTag())return e.append(d),c.getFirstChildOrThrow().insertBefore(e),c;a=q.$createListNode(a);a.append(e);d.replace(a);e.append(d);return a}
|
|
5
5
|
function y(d,a){d.update(()=>{m.$log("formatList");var b=m.$getSelection();if(null!==b){var c=b.getNodes();b=b.anchor.getNode();var e=b.getParent();if(0===c.length)c=q.$createListNode(a),m.$isRootNode(e)?(b.replace(c),b=p.$createListItemNode(),c.append(b)):p.$isListItemNode(b)&&(b=b.getParentOrThrow(),c.append(...b.getChildren()),b.replace(c));else for(b=new Set,e=0;e<c.length;e++){var f=c[e];if(m.$isElementNode(f)&&f.isEmpty()&&!b.has(f.getKey()))x(f,a);else if(m.$isLeafNode(f))for(f=f.getParent();null!=
|
|
6
6
|
f;){const k=f.getKey();if(q.$isListNode(f)){if(!b.has(k)){var h=q.$createListNode(a);h.append(...f.getChildren());f.replace(h);b.add(k)}break}else{h=f.getParent();if(m.$isRootNode(h)&&!b.has(k)){b.add(k);x(f,a);break}f=h}}}}})}
|
|
7
7
|
function z(d){var a=m.$getSelection();if(null===a)return!1;var b=a.getNodes(),c=[];0===b.length&&b.push(a.anchor.getNode());if(1===b.length){a:{for(b=b[0];null!==b;){if(p.$isListItemNode(b))break a;b=b.getParent()}b=null}null!==b&&(c=[b])}else{c=new Set;for(a=0;a<b.length;a++){const e=b[a];p.$isListItemNode(e)&&c.add(e)}c=Array.from(c)}return 0<c.length?("indent"===d?A(c):B(c),!0):!1}function C(d){return p.$isListItemNode(d)&&q.$isListNode(d.getFirstChild())}
|
|
@@ -6,7 +6,7 @@ function C(a,d){D(a,d);d.update(()=>{t.$log("onCutForPlainText");const c=t.$getS
|
|
|
6
6
|
var E="undefined"!==typeof window&&"undefined"!==typeof window.document&&"undefined"!==typeof window.document.createElement?g.useLayoutEffect:g.useEffect;function G(a,d){const c=u.$createParagraphNode();a.append(c);a=document.activeElement;(null!==t.$getSelection()||null!==a&&a===d.getRootElement())&&c.select()}function H(a){a.update(()=>{t.$log("initEditor");const d=t.$getRoot();null===d.getFirstChild()&&G(d,a)})}
|
|
7
7
|
function I(a,d){a.update(()=>{t.$log("clearEditor");const c=t.$getRoot();c.clear();G(c,a)},{onUpdate:d})}
|
|
8
8
|
function J(a,d){E(()=>{const c=v(a.registerNodes([u.ParagraphNode]),a.addListener("command",(e,b)=>{const f=t.$getSelection();if(null===f)return!1;switch(e){case "deleteCharacter":return f.deleteCharacter(b),!0;case "deleteWord":return f.deleteWord(b),!0;case "deleteLine":return f.deleteLine(b),!0;case "insertText":return"string"===typeof b?f.insertText(b):(e=b.dataTransfer,null!=e?z(e,f):(b=b.data)&&f.insertText(b)),!0;case "removeText":return f.removeText(),!0;case "insertLineBreak":return f.insertLineBreak(b),
|
|
9
|
-
!0;case "insertParagraph":return f.insertLineBreak(),!0;case "indentContent":case "outdentContent":case "insertImage":case "insertTable":case "formatElement":case "formatText":return!0;case "keyArrowLeft":e=b.shiftKey;if(A(f,!0))return b.preventDefault(),b=e,e="rtl"===f.anchor.getNode().getParentOrThrow().getDirection(),f.modify(b?"extend":"move",!e,"character"),!0;break;case "keyArrowRight":e=b.shiftKey;if(A(f,!1))return b.preventDefault(),b=e,e="rtl"===f.anchor.getNode().getParentOrThrow().getDirection(),
|
|
9
|
+
!0;case "insertParagraph":return f.insertLineBreak(),!0;case "indentContent":case "outdentContent":case "insertHorizontalRule":case "insertImage":case "insertTable":case "formatElement":case "formatText":return!0;case "keyArrowLeft":e=b.shiftKey;if(A(f,!0))return b.preventDefault(),b=e,e="rtl"===f.anchor.getNode().getParentOrThrow().getDirection(),f.modify(b?"extend":"move",!e,"character"),!0;break;case "keyArrowRight":e=b.shiftKey;if(A(f,!1))return b.preventDefault(),b=e,e="rtl"===f.anchor.getNode().getParentOrThrow().getDirection(),
|
|
10
10
|
f.modify(b?"extend":"move",e,"character"),!0;break;case "keyBackspace":return b.preventDefault(),a.execCommand("deleteCharacter",!0);case "keyDelete":return b.preventDefault(),a.execCommand("deleteCharacter",!1);case "keyEnter":return b.preventDefault(),a.execCommand("insertLineBreak");case "clearEditor":I(a);break;case "copy":return D(b,a),!0;case "cut":return C(b,a),!0;case "paste":return B(b,a),!0;case "drop":case "dragstart":return b.preventDefault(),!0}return!1},0));d&&H(a);return c},[a,d]);
|
|
11
11
|
y(a)}function K(a){const [d,c]=g.useState(()=>a.getDecorators());E(()=>a.addListener("decorator",e=>{x.flushSync(()=>{c(e)})}),[a]);return g.useMemo(()=>{const e=[],b=Object.keys(d);for(let p=0;p<b.length;p++){var f=b[p];const r=d[f];f=a.getElementByKey(f);null!==f&&e.push(x.createPortal(r,f))}return e},[d,a])}function L(a,d=!0){if(a)return!1;a=t.$getRoot().getTextContent();d&&(a=a.trim());return""===a}
|
|
12
12
|
function M(a){if(!L(a,!1))return!1;a=t.$getRoot().getChildren();const d=a.length;if(1<d)return!1;for(let e=0;e<d;e++){var c=a[e];if(t.$isElementNode(c)){if("paragraph"!==c.__type||0!==c.__indent)return!1;c=c.getChildren();const b=c.length;for(let f=0;f<b;f++)if(!t.$isTextNode(c[e]))return!1}}return!0}function N(a){return()=>M(a)}
|
package/LexicalRichTextPlugin.js
CHANGED
|
@@ -1,25 +1,26 @@
|
|
|
1
1
|
'use strict';var g=require("react"),v=require("@lexical/react/LexicalComposerContext"),x=require("lexical"),z=require("lexical/HeadingNode"),A=require("lexical/ListNode"),B=require("lexical/QuoteNode"),C=require("lexical/CodeNode"),D=require("lexical/ParagraphNode"),E=require("lexical/ListItemNode"),F=require("lexical/LinkNode"),G=require("@lexical/react/withSubscriptions"),H=require("react-dom");
|
|
2
|
-
function I(a){g.useEffect(()=>{const
|
|
3
|
-
|
|
4
|
-
function J(a){a=a.getLatest();const
|
|
5
|
-
function K(a,
|
|
6
|
-
b.__children.indexOf(a.getKey()):a.getIndexWithinParent();a=
|
|
7
|
-
const L={
|
|
8
|
-
|
|
9
|
-
C.$createCodeNode():null}),span:a=>
|
|
10
|
-
|
|
11
|
-
function
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
function
|
|
15
|
-
function
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
function
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
b.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
function
|
|
2
|
+
function I(a){g.useEffect(()=>{const c=e=>{var f=a.getRootElement();if(document.activeElement===f&&(f=e.data,"string"===typeof f)){try{var d=JSON.parse(f)}catch(b){return}if(d&&"nuanria_messaging"===d.protocol&&"request"===d.type&&(d=d.payload)&&"makeChanges"===d.functionId&&(d=d.args)){const [b,k,h,l,q]=d;a.update(()=>{x.$log("useLexicalDragonSupport");const m=x.$getSelection();if(null!==m){var n=m.anchor;let r=n.getNode(),p=0,t=0;x.$isTextNode(r)&&0<=b&&0<=k&&(p=b,t=b+k,m.setTextNodeRange(r,p,r,
|
|
3
|
+
t));if(p!==t||""!==h)m.insertRawText(h),r=n.getNode();x.$isTextNode(r)&&(p=l,t=l+q,n=r.getTextContentSize(),p=p>n?n:p,t=t>n?n:t,m.setTextNodeRange(r,p,r,t));e.stopImmediatePropagation()}})}}};window.addEventListener("message",c,!0);return()=>{window.removeEventListener("message",c,!0)}},[a])}
|
|
4
|
+
function J(a){a=a.getLatest();const c=a.constructor.clone(a);c.__parent=a.__parent;x.$isElementNode(a)&&x.$isElementNode(c)?(c.__children=Array.from(a.__children),c.__format=a.__format,c.__indent=a.__indent,c.__dir=a.__dir):x.$isTextNode(a)&&x.$isTextNode(c)?(c.__format=a.__format,c.__style=a.__style,c.__mode=a.__mode,c.__detail=a.__detail):x.$isDecoratorNode(a)&&x.$isDecoratorNode(c)&&(c.__state=a.__state);return c}
|
|
5
|
+
function K(a,c,e,f,d){for(var b=c;null!==a;){for(c=a.getParent();null!==c&&c.excludeFromCopy();)c=c.getParent();if(null===c)break;if(!x.$isElementNode(a)||!a.excludeFromCopy()){const k=a.getKey();let h=d.get(k);const l=void 0===h;l&&(h=J(a),d.set(k,h));!x.$isTextNode(h)||h.isSegmented()||h.isToken()?x.$isElementNode(h)&&(h.__children=h.__children.slice(e?b:0,e?void 0:b+1)):h.__text=h.__text.slice(e?b:0,e?void 0:b);if(x.$isRootNode(c)){l&&f.push(k);break}}b=d.get(c.getKey());b=x.$isElementNode(b)?
|
|
6
|
+
b.__children.indexOf(a.getKey()):a.getIndexWithinParent();a=c}}
|
|
7
|
+
const L={ul:()=>({node:A.$createListNode("ul")}),ol:()=>({node:A.$createListNode("ol")}),li:()=>({node:E.$createListItemNode()}),h1:()=>({node:z.$createHeadingNode("h1")}),h2:()=>({node:z.$createHeadingNode("h2")}),h3:()=>({node:z.$createHeadingNode("h3")}),h4:()=>({node:z.$createHeadingNode("h4")}),h5:()=>({node:z.$createHeadingNode("h5")}),p:()=>({node:D.$createParagraphNode()}),br:()=>({node:x.$createLineBreakNode()}),a:a=>({node:a instanceof HTMLAnchorElement?F.$createLinkNode(a.href):x.$createTextNode(a.textContent)}),
|
|
8
|
+
u:()=>({node:null,forChild:a=>{x.$isTextNode(a)&&a.toggleFormat("underline")}}),b:a=>{const c="normal"===a.style.fontWeight;return{node:null,forChild:e=>{x.$isTextNode(e)&&!c&&e.toggleFormat("bold")}}},strong:()=>({node:null,forChild:a=>{x.$isTextNode(a)&&a.toggleFormat("bold")}}),i:()=>({node:null,forChild:a=>{x.$isTextNode(a)&&a.toggleFormat("italic")}}),em:()=>({node:null,forChild:a=>{x.$isTextNode(a)&&a.toggleFormat("italic")}}),td:a=>{const c=a.classList.contains("js-file-line");return{node:null,
|
|
9
|
+
after:e=>{c&&a.parentNode&&a.parentNode.nextSibling&&e.push(x.$createLineBreakNode());return e}}},table:a=>({node:a.classList.contains("js-file-line-container")?C.$createCodeNode():null}),span:a=>{const c="700"===a.style.fontWeight;return{node:null,forChild:e=>{x.$isTextNode(e)&&c&&e.toggleFormat("bold")}}},"#text":a=>({node:x.$createTextNode(a.textContent)}),pre:()=>({node:C.$createCodeNode()}),div:a=>({node:null!==a.style.fontFamily.match("monospace")?C.$createCodeNode():null,after:c=>{const e=
|
|
10
|
+
a.parentNode;null!=e&&a!==e.lastChild&&c.push(x.$createLineBreakNode());return c}})};
|
|
11
|
+
function M(a,c,e,f=new Map){let d=[],b=null;var k=a.nodeName.toLowerCase(),h=(e._config.htmlTransforms||{})[k]||c[k],l=h?h(a):null;h=null;if(null!==l){h=l.after;b=l.node;if(null!==b){d.push(b);const q=Array.from(f.values());for(let m=0;m<q.length;m++)q[m](b)}null!=l.forChild&&f.set(k,l.forChild)}a=a.childNodes;k=[];for(l=0;l<a.length;l++)k.push(...M(a[l],c,e,f));null!=h&&(k=h(k));null==b?d=d.concat(k):x.$isElementNode(b)&&b.append(...k);return d}
|
|
12
|
+
function N(a,c,e){var f=a.getData("application/x-lexical-editor");if(f){var d=e._config.namespace;try{const l=JSON.parse(f);if(l.namespace===d){const {range:q,nodeMap:m}=l.state;var b=new Map(m);f=[];for(d=0;d<q.length;d++){var k=b.get(q[d]);if(void 0!==k){var h=x.$createNodeFromParse(k,b);f.push(h)}}c.insertNodes(f);return}}catch(l){}}if(b=a.getData("text/html")){b=(new DOMParser).parseFromString(b,"text/html");a=[];b=b.body?Array.from(b.body.childNodes):[];k=b.length;for(h=0;h<k;h++)f=M(b[h],L,
|
|
13
|
+
e),null!==f&&(a=a.concat(f));e=a;a=[];b=null;for(k=0;k<e.length;k++)h=e[k],!x.$isElementNode(h)||h.isInline()?(null===b&&(b=D.$createParagraphNode(),a.push(b)),null!==b&&b.append(h)):(a.push(h),b=null);c.insertNodes(a)}else e=a.getData("text/plain"),null!=e&&c.insertRawText(e)}
|
|
14
|
+
function O(a,c){var e=a.focus;a=e.offset;"element"===e.type?c=e.getNode().getChildAtIndex(c?a-1:a):(e=e.getNode(),c=c&&0===a||!c&&a===e.getTextContentSize()?c?e.getPreviousSibling():e.getNextSibling():null);return x.$isDecoratorNode(c)}function P(a,c){a.preventDefault();c.update(()=>{x.$log("onPasteForRichText");const e=x.$getSelection(),f=a.clipboardData;null!=f&&null!==e&&N(f,e,c)})}
|
|
15
|
+
function Q(a,c){R(a,c);c.update(()=>{x.$log("onCutForRichText");const e=x.$getSelection();null!==e&&e.removeText()})}
|
|
16
|
+
function R(a,c){a.preventDefault();c.update(()=>{x.$log("onCopyForRichText");const e=a.clipboardData;var f=x.$getSelection();if(null!==f&&null!=e){var d=window.getSelection();if(!d.isCollapsed){var b=d.getRangeAt(0);b&&(d=document.createElement("div"),b=b.cloneContents(),d.appendChild(b),e.setData("text/html",d.innerHTML));e.setData("text/plain",f.getTextContent());d=c._config.namespace;b=e.setData;var k=JSON,h=k.stringify;{var l=f.anchor,q=f.focus;var m=l.getCharacterOffset();const y=q.getCharacterOffset();
|
|
17
|
+
var n=l.getNode(),r=q.getNode(),p=n.getParentOrThrow();if(n===r&&x.$isTextNode(n)&&(p.canBeEmpty()||1<p.getChildrenSize()))f=J(n),n=y>m,f.__text=f.__text.slice(n?m:y,n?y:m),m=f.getKey(),m={range:[m],nodeMap:[[m,f]]};else if(f=f.getNodes(),0===f.length)m={range:[],nodeMap:[]};else{n=f.length;r=f[0];p=r.getParent();if(null!==p&&!p.canBeEmpty()){var t=p.__children;if(t.length===n){var u=!0;for(var w=0;w<t.length;w++)if(t[w]!==f[w].__key){u=!1;break}u&&(n++,f.push(p))}}p=f[n-1];l=l.isBefore(q);q=new Map;
|
|
18
|
+
t=[];K(r,l?m:y,!0,t,q);for(r=0;r<n;r++)if(u=f[r],w=u.getKey(),!(q.has(w)||x.$isElementNode(u)&&u.excludeFromCopy())){const V=J(u);x.$isRootNode(u.getParent())&&t.push(u.getKey());q.set(w,V)}K(p,l?y:m,!1,t,q);m={range:t,nodeMap:Array.from(q.entries())}}}b.call(e,"application/x-lexical-editor",h.call(k,{namespace:d,state:m}))}}})}var S="undefined"!==typeof window&&"undefined"!==typeof window.document&&"undefined"!==typeof window.document.createElement?g.useLayoutEffect:g.useEffect;
|
|
19
|
+
function T(a,c){const e=D.$createParagraphNode();a.append(e);a=document.activeElement;(null!==x.$getSelection()||null!==a&&a===c.getRootElement())&&e.select()}function U(a){a.update(()=>{x.$log("initEditor");const c=x.$getRoot();null===c.getFirstChild()&&T(c,a)})}function W(a,c){a.update(()=>{x.$log("clearEditor");const e=x.$getRoot();e.clear();T(e,a)},{onUpdate:c})}
|
|
20
|
+
function X(a,c){S(()=>{const e=G(a.registerNodes([z.HeadingNode,A.ListNode,B.QuoteNode,C.CodeNode,D.ParagraphNode,E.ListItemNode]),a.addListener("command",(f,d)=>{var b=x.$getSelection();if(null===b)return!1;switch(f){case "deleteCharacter":return b.deleteCharacter(d),!0;case "deleteWord":return b.deleteWord(d),!0;case "deleteLine":return b.deleteLine(d),!0;case "insertText":return"string"===typeof d?b.insertText(d):(f=d.dataTransfer,null!=f?N(f,b,a):(d=d.data)&&b.insertText(d)),!0;case "removeText":return b.removeText(),
|
|
21
|
+
!0;case "formatText":return b.formatText(d),!0;case "formatElement":return b=b.anchor.getNode(),(x.$isElementNode(b)?b:b.getParentOrThrow()).setFormat(d),!0;case "insertLineBreak":return b.insertLineBreak(d),!0;case "insertParagraph":return b.insertParagraph(),!0;case "indentContent":return b=b.anchor,b="element"===b.type?b.getNode():b.getNode().getParentOrThrow(),b.canInsertTab()?a.execCommand("insertText","\t"):10!==b.getIndent()&&b.setIndent(b.getIndent()+1),!0;case "outdentContent":return b=b.anchor,
|
|
22
|
+
d=b.getNode(),f="element"===b.type?b.getNode():b.getNode().getParentOrThrow(),f.canInsertTab()?"\t"===d.getTextContent()[b.offset-1]&&a.execCommand("deleteCharacter",!0):0!==f.getIndent()&&f.setIndent(f.getIndent()-1),!0;case "keyArrowLeft":f=d.shiftKey;if(O(b,!0))return d.preventDefault(),d=f,f="rtl"===b.anchor.getNode().getParentOrThrow().getDirection(),b.modify(d?"extend":"move",!f,"character"),!0;break;case "keyArrowRight":f=d.shiftKey;if(O(b,!1))return d.preventDefault(),d=f,f="rtl"===b.anchor.getNode().getParentOrThrow().getDirection(),
|
|
23
|
+
b.modify(d?"extend":"move",f,"character"),!0;break;case "keyBackspace":return d.preventDefault(),a.execCommand("deleteCharacter",!0);case "keyDelete":return d.preventDefault(),a.execCommand("deleteCharacter",!1);case "keyEnter":return d.preventDefault(),d.shiftKey?a.execCommand("insertLineBreak"):a.execCommand("insertParagraph");case "keyTab":return d.preventDefault(),a.execCommand(d.shiftKey?"outdentContent":"indentContent");case "keyEscape":return a.blur(),!0;case "clearEditor":W(a);break;case "copy":return R(d,
|
|
24
|
+
a),!0;case "cut":return Q(d,a),!0;case "paste":return P(d,a),!0;case "drop":case "dragstart":return d.preventDefault(),!0}return!1},0));c&&U(a);return e},[a,c]);I(a)}function Y(a){const [c,e]=g.useState(()=>a.getDecorators());S(()=>a.addListener("decorator",f=>{H.flushSync(()=>{e(f)})}),[a]);return g.useMemo(()=>{const f=[],d=Object.keys(c);for(let k=0;k<d.length;k++){var b=d[k];const h=c[b];b=a.getElementByKey(b);null!==b&&f.push(H.createPortal(h,b))}return f},[c,a])}
|
|
25
|
+
function aa(a,c=!0){if(a)return!1;a=x.$getRoot().getTextContent();c&&(a=a.trim());return""===a}function ba(a){if(!aa(a,!1))return!1;a=x.$getRoot().getChildren();const c=a.length;if(1<c)return!1;for(let f=0;f<c;f++){var e=a[f];if(x.$isElementNode(e)){if("paragraph"!==e.__type||0!==e.__indent)return!1;e=e.getChildren();const d=e.length;for(let b=0;b<d;b++)if(!x.$isTextNode(e[f]))return!1}}return!0}function Z(a){return()=>ba(a)}
|
|
26
|
+
function ca(a){const [c,e]=g.useState(a.getEditorState().read(Z(a.isComposing())));S(()=>a.addListener("update",({editorState:f})=>{const d=a.isComposing();f=f.read(Z(d));e(f)}),[a]);return c}function da(a){throw a;}module.exports=function({contentEditable:a,placeholder:c,skipInit:e,onError:f}){const [d]=v.useLexicalComposerContext(),b=ca(d);X(d,!e);e=Y(d);S(()=>d.addListener("error",f||da),[d,f]);return g.createElement(g.Fragment,null,a,b&&c,e)};
|
package/LexicalTablePlugin.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
'use strict';var
|
|
2
|
-
function u(c,
|
|
3
|
-
module.exports=function(){const [c]=
|
|
4
|
-
|
|
1
|
+
'use strict';var f=require("react"),k=require("@lexical/react/LexicalComposerContext"),l=require("lexical"),m=require("lexical/TableNode"),n=require("lexical/TableCellNode"),r=require("lexical/TableRowNode"),t=require("lexical/ParagraphNode");
|
|
2
|
+
function u(c,g,h=!0){const a=m.$createTableNode();for(let b=0;b<c;b++){const d=r.$createTableRowNode();for(let e=0;e<g;e++){const p=n.$createTableCellNode(0===b&&h),q=t.$createParagraphNode();q.append(l.$createTextNode());p.append(q);d.append(p)}a.append(d)}return a}
|
|
3
|
+
module.exports=function(){const [c]=k.useLexicalComposerContext();f.useEffect(()=>{const g=c.addListener("command",(a,b)=>{if("insertTable"===a){const {columns:d,rows:e}=b;l.$log("handleAddTable");a=l.$getSelection();if(null===a)return!0;a=a.focus.getNode();null!==a&&(a=a.getTopLevelElementOrThrow(),b=u(e,d),a.insertAfter(b),b.insertAfter(t.$createParagraphNode()),b.getFirstChildOrThrow().getFirstChildOrThrow().select());return!0}return!1},0),h=c.registerNodes([m.TableNode,n.TableCellNode,r.TableRowNode]);
|
|
4
|
+
return()=>{g();h()}},[c]);return null};
|
package/LexicalTreeView.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
'use strict';var k=require("lexical"),q=require("react");const w=Object.freeze({"\n":"\\n","\t":"\\t"}),
|
|
2
|
-
function
|
|
3
|
-
function
|
|
4
|
-
c?": null":
|
|
5
|
-
const
|
|
6
|
-
function
|
|
7
|
-
c===l?[d,b]=l.isBefore(u)?[
|
|
1
|
+
'use strict';var k=require("lexical"),q=require("react");const w=Object.freeze({"\n":"\\n","\t":"\\t"}),D=new RegExp(Object.keys(w).join("|"),"g"),E=Object.freeze({hasNextSibling:"\u251c",isLastChild:"\u2514",ancestorHasNextSibling:"|",ancestorIsLastChild:" ",selectedChar:"^",selectedLine:">"});
|
|
2
|
+
function F(a){let b="";const c=G(a),g=a.anchor;a=a.focus;const d=g.offset,e=a.offset;b=b+`${""!==c?" - "+c:""}`+`\n \u251c anchor { key: ${g.key}, offset: ${null===d?"null":d}, type: ${g.type} }`;return b+=`\n \u2514 focus { key: ${a.key}, offset: ${null===e?"null":e}, type: ${a.type} }`}
|
|
3
|
+
function H(a){let b=" root\n";a=a.read(()=>{const c=k.$getSelection();J(k.$getRoot(),(g,d)=>{const e=`(${g.getKey()})`,f=g.getType()||"",m=g.isSelected();var v=b,t=m?E.selectedLine:" ",r=d.join(" ");if(k.$isTextNode(g)){var n=g.getTextContent(!0);n=0===n.length?"(empty)":`"${K(n)}"`;const l=L(g);n=[n,0!==l.length?`- ${l}`:null].filter(Boolean).join(" ").trim()}else n="";b=v+`${t} ${r} ${e} ${f} ${n}\n`;b+=M({isSelected:m,indent:d,node:g,nodeKeyDisplay:e,selection:c,typeDisplay:f})});return null===
|
|
4
|
+
c?": null":F(c)});return b+"\n selection"+a}function J(a,b,c=[]){a=a.getChildren();const g=a.length;a.forEach((d,e)=>{b(d,c.concat(e===g-1?E.isLastChild:E.hasNextSibling));k.$isElementNode(d)&&J(d,b,c.concat(e===g-1?E.ancestorIsLastChild:E.ancestorHasNextSibling))})}function K(a){return Object.entries(w).reduce((b,[c,g])=>b.replace(new RegExp(c,"g"),String(g)),a)}
|
|
5
|
+
const N=[a=>a.hasFormat("bold")&&"Bold",a=>a.hasFormat("code")&&"Code",a=>a.hasFormat("italic")&&"Italic",a=>a.hasFormat("strikethrough")&&"Strikethrough",a=>a.hasFormat("underline")&&"Underline"],O=[a=>a.isToken()&&"Token",a=>a.isSegmented()&&"Segmented",a=>a.isInert()&&"Inert",a=>a.isDirectionless()&&"Directionless",a=>a.isUnmergeable()&&"Unmergeable"];function L(a){return[...N,...O].map(b=>b(a)).filter(Boolean).join(", ")}function G(a){return N.map(b=>b(a)).filter(Boolean).join(", ")}
|
|
6
|
+
function M({indent:a,isSelected:b,node:c,nodeKeyDisplay:g,selection:d,typeDisplay:e}){if(!k.$isTextNode(c)||null===d||!b||k.$isElementNode(c))return"";b=d.anchor;var f=d.focus;if(""===c.getTextContent()||b.getNode()===d.focus.getNode()&&b.offset===f.offset)return"";f=d.anchor;const m=d.focus,v=c.getTextContent(!0),t=v.length;b=d=-1;if("text"===f.type&&"text"===m.type){const l=f.getNode(),u=m.getNode();l===u&&c===l&&f.offset!==m.offset?[d,b]=f.offset<m.offset?[f.offset,m.offset]:[m.offset,f.offset]:
|
|
7
|
+
c===l?[d,b]=l.isBefore(u)?[f.offset,t]:[0,f.offset]:c===u?[d,b]=u.isBefore(l)?[m.offset,t]:[0,m.offset]:[d,b]=[0,t]}c=(v.slice(0,d).match(D)||[]).length;f=(v.slice(d,b).match(D)||[]).length;const [r,n]=[d+c,b+c+f];if(r===n)return"";c=a[a.length-1]===E.hasNextSibling?E.ancestorHasNextSibling:E.ancestorIsLastChild;a=[...a.slice(0,a.length-1),c];c=Array(r).fill(" ");d=Array(n-r).fill(E.selectedChar);g=Array(g.length+(e.length+3)).fill(" ");return[E.selectedLine,a.join(" "),[...g,...c,...d].join("")].join(" ")+
|
|
8
8
|
"\n"}
|
|
9
|
-
module.exports=function({timeTravelButtonClassName:a,timeTravelPanelSliderClassName:b,timeTravelPanelButtonClassName:c,viewClassName:
|
|
10
|
-
m(A=>[...A,[Date.now(),h]])})},[r,
|
|
11
|
-
"Time Travel"),q.createElement("pre",
|
|
12
|
-
p&&(p.value=String(h));n(!1);
|
|
9
|
+
module.exports=function({timeTravelButtonClassName:a,timeTravelPanelSliderClassName:b,timeTravelPanelButtonClassName:c,viewClassName:g,timeTravelPanelClassName:d,editor:e}){const [f,m]=q.useState([]),[v,t]=q.useState(""),[r,n]=q.useState(!1),l=q.useRef(0),u=q.useRef(null),B=q.useRef(null),[z,C]=q.useState(!1);q.useEffect(()=>{t(H(e.getEditorState()));return e.addListener("update",({editorState:h})=>{const p=e._compositionKey,x=H(e.getEditorState());t([x,null!==p&&`Composition key: ${p}`].filter(Boolean).join("\n\n"));r||
|
|
10
|
+
m(A=>[...A,[Date.now(),h]])})},[r,e]);const y=f.length;q.useEffect(()=>{if(z){let h;const p=()=>{const x=l.current;x===y-1?C(!1):h=setTimeout(()=>{l.current++;const A=l.current,I=B.current;null!==I&&(I.value=String(A));e.setEditorState(f[A][1]);p()},f[x+1][0]-f[x][0])};p();return()=>{window.clearTimeout(h)}}},[f,z,e,y]);q.useEffect(()=>{u.current&&(u.current.__lexicalEditor=e)},[e]);return q.createElement("div",{className:g},!r&&2<y&&q.createElement("button",{onClick:()=>{const h=e.getRootElement();
|
|
11
|
+
null!==h&&(h.contentEditable="false",l.current=y-1,n(!0))},className:a},"Time Travel"),q.createElement("pre",{ref:u},v),r&&q.createElement("div",{className:d},q.createElement("button",{className:c,onClick:()=>{C(!z)}},z?"Pause":"Play"),q.createElement("input",{className:b,ref:B,onChange:h=>{h=Number(h.target.value);const p=f[h];p&&(l.current=h,e.setEditorState(p[1]))},type:"range",min:"1",max:y-1}),q.createElement("button",{className:c,onClick:()=>{var h=e.getRootElement();if(null!==h){h.contentEditable=
|
|
12
|
+
"true";h=f.length-1;e.setEditorState(f[h][1]);const p=B.current;null!==p&&(p.value=String(h));n(!1);C(!1)}}},"Exit")))};
|
package/README.md
CHANGED
|
@@ -1,3 +1,79 @@
|
|
|
1
1
|
# `@lexical/react`
|
|
2
2
|
|
|
3
3
|
This package provides a set of components and hooks for Lexical that allow for text editing in React applications.
|
|
4
|
+
|
|
5
|
+
## Getting started
|
|
6
|
+
|
|
7
|
+
Install `lexical` and `@lexical/react`:
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
npm install --save lexical @lexical/react
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Below is an example of a basic plain text editor using `lexical` and `@lexical/react` ([try it yourself](https://codesandbox.io/s/lexical-plain-text-example-g932e)).
|
|
14
|
+
|
|
15
|
+
```jsx
|
|
16
|
+
import {$getRoot, $getSelection} from 'lexical';
|
|
17
|
+
import {useEffect} from 'react';
|
|
18
|
+
|
|
19
|
+
import LexicalComposer from '@lexical/react/LexicalComposer';
|
|
20
|
+
import LexicalPlainTextPlugin from '@lexical/react/LexicalPlainTextPlugin';
|
|
21
|
+
import LexicalContentEditable from '@lexical/react/LexicalContentEditable';
|
|
22
|
+
import LexicalHistoryPlugin from '@lexical/react/LexicalHistoryPlugin';
|
|
23
|
+
import LexicalOnChangePlugin from '@lexical/react/LexicalOnChangePlugin';
|
|
24
|
+
import {useLexicalComposerContext} from '@lexical/react/LexicalComposerContext';
|
|
25
|
+
|
|
26
|
+
const theme = {
|
|
27
|
+
// Theme styling goes here
|
|
28
|
+
...
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// When the editor changes, you can get notified via the
|
|
32
|
+
// LexicalOnChangePlugin!
|
|
33
|
+
function onChange(editorState) {
|
|
34
|
+
editorState.read(() => {
|
|
35
|
+
// Read the contents of the EditorState here.
|
|
36
|
+
const root = $getRoot();
|
|
37
|
+
const selection = $getSelection();
|
|
38
|
+
|
|
39
|
+
console.log(root, selection);
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Lexical React plugins are React components, which makes them
|
|
44
|
+
// highly composable. Furthermore, you can lazy load plugins if
|
|
45
|
+
// desired, so you don't pay the cost for plugins until you
|
|
46
|
+
// actually use them.
|
|
47
|
+
function MyCustomAutoFocusPlugin() {
|
|
48
|
+
const [editor] = useLexicalComposerContext();
|
|
49
|
+
|
|
50
|
+
useEffect(() => {
|
|
51
|
+
// Focus the editor when the effect fires!
|
|
52
|
+
editor.focus();
|
|
53
|
+
}, [editor]);
|
|
54
|
+
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Catch any errors that occur during Lexical updates and log them
|
|
59
|
+
// or throw them as needed. If you don't throw them, Lexical will
|
|
60
|
+
// try to recover gracefully without losing user data.
|
|
61
|
+
function onError(error) {
|
|
62
|
+
throw error;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function Editor() {
|
|
66
|
+
return (
|
|
67
|
+
<LexicalComposer theme={theme}>
|
|
68
|
+
<LexicalPlainTextPlugin
|
|
69
|
+
contentEditable={<LexicalContentEditable className="editor-input" />}
|
|
70
|
+
placeholder={<div>Enter some text...</div>}
|
|
71
|
+
onError={onError}
|
|
72
|
+
/>
|
|
73
|
+
<LexicalOnChangePlugin onChange={onChange} />
|
|
74
|
+
<LexicalHistoryPlugin />
|
|
75
|
+
<MyCustomAutoFocusPlugin />
|
|
76
|
+
</LexicalComposer>
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
```
|
package/package.json
CHANGED
|
@@ -12,13 +12,11 @@
|
|
|
12
12
|
"rich-text"
|
|
13
13
|
],
|
|
14
14
|
"license": "MIT",
|
|
15
|
-
"version": "0.1.
|
|
16
|
-
"dependencies": {
|
|
17
|
-
"lexical": "0.1.3",
|
|
18
|
-
"@lexical/helpers": "0.1.3",
|
|
19
|
-
"@lexical/yjs": "0.1.3"
|
|
20
|
-
},
|
|
15
|
+
"version": "0.1.4",
|
|
21
16
|
"peerDependencies": {
|
|
17
|
+
"lexical": "0.1.4",
|
|
18
|
+
"@lexical/helpers": "0.1.4",
|
|
19
|
+
"@lexical/yjs": "0.1.4",
|
|
22
20
|
"react": ">=17.x",
|
|
23
21
|
"react-dom": ">=17.x"
|
|
24
22
|
},
|