text-editor-drcsystems
Version:
Text Editor Made with Love by DRC Systems
8 lines (7 loc) • 7.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.
*/
;var e=require("@lexical/react/LexicalComposerContext"),t=require("@lexical/utils"),n=require("lexical"),a=require("react"),r=require("katex");function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(){return o=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},o.apply(this,arguments)}const l=a.lazy((()=>Promise.resolve().then((function(){return v}))));function u(e){let t=e.getAttribute("data-lexical-equation");const n="true"===e.getAttribute("data-lexical-inline");if(t=atob(t||""),t){return{node:c(t,n)}}return null}class s extends n.DecoratorNode{static getType(){return"equation"}static clone(e){return new s(e.__equation,e.__inline,e.__key)}constructor(e,t,n){super(n),i(this,"__equation",void 0),i(this,"__inline",void 0),this.__equation=e,this.__inline=t??!1}static importJSON(e){return c(e.equation,e.inline)}exportJSON(){return{equation:this.getEquation(),inline:this.__inline,type:"equation",version:1}}createDOM(e){return document.createElement(this.__inline?"span":"div")}exportDOM(){const e=document.createElement(this.__inline?"span":"div"),t=btoa(this.__equation);return e.setAttribute("data-lexical-equation",t),e.setAttribute("data-lexical-inline",`${this.__inline}`),r.render(this.__equation,e,{displayMode:!this.__inline,errorColor:"#cc0000",output:"html",strict:"warn",throwOnError:!1,trust:!1}),{element:e}}static importDOM(){return{div:e=>e.hasAttribute("data-lexical-equation")?{conversion:u,priority:2}:null,span:e=>e.hasAttribute("data-lexical-equation")?{conversion:u,priority:1}:null}}updateDOM(e){return this.__inline!==e.__inline}getTextContent(){return this.__equation}getEquation(){return this.__equation}setEquation(e){this.getWritable().__equation=e}decorate(){return a.createElement(a.Suspense,{fallback:null},a.createElement(l,{equation:this.__equation,inline:this.__inline,nodeKey:this.__key}))}}function c(e="",t=!1){const a=new s(e,t);return n.$applyNodeReplacement(a)}function E(e){return e instanceof s}function m(...e){return e.filter(Boolean).join(" ")}function d({"data-test-id":e,children:t,className:n,onClick:r,disabled:i,small:l,title:u}){return a.createElement("button",o({type:"button",disabled:i,className:m("Button__root",i&&"Button__disabled",l&&"Button__small",n),onClick:r,title:u,"aria-label":u},e&&{"data-test-id":e}),t)}function _({equation:e,inline:t,onClick:n}){const i=a.useRef(null);return a.useEffect((()=>{const n=i.current;null!==n&&r.render(e,n,{displayMode:!t,errorColor:"#cc0000",output:"html",strict:"warn",throwOnError:!1,trust:!1})}),[e,t]),a.createElement(a.Fragment,null,a.createElement("span",{className:"spacer"}," "),a.createElement("span",{role:"button",tabIndex:-1,onClick:n,ref:i}),a.createElement("span",{className:"spacer"}," "))}function p({onConfirm:e,initialEquation:t=""}){const[n,r]=a.useState(t),[i,o]=a.useState(!0),l=a.useCallback((()=>{e(n,i)}),[e,n,i]),u=a.useCallback((()=>{o(!i)}),[o,i]);return a.createElement(a.Fragment,null,a.createElement("div",{className:"KatexEquationAlterer_defaultRow"},"Inline",a.createElement("input",{type:"checkbox",checked:i,onChange:u})),a.createElement("div",{className:"KatexEquationAlterer_defaultRow"},"Equation "),a.createElement("div",{className:"KatexEquationAlterer_centerRow"},i?a.createElement("input",{onChange:e=>{r(e.target.value)},value:n,className:"KatexEquationAlterer_textArea"}):a.createElement("textarea",{onChange:e=>{r(e.target.value)},value:n,className:"KatexEquationAlterer_textArea"})),a.createElement("div",{className:"KatexEquationAlterer_defaultRow"},"Visualization "),a.createElement("div",{className:"KatexEquationAlterer_centerRow"},a.createElement(_,{equation:n,inline:!1,onClick:()=>null})),a.createElement("div",{className:"KatexEquationAlterer_dialogActions"},a.createElement(d,{onClick:l},"Confirm")))}const q=n.createCommand("INSERT_EQUATION_COMMAND");const f=a.createContext(null);function C({children:e,className:t,onClick:n,title:r}){const i=a.useRef(null),o=a.useContext(f);if(null===o)throw new Error("DropDownItem must be used within a DropDown");const{registerItem:l}=o;return a.useEffect((()=>{i&&i.current&&l(i)}),[i,l]),a.createElement("button",{className:t,onClick:n,ref:i,title:r,type:"button"},e)}function g({activeEditor:e,onClose:t}){const n=a.useCallback(((n,a)=>{e.dispatchCommand(q,{equation:n,inline:a}),t()}),[e,t]);return a.createElement(p,{onConfirm:n})}const h={name:"equation",node:s,plugin:function(){const[r]=e.useLexicalComposerContext();return a.useEffect((()=>{if(!r.hasNodes([s]))throw new Error("EquationsPlugins: EquationsNode not registered on editor");return r.registerCommand(q,(e=>{const{equation:a,inline:r}=e,i=c(a,r);return n.$insertNodes([i]),n.$isRootOrShadowRoot(i.getParentOrThrow())&&t.$wrapNodeInElement(i,n.$createParagraphNode).selectEnd(),!0}),n.COMMAND_PRIORITY_EDITOR)}),[r]),null},toolbarInsertAfter:function({activeEditor:e,showModal:t}){return a.createElement(C,{onClick:()=>{t("Insert Equation",(t=>a.createElement(g,{activeEditor:e,onClose:t})))},className:"item"},a.createElement("i",{className:"icon equation"}),a.createElement("span",{className:"text"},"Equation"))},transformer:{dependencies:[s],export:(e,t,n)=>E(e)?`$${e.getEquation()}$`:null,importRegExp:/\$([^$]+?)\$/,regExp:/\$([^$]+?)\$$/,replace:(e,t)=>{const[,n]=t,a=c(n,!0);e.replace(a)},trigger:"$",type:"text-match"}};function N({equation:e,setEquation:t,inline:n,inputRef:r}){const i={equation:e,inputRef:r,onChange:e=>{t(e.target.value)}};return n?a.createElement(x,o({},i,{inputRef:r})):a.createElement(b,o({},i,{inputRef:r}))}function x({equation:e,onChange:t,inputRef:n}){return a.createElement("span",{className:"EquationEditor_inputBackground"},a.createElement("span",{className:"EquationEditor_dollarSign"},"$"),a.createElement("input",{className:"EquationEditor_inlineEditor",value:e,onChange:t,autoFocus:!0,ref:n}),a.createElement("span",{className:"EquationEditor_dollarSign"},"$"))}function b({equation:e,onChange:t,inputRef:n}){return a.createElement("div",{className:"EquationEditor_inputBackground"},a.createElement("span",{className:"EquationEditor_dollarSign"},"$$\n"),a.createElement("textarea",{className:"EquationEditor_blockEditor",value:e,onChange:t,ref:n}),a.createElement("span",{className:"EquationEditor_dollarSign"},"\n$$"))}var v={__proto__:null,default:function({equation:r,inline:i,nodeKey:o}){const[l]=e.useLexicalComposerContext(),[u,s]=a.useState(r),[c,m]=a.useState(!1),d=a.useRef(null),p=a.useCallback((e=>{m(!1),l.update((()=>{const t=n.$getNodeByKey(o);E(t)&&(t.setEquation(u),e&&t.selectNext(0,0))}))}),[l,u,o]);return a.useEffect((()=>{c||u===r||s(r)}),[c,r,u]),a.useEffect((()=>c?t.mergeRegister(l.registerCommand(n.SELECTION_CHANGE_COMMAND,(e=>{const t=document.activeElement;return d.current!==t&&p(),!1}),n.COMMAND_PRIORITY_HIGH),l.registerCommand(n.KEY_ESCAPE_COMMAND,(e=>{const t=document.activeElement;return d.current===t&&(p(!0),!0)}),n.COMMAND_PRIORITY_HIGH)):l.registerUpdateListener((({editorState:e})=>{e.read((()=>{const e=n.$getSelection();return n.$isNodeSelection(e)&&e.has(o)&&1===e.getNodes().length}))&&m(!0)}))),[l,o,p,c]),a.createElement(a.Fragment,null,c?a.createElement(N,{equation:u,setEquation:s,inline:i,inputRef:d}):a.createElement(_,{equation:u,inline:i,onClick:()=>{m(!0)}}))}};exports.$createEquationNode=c,exports.$isEquationNode=E,exports.EquationNode=s,exports.INSERT_EQUATION_COMMAND=q,exports.InsertEquationDialog=function({activeEditor:e,onClose:t}){const n=a.useCallback(((n,a)=>{e.dispatchCommand(q,{equation:n,inline:a}),t()}),[e,t]);return a.createElement(p,{onConfirm:n})},exports.equationExt=h;