@lexical/plain-text
Version:
This package contains plain text helpers for Lexical.
10 lines (8 loc) • 3.97 kB
JavaScript
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
*/
import{$insertDataTransferForPlainText as e,$getHtmlContent as t}from"@lexical/clipboard";import{DragonExtension as n}from"@lexical/dragon";import{$shouldOverrideDefaultCharacterSelection as r,$moveCharacter as o}from"@lexical/selection";import{mergeRegister as i,objectKlassEquals as a}from"@lexical/utils";import{defineExtension as s,DELETE_CHARACTER_COMMAND as d,$getSelection as m,$isRangeSelection as u,COMMAND_PRIORITY_EDITOR as l,DELETE_WORD_COMMAND as c,DELETE_LINE_COMMAND as g,CONTROLLED_TEXT_INSERTION_COMMAND as f,REMOVE_TEXT_COMMAND as p,INSERT_LINE_BREAK_COMMAND as C,INSERT_PARAGRAPH_COMMAND as v,KEY_ARROW_LEFT_COMMAND as x,KEY_ARROW_RIGHT_COMMAND as w,KEY_BACKSPACE_COMMAND as D,KEY_DELETE_COMMAND as h,KEY_ENTER_COMMAND as T,SELECT_ALL_COMMAND as b,$selectAll as P,COPY_COMMAND as y,CUT_COMMAND as A,PASTE_COMMAND as E,DROP_COMMAND as K,DRAGSTART_COMMAND as M,PASTE_TAG as k}from"lexical";const L="undefined"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement,S=L&&"documentMode"in document?document.documentMode:null,W=L&&/Mac|iPod|iPhone|iPad/.test(navigator.platform),B=!(!L||!("InputEvent"in window)||S)&&"getTargetRanges"in new window.InputEvent("input"),I=L&&/Version\/[\d.]+.*Safari/.test(navigator.userAgent),R=L&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream,V=L&&/^(?=.*Chrome).*/i.test(navigator.userAgent),j=L&&/AppleWebKit\/[\d.]+/.test(navigator.userAgent)&&W&&!V;function q(e,n){n.update(()=>{if(null!==e){const r=a(e,KeyboardEvent)?null:e.clipboardData,o=m();if(null!==o&&!o.isCollapsed()&&null!=r){e.preventDefault();const i=t(n);null!==i&&r.setData("text/html",i),r.setData("text/plain",o.getTextContent())}}})}function z(t){return i(t.registerCommand(d,e=>{const t=m();return!!u(t)&&(t.deleteCharacter(e),!0)},l),t.registerCommand(c,e=>{const t=m();return!!u(t)&&(t.deleteWord(e),!0)},l),t.registerCommand(g,e=>{const t=m();return!!u(t)&&(t.deleteLine(e),!0)},l),t.registerCommand(f,t=>{const n=m();if(!u(n))return!1;if("string"==typeof t)n.insertText(t);else{const r=t.dataTransfer;if(null!=r)e(r,n);else{const e=t.data;e&&n.insertText(e)}}return!0},l),t.registerCommand(p,()=>{const e=m();return!!u(e)&&(e.removeText(),!0)},l),t.registerCommand(C,e=>{const t=m();return!!u(t)&&(t.insertLineBreak(e),!0)},l),t.registerCommand(v,()=>{const e=m();return!!u(e)&&(e.insertLineBreak(),!0)},l),t.registerCommand(x,e=>{const t=m();if(!u(t))return!1;const n=e,i=n.shiftKey;return!!r(t,!0)&&(n.preventDefault(),o(t,i,!0),!0)},l),t.registerCommand(w,e=>{const t=m();if(!u(t))return!1;const n=e,i=n.shiftKey;return!!r(t,!1)&&(n.preventDefault(),o(t,i,!1),!0)},l),t.registerCommand(D,e=>{const n=m();return!!u(n)&&((!R||"ko-KR"!==navigator.language)&&(e.preventDefault(),t.dispatchCommand(d,!0)))},l),t.registerCommand(h,e=>{const n=m();return!!u(n)&&(e.preventDefault(),t.dispatchCommand(d,!1))},l),t.registerCommand(T,e=>{const n=m();if(!u(n))return!1;if(null!==e){if((R||I||j)&&B)return!1;e.preventDefault()}return t.dispatchCommand(C,!1)},l),t.registerCommand(b,()=>(P(),!0),l),t.registerCommand(y,e=>{const n=m();return!!u(n)&&(q(e,t),!0)},l),t.registerCommand(A,e=>{const n=m();return!!u(n)&&(function(e,t){q(e,t),t.update(()=>{const e=m();u(e)&&e.removeText()})}(e,t),!0)},l),t.registerCommand(E,n=>{const r=m();return!!u(r)&&(function(t,n){t.preventDefault(),n.update(()=>{const n=m(),r=a(t,ClipboardEvent)?t.clipboardData:null;null!=r&&u(n)&&e(r,n)},{tag:k})}(n,t),!0)},l),t.registerCommand(K,e=>{const t=m();return!!u(t)&&(e.preventDefault(),!0)},l),t.registerCommand(M,e=>{const t=m();return!!u(t)&&(e.preventDefault(),!0)},l))}const F=s({conflictsWith:["@lexical/rich-text"],dependencies:[n],name:"@lexical/plain-text",register:z});export{F as PlainTextExtension,z as registerPlainText};