@alaarab/ogrid-core 2.4.2 → 2.5.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.
@@ -0,0 +1,2 @@
1
+ var a=class{constructor(e,t){this.type=e;this.message=t;}toString(){return this.type}};var Ae=new a("#REF!","Invalid cell reference"),we=new a("#DIV/0!","Division by zero"),he=new a("#VALUE!","Wrong value type"),ve=new a("#NAME?","Unknown function or name"),Ee=new a("#CIRC!","Circular reference"),Ie=new a("#ERROR!","Formula error"),Ce=new a("#N/A","No match found");function Ne(i){return i instanceof a}function B(i){let e="",t=i;for(;t>=0;)e=String.fromCharCode(t%26+65)+e,t=Math.floor(t/26)-1;return e}function $(i){let e=0,t=i.toUpperCase();for(let o=0;o<t.length;o++)e=e*26+(t.charCodeAt(o)-64);return e-1}var Re=/^(\$?)([A-Za-z]+)(\$?)(\d+)$/,Z=/(?:'[^']*'!|[A-Za-z_]\w*!)?(\$?)([A-Z]+)(\$?)(\d+)/g;function M(i){let e=i.match(Re);if(!e)return null;let t=e[1]==="$",o=e[2],n=e[3]==="$",r=parseInt(e[4],10);return r<1?null:{col:$(o),row:r-1,absCol:t,absRow:n}}function O(i){let e=i.split(":");if(e.length!==2)return null;let t=M(e[0]),o=M(e[1]);return !t||!o?null:{start:t,end:o}}function Fe(i){let e=(i.absCol?"$":"")+B(i.col),t=(i.absRow?"$":"")+(i.row+1),o=e+t;return i.sheet?`${i.sheet.includes(" ")?`'${i.sheet}'`:i.sheet}!${o}`:o}function be(i,e,t){return Z.lastIndex=0,i.replace(Z,(o,n,r,s,u)=>{let l=o.indexOf(n+r),c=l>0?o.substring(0,l):"",f=r,m=u;if(n!=="$"){let d=$(r)+e;if(d<0)return "#REF!";f=B(d);}if(s!=="$"){let d=parseInt(u,10)+t;if(d<1)return "#REF!";m=String(d);}return `${c}${n}${f}${s}${m}`})}function x(i,e,t){return t?`${t}:${i},${e}`:`${i},${e}`}function D(i){let e=i.indexOf(":");if(e>=0&&isNaN(parseInt(i.substring(0,e),10))){let o=i.substring(0,e),n=i.substring(e+1),r=n.indexOf(",");return {col:parseInt(n.substring(0,r),10),row:parseInt(n.substring(r+1),10),sheet:o}}let t=i.indexOf(",");return {col:parseInt(i.substring(0,t),10),row:parseInt(i.substring(t+1),10)}}var Te=/^\$?[A-Za-z]+\$?\d+$/,J={"+":"PLUS","-":"MINUS","*":"MULTIPLY","/":"DIVIDE","^":"POWER","%":"PERCENT","&":"AMPERSAND","=":"EQ"},ee={"(":"LPAREN",")":"RPAREN",",":"COMMA",":":"COLON"};function P(i){let e=[],t=0;for(;t<i.length;){let o=i[t];if(o===" "||o===" "||o==="\r"||o===`
2
+ `){t++;continue}if(o>="0"&&o<="9"||o==="."&&t+1<i.length&&i[t+1]>="0"&&i[t+1]<="9"){let n=t;for(;t<i.length&&i[t]>="0"&&i[t]<="9";)t++;if(t<i.length&&i[t]===".")for(t++;t<i.length&&i[t]>="0"&&i[t]<="9";)t++;e.push({type:"NUMBER",value:i.slice(n,t),position:n});continue}if(o==="'"){let n=t;t++;let r=t;for(;t<i.length&&i[t]!=="'";)t++;let s=i.slice(r,t);if(t<i.length&&i[t]==="'"&&(t++,t<i.length&&i[t]==="!")){t++,e.push({type:"SHEET_REF",value:s,position:n});continue}throw new a("#ERROR!",`Invalid sheet reference at position ${n}`)}if(o==='"'){let n=t;t++;let r=t,s=false;for(;t<i.length;)if(i[t]==='"')if(t+1<i.length&&i[t+1]==='"')s=true,t+=2;else break;else t++;let u;s?u=i.slice(r,t).replace(/""/g,'"'):u=i.slice(r,t),t<i.length&&t++,e.push({type:"STRING",value:u,position:n});continue}if(o===">"&&t+1<i.length&&i[t+1]==="="){e.push({type:"GTE",value:">=",position:t}),t+=2;continue}if(o==="<"&&t+1<i.length&&i[t+1]==="="){e.push({type:"LTE",value:"<=",position:t}),t+=2;continue}if(o==="<"&&t+1<i.length&&i[t+1]===">"){e.push({type:"NEQ",value:"<>",position:t}),t+=2;continue}if(o===">"||o==="<"){let n=o===">"?"GT":"LT";e.push({type:n,value:o,position:t}),t++;continue}if(J[o]){e.push({type:J[o],value:o,position:t}),t++;continue}if(ee[o]){e.push({type:ee[o],value:o,position:t}),t++;continue}if(o==="$"||o>="A"&&o<="Z"||o>="a"&&o<="z"){let n=t;for(;t<i.length&&(i[t]>="A"&&i[t]<="Z"||i[t]>="a"&&i[t]<="z"||i[t]>="0"&&i[t]<="9"||i[t]==="$"||i[t]==="_");)t++;if(t<i.length&&i[t]==="."&&t+1<i.length&&(i[t+1]>="A"&&i[t+1]<="Z"||i[t+1]>="a"&&i[t+1]<="z"))for(t++;t<i.length&&(i[t]>="A"&&i[t]<="Z"||i[t]>="a"&&i[t]<="z"||i[t]>="0"&&i[t]<="9"||i[t]==="_");)t++;let r=i.slice(n,t);if(t<i.length&&i[t]==="!"){t++,e.push({type:"SHEET_REF",value:r,position:n});continue}if(t<i.length&&i[t]==="("){e.push({type:"FUNCTION",value:r,position:n});continue}let s=r.toUpperCase();if(s==="TRUE"||s==="FALSE"){e.push({type:"BOOLEAN",value:s,position:n});continue}if(Te.test(r)){e.push({type:"CELL_REF",value:r,position:n});continue}e.push({type:"IDENTIFIER",value:r,position:n});continue}throw new a("#ERROR!",`Unexpected character: ${o}`)}return e.push({type:"EOF",value:"",position:t}),e}function W(i,e){let t=0;function o(){return i[t]}function n(){let E=i[t];return t++,E}function r(E){let I=o();return I&&I.type===E?n():null}function s(E){return {kind:"error",error:new a("#ERROR!",E)}}function u(){return l()}function l(){let E=c();for(;o();){let I=o(),C=null;if(I.type==="GT")C=">";else if(I.type==="LT")C="<";else if(I.type==="GTE")C=">=";else if(I.type==="LTE")C="<=";else if(I.type==="EQ")C="=";else if(I.type==="NEQ")C="<>";else break;n();let k=c();E={kind:"binaryOp",op:C,left:E,right:k};}return E}function c(){let E=f();for(;o()&&o().type==="AMPERSAND";){n();let I=f();E={kind:"binaryOp",op:"&",left:E,right:I};}return E}function f(){let E=m();for(;o();){let I=o(),C=null;if(I.type==="PLUS")C="+";else if(I.type==="MINUS")C="-";else break;n();let k=m();E={kind:"binaryOp",op:C,left:E,right:k};}return E}function m(){let E=d();for(;o();){let I=o(),C=null;if(I.type==="MULTIPLY")C="*";else if(I.type==="DIVIDE")C="/";else break;n();let k=d();E={kind:"binaryOp",op:C,left:E,right:k};}return E}function d(){let E=g();for(;o()&&o().type==="POWER";){n();let I=g();E={kind:"binaryOp",op:"^",left:E,right:I};}return E}function g(){let E=o();if(E&&(E.type==="MINUS"||E.type==="PLUS")){let I=E.type==="MINUS"?"-":"+";n();let C=g();return {kind:"unaryOp",op:I,operand:C}}return p()}function p(){let E=A();return o()&&o().type==="PERCENT"&&(n(),E={kind:"binaryOp",op:"%",left:E,right:{kind:"number",value:100}}),E}function A(){let E=o();if(!E||E.type==="EOF")return s("Unexpected end of expression");if(E.type==="NUMBER")return n(),{kind:"number",value:parseFloat(E.value)};if(E.type==="STRING")return n(),{kind:"string",value:E.value};if(E.type==="BOOLEAN")return n(),{kind:"boolean",value:E.value.toUpperCase()==="TRUE"};if(E.type==="CELL_REF")return v();if(E.type==="FUNCTION")return h();if(E.type==="IDENTIFIER")return R();if(E.type==="SHEET_REF")return b();if(E.type==="LPAREN"){n();let I=u();return r("RPAREN")?I:s("Expected closing parenthesis")}return n(),s(`Unexpected token: ${E.value}`)}function v(){let E=n(),I=M(E.value);if(!I)return s(`Invalid cell reference: ${E.value}`);if(o()&&o().type==="COLON"){n();let C=r("CELL_REF");if(!C)return s('Expected cell reference after ":"');let k=M(C.value);return k?{kind:"range",start:I,end:k,raw:`${E.value}:${C.value}`}:s(`Invalid cell reference: ${C.value}`)}return {kind:"cellRef",address:I,raw:E.value}}function h(){let I=n().value.toUpperCase();if(!r("LPAREN"))return s(`Expected "(" after function name "${I}"`);let C=[];if(o()&&o().type!=="RPAREN"&&o().type!=="EOF")for(C.push(u());o()&&o().type==="COMMA";)n(),C.push(u());return r("RPAREN")?{kind:"functionCall",name:I,args:C}:s(`Expected ")" after function arguments for "${I}"`)}function R(){let E=n(),I=E.value.toUpperCase(),C=e?.get(I);if(!C)return {kind:"error",error:new a("#NAME?",`Unknown name: ${E.value}`)};if(C.includes(":")){let U=O(C);if(U)return {kind:"range",start:U.start,end:U.end,raw:C}}let k=M(C);return k?{kind:"cellRef",address:k,raw:C}:{kind:"error",error:new a("#REF!",`Invalid named range reference: ${C}`)}}function b(){let I=n().value,C=r("CELL_REF");if(!C)return s(`Expected cell reference after sheet "${I}!"`);let k=M(C.value);if(!k)return s(`Invalid cell reference: ${C.value}`);if(k.sheet=I,o()&&o().type==="COLON"){n();let U=r("CELL_REF");if(!U)return s('Expected cell reference after ":"');let q=M(U.value);return q?(q.sheet=I,{kind:"range",start:k,end:q,raw:`${I}!${C.value}:${U.value}`}):s(`Invalid cell reference: ${U.value}`)}return {kind:"cellRef",address:k,raw:`${I}!${C.value}`}}let S=u();return o()&&o().type!=="EOF"?s(`Unexpected token after expression: ${o().value}`):S}function w(i){if(i instanceof a)return i;if(i==null||i==="")return 0;if(typeof i=="boolean")return i?1:0;if(typeof i=="number")return i;if(i instanceof Date)return i.getTime();let e=Number(i);return isNaN(e)?new a("#VALUE!",`Cannot convert "${i}" to number`):e}function N(i){return i==null?"":i instanceof a?i.toString():i instanceof Date?i.toLocaleDateString():String(i)}function xe(i){return typeof i=="boolean"?i:typeof i=="number"?i!==0:typeof i=="string"?i.toUpperCase()==="TRUE"?true:i.toUpperCase()==="FALSE"?false:i.length>0:i!=null}function T(i,e,t){let o=[];for(let n of i)if(n.kind==="range"){let r=e.getRangeValues({start:n.start,end:n.end});for(let s of r)for(let u of s)o.push(u);}else o.push(t.evaluate(n,e));return o}var Y=class{constructor(e){this.functions=new Map(e);}registerFunction(e,t){this.functions.set(e.toUpperCase(),t);}evaluate(e,t){switch(e.kind){case "number":return e.value;case "string":return e.value;case "boolean":return e.value;case "error":return e.error;case "cellRef":return t.getCellValue(e.address);case "range":return t.getCellValue(e.start);case "functionCall":return this.evaluateFunction(e.name,e.args,t);case "binaryOp":return this.evaluateBinaryOp(e.op,e.left,e.right,t);case "unaryOp":return this.evaluateUnaryOp(e.op,e.operand,t)}}evaluateFunction(e,t,o){let n=this.functions.get(e);return n?t.length<n.minArgs?new a("#ERROR!",`${e} requires at least ${n.minArgs} argument(s)`):n.maxArgs>=0&&t.length>n.maxArgs?new a("#ERROR!",`${e} accepts at most ${n.maxArgs} argument(s)`):n.evaluate(t,o,this):new a("#NAME?",`Unknown function: ${e}`)}evaluateBinaryOp(e,t,o,n){if(e==="&"){let c=this.evaluate(t,n);if(c instanceof a)return c;let f=this.evaluate(o,n);return f instanceof a?f:N(c)+N(f)}if(e===">"||e==="<"||e===">="||e==="<="||e==="="||e==="<>"){let c=this.evaluate(t,n);if(c instanceof a)return c;let f=this.evaluate(o,n);return f instanceof a?f:this.compare(e,c,f)}let r=this.evaluate(t,n);if(r instanceof a)return r;let s=this.evaluate(o,n);if(s instanceof a)return s;let u=w(r);if(u instanceof a)return u;let l=w(s);if(l instanceof a)return l;switch(e){case "+":return u+l;case "-":return u-l;case "*":return u*l;case "/":return l===0?new a("#DIV/0!"):u/l;case "^":return Math.pow(u,l);case "%":return u*l/100;default:return new a("#ERROR!",`Unknown operator: ${e}`)}}evaluateUnaryOp(e,t,o){let n=this.evaluate(t,o);if(n instanceof a)return n;let r=w(n);return r instanceof a?r:e==="-"?-r:r}compare(e,t,o){if(typeof t=="number"&&typeof o=="number")return this.numCompare(e,t,o);if(typeof t=="string"&&typeof o=="string")return this.strCompare(e,t,o);if(typeof t=="boolean"&&typeof o=="boolean")return this.numCompare(e,t?1:0,o?1:0);let n=w(t),r=w(o);return typeof n=="number"&&typeof r=="number"?this.numCompare(e,n,r):this.strCompare(e,N(t),N(o))}numCompare(e,t,o){switch(e){case ">":return t>o;case "<":return t<o;case ">=":return t>=o;case "<=":return t<=o;case "=":return t===o;case "<>":return t!==o;default:return false}}strCompare(e,t,o){let n=t.toLowerCase(),r=o.toLowerCase();switch(e){case ">":return n>r;case "<":return n<r;case ">=":return n>=r;case "<=":return n<=r;case "=":return n===r;case "<>":return n!==r;default:return false}}};var ne=Object.freeze(new Set),H=class{constructor(){this.dependencies=new Map;this.dependents=new Map;}setDependencies(e,t){this.removeDependenciesInternal(e),this.dependencies.set(e,t);for(let o of t){let n=this.dependents.get(o);n||(n=new Set,this.dependents.set(o,n)),n.add(e);}}removeDependencies(e){this.removeDependenciesInternal(e),this.dependencies.delete(e);}getRecalcOrder(e){return this.topologicalSort(new Set([e]))}getRecalcOrderBatch(e){return this.topologicalSort(new Set(e))}wouldCreateCycle(e,t){if(t.has(e))return true;let o=new Set;for(let n of t)if(this.canReach(n,e,o))return true;return false}getDependents(e){return this.dependents.get(e)??ne}getDependencies(e){return this.dependencies.get(e)??ne}clear(){this.dependencies.clear(),this.dependents.clear();}removeDependenciesInternal(e){let t=this.dependencies.get(e);if(t){for(let o of t){let n=this.dependents.get(o);n&&(n.delete(e),n.size===0&&this.dependents.delete(o));}this.dependencies.delete(e);}}canReach(e,t,o){if(e===t)return true;if(o.has(e))return false;let n=[e];for(o.add(e);n.length>0;){let r=n.pop(),s=this.dependencies.get(r);if(s)for(let u of s){if(u===t)return true;o.has(u)||(o.add(u),n.push(u));}}return false}topologicalSort(e){let t=new Set,o=[];for(let c of e){let f=this.dependents.get(c);if(f)for(let m of f)t.has(m)||(t.add(m),o.push(m));}let n=0;for(;n<o.length;){let c=o[n++],f=this.dependents.get(c);if(f)for(let m of f)t.has(m)||(t.add(m),o.push(m));}if(t.size===0)return [];let r=new Map;for(let c of t){let f=0,m=this.dependencies.get(c);if(m)for(let d of m)t.has(d)&&f++;r.set(c,f);}let s=[];for(let[c,f]of r)f===0&&s.push(c);let u=[],l=0;for(;l<s.length;){let c=s[l++];u.push(c);let f=this.dependents.get(c);if(f){for(let m of f)if(t.has(m)){let d=(r.get(m)??0)-1;r.set(m,d),d===0&&s.push(m);}}}if(u.length<t.size){let c=new Set(u);for(let f of t)c.has(f)||u.push(f);}return u}};function re(i){i.set("SUM",{minArgs:1,maxArgs:-1,evaluate(e,t,o){let n=T(e,t,o),r=0;for(let s of n){if(s instanceof a)return s;typeof s=="number"?r+=s:typeof s=="boolean"&&(r+=s?1:0);}return r}}),i.set("AVERAGE",{minArgs:1,maxArgs:-1,evaluate(e,t,o){let n=T(e,t,o),r=0,s=0;for(let u of n){if(u instanceof a)return u;typeof u=="number"?(r+=u,s++):typeof u=="boolean"&&(r+=u?1:0,s++);}return s===0?new a("#DIV/0!","No numeric values for AVERAGE"):r/s}}),i.set("MIN",{minArgs:1,maxArgs:-1,evaluate(e,t,o){let n=T(e,t,o),r=1/0;for(let s of n){if(s instanceof a)return s;if(typeof s=="number")s<r&&(r=s);else if(typeof s=="boolean"){let u=s?1:0;u<r&&(r=u);}}return r===1/0?0:r}}),i.set("MAX",{minArgs:1,maxArgs:-1,evaluate(e,t,o){let n=T(e,t,o),r=-1/0;for(let s of n){if(s instanceof a)return s;if(typeof s=="number")s>r&&(r=s);else if(typeof s=="boolean"){let u=s?1:0;u>r&&(r=u);}}return r===-1/0?0:r}}),i.set("COUNT",{minArgs:1,maxArgs:-1,evaluate(e,t,o){let n=T(e,t,o),r=0;for(let s of n){if(s instanceof a)return s;typeof s=="number"&&r++;}return r}}),i.set("COUNTA",{minArgs:1,maxArgs:-1,evaluate(e,t,o){let n=T(e,t,o),r=0;for(let s of n){if(s instanceof a)return s;s!=null&&s!==""&&r++;}return r}}),i.set("ROUND",{minArgs:2,maxArgs:2,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=w(n);if(r instanceof a)return r;let s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=w(s);if(u instanceof a)return u;let l=Math.pow(10,Math.trunc(u));return Math.round(r*l)/l}}),i.set("ABS",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=w(n);return r instanceof a?r:Math.abs(r)}}),i.set("CEILING",{minArgs:2,maxArgs:2,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=w(n);if(r instanceof a)return r;let s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=w(s);return u instanceof a?u:u===0?0:Math.ceil(r/u)*u}}),i.set("FLOOR",{minArgs:2,maxArgs:2,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=w(n);if(r instanceof a)return r;let s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=w(s);return u instanceof a?u:u===0?0:Math.floor(r/u)*u}}),i.set("MOD",{minArgs:2,maxArgs:2,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=w(n);if(r instanceof a)return r;let s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=w(s);return u instanceof a?u:u===0?new a("#DIV/0!","Division by zero in MOD"):r%u}}),i.set("POWER",{minArgs:2,maxArgs:2,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=w(n);if(r instanceof a)return r;let s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=w(s);return u instanceof a?u:Math.pow(r,u)}}),i.set("SQRT",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=w(n);return r instanceof a?r:r<0?new a("#VALUE!","Cannot take square root of negative number"):Math.sqrt(r)}}),i.set("ROUNDUP",{minArgs:2,maxArgs:2,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=w(n);if(r instanceof a)return r;let s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=w(s);if(u instanceof a)return u;let l=Math.pow(10,Math.trunc(u));return r>=0?Math.ceil(r*l)/l:Math.floor(r*l)/l}}),i.set("ROUNDDOWN",{minArgs:2,maxArgs:2,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=w(n);if(r instanceof a)return r;let s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=w(s);if(u instanceof a)return u;let l=Math.pow(10,Math.trunc(u));return Math.trunc(r*l)/l}}),i.set("INT",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=w(n);return r instanceof a?r:Math.floor(r)}}),i.set("TRUNC",{minArgs:1,maxArgs:2,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=w(n);if(r instanceof a)return r;let s=0;if(e.length>=2){let l=o.evaluate(e[1],t);if(l instanceof a)return l;let c=w(l);if(c instanceof a)return c;s=Math.trunc(c);}let u=Math.pow(10,s);return Math.trunc(r*u)/u}}),i.set("PRODUCT",{minArgs:1,maxArgs:-1,evaluate(e,t,o){let n=T(e,t,o),r=1,s=false;for(let u of n){if(u instanceof a)return u;typeof u=="number"&&(r*=u,s=true);}return s?r:0}}),i.set("SUMPRODUCT",{minArgs:1,maxArgs:-1,evaluate(e,t,o){let n=[];for(let l of e){if(l.kind!=="range")return new a("#VALUE!","SUMPRODUCT arguments must be ranges");n.push(t.getRangeValues({start:l.start,end:l.end}));}if(n.length===0)return 0;let r=n[0].length,s=r>0?n[0][0].length:0;for(let l=1;l<n.length;l++)if(n[l].length!==r||r>0&&n[l][0].length!==s)return new a("#VALUE!","SUMPRODUCT arrays must have same dimensions");let u=0;for(let l=0;l<r;l++)for(let c=0;c<s;c++){let f=1;for(let m=0;m<n.length;m++){let d=w(n[m][l][c]);if(d instanceof a){f=0;break}f*=d;}u+=f;}return u}}),i.set("MEDIAN",{minArgs:1,maxArgs:-1,evaluate(e,t,o){let n=T(e,t,o),r=[];for(let u of n){if(u instanceof a)return u;typeof u=="number"&&r.push(u);}if(r.length===0)return new a("#NUM!","No numeric values for MEDIAN");r.sort((u,l)=>u-l);let s=Math.floor(r.length/2);return r.length%2!==0?r[s]:(r[s-1]+r[s])/2}}),i.set("LARGE",{minArgs:2,maxArgs:2,evaluate(e,t,o){if(e[0].kind!=="range")return new a("#VALUE!","LARGE first argument must be a range");let n=t.getRangeValues({start:e[0].start,end:e[0].end}),r=o.evaluate(e[1],t);if(r instanceof a)return r;let s=w(r);if(s instanceof a)return s;let u=[];for(let c of n)for(let f of c)typeof f=="number"&&u.push(f);let l=Math.trunc(s);return l<1||l>u.length?new a("#NUM!","LARGE k out of range"):(u.sort((c,f)=>f-c),u[l-1])}}),i.set("SMALL",{minArgs:2,maxArgs:2,evaluate(e,t,o){if(e[0].kind!=="range")return new a("#VALUE!","SMALL first argument must be a range");let n=t.getRangeValues({start:e[0].start,end:e[0].end}),r=o.evaluate(e[1],t);if(r instanceof a)return r;let s=w(r);if(s instanceof a)return s;let u=[];for(let c of n)for(let f of c)typeof f=="number"&&u.push(f);let l=Math.trunc(s);return l<1||l>u.length?new a("#NUM!","SMALL k out of range"):(u.sort((c,f)=>c-f),u[l-1])}}),i.set("RANK",{minArgs:2,maxArgs:3,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=w(n);if(r instanceof a)return r;if(e[1].kind!=="range")return new a("#VALUE!","RANK second argument must be a range");let s=t.getRangeValues({start:e[1].start,end:e[1].end}),u=0;if(e.length>=3){let f=o.evaluate(e[2],t);if(f instanceof a)return f;let m=w(f);if(m instanceof a)return m;u=m;}let l=[];for(let f of s)for(let m of f)typeof m=="number"&&l.push(m);if(!l.includes(r))return new a("#N/A","RANK value not found in range");let c=1;for(let f of l)(u===0?f>r:f<r)&&c++;return c}}),i.set("SIGN",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=w(n);return r instanceof a?r:r>0?1:r<0?-1:0}}),i.set("LOG",{minArgs:1,maxArgs:2,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=w(n);if(r instanceof a)return r;if(r<=0)return new a("#NUM!","LOG requires a positive number");let s=10;if(e.length>=2){let u=o.evaluate(e[1],t);if(u instanceof a)return u;let l=w(u);if(l instanceof a)return l;if(l<=0||l===1)return new a("#NUM!","LOG base must be positive and not 1");s=l;}return Math.log(r)/Math.log(s)}}),i.set("LN",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=w(n);return r instanceof a?r:r<=0?new a("#NUM!","LN requires a positive number"):Math.log(r)}}),i.set("EXP",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=w(n);return r instanceof a?r:Math.exp(r)}}),i.set("PI",{minArgs:0,maxArgs:0,evaluate(){return Math.PI}}),i.set("RAND",{minArgs:0,maxArgs:0,evaluate(){return Math.random()}}),i.set("RANDBETWEEN",{minArgs:2,maxArgs:2,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=w(n);if(r instanceof a)return r;let s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=w(s);if(u instanceof a)return u;let l=Math.ceil(r),c=Math.floor(u);return l>c?new a("#NUM!","RANDBETWEEN bottom must be <= top"):Math.floor(Math.random()*(c-l+1))+l}}),i.set("MROUND",{minArgs:2,maxArgs:2,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=w(n);if(r instanceof a)return r;let s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=w(s);return u instanceof a?u:u===0?0:r>0&&u<0||r<0&&u>0?new a("#NUM!","MROUND: number and multiple must have the same sign"):Math.round(r/u)*u}}),i.set("QUOTIENT",{minArgs:2,maxArgs:2,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=w(n);if(r instanceof a)return r;let s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=w(s);return u instanceof a?u:u===0?new a("#DIV/0!","QUOTIENT: division by zero"):Math.trunc(r/u)}}),i.set("COMBIN",{minArgs:2,maxArgs:2,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=w(n);if(r instanceof a)return r;let s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=w(s);if(u instanceof a)return u;let l=Math.trunc(r),c=Math.trunc(u);if(l<0||c<0)return new a("#NUM!","COMBIN: n and k must be non-negative");if(c>l)return new a("#NUM!","COMBIN: k must be <= n");if(c===0||c===l)return 1;let f=Math.min(c,l-c),m=1;for(let d=0;d<f;d++)m=m*(l-d)/(d+1);return Math.round(m)}}),i.set("PERMUT",{minArgs:2,maxArgs:2,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=w(n);if(r instanceof a)return r;let s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=w(s);if(u instanceof a)return u;let l=Math.trunc(r),c=Math.trunc(u);if(l<0||c<0)return new a("#NUM!","PERMUT: n and k must be non-negative");if(c>l)return new a("#NUM!","PERMUT: k must be <= n");let f=1;for(let m=0;m<c;m++)f*=l-m;return f}}),i.set("FACT",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=w(n);if(r instanceof a)return r;let s=Math.trunc(r);if(s<0)return new a("#NUM!","FACT: argument must be non-negative");if(s>170)return new a("#NUM!","FACT: argument too large (>170)");let u=1;for(let l=2;l<=s;l++)u*=l;return u}}),i.set("GCD",{minArgs:1,maxArgs:-1,evaluate(e,t,o){let n=[];for(let s of e){let u=o.evaluate(s,t);if(u instanceof a)return u;let l=w(u);if(l instanceof a)return l;let c=Math.trunc(Math.abs(l));n.push(c);}if(n.length===0)return new a("#NUM!","GCD: no arguments");let r=n[0];for(let s=1;s<n.length;s++)r=te(r,n[s]);return r}}),i.set("LCM",{minArgs:1,maxArgs:-1,evaluate(e,t,o){let n=[];for(let s of e){let u=o.evaluate(s,t);if(u instanceof a)return u;let l=w(u);if(l instanceof a)return l;let c=Math.trunc(Math.abs(l));n.push(c);}if(n.length===0)return new a("#NUM!","LCM: no arguments");let r=n[0];for(let s=1;s<n.length;s++){let u=te(r,n[s]);if(u===0){r=0;break}r=r/u*n[s];}return r}});}function te(i,e){for(;e!==0;){let t=e;e=i%e,i=t;}return i}function z(i,e,t){let o=[];for(let n of i)if(n.kind==="range"){let r=e.getRangeValues({start:n.start,end:n.end});for(let s of r)for(let u of s)o.push(u);}else o.push(t.evaluate(n,e));return o}function oe(i){i.set("IF",{minArgs:2,maxArgs:3,evaluate(e,t,o){let n=o.evaluate(e[0],t);return n instanceof a?n:n?o.evaluate(e[1],t):e.length>=3?o.evaluate(e[2],t):false}}),i.set("AND",{minArgs:1,maxArgs:-1,evaluate(e,t,o){let n=z(e,t,o);for(let r of n){if(r instanceof a)return r;if(!r)return false}return true}}),i.set("OR",{minArgs:1,maxArgs:-1,evaluate(e,t,o){let n=z(e,t,o);for(let r of n){if(r instanceof a)return r;if(r)return true}return false}}),i.set("NOT",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);return n instanceof a?n:!n}}),i.set("IFERROR",{minArgs:2,maxArgs:2,evaluate(e,t,o){let n=o.evaluate(e[0],t);return n instanceof a?o.evaluate(e[1],t):n}}),i.set("IFNA",{minArgs:2,maxArgs:2,evaluate(e,t,o){let n=o.evaluate(e[0],t);return n instanceof a&&n.type==="#N/A"?o.evaluate(e[1],t):n}}),i.set("IFS",{minArgs:2,maxArgs:-1,evaluate(e,t,o){if(e.length%2!==0)return new a("#VALUE!","IFS requires pairs of condition, value");for(let n=0;n<e.length;n+=2){let r=o.evaluate(e[n],t);if(r instanceof a)return r;if(r)return o.evaluate(e[n+1],t)}return new a("#N/A","IFS no condition was TRUE")}}),i.set("SWITCH",{minArgs:3,maxArgs:-1,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=(e.length-1)%2!==0,s=r?(e.length-2)/2:(e.length-1)/2;for(let u=0;u<s;u++){let l=o.evaluate(e[1+u*2],t);if(l instanceof a)return l;if(n===l)return o.evaluate(e[2+u*2],t)}return r?o.evaluate(e[e.length-1],t):new a("#N/A","SWITCH no match found")}}),i.set("CHOOSE",{minArgs:2,maxArgs:-1,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;if(typeof n!="number")return new a("#VALUE!","CHOOSE index must be a number");let r=Math.trunc(n);return r<1||r>=e.length?new a("#VALUE!","CHOOSE index out of range"):o.evaluate(e[r],t)}}),i.set("XOR",{minArgs:1,maxArgs:-1,evaluate(e,t,o){let n=z(e,t,o),r=0;for(let s of n){if(s instanceof a)return s;s&&r++;}return r%2===1}});}function ae(i){i.set("VLOOKUP",{minArgs:3,maxArgs:4,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;if(e[1].kind!=="range")return new a("#VALUE!","VLOOKUP table_array must be a range");let r=t.getRangeValues({start:e[1].start,end:e[1].end}),s=o.evaluate(e[2],t);if(s instanceof a)return s;let u=w(s);if(u instanceof a)return u;if(u<1)return new a("#VALUE!","VLOOKUP col_index must be >= 1");if(r.length>0&&u>r[0].length)return new a("#REF!","VLOOKUP col_index exceeds table columns");let l=true;if(e.length>=4){let m=o.evaluate(e[3],t);if(m instanceof a)return m;l=!!m;}let c=Math.trunc(u)-1,f=typeof n=="string"?n.toLowerCase():null;if(l){let m=-1;for(let d=0;d<r.length;d++){let g=r[d][0];if(g!=null){if(typeof n=="number"&&typeof g=="number")if(g<=n)m=d;else break;else if(f!==null&&typeof g=="string")if(g.toLowerCase()<=f)m=d;else break}}return m===-1?new a("#N/A","VLOOKUP no match found"):r[m][c]??null}else {for(let m=0;m<r.length;m++){let d=r[m][0];if(f!==null&&typeof d=="string"){if(d.toLowerCase()===f)return r[m][c]??null}else if(d===n)return r[m][c]??null}return new a("#N/A","VLOOKUP no exact match found")}}}),i.set("INDEX",{minArgs:2,maxArgs:3,evaluate(e,t,o){if(e[0].kind!=="range")return new a("#VALUE!","INDEX first argument must be a range");let n=t.getRangeValues({start:e[0].start,end:e[0].end}),r=o.evaluate(e[1],t);if(r instanceof a)return r;let s=w(r);if(s instanceof a)return s;let u=1;if(e.length>=3){let f=o.evaluate(e[2],t);if(f instanceof a)return f;let m=w(f);if(m instanceof a)return m;u=m;}let l=Math.trunc(s)-1,c=Math.trunc(u)-1;return l<0||l>=n.length?new a("#REF!","INDEX row out of bounds"):c<0||n.length>0&&c>=n[0].length?new a("#REF!","INDEX column out of bounds"):n[l][c]??null}}),i.set("HLOOKUP",{minArgs:3,maxArgs:4,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;if(e[1].kind!=="range")return new a("#VALUE!","HLOOKUP table_array must be a range");let r=t.getRangeValues({start:e[1].start,end:e[1].end}),s=o.evaluate(e[2],t);if(s instanceof a)return s;let u=w(s);if(u instanceof a)return u;if(u<1)return new a("#VALUE!","HLOOKUP row_index must be >= 1");if(u>r.length)return new a("#REF!","HLOOKUP row_index exceeds table rows");let l=true;if(e.length>=4){let d=o.evaluate(e[3],t);if(d instanceof a)return d;l=!!d;}let c=Math.trunc(u)-1,f=r[0]||[],m=typeof n=="string"?n.toLowerCase():null;if(l){let d=-1;for(let g=0;g<f.length;g++){let p=f[g];if(p!=null){if(typeof n=="number"&&typeof p=="number")if(p<=n)d=g;else break;else if(m!==null&&typeof p=="string")if(p.toLowerCase()<=m)d=g;else break}}return d===-1?new a("#N/A","HLOOKUP no match found"):r[c][d]??null}else {for(let d=0;d<f.length;d++){let g=f[d];if(m!==null&&typeof g=="string"){if(g.toLowerCase()===m)return r[c][d]??null}else if(g===n)return r[c][d]??null}return new a("#N/A","HLOOKUP no exact match found")}}}),i.set("XLOOKUP",{minArgs:3,maxArgs:6,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;if(e[1].kind!=="range")return new a("#VALUE!","XLOOKUP lookup_array must be a range");let r=t.getRangeValues({start:e[1].start,end:e[1].end});if(e[2].kind!=="range")return new a("#VALUE!","XLOOKUP return_array must be a range");let s=t.getRangeValues({start:e[2].start,end:e[2].end}),u=new a("#N/A","XLOOKUP no match found");e.length>=4&&(u=o.evaluate(e[3],t));let l=0;if(e.length>=5){let h=o.evaluate(e[4],t);if(h instanceof a)return h;let R=w(h);if(R instanceof a)return R;l=Math.trunc(R);}let c=1;if(e.length>=6){let h=o.evaluate(e[5],t);if(h instanceof a)return h;let R=w(h);if(R instanceof a)return R;c=Math.trunc(R);}let f=r.length===1,m=f?r[0].length:r.length,d=f?h=>r[0][h]:h=>r[h][0],g=typeof n=="string"?n.toLowerCase():null,p=(h,R)=>g!==null&&typeof h=="string"?h.toLowerCase()===g:h===R,A=-1;if(l===0){let h=c>=0?0:m-1,R=c>=0?m:-1,b=c>=0?1:-1;for(let S=h;S!==R;S+=b)if(p(d(S),n)){A=S;break}}else if(l===-1){let h=-1;for(let R=0;R<m;R++){let b=d(R);if(p(b,n)){A=R;break}typeof n=="number"&&typeof b=="number"&&b<n&&(h===-1||b>d(h))&&(h=R);}A===-1&&(A=h);}else if(l===1){let h=-1;for(let R=0;R<m;R++){let b=d(R);if(p(b,n)){A=R;break}typeof n=="number"&&typeof b=="number"&&b>n&&(h===-1||b<d(h))&&(h=R);}A===-1&&(A=h);}return A===-1?u:s.length===1?s[0][A]??null:s[A]?.[0]??null}}),i.set("MATCH",{minArgs:2,maxArgs:3,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;if(e[1].kind!=="range")return new a("#VALUE!","MATCH lookup_array must be a range");let r=t.getRangeValues({start:e[1].start,end:e[1].end}),s=r.length===1,u=s?r[0]:r,l=s?d=>u[d]:d=>u[d][0],c=u.length,f=1;if(e.length>=3){let d=o.evaluate(e[2],t);if(d instanceof a)return d;let g=w(d);if(g instanceof a)return g;f=g;}let m=typeof n=="string"?n.toLowerCase():null;if(f===0){for(let d=0;d<c;d++){let g=l(d);if(m!==null&&typeof g=="string"){if(g.toLowerCase()===m)return d+1}else if(g===n)return d+1}return new a("#N/A","MATCH no exact match found")}else if(f===1){let d=-1;for(let g=0;g<c;g++){let p=l(g);if(p!=null){if(typeof n=="number"&&typeof p=="number")if(p<=n)d=g;else break;else if(m!==null&&typeof p=="string")if(p.toLowerCase()<=m)d=g;else break}}return d===-1?new a("#N/A","MATCH no match found"):d+1}else {let d=-1;for(let g=0;g<c;g++){let p=l(g);if(p!=null){if(typeof n=="number"&&typeof p=="number")if(p>=n)d=g;else break;else if(m!==null&&typeof p=="string")if(p.toLowerCase()>=m)d=g;else break}}return d===-1?new a("#N/A","MATCH no match found"):d+1}}});}function se(i){i.set("CONCATENATE",{minArgs:1,maxArgs:-1,evaluate(e,t,o){let n=T(e,t,o),r=[];for(let s of n){if(s instanceof a)return s;r.push(N(s));}return r.join("")}}),i.set("CONCAT",{minArgs:1,maxArgs:-1,evaluate(e,t,o){let n=T(e,t,o),r=[];for(let s of n){if(s instanceof a)return s;r.push(N(s));}return r.join("")}}),i.set("UPPER",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);return n instanceof a?n:N(n).toUpperCase()}}),i.set("LOWER",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);return n instanceof a?n:N(n).toLowerCase()}}),i.set("TRIM",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);return n instanceof a?n:N(n).trim()}}),i.set("LEFT",{minArgs:1,maxArgs:2,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=N(n),s=1;if(e.length>=2){let u=o.evaluate(e[1],t);if(u instanceof a)return u;let l=w(u);if(l instanceof a)return l;s=Math.trunc(l);}return s<0?new a("#VALUE!","LEFT num_chars must be >= 0"):r.substring(0,s)}}),i.set("RIGHT",{minArgs:1,maxArgs:2,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=N(n),s=1;if(e.length>=2){let u=o.evaluate(e[1],t);if(u instanceof a)return u;let l=w(u);if(l instanceof a)return l;s=Math.trunc(l);}return s<0?new a("#VALUE!","RIGHT num_chars must be >= 0"):r.substring(Math.max(0,r.length-s))}}),i.set("MID",{minArgs:3,maxArgs:3,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=N(n),s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=w(s);if(u instanceof a)return u;let l=o.evaluate(e[2],t);if(l instanceof a)return l;let c=w(l);if(c instanceof a)return c;let f=Math.trunc(u),m=Math.trunc(c);return f<1?new a("#VALUE!","MID start_num must be >= 1"):m<0?new a("#VALUE!","MID num_chars must be >= 0"):r.substring(f-1,f-1+m)}}),i.set("LEN",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);return n instanceof a?n:N(n).length}}),i.set("SUBSTITUTE",{minArgs:3,maxArgs:4,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=N(n),s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=N(s),l=o.evaluate(e[2],t);if(l instanceof a)return l;let c=N(l);if(e.length>=4){let f=o.evaluate(e[3],t);if(f instanceof a)return f;let m=w(f);if(m instanceof a)return m;let d=Math.trunc(m);if(d<1)return new a("#VALUE!","SUBSTITUTE instance_num must be >= 1");let g=0,p="",A=0;for(;A<=r.length;){let v=r.indexOf(u,A);if(v===-1){p+=r.substring(A);break}if(g++,g===d){p+=r.substring(A,v)+c,p+=r.substring(v+u.length);break}else p+=r.substring(A,v+u.length),A=v+u.length;}return p}else return u===""?r:r.split(u).join(c)}}),i.set("FIND",{minArgs:2,maxArgs:3,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=N(n),s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=N(s),l=1;if(e.length>=3){let f=o.evaluate(e[2],t);if(f instanceof a)return f;let m=w(f);if(m instanceof a)return m;l=Math.trunc(m);}if(l<1)return new a("#VALUE!","FIND start_num must be >= 1");let c=u.indexOf(r,l-1);return c===-1?new a("#VALUE!","FIND text not found"):c+1}}),i.set("SEARCH",{minArgs:2,maxArgs:3,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=N(n).toLowerCase(),s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=N(s).toLowerCase(),l=1;if(e.length>=3){let f=o.evaluate(e[2],t);if(f instanceof a)return f;let m=w(f);if(m instanceof a)return m;l=Math.trunc(m);}if(l<1)return new a("#VALUE!","SEARCH start_num must be >= 1");let c=u.indexOf(r,l-1);return c===-1?new a("#VALUE!","SEARCH text not found"):c+1}}),i.set("REPLACE",{minArgs:4,maxArgs:4,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=N(n),s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=w(s);if(u instanceof a)return u;let l=o.evaluate(e[2],t);if(l instanceof a)return l;let c=w(l);if(c instanceof a)return c;let f=o.evaluate(e[3],t);if(f instanceof a)return f;let m=N(f),d=Math.trunc(u)-1,g=Math.trunc(c);return r.substring(0,d)+m+r.substring(d+g)}}),i.set("REPT",{minArgs:2,maxArgs:2,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=N(n),s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=w(s);if(u instanceof a)return u;let l=Math.trunc(u);return l<0?new a("#VALUE!","REPT number must be >= 0"):r.repeat(l)}}),i.set("EXACT",{minArgs:2,maxArgs:2,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=o.evaluate(e[1],t);return r instanceof a?r:N(n)===N(r)}}),i.set("PROPER",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);return n instanceof a?n:N(n).toLowerCase().replace(/\b\w/g,r=>r.toUpperCase())}}),i.set("CLEAN",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);return n instanceof a?n:N(n).replace(/[\x00-\x1F]/g,"")}}),i.set("CHAR",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=w(n);if(r instanceof a)return r;let s=Math.trunc(r);return s<1||s>65535?new a("#VALUE!","CHAR number must be 1-65535"):String.fromCharCode(s)}}),i.set("CODE",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=N(n);return r.length===0?new a("#VALUE!","CODE requires non-empty text"):r.charCodeAt(0)}}),i.set("TEXT",{minArgs:2,maxArgs:2,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=o.evaluate(e[1],t);if(r instanceof a)return r;let s=N(r),u=w(n);if(u instanceof a)return N(n);if(s.includes("%")){let d=(s.match(/0/g)||[]).length-1;return (u*100).toFixed(Math.max(0,d))+"%"}let l=s.match(/\.(0+)/),c=l?l[1].length:0,f=s.includes(","),m=u.toFixed(c);if(f){let[d,g]=m.split("."),p=d.replace(/\B(?=(\d{3})+(?!\d))/g,",");return g?p+"."+g:p}return m}}),i.set("VALUE",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a||typeof n=="number")return n;let r=N(n).trim(),s=r.endsWith("%"),u=r.replace(/[,$%\s]/g,""),l=Number(u);return isNaN(l)?new a("#VALUE!","VALUE cannot convert text to number"):s?l/100:l}}),i.set("TEXTJOIN",{minArgs:3,maxArgs:-1,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=N(n),s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=!!s,l=[];for(let c=2;c<e.length;c++){let f=e[c];if(f.kind==="range"){let m=t.getRangeValues({start:f.start,end:f.end});for(let d of m)for(let g of d){if(g instanceof a)return g;let p=N(g);(!u||p!=="")&&l.push(p);}}else {let m=o.evaluate(e[c],t);if(m instanceof a)return m;let d=N(m);(!u||d!=="")&&l.push(d);}}return l.join(r)}}),i.set("DOLLAR",{minArgs:1,maxArgs:2,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=w(n);if(r instanceof a)return r;let s=2;if(e.length>=2){let g=o.evaluate(e[1],t);if(g instanceof a)return g;let p=w(g);if(p instanceof a)return p;s=Math.trunc(p);}let u=Math.abs(r),l=s>=0?u.toFixed(s):(Math.round(u/Math.pow(10,-s))*Math.pow(10,-s)).toFixed(0),[c,f]=l.split("."),m=c.replace(/\B(?=(\d{3})+(?!\d))/g,","),d=f!==void 0?`${m}.${f}`:m;return r<0?`($${d})`:`$${d}`}}),i.set("FIXED",{minArgs:1,maxArgs:3,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=w(n);if(r instanceof a)return r;let s=2;if(e.length>=2){let p=o.evaluate(e[1],t);if(p instanceof a)return p;let A=w(p);if(A instanceof a)return A;s=Math.trunc(A);}let u=false;if(e.length>=3){let p=o.evaluate(e[2],t);if(p instanceof a)return p;u=!!p;}let l=Math.abs(r),c=s>=0?l.toFixed(s):(Math.round(l/Math.pow(10,-s))*Math.pow(10,-s)).toFixed(0);if(u)return r<0?`-${c}`:c;let[f,m]=c.split("."),d=f.replace(/\B(?=(\d{3})+(?!\d))/g,","),g=m!==void 0?`${d}.${m}`:d;return r<0?`-${g}`:g}}),i.set("T",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);return n instanceof a||typeof n=="string"?n:""}}),i.set("N",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);return n instanceof a||typeof n=="number"?n:typeof n=="boolean"?n?1:0:n instanceof Date?n.getTime():0}}),i.set("FORMULATEXT",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=e[0];if(n.kind!=="cellRef")return new a("#N/A","FORMULATEXT requires a cell reference");if(!t.getCellFormula)return new a("#N/A","FORMULATEXT not supported in this context");let r=t.getCellFormula(n.address);return r===void 0?new a("#N/A","Cell does not contain a formula"):r}}),i.set("NUMBERVALUE",{minArgs:1,maxArgs:3,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a||typeof n=="number")return n;let r=N(n).trim(),s=".",u=",",l=e.length>=2,c=e.length>=3;if(l){let g=o.evaluate(e[1],t);if(g instanceof a)return g;if(s=N(g),s.length!==1)return new a("#VALUE!","NUMBERVALUE decimal separator must be 1 character");c||(u=s===","?".":",");}if(c){let g=o.evaluate(e[2],t);if(g instanceof a)return g;if(u=N(g),u.length!==1)return new a("#VALUE!","NUMBERVALUE group separator must be 1 character")}if(s===u)return new a("#VALUE!","NUMBERVALUE separators must be different");let f=r.endsWith("%");f&&(r=r.slice(0,-1).trim());let m=u.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");if(r=r.replace(new RegExp(m,"g"),""),s!=="."){let g=s.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");r=r.replace(new RegExp(g),".");}let d=Number(r);return isNaN(d)?new a("#VALUE!",`NUMBERVALUE cannot parse "${N(n)}"`):f?d/100:d}}),i.set("PHONETIC",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);return n instanceof a?n:N(n)}});}function F(i){if(i instanceof a)return i;if(i instanceof Date)return isNaN(i.getTime())?new a("#VALUE!","Invalid date"):i;if(typeof i=="string"){let e=new Date(i);return isNaN(e.getTime())?new a("#VALUE!",`Cannot parse "${i}" as date`):e}if(typeof i=="number"){let e=new Date(i);return isNaN(e.getTime())?new a("#VALUE!","Invalid numeric date"):e}return new a("#VALUE!","Cannot convert value to date")}function ue(i){i.set("TODAY",{minArgs:0,maxArgs:0,evaluate(e,t){let o=t.now();return new Date(o.getFullYear(),o.getMonth(),o.getDate())}}),i.set("NOW",{minArgs:0,maxArgs:0,evaluate(e,t){return t.now()}}),i.set("YEAR",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=F(n);return r instanceof a?r:r.getFullYear()}}),i.set("MONTH",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=F(n);return r instanceof a?r:r.getMonth()+1}}),i.set("DAY",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=F(n);return r instanceof a?r:r.getDate()}}),i.set("DATE",{minArgs:3,maxArgs:3,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=w(n);if(r instanceof a)return r;let s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=w(s);if(u instanceof a)return u;let l=o.evaluate(e[2],t);if(l instanceof a)return l;let c=w(l);return c instanceof a?c:new Date(Math.trunc(r),Math.trunc(u)-1,Math.trunc(c))}}),i.set("DATEDIF",{minArgs:3,maxArgs:3,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=F(n);if(r instanceof a)return r;let s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=F(s);if(u instanceof a)return u;let l=o.evaluate(e[2],t);if(l instanceof a)return l;let c=String(l).toUpperCase();if(r>u)return new a("#NUM!","DATEDIF start date must be <= end date");switch(c){case "Y":{let f=u.getFullYear()-r.getFullYear();return (u.getMonth()<r.getMonth()||u.getMonth()===r.getMonth()&&u.getDate()<r.getDate())&&f--,f}case "M":{let f=(u.getFullYear()-r.getFullYear())*12+u.getMonth()-r.getMonth();return u.getDate()<r.getDate()&&f--,f}case "D":return Math.floor((u.getTime()-r.getTime())/864e5);default:return new a("#VALUE!","DATEDIF unit must be Y, M, or D")}}}),i.set("EDATE",{minArgs:2,maxArgs:2,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=F(n);if(r instanceof a)return r;let s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=w(s);if(u instanceof a)return u;let l=new Date(r);return l.setMonth(l.getMonth()+Math.trunc(u)),l}}),i.set("EOMONTH",{minArgs:2,maxArgs:2,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=F(n);if(r instanceof a)return r;let s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=w(s);return u instanceof a?u:new Date(r.getFullYear(),r.getMonth()+Math.trunc(u)+1,0)}}),i.set("WEEKDAY",{minArgs:1,maxArgs:2,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=F(n);if(r instanceof a)return r;let s=1;if(e.length>=2){let l=o.evaluate(e[1],t);if(l instanceof a)return l;let c=w(l);if(c instanceof a)return c;s=Math.trunc(c);}let u=r.getDay();switch(s){case 1:return u+1;case 2:return u===0?7:u;case 3:return u===0?6:u-1;default:return new a("#VALUE!","WEEKDAY return_type must be 1, 2, or 3")}}}),i.set("HOUR",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=F(n);return r instanceof a?r:r.getHours()}}),i.set("MINUTE",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=F(n);return r instanceof a?r:r.getMinutes()}}),i.set("SECOND",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=F(n);return r instanceof a?r:r.getSeconds()}}),i.set("NETWORKDAYS",{minArgs:2,maxArgs:2,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=F(n);if(r instanceof a)return r;let s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=F(s);if(u instanceof a)return u;let l=new Date(r.getFullYear(),r.getMonth(),r.getDate()),c=new Date(u.getFullYear(),u.getMonth(),u.getDate()),f=c>=l?1:-1,[m,d]=f===1?[l,c]:[c,l],g=0,p=new Date(m);for(;p<=d;){let A=p.getDay();A!==0&&A!==6&&g++,p.setDate(p.getDate()+1);}return g*f}}),i.set("DAYS",{minArgs:2,maxArgs:2,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=F(n);if(r instanceof a)return r;let s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=F(s);if(u instanceof a)return u;let l=Date.UTC(r.getFullYear(),r.getMonth(),r.getDate()),c=Date.UTC(u.getFullYear(),u.getMonth(),u.getDate());return Math.round((l-c)/864e5)}}),i.set("DAYS360",{minArgs:2,maxArgs:3,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=F(n);if(r instanceof a)return r;let s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=F(s);if(u instanceof a)return u;let l=false;if(e.length>=3){let A=o.evaluate(e[2],t);if(A instanceof a)return A;l=!!A;}let c=r.getMonth()+1,f=u.getMonth()+1,m=r.getDate(),d=u.getDate(),g=r.getFullYear(),p=u.getFullYear();return l?(m===31&&(m=30),d===31&&(d=30)):(m===31&&(m=30),d===31&&m===30&&(d=30)),(p-g)*360+(f-c)*30+(d-m)}}),i.set("ISOWEEKNUM",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=F(n);if(r instanceof a)return r;let s=new Date(Date.UTC(r.getFullYear(),r.getMonth(),r.getDate())),u=s.getUTCDay()||7;s.setUTCDate(s.getUTCDate()+4-u);let l=new Date(Date.UTC(s.getUTCFullYear(),0,1));return Math.ceil(((s.getTime()-l.getTime())/864e5+1)/7)}}),i.set("YEARFRAC",{minArgs:2,maxArgs:3,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=F(n);if(r instanceof a)return r;let s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=F(s);if(u instanceof a)return u;let l=0;if(e.length>=3){let A=o.evaluate(e[2],t);if(A instanceof a)return A;let v=w(A);if(v instanceof a)return v;l=Math.trunc(v);}let c=r.getFullYear(),f=r.getMonth()+1,m=r.getDate(),d=u.getFullYear(),g=u.getMonth()+1,p=u.getDate();switch(l){case 0:{let A=m===31?30:m,v=p===31&&A===30?30:p;return ((d-c)*360+(g-f)*30+(v-A))/360}case 1:{let v=(Date.UTC(d,g-1,p)-Date.UTC(c,f-1,m))/864e5,h=d===c?Se(c)?366:365:(Date.UTC(d+1,0,1)-Date.UTC(c,0,1))/864e5/(d-c+1);return v/h}case 3:return (Date.UTC(d,g-1,p)-Date.UTC(c,f-1,m))/864e5/365;default:return new a("#VALUE!","YEARFRAC basis must be 0, 1, or 3")}}}),i.set("DATEVALUE",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=typeof n=="string"?n:String(n),s=new Date(r);return isNaN(s.getTime())?new a("#VALUE!",`DATEVALUE cannot parse "${r}"`):new Date(s.getFullYear(),s.getMonth(),s.getDate())}}),i.set("TIMEVALUE",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=typeof n=="string"?n:String(n),s=r.match(/^(\d{1,2}):(\d{2})(?::(\d{2}))?(?:\s*(AM|PM))?$/i);if(!s)return new a("#VALUE!",`TIMEVALUE cannot parse "${r}"`);let u=parseInt(s[1],10),l=parseInt(s[2],10),c=s[3]?parseInt(s[3],10):0,f=s[4]?s[4].toUpperCase():null;return f==="PM"&&u<12&&(u+=12),f==="AM"&&u===12&&(u=0),u>23||l>59||c>59?new a("#VALUE!","TIMEVALUE: invalid time component"):(u*3600+l*60+c)/86400}}),i.set("TIME",{minArgs:3,maxArgs:3,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=w(n);if(r instanceof a)return r;let s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=w(s);if(u instanceof a)return u;let l=o.evaluate(e[2],t);if(l instanceof a)return l;let c=w(l);return c instanceof a?c:(Math.trunc(r)*3600+Math.trunc(u)*60+Math.trunc(c))%86400/86400}}),i.set("WORKDAY",{minArgs:2,maxArgs:3,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=F(n);if(r instanceof a)return r;let s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=w(s);if(u instanceof a)return u;let l=Math.trunc(u),c=new Set;if(e.length>=3){let g=e[2],p;g.kind==="range"?p=t.getRangeValues({start:g.start,end:g.end}).flat():p=[o.evaluate(g,t)];for(let A of p){if(A==null)continue;let v=F(A);v instanceof a||c.add(`${v.getFullYear()}-${v.getMonth()}-${v.getDate()}`);}}let f=new Date(r.getFullYear(),r.getMonth(),r.getDate()),m=l>=0?1:-1,d=Math.abs(l);for(;d>0;){f.setDate(f.getDate()+m);let g=f.getDay();if(g===0||g===6)continue;let p=`${f.getFullYear()}-${f.getMonth()}-${f.getDate()}`;c.has(p)||d--;}return f}}),i.set("WORKDAY.INTL",{minArgs:2,maxArgs:4,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=F(n);if(r instanceof a)return r;let s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=w(s);if(u instanceof a)return u;let l=Math.trunc(u),c=[false,false,false,false,false,true,true];if(e.length>=3){let p=o.evaluate(e[2],t);if(p instanceof a)return p;if(typeof p=="string"&&/^[01]{7}$/.test(p))c=p.split("").map(A=>A==="1");else {let A=w(p);if(A instanceof a)return A;let v=ke(Math.trunc(A));if(!v)return new a("#VALUE!","WORKDAY.INTL invalid weekend number");c=v;}}let f=new Set;if(e.length>=4){let p=e[3],A;p.kind==="range"?A=t.getRangeValues({start:p.start,end:p.end}).flat():A=[o.evaluate(p,t)];for(let v of A){if(v==null)continue;let h=F(v);h instanceof a||f.add(`${h.getFullYear()}-${h.getMonth()}-${h.getDate()}`);}}let m=new Date(r.getFullYear(),r.getMonth(),r.getDate()),d=l>=0?1:-1,g=Math.abs(l);for(;g>0;){m.setDate(m.getDate()+d);let p=m.getDay(),A=p===0?6:p-1;if(c[A])continue;let v=`${m.getFullYear()}-${m.getMonth()}-${m.getDate()}`;f.has(v)||g--;}return m}});}function Se(i){return i%4===0&&i%100!==0||i%400===0}function ke(i){let e=[[5,6],[6,0],[0,1],[1,2],[2,3],[3,4],[4,5]];if(i>=1&&i<=7){let t=[false,false,false,false,false,false,false],[o,n]=e[i-1];return t[o]=true,t[n]=true,t}if(i>=11&&i<=17){let t=[false,false,false,false,false,false,false],o=[6,0,1,2,3,4,5];return t[o[i-11]]=true,t}return null}function L(i,e){return {op:i,value:e,valueLower:typeof e=="string"?e.toLowerCase():null}}function K(i){if(typeof i=="number"||typeof i!="string")return L("=",i);let e=i.trim();return e.startsWith(">=")?L(">=",V(e.substring(2).trim())):e.startsWith("<=")?L("<=",V(e.substring(2).trim())):e.startsWith("<>")?L("<>",V(e.substring(2).trim())):e.startsWith(">")?L(">",V(e.substring(1).trim())):e.startsWith("<")?L("<",V(e.substring(1).trim())):e.startsWith("=")?L("=",V(e.substring(1).trim())):L("=",V(e))}function V(i){let e=Number(i);return !isNaN(e)&&i!==""?e:i}function _(i,e){let{op:t,value:o}=e,n=i;if(typeof o=="number"&&typeof i!="number"){let r=w(i);if(r instanceof a)return false;n=r;}if(typeof n=="string"&&e.valueLower!==null){let r=n.toLowerCase(),s=e.valueLower;switch(t){case "=":return r===s;case "<>":return r!==s;case ">":return r>s;case "<":return r<s;case ">=":return r>=s;case "<=":return r<=s}}if(typeof n=="number"&&typeof o=="number")switch(t){case "=":return n===o;case "<>":return n!==o;case ">":return n>o;case "<":return n<o;case ">=":return n>=o;case "<=":return n<=o}return t==="="?n===o:t==="<>"?n!==o:false}function ie(i){i.set("SUMIF",{minArgs:2,maxArgs:3,evaluate(e,t,o){if(e[0].kind!=="range")return new a("#VALUE!","SUMIF range must be a cell range");let n=t.getRangeValues({start:e[0].start,end:e[0].end}),r=o.evaluate(e[1],t);if(r instanceof a)return r;let s=K(r),u;if(e.length>=3){if(e[2].kind!=="range")return new a("#VALUE!","SUMIF sum_range must be a cell range");u=t.getRangeValues({start:e[2].start,end:e[2].end});}else u=n;let l=0;for(let c=0;c<n.length;c++)for(let f=0;f<n[c].length;f++)if(_(n[c][f],s)){let m=u[c]&&u[c][f]!==void 0?u[c][f]:null,d=w(m);typeof d=="number"&&(l+=d);}return l}}),i.set("COUNTIF",{minArgs:2,maxArgs:2,evaluate(e,t,o){if(e[0].kind!=="range")return new a("#VALUE!","COUNTIF range must be a cell range");let n=t.getRangeValues({start:e[0].start,end:e[0].end}),r=o.evaluate(e[1],t);if(r instanceof a)return r;let s=K(r),u=0;for(let l=0;l<n.length;l++)for(let c=0;c<n[l].length;c++)_(n[l][c],s)&&u++;return u}}),i.set("AVERAGEIF",{minArgs:2,maxArgs:3,evaluate(e,t,o){if(e[0].kind!=="range")return new a("#VALUE!","AVERAGEIF range must be a cell range");let n=t.getRangeValues({start:e[0].start,end:e[0].end}),r=o.evaluate(e[1],t);if(r instanceof a)return r;let s=K(r),u;if(e.length>=3){if(e[2].kind!=="range")return new a("#VALUE!","AVERAGEIF avg_range must be a cell range");u=t.getRangeValues({start:e[2].start,end:e[2].end});}else u=n;let l=0,c=0;for(let f=0;f<n.length;f++)for(let m=0;m<n[f].length;m++)if(_(n[f][m],s)){let d=u[f]&&u[f][m]!==void 0?u[f][m]:null,g=w(d);typeof g=="number"&&(l+=g,c++);}return c===0?new a("#DIV/0!","No matching values for AVERAGEIF"):l/c}}),i.set("SUMIFS",{minArgs:3,maxArgs:-1,evaluate(e,t,o){if((e.length-1)%2!==0)return new a("#VALUE!","SUMIFS requires sum_range + pairs of criteria_range, criteria");if(e[0].kind!=="range")return new a("#VALUE!","SUMIFS sum_range must be a cell range");let n=t.getRangeValues({start:e[0].start,end:e[0].end}),r=[];for(let u=1;u<e.length;u+=2){let l=e[u];if(l.kind!=="range")return new a("#VALUE!","SUMIFS criteria_range must be a cell range");let c=t.getRangeValues({start:l.start,end:l.end}),f=o.evaluate(e[u+1],t);if(f instanceof a)return f;r.push({range:c,criteria:K(f)});}let s=0;for(let u=0;u<n.length;u++)for(let l=0;l<n[u].length;l++){let c=true;for(let f of r){let m=f.range[u]?.[l];if(!_(m,f.criteria)){c=false;break}}if(c){let f=w(n[u][l]);typeof f=="number"&&(s+=f);}}return s}}),i.set("COUNTIFS",{minArgs:2,maxArgs:-1,evaluate(e,t,o){if(e.length%2!==0)return new a("#VALUE!","COUNTIFS requires pairs of criteria_range, criteria");let n=[];for(let u=0;u<e.length;u+=2){let l=e[u];if(l.kind!=="range")return new a("#VALUE!","COUNTIFS criteria_range must be a cell range");let c=t.getRangeValues({start:l.start,end:l.end}),f=o.evaluate(e[u+1],t);if(f instanceof a)return f;n.push({range:c,criteria:K(f)});}let r=n[0].range,s=0;for(let u=0;u<r.length;u++)for(let l=0;l<r[u].length;l++){let c=true;for(let f of n){let m=f.range[u]?.[l];if(!_(m,f.criteria)){c=false;break}}c&&s++;}return s}}),i.set("AVERAGEIFS",{minArgs:3,maxArgs:-1,evaluate(e,t,o){if((e.length-1)%2!==0)return new a("#VALUE!","AVERAGEIFS requires avg_range + pairs of criteria_range, criteria");if(e[0].kind!=="range")return new a("#VALUE!","AVERAGEIFS avg_range must be a cell range");let n=t.getRangeValues({start:e[0].start,end:e[0].end}),r=[];for(let l=1;l<e.length;l+=2){let c=e[l];if(c.kind!=="range")return new a("#VALUE!","AVERAGEIFS criteria_range must be a cell range");let f=t.getRangeValues({start:c.start,end:c.end}),m=o.evaluate(e[l+1],t);if(m instanceof a)return m;r.push({range:f,criteria:K(m)});}let s=0,u=0;for(let l=0;l<n.length;l++)for(let c=0;c<n[l].length;c++){let f=true;for(let m of r){let d=m.range[l]?.[c];if(!_(d,m.criteria)){f=false;break}}if(f){let m=w(n[l][c]);typeof m=="number"&&(s+=m,u++);}}return u===0?new a("#DIV/0!","No matching values for AVERAGEIFS"):s/u}});}function le(i){i.set("ISBLANK",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);return n==null||n===""}}),i.set("ISNUMBER",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);return typeof n=="number"&&!isNaN(n)}}),i.set("ISTEXT",{minArgs:1,maxArgs:1,evaluate(e,t,o){return typeof o.evaluate(e[0],t)=="string"}}),i.set("ISERROR",{minArgs:1,maxArgs:1,evaluate(e,t,o){return o.evaluate(e[0],t)instanceof a}}),i.set("ISNA",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);return n instanceof a&&n.type==="#N/A"}}),i.set("TYPE",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);return n instanceof a?16:typeof n=="number"?1:typeof n=="string"?2:typeof n=="boolean"?4:(1)}}),i.set("ISODD",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;if(typeof n=="boolean")return new a("#VALUE!","ISODD requires a number");let r=w(n);return r instanceof a?r:Math.trunc(r)%2!==0}}),i.set("ISEVEN",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;if(typeof n=="boolean")return new a("#VALUE!","ISEVEN requires a number");let r=w(n);return r instanceof a?r:Math.trunc(r)%2===0}}),i.set("ISFORMULA",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=e[0];return n.kind!=="cellRef"||!t.getCellFormula?false:t.getCellFormula(n.address)!==void 0}}),i.set("ISLOGICAL",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);return n instanceof a?false:typeof n=="boolean"}}),i.set("ISNONTEXT",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=o.evaluate(e[0],t);return n instanceof a?true:typeof n!="string"}}),i.set("ISREF",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=e[0];return n.kind==="cellRef"||n.kind==="range"}});}function ce(i){i.set("PMT",{minArgs:3,maxArgs:5,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=w(n);if(r instanceof a)return r;let s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=w(s);if(u instanceof a)return u;let l=o.evaluate(e[2],t);if(l instanceof a)return l;let c=w(l);if(c instanceof a)return c;let f=0;if(e.length>=4){let p=o.evaluate(e[3],t);if(p instanceof a)return p;let A=w(p);if(A instanceof a)return A;f=A;}let m=0;if(e.length>=5){let p=o.evaluate(e[4],t);if(p instanceof a)return p;let A=w(p);if(A instanceof a)return A;m=A;}if(u===0)return new a("#NUM!","PMT: nper cannot be 0");if(r===0)return -(c+f)/u;let d=Math.pow(1+r,u),g=m!==0?1+r:1;return -(c*d+f)/((d-1)/r*g)}}),i.set("FV",{minArgs:3,maxArgs:5,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=w(n);if(r instanceof a)return r;let s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=w(s);if(u instanceof a)return u;let l=o.evaluate(e[2],t);if(l instanceof a)return l;let c=w(l);if(c instanceof a)return c;let f=0;if(e.length>=4){let p=o.evaluate(e[3],t);if(p instanceof a)return p;let A=w(p);if(A instanceof a)return A;f=A;}let m=0;if(e.length>=5){let p=o.evaluate(e[4],t);if(p instanceof a)return p;let A=w(p);if(A instanceof a)return A;m=A;}if(r===0)return -(f+c*u);let d=Math.pow(1+r,u),g=m!==0?1+r:1;return -(f*d+c*g*(d-1)/r)}}),i.set("PV",{minArgs:3,maxArgs:5,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=w(n);if(r instanceof a)return r;let s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=w(s);if(u instanceof a)return u;let l=o.evaluate(e[2],t);if(l instanceof a)return l;let c=w(l);if(c instanceof a)return c;let f=0;if(e.length>=4){let p=o.evaluate(e[3],t);if(p instanceof a)return p;let A=w(p);if(A instanceof a)return A;f=A;}let m=0;if(e.length>=5){let p=o.evaluate(e[4],t);if(p instanceof a)return p;let A=w(p);if(A instanceof a)return A;m=A;}if(r===0)return -c*u-f;let d=Math.pow(1+r,u),g=m!==0?1+r:1;return -(f+c*g*(d-1)/r)/d}}),i.set("NPER",{minArgs:3,maxArgs:5,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=w(n);if(r instanceof a)return r;let s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=w(s);if(u instanceof a)return u;let l=o.evaluate(e[2],t);if(l instanceof a)return l;let c=w(l);if(c instanceof a)return c;let f=0;if(e.length>=4){let v=o.evaluate(e[3],t);if(v instanceof a)return v;let h=w(v);if(h instanceof a)return h;f=h;}let m=0;if(e.length>=5){let v=o.evaluate(e[4],t);if(v instanceof a)return v;let h=w(v);if(h instanceof a)return h;m=h;}if(r===0)return u===0?new a("#NUM!","NPER: pmt cannot be 0 when rate is 0"):-(c+f)/u;let d=m!==0?1+r:1,g=u*d,p=g-f*r,A=g+c*r;return A===0?new a("#DIV/0!","NPER: division by zero"):p/A<=0?new a("#NUM!","NPER: logarithm of non-positive number"):Math.log(p/A)/Math.log(1+r)}}),i.set("RATE",{minArgs:3,maxArgs:6,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=w(n);if(r instanceof a)return r;let s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=w(s);if(u instanceof a)return u;let l=o.evaluate(e[2],t);if(l instanceof a)return l;let c=w(l);if(c instanceof a)return c;let f=0;if(e.length>=4){let v=o.evaluate(e[3],t);if(v instanceof a)return v;let h=w(v);if(h instanceof a)return h;f=h;}let m=0;if(e.length>=5){let v=o.evaluate(e[4],t);if(v instanceof a)return v;let h=w(v);if(h instanceof a)return h;m=h;}let d=.1;if(e.length>=6){let v=o.evaluate(e[5],t);if(v instanceof a)return v;let h=w(v);if(h instanceof a)return h;d=h;}let g=20,p=1e-7,A=d;for(let v=0;v<g;v++){if(A<=-1)return new a("#NUM!","RATE: rate converged to invalid value");let h=Math.pow(1+A,r),R=m!==0?1+A:1,b,S;if(Math.abs(A)<1e-10)b=c+u*r+f,S=c*r+u*r*(r-1)/2;else {b=c*h+u*R*(h-1)/A+f;let I=r*Math.pow(1+A,r-1),C=m!==0?1:0;S=c*I+u*(C*(h-1)/A+R*(I*A-(h-1))/(A*A));}if(Math.abs(S)<1e-15)return new a("#NUM!","RATE: derivative too small, no convergence");let E=b/S;if(A=A-E,Math.abs(E)<p)return A}return new a("#NUM!","RATE: did not converge")}}),i.set("NPV",{minArgs:2,maxArgs:-1,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=w(n);if(r instanceof a)return r;let s=T(e.slice(1),t,o),u=0,l=1;for(let c of s){if(c instanceof a)return c;(typeof c=="number"||typeof c=="boolean")&&(u+=(typeof c=="boolean"?c?1:0:c)/Math.pow(1+r,l),l++);}return u}}),i.set("IRR",{minArgs:1,maxArgs:2,evaluate(e,t,o){let n=T([e[0]],t,o),r=[];for(let f of n){if(f instanceof a)return f;typeof f=="number"?r.push(f):typeof f=="boolean"&&r.push(f?1:0);}if(r.length===0)return new a("#NUM!","IRR: no values");let s=.1;if(e.length>=2){let f=o.evaluate(e[1],t);if(f instanceof a)return f;let m=w(f);if(m instanceof a)return m;s=m;}let u=20,l=1e-7,c=s;for(let f=0;f<u;f++){if(c<=-1)return new a("#NUM!","IRR: rate converged below -1");let m=0,d=0;for(let p=0;p<r.length;p++){let A=Math.pow(1+c,p);m+=r[p]/A,p>0&&(d-=p*r[p]/Math.pow(1+c,p+1));}if(Math.abs(d)<1e-15)return new a("#NUM!","IRR: derivative too small");let g=m/d;if(c=c-g,Math.abs(g)<l)return c}return new a("#NUM!","IRR: did not converge")}}),i.set("SLN",{minArgs:3,maxArgs:3,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=w(n);if(r instanceof a)return r;let s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=w(s);if(u instanceof a)return u;let l=o.evaluate(e[2],t);if(l instanceof a)return l;let c=w(l);return c instanceof a?c:c===0?new a("#DIV/0!","SLN: life cannot be 0"):(r-u)/c}});}function y(i,e,t){let o=T(i,e,t),n=[];for(let r of o){if(r instanceof a)return r;typeof r=="number"?n.push(r):typeof r=="boolean"&&n.push(r?1:0);}return n}function G(i){let e=0;for(let t of i)e+=t;return e/i.length}function fe(i){let e={minArgs:1,maxArgs:-1,evaluate(c,f,m){let d=y(c,f,m);if(d instanceof a)return d;if(d.length<2)return new a("#DIV/0!","STDEV requires at least 2 values");let g=G(d),p=0;for(let A of d)p+=(A-g)*(A-g);return Math.sqrt(p/(d.length-1))}};i.set("STDEV",e),i.set("STDEV.S",e);let t={minArgs:1,maxArgs:-1,evaluate(c,f,m){let d=y(c,f,m);if(d instanceof a)return d;if(d.length===0)return new a("#DIV/0!","STDEVP requires at least 1 value");let g=G(d),p=0;for(let A of d)p+=(A-g)*(A-g);return Math.sqrt(p/d.length)}};i.set("STDEVP",t),i.set("STDEV.P",t);let o={minArgs:1,maxArgs:-1,evaluate(c,f,m){let d=y(c,f,m);if(d instanceof a)return d;if(d.length<2)return new a("#DIV/0!","VAR requires at least 2 values");let g=G(d),p=0;for(let A of d)p+=(A-g)*(A-g);return p/(d.length-1)}};i.set("VAR",o),i.set("VAR.S",o);let n={minArgs:1,maxArgs:-1,evaluate(c,f,m){let d=y(c,f,m);if(d instanceof a)return d;if(d.length===0)return new a("#DIV/0!","VARP requires at least 1 value");let g=G(d),p=0;for(let A of d)p+=(A-g)*(A-g);return p/d.length}};i.set("VARP",n),i.set("VAR.P",n),i.set("CORREL",{minArgs:2,maxArgs:2,evaluate(c,f,m){let d=y([c[0]],f,m);if(d instanceof a)return d;let g=y([c[1]],f,m);if(g instanceof a)return g;if(d.length!==g.length)return new a("#N/A","CORREL: arrays must have same number of values");if(d.length<2)return new a("#DIV/0!","CORREL requires at least 2 paired values");let p=G(d),A=G(g),v=0,h=0,R=0;for(let S=0;S<d.length;S++){let E=d[S]-p,I=g[S]-A;v+=E*I,h+=E*E,R+=I*I;}let b=Math.sqrt(h*R);return b===0?new a("#DIV/0!","CORREL: zero variance"):v/b}});function r(c,f){if(f<0||f>1)return new a("#NUM!","PERCENTILE: k must be between 0 and 1");if(c.length===0)return new a("#NUM!","PERCENTILE: empty array");let m=[...c].sort((v,h)=>v-h),d=f*(m.length-1),g=Math.floor(d),p=Math.ceil(d);if(g===p)return m[g];let A=d-g;return m[g]+A*(m[p]-m[g])}let s={minArgs:2,maxArgs:2,evaluate(c,f,m){let d=y([c[0]],f,m);if(d instanceof a)return d;let g=m.evaluate(c[1],f);if(g instanceof a)return g;let p=w(g);return p instanceof a?p:r(d,p)}};i.set("PERCENTILE",s),i.set("PERCENTILE.INC",s);let u={minArgs:2,maxArgs:2,evaluate(c,f,m){let d=y([c[0]],f,m);if(d instanceof a)return d;let g=m.evaluate(c[1],f);if(g instanceof a)return g;let p=w(g);if(p instanceof a)return p;let A=Math.trunc(p);return A<0||A>4?new a("#NUM!","QUARTILE: quart must be 0, 1, 2, 3, or 4"):r(d,A*.25)}};i.set("QUARTILE",u),i.set("QUARTILE.INC",u);let l={minArgs:1,maxArgs:-1,evaluate(c,f,m){let d=y(c,f,m);if(d instanceof a)return d;if(d.length===0)return new a("#N/A","MODE: no numeric values");let g=new Map;for(let v of d)g.set(v,(g.get(v)??0)+1);let p=0,A=null;for(let v of d){let h=g.get(v)??0;h>p&&(p=h,A=v);}return p<1||A===null?new a("#N/A","MODE: no values"):A}};i.set("MODE",l),i.set("MODE.SNGL",l),i.set("GEOMEAN",{minArgs:1,maxArgs:-1,evaluate(c,f,m){let d=y(c,f,m);if(d instanceof a)return d;if(d.length===0)return new a("#NUM!","GEOMEAN: no numeric values");let g=0;for(let p of d){if(p<=0)return new a("#NUM!","GEOMEAN: all values must be positive");g+=Math.log(p);}return Math.exp(g/d.length)}}),i.set("HARMEAN",{minArgs:1,maxArgs:-1,evaluate(c,f,m){let d=y(c,f,m);if(d instanceof a)return d;if(d.length===0)return new a("#NUM!","HARMEAN: no numeric values");let g=0;for(let p of d){if(p<=0)return new a("#NUM!","HARMEAN: all values must be positive");g+=1/p;}return g===0?new a("#DIV/0!","HARMEAN: sum of reciprocals is zero"):d.length/g}});}function me(i){i.set("INDIRECT",{minArgs:1,maxArgs:2,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=String(n??""),s=O(r);if(s){let l=s.start,c=s.end;return l.row===c.row&&l.col===c.col,t.getCellValue(l)}let u=M(r);return u?t.getCellValue(u):new a("#REF!",`INDIRECT: invalid reference "${r}"`)}}),i.set("OFFSET",{minArgs:3,maxArgs:5,evaluate(e,t,o){let n,r;if(e[0].kind==="cellRef")n=e[0].address.col,r=e[0].address.row;else if(e[0].kind==="range")n=e[0].start.col,r=e[0].start.row;else return new a("#VALUE!","OFFSET: first argument must be a cell reference");let s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=w(s);if(u instanceof a)return u;let l=o.evaluate(e[2],t);if(l instanceof a)return l;let c=w(l);if(c instanceof a)return c;let f=r+Math.trunc(u),m=n+Math.trunc(c);if(f<0||m<0)return new a("#REF!","OFFSET: reference out of bounds");let d=1;if(e.length>=4){let p=o.evaluate(e[3],t);if(p instanceof a)return p;let A=w(p);if(A instanceof a)return A;d=Math.trunc(A);}let g=1;if(e.length>=5){let p=o.evaluate(e[4],t);if(p instanceof a)return p;let A=w(p);if(A instanceof a)return A;g=Math.trunc(A);}return d<=0||g<=0?new a("#VALUE!","OFFSET: height and width must be >= 1"):d===1&&g===1?t.getCellValue({col:m,row:f,absCol:false,absRow:false}):t.getCellValue({col:m,row:f,absCol:false,absRow:false})}}),i.set("ADDRESS",{minArgs:2,maxArgs:5,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=w(n);if(r instanceof a)return r;let s=o.evaluate(e[1],t);if(s instanceof a)return s;let u=w(s);if(u instanceof a)return u;let l=Math.trunc(r),c=Math.trunc(u);if(l<1||c<1)return new a("#VALUE!","ADDRESS: row and column must be >= 1");let f=1;if(e.length>=3){let p=o.evaluate(e[2],t);if(p instanceof a)return p;let A=w(p);if(A instanceof a)return A;f=Math.trunc(A);}let m="";if(e.length>=5){let p=o.evaluate(e[4],t);if(p instanceof a)return p;p!=null&&p!==false&&(m=String(p));}let d=B(c-1),g;switch(f){case 1:g=`$${d}$${l}`;break;case 2:g=`${d}$${l}`;break;case 3:g=`$${d}${l}`;break;case 4:g=`${d}${l}`;break;default:g=`$${d}$${l}`;}return m?`${m.includes(" ")?`'${m}'`:m}!${g}`:g}}),i.set("ROW",{minArgs:0,maxArgs:1,evaluate(e,t,o){if(e.length===0)return 1;let n=e[0];if(n.kind==="cellRef")return n.address.row+1;if(n.kind==="range")return n.start.row+1;let r=o.evaluate(n,t);if(r instanceof a)return r;let s=String(r??""),u=M(s);if(!u){let l=O(s);return l?l.start.row+1:new a("#VALUE!","ROW: invalid reference")}return u.row+1}}),i.set("COLUMN",{minArgs:0,maxArgs:1,evaluate(e,t,o){if(e.length===0)return 1;let n=e[0];if(n.kind==="cellRef")return n.address.col+1;if(n.kind==="range")return n.start.col+1;let r=o.evaluate(n,t);if(r instanceof a)return r;let s=String(r??""),u=M(s);if(!u){let l=O(s);return l?l.start.col+1:new a("#VALUE!","COLUMN: invalid reference")}return u.col+1}}),i.set("ROWS",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=e[0];return n.kind==="range"?Math.abs(n.end.row-n.start.row)+1:n.kind==="cellRef"?1:new a("#VALUE!","ROWS: argument must be a range reference")}}),i.set("COLUMNS",{minArgs:1,maxArgs:1,evaluate(e,t,o){let n=e[0];return n.kind==="range"?Math.abs(n.end.col-n.start.col)+1:n.kind==="cellRef"?1:new a("#VALUE!","COLUMNS: argument must be a range reference")}}),i.set("SEQUENCE",{minArgs:1,maxArgs:4,evaluate(e,t,o){let n=o.evaluate(e[0],t);if(n instanceof a)return n;let r=w(n);if(r instanceof a)return r;let s=1;if(e.length>=2){let g=o.evaluate(e[1],t);if(g instanceof a)return g;let p=w(g);if(p instanceof a)return p;s=Math.trunc(p);}let u=1;if(e.length>=3){let g=o.evaluate(e[2],t);if(g instanceof a)return g;let p=w(g);if(p instanceof a)return p;u=p;}let l=1;if(e.length>=4){let g=o.evaluate(e[3],t);if(g instanceof a)return g;let p=w(g);if(p instanceof a)return p;l=p;}let c=Math.trunc(r),f=Math.max(1,s);if(c<1)return new a("#VALUE!","SEQUENCE: rows must be >= 1");let m=[],d=u;for(let g=0;g<c;g++){let p=[];for(let A=0;A<f;A++)p.push(d),d+=l;m.push(p);}return m[0][0]}}),i.set("TRANSPOSE",{minArgs:1,maxArgs:1,evaluate(e,t,o){if(e[0].kind!=="range")return new a("#VALUE!","TRANSPOSE: argument must be a range");let n=t.getRangeValues({start:e[0].start,end:e[0].end});if(n.length===0)return null;let r=n.length,s=n[0].length,u=[];for(let l=0;l<s;l++){let c=[];for(let f=0;f<r;f++)c.push(n[f][l]);u.push(c);}return u[0][0]??null}}),i.set("MMULT",{minArgs:2,maxArgs:2,evaluate(e,t,o){if(e[0].kind!=="range")return new a("#VALUE!","MMULT: array1 must be a range");if(e[1].kind!=="range")return new a("#VALUE!","MMULT: array2 must be a range");let n=t.getRangeValues({start:e[0].start,end:e[0].end}),r=t.getRangeValues({start:e[1].start,end:e[1].end});if(n.length===0||r.length===0)return new a("#VALUE!","MMULT: empty array");let s=n.length,u=n[0].length,l=r.length,c=r[0].length;if(u!==l)return new a("#VALUE!",`MMULT: columns of array1 (${u}) must equal rows of array2 (${l})`);let f=[];for(let m=0;m<s;m++){let d=[];for(let g=0;g<c;g++){let p=0;for(let A=0;A<u;A++){let v=w(n[m][A]),h=w(r[A][g]);if(v instanceof a)return v;if(h instanceof a)return h;p+=v*h;}d.push(p);}f.push(d);}return f[0][0]}}),i.set("MDETERM",{minArgs:1,maxArgs:1,evaluate(e,t,o){if(e[0].kind!=="range")return new a("#VALUE!","MDETERM: argument must be a range");let n=t.getRangeValues({start:e[0].start,end:e[0].end});if(n.length===0)return new a("#VALUE!","MDETERM: empty array");let r=n.length;if(n.some(u=>u.length!==r))return new a("#VALUE!","MDETERM: array must be square");let s=[];for(let u=0;u<r;u++){let l=[];for(let c=0;c<r;c++){let f=w(n[u][c]);if(f instanceof a)return f;l.push(f);}s.push(l);}return de(s)}}),i.set("MINVERSE",{minArgs:1,maxArgs:1,evaluate(e,t,o){if(e[0].kind!=="range")return new a("#VALUE!","MINVERSE: argument must be a range");let n=t.getRangeValues({start:e[0].start,end:e[0].end});if(n.length===0)return new a("#VALUE!","MINVERSE: empty array");let r=n.length;if(n.some(l=>l.length!==r))return new a("#VALUE!","MINVERSE: array must be square");let s=[];for(let l=0;l<r;l++){let c=[];for(let f=0;f<r;f++){let m=w(n[l][f]);if(m instanceof a)return m;c.push(m);}s.push(c);}let u=Me(s,r);return u instanceof a?u:u[0][0]}});}function de(i){let e=i.length;if(e===1)return i[0][0];if(e===2)return i[0][0]*i[1][1]-i[0][1]*i[1][0];let t=0;for(let o=0;o<e;o++){let n=[];for(let r=1;r<e;r++){let s=[];for(let u=0;u<e;u++)u!==o&&s.push(i[r][u]);n.push(s);}t+=(o%2===0?1:-1)*i[0][o]*de(n);}return t}function Me(i,e){let t=[];for(let n=0;n<e;n++){let r=[...i[n]];for(let s=0;s<e;s++)r.push(s===n?1:0);t.push(r);}for(let n=0;n<e;n++){let r=-1,s=0;for(let l=n;l<e;l++)Math.abs(t[l][n])>Math.abs(s)&&(s=t[l][n],r=l);if(r===-1||Math.abs(s)<1e-12)return new a("#NUM!","MINVERSE: matrix is singular");r!==n&&([t[n],t[r]]=[t[r],t[n]]);let u=t[n][n];for(let l=0;l<2*e;l++)t[n][l]/=u;for(let l=0;l<e;l++)if(l!==n){let c=t[l][n];for(let f=0;f<2*e;f++)t[l][f]-=c*t[n][f];}}let o=[];for(let n=0;n<e;n++)o.push(t[n].slice(e));return o}function X(){let i=new Map;return re(i),oe(i),ae(i),se(i),ue(i),ie(i),le(i),ce(i),fe(i),me(i),i}function pe(i){let e=new Set;function t(o){switch(o.kind){case "cellRef":e.add(x(o.address.col,o.address.row,o.address.sheet));break;case "range":{let n=o.start.sheet,r=Math.min(o.start.row,o.end.row),s=Math.max(o.start.row,o.end.row),u=Math.min(o.start.col,o.end.col),l=Math.max(o.start.col,o.end.col);for(let c=r;c<=s;c++)for(let f=u;f<=l;f++)e.add(x(f,c,n));break}case "functionCall":for(let n of o.args)t(n);break;case "binaryOp":t(o.left),t(o.right);break;case "unaryOp":t(o.operand);break}}return t(i),e}var j=class{constructor(e){this.formulas=new Map;this.parsedFormulas=new Map;this.values=new Map;this.depGraph=new H;this.namedRanges=new Map;this.sheetAccessors=new Map;let t=X();if(e?.customFunctions)for(let[o,n]of Object.entries(e.customFunctions))t.set(o.toUpperCase(),n);if(e?.namedRanges)for(let[o,n]of Object.entries(e.namedRanges))this.namedRanges.set(o.toUpperCase(),n);this.evaluator=new Y(t),this.maxChainLength=e?.maxChainLength??1e3;}setFormula(e,t,o,n){let r=x(e,t);if(o===null||o===""){let p=this.values.get(r);return this.formulas.delete(r),this.parsedFormulas.delete(r),this.values.delete(r),this.depGraph.removeDependencies(r),{updatedCells:p!==void 0?[{cellKey:r,col:e,row:t,oldValue:p,newValue:void 0}]:[]}}let s=o.startsWith("=")?o.slice(1):o,u;try{let p=P(s);u=W(p,this.namedRanges);}catch(p){u={kind:"error",error:p instanceof a?p:new a("#ERROR!",String(p))};}let l=pe(u);if(l.has(r)||this.depGraph.wouldCreateCycle(r,l)){let p=this.values.get(r),A=new a("#CIRC!","Circular reference detected");return this.formulas.set(r,o),this.parsedFormulas.set(r,u),this.values.set(r,A),this.depGraph.setDependencies(r,l),{updatedCells:[{cellKey:r,col:e,row:t,oldValue:p,newValue:A}]}}this.depGraph.setDependencies(r,l),this.formulas.set(r,o),this.parsedFormulas.set(r,u);let c=this.values.get(r),f=this.createContext(n),m=this.evaluator.evaluate(u,f);this.values.set(r,m);let d=[{cellKey:r,col:e,row:t,oldValue:c,newValue:m}],g=this.depGraph.getRecalcOrder(r);return this.recalcCells(g,n,d),{updatedCells:d}}onCellChanged(e,t,o){let n=x(e,t),r=this.depGraph.getRecalcOrder(n);if(r.length===0)return {updatedCells:[]};let s=[];return this.recalcCells(r,o,s),{updatedCells:s}}onCellsChanged(e,t){let o=e.map(s=>x(s.col,s.row)),n=this.depGraph.getRecalcOrderBatch(o);if(n.length===0)return {updatedCells:[]};let r=[];return this.recalcCells(n,t,r),{updatedCells:r}}getValue(e,t){return this.values.get(x(e,t))}getFormula(e,t){return this.formulas.get(x(e,t))}hasFormula(e,t){return this.formulas.has(x(e,t))}registerFunction(e,t){this.evaluator.registerFunction(e,t);}recalcAll(e){let t=[],o=this.createContext(e);if(this.formulas.size===0)return {updatedCells:t};let n=[];for(let u of this.formulas.keys())n.push(u);let r=this.depGraph.getRecalcOrderBatch(n),s=new Set(r);for(let u of n)if(!s.has(u)){let{col:l,row:c}=D(u),f=this.parsedFormulas.get(u);if(!f)continue;let m=this.values.get(u),d=this.evaluator.evaluate(f,o);this.values.set(u,d),t.push({cellKey:u,col:l,row:c,oldValue:m,newValue:d});}return this.recalcCells(r,e,t),{updatedCells:t}}clear(){this.formulas.clear(),this.parsedFormulas.clear(),this.values.clear(),this.depGraph.clear();}getAllFormulas(){let e=[];for(let[t,o]of this.formulas){let{col:n,row:r}=D(t);e.push({col:n,row:r,formula:o});}return e}loadFormulas(e,t){this.clear();for(let{col:o,row:n,formula:r}of e){let s=x(o,n),u=r.startsWith("=")?r.slice(1):r,l;try{let f=P(u);l=W(f,this.namedRanges);}catch(f){l={kind:"error",error:f instanceof a?f:new a("#ERROR!",String(f))};}this.formulas.set(s,r),this.parsedFormulas.set(s,l);let c=pe(l);this.depGraph.setDependencies(s,c);}return this.recalcAll(t)}defineNamedRange(e,t){this.namedRanges.set(e.toUpperCase(),t);}removeNamedRange(e){this.namedRanges.delete(e.toUpperCase());}getNamedRanges(){return this.namedRanges}registerSheet(e,t){this.sheetAccessors.set(e,t);}unregisterSheet(e){this.sheetAccessors.delete(e);}getPrecedents(e,t){let o=x(e,t),n=[],r=new Set,s=[],u=this.depGraph.getDependencies(o);for(let c of u)r.has(c)||(r.add(c),s.push(c));let l=0;for(;l<s.length;){let c=s[l++],f=D(c);n.push({cellKey:c,col:f.col,row:f.row,formula:this.formulas.get(c),value:this.values.has(c)?this.values.get(c):void 0});let m=this.depGraph.getDependencies(c);for(let d of m)r.has(d)||(r.add(d),s.push(d));}return n}getDependents(e,t){let o=x(e,t),n=[],r=new Set,s=[],u=this.depGraph.getDependents(o);for(let c of u)r.has(c)||(r.add(c),s.push(c));let l=0;for(;l<s.length;){let c=s[l++],f=D(c);n.push({cellKey:c,col:f.col,row:f.row,formula:this.formulas.get(c),value:this.values.has(c)?this.values.get(c):void 0});let m=this.depGraph.getDependents(c);for(let d of m)r.has(d)||(r.add(d),s.push(d));}return n}getAuditTrail(e,t){let o=x(e,t);return {target:{cellKey:o,col:e,row:t,formula:this.formulas.get(o),value:this.values.has(o)?this.values.get(o):void 0},precedents:this.getPrecedents(e,t),dependents:this.getDependents(e,t)}}createContext(e){let t=new Date;return {getCellValue:o=>{let n=x(o.col,o.row,o.sheet);if(this.values.has(n))return this.values.get(n);if(o.sheet){let r=this.sheetAccessors.get(o.sheet);return r?r.getCellValue(o.col,o.row):new a("#REF!",`Unknown sheet: ${o.sheet}`)}return e.getCellValue(o.col,o.row)},getRangeValues:o=>{let n=[],r=o.start.sheet,s=r?this.sheetAccessors.get(r):e;if(r&&!s)return [[new a("#REF!",`Unknown sheet: ${r}`)]];let u=Math.min(o.start.row,o.end.row),l=Math.max(o.start.row,o.end.row),c=Math.min(o.start.col,o.end.col),f=Math.max(o.start.col,o.end.col);for(let m=u;m<=l;m++){let d=[];for(let g=c;g<=f;g++){let p=x(g,m,r);this.values.has(p)?d.push(this.values.get(p)):d.push(s?.getCellValue(g,m));}n.push(d);}return n},now:()=>t,getCellFormula:o=>{let n=x(o.col,o.row,o.sheet);return this.formulas.get(n)}}}recalcCells(e,t,o){let n=this.createContext(t),r=0;for(let s of e){if(r++>this.maxChainLength){let{col:d,row:g}=D(s),p=this.values.get(s),A=new a("#CIRC!","Dependency chain too long");this.values.set(s,A),o.push({cellKey:s,col:d,row:g,oldValue:p,newValue:A});continue}let u=this.parsedFormulas.get(s);if(!u)continue;let{col:l,row:c}=D(s),f=this.values.get(s),m=this.evaluator.evaluate(u,n);this.values.set(s,m),o.push({cellKey:s,col:l,row:c,oldValue:f,newValue:m});}}};var ye=/^\$?([A-Za-z]+)\$?(\d+)$/;function Q(i){let e=i.match(ye);return e?{col:$(e[1]),row:parseInt(e[2],10)-1}:null}function Le(i,e,t,o){i==="Enter"?(e(),t()):i==="Escape"&&(e(),o());}function Ue(i,e,t,o,n){let r=i.trim();r.startsWith("=")?o(e,t,r):(o(e,t,null),n?.(e,t,r));}function De(i,e,t,o){if(i==null||e==null)return "";let n=t?.(i,e);if(n)return n;let r=o?.(i,e);return r!=null?String(r):""}function ge(i,e){if(!i.startsWith("="))return false;if(e<=1)return true;let t=i[e-1];return /[+\-*/^%&=<>(,:\s]/.test(t)}function Oe(i,e,t){if(ge(i,e))return {text:i.substring(0,e)+t+i.substring(e),cursorPos:e+t.length};let o=e;for(;o>1&&/[A-Za-z0-9$]/.test(i[o-1]);)o--;return {text:i.substring(0,o)+t+i.substring(e),cursorPos:o+t.length}}function Ve(i){if(!i||i[0]!=="=")return [];let e=[],t=0;try{let o=P(i.substring(1));for(let n=0;n<o.length;n++){let r=o[n];if(r.type==="CELL_REF"){if(n+2<o.length&&o[n+1].type==="COLON"&&o[n+2].type==="CELL_REF"){let u=Q(r.value),l=Q(o[n+2].value);if(u&&l){e.push({type:"range",col:u.col,row:u.row,endCol:l.col,endRow:l.row,colorIndex:t++%6}),n+=2;continue}}let s=Q(r.value);s&&e.push({type:"cell",col:s.col,row:s.row,colorIndex:t++%6});}}}catch{}return e}var $e=["var(--ogrid-formula-ref-0, #4285f4)","var(--ogrid-formula-ref-1, #ea4335)","var(--ogrid-formula-ref-2, #34a853)","var(--ogrid-formula-ref-3, #9334e6)","var(--ogrid-formula-ref-4, #ff6d01)","var(--ogrid-formula-ref-5, #46bdc6)"],Pe={bar:"display:flex;align-items:center;border-bottom:1px solid var(--ogrid-border, #e0e0e0);background:var(--ogrid-bg, #fff);min-height:28px;font-size:13px;",nameBox:"font-family:monospace;font-size:12px;font-weight:500;padding:2px 8px;border-right:1px solid var(--ogrid-border, #e0e0e0);background:var(--ogrid-bg, #fff);color:var(--ogrid-fg, #242424);min-width:52px;text-align:center;line-height:24px;user-select:none;white-space:nowrap;",fxLabel:"padding:2px 8px;font-style:italic;font-weight:600;color:var(--ogrid-muted-fg, #888);user-select:none;border-right:1px solid var(--ogrid-border, #e0e0e0);line-height:24px;font-size:12px;",input:"flex:1;border:none;outline:none;padding:2px 8px;font-family:monospace;font-size:12px;line-height:24px;background:transparent;color:var(--ogrid-fg, #242424);min-width:0;"},Ke={bar:{display:"flex",alignItems:"center",borderBottom:"1px solid var(--ogrid-border, #e0e0e0)",background:"var(--ogrid-bg, #fff)",minHeight:"28px",fontSize:"13px"},nameBox:{fontFamily:"monospace",fontSize:"12px",fontWeight:500,padding:"2px 8px",borderRight:"1px solid var(--ogrid-border, #e0e0e0)",background:"var(--ogrid-bg, #fff)",color:"var(--ogrid-fg, #242424)",minWidth:"52px",textAlign:"center",lineHeight:"24px",userSelect:"none",whiteSpace:"nowrap"},fxLabel:{padding:"2px 8px",fontStyle:"italic",fontWeight:600,color:"var(--ogrid-muted-fg, #888)",userSelect:"none",borderRight:"1px solid var(--ogrid-border, #e0e0e0)",lineHeight:"24px",fontSize:"12px"},input:{flex:1,border:"none",outline:"none",padding:"2px 8px",fontFamily:"monospace",fontSize:"12px",lineHeight:"24px",background:"transparent",color:"var(--ogrid-fg, #242424)",minWidth:0}};export{Ee as CIRC_ERROR,we as DIV_ZERO_ERROR,H as DependencyGraph,Pe as FORMULA_BAR_CSS,Ke as FORMULA_BAR_STYLES,$e as FORMULA_REF_COLORS,j as FormulaEngine,a as FormulaError,Y as FormulaEvaluator,Ie as GENERAL_ERROR,ve as NAME_ERROR,Ce as NA_ERROR,Ae as REF_ERROR,he as VALUE_ERROR,be as adjustFormulaReferences,ge as canInsertReference,$ as columnLetterToIndex,X as createBuiltInFunctions,De as deriveFormulaBarText,Ve as extractFormulaReferences,T as flattenArgs,Fe as formatAddress,N as formulaToString,D as fromCellKey,Le as handleFormulaBarKeyDown,Oe as insertReferenceAtCursor,Ne as isFormulaError,W as parse,M as parseCellRef,O as parseRange,Ue as processFormulaBarCommit,xe as toBoolean,x as toCellKey,w as toNumber,N as toString,P as tokenize};