@sciexpr/vue 0.2.0 → 0.2.1
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.
- package/dist/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +253 -241
- package/dist/index.mjs.map +1 -1
- package/dist/style.css +1 -1
- package/package.json +5 -4
package/dist/index.cjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),_=require("@sciexpr/renderer"),$=require("@sciexpr/parser"),S=require("@sciexpr/ai"),q=require("@sciexpr/core");function z(t){const a=e.ref(""),n=e.ref(""),c=e.ref(""),i=e.ref(null),m=new $.ParserRegistry,s=t.katexRenderer??new _.KatexRenderer,o=new _.UnicodeRenderer,r=new _.MathMLRenderer;function u(l){var p;try{const x=m.parse(l,{hint:"auto"});if(!x||x.children.length===0){a.value="",i.value=null;return}const y=s.render(x,{displayMode:t.displayMode,...t.renderOptions});a.value=y.value,(p=y.warnings)!=null&&p.length,n.value=r.render(x).value,c.value=o.render(x).value,i.value=null}catch(x){i.value={message:x instanceof Error?x.message:String(x)},a.value=""}}return e.watch(t.source,l=>{u(l)},{immediate:!0}),{html:a,mathml:n,unicode:c,error:i,render:u}}function I(t){const a=e.ref(""),n=e.ref(null),c=e.shallowRef(null),i=new $.ParserRegistry,m=new _.KatexRenderer;function s(o){var r;try{const u=i.parse(o,{hint:"auto"});if(c.value=u,!u||u.children.length===0){a.value="",n.value=null;return}const l=m.render(u,{displayMode:((r=t.displayMode)==null?void 0:r.value)??!1});a.value=l.value,n.value=null}catch(u){n.value={message:u instanceof Error?u.message:String(u)},a.value=o}}return e.watch([t.source,t.displayMode??e.ref(!1)],([o])=>{s(o)},{immediate:!0}),{html:a,error:n,ast:c,render:s}}const H=["data-source"],K=["title"],U=["innerHTML"],G=e.defineComponent({__name:"Formula",props:{source:{default:""},displayMode:{type:Boolean,default:!1},throwOnError:{type:Boolean,default:!1},className:{default:""},fallbackText:{default:""}},setup(t){var o,r,u;const a=t,n=e.useSlots(),c=(u=(r=(o=n.default)==null?void 0:o.call(n))==null?void 0:r[0])==null?void 0:u.children,i=e.ref(a.source||c||""),{html:m,error:s}=I({source:i,displayMode:e.ref(a.displayMode)});return(l,p)=>(e.openBlock(),e.createElementBlock("span",{class:e.normalizeClass(["sciexpr-formula",a.className,{"sciexpr-display":a.displayMode,"sciexpr-error":e.unref(s)}]),"data-source":i.value},[e.unref(s)?(e.openBlock(),e.createElementBlock("span",{key:0,class:"sciexpr-formula-error",title:e.unref(s).message},e.toDisplayString(t.fallbackText||i.value),9,K)):(e.openBlock(),e.createElementBlock("span",{key:1,innerHTML:e.unref(m),class:"sciexpr-formula-content"},null,8,U))],10,H))}}),C=(t,a)=>{const n=t.__vccOpts||t;for(const[c,i]of a)n[c]=i;return n},W=C(G,[["__scopeId","data-v-b2381271"]]);function T(t){const a=e.ref(t.initialValue??""),n=e.ref(0),c=e.ref(""),i=e.ref(null),m=e.ref(null),s=new $.ParserRegistry;function o(y,g){a.value=y,g!==void 0&&(n.value=g)}function r(y){const g=a.value.slice(0,n.value),E=a.value.slice(n.value);a.value=g+y+E,n.value+=y.length}function u(y,g){const E=a.value;a.value=y+E+g,n.value=a.value.length}function l(){try{const y=s.parse(a.value,{hint:"auto"});return m.value=y,y}catch{return m.value=null,null}}const p=e.computed(()=>a.value.trim().length===0),x=e.computed(()=>a.value);return{value:a,cursor:n,html:c,ast:m,error:i,isEmpty:p,latexSource:x,handleInput:o,insertText:r,wrapSelection:u,parse:l}}function V(t){const a=e.ref([]),n=e.ref(!1),c=e.ref(0),i=e.ref(""),m=t.pipeline??new S.AIPipeline,s=t.config??{enabled:!0,minTriggerLength:2,maxItems:10};async function o(p,x){if(!s.enabled){n.value=!1;return}const y=Z(p,x);if(!y||y.length<(s.minTriggerLength??2)){n.value=!1;return}i.value=y;const g={currentInput:p,cursorPosition:x,expressionType:q.ExpressionKind.Math},E=await m.getCompletions(g);a.value=E.items.slice(0,s.maxItems??10),n.value=a.value.length>0,c.value=0}function r(p){return n.value=!1,p.text}function u(p){p==="up"?c.value=Math.max(0,c.value-1):c.value=Math.min(a.value.length-1,c.value+1)}function l(){n.value=!1,a.value=[]}return{suggestions:a,visible:n,selectedIndex:c,query:i,trigger:o,select:r,moveSelection:u,close:l}}function Z(t,a){const n=t.slice(0,a),c=n.lastIndexOf("\\");if(c!==-1){const s=n.slice(c).match(/^\\[a-zA-Z]*$/);if(s)return s[0]}const i=n.match(/([a-zA-Z_]+)$/);return i?i[1]:""}const N=Symbol("sciexpr-ai-pipeline");function R(t){const a=t?new S.AIPipeline(t):e.inject(N,null);function n(m){const s=new S.AIPipeline(m);e.provide(N,s)}function c(m){a&&e.provide(N,new S.AIPipeline({completionProvider:m}))}function i(m){a&&e.provide(N,new S.AIPipeline({knowledgeBaseProvider:m}))}return{pipeline:a,provideAI:n,setCompletionProvider:c,setKnowledgeBase:i}}const X={key:0,class:"sciexpr-toolbar-group-label"},j=["title","disabled","onClick"],Y=e.defineComponent({__name:"Toolbar",props:{categories:{},disabled:{type:Boolean},compact:{type:Boolean}},emits:["insert"],setup(t,{emit:a}){const n=a,c=[{id:"fraction",label:"Fraction & Script",icon:"📐",commands:[{latex:"\\frac{}{}",label:"⅟",description:"Fraction"},{latex:"^{}",label:"x²",description:"Superscript"},{latex:"_{}",label:"x₂",description:"Subscript"},{latex:"^{}_{}",label:"x²₁",description:"Both scripts"}]},{id:"radical",label:"Radicals",icon:"√",commands:[{latex:"\\sqrt{}",label:"√x",description:"Square root"},{latex:"\\sqrt[3]{}",label:"∛x",description:"Cube root"},{latex:"\\sqrt[n]{}",label:"ⁿ√x",description:"Nth root"}]},{id:"symbol",label:"Operators",icon:"∑",commands:[{latex:"\\sum_{}^{}",label:"∑",description:"Summation"},{latex:"\\prod_{}^{}",label:"∏",description:"Product"},{latex:"\\int_{}^{}",label:"∫",description:"Integral"},{latex:"\\lim_{x \\to }{}",label:"lim",description:"Limit"},{latex:"\\infty",label:"∞",description:"Infinity"},{latex:"\\partial",label:"∂",description:"Partial derivative"}]},{id:"greek",label:"Greek",icon:"α",commands:[{latex:"\\alpha",label:"α",description:"Alpha"},{latex:"\\beta",label:"β",description:"Beta"},{latex:"\\gamma",label:"γ",description:"Gamma"},{latex:"\\delta",label:"δ",description:"Delta"},{latex:"\\theta",label:"θ",description:"Theta"},{latex:"\\lambda",label:"λ",description:"Lambda"},{latex:"\\mu",label:"μ",description:"Mu"},{latex:"\\pi",label:"π",description:"Pi"},{latex:"\\sigma",label:"σ",description:"Sigma"},{latex:"\\phi",label:"φ",description:"Phi"},{latex:"\\omega",label:"ω",description:"Omega"}]},{id:"matrix",label:"Matrix",icon:"▦",commands:[{latex:"\\begin{pmatrix} & \\\\ & \\end{pmatrix}",label:"( )",description:"pmatrix"},{latex:"\\begin{bmatrix} & \\\\ & \\end{bmatrix}",label:"[ ]",description:"bmatrix"},{latex:"\\begin{vmatrix} & \\\\ & \\end{vmatrix}",label:"| |",description:"vmatrix"}]},{id:"chemistry",label:"Chemistry",icon:"⚗",commands:[{latex:"\\ce{H2O}",label:"H₂O",description:"Water"},{latex:"\\ce{->}",label:"→",description:"Reaction arrow"},{latex:"\\ce{<=>}",label:"⇌",description:"Equilibrium"},{latex:"^{n+}",label:"ⁿ⁺",description:"Charge"}]}];function i(m){n("insert",m)}return(m,s)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["sciexpr-toolbar",{"sciexpr-toolbar-compact":t.compact}]),role:"toolbar","aria-label":"Formula toolbar"},[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(c,o=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:o.id},[!t.categories||t.categories.includes(o.id)?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["sciexpr-toolbar-group",{"sciexpr-toolbar-group-compact":t.compact}])},[t.compact?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",X,e.toDisplayString(o.icon)+" "+e.toDisplayString(o.label),1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.commands,r=>(e.openBlock(),e.createElementBlock("button",{key:r.latex,class:e.normalizeClass(["sciexpr-toolbar-btn",{"sciexpr-toolbar-btn-compact":t.compact}]),title:r.description,disabled:t.disabled,type:"button",onClick:u=>i(r.latex)},[e.renderSlot(m.$slots,`btn-${r.label}`,{command:r},()=>[e.createTextVNode(e.toDisplayString(r.label),1)],!0)],10,j))),128))],2)):e.createCommentVNode("",!0)],64))),64))],2))}}),D=C(Y,[["__scopeId","data-v-329eccb9"]]),Q={key:0,class:"sciexpr-preview-error"},J={key:1,class:"sciexpr-preview-render"},ee=["innerHTML"],te={key:2,class:"sciexpr-preview-empty"},oe={key:3,class:"sciexpr-preview-source"},le=e.defineComponent({__name:"LivePreview",props:{source:{},displayMode:{type:Boolean,default:!1},showSource:{type:Boolean,default:!1}},setup(t){const a=t,n=e.ref(a.source),c=e.ref(a.displayMode);e.watch(()=>a.source,s=>{n.value=s}),e.watch(()=>a.displayMode,s=>{c.value=s});const{html:i,error:m}=I({source:n,displayMode:c});return(s,o)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["sciexpr-preview",{"sciexpr-preview-display":t.displayMode}])},[e.unref(m)?(e.openBlock(),e.createElementBlock("div",Q,[o[0]||(o[0]=e.createElementVNode("span",{class:"sciexpr-preview-error-icon"},"⚠",-1)),e.createElementVNode("span",null,e.toDisplayString(e.unref(m).message),1)])):e.unref(i)?(e.openBlock(),e.createElementBlock("div",J,[e.createElementVNode("span",{innerHTML:e.unref(i)},null,8,ee)])):(e.openBlock(),e.createElementBlock("div",te,[...o[1]||(o[1]=[e.createElementVNode("span",{class:"sciexpr-preview-empty-text"},"Preview",-1)])])),t.showSource&&t.source?(e.openBlock(),e.createElementBlock("div",oe,[e.createElementVNode("code",null,e.toDisplayString(t.source),1)])):e.createCommentVNode("",!0)],2))}}),F=C(le,[["__scopeId","data-v-b3730bc4"]]),ae=["aria-selected","onClick","onMouseenter"],ne={class:"sciexpr-autocomplete-label"},ce={key:0,class:"sciexpr-autocomplete-desc"},re={key:1,class:"sciexpr-autocomplete-source"},ie=e.defineComponent({__name:"AutocompleteDropdown",props:{items:{},visible:{type:Boolean},selectedIndex:{},position:{}},emits:["select","close"],setup(t,{emit:a}){const n=a,c=e.inject(N,null);function i(s){n("select",s)}function m(s){return{symbol:"#0d6efd",command:"#6f42c1",template:"#198754",correction:"#fd7e14",formula:"#d63384"}[s]??"#6c757d"}return(s,o)=>(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[t.visible&&t.items.length>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"sciexpr-autocomplete",style:e.normalizeStyle(t.position?{top:t.position.top+"px",left:t.position.left+"px"}:{}),role:"listbox"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,(r,u)=>(e.openBlock(),e.createElementBlock("div",{key:`${r.text}-${u}`,class:e.normalizeClass(["sciexpr-autocomplete-item",{selected:u===t.selectedIndex}]),role:"option","aria-selected":u===t.selectedIndex,onClick:l=>i(r),onMouseenter:l=>s.$emit("select",r)},[e.createElementVNode("span",{class:"sciexpr-autocomplete-category",style:e.normalizeStyle({background:m(r.category)})},e.toDisplayString(r.category),5),e.createElementVNode("span",ne,e.toDisplayString(r.label),1),r.description?(e.openBlock(),e.createElementBlock("span",ce,e.toDisplayString(r.description),1)):e.createCommentVNode("",!0),e.unref(c)?(e.openBlock(),e.createElementBlock("span",re,e.toDisplayString(r.previewHtml?"AI":""),1)):e.createCommentVNode("",!0)],42,ae))),128))],4)):e.createCommentVNode("",!0)]))}}),A=C(ie,[["__scopeId","data-v-d18e03d1"]]),se={class:"sciexpr-editor-input-wrap"},me=["placeholder","readonly","rows"],ue=e.defineComponent({__name:"FormulaEditor",props:{value:{default:""},displayMode:{type:Boolean,default:!1},readonly:{type:Boolean,default:!1},placeholder:{default:"Type LaTeX or chemical formula..."},toolbar:{},autocomplete:{},showPreview:{type:Boolean,default:!0},showToolbar:{type:Boolean,default:!0},rows:{default:3}},emits:["update:value","change","error"],setup(t,{emit:a}){const n=t,c=a,i=e.ref(null),m=e.ref(null),s=e.ref({top:0,left:0}),o=e.ref(n.value);e.watch(()=>n.value,d=>{o.value=d});const r=T({initialValue:o.value}),{pipeline:u}=R(),l=V({config:n.autocomplete,pipeline:u});function p(d){const b=d.target,f=b.value,v=b.selectionStart;o.value=f,r.value.value=f,r.cursor.value=v,c("update:value",f),c("change",f),l.trigger(f,v),P()}function x(d){if(l.visible.value){if(d.key==="ArrowDown"){d.preventDefault(),l.moveSelection("down");return}if(d.key==="ArrowUp"){d.preventDefault(),l.moveSelection("up");return}if(d.key==="Enter"||d.key==="Tab"){d.preventDefault();const b=l.suggestions.value[l.selectedIndex.value];b&&L(b.text);return}if(d.key==="Escape"){l.close();return}}(d.ctrlKey||d.metaKey)&&(d.key==="b"&&(d.preventDefault(),O("\\mathbf{","}")),d.key==="/"&&(d.preventDefault(),E("\\frac{}{}")))}function y(d){E(d)}function g(d){L(d.text)}function E(d){const b=i.value;if(!b)return;const f=b.selectionStart,v=b.selectionEnd,h=o.value.slice(0,f),w=o.value.slice(v);o.value=h+d+w,c("update:value",o.value),e.nextTick(()=>{b.focus();const k=f+d.length;b.setSelectionRange(k,k),l.close()})}function L(d){const b=i.value;if(!b)return;const f=b.selectionStart,v=o.value.slice(0,f),h=v.lastIndexOf("\\");let w;if(h!==-1&&f-h<30)w=h;else{const B=v.match(/([a-zA-Z_]+)$/);w=B?f-B[0].length:f}const k=o.value.slice(f);o.value=o.value.slice(0,w)+d+k,c("update:value",o.value),e.nextTick(()=>{b.focus();const B=w+d.length;b.setSelectionRange(B,B),l.close()})}function O(d,b){const f=i.value;if(!f)return;const v=f.selectionStart,h=f.selectionEnd,w=o.value.slice(v,h)||"",k=o.value.slice(0,v)+d+w+b+o.value.slice(h);o.value=k,c("update:value",k),e.nextTick(()=>{f.focus();const B=v+d.length+w.length;f.setSelectionRange(B,B)})}function P(){const d=i.value;if(!d)return;const b=d.getBoundingClientRect(),f=d.selectionStart,v=20,h=8,k=o.value.slice(0,f).split(`
|
|
2
|
-
`),B=k[k.length-1].length;s.value={top:b.top+k.length*v+24+window.scrollY,left:b.left+B*h+window.scrollX}}return e.computed(()=>o.value.trim().length>0),(d,b)=>{var f;return e.openBlock(),e.createElementBlock("div",{ref_key:"editorRef",ref:m,class:e.normalizeClass(["sciexpr-editor",{"sciexpr-editor-display":t.displayMode}])},[t.showToolbar&&!t.readonly?(e.openBlock(),e.createBlock(D,{key:0,categories:(f=t.toolbar)==null?void 0:f.categories,onInsert:y},null,8,["categories"])):e.createCommentVNode("",!0),e.createElementVNode("div",se,[e.withDirectives(e.createElementVNode("textarea",{ref_key:"textareaRef",ref:i,"onUpdate:modelValue":b[0]||(b[0]=v=>o.value=v),class:e.normalizeClass(["sciexpr-editor-textarea",{"sciexpr-editor-textarea-display":t.displayMode,"sciexpr-editor-textarea-readonly":t.readonly}]),placeholder:t.placeholder,readonly:t.readonly,rows:t.rows,"aria-label":"Formula input",spellcheck:"false",autocomplete:"off",autocorrect:"off",autocapitalize:"off",onInput:p,onKeydown:x,onFocus:P},null,42,me),[[e.vModelText,o.value]])]),e.createVNode(A,{items:e.unref(l).suggestions.value,visible:e.unref(l).visible.value,"selected-index":e.unref(l).selectedIndex.value,position:s.value,onSelect:g,onClose:b[1]||(b[1]=v=>e.unref(l).close())},null,8,["items","visible","selected-index","position"]),t.showPreview?(e.openBlock(),e.createBlock(F,{key:1,source:o.value,"display-mode":t.displayMode,"show-source":!1},null,8,["source","display-mode"])):e.createCommentVNode("",!0)],2)}}}),de=C(ue,[["__scopeId","data-v-d6181c80"]]),pe={class:"sciexpr-symbol-panel"},be={class:"sciexpr-symbol-search"},fe={class:"sciexpr-symbol-tabs"},xe=["onClick"],ye={class:"sciexpr-symbol-grid"},ve=["title","disabled","onClick"],ke={class:"sciexpr-symbol-unicode"},ge={class:"sciexpr-symbol-name"},he=["title","disabled","onClick"],we={class:"sciexpr-symbol-unicode"},Be={class:"sciexpr-symbol-name"},Ee=e.defineComponent({__name:"SymbolPanel",props:{disabled:{type:Boolean}},emits:["insert"],setup(t,{emit:a}){const n=a,c=[{id:"greek-lower",label:"Greek Lowercase",symbols:[{latex:"\\alpha",unicode:"α",name:"alpha"},{latex:"\\beta",unicode:"β",name:"beta"},{latex:"\\gamma",unicode:"γ",name:"gamma"},{latex:"\\delta",unicode:"δ",name:"delta"},{latex:"\\epsilon",unicode:"ε",name:"epsilon"},{latex:"\\zeta",unicode:"ζ",name:"zeta"},{latex:"\\eta",unicode:"η",name:"eta"},{latex:"\\theta",unicode:"θ",name:"theta"},{latex:"\\iota",unicode:"ι",name:"iota"},{latex:"\\kappa",unicode:"κ",name:"kappa"},{latex:"\\lambda",unicode:"λ",name:"lambda"},{latex:"\\mu",unicode:"μ",name:"mu"},{latex:"\\nu",unicode:"ν",name:"nu"},{latex:"\\xi",unicode:"ξ",name:"xi"},{latex:"\\pi",unicode:"π",name:"pi"},{latex:"\\rho",unicode:"ρ",name:"rho"},{latex:"\\sigma",unicode:"σ",name:"sigma"},{latex:"\\tau",unicode:"τ",name:"tau"},{latex:"\\phi",unicode:"φ",name:"phi"},{latex:"\\chi",unicode:"χ",name:"chi"},{latex:"\\psi",unicode:"ψ",name:"psi"},{latex:"\\omega",unicode:"ω",name:"omega"}]},{id:"greek-upper",label:"Greek Uppercase",symbols:[{latex:"\\Gamma",unicode:"Γ",name:"Gamma"},{latex:"\\Delta",unicode:"Δ",name:"Delta"},{latex:"\\Theta",unicode:"Θ",name:"Theta"},{latex:"\\Lambda",unicode:"Λ",name:"Lambda"},{latex:"\\Xi",unicode:"Ξ",name:"Xi"},{latex:"\\Pi",unicode:"Π",name:"Pi"},{latex:"\\Sigma",unicode:"Σ",name:"Sigma"},{latex:"\\Upsilon",unicode:"Υ",name:"Upsilon"},{latex:"\\Phi",unicode:"Φ",name:"Phi"},{latex:"\\Psi",unicode:"Ψ",name:"Psi"},{latex:"\\Omega",unicode:"Ω",name:"Omega"}]},{id:"operators",label:"Operators & Relations",symbols:[{latex:"\\times",unicode:"×",name:"times"},{latex:"\\div",unicode:"÷",name:"divide"},{latex:"\\cdot",unicode:"·",name:"dot"},{latex:"\\pm",unicode:"±",name:"plus-minus"},{latex:"\\mp",unicode:"∓",name:"minus-plus"},{latex:"\\leq",unicode:"≤",name:"leq"},{latex:"\\geq",unicode:"≥",name:"geq"},{latex:"\\neq",unicode:"≠",name:"neq"},{latex:"\\approx",unicode:"≈",name:"approx"},{latex:"\\equiv",unicode:"≡",name:"equiv"},{latex:"\\sim",unicode:"∼",name:"sim"},{latex:"\\propto",unicode:"∝",name:"propto"},{latex:"\\ll",unicode:"≪",name:"ll"},{latex:"\\gg",unicode:"≫",name:"gg"}]},{id:"arrows",label:"Arrows",symbols:[{latex:"\\to",unicode:"→",name:"to"},{latex:"\\rightarrow",unicode:"→",name:"rightarrow"},{latex:"\\leftarrow",unicode:"←",name:"leftarrow"},{latex:"\\Rightarrow",unicode:"⇒",name:"Rightarrow"},{latex:"\\Leftarrow",unicode:"⇐",name:"Leftarrow"},{latex:"\\Leftrightarrow",unicode:"⇔",name:"Leftrightarrow"},{latex:"\\mapsto",unicode:"↦",name:"mapsto"},{latex:"\\uparrow",unicode:"↑",name:"uparrow"},{latex:"\\downarrow",unicode:"↓",name:"downarrow"}]},{id:"misc",label:"Misc",symbols:[{latex:"\\infty",unicode:"∞",name:"infinity"},{latex:"\\partial",unicode:"∂",name:"partial"},{latex:"\\nabla",unicode:"∇",name:"nabla"},{latex:"\\forall",unicode:"∀",name:"forall"},{latex:"\\exists",unicode:"∃",name:"exists"},{latex:"\\emptyset",unicode:"∅",name:"emptyset"},{latex:"\\neg",unicode:"¬",name:"neg"},{latex:"\\angle",unicode:"∠",name:"angle"},{latex:"\\triangle",unicode:"△",name:"triangle"},{latex:"\\square",unicode:"□",name:"square"},{latex:"\\circ",unicode:"∘",name:"circle"},{latex:"\\star",unicode:"★",name:"star"}]},{id:"chemistry",label:"Chemistry",symbols:[{latex:"\\ce{H2O}",unicode:"H₂O",name:"Water"},{latex:"\\ce{CO2}",unicode:"CO₂",name:"Carbon dioxide"},{latex:"\\ce{->}",unicode:"→",name:"Arrow right"},{latex:"\\ce{<-}",unicode:"←",name:"Arrow left"},{latex:"\\ce{<=>}",unicode:"⇌",name:"Equilibrium"},{latex:"\\ce{<->}",unicode:"⇄",name:"Resonance"},{latex:"\\ce{->[H2O]}",unicode:"→[H₂O]",name:"With condition"}]}],i=e.ref(c[0].id),m=e.ref(""),s=e.computed(()=>{if(!m.value)return c;const r=m.value.toLowerCase();return c.map(u=>({...u,symbols:u.symbols.filter(l=>l.name.toLowerCase().includes(r)||l.latex.toLowerCase().includes(r))})).filter(u=>u.symbols.length>0)});function o(r){n("insert",r)}return(r,u)=>(e.openBlock(),e.createElementBlock("div",pe,[e.createElementVNode("div",be,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":u[0]||(u[0]=l=>m.value=l),type:"text",class:"sciexpr-symbol-search-input",placeholder:"Search symbols..."},null,512),[[e.vModelText,m.value]])]),e.createElementVNode("div",fe,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(c,l=>e.createElementVNode("button",{key:l.id,class:e.normalizeClass(["sciexpr-symbol-tab",{active:i.value===l.id}]),onClick:p=>i.value=l.id,type:"button"},e.toDisplayString(l.label),11,xe)),64))]),e.createElementVNode("div",ye,[m.value?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(s.value,l=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:l.id},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.symbols,p=>(e.openBlock(),e.createElementBlock("button",{key:p.latex,class:e.normalizeClass(["sciexpr-symbol-btn",{"sciexpr-symbol-btn-disabled":t.disabled}]),title:`${p.name} — ${p.latex}`,disabled:t.disabled,type:"button",onClick:x=>o(p.latex)},[e.createElementVNode("span",ke,e.toDisplayString(p.unicode),1),e.createElementVNode("span",ge,e.toDisplayString(p.name),1)],10,ve))),128))],64))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},e.renderList(c,l=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:l.id},[i.value===l.id?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(l.symbols,p=>(e.openBlock(),e.createElementBlock("button",{key:p.latex,class:e.normalizeClass(["sciexpr-symbol-btn",{"sciexpr-symbol-btn-disabled":t.disabled}]),title:`${p.name} — ${p.latex}`,disabled:t.disabled,type:"button",onClick:x=>o(p.latex)},[e.createElementVNode("span",we,e.toDisplayString(p.unicode),1),e.createElementVNode("span",Be,e.toDisplayString(p.name),1)],10,he))),128)):e.createCommentVNode("",!0)],64))),64))])]))}}),Ce=C(Ee,[["__scopeId","data-v-8a9ec119"]]),Ne={class:"sciexpr-element-grid"},Se=["title","disabled","onClick"],_e={key:0,class:"sciexpr-element-number"},$e={key:1,class:"sciexpr-element-symbol"},M=18,Ie=6,Le=e.defineComponent({__name:"ElementTable",props:{disabled:{type:Boolean},compact:{type:Boolean}},emits:["insert"],setup(t,{emit:a}){const n=a,c=[{symbol:"H",name:"Hydrogen",atomicNumber:1,row:1,col:1,block:"s"},{symbol:"He",name:"Helium",atomicNumber:2,row:1,col:18,block:"s"},{symbol:"Li",name:"Lithium",atomicNumber:3,row:2,col:1,block:"s"},{symbol:"Be",name:"Beryllium",atomicNumber:4,row:2,col:2,block:"s"},{symbol:"B",name:"Boron",atomicNumber:5,row:2,col:13,block:"p"},{symbol:"C",name:"Carbon",atomicNumber:6,row:2,col:14,block:"p"},{symbol:"N",name:"Nitrogen",atomicNumber:7,row:2,col:15,block:"p"},{symbol:"O",name:"Oxygen",atomicNumber:8,row:2,col:16,block:"p"},{symbol:"F",name:"Fluorine",atomicNumber:9,row:2,col:17,block:"p"},{symbol:"Ne",name:"Neon",atomicNumber:10,row:2,col:18,block:"p"},{symbol:"Na",name:"Sodium",atomicNumber:11,row:3,col:1,block:"s"},{symbol:"Mg",name:"Magnesium",atomicNumber:12,row:3,col:2,block:"s"},{symbol:"Al",name:"Aluminium",atomicNumber:13,row:3,col:13,block:"p"},{symbol:"Si",name:"Silicon",atomicNumber:14,row:3,col:14,block:"p"},{symbol:"P",name:"Phosphorus",atomicNumber:15,row:3,col:15,block:"p"},{symbol:"S",name:"Sulfur",atomicNumber:16,row:3,col:16,block:"p"},{symbol:"Cl",name:"Chlorine",atomicNumber:17,row:3,col:17,block:"p"},{symbol:"Ar",name:"Argon",atomicNumber:18,row:3,col:18,block:"p"},{symbol:"K",name:"Potassium",atomicNumber:19,row:4,col:1,block:"s"},{symbol:"Ca",name:"Calcium",atomicNumber:20,row:4,col:2,block:"s"},{symbol:"Cr",name:"Chromium",atomicNumber:24,row:4,col:6,block:"d"},{symbol:"Mn",name:"Manganese",atomicNumber:25,row:4,col:7,block:"d"},{symbol:"Fe",name:"Iron",atomicNumber:26,row:4,col:8,block:"d"},{symbol:"Co",name:"Cobalt",atomicNumber:27,row:4,col:9,block:"d"},{symbol:"Ni",name:"Nickel",atomicNumber:28,row:4,col:10,block:"d"},{symbol:"Cu",name:"Copper",atomicNumber:29,row:4,col:11,block:"d"},{symbol:"Zn",name:"Zinc",atomicNumber:30,row:4,col:12,block:"d"},{symbol:"Br",name:"Bromine",atomicNumber:35,row:4,col:17,block:"p"},{symbol:"Ag",name:"Silver",atomicNumber:47,row:5,col:11,block:"d"},{symbol:"Au",name:"Gold",atomicNumber:79,row:5,col:11,block:"d"},{symbol:"Hg",name:"Mercury",atomicNumber:80,row:5,col:12,block:"d"},{symbol:"I",name:"Iodine",atomicNumber:53,row:5,col:17,block:"p"},{symbol:"Pt",name:"Platinum",atomicNumber:78,row:6,col:10,block:"d"},{symbol:"Pb",name:"Lead",atomicNumber:82,row:6,col:14,block:"p"}],i=e.computed(()=>{const o=[];for(let r=0;r<Ie;r++)o.push(new Array(M).fill(null));for(const r of c)o[r.row-1][r.col-1]=r;return o});function m(o){return{s:"#ff6b6b",p:"#ffd93d",d:"#6bcb77",f:"#4d96ff"}[o]??"#adb5bd"}function s(o){n("insert",o)}return(o,r)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["sciexpr-element-table",{"sciexpr-element-table-compact":t.compact}])},[r[0]||(r[0]=e.createStaticVNode('<div class="sciexpr-element-legend" data-v-a5437c7c><span class="legend-item" data-v-a5437c7c><span class="legend-dot" style="background:#ff6b6b;" data-v-a5437c7c></span> s-block</span><span class="legend-item" data-v-a5437c7c><span class="legend-dot" style="background:#ffd93d;" data-v-a5437c7c></span> p-block</span><span class="legend-item" data-v-a5437c7c><span class="legend-dot" style="background:#6bcb77;" data-v-a5437c7c></span> d-block</span><span class="legend-item" data-v-a5437c7c><span class="legend-dot" style="background:#4d96ff;" data-v-a5437c7c></span> f-block</span></div>',1)),e.createElementVNode("div",Ne,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,u=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:i.value.indexOf(u)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u,(l,p)=>e.withDirectives((e.openBlock(),e.createElementBlock("button",{key:p,class:e.normalizeClass(["sciexpr-element-cell",{"sciexpr-element-cell-compact":t.compact,"sciexpr-element-cell-disabled":t.disabled}]),style:e.normalizeStyle(l?{gridRow:l.row,gridColumn:l.col,"--block-color":m(l.block)}:{}),title:l?`${l.name} (${l.atomicNumber})`:"",disabled:t.disabled,type:"button",onClick:x=>l&&s(l.symbol)},[l?(e.openBlock(),e.createElementBlock("span",_e,e.toDisplayString(l.atomicNumber),1)):e.createCommentVNode("",!0),l?(e.openBlock(),e.createElementBlock("span",$e,e.toDisplayString(l.symbol),1)):e.createCommentVNode("",!0)],14,Se)),[[e.vShow,l!==null]])),128)),(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(M,l=>e.withDirectives(e.createElementVNode("div",{key:"empty-"+l,class:"sciexpr-element-cell sciexpr-element-empty",style:e.normalizeStyle({gridRow:i.value.indexOf(u)+1,gridColumn:l})},null,4),[[e.vShow,!u[l-1]]])),64))],64))),128))])],2))}}),Pe=C(Le,[["__scopeId","data-v-a5437c7c"]]);function Me(t){function a(n){for(const c of t){const i=n.key.toLowerCase()===c.key.toLowerCase(),m=!!c.ctrl===(n.ctrlKey||n.metaKey),s=!!c.shift===n.shiftKey,o=!!c.alt===n.altKey;if(i&&m&&s&&o){n.preventDefault(),c.action();return}}}e.onMounted(()=>{window.addEventListener("keydown",a)}),e.onUnmounted(()=>{window.removeEventListener("keydown",a)})}const Te=[{key:"b",ctrl:!0,action:()=>{},description:"Bold (\\mathbf{})"},{key:"/",ctrl:!0,action:()=>{},description:"Fraction (\\frac{}{})"},{key:"s",ctrl:!0,shift:!0,action:()=>{},description:"Square root (\\sqrt{})"},{key:"1",ctrl:!0,action:()=>{},description:"Subscript (_)"},{key:"2",ctrl:!0,action:()=>{},description:"Superscript (^)"}];exports.AI_PIPELINE_KEY=N;exports.AutocompleteDropdown=A;exports.BUILTIN_SHORTCUTS=Te;exports.ElementTable=Pe;exports.Formula=W;exports.FormulaEditor=de;exports.FormulaToolbar=D;exports.LivePreview=F;exports.SymbolPanel=Ce;exports.useAIProvider=R;exports.useAutocomplete=V;exports.useFormula=I;exports.useFormulaEditor=T;exports.useFormulaRender=z;exports.useShortcuts=Me;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),_=require("@sciexpr/renderer"),$=require("@sciexpr/parser"),S=require("@sciexpr/ai"),q=require("@sciexpr/core");function z(t){const l=e.ref(""),n=e.ref(""),c=e.ref(""),i=e.ref(null),s=new $.ParserRegistry,u=t.katexRenderer??new _.KatexRenderer,a=new _.UnicodeRenderer,r=new _.MathMLRenderer;function m(o){var p;try{const x=s.parse(o,{hint:"auto"});if(!x||x.children.length===0){l.value="",i.value=null;return}const y=u.render(x,{displayMode:t.displayMode,...t.renderOptions});l.value=y.value,(p=y.warnings)!=null&&p.length,n.value=r.render(x).value,c.value=a.render(x).value,i.value=null}catch(x){i.value={message:x instanceof Error?x.message:String(x)},l.value=""}}return e.watch(t.source,o=>{m(o)},{immediate:!0}),u.ready.then(()=>{m(t.source.value)}),{html:l,mathml:n,unicode:c,error:i,render:m}}function I(t){const l=e.ref(""),n=e.ref(null),c=e.shallowRef(null),i=new $.ParserRegistry,s=new _.KatexRenderer;function u(a){var r;try{const m=i.parse(a,{hint:"auto"});if(c.value=m,!m||m.children.length===0){l.value="",n.value=null;return}const o=s.render(m,{displayMode:((r=t.displayMode)==null?void 0:r.value)??!1});l.value=o.value,n.value=null}catch(m){n.value={message:m instanceof Error?m.message:String(m)},l.value=a}}return e.watch([t.source,t.displayMode??e.ref(!1)],([a])=>{u(a)},{immediate:!0}),s.ready.then(()=>{u(t.source.value)}),{html:l,error:n,ast:c,render:u}}const H=["data-source"],K=["title"],U=["innerHTML"],G=e.defineComponent({__name:"Formula",props:{source:{default:""},displayMode:{type:Boolean,default:!1},throwOnError:{type:Boolean,default:!1},className:{default:""},fallbackText:{default:""}},setup(t){var r,m,o;const l=t,n=e.useSlots(),c=(o=(m=(r=n.default)==null?void 0:r.call(n))==null?void 0:m[0])==null?void 0:o.children,i=e.ref(l.source||c||"");e.watch(()=>l.source,p=>{i.value=p||c||""});const s=e.ref(l.displayMode);e.watch(()=>l.displayMode,p=>{s.value=p});const{html:u,error:a}=I({source:i,displayMode:s});return(p,x)=>(e.openBlock(),e.createElementBlock("span",{class:e.normalizeClass(["sciexpr-formula",l.className,{"sciexpr-display":l.displayMode,"sciexpr-error":e.unref(a)}]),"data-source":i.value},[e.unref(a)?(e.openBlock(),e.createElementBlock("span",{key:0,class:"sciexpr-formula-error",title:e.unref(a).message},e.toDisplayString(t.fallbackText||i.value),9,K)):(e.openBlock(),e.createElementBlock("span",{key:1,innerHTML:e.unref(u),class:"sciexpr-formula-content"},null,8,U))],10,H))}}),C=(t,l)=>{const n=t.__vccOpts||t;for(const[c,i]of l)n[c]=i;return n},W=C(G,[["__scopeId","data-v-557e5ff9"]]);function T(t){const l=e.ref(t.initialValue??""),n=e.ref(0),c=e.ref(""),i=e.ref(null),s=e.ref(null),u=new $.ParserRegistry;function a(y,g){l.value=y,g!==void 0&&(n.value=g)}function r(y){const g=l.value.slice(0,n.value),E=l.value.slice(n.value);l.value=g+y+E,n.value+=y.length}function m(y,g){const E=l.value;l.value=y+E+g,n.value=l.value.length}function o(){try{const y=u.parse(l.value,{hint:"auto"});return s.value=y,y}catch{return s.value=null,null}}const p=e.computed(()=>l.value.trim().length===0),x=e.computed(()=>l.value);return{value:l,cursor:n,html:c,ast:s,error:i,isEmpty:p,latexSource:x,handleInput:a,insertText:r,wrapSelection:m,parse:o}}function V(t){const l=e.ref([]),n=e.ref(!1),c=e.ref(0),i=e.ref(""),s=t.pipeline??new S.AIPipeline,u=t.config??{enabled:!0,minTriggerLength:2,maxItems:10};async function a(p,x){if(!u.enabled){n.value=!1;return}const y=Z(p,x);if(!y||y.length<(u.minTriggerLength??2)){n.value=!1;return}i.value=y;const g={currentInput:p,cursorPosition:x,expressionType:q.ExpressionKind.Math},E=await s.getCompletions(g);l.value=E.items.slice(0,u.maxItems??10),n.value=l.value.length>0,c.value=0}function r(p){return n.value=!1,p.text}function m(p){p==="up"?c.value=Math.max(0,c.value-1):c.value=Math.min(l.value.length-1,c.value+1)}function o(){n.value=!1,l.value=[]}return{suggestions:l,visible:n,selectedIndex:c,query:i,trigger:a,select:r,moveSelection:m,close:o}}function Z(t,l){const n=t.slice(0,l),c=n.lastIndexOf("\\");if(c!==-1){const u=n.slice(c).match(/^\\[a-zA-Z]*$/);if(u)return u[0]}const i=n.match(/([a-zA-Z_]+)$/);return i?i[1]:""}const N=Symbol("sciexpr-ai-pipeline");function R(t){const l=t?new S.AIPipeline(t):e.inject(N,null);function n(s){const u=new S.AIPipeline(s);e.provide(N,u)}function c(s){l&&e.provide(N,new S.AIPipeline({completionProvider:s}))}function i(s){l&&e.provide(N,new S.AIPipeline({knowledgeBaseProvider:s}))}return{pipeline:l,provideAI:n,setCompletionProvider:c,setKnowledgeBase:i}}const X={key:0,class:"sciexpr-toolbar-group-label"},j=["title","disabled","onClick"],Y=e.defineComponent({__name:"Toolbar",props:{categories:{},disabled:{type:Boolean},compact:{type:Boolean}},emits:["insert"],setup(t,{emit:l}){const n=l,c=[{id:"fraction",label:"Fraction & Script",icon:"📐",commands:[{latex:"\\frac{}{}",label:"⅟",description:"Fraction"},{latex:"^{}",label:"x²",description:"Superscript"},{latex:"_{}",label:"x₂",description:"Subscript"},{latex:"^{}_{}",label:"x²₁",description:"Both scripts"}]},{id:"radical",label:"Radicals",icon:"√",commands:[{latex:"\\sqrt{}",label:"√x",description:"Square root"},{latex:"\\sqrt[3]{}",label:"∛x",description:"Cube root"},{latex:"\\sqrt[n]{}",label:"ⁿ√x",description:"Nth root"}]},{id:"symbol",label:"Operators",icon:"∑",commands:[{latex:"\\sum_{}^{}",label:"∑",description:"Summation"},{latex:"\\prod_{}^{}",label:"∏",description:"Product"},{latex:"\\int_{}^{}",label:"∫",description:"Integral"},{latex:"\\lim_{x \\to }{}",label:"lim",description:"Limit"},{latex:"\\infty",label:"∞",description:"Infinity"},{latex:"\\partial",label:"∂",description:"Partial derivative"}]},{id:"greek",label:"Greek",icon:"α",commands:[{latex:"\\alpha",label:"α",description:"Alpha"},{latex:"\\beta",label:"β",description:"Beta"},{latex:"\\gamma",label:"γ",description:"Gamma"},{latex:"\\delta",label:"δ",description:"Delta"},{latex:"\\theta",label:"θ",description:"Theta"},{latex:"\\lambda",label:"λ",description:"Lambda"},{latex:"\\mu",label:"μ",description:"Mu"},{latex:"\\pi",label:"π",description:"Pi"},{latex:"\\sigma",label:"σ",description:"Sigma"},{latex:"\\phi",label:"φ",description:"Phi"},{latex:"\\omega",label:"ω",description:"Omega"}]},{id:"matrix",label:"Matrix",icon:"▦",commands:[{latex:"\\begin{pmatrix} & \\\\ & \\end{pmatrix}",label:"( )",description:"pmatrix"},{latex:"\\begin{bmatrix} & \\\\ & \\end{bmatrix}",label:"[ ]",description:"bmatrix"},{latex:"\\begin{vmatrix} & \\\\ & \\end{vmatrix}",label:"| |",description:"vmatrix"}]},{id:"chemistry",label:"Chemistry",icon:"⚗",commands:[{latex:"\\ce{H2O}",label:"H₂O",description:"Water"},{latex:"\\ce{->}",label:"→",description:"Reaction arrow"},{latex:"\\ce{<=>}",label:"⇌",description:"Equilibrium"},{latex:"^{n+}",label:"ⁿ⁺",description:"Charge"}]}];function i(s){n("insert",s)}return(s,u)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["sciexpr-toolbar",{"sciexpr-toolbar-compact":t.compact}]),role:"toolbar","aria-label":"Formula toolbar"},[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(c,a=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:a.id},[!t.categories||t.categories.includes(a.id)?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["sciexpr-toolbar-group",{"sciexpr-toolbar-group-compact":t.compact}])},[t.compact?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",X,e.toDisplayString(a.icon)+" "+e.toDisplayString(a.label),1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.commands,r=>(e.openBlock(),e.createElementBlock("button",{key:r.latex,class:e.normalizeClass(["sciexpr-toolbar-btn",{"sciexpr-toolbar-btn-compact":t.compact}]),title:r.description,disabled:t.disabled,type:"button",onClick:m=>i(r.latex)},[e.renderSlot(s.$slots,`btn-${r.label}`,{command:r},()=>[e.createTextVNode(e.toDisplayString(r.label),1)],!0)],10,j))),128))],2)):e.createCommentVNode("",!0)],64))),64))],2))}}),D=C(Y,[["__scopeId","data-v-329eccb9"]]),Q={key:0,class:"sciexpr-preview-error"},J={key:1,class:"sciexpr-preview-render"},ee=["innerHTML"],te={key:2,class:"sciexpr-preview-empty"},oe={key:3,class:"sciexpr-preview-source"},ae=e.defineComponent({__name:"LivePreview",props:{source:{},displayMode:{type:Boolean,default:!1},showSource:{type:Boolean,default:!1}},setup(t){const l=t,n=e.ref(l.source),c=e.ref(l.displayMode);e.watch(()=>l.source,u=>{n.value=u}),e.watch(()=>l.displayMode,u=>{c.value=u});const{html:i,error:s}=I({source:n,displayMode:c});return(u,a)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["sciexpr-preview",{"sciexpr-preview-display":t.displayMode}])},[e.unref(s)?(e.openBlock(),e.createElementBlock("div",Q,[a[0]||(a[0]=e.createElementVNode("span",{class:"sciexpr-preview-error-icon"},"⚠",-1)),e.createElementVNode("span",null,e.toDisplayString(e.unref(s).message),1)])):e.unref(i)?(e.openBlock(),e.createElementBlock("div",J,[e.createElementVNode("span",{innerHTML:e.unref(i)},null,8,ee)])):(e.openBlock(),e.createElementBlock("div",te,[...a[1]||(a[1]=[e.createElementVNode("span",{class:"sciexpr-preview-empty-text"},"Preview",-1)])])),t.showSource&&t.source?(e.openBlock(),e.createElementBlock("div",oe,[e.createElementVNode("code",null,e.toDisplayString(t.source),1)])):e.createCommentVNode("",!0)],2))}}),F=C(ae,[["__scopeId","data-v-b3730bc4"]]),le=["aria-selected","onClick","onMouseenter"],ne={class:"sciexpr-autocomplete-label"},ce={key:0,class:"sciexpr-autocomplete-desc"},re={key:1,class:"sciexpr-autocomplete-source"},ie=e.defineComponent({__name:"AutocompleteDropdown",props:{items:{},visible:{type:Boolean},selectedIndex:{},position:{}},emits:["select","close"],setup(t,{emit:l}){const n=l,c=e.inject(N,null);function i(u){n("select",u)}function s(u){return{symbol:"#0d6efd",command:"#6f42c1",template:"#198754",correction:"#fd7e14",formula:"#d63384"}[u]??"#6c757d"}return(u,a)=>(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[t.visible&&t.items.length>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"sciexpr-autocomplete",style:e.normalizeStyle(t.position?{top:t.position.top+"px",left:t.position.left+"px"}:{}),role:"listbox"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,(r,m)=>(e.openBlock(),e.createElementBlock("div",{key:`${r.text}-${m}`,class:e.normalizeClass(["sciexpr-autocomplete-item",{selected:m===t.selectedIndex}]),role:"option","aria-selected":m===t.selectedIndex,onClick:o=>i(r),onMouseenter:o=>u.$emit("select",r)},[e.createElementVNode("span",{class:"sciexpr-autocomplete-category",style:e.normalizeStyle({background:s(r.category)})},e.toDisplayString(r.category),5),e.createElementVNode("span",ne,e.toDisplayString(r.label),1),r.description?(e.openBlock(),e.createElementBlock("span",ce,e.toDisplayString(r.description),1)):e.createCommentVNode("",!0),e.unref(c)?(e.openBlock(),e.createElementBlock("span",re,e.toDisplayString(r.previewHtml?"AI":""),1)):e.createCommentVNode("",!0)],42,le))),128))],4)):e.createCommentVNode("",!0)]))}}),A=C(ie,[["__scopeId","data-v-d18e03d1"]]),se={class:"sciexpr-editor-input-wrap"},ue=["placeholder","readonly","rows"],me=e.defineComponent({__name:"FormulaEditor",props:{value:{default:""},displayMode:{type:Boolean,default:!1},readonly:{type:Boolean,default:!1},placeholder:{default:"Type LaTeX or chemical formula..."},toolbar:{},autocomplete:{},showPreview:{type:Boolean,default:!0},showToolbar:{type:Boolean,default:!0},rows:{default:3}},emits:["update:value","change","error"],setup(t,{emit:l}){const n=t,c=l,i=e.ref(null),s=e.ref(null),u=e.ref({top:0,left:0}),a=e.ref(n.value);e.watch(()=>n.value,d=>{a.value=d});const r=T({initialValue:a.value}),{pipeline:m}=R(),o=V({config:n.autocomplete,pipeline:m});function p(d){const b=d.target,f=b.value,v=b.selectionStart;a.value=f,r.value.value=f,r.cursor.value=v,c("update:value",f),c("change",f),o.trigger(f,v),P()}function x(d){if(o.visible.value){if(d.key==="ArrowDown"){d.preventDefault(),o.moveSelection("down");return}if(d.key==="ArrowUp"){d.preventDefault(),o.moveSelection("up");return}if(d.key==="Enter"||d.key==="Tab"){d.preventDefault();const b=o.suggestions.value[o.selectedIndex.value];b&&L(b.text);return}if(d.key==="Escape"){o.close();return}}(d.ctrlKey||d.metaKey)&&(d.key==="b"&&(d.preventDefault(),O("\\mathbf{","}")),d.key==="/"&&(d.preventDefault(),E("\\frac{}{}")))}function y(d){E(d)}function g(d){L(d.text)}function E(d){const b=i.value;if(!b)return;const f=b.selectionStart,v=b.selectionEnd,h=a.value.slice(0,f),w=a.value.slice(v);a.value=h+d+w,c("update:value",a.value),e.nextTick(()=>{b.focus();const k=f+d.length;b.setSelectionRange(k,k),o.close()})}function L(d){const b=i.value;if(!b)return;const f=b.selectionStart,v=a.value.slice(0,f),h=v.lastIndexOf("\\");let w;if(h!==-1&&f-h<30)w=h;else{const B=v.match(/([a-zA-Z_]+)$/);w=B?f-B[0].length:f}const k=a.value.slice(f);a.value=a.value.slice(0,w)+d+k,c("update:value",a.value),e.nextTick(()=>{b.focus();const B=w+d.length;b.setSelectionRange(B,B),o.close()})}function O(d,b){const f=i.value;if(!f)return;const v=f.selectionStart,h=f.selectionEnd,w=a.value.slice(v,h)||"",k=a.value.slice(0,v)+d+w+b+a.value.slice(h);a.value=k,c("update:value",k),e.nextTick(()=>{f.focus();const B=v+d.length+w.length;f.setSelectionRange(B,B)})}function P(){const d=i.value;if(!d)return;const b=d.getBoundingClientRect(),f=d.selectionStart,v=20,h=8,k=a.value.slice(0,f).split(`
|
|
2
|
+
`),B=k[k.length-1].length;u.value={top:b.top+k.length*v+24+window.scrollY,left:b.left+B*h+window.scrollX}}return e.computed(()=>a.value.trim().length>0),(d,b)=>{var f;return e.openBlock(),e.createElementBlock("div",{ref_key:"editorRef",ref:s,class:e.normalizeClass(["sciexpr-editor",{"sciexpr-editor-display":t.displayMode}])},[t.showToolbar&&!t.readonly?(e.openBlock(),e.createBlock(D,{key:0,categories:(f=t.toolbar)==null?void 0:f.categories,onInsert:y},null,8,["categories"])):e.createCommentVNode("",!0),e.createElementVNode("div",se,[e.withDirectives(e.createElementVNode("textarea",{ref_key:"textareaRef",ref:i,"onUpdate:modelValue":b[0]||(b[0]=v=>a.value=v),class:e.normalizeClass(["sciexpr-editor-textarea",{"sciexpr-editor-textarea-display":t.displayMode,"sciexpr-editor-textarea-readonly":t.readonly}]),placeholder:t.placeholder,readonly:t.readonly,rows:t.rows,"aria-label":"Formula input",spellcheck:"false",autocomplete:"off",autocorrect:"off",autocapitalize:"off",onInput:p,onKeydown:x,onFocus:P},null,42,ue),[[e.vModelText,a.value]])]),e.createVNode(A,{items:e.unref(o).suggestions.value,visible:e.unref(o).visible.value,"selected-index":e.unref(o).selectedIndex.value,position:u.value,onSelect:g,onClose:b[1]||(b[1]=v=>e.unref(o).close())},null,8,["items","visible","selected-index","position"]),t.showPreview?(e.openBlock(),e.createBlock(F,{key:1,source:a.value,"display-mode":t.displayMode,"show-source":!1},null,8,["source","display-mode"])):e.createCommentVNode("",!0)],2)}}}),de=C(me,[["__scopeId","data-v-d6181c80"]]),pe={class:"sciexpr-symbol-panel"},be={class:"sciexpr-symbol-search"},fe={class:"sciexpr-symbol-tabs"},xe=["onClick"],ye={class:"sciexpr-symbol-grid"},ve=["title","disabled","onClick"],ke={class:"sciexpr-symbol-unicode"},ge={class:"sciexpr-symbol-name"},he=["title","disabled","onClick"],we={class:"sciexpr-symbol-unicode"},Be={class:"sciexpr-symbol-name"},Ee=e.defineComponent({__name:"SymbolPanel",props:{disabled:{type:Boolean}},emits:["insert"],setup(t,{emit:l}){const n=l,c=[{id:"greek-lower",label:"Greek Lowercase",symbols:[{latex:"\\alpha",unicode:"α",name:"alpha"},{latex:"\\beta",unicode:"β",name:"beta"},{latex:"\\gamma",unicode:"γ",name:"gamma"},{latex:"\\delta",unicode:"δ",name:"delta"},{latex:"\\epsilon",unicode:"ε",name:"epsilon"},{latex:"\\zeta",unicode:"ζ",name:"zeta"},{latex:"\\eta",unicode:"η",name:"eta"},{latex:"\\theta",unicode:"θ",name:"theta"},{latex:"\\iota",unicode:"ι",name:"iota"},{latex:"\\kappa",unicode:"κ",name:"kappa"},{latex:"\\lambda",unicode:"λ",name:"lambda"},{latex:"\\mu",unicode:"μ",name:"mu"},{latex:"\\nu",unicode:"ν",name:"nu"},{latex:"\\xi",unicode:"ξ",name:"xi"},{latex:"\\pi",unicode:"π",name:"pi"},{latex:"\\rho",unicode:"ρ",name:"rho"},{latex:"\\sigma",unicode:"σ",name:"sigma"},{latex:"\\tau",unicode:"τ",name:"tau"},{latex:"\\phi",unicode:"φ",name:"phi"},{latex:"\\chi",unicode:"χ",name:"chi"},{latex:"\\psi",unicode:"ψ",name:"psi"},{latex:"\\omega",unicode:"ω",name:"omega"}]},{id:"greek-upper",label:"Greek Uppercase",symbols:[{latex:"\\Gamma",unicode:"Γ",name:"Gamma"},{latex:"\\Delta",unicode:"Δ",name:"Delta"},{latex:"\\Theta",unicode:"Θ",name:"Theta"},{latex:"\\Lambda",unicode:"Λ",name:"Lambda"},{latex:"\\Xi",unicode:"Ξ",name:"Xi"},{latex:"\\Pi",unicode:"Π",name:"Pi"},{latex:"\\Sigma",unicode:"Σ",name:"Sigma"},{latex:"\\Upsilon",unicode:"Υ",name:"Upsilon"},{latex:"\\Phi",unicode:"Φ",name:"Phi"},{latex:"\\Psi",unicode:"Ψ",name:"Psi"},{latex:"\\Omega",unicode:"Ω",name:"Omega"}]},{id:"operators",label:"Operators & Relations",symbols:[{latex:"\\times",unicode:"×",name:"times"},{latex:"\\div",unicode:"÷",name:"divide"},{latex:"\\cdot",unicode:"·",name:"dot"},{latex:"\\pm",unicode:"±",name:"plus-minus"},{latex:"\\mp",unicode:"∓",name:"minus-plus"},{latex:"\\leq",unicode:"≤",name:"leq"},{latex:"\\geq",unicode:"≥",name:"geq"},{latex:"\\neq",unicode:"≠",name:"neq"},{latex:"\\approx",unicode:"≈",name:"approx"},{latex:"\\equiv",unicode:"≡",name:"equiv"},{latex:"\\sim",unicode:"∼",name:"sim"},{latex:"\\propto",unicode:"∝",name:"propto"},{latex:"\\ll",unicode:"≪",name:"ll"},{latex:"\\gg",unicode:"≫",name:"gg"}]},{id:"arrows",label:"Arrows",symbols:[{latex:"\\to",unicode:"→",name:"to"},{latex:"\\rightarrow",unicode:"→",name:"rightarrow"},{latex:"\\leftarrow",unicode:"←",name:"leftarrow"},{latex:"\\Rightarrow",unicode:"⇒",name:"Rightarrow"},{latex:"\\Leftarrow",unicode:"⇐",name:"Leftarrow"},{latex:"\\Leftrightarrow",unicode:"⇔",name:"Leftrightarrow"},{latex:"\\mapsto",unicode:"↦",name:"mapsto"},{latex:"\\uparrow",unicode:"↑",name:"uparrow"},{latex:"\\downarrow",unicode:"↓",name:"downarrow"}]},{id:"misc",label:"Misc",symbols:[{latex:"\\infty",unicode:"∞",name:"infinity"},{latex:"\\partial",unicode:"∂",name:"partial"},{latex:"\\nabla",unicode:"∇",name:"nabla"},{latex:"\\forall",unicode:"∀",name:"forall"},{latex:"\\exists",unicode:"∃",name:"exists"},{latex:"\\emptyset",unicode:"∅",name:"emptyset"},{latex:"\\neg",unicode:"¬",name:"neg"},{latex:"\\angle",unicode:"∠",name:"angle"},{latex:"\\triangle",unicode:"△",name:"triangle"},{latex:"\\square",unicode:"□",name:"square"},{latex:"\\circ",unicode:"∘",name:"circle"},{latex:"\\star",unicode:"★",name:"star"}]},{id:"chemistry",label:"Chemistry",symbols:[{latex:"\\ce{H2O}",unicode:"H₂O",name:"Water"},{latex:"\\ce{CO2}",unicode:"CO₂",name:"Carbon dioxide"},{latex:"\\ce{->}",unicode:"→",name:"Arrow right"},{latex:"\\ce{<-}",unicode:"←",name:"Arrow left"},{latex:"\\ce{<=>}",unicode:"⇌",name:"Equilibrium"},{latex:"\\ce{<->}",unicode:"⇄",name:"Resonance"},{latex:"\\ce{->[H2O]}",unicode:"→[H₂O]",name:"With condition"}]}],i=e.ref(c[0].id),s=e.ref(""),u=e.computed(()=>{if(!s.value)return c;const r=s.value.toLowerCase();return c.map(m=>({...m,symbols:m.symbols.filter(o=>o.name.toLowerCase().includes(r)||o.latex.toLowerCase().includes(r))})).filter(m=>m.symbols.length>0)});function a(r){n("insert",r)}return(r,m)=>(e.openBlock(),e.createElementBlock("div",pe,[e.createElementVNode("div",be,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":m[0]||(m[0]=o=>s.value=o),type:"text",class:"sciexpr-symbol-search-input",placeholder:"Search symbols..."},null,512),[[e.vModelText,s.value]])]),e.createElementVNode("div",fe,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(c,o=>e.createElementVNode("button",{key:o.id,class:e.normalizeClass(["sciexpr-symbol-tab",{active:i.value===o.id}]),onClick:p=>i.value=o.id,type:"button"},e.toDisplayString(o.label),11,xe)),64))]),e.createElementVNode("div",ye,[s.value?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(u.value,o=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:o.id},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.symbols,p=>(e.openBlock(),e.createElementBlock("button",{key:p.latex,class:e.normalizeClass(["sciexpr-symbol-btn",{"sciexpr-symbol-btn-disabled":t.disabled}]),title:`${p.name} — ${p.latex}`,disabled:t.disabled,type:"button",onClick:x=>a(p.latex)},[e.createElementVNode("span",ke,e.toDisplayString(p.unicode),1),e.createElementVNode("span",ge,e.toDisplayString(p.name),1)],10,ve))),128))],64))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},e.renderList(c,o=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:o.id},[i.value===o.id?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(o.symbols,p=>(e.openBlock(),e.createElementBlock("button",{key:p.latex,class:e.normalizeClass(["sciexpr-symbol-btn",{"sciexpr-symbol-btn-disabled":t.disabled}]),title:`${p.name} — ${p.latex}`,disabled:t.disabled,type:"button",onClick:x=>a(p.latex)},[e.createElementVNode("span",we,e.toDisplayString(p.unicode),1),e.createElementVNode("span",Be,e.toDisplayString(p.name),1)],10,he))),128)):e.createCommentVNode("",!0)],64))),64))])]))}}),Ce=C(Ee,[["__scopeId","data-v-8a9ec119"]]),Ne={class:"sciexpr-element-grid"},Se=["title","disabled","onClick"],_e={key:0,class:"sciexpr-element-number"},$e={key:1,class:"sciexpr-element-symbol"},M=18,Ie=6,Le=e.defineComponent({__name:"ElementTable",props:{disabled:{type:Boolean},compact:{type:Boolean}},emits:["insert"],setup(t,{emit:l}){const n=l,c=[{symbol:"H",name:"Hydrogen",atomicNumber:1,row:1,col:1,block:"s"},{symbol:"He",name:"Helium",atomicNumber:2,row:1,col:18,block:"s"},{symbol:"Li",name:"Lithium",atomicNumber:3,row:2,col:1,block:"s"},{symbol:"Be",name:"Beryllium",atomicNumber:4,row:2,col:2,block:"s"},{symbol:"B",name:"Boron",atomicNumber:5,row:2,col:13,block:"p"},{symbol:"C",name:"Carbon",atomicNumber:6,row:2,col:14,block:"p"},{symbol:"N",name:"Nitrogen",atomicNumber:7,row:2,col:15,block:"p"},{symbol:"O",name:"Oxygen",atomicNumber:8,row:2,col:16,block:"p"},{symbol:"F",name:"Fluorine",atomicNumber:9,row:2,col:17,block:"p"},{symbol:"Ne",name:"Neon",atomicNumber:10,row:2,col:18,block:"p"},{symbol:"Na",name:"Sodium",atomicNumber:11,row:3,col:1,block:"s"},{symbol:"Mg",name:"Magnesium",atomicNumber:12,row:3,col:2,block:"s"},{symbol:"Al",name:"Aluminium",atomicNumber:13,row:3,col:13,block:"p"},{symbol:"Si",name:"Silicon",atomicNumber:14,row:3,col:14,block:"p"},{symbol:"P",name:"Phosphorus",atomicNumber:15,row:3,col:15,block:"p"},{symbol:"S",name:"Sulfur",atomicNumber:16,row:3,col:16,block:"p"},{symbol:"Cl",name:"Chlorine",atomicNumber:17,row:3,col:17,block:"p"},{symbol:"Ar",name:"Argon",atomicNumber:18,row:3,col:18,block:"p"},{symbol:"K",name:"Potassium",atomicNumber:19,row:4,col:1,block:"s"},{symbol:"Ca",name:"Calcium",atomicNumber:20,row:4,col:2,block:"s"},{symbol:"Cr",name:"Chromium",atomicNumber:24,row:4,col:6,block:"d"},{symbol:"Mn",name:"Manganese",atomicNumber:25,row:4,col:7,block:"d"},{symbol:"Fe",name:"Iron",atomicNumber:26,row:4,col:8,block:"d"},{symbol:"Co",name:"Cobalt",atomicNumber:27,row:4,col:9,block:"d"},{symbol:"Ni",name:"Nickel",atomicNumber:28,row:4,col:10,block:"d"},{symbol:"Cu",name:"Copper",atomicNumber:29,row:4,col:11,block:"d"},{symbol:"Zn",name:"Zinc",atomicNumber:30,row:4,col:12,block:"d"},{symbol:"Br",name:"Bromine",atomicNumber:35,row:4,col:17,block:"p"},{symbol:"Ag",name:"Silver",atomicNumber:47,row:5,col:11,block:"d"},{symbol:"Au",name:"Gold",atomicNumber:79,row:5,col:11,block:"d"},{symbol:"Hg",name:"Mercury",atomicNumber:80,row:5,col:12,block:"d"},{symbol:"I",name:"Iodine",atomicNumber:53,row:5,col:17,block:"p"},{symbol:"Pt",name:"Platinum",atomicNumber:78,row:6,col:10,block:"d"},{symbol:"Pb",name:"Lead",atomicNumber:82,row:6,col:14,block:"p"}],i=e.computed(()=>{const a=[];for(let r=0;r<Ie;r++)a.push(new Array(M).fill(null));for(const r of c)a[r.row-1][r.col-1]=r;return a});function s(a){return{s:"#ff6b6b",p:"#ffd93d",d:"#6bcb77",f:"#4d96ff"}[a]??"#adb5bd"}function u(a){n("insert",a)}return(a,r)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["sciexpr-element-table",{"sciexpr-element-table-compact":t.compact}])},[r[0]||(r[0]=e.createStaticVNode('<div class="sciexpr-element-legend" data-v-a5437c7c><span class="legend-item" data-v-a5437c7c><span class="legend-dot" style="background:#ff6b6b;" data-v-a5437c7c></span> s-block</span><span class="legend-item" data-v-a5437c7c><span class="legend-dot" style="background:#ffd93d;" data-v-a5437c7c></span> p-block</span><span class="legend-item" data-v-a5437c7c><span class="legend-dot" style="background:#6bcb77;" data-v-a5437c7c></span> d-block</span><span class="legend-item" data-v-a5437c7c><span class="legend-dot" style="background:#4d96ff;" data-v-a5437c7c></span> f-block</span></div>',1)),e.createElementVNode("div",Ne,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,m=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:i.value.indexOf(m)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m,(o,p)=>e.withDirectives((e.openBlock(),e.createElementBlock("button",{key:p,class:e.normalizeClass(["sciexpr-element-cell",{"sciexpr-element-cell-compact":t.compact,"sciexpr-element-cell-disabled":t.disabled}]),style:e.normalizeStyle(o?{gridRow:o.row,gridColumn:o.col,"--block-color":s(o.block)}:{}),title:o?`${o.name} (${o.atomicNumber})`:"",disabled:t.disabled,type:"button",onClick:x=>o&&u(o.symbol)},[o?(e.openBlock(),e.createElementBlock("span",_e,e.toDisplayString(o.atomicNumber),1)):e.createCommentVNode("",!0),o?(e.openBlock(),e.createElementBlock("span",$e,e.toDisplayString(o.symbol),1)):e.createCommentVNode("",!0)],14,Se)),[[e.vShow,o!==null]])),128)),(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(M,o=>e.withDirectives(e.createElementVNode("div",{key:"empty-"+o,class:"sciexpr-element-cell sciexpr-element-empty",style:e.normalizeStyle({gridRow:i.value.indexOf(m)+1,gridColumn:o})},null,4),[[e.vShow,!m[o-1]]])),64))],64))),128))])],2))}}),Pe=C(Le,[["__scopeId","data-v-a5437c7c"]]);function Me(t){function l(n){for(const c of t){const i=n.key.toLowerCase()===c.key.toLowerCase(),s=!!c.ctrl===(n.ctrlKey||n.metaKey),u=!!c.shift===n.shiftKey,a=!!c.alt===n.altKey;if(i&&s&&u&&a){n.preventDefault(),c.action();return}}}e.onMounted(()=>{window.addEventListener("keydown",l)}),e.onUnmounted(()=>{window.removeEventListener("keydown",l)})}const Te=[{key:"b",ctrl:!0,action:()=>{},description:"Bold (\\mathbf{})"},{key:"/",ctrl:!0,action:()=>{},description:"Fraction (\\frac{}{})"},{key:"s",ctrl:!0,shift:!0,action:()=>{},description:"Square root (\\sqrt{})"},{key:"1",ctrl:!0,action:()=>{},description:"Subscript (_)"},{key:"2",ctrl:!0,action:()=>{},description:"Superscript (^)"}];exports.AI_PIPELINE_KEY=N;exports.AutocompleteDropdown=A;exports.BUILTIN_SHORTCUTS=Te;exports.ElementTable=Pe;exports.Formula=W;exports.FormulaEditor=de;exports.FormulaToolbar=D;exports.LivePreview=F;exports.SymbolPanel=Ce;exports.useAIProvider=R;exports.useAutocomplete=V;exports.useFormula=I;exports.useFormulaEditor=T;exports.useFormulaRender=z;exports.useShortcuts=Me;
|
|
3
3
|
//# sourceMappingURL=index.cjs.map
|