/*! mjxgui 2024-03-17 | (C) Hrushikesh Vaidya (@hrushikeshrv) | MIT License */ class Expression{constructor(t=0){this.components=[],this.nestingDepth=t}add(t,a=this.components.length){this.components.splice(a,0,t)}remove(t=this.components.length-1){this.components.splice(t,1)}toLatex(){let t="";for(var a of this.components)t+=a.toLatex()+" ";return t.trim()}}class Block{constructor(t){this.children=[],this.parent=t}toLatex(){if(0===this.children.length)return"";let t="";for(var a of this.children)"string"==typeof a?t+=a:t+=a.toLatex()+" ";return t.trim()}addChild(t,a=this.children.length){this.children.splice(a,0,t)}removeChild(t=this.children.length-1){this.children.splice(t,1)}}class Component{constructor(t=[],a=null){this.blocks=t,this.parent=a}toLatex(){return""}addBlock(t,a){this.blocks.splice(a,0,t)}removeBlock(t){this.blocks.splice(t,1)}isEmpty(){for(var t of this.blocks)if(t.children.length)return!1;return!0}}class OneBlockComponent extends Component{constructor(t){let a=new Block;super([a],t),a.parent=this}}class TwoBlockComponent extends Component{constructor(t){let a=new Block,e=new Block;super([a,e],t),a.parent=this,e.parent=this}}class ThreeBlockComponent extends Component{constructor(t){let a=new Block,e=new Block,s=new Block;super([a,e,s],t),a.parent=this,e.parent=this,s.parent=this}}class TemplateThreeBlockComponent extends ThreeBlockComponent{constructor(t,a){super(t),this.latexData=a}toLatex(){return`\\${this.latexData}_{${this.blocks[0].toLatex()}}^{${this.blocks[1].toLatex()}}{${this.blocks[2].toLatex()}}`}}class TrigonometricTwoBlockComponent extends TwoBlockComponent{constructor(t,a){super(t),this.latexData=a}toLatex(){return`\\${this.latexData}^{${this.blocks[0].toLatex()}}{${this.blocks[1].toLatex()}}`}}class TextComponent extends Component{constructor(t){let a=new Block;super([a],t),a.parent=this}toLatex(){return this.blocks[0].toLatex()}}class MJXGUISymbol extends Component{constructor(t,a){super([],t),this.latexData=a}toLatex(){return this.latexData}}class FrameBox extends OneBlockComponent{toLatex(){return`\\boxed{${this.blocks[0].toLatex()}}`}}class Limit extends TwoBlockComponent{toLatex(){return`\\lim_{${this.blocks[0].toLatex()}}{${this.blocks[1].toLatex()}}`}}class Fraction extends TwoBlockComponent{toLatex(){return`\\frac{${this.blocks[0].toLatex()}}{${this.blocks[1].toLatex()}}`}}class Subscript extends TwoBlockComponent{toLatex(){return`{${this.blocks[0].toLatex()}}_{${this.blocks[1].toLatex()}}`}}class Superscript extends TwoBlockComponent{toLatex(){return`{${this.blocks[0].toLatex()}}^{${this.blocks[1].toLatex()}}`}}class SubSupRight extends ThreeBlockComponent{toLatex(){return`{${this.blocks[0].toLatex()}}_{${this.blocks[1].toLatex()}}^{${this.blocks[2].toLatex()}}`}}class Sqrt extends OneBlockComponent{toLatex(){return`\\sqrt{${this.blocks[0].toLatex()}}`}}class NthRoot extends TwoBlockComponent{toLatex(){return`\\sqrt[${this.blocks[0].toLatex()}]{${this.blocks[1].toLatex()}}`}}const characters=new Set;for(let t of"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@^*()[];:'\"/?.,<>-=+`~")characters.add(t);class Cursor{constructor(t,a){this.expression=t,this.block=null,this.component=null,this.child=-.5,this.position=-.5,this.latex="",this.display=a}addText(t){if(null===this.block){const a=new TextComponent(this.block);a.blocks[0].addChild(t),this.expression.add(a,Math.ceil(this.position)),this.child=-.5,this.position++}else{const e=new TextComponent(this.block);e.blocks[0].addChild(t),this.block.addChild(e,Math.ceil(this.child)),this.child++}}addComponent(t){null===this.block?(this.expression.add(t,Math.ceil(this.position)),this.position=Math.ceil(this.position),t instanceof MJXGUISymbol||t instanceof TextComponent?(this.block=null,this.component=null,this.position+=.5):(this.block=t.blocks[0],this.component=t),this.child=-.5):(this.block.addChild(t,Math.ceil(this.child)),t instanceof MJXGUISymbol||t instanceof TextComponent?this.child+=1:(this.component=t,this.block=t.blocks[0],this.child=-.5))}removeComponent(){if(null===this.block){var t=this.expression.components[Math.floor(this.position)];(t instanceof TextComponent||t instanceof MJXGUISymbol)&&(this.position=Math.floor(this.position),this.component=t,this.block=t.blocks[0],this.child=-.5,this.removeComponent())}else if(null===this.component.parent){for(let t=0;t=a||(null===this.block?(this.position+=.5,this.expression.components[this.position]instanceof TextComponent||this.expression.components[this.position]instanceof MJXGUISymbol?(this.position+=.5,this.child=-.5,this.block=null,this.component=null):(this.component=this.expression.components[this.position],this.block=this.component.blocks[0],this.child=-.5)):this.child===this.block.children.length-.5?(t=this.component.blocks.indexOf(this.block))===this.component.blocks.length-1?null===this.component.parent?(this.component=null,this.block=null,this.child=-.5,this.position+=.5):(this.block=this.component.parent,this.child=this.block.children.indexOf(this.component)+.5,this.component=this.block.parent):(this.block=this.component.blocks[t+1],this.child=-.5):(t=this.block.children[Math.ceil(this.child)])instanceof TextComponent||t instanceof MJXGUISymbol?this.child++:(this.component=t,this.block=this.component.blocks[0],this.child=-.5))}seekLeft(){var t;this.position<=-.5||(null===this.block?(this.position-=.5,this.expression.components[this.position]instanceof TextComponent||this.expression.components[this.position]instanceof MJXGUISymbol?(this.position-=.5,this.child=-.5,this.block=null,this.component=null):(this.component=this.expression.components[this.position],this.block=this.component.blocks[this.component.blocks.length-1],this.child=this.block.children.length-.5)):-.5===this.child?0===(t=this.component.blocks.indexOf(this.block))?null===this.component.parent?(this.component=null,this.block=null,this.child=-.5,this.position-=.5):(this.block=this.component.parent,this.child=this.block.children.indexOf(this.component)-.5,this.component=this.block.parent):(this.block=this.component.blocks[t-1],this.child=this.block.children.length-.5):(t=this.block.children[Math.floor(this.child)])instanceof TextComponent||t instanceof MJXGUISymbol?this.child--:(this.component=t,this.block=this.component.blocks[this.component.blocks.length-1],this.child=this.block.children.length-.5))}backspace(){var t;0!==this.expression.components.length&&-.5!==this.position&&(null===this.block?(t=this.expression.components[Math.floor(this.position)])instanceof TextComponent||t instanceof MJXGUISymbol?this.removeComponent():(this.component=t,this.block=this.component.blocks[this.component.blocks.length-1],this.child=this.block.children.length-.5,this.position=Math.floor(this.position)):this.component.isEmpty()?this.removeComponent():this.child<=-.5?0!==(t=this.component.blocks.indexOf(this.block))&&(this.block=this.component.blocks[t-1],this.child=this.block.children.length-.5):(this.block.removeChild(Math.floor(this.child)),this.child--))}toLatex(){var t=this.expression.toLatex();return this.latex=t}toDisplayLatex(){let t=new TextComponent(this.block);t.blocks[0].addChild("|");let a=new FrameBox(this.block);null===this.block?this.expression.add(t,Math.ceil(this.position)):(e=this.component.blocks.indexOf(this.block),this.component.removeBlock(e),this.component.addBlock(a,e),a.blocks[0]=this.block,this.block.addChild(t,Math.ceil(this.child)));var e,s=this.toLatex();return null===this.block?this.expression.remove(Math.ceil(this.position)):(e=this.component.blocks.indexOf(a),this.component.removeBlock(e),this.component.addBlock(this.block,e),this.block.removeChild(Math.ceil(this.child))),s}updateDisplay(){(this.display instanceof String||"string"==typeof this.display)&&(this.display=document.querySelector(this.display)),MathJax.typesetClear([this.display]),this.display.innerHTML="$$"+this.toDisplayLatex()+"$$",MathJax.typesetPromise([this.display]).then(()=>{})}}const symbolLatexMap={alpha:"\\alpha",beta:"\\beta",gamma:"\\gamma",delta:"\\delta",epsilon:"\\epsilon",zeta:"\\zeta",eta:"\\eta",theta:"\\theta",iota:"\\iota",kappa:"\\kappa",lambda:"\\lambda",mu:"\\mu",nu:"\\nu",xi:"\\xi",omicron:"\\omicron",pi:"\\pi",rho:"\\rho",sigma:"\\sigma",tau:"\\tau",upsilon:"\\upsilon",phi:"\\phi",chi:"\\chi",psi:"\\psi",omega:"\\omega",Alpha:"A",Beta:"B",Gamma:"\\Gamma",Delta:"\\Delta",Epsilon:"E",Zeta:"Z",Eta:"H",Theta:"\\Theta",Iota:"I",Kappa:"K",Lambda:"\\Lambda",Mu:"M",Nu:"N",Xi:"\\Xi",Omicron:"O",Pi:"\\Pi",Rho:"P",Sigma:"\\Sigma",Tau:"T",Upsilon:"\\Upsilon",Phi:"\\Phi",Chi:"X",Psi:"\\Psi",Omega:"\\Omega",times:"\\times",div:"\\div",centerdot:"\\cdot",plusmn:"\\pm",mnplus:"\\mp",starf:"\\star",bigcup:"\\bigcup",bigcap:"\\bigcap",cup:"\\cup",cap:"\\cap",lt:"\\lt",gt:"\\gt",leq:"\\leq",GreaterEqual:"\\geq",equals:"=",approx:"\\approx",NotEqual:"\\ne",sub:"\\subset",sup:"\\supset",sube:"\\subseteq",supe:"\\supseteq",nsub:"\\not\\subset",nsup:"\\not\\supset",nsube:"\\not\\subseteq",nsupe:"\\not\\supseteq",propto:"\\propto",parallel:"\\parallel",npar:"\\nparallel",asympeq:"\\asymp",isin:"\\in",notin:"\\notin",exist:"\\exists",nexist:"\\nexists",perp:"\\perp",angle:"\\angle",angmsd:"\\measuredangle",Leftarrow:"\\Leftarrow",Rightarrow:"\\Rightarrow",Leftrightarrow:"\\Leftrightarrow",rightarrow:"\\to",leftarrow:"\\gets",leftrightarrow:"\\leftrightarrow",longrightarrow:"\\longrightarrow",longleftarrow:"\\longleftarrow",longleftrightarrow:"\\longleftrightarrow",uparrow:"\\uparrow",downarrow:"\\downarrow",updownarrow:"\\updownarrow",PartialD:"\\partial",hbar:"\\hbar",real:"\\Re",nabla:"\\nabla",infin:"\\infty"},functionComponentMap={lim:Limit,sqrt:Sqrt,nsqrt:NthRoot,sub:Subscript,sup:Superscript,subsup:SubSupRight,frac:Fraction};class MJXGUI{constructor(t,a=function(t,a){},e={}){this.selector=t,this.elements=document.querySelectorAll(t),this.options=e,this.mathDelimiter=this.options.mathDelimiter||"$$",this.successCallback=a,this.eqnHistory=[],this.expression=new Expression,this.isMobileDevice="ontouchstart"in document.documentElement,this.pseudoMobileKeyboard=null,this.showUI=()=>{this.editorWindow.style.display="block",this.editorWindow.dataset.visible="true"},this.hideUI=()=>{this.editorWindow.removeAttribute("style"),this.editorWindow.dataset.visible="false"},(this.elements instanceof String||"string"==typeof this.elements)&&(this.elements=document.querySelectorAll(this.elements)),this.constructUI(),this.cursor=new Cursor(this.expression,this.eqnDisplay),this.elements.forEach(t=>{t.addEventListener("click",this.showUI)}),document.addEventListener("keydown",t=>{"false"!==this.editorWindow.dataset.visible&&(MathJax.typesetClear([this.eqnDisplay]),this.cursor.keyPress(t),this.eqnDisplay.innerHTML=this.mathDelimiter+this.cursor.toDisplayLatex()+this.mathDelimiter,MathJax.typesetPromise([this.eqnDisplay]).then(()=>{}))});const s=this.editorWindow.querySelectorAll(".mjxgui-operator, .mjxgui-greek-letter"),i=this.editorWindow.querySelectorAll(".mjxgui-function");s.forEach(a=>{a.addEventListener("click",()=>{var t;a.dataset.latexData in symbolLatexMap&&(t=new MJXGUISymbol(this.cursor.block,symbolLatexMap[a.dataset.latexData]),this.cursor.addComponent(t),this.cursor.updateDisplay())})}),i.forEach(a=>{a.addEventListener("click",()=>{let t;"null"!==a.dataset.templateType?"three"===a.dataset.templateType?t=new TemplateThreeBlockComponent(this.cursor.block,a.dataset.latexData):"trigonometric"===a.dataset.templateType&&(t=new TrigonometricTwoBlockComponent(this.cursor.block,a.dataset.latexData)):t=new functionComponentMap[a.dataset.functionId](this.cursor.block),this.cursor.addComponent(t),this.cursor.updateDisplay()})})}constructUI(){const t=document.createElement("div");t.classList.add("_mjxgui_editor_window"),t.dataset.visible="false",t.innerHTML='
α Letters
± Symbols
Σ Functions
Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω
× ÷ · ± < > =
Σ Π limsincostancscseccotarcsinarccosarctan
',"dark"===this.options.theme?.toLowerCase().trim()&&t.classList.add("_mjxgui_dark_theme"),this.editorWindow=t,this.eqnDisplay=t.querySelector("._mjxgui_editor_display"),this.eqnDisplay.innerHTML=`${this.mathDelimiter} | ${this.mathDelimiter}`,this.pseudoMobileKeyboard=t.querySelector(".mjxgui-pseudo-mobile-keyboard");const a=t.querySelectorAll(".mjxgui_tab_container"),e=t.querySelectorAll(".mjxgui_tab"),s=t.querySelector(".leftArrowButton"),i=t.querySelector(".rightArrowButton");s.addEventListener("click",()=>{this.cursor.seekLeft(),this.cursor.updateDisplay()}),i.addEventListener("click",()=>{this.cursor.seekRight(),this.cursor.updateDisplay()}),a.forEach(a=>{a.addEventListener("click",function(){e.forEach(t=>{t.dataset.tab===a.dataset.tab?t.style.display="flex":t.removeAttribute("style")})})}),a[0].classList.add("_mjxgui_active_tab"),a.forEach(t=>{t.addEventListener("click",()=>{a.forEach(t=>{t.classList.remove("_mjxgui_active_tab")}),t.classList.add("_mjxgui_active_tab")})});const n=t.querySelector(".mjxgui_close_button_svg");n.addEventListener("click",this.hideUI);const o=t.querySelector("._mjxgui_clear_equation");o.addEventListener("click",()=>{this.clearEquation()});const l=t.querySelector("._mjxgui_save_equation");l.addEventListener("click",()=>{this.successCallback(this.getLatex(),this),this.hideUI(),this.clearEquation()}),document.body.appendChild(t)}clearEquation(){this.eqnHistory.push(this.expression),this.expression=new Expression,this.cursor.expression=this.expression,this.cursor.block=null,this.cursor.component=null,this.cursor.child=-.5,this.cursor.position=-.5,this.cursor.latex="",this.cursor.updateDisplay()}getLatex(){return this.cursor.toLatex()}rebindListeners(){this.elements.forEach(t=>{t.removeEventListener("click",this.showUI)}),this.elements=document.querySelectorAll(this.selector),this.elements.forEach(t=>{t.addEventListener("click",this.showUI)})}registerFunction(t,a,e="",s=!1){const i=document.createElement("span");i.classList.add("mjxgui-btn","mjxgui-function"),i.title=e,i.dataset.templateType="user-defined",i.dataset.functionId="user-defined",i.innerHTML=a,this.editorWindow.querySelector("._mjxgui_functions_tab").appendChild(i),s&&MathJax.typesetPromise([i]).then(()=>{}),i.addEventListener("click",()=>{this.cursor.addComponent(new t),this.cursor.updateDisplay()})}registerSymbol(a,t,e="",s=!1){const i=document.createElement("span");i.classList.add("mjxgui-btn","mjxgui-symbol"),i.title=e,i.dataset.latexData=a,i.innerHTML=t,this.editorWindow.querySelector("._mjxgui_symbols_tab").appendChild(i),s&&MathJax.typesetPromise([i]).then(()=>{}),i.addEventListener("click",()=>{var t=new MJXGUISymbol(this.cursor.block,a);this.cursor.addComponent(t),this.cursor.updateDisplay()})}static createEquationInput(t,a={}){var s=document.querySelectorAll(t);for(let t=0;t
',e.insertAdjacentElement("afterend",i);const n=i.querySelector("._mjxgui_equation_input"),o=i.querySelector("._mjxgui_insert_equation_button"),l=i.querySelector("._mjxgui_equation_input_preview");o.id=`_mjxgui_insert_equation_button_${t}`;const r=new MJXGUI(`#_mjxgui_insert_equation_button_${t}`,function(){},a);r.successCallback=function(t,a){0{}),o.textContent="Edit"):(e.value="",MathJax.typesetClear([l]),l.innerHTML="",o.textContent="Add Equation"),e.validity.valid?(n.classList.remove("_mjxgui_equation_input_invalid"),n.classList.add("_mjxgui_equation_input_valid")):(n.classList.add("_mjxgui_equation_input_invalid"),n.classList.remove("_mjxgui_equation_input_valid"))}}}}