@lexical/react
Version:
This package provides Lexical components and hooks for React applications.
10 lines (8 loc) • 1.32 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.
*
*/
;var e=require("@lexical/link"),t=require("@lexical/react/LexicalComposerContext"),r=require("@lexical/utils"),i=require("lexical"),n=require("react");exports.LinkPlugin=function({validateUrl:l,attributes:o}){const[a]=t.useLexicalComposerContext();return n.useEffect((()=>{if(!a.hasNodes([e.LinkNode]))throw new Error("LinkPlugin: LinkNode not registered on editor");return r.mergeRegister(a.registerCommand(e.TOGGLE_LINK_COMMAND,(t=>{if(null===t)return e.$toggleLink(t),!0;if("string"==typeof t)return!(void 0!==l&&!l(t))&&(e.$toggleLink(t,o),!0);{const{url:r,target:i,rel:n,title:l}=t;return e.$toggleLink(r,{...o,rel:n,target:i,title:l}),!0}}),i.COMMAND_PRIORITY_LOW),void 0!==l?a.registerCommand(i.PASTE_COMMAND,(t=>{const n=i.$getSelection();if(!i.$isRangeSelection(n)||n.isCollapsed()||!r.objectKlassEquals(t,ClipboardEvent))return!1;const s=t;if(null===s.clipboardData)return!1;const u=s.clipboardData.getData("text");return!!l(u)&&(!n.getNodes().some((e=>i.$isElementNode(e)))&&(a.dispatchCommand(e.TOGGLE_LINK_COMMAND,{...o,url:u}),t.preventDefault(),!0))}),i.COMMAND_PRIORITY_LOW):()=>{})}),[a,l,o]),null};