@lexical/react 0.12.4 → 0.12.6

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.
@@ -50,7 +50,7 @@ function LexicalClickableLinkPlugin({
50
50
  if (clickedNode !== null) {
51
51
  const maybeLinkNode = utils.$findMatchingParent(clickedNode, lexical.$isElementNode);
52
52
  if (link.$isLinkNode(maybeLinkNode)) {
53
- url = maybeLinkNode.getURL();
53
+ url = maybeLinkNode.sanitizeUrl(maybeLinkNode.getURL());
54
54
  urlTarget = maybeLinkNode.getTarget();
55
55
  } else {
56
56
  const a = findMatchingDOM(target, utils.isHTMLAnchorElement);
@@ -5,5 +5,5 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
  'use strict';var e=require("@lexical/link"),m=require("@lexical/react/LexicalComposerContext"),q=require("@lexical/utils"),r=require("lexical"),t=require("react");
8
- module.exports=function({newTab:n=!0}){let [h]=m.useLexicalComposerContext();t.useEffect(()=>{let l=a=>{const c=a.target;if(c instanceof Node){var d=r.getNearestEditorFromDOMNode(c);if(null!==d){var f=null,k=null;d.update(()=>{var b=r.$getNearestNodeFromDOMNode(c);if(null!==b)if(b=q.$findMatchingParent(b,r.$isElementNode),e.$isLinkNode(b))f=b.getURL(),k=b.getTarget();else{a:{b=q.isHTMLAnchorElement;let g=c;for(;null!=g;){if(b(g)){b=g;break a}g=g.parentNode}b=null}null!==b&&(f=b.href,k=b.target)}});
9
- if(null!==f&&""!==f){d=h.getEditorState().read(r.$getSelection);if(!r.$isRangeSelection(d)||d.isCollapsed())d="auxclick"===a.type&&1===a.button,window.open(f,n||d||a.metaKey||a.ctrlKey||"_blank"===k?"_blank":"_self");a.preventDefault()}}}},p=a=>{1===a.button&&h.isEditable()&&l(a)};return h.registerRootListener((a,c)=>{null!==c&&(c.removeEventListener("click",l),c.removeEventListener("mouseup",p));null!==a&&(a.addEventListener("click",l),a.addEventListener("mouseup",p))})},[h,n]);return null}
8
+ module.exports=function({newTab:n=!0}){let [h]=m.useLexicalComposerContext();t.useEffect(()=>{let l=b=>{const c=b.target;if(c instanceof Node){var d=r.getNearestEditorFromDOMNode(c);if(null!==d){var f=null,k=null;d.update(()=>{var a=r.$getNearestNodeFromDOMNode(c);if(null!==a)if(a=q.$findMatchingParent(a,r.$isElementNode),e.$isLinkNode(a))f=a.sanitizeUrl(a.getURL()),k=a.getTarget();else{a:{a=q.isHTMLAnchorElement;let g=c;for(;null!=g;){if(a(g)){a=g;break a}g=g.parentNode}a=null}null!==a&&(f=a.href,
9
+ k=a.target)}});if(null!==f&&""!==f){d=h.getEditorState().read(r.$getSelection);if(!r.$isRangeSelection(d)||d.isCollapsed())d="auxclick"===b.type&&1===b.button,window.open(f,n||d||b.metaKey||b.ctrlKey||"_blank"===k?"_blank":"_self");b.preventDefault()}}}},p=b=>{1===b.button&&h.isEditable()&&l(b)};return h.registerRootListener((b,c)=>{null!==c&&(c.removeEventListener("click",l),c.removeEventListener("mouseup",p));null!==b&&(b.addEventListener("click",l),b.addEventListener("mouseup",p))})},[h,n]);return null}
@@ -7,18 +7,12 @@
7
7
  * @flow strict
8
8
  */
9
9
 
10
- import type {
11
- EditorState,
12
- GridSelection,
13
- LexicalEditor,
14
- NodeSelection,
15
- RangeSelection,
16
- } from 'lexical';
10
+ import type {BaseSelection, EditorState, LexicalEditor} from 'lexical';
17
11
 
18
12
  export type HistoryStateEntry = {
19
13
  editor: LexicalEditor,
20
14
  editorState: EditorState,
21
- undoSelection?: RangeSelection | NodeSelection | GridSelection | null,
15
+ undoSelection?: BaseSelection | null,
22
16
  };
23
17
 
24
18
  export type HistoryState = {
@@ -45,6 +45,7 @@ function LexicalNestedComposer({
45
45
  const parentNodes = initialEditor._nodes = new Map(parentEditor._nodes);
46
46
  for (const [type, entry] of parentNodes) {
47
47
  initialEditor._nodes.set(type, {
48
+ exportDOM: entry.exportDOM,
48
49
  klass: entry.klass,
49
50
  replace: entry.replace,
50
51
  replaceWithKlass: entry.replaceWithKlass,
@@ -61,7 +62,9 @@ function LexicalNestedComposer({
61
62
  replace = options.with;
62
63
  replaceWithKlass = options.withKlass || null;
63
64
  }
65
+ const registeredKlass = initialEditor._nodes.get(klass.getType());
64
66
  initialEditor._nodes.set(klass.getType(), {
67
+ exportDOM: registeredKlass ? registeredKlass.exportDOM : undefined,
65
68
  klass,
66
69
  replace,
67
70
  replaceWithKlass,
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
- 'use strict';var d=require("@lexical/react/LexicalCollaborationContext"),k=require("@lexical/react/LexicalComposerContext"),q=require("react");function r(a){let h=new URLSearchParams;h.append("code",a);for(let e=1;e<arguments.length;e++)h.append("v",arguments[e]);throw Error(`Minified Lexical error #${a}; visit https://lexical.dev/docs/error?${h} for the full message or `+"use the non-minified dev environment for full errors and additional helpful warnings.");}
8
- exports.LexicalNestedComposer=function({initialEditor:a,children:h,initialNodes:e,initialTheme:t,skipCollabChecks:u}){let p=q.useRef(!1),l=q.useContext(k.LexicalComposerContext);null==l&&r(9);let [f,{getTheme:v}]=l,y=q.useMemo(()=>{var b=t||v()||void 0;const w=k.createLexicalComposerContext(l,b);void 0!==b&&(a._config.theme=b);a._parentEditor=f;if(e)for(var c of e){var g=b=null;"function"!==typeof c&&(g=c,c=g.replace,b=g.with,g=g.withKlass||null);a._nodes.set(c.getType(),{klass:c,replace:b,replaceWithKlass:g,
9
- transforms:new Set})}else{c=a._nodes=new Map(f._nodes);for(const [x,m]of c)a._nodes.set(x,{klass:m.klass,replace:m.replace,replaceWithKlass:m.replaceWithKlass,transforms:new Set})}a._config.namespace=f._config.namespace;a._editable=f._editable;return[a,w]},[]),{isCollabActive:z,yjsDocMap:A}=d.useCollaborationContext(),n=u||p.current||A.has(a.getKey());q.useEffect(()=>{n&&(p.current=!0)},[n]);q.useEffect(()=>f.registerEditableListener(b=>{a.setEditable(b)}),[a,f]);return q.createElement(k.LexicalComposerContext.Provider,
10
- {value:y},!z||n?h:null)}
7
+ 'use strict';var d=require("@lexical/react/LexicalCollaborationContext"),m=require("@lexical/react/LexicalComposerContext"),r=require("react");function t(a){let h=new URLSearchParams;h.append("code",a);for(let e=1;e<arguments.length;e++)h.append("v",arguments[e]);throw Error(`Minified Lexical error #${a}; visit https://lexical.dev/docs/error?${h} for the full message or `+"use the non-minified dev environment for full errors and additional helpful warnings.");}
8
+ exports.LexicalNestedComposer=function({initialEditor:a,children:h,initialNodes:e,initialTheme:u,skipCollabChecks:v}){let q=r.useRef(!1),n=r.useContext(m.LexicalComposerContext);null==n&&t(9);let [f,{getTheme:w}]=n,y=r.useMemo(()=>{var b=u||w()||void 0;const x=m.createLexicalComposerContext(n,b);void 0!==b&&(a._config.theme=b);a._parentEditor=f;if(e)for(var c of e){var g=b=null;"function"!==typeof c&&(g=c,c=g.replace,b=g.with,g=g.withKlass||null);const k=a._nodes.get(c.getType());a._nodes.set(c.getType(),
9
+ {exportDOM:k?k.exportDOM:void 0,klass:c,replace:b,replaceWithKlass:g,transforms:new Set})}else{c=a._nodes=new Map(f._nodes);for(const [k,l]of c)a._nodes.set(k,{exportDOM:l.exportDOM,klass:l.klass,replace:l.replace,replaceWithKlass:l.replaceWithKlass,transforms:new Set})}a._config.namespace=f._config.namespace;a._editable=f._editable;return[a,x]},[]),{isCollabActive:z,yjsDocMap:A}=d.useCollaborationContext(),p=v||q.current||A.has(a.getKey());r.useEffect(()=>{p&&(q.current=!0)},[p]);r.useEffect(()=>
10
+ f.registerEditableListener(b=>{a.setEditable(b)}),[a,f]);return r.createElement(m.LexicalComposerContext.Provider,{value:y},!z||p?h:null)}
@@ -128,6 +128,9 @@ function TablePlugin({
128
128
  lastRowCell = cell;
129
129
  unmerged.push(cell);
130
130
  } else if (cell.getColSpan() > 1 || cell.getRowSpan() > 1) {
131
+ if (!table.$isTableCellNode(cell)) {
132
+ throw Error(`Expected TableNode cell to be a TableCellNode`);
133
+ }
131
134
  const newCell = table.$createTableCellNode(cell.__headerState);
132
135
  if (lastRowCell !== null) {
133
136
  lastRowCell.insertAfter(newCell);
@@ -8,4 +8,5 @@
8
8
  exports.TablePlugin=function({hasCellMerge:m=!0,hasCellBackgroundColor:n=!0,hasTabHandler:p=!0}){let [d]=c.useLexicalComposerContext();w.useEffect(()=>{d.hasNodes([k.TableNode,k.TableCellNode,k.TableRowNode])||x(10);return d.registerCommand(k.INSERT_TABLE_COMMAND,({columns:a,rows:e,includeHeaders:h})=>{a=k.$createTableNodeWithDimensions(Number(e),Number(a),h);r.$insertNodeToNearestRoot(a);a=a.getFirstDescendant();v.$isTextNode(a)&&a.select();return!0},v.COMMAND_PRIORITY_EDITOR)},[d]);w.useEffect(()=>
9
9
  {let a=new Map,e=b=>{const f=b.getKey(),l=d.getElementByKey(f);l&&!a.has(f)&&(b=k.applyTableHandlers(b,l,d,p),a.set(f,b))};d.getEditorState().read(()=>{let b=v.$nodesOfType(k.TableNode);for(let f of b)k.$isTableNode(f)&&e(f)});let h=d.registerMutationListener(k.TableNode,b=>{for(const [f,l]of b)"created"===l?d.getEditorState().read(()=>{const g=v.$getNodeByKey(f);k.$isTableNode(g)&&e(g)}):"destroyed"===l&&(b=a.get(f),void 0!==b&&(b.removeListeners(),a.delete(f)))});return()=>{h();for(let [,b]of a)b.removeListeners()}},
10
10
  [d,p]);w.useEffect(()=>{if(!m)return d.registerNodeTransform(k.TableCellNode,a=>{if(1<a.getColSpan()||1<a.getRowSpan()){var [,,e]=v.DEPRECATED_$getNodeTriplet(a);[a]=v.DEPRECATED_$computeGridMap(e,a,a);let b=a.length,f=a[0].length;e=e.getFirstChild();if(!v.DEPRECATED_$isGridRowNode(e))throw Error("Expected TableNode first child to be a RowNode");let l=[];for(let g=0;g<b;g++){if(0!==g&&(e=e.getNextSibling(),!v.DEPRECATED_$isGridRowNode(e)))throw Error("Expected TableNode first child to be a RowNode");
11
- let u=null;for(let t=0;t<f;t++){var h=a[g][t];let q=h.cell;if(h.startRow===g&&h.startColumn===t)u=q,l.push(q);else if(1<q.getColSpan()||1<q.getRowSpan())h=k.$createTableCellNode(q.__headerState),null!==u?u.insertAfter(h):r.$insertFirst(e,h)}}for(let g of l)g.setColSpan(1),g.setRowSpan(1)}})},[d,m]);w.useEffect(()=>{if(!n)return d.registerNodeTransform(k.TableCellNode,a=>{null!==a.getBackgroundColor()&&a.setBackgroundColor(null)})},[d,n,m]);return null}
11
+ let u=null;for(let t=0;t<f;t++){var h=a[g][t];let q=h.cell;if(h.startRow===g&&h.startColumn===t)u=q,l.push(q);else if(1<q.getColSpan()||1<q.getRowSpan()){if(!k.$isTableCellNode(q))throw Error("Expected TableNode cell to be a TableCellNode");h=k.$createTableCellNode(q.__headerState);null!==u?u.insertAfter(h):r.$insertFirst(e,h)}}}for(let g of l)g.setColSpan(1),g.setRowSpan(1)}})},[d,m]);w.useEffect(()=>{if(!n)return d.registerNodeTransform(k.TableCellNode,a=>{null!==a.getBackgroundColor()&&a.setBackgroundColor(null)})},
12
+ [d,n,m]);return null}
@@ -9,6 +9,7 @@
9
9
  var html = require('@lexical/html');
10
10
  var link = require('@lexical/link');
11
11
  var mark = require('@lexical/mark');
12
+ var table = require('@lexical/table');
12
13
  var utils = require('@lexical/utils');
13
14
  var lexical = require('lexical');
14
15
  var React = require('react');
@@ -250,6 +251,7 @@ function printRangeSelection(selection) {
250
251
  return res;
251
252
  }
252
253
  function printNodeSelection(selection) {
254
+ if (!lexical.$isNodeSelection(selection)) return '';
253
255
  return `: node\n └ [${Array.from(selection._nodes).join(', ')}]`;
254
256
  }
255
257
  function printGridSelection(selection) {
@@ -286,7 +288,7 @@ function generateContent(editor, commandsLog, exportDOM) {
286
288
  typeDisplay
287
289
  });
288
290
  });
289
- return selection === null ? ': null' : lexical.$isRangeSelection(selection) ? printRangeSelection(selection) : lexical.DEPRECATED_$isGridSelection(selection) ? printGridSelection(selection) : printNodeSelection(selection);
291
+ return selection === null ? ': null' : lexical.$isRangeSelection(selection) ? printRangeSelection(selection) : table.$isGridSelection(selection) ? printGridSelection(selection) : printNodeSelection(selection);
290
292
  });
291
293
  res += '\n selection' + selectionString;
292
294
  res += '\n\n commands:';
@@ -4,21 +4,20 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
- 'use strict';var g=require("@lexical/html"),w=require("@lexical/link"),x=require("@lexical/mark"),I=require("@lexical/utils"),M=require("lexical"),N=require("react");let O=Object.freeze({"\t":"\\t","\n":"\\n"}),P=new RegExp(Object.keys(O).join("|"),"g"),Q=Object.freeze({ancestorHasNextSibling:"|",ancestorIsLastChild:" ",hasNextSibling:"\u251c",isLastChild:"\u2514",selectedChar:"^",selectedLine:">"});
8
- function R(a){let [b,c]=N.useState([]);N.useEffect(()=>{let l=new Set;for(let [e]of a._commands)l.add(a.registerCommand(e,p=>{c(d=>{d=[...d];d.push({payload:p,type:e.type?e.type:"UNKNOWN"});10<d.length&&d.shift();return d});return!1},M.COMMAND_PRIORITY_HIGH));return()=>l.forEach(e=>e())},[a]);return N.useMemo(()=>b,[b])}
9
- function U(a){let b="";var c=V(a);b+=`: range ${""!==c?`{ ${c} }`:""} ${""!==a.style?`{ style: ${a.style} } `:""}`;c=a.anchor;a=a.focus;let l=c.offset,e=a.offset;b+=`\n \u251c anchor { key: ${c.key}, offset: ${null===l?"null":l}, type: ${c.type} }`;return b+=`\n \u2514 focus { key: ${a.key}, offset: ${null===e?"null":e}, type: ${a.type} }`}
10
- function W(a,b,c){let l=a.getEditorState(),e=a._config,p=a._compositionKey,d=a._editable;if(c){let m="";l.read(()=>{var k=g.$generateHtmlFromNodes(a);let t=document.createElement("div");t.innerHTML=k.trim();m=X(t,0).innerHTML});return m}let h=" root\n";c=l.read(()=>{const m=M.$getSelection();Y(M.$getRoot(),(k,t)=>{const y=`(${k.getKey()})`,v=k.getType()||"",q=k.isSelected(),J=x.$isMarkNode(k)?` id: [ ${k.getIDs().join(", ")} ] `:"";var A=h,H=q?Q.selectedLine:" ",F=t.join(" ");if(M.$isTextNode(k)){var n=
11
- k.getTextContent();var u=0===n.length?"(empty)":`"${Z(n)}"`;n=[V(k),aa(k),ba(k)].filter(Boolean).join(", ");n=[u,0!==n.length?`{ ${n} }`:null].filter(Boolean).join(" ").trim()}else if(w.$isLinkNode(k)){n=k.getURL();n=0===n.length?"(empty)":`"${Z(n)}"`;u=k.getTarget();null!=u&&(u="target: "+u);var B=Boolean;var C=k.getRel();null!=C&&(C="rel: "+C);let r=k.getTitle();null!=r&&(r="title: "+r);u=[u,C,r].filter(B).join(", ");n=[n,0!==u.length?`{ ${u} }`:null].filter(Boolean).join(" ").trim()}else n="";
12
- h=A+`${H} ${F} ${y} ${v} ${J} ${n}\n`;h+=ca({indent:t,isSelected:q,node:k,nodeKeyDisplay:y,selection:m,typeDisplay:v})});return null===m?": null":M.$isRangeSelection(m)?U(m):M.DEPRECATED_$isGridSelection(m)?`: grid\n \u2514 { grid: ${m.gridKey}, anchorCell: ${m.anchor.key}, focusCell: ${m.focus.key} }`:`: node\n \u2514 [${Array.from(m._nodes).join(", ")}]`});h+="\n selection"+c;h+="\n\n commands:";if(b.length)for(let {type:m,payload:k}of b)h+=`\n \u2514 { type: ${m}, payload: ${k instanceof Event?
13
- k.constructor.name:k} }`;else h+="\n \u2514 None dispatched.";h+="\n\n editor:";h+=`\n \u2514 namespace ${e.namespace}`;null!==p&&(h+=`\n \u2514 compositionKey ${p}`);return h+=`\n \u2514 editable ${String(d)}`}function Y(a,b,c=[]){a=a.getChildren();let l=a.length;a.forEach((e,p)=>{b(e,c.concat(p===l-1?Q.isLastChild:Q.hasNextSibling));M.$isElementNode(e)&&Y(e,b,c.concat(p===l-1?Q.ancestorIsLastChild:Q.ancestorHasNextSibling))})}
14
- function Z(a){return Object.entries(O).reduce((b,[c,l])=>b.replace(new RegExp(c,"g"),String(l)),a)}
15
- let da=[a=>a.hasFormat("bold")&&"Bold",a=>a.hasFormat("code")&&"Code",a=>a.hasFormat("italic")&&"Italic",a=>a.hasFormat("strikethrough")&&"Strikethrough",a=>a.hasFormat("subscript")&&"Subscript",a=>a.hasFormat("superscript")&&"Superscript",a=>a.hasFormat("underline")&&"Underline"],ea=[a=>a.isDirectionless()&&"Directionless",a=>a.isUnmergeable()&&"Unmergeable"],fa=[a=>a.isToken()&&"Token",a=>a.isSegmented()&&"Segmented"];
16
- function aa(a){let b=ea.map(c=>c(a)).filter(Boolean).join(", ").toLocaleLowerCase();""!==b&&(b="detail: "+b);return b}function ba(a){let b=fa.map(c=>c(a)).filter(Boolean).join(", ").toLocaleLowerCase();""!==b&&(b="mode: "+b);return b}function V(a){let b=da.map(c=>c(a)).filter(Boolean).join(", ").toLocaleLowerCase();""!==b&&(b="format: "+b);return b}
17
- function ca({indent:a,isSelected:b,node:c,nodeKeyDisplay:l,selection:e,typeDisplay:p}){if(!M.$isTextNode(c)||!M.$isRangeSelection(e)||!b||M.$isElementNode(c))return"";b=e.anchor;var d=e.focus;if(""===c.getTextContent()||b.getNode()===e.focus.getNode()&&b.offset===d.offset)return"";d=e.anchor;let h=e.focus,m=c.getTextContent(),k=m.length;b=e=-1;if("text"===d.type&&"text"===h.type){let v=d.getNode(),q=h.getNode();v===q&&c===v&&d.offset!==h.offset?[e,b]=d.offset<h.offset?[d.offset,h.offset]:[h.offset,
18
- d.offset]:c===v?[e,b]=v.isBefore(q)?[d.offset,k]:[0,d.offset]:c===q?[e,b]=q.isBefore(v)?[h.offset,k]:[0,h.offset]:[e,b]=[0,k]}c=(m.slice(0,e).match(P)||[]).length;d=(m.slice(e,b).match(P)||[]).length;let [t,y]=[e+c,b+c+d];if(t===y)return"";c=a[a.length-1]===Q.hasNextSibling?Q.ancestorHasNextSibling:Q.ancestorIsLastChild;a=[...a.slice(0,a.length-1),c];c=Array(t+1).fill(" ");e=Array(y-t).fill(Q.selectedChar);l=Array(l.length+(p.length+3)).fill(" ");return[Q.selectedLine,a.join(" "),[...l,...c,...e].join("")].join(" ")+
7
+ 'use strict';var g=require("@lexical/html"),w=require("@lexical/link"),x=require("@lexical/mark"),I=require("@lexical/table"),M=require("@lexical/utils"),N=require("lexical"),O=require("react");let P=Object.freeze({"\t":"\\t","\n":"\\n"}),Q=new RegExp(Object.keys(P).join("|"),"g"),R=Object.freeze({ancestorHasNextSibling:"|",ancestorIsLastChild:" ",hasNextSibling:"\u251c",isLastChild:"\u2514",selectedChar:"^",selectedLine:">"});
8
+ function U(a){let [b,c]=O.useState([]);O.useEffect(()=>{let l=new Set;for(let [e]of a._commands)l.add(a.registerCommand(e,p=>{c(d=>{d=[...d];d.push({payload:p,type:e.type?e.type:"UNKNOWN"});10<d.length&&d.shift();return d});return!1},N.COMMAND_PRIORITY_HIGH));return()=>l.forEach(e=>e())},[a]);return O.useMemo(()=>b,[b])}
9
+ function aa(a){let b="";var c=V(a);b+=`: range ${""!==c?`{ ${c} }`:""} ${""!==a.style?`{ style: ${a.style} } `:""}`;c=a.anchor;a=a.focus;let l=c.offset,e=a.offset;b+=`\n \u251c anchor { key: ${c.key}, offset: ${null===l?"null":l}, type: ${c.type} }`;return b+=`\n \u2514 focus { key: ${a.key}, offset: ${null===e?"null":e}, type: ${a.type} }`}function ba(a){return N.$isNodeSelection(a)?`: node\n \u2514 [${Array.from(a._nodes).join(", ")}]`:""}
10
+ function W(a,b,c){let l=a.getEditorState(),e=a._config,p=a._compositionKey,d=a._editable;if(c){let m="";l.read(()=>{var k=g.$generateHtmlFromNodes(a);let t=document.createElement("div");t.innerHTML=k.trim();m=X(t,0).innerHTML});return m}let h=" root\n";c=l.read(()=>{const m=N.$getSelection();Y(N.$getRoot(),(k,t)=>{const y=`(${k.getKey()})`,v=k.getType()||"",q=k.isSelected(),J=x.$isMarkNode(k)?` id: [ ${k.getIDs().join(", ")} ] `:"";var A=h,H=q?R.selectedLine:" ",F=t.join(" ");if(N.$isTextNode(k)){var n=
11
+ k.getTextContent();var u=0===n.length?"(empty)":`"${Z(n)}"`;n=[V(k),ca(k),da(k)].filter(Boolean).join(", ");n=[u,0!==n.length?`{ ${n} }`:null].filter(Boolean).join(" ").trim()}else if(w.$isLinkNode(k)){n=k.getURL();n=0===n.length?"(empty)":`"${Z(n)}"`;u=k.getTarget();null!=u&&(u="target: "+u);var B=Boolean;var C=k.getRel();null!=C&&(C="rel: "+C);let r=k.getTitle();null!=r&&(r="title: "+r);u=[u,C,r].filter(B).join(", ");n=[n,0!==u.length?`{ ${u} }`:null].filter(Boolean).join(" ").trim()}else n="";
12
+ h=A+`${H} ${F} ${y} ${v} ${J} ${n}\n`;h+=ea({indent:t,isSelected:q,node:k,nodeKeyDisplay:y,selection:m,typeDisplay:v})});return null===m?": null":N.$isRangeSelection(m)?aa(m):I.$isGridSelection(m)?`: grid\n \u2514 { grid: ${m.gridKey}, anchorCell: ${m.anchor.key}, focusCell: ${m.focus.key} }`:ba(m)});h+="\n selection"+c;h+="\n\n commands:";if(b.length)for(let {type:m,payload:k}of b)h+=`\n \u2514 { type: ${m}, payload: ${k instanceof Event?k.constructor.name:k} }`;else h+="\n \u2514 None dispatched.";
13
+ h+="\n\n editor:";h+=`\n \u2514 namespace ${e.namespace}`;null!==p&&(h+=`\n \u2514 compositionKey ${p}`);return h+=`\n \u2514 editable ${String(d)}`}function Y(a,b,c=[]){a=a.getChildren();let l=a.length;a.forEach((e,p)=>{b(e,c.concat(p===l-1?R.isLastChild:R.hasNextSibling));N.$isElementNode(e)&&Y(e,b,c.concat(p===l-1?R.ancestorIsLastChild:R.ancestorHasNextSibling))})}function Z(a){return Object.entries(P).reduce((b,[c,l])=>b.replace(new RegExp(c,"g"),String(l)),a)}
14
+ let fa=[a=>a.hasFormat("bold")&&"Bold",a=>a.hasFormat("code")&&"Code",a=>a.hasFormat("italic")&&"Italic",a=>a.hasFormat("strikethrough")&&"Strikethrough",a=>a.hasFormat("subscript")&&"Subscript",a=>a.hasFormat("superscript")&&"Superscript",a=>a.hasFormat("underline")&&"Underline"],ha=[a=>a.isDirectionless()&&"Directionless",a=>a.isUnmergeable()&&"Unmergeable"],ia=[a=>a.isToken()&&"Token",a=>a.isSegmented()&&"Segmented"];
15
+ function ca(a){let b=ha.map(c=>c(a)).filter(Boolean).join(", ").toLocaleLowerCase();""!==b&&(b="detail: "+b);return b}function da(a){let b=ia.map(c=>c(a)).filter(Boolean).join(", ").toLocaleLowerCase();""!==b&&(b="mode: "+b);return b}function V(a){let b=fa.map(c=>c(a)).filter(Boolean).join(", ").toLocaleLowerCase();""!==b&&(b="format: "+b);return b}
16
+ function ea({indent:a,isSelected:b,node:c,nodeKeyDisplay:l,selection:e,typeDisplay:p}){if(!N.$isTextNode(c)||!N.$isRangeSelection(e)||!b||N.$isElementNode(c))return"";b=e.anchor;var d=e.focus;if(""===c.getTextContent()||b.getNode()===e.focus.getNode()&&b.offset===d.offset)return"";d=e.anchor;let h=e.focus,m=c.getTextContent(),k=m.length;b=e=-1;if("text"===d.type&&"text"===h.type){let v=d.getNode(),q=h.getNode();v===q&&c===v&&d.offset!==h.offset?[e,b]=d.offset<h.offset?[d.offset,h.offset]:[h.offset,
17
+ d.offset]:c===v?[e,b]=v.isBefore(q)?[d.offset,k]:[0,d.offset]:c===q?[e,b]=q.isBefore(v)?[h.offset,k]:[0,h.offset]:[e,b]=[0,k]}c=(m.slice(0,e).match(Q)||[]).length;d=(m.slice(e,b).match(Q)||[]).length;let [t,y]=[e+c,b+c+d];if(t===y)return"";c=a[a.length-1]===R.hasNextSibling?R.ancestorHasNextSibling:R.ancestorIsLastChild;a=[...a.slice(0,a.length-1),c];c=Array(t+1).fill(" ");e=Array(y-t).fill(R.selectedChar);l=Array(l.length+(p.length+3)).fill(" ");return[R.selectedLine,a.join(" "),[...l,...c,...e].join("")].join(" ")+
19
18
  "\n"}function X(a,b){let c=Array(b++ +1).join(" "),l=Array(b-1).join(" "),e;for(let p=0;p<a.children.length;p++)e=document.createTextNode("\n"+c),a.insertBefore(e,a.children[p]),X(a.children[p],b),a.lastElementChild===a.children[p]&&(e=document.createTextNode("\n"+l),a.appendChild(e));return a}
20
- exports.TreeView=function({treeTypeButtonClassName:a,timeTravelButtonClassName:b,timeTravelPanelSliderClassName:c,timeTravelPanelButtonClassName:l,viewClassName:e,timeTravelPanelClassName:p,editor:d}){let [h,m]=N.useState([]),[k,t]=N.useState(""),[y,v]=N.useState(!1),[q,J]=N.useState(!1),A=N.useRef(0),H=N.useRef(null),F=N.useRef(null),[n,u]=N.useState(!1),[B,C]=N.useState(!1),[r,ha]=N.useState(!1),K=N.useRef(null),D=R(d),L=N.useCallback(f=>{const z=W(d,D,q);t(z);y||m(G=>[...G,[Date.now(),f]])},[D,
21
- d,y,q]);N.useEffect(()=>{let f=d.getEditorState();!r&&1E3>f._nodeMap.size&&t(W(d,D,q))},[D,d,r,q]);N.useEffect(()=>I.mergeRegister(d.registerUpdateListener(({editorState:f})=>{if(!r&&1E3<f._nodeMap.size&&(K.current=f,C(!0),!r))return;L(f)}),d.registerEditableListener(()=>{let f=W(d,D,q);t(f)})),[D,d,q,B,L,r]);let E=h.length;N.useEffect(()=>{if(n){let f,z=()=>{const G=A.current;G===E-1?u(!1):f=setTimeout(()=>{A.current++;const S=A.current,T=F.current;null!==T&&(T.value=String(S));d.setEditorState(h[S][1]);
22
- z()},h[G+1][0]-h[G][0])};z();return()=>{clearTimeout(f)}}},[h,n,d,E]);N.useEffect(()=>{let f=H.current;if(null!==f)return f.__lexicalEditor=d,()=>{f.__lexicalEditor=null}},[d]);return N.createElement("div",{className:e},!r&&B?N.createElement("div",{style:{padding:20}},N.createElement("span",{style:{marginRight:20}},"Detected large EditorState, this can impact debugging performance."),N.createElement("button",{onClick:()=>{ha(!0);let f=K.current;null!==f&&(K.current=null,L(f))},style:{background:"transparent",
23
- border:"1px solid white",color:"white",cursor:"pointer",padding:5}},"Show full tree")):null,r?null:N.createElement("button",{onClick:()=>J(!q),className:a,type:"button"},q?"Tree":"Export DOM"),!y&&(r||!B)&&2<E&&N.createElement("button",{onClick:()=>{let f=d.getRootElement();null!==f&&(f.contentEditable="false",A.current=E-1,v(!0))},className:b,type:"button"},"Time Travel"),(r||!B)&&N.createElement("pre",{ref:H},k),y&&(r||!B)&&N.createElement("div",{className:p},N.createElement("button",{className:l,
24
- onClick:()=>{A.current===E-1&&(A.current=1);u(!n)},type:"button"},n?"Pause":"Play"),N.createElement("input",{className:c,ref:F,onChange:f=>{f=Number(f.target.value);let z=h[f];z&&(A.current=f,d.setEditorState(z[1]))},type:"range",min:"1",max:E-1}),N.createElement("button",{className:l,onClick:()=>{var f=d.getRootElement();if(null!==f){f.contentEditable="true";f=h.length-1;d.setEditorState(h[f][1]);let z=F.current;null!==z&&(z.value=String(f));v(!1);u(!1)}},type:"button"},"Exit")))}
19
+ exports.TreeView=function({treeTypeButtonClassName:a,timeTravelButtonClassName:b,timeTravelPanelSliderClassName:c,timeTravelPanelButtonClassName:l,viewClassName:e,timeTravelPanelClassName:p,editor:d}){let [h,m]=O.useState([]),[k,t]=O.useState(""),[y,v]=O.useState(!1),[q,J]=O.useState(!1),A=O.useRef(0),H=O.useRef(null),F=O.useRef(null),[n,u]=O.useState(!1),[B,C]=O.useState(!1),[r,ja]=O.useState(!1),K=O.useRef(null),D=U(d),L=O.useCallback(f=>{const z=W(d,D,q);t(z);y||m(G=>[...G,[Date.now(),f]])},[D,
20
+ d,y,q]);O.useEffect(()=>{let f=d.getEditorState();!r&&1E3>f._nodeMap.size&&t(W(d,D,q))},[D,d,r,q]);O.useEffect(()=>M.mergeRegister(d.registerUpdateListener(({editorState:f})=>{if(!r&&1E3<f._nodeMap.size&&(K.current=f,C(!0),!r))return;L(f)}),d.registerEditableListener(()=>{let f=W(d,D,q);t(f)})),[D,d,q,B,L,r]);let E=h.length;O.useEffect(()=>{if(n){let f,z=()=>{const G=A.current;G===E-1?u(!1):f=setTimeout(()=>{A.current++;const S=A.current,T=F.current;null!==T&&(T.value=String(S));d.setEditorState(h[S][1]);
21
+ z()},h[G+1][0]-h[G][0])};z();return()=>{clearTimeout(f)}}},[h,n,d,E]);O.useEffect(()=>{let f=H.current;if(null!==f)return f.__lexicalEditor=d,()=>{f.__lexicalEditor=null}},[d]);return O.createElement("div",{className:e},!r&&B?O.createElement("div",{style:{padding:20}},O.createElement("span",{style:{marginRight:20}},"Detected large EditorState, this can impact debugging performance."),O.createElement("button",{onClick:()=>{ja(!0);let f=K.current;null!==f&&(K.current=null,L(f))},style:{background:"transparent",
22
+ border:"1px solid white",color:"white",cursor:"pointer",padding:5}},"Show full tree")):null,r?null:O.createElement("button",{onClick:()=>J(!q),className:a,type:"button"},q?"Tree":"Export DOM"),!y&&(r||!B)&&2<E&&O.createElement("button",{onClick:()=>{let f=d.getRootElement();null!==f&&(f.contentEditable="false",A.current=E-1,v(!0))},className:b,type:"button"},"Time Travel"),(r||!B)&&O.createElement("pre",{ref:H},k),y&&(r||!B)&&O.createElement("div",{className:p},O.createElement("button",{className:l,
23
+ onClick:()=>{A.current===E-1&&(A.current=1);u(!n)},type:"button"},n?"Pause":"Play"),O.createElement("input",{className:c,ref:F,onChange:f=>{f=Number(f.target.value);let z=h[f];z&&(A.current=f,d.setEditorState(z[1]))},type:"range",min:"1",max:E-1}),O.createElement("button",{className:l,onClick:()=>{var f=d.getRootElement();if(null!==f){f.contentEditable="true";f=h.length-1;d.setEditorState(h[f][1]);let z=F.current;null!==z&&(z.value=String(f));v(!1);u(!1)}},type:"button"},"Exit")))}
package/package.json CHANGED
@@ -8,29 +8,29 @@
8
8
  "rich-text"
9
9
  ],
10
10
  "license": "MIT",
11
- "version": "0.12.4",
11
+ "version": "0.12.6",
12
12
  "dependencies": {
13
- "@lexical/clipboard": "0.12.4",
14
- "@lexical/code": "0.12.4",
15
- "@lexical/dragon": "0.12.4",
16
- "@lexical/hashtag": "0.12.4",
17
- "@lexical/history": "0.12.4",
18
- "@lexical/link": "0.12.4",
19
- "@lexical/list": "0.12.4",
20
- "@lexical/mark": "0.12.4",
21
- "@lexical/markdown": "0.12.4",
22
- "@lexical/overflow": "0.12.4",
23
- "@lexical/plain-text": "0.12.4",
24
- "@lexical/rich-text": "0.12.4",
25
- "@lexical/selection": "0.12.4",
26
- "@lexical/table": "0.12.4",
27
- "@lexical/text": "0.12.4",
28
- "@lexical/utils": "0.12.4",
29
- "@lexical/yjs": "0.12.4",
13
+ "@lexical/clipboard": "0.12.6",
14
+ "@lexical/code": "0.12.6",
15
+ "@lexical/dragon": "0.12.6",
16
+ "@lexical/hashtag": "0.12.6",
17
+ "@lexical/history": "0.12.6",
18
+ "@lexical/link": "0.12.6",
19
+ "@lexical/list": "0.12.6",
20
+ "@lexical/mark": "0.12.6",
21
+ "@lexical/markdown": "0.12.6",
22
+ "@lexical/overflow": "0.12.6",
23
+ "@lexical/plain-text": "0.12.6",
24
+ "@lexical/rich-text": "0.12.6",
25
+ "@lexical/selection": "0.12.6",
26
+ "@lexical/table": "0.12.6",
27
+ "@lexical/text": "0.12.6",
28
+ "@lexical/utils": "0.12.6",
29
+ "@lexical/yjs": "0.12.6",
30
30
  "react-error-boundary": "^3.1.4"
31
31
  },
32
32
  "peerDependencies": {
33
- "lexical": "0.12.4",
33
+ "lexical": "0.12.6",
34
34
  "react": ">=17.x",
35
35
  "react-dom": ">=17.x"
36
36
  },
@@ -48,10 +48,12 @@ function useLexicalNodeSelection(key) {
48
48
  selection = lexical.$createNodeSelection();
49
49
  lexical.$setSelection(selection);
50
50
  }
51
- if (selected) {
52
- selection.add(key);
53
- } else {
54
- selection.delete(key);
51
+ if (lexical.$isNodeSelection(selection)) {
52
+ if (selected) {
53
+ selection.add(key);
54
+ } else {
55
+ selection.delete(key);
56
+ }
55
57
  }
56
58
  });
57
59
  }, [editor, key]);
@@ -4,5 +4,6 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
- 'use strict';var c=require("@lexical/react/LexicalComposerContext"),f=require("lexical"),h=require("react");function k(b,a){return b.getEditorState().read(()=>{let g=f.$getNodeByKey(a);return null===g?!1:g.isSelected()})}
8
- exports.useLexicalNodeSelection=function(b){let [a]=c.useLexicalComposerContext(),[g,l]=h.useState(()=>k(a,b));h.useEffect(()=>{let d=!0,e=a.registerUpdateListener(()=>{d&&l(k(a,b))});return()=>{d=!1;e()}},[a,b]);let m=h.useCallback(d=>{a.update(()=>{let e=f.$getSelection();f.$isNodeSelection(e)||(e=f.$createNodeSelection(),f.$setSelection(e));d?e.add(b):e.delete(b)})},[a,b]),n=h.useCallback(()=>{a.update(()=>{const d=f.$getSelection();f.$isNodeSelection(d)&&d.clear()})},[a]);return[g,m,n]}
7
+ 'use strict';var b=require("@lexical/react/LexicalComposerContext"),f=require("lexical"),h=require("react");function k(c,a){return c.getEditorState().read(()=>{let g=f.$getNodeByKey(a);return null===g?!1:g.isSelected()})}
8
+ exports.useLexicalNodeSelection=function(c){let [a]=b.useLexicalComposerContext(),[g,l]=h.useState(()=>k(a,c));h.useEffect(()=>{let e=!0,d=a.registerUpdateListener(()=>{e&&l(k(a,c))});return()=>{e=!1;d()}},[a,c]);let m=h.useCallback(e=>{a.update(()=>{let d=f.$getSelection();f.$isNodeSelection(d)||(d=f.$createNodeSelection(),f.$setSelection(d));f.$isNodeSelection(d)&&(e?d.add(c):d.delete(c))})},[a,c]),n=h.useCallback(()=>{a.update(()=>{const e=f.$getSelection();f.$isNodeSelection(e)&&e.clear()})},
9
+ [a]);return[g,m,n]}