@lexical/rich-text 0.5.1-next.1 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -11,6 +11,25 @@ var selection = require('@lexical/selection');
11
11
  var utils = require('@lexical/utils');
12
12
  var lexical = require('lexical');
13
13
 
14
+ /**
15
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
16
+ *
17
+ * This source code is licensed under the MIT license found in the
18
+ * LICENSE file in the root directory of this source tree.
19
+ *
20
+ */
21
+ function caretFromPoint(x, y) {
22
+ if (typeof document.caretRangeFromPoint !== 'undefined') {
23
+ return document.caretRangeFromPoint(x, y); // @ts-ignore
24
+ } else if (document.caretPositionFromPoint !== 'undefined') {
25
+ // @ts-ignore FF - no types
26
+ return document.caretPositionFromPoint(x, y);
27
+ } else {
28
+ // Gracefully handle IE
29
+ return null;
30
+ }
31
+ }
32
+
14
33
  /**
15
34
  * Copyright (c) Meta Platforms, Inc. and affiliates.
16
35
  *
@@ -38,6 +57,7 @@ const IS_IOS = CAN_USE_DOM && /iPad|iPhone|iPod/.test(navigator.userAgent) && !w
38
57
  // export const canUseTextInputEvent: boolean = CAN_USE_DOM && 'TextEvent' in window && !documentMode;
39
58
 
40
59
  /** @module @lexical/rich-text */
60
+ const DRAG_DROP_PASTE = lexical.createCommand('DRAG_DROP_PASTE_FILE');
41
61
 
42
62
  /** @noInheritDoc */
43
63
  class QuoteNode extends lexical.ElementNode {
@@ -313,6 +333,25 @@ async function onCutForRichText(event, editor) {
313
333
  selection.getNodes().forEach(node => node.remove());
314
334
  }
315
335
  });
336
+ } // Clipboard may contain files that we aren't allowed to read. While the event is arguably useless,
337
+ // in certain ocassions, we want to know whether it was a file transfer, as opposed to text. We
338
+ // control this with the first boolean flag.
339
+
340
+
341
+ function eventFiles(event) {
342
+ let dataTransfer = null;
343
+
344
+ if (event instanceof DragEvent) {
345
+ dataTransfer = event.dataTransfer;
346
+ } else if (event instanceof ClipboardEvent) {
347
+ dataTransfer = event.clipboardData;
348
+ }
349
+
350
+ if (dataTransfer === null) {
351
+ return [false, []];
352
+ }
353
+
354
+ return [dataTransfer.types.includes('Files'), Array.from(dataTransfer.files)];
316
355
  }
317
356
 
318
357
  function handleIndentAndOutdent(insertTab, indentOrOutdent) {
@@ -664,18 +703,71 @@ function registerRichText(editor) {
664
703
  editor.blur();
665
704
  return true;
666
705
  }, lexical.COMMAND_PRIORITY_EDITOR), editor.registerCommand(lexical.DROP_COMMAND, event => {
706
+ const [, files] = eventFiles(event);
707
+
708
+ if (files.length > 0) {
709
+ const x = event.clientX;
710
+ const y = event.clientY;
711
+ const eventRange = caretFromPoint(x, y);
712
+
713
+ if (eventRange !== null) {
714
+ const {
715
+ startOffset,
716
+ endOffset,
717
+ startContainer,
718
+ endContainer
719
+ } = eventRange;
720
+ const startNode = lexical.$getNearestNodeFromDOMNode(startContainer);
721
+ const endNode = lexical.$getNearestNodeFromDOMNode(endContainer);
722
+
723
+ if (startNode !== null && endNode !== null) {
724
+ const selection = lexical.$createRangeSelection();
725
+
726
+ if (lexical.$isTextNode(startNode)) {
727
+ selection.anchor.set(startNode.getKey(), startOffset, 'text');
728
+ } else {
729
+ selection.anchor.set(startNode.getParentOrThrow().getKey(), startNode.getIndexWithinParent() + 1, 'element');
730
+ }
731
+
732
+ if (lexical.$isTextNode(endNode)) {
733
+ selection.focus.set(endNode.getKey(), endOffset, 'text');
734
+ } else {
735
+ selection.focus.set(endNode.getParentOrThrow().getKey(), endNode.getIndexWithinParent() + 1, 'element');
736
+ }
737
+
738
+ const normalizedSelection = lexical.$normalizeSelection__EXPERIMENTAL(selection);
739
+ lexical.$setSelection(normalizedSelection);
740
+ }
741
+
742
+ editor.dispatchCommand(DRAG_DROP_PASTE, files);
743
+ }
744
+
745
+ event.preventDefault();
746
+ return true;
747
+ }
748
+
667
749
  const selection = lexical.$getSelection();
668
750
 
669
- if (!lexical.$isRangeSelection(selection)) {
751
+ if (lexical.$isRangeSelection(selection)) {
752
+ return true;
753
+ }
754
+
755
+ return false;
756
+ }, lexical.COMMAND_PRIORITY_EDITOR), editor.registerCommand(lexical.DRAGSTART_COMMAND, event => {
757
+ const [isFileTransfer] = eventFiles(event);
758
+ const selection = lexical.$getSelection();
759
+
760
+ if (isFileTransfer && !lexical.$isRangeSelection(selection)) {
670
761
  return false;
671
762
  }
672
763
 
673
764
  event.preventDefault();
674
765
  return true;
675
- }, lexical.COMMAND_PRIORITY_EDITOR), editor.registerCommand(lexical.DRAGSTART_COMMAND, event => {
766
+ }, lexical.COMMAND_PRIORITY_EDITOR), editor.registerCommand(lexical.DRAGOVER_COMMAND, event => {
767
+ const [isFileTransfer] = eventFiles(event);
676
768
  const selection = lexical.$getSelection();
677
769
 
678
- if (!lexical.$isRangeSelection(selection)) {
770
+ if (isFileTransfer && !lexical.$isRangeSelection(selection)) {
679
771
  return false;
680
772
  }
681
773
 
@@ -688,6 +780,13 @@ function registerRichText(editor) {
688
780
  onCutForRichText(event, editor);
689
781
  return true;
690
782
  }, lexical.COMMAND_PRIORITY_EDITOR), editor.registerCommand(lexical.PASTE_COMMAND, event => {
783
+ const [, files] = eventFiles(event);
784
+
785
+ if (files !== null && files.length > 0) {
786
+ editor.dispatchCommand(DRAG_DROP_PASTE, files);
787
+ return true;
788
+ }
789
+
691
790
  const selection = lexical.$getSelection();
692
791
 
693
792
  if (lexical.$isRangeSelection(selection) || lexical.DEPRECATED_$isGridSelection(selection)) {
@@ -704,6 +803,8 @@ exports.$createHeadingNode = $createHeadingNode;
704
803
  exports.$createQuoteNode = $createQuoteNode;
705
804
  exports.$isHeadingNode = $isHeadingNode;
706
805
  exports.$isQuoteNode = $isQuoteNode;
806
+ exports.DRAG_DROP_PASTE = DRAG_DROP_PASTE;
707
807
  exports.HeadingNode = HeadingNode;
708
808
  exports.QuoteNode = QuoteNode;
809
+ exports.eventFiles = eventFiles;
709
810
  exports.registerRichText = registerRichText;
@@ -4,25 +4,27 @@
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 a=require("@lexical/clipboard"),f=require("@lexical/selection"),g=require("@lexical/utils"),h=require("lexical");let l="undefined"!==typeof window&&"undefined"!==typeof window.document&&"undefined"!==typeof window.document.createElement,m=l&&"documentMode"in document?document.documentMode:null;l&&/Mac|iPod|iPhone|iPad/.test(navigator.platform);l&&/^(?!.*Seamonkey)(?=.*Firefox).*/i.test(navigator.userAgent);
8
- let n=l&&"InputEvent"in window&&!m?"getTargetRanges"in new window.InputEvent("input"):!1,p=l&&/Version\/[\d.]+.*Safari/.test(navigator.userAgent),q=l&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream;
9
- class r extends h.ElementNode{static getType(){return"quote"}static clone(c){return new r(c.__key)}constructor(c){super(c)}createDOM(c){let b=document.createElement("blockquote");g.addClassNamesToElement(b,c.theme.quote);return b}updateDOM(){return!1}static importDOM(){return{blockquote:()=>({conversion:t,priority:0})}}static importJSON(c){let b=w();b.setFormat(c.format);b.setIndent(c.indent);b.setDirection(c.direction);return b}exportJSON(){return{...super.exportJSON(),type:"quote"}}insertNewAfter(){let c=
10
- h.$createParagraphNode(),b=this.getDirection();c.setDirection(b);this.insertAfter(c);return c}collapseAtStart(){let c=h.$createParagraphNode();this.getChildren().forEach(b=>c.append(b));this.replace(c);return!0}}function w(){return new r}
11
- class x extends h.ElementNode{static getType(){return"heading"}static clone(c){return new x(c.__tag,c.__key)}constructor(c,b){super(b);this.__tag=c}getTag(){return this.__tag}createDOM(c){let b=this.__tag,d=document.createElement(b);c=c.theme.heading;void 0!==c&&g.addClassNamesToElement(d,c[b]);return d}updateDOM(){return!1}static importDOM(){return{h1:()=>({conversion:y,priority:0}),h2:()=>({conversion:y,priority:0}),h3:()=>({conversion:y,priority:0}),h4:()=>({conversion:y,priority:0}),h5:()=>({conversion:y,
12
- priority:0}),h6:()=>({conversion:y,priority:0}),p:c=>{c=c.firstChild;return null!==c&&z(c)?{conversion:()=>({node:null}),priority:3}:null},span:c=>z(c)?{conversion:()=>({node:A("h1")}),priority:3}:null}}static importJSON(c){let b=A(c.tag);b.setFormat(c.format);b.setIndent(c.indent);b.setDirection(c.direction);return b}exportJSON(){return{...super.exportJSON(),tag:this.getTag(),type:"heading",version:1}}insertNewAfter(){let c=h.$createParagraphNode(),b=this.getDirection();c.setDirection(b);this.insertAfter(c);
13
- return c}collapseAtStart(){let c=h.$createParagraphNode();this.getChildren().forEach(b=>c.append(b));this.replace(c);return!0}extractWithChild(){return!0}}function z(c){return"span"===c.nodeName.toLowerCase()?"26pt"===c.style.fontSize:!1}function y(c){c=c.nodeName.toLowerCase();let b=null;if("h1"===c||"h2"===c||"h3"===c||"h4"===c||"h5"===c||"h6"===c)b=A(c);return{node:b}}function t(){return{node:w()}}function A(c){return new x(c)}
14
- function B(c,b){c.preventDefault();b.update(()=>{let d=h.$getSelection(),e=c instanceof InputEvent||c instanceof KeyboardEvent?null:c.clipboardData;null!=e&&(h.$isRangeSelection(d)||h.DEPRECATED_$isGridSelection(d))&&a.$insertDataTransferForRichText(e,d,b)},{tag:"paste"})}
15
- async function C(c,b){null!=b.getEditorState().read(()=>h.$getSelection())&&(await a.copyToClipboard__EXPERIMENTAL(b,c instanceof ClipboardEvent?c:null),b.update(()=>{let d=h.$getSelection();h.$isRangeSelection(d)?d.removeText():h.$isNodeSelection(d)&&d.getNodes().forEach(e=>e.remove())}))}
16
- function D(c,b){var d=h.$getSelection();if(h.$isRangeSelection(d)){var e=new Set;d=d.getNodes();for(let u=0;u<d.length;u++){let v=d[u];var k=v.getKey();e.has(k)||(e.add(k),k=g.$getNearestBlockElementAncestorOrThrow(v),k.canInsertTab()?c(v):k.canIndent()&&b(k))}}}function E(c){c=h.$getNearestNodeFromDOMNode(c);return h.$isDecoratorNode(c)}exports.$createHeadingNode=A;exports.$createQuoteNode=w;exports.$isHeadingNode=function(c){return c instanceof x};
17
- exports.$isQuoteNode=function(c){return c instanceof r};exports.HeadingNode=x;exports.QuoteNode=r;
18
- exports.registerRichText=function(c){return g.mergeRegister(c.registerCommand(h.CLICK_COMMAND,()=>{const b=h.$getSelection();return h.$isNodeSelection(b)?(b.clear(),!0):!1},0),c.registerCommand(h.DELETE_CHARACTER_COMMAND,b=>{const d=h.$getSelection();if(!h.$isRangeSelection(d))return!1;d.deleteCharacter(b);return!0},h.COMMAND_PRIORITY_EDITOR),c.registerCommand(h.DELETE_WORD_COMMAND,b=>{const d=h.$getSelection();if(!h.$isRangeSelection(d))return!1;d.deleteWord(b);return!0},h.COMMAND_PRIORITY_EDITOR),
19
- c.registerCommand(h.DELETE_LINE_COMMAND,b=>{const d=h.$getSelection();if(!h.$isRangeSelection(d))return!1;d.deleteLine(b);return!0},h.COMMAND_PRIORITY_EDITOR),c.registerCommand(h.CONTROLLED_TEXT_INSERTION_COMMAND,b=>{const d=h.$getSelection();if("string"===typeof b)h.$isRangeSelection(d)?d.insertText(b):h.DEPRECATED_$isGridSelection(d);else{if(!h.$isRangeSelection(d)&&!h.DEPRECATED_$isGridSelection(d))return!1;const e=b.dataTransfer;null!=e?a.$insertDataTransferForRichText(e,d,c):h.$isRangeSelection(d)&&
20
- (b=b.data)&&d.insertText(b)}return!0},h.COMMAND_PRIORITY_EDITOR),c.registerCommand(h.REMOVE_TEXT_COMMAND,()=>{const b=h.$getSelection();if(!h.$isRangeSelection(b))return!1;b.removeText();return!0},h.COMMAND_PRIORITY_EDITOR),c.registerCommand(h.FORMAT_TEXT_COMMAND,b=>{const d=h.$getSelection();if(!h.$isRangeSelection(d))return!1;d.formatText(b);return!0},h.COMMAND_PRIORITY_EDITOR),c.registerCommand(h.FORMAT_ELEMENT_COMMAND,b=>{var d=h.$getSelection();if(!h.$isRangeSelection(d)&&!h.$isNodeSelection(d))return!1;
21
- d=d.getNodes();for(const e of d)g.$getNearestBlockElementAncestorOrThrow(e).setFormat(b);return!0},h.COMMAND_PRIORITY_EDITOR),c.registerCommand(h.INSERT_LINE_BREAK_COMMAND,b=>{const d=h.$getSelection();if(!h.$isRangeSelection(d))return!1;d.insertLineBreak(b);return!0},h.COMMAND_PRIORITY_EDITOR),c.registerCommand(h.INSERT_PARAGRAPH_COMMAND,()=>{const b=h.$getSelection();if(!h.$isRangeSelection(b))return!1;b.insertParagraph();return!0},h.COMMAND_PRIORITY_EDITOR),c.registerCommand(h.INDENT_CONTENT_COMMAND,
22
- ()=>{D(()=>{c.dispatchCommand(h.CONTROLLED_TEXT_INSERTION_COMMAND,"\t")},b=>{const d=b.getIndent();10!==d&&b.setIndent(d+1)});return!0},h.COMMAND_PRIORITY_EDITOR),c.registerCommand(h.OUTDENT_CONTENT_COMMAND,()=>{D(b=>{h.$isTextNode(b)&&(b=b.getTextContent(),"\t"===b[b.length-1]&&c.dispatchCommand(h.DELETE_CHARACTER_COMMAND,!0))},b=>{const d=b.getIndent();0!==d&&b.setIndent(d-1)});return!0},h.COMMAND_PRIORITY_EDITOR),c.registerCommand(h.KEY_ARROW_UP_COMMAND,b=>{const d=h.$getSelection();return h.$isNodeSelection(d)&&
23
- !E(b.target)&&(b=d.getNodes(),0<b.length)?(b[0].selectPrevious(),!0):!1},h.COMMAND_PRIORITY_EDITOR),c.registerCommand(h.KEY_ARROW_DOWN_COMMAND,()=>{var b=h.$getSelection();return h.$isNodeSelection(b)&&(b=b.getNodes(),0<b.length)?(b[0].selectNext(0,0),!0):!1},h.COMMAND_PRIORITY_EDITOR),c.registerCommand(h.KEY_ARROW_LEFT_COMMAND,b=>{const d=h.$getSelection();if(h.$isNodeSelection(d)){var e=d.getNodes();if(0<e.length)return b.preventDefault(),e[0].selectPrevious(),!0}return h.$isRangeSelection(d)?f.$shouldOverrideDefaultCharacterSelection(d,
24
- !0)?(e=b.shiftKey,b.preventDefault(),f.$moveCharacter(d,e,!0),!0):!1:!1},h.COMMAND_PRIORITY_EDITOR),c.registerCommand(h.KEY_ARROW_RIGHT_COMMAND,b=>{const d=h.$getSelection();if(h.$isNodeSelection(d)&&!E(b.target)){var e=d.getNodes();if(0<e.length)return b.preventDefault(),e[0].selectNext(0,0),!0}if(!h.$isRangeSelection(d))return!1;e=b.shiftKey;return f.$shouldOverrideDefaultCharacterSelection(d,!1)?(b.preventDefault(),f.$moveCharacter(d,e,!1),!0):!1},h.COMMAND_PRIORITY_EDITOR),c.registerCommand(h.KEY_BACKSPACE_COMMAND,
25
- b=>{if(E(b.target))return!1;const d=h.$getSelection();if(!h.$isRangeSelection(d))return!1;b.preventDefault();({anchor:b}=d);const e=b.getNode();return d.isCollapsed()&&0===b.offset&&!h.$isRootNode(e)&&0<g.$getNearestBlockElementAncestorOrThrow(e).getIndent()?c.dispatchCommand(h.OUTDENT_CONTENT_COMMAND,void 0):c.dispatchCommand(h.DELETE_CHARACTER_COMMAND,!0)},h.COMMAND_PRIORITY_EDITOR),c.registerCommand(h.KEY_DELETE_COMMAND,b=>{if(E(b.target))return!1;const d=h.$getSelection();if(!h.$isRangeSelection(d))return!1;
26
- b.preventDefault();return c.dispatchCommand(h.DELETE_CHARACTER_COMMAND,!1)},h.COMMAND_PRIORITY_EDITOR),c.registerCommand(h.KEY_ENTER_COMMAND,b=>{const d=h.$getSelection();if(!h.$isRangeSelection(d))return!1;if(null!==b){if((q||p)&&n)return!1;b.preventDefault();if(b.shiftKey)return c.dispatchCommand(h.INSERT_LINE_BREAK_COMMAND,!1)}return c.dispatchCommand(h.INSERT_PARAGRAPH_COMMAND,void 0)},h.COMMAND_PRIORITY_EDITOR),c.registerCommand(h.KEY_TAB_COMMAND,b=>{const d=h.$getSelection();if(!h.$isRangeSelection(d))return!1;
27
- b.preventDefault();return c.dispatchCommand(b.shiftKey?h.OUTDENT_CONTENT_COMMAND:h.INDENT_CONTENT_COMMAND,void 0)},h.COMMAND_PRIORITY_EDITOR),c.registerCommand(h.KEY_ESCAPE_COMMAND,()=>{const b=h.$getSelection();if(!h.$isRangeSelection(b))return!1;c.blur();return!0},h.COMMAND_PRIORITY_EDITOR),c.registerCommand(h.DROP_COMMAND,b=>{const d=h.$getSelection();if(!h.$isRangeSelection(d))return!1;b.preventDefault();return!0},h.COMMAND_PRIORITY_EDITOR),c.registerCommand(h.DRAGSTART_COMMAND,b=>{const d=h.$getSelection();
28
- if(!h.$isRangeSelection(d))return!1;b.preventDefault();return!0},h.COMMAND_PRIORITY_EDITOR),c.registerCommand(h.COPY_COMMAND,b=>{a.copyToClipboard__EXPERIMENTAL(c,b instanceof ClipboardEvent?b:null);return!0},h.COMMAND_PRIORITY_EDITOR),c.registerCommand(h.CUT_COMMAND,b=>{C(b,c);return!0},h.COMMAND_PRIORITY_EDITOR),c.registerCommand(h.PASTE_COMMAND,b=>{const d=h.$getSelection();return h.$isRangeSelection(d)||h.DEPRECATED_$isGridSelection(d)?(B(b,c),!0):!1},h.COMMAND_PRIORITY_EDITOR))}
7
+ 'use strict';var a=require("@lexical/clipboard"),g=require("@lexical/selection"),h=require("@lexical/utils"),k=require("lexical");let l="undefined"!==typeof window&&"undefined"!==typeof window.document&&"undefined"!==typeof window.document.createElement,q=l&&"documentMode"in document?document.documentMode:null;l&&/Mac|iPod|iPhone|iPad/.test(navigator.platform);l&&/^(?!.*Seamonkey)(?=.*Firefox).*/i.test(navigator.userAgent);
8
+ let r=l&&"InputEvent"in window&&!q?"getTargetRanges"in new window.InputEvent("input"):!1,t=l&&/Version\/[\d.]+.*Safari/.test(navigator.userAgent),u=l&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream,v=k.createCommand("DRAG_DROP_PASTE_FILE");
9
+ class w extends k.ElementNode{static getType(){return"quote"}static clone(c){return new w(c.__key)}constructor(c){super(c)}createDOM(c){let b=document.createElement("blockquote");h.addClassNamesToElement(b,c.theme.quote);return b}updateDOM(){return!1}static importDOM(){return{blockquote:()=>({conversion:x,priority:0})}}static importJSON(c){let b=y();b.setFormat(c.format);b.setIndent(c.indent);b.setDirection(c.direction);return b}exportJSON(){return{...super.exportJSON(),type:"quote"}}insertNewAfter(){let c=
10
+ k.$createParagraphNode(),b=this.getDirection();c.setDirection(b);this.insertAfter(c);return c}collapseAtStart(){let c=k.$createParagraphNode();this.getChildren().forEach(b=>c.append(b));this.replace(c);return!0}}function y(){return new w}
11
+ class z extends k.ElementNode{static getType(){return"heading"}static clone(c){return new z(c.__tag,c.__key)}constructor(c,b){super(b);this.__tag=c}getTag(){return this.__tag}createDOM(c){let b=this.__tag,d=document.createElement(b);c=c.theme.heading;void 0!==c&&h.addClassNamesToElement(d,c[b]);return d}updateDOM(){return!1}static importDOM(){return{h1:()=>({conversion:A,priority:0}),h2:()=>({conversion:A,priority:0}),h3:()=>({conversion:A,priority:0}),h4:()=>({conversion:A,priority:0}),h5:()=>({conversion:A,
12
+ priority:0}),h6:()=>({conversion:A,priority:0}),p:c=>{c=c.firstChild;return null!==c&&B(c)?{conversion:()=>({node:null}),priority:3}:null},span:c=>B(c)?{conversion:()=>({node:C("h1")}),priority:3}:null}}static importJSON(c){let b=C(c.tag);b.setFormat(c.format);b.setIndent(c.indent);b.setDirection(c.direction);return b}exportJSON(){return{...super.exportJSON(),tag:this.getTag(),type:"heading",version:1}}insertNewAfter(){let c=k.$createParagraphNode(),b=this.getDirection();c.setDirection(b);this.insertAfter(c);
13
+ return c}collapseAtStart(){let c=k.$createParagraphNode();this.getChildren().forEach(b=>c.append(b));this.replace(c);return!0}extractWithChild(){return!0}}function B(c){return"span"===c.nodeName.toLowerCase()?"26pt"===c.style.fontSize:!1}function A(c){c=c.nodeName.toLowerCase();let b=null;if("h1"===c||"h2"===c||"h3"===c||"h4"===c||"h5"===c||"h6"===c)b=C(c);return{node:b}}function x(){return{node:y()}}function C(c){return new z(c)}
14
+ function D(c,b){c.preventDefault();b.update(()=>{let d=k.$getSelection(),e=c instanceof InputEvent||c instanceof KeyboardEvent?null:c.clipboardData;null!=e&&(k.$isRangeSelection(d)||k.DEPRECATED_$isGridSelection(d))&&a.$insertDataTransferForRichText(e,d,b)},{tag:"paste"})}
15
+ async function E(c,b){null!=b.getEditorState().read(()=>k.$getSelection())&&(await a.copyToClipboard__EXPERIMENTAL(b,c instanceof ClipboardEvent?c:null),b.update(()=>{let d=k.$getSelection();k.$isRangeSelection(d)?d.removeText():k.$isNodeSelection(d)&&d.getNodes().forEach(e=>e.remove())}))}function F(c){let b=null;c instanceof DragEvent?b=c.dataTransfer:c instanceof ClipboardEvent&&(b=c.clipboardData);return null===b?[!1,[]]:[b.types.includes("Files"),Array.from(b.files)]}
16
+ function G(c,b){var d=k.$getSelection();if(k.$isRangeSelection(d)){var e=new Set;d=d.getNodes();for(let m=0;m<d.length;m++){let n=d[m];var f=n.getKey();e.has(f)||(e.add(f),f=h.$getNearestBlockElementAncestorOrThrow(n),f.canInsertTab()?c(n):f.canIndent()&&b(f))}}}function H(c){c=k.$getNearestNodeFromDOMNode(c);return k.$isDecoratorNode(c)}exports.$createHeadingNode=C;exports.$createQuoteNode=y;exports.$isHeadingNode=function(c){return c instanceof z};
17
+ exports.$isQuoteNode=function(c){return c instanceof w};exports.DRAG_DROP_PASTE=v;exports.HeadingNode=z;exports.QuoteNode=w;exports.eventFiles=F;
18
+ exports.registerRichText=function(c){return h.mergeRegister(c.registerCommand(k.CLICK_COMMAND,()=>{const b=k.$getSelection();return k.$isNodeSelection(b)?(b.clear(),!0):!1},0),c.registerCommand(k.DELETE_CHARACTER_COMMAND,b=>{const d=k.$getSelection();if(!k.$isRangeSelection(d))return!1;d.deleteCharacter(b);return!0},k.COMMAND_PRIORITY_EDITOR),c.registerCommand(k.DELETE_WORD_COMMAND,b=>{const d=k.$getSelection();if(!k.$isRangeSelection(d))return!1;d.deleteWord(b);return!0},k.COMMAND_PRIORITY_EDITOR),
19
+ c.registerCommand(k.DELETE_LINE_COMMAND,b=>{const d=k.$getSelection();if(!k.$isRangeSelection(d))return!1;d.deleteLine(b);return!0},k.COMMAND_PRIORITY_EDITOR),c.registerCommand(k.CONTROLLED_TEXT_INSERTION_COMMAND,b=>{const d=k.$getSelection();if("string"===typeof b)k.$isRangeSelection(d)?d.insertText(b):k.DEPRECATED_$isGridSelection(d);else{if(!k.$isRangeSelection(d)&&!k.DEPRECATED_$isGridSelection(d))return!1;const e=b.dataTransfer;null!=e?a.$insertDataTransferForRichText(e,d,c):k.$isRangeSelection(d)&&
20
+ (b=b.data)&&d.insertText(b)}return!0},k.COMMAND_PRIORITY_EDITOR),c.registerCommand(k.REMOVE_TEXT_COMMAND,()=>{const b=k.$getSelection();if(!k.$isRangeSelection(b))return!1;b.removeText();return!0},k.COMMAND_PRIORITY_EDITOR),c.registerCommand(k.FORMAT_TEXT_COMMAND,b=>{const d=k.$getSelection();if(!k.$isRangeSelection(d))return!1;d.formatText(b);return!0},k.COMMAND_PRIORITY_EDITOR),c.registerCommand(k.FORMAT_ELEMENT_COMMAND,b=>{var d=k.$getSelection();if(!k.$isRangeSelection(d)&&!k.$isNodeSelection(d))return!1;
21
+ d=d.getNodes();for(const e of d)h.$getNearestBlockElementAncestorOrThrow(e).setFormat(b);return!0},k.COMMAND_PRIORITY_EDITOR),c.registerCommand(k.INSERT_LINE_BREAK_COMMAND,b=>{const d=k.$getSelection();if(!k.$isRangeSelection(d))return!1;d.insertLineBreak(b);return!0},k.COMMAND_PRIORITY_EDITOR),c.registerCommand(k.INSERT_PARAGRAPH_COMMAND,()=>{const b=k.$getSelection();if(!k.$isRangeSelection(b))return!1;b.insertParagraph();return!0},k.COMMAND_PRIORITY_EDITOR),c.registerCommand(k.INDENT_CONTENT_COMMAND,
22
+ ()=>{G(()=>{c.dispatchCommand(k.CONTROLLED_TEXT_INSERTION_COMMAND,"\t")},b=>{const d=b.getIndent();10!==d&&b.setIndent(d+1)});return!0},k.COMMAND_PRIORITY_EDITOR),c.registerCommand(k.OUTDENT_CONTENT_COMMAND,()=>{G(b=>{k.$isTextNode(b)&&(b=b.getTextContent(),"\t"===b[b.length-1]&&c.dispatchCommand(k.DELETE_CHARACTER_COMMAND,!0))},b=>{const d=b.getIndent();0!==d&&b.setIndent(d-1)});return!0},k.COMMAND_PRIORITY_EDITOR),c.registerCommand(k.KEY_ARROW_UP_COMMAND,b=>{const d=k.$getSelection();return k.$isNodeSelection(d)&&
23
+ !H(b.target)&&(b=d.getNodes(),0<b.length)?(b[0].selectPrevious(),!0):!1},k.COMMAND_PRIORITY_EDITOR),c.registerCommand(k.KEY_ARROW_DOWN_COMMAND,()=>{var b=k.$getSelection();return k.$isNodeSelection(b)&&(b=b.getNodes(),0<b.length)?(b[0].selectNext(0,0),!0):!1},k.COMMAND_PRIORITY_EDITOR),c.registerCommand(k.KEY_ARROW_LEFT_COMMAND,b=>{const d=k.$getSelection();if(k.$isNodeSelection(d)){var e=d.getNodes();if(0<e.length)return b.preventDefault(),e[0].selectPrevious(),!0}return k.$isRangeSelection(d)?g.$shouldOverrideDefaultCharacterSelection(d,
24
+ !0)?(e=b.shiftKey,b.preventDefault(),g.$moveCharacter(d,e,!0),!0):!1:!1},k.COMMAND_PRIORITY_EDITOR),c.registerCommand(k.KEY_ARROW_RIGHT_COMMAND,b=>{const d=k.$getSelection();if(k.$isNodeSelection(d)&&!H(b.target)){var e=d.getNodes();if(0<e.length)return b.preventDefault(),e[0].selectNext(0,0),!0}if(!k.$isRangeSelection(d))return!1;e=b.shiftKey;return g.$shouldOverrideDefaultCharacterSelection(d,!1)?(b.preventDefault(),g.$moveCharacter(d,e,!1),!0):!1},k.COMMAND_PRIORITY_EDITOR),c.registerCommand(k.KEY_BACKSPACE_COMMAND,
25
+ b=>{if(H(b.target))return!1;const d=k.$getSelection();if(!k.$isRangeSelection(d))return!1;b.preventDefault();({anchor:b}=d);const e=b.getNode();return d.isCollapsed()&&0===b.offset&&!k.$isRootNode(e)&&0<h.$getNearestBlockElementAncestorOrThrow(e).getIndent()?c.dispatchCommand(k.OUTDENT_CONTENT_COMMAND,void 0):c.dispatchCommand(k.DELETE_CHARACTER_COMMAND,!0)},k.COMMAND_PRIORITY_EDITOR),c.registerCommand(k.KEY_DELETE_COMMAND,b=>{if(H(b.target))return!1;const d=k.$getSelection();if(!k.$isRangeSelection(d))return!1;
26
+ b.preventDefault();return c.dispatchCommand(k.DELETE_CHARACTER_COMMAND,!1)},k.COMMAND_PRIORITY_EDITOR),c.registerCommand(k.KEY_ENTER_COMMAND,b=>{const d=k.$getSelection();if(!k.$isRangeSelection(d))return!1;if(null!==b){if((u||t)&&r)return!1;b.preventDefault();if(b.shiftKey)return c.dispatchCommand(k.INSERT_LINE_BREAK_COMMAND,!1)}return c.dispatchCommand(k.INSERT_PARAGRAPH_COMMAND,void 0)},k.COMMAND_PRIORITY_EDITOR),c.registerCommand(k.KEY_TAB_COMMAND,b=>{const d=k.$getSelection();if(!k.$isRangeSelection(d))return!1;
27
+ b.preventDefault();return c.dispatchCommand(b.shiftKey?k.OUTDENT_CONTENT_COMMAND:k.INDENT_CONTENT_COMMAND,void 0)},k.COMMAND_PRIORITY_EDITOR),c.registerCommand(k.KEY_ESCAPE_COMMAND,()=>{const b=k.$getSelection();if(!k.$isRangeSelection(b))return!1;c.blur();return!0},k.COMMAND_PRIORITY_EDITOR),c.registerCommand(k.DROP_COMMAND,b=>{const [,d]=F(b);if(0<d.length){var e=b.clientX;var f=b.clientY;e="undefined"!==typeof document.caretRangeFromPoint?document.caretRangeFromPoint(e,f):"undefined"!==document.caretPositionFromPoint?
28
+ document.caretPositionFromPoint(e,f):null;if(null!==e){const {startOffset:m,endOffset:n,startContainer:I,endContainer:J}=e;e=k.$getNearestNodeFromDOMNode(I);f=k.$getNearestNodeFromDOMNode(J);if(null!==e&&null!==f){const p=k.$createRangeSelection();k.$isTextNode(e)?p.anchor.set(e.getKey(),m,"text"):p.anchor.set(e.getParentOrThrow().getKey(),e.getIndexWithinParent()+1,"element");k.$isTextNode(f)?p.focus.set(f.getKey(),n,"text"):p.focus.set(f.getParentOrThrow().getKey(),f.getIndexWithinParent()+1,"element");
29
+ e=k.$normalizeSelection__EXPERIMENTAL(p);k.$setSelection(e)}c.dispatchCommand(v,d)}b.preventDefault();return!0}b=k.$getSelection();return k.$isRangeSelection(b)?!0:!1},k.COMMAND_PRIORITY_EDITOR),c.registerCommand(k.DRAGSTART_COMMAND,b=>{const [d]=F(b),e=k.$getSelection();if(d&&!k.$isRangeSelection(e))return!1;b.preventDefault();return!0},k.COMMAND_PRIORITY_EDITOR),c.registerCommand(k.DRAGOVER_COMMAND,b=>{const [d]=F(b),e=k.$getSelection();if(d&&!k.$isRangeSelection(e))return!1;b.preventDefault();
30
+ return!0},k.COMMAND_PRIORITY_EDITOR),c.registerCommand(k.COPY_COMMAND,b=>{a.copyToClipboard__EXPERIMENTAL(c,b instanceof ClipboardEvent?b:null);return!0},k.COMMAND_PRIORITY_EDITOR),c.registerCommand(k.CUT_COMMAND,b=>{E(b,c);return!0},k.COMMAND_PRIORITY_EDITOR),c.registerCommand(k.PASTE_COMMAND,b=>{var [,d]=F(b);if(null!==d&&0<d.length)return c.dispatchCommand(v,d),!0;d=k.$getSelection();return k.$isRangeSelection(d)||k.DEPRECATED_$isGridSelection(d)?(D(b,c),!0):!1},k.COMMAND_PRIORITY_EDITOR))}
package/index.d.ts CHANGED
@@ -6,13 +6,14 @@
6
6
  * LICENSE file in the root directory of this source tree.
7
7
  *
8
8
  */
9
- import type { DOMConversionMap, EditorConfig, LexicalEditor, LexicalNode, NodeKey, ParagraphNode, SerializedElementNode, Spread } from 'lexical';
9
+ import type { DOMConversionMap, EditorConfig, LexicalCommand, LexicalEditor, LexicalNode, NodeKey, ParagraphNode, PasteCommandType, SerializedElementNode, Spread } from 'lexical';
10
10
  import { ElementNode } from 'lexical';
11
11
  export declare type SerializedHeadingNode = Spread<{
12
12
  tag: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
13
13
  type: 'heading';
14
14
  version: 1;
15
15
  }, SerializedElementNode>;
16
+ export declare const DRAG_DROP_PASTE: LexicalCommand<Array<File>>;
16
17
  export declare type SerializedQuoteNode = Spread<{
17
18
  type: 'quote';
18
19
  version: 1;
@@ -52,4 +53,5 @@ export declare class HeadingNode extends ElementNode {
52
53
  }
53
54
  export declare function $createHeadingNode(headingTag: HeadingTagType): HeadingNode;
54
55
  export declare function $isHeadingNode(node: LexicalNode | null | undefined): node is HeadingNode;
56
+ export declare function eventFiles(event: DragEvent | PasteCommandType): [boolean, Array<File>];
55
57
  export declare function registerRichText(editor: LexicalEditor): () => void;
package/package.json CHANGED
@@ -7,13 +7,13 @@
7
7
  "rich-text"
8
8
  ],
9
9
  "license": "MIT",
10
- "version": "0.5.1-next.1",
10
+ "version": "0.6.0",
11
11
  "main": "LexicalRichText.js",
12
12
  "peerDependencies": {
13
- "lexical": "0.5.1-next.1",
14
- "@lexical/selection": "0.5.1-next.1",
15
- "@lexical/clipboard": "0.5.1-next.1",
16
- "@lexical/utils": "0.5.1-next.1"
13
+ "lexical": "0.6.0",
14
+ "@lexical/selection": "0.6.0",
15
+ "@lexical/clipboard": "0.6.0",
16
+ "@lexical/utils": "0.6.0"
17
17
  },
18
18
  "repository": {
19
19
  "type": "git",