@alaarab/ogrid-core 2.6.0 → 2.7.0

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.
@@ -1,2 +1,2 @@
1
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};
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 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=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: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=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=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=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/10**-s)*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/10**-s)*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=(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=(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=(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=(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*(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)/(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=(1+c)**p;m+=r[p]/A,p>0&&(d-=p*r[p]/(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};
package/dist/esm/index.js CHANGED
@@ -1,4 +1,4 @@
1
- function fe(t){if(t)return {id:t.id,displayName:t.displayName,email:"email"in t&&t.email?t.email:t.mail||t.userPrincipalName||"",photo:t.photo}}function F(t,e,n){let r=Math.min(t.startRow,t.endRow),o=Math.max(t.startRow,t.endRow),l=Math.min(t.startCol,t.endCol),i=Math.max(t.startCol,t.endCol);return e>=r&&e<=o&&n>=l&&n<=i}function R(t){return {startRow:Math.min(t.startRow,t.endRow),endRow:Math.max(t.startRow,t.endRow),startCol:Math.min(t.startCol,t.endCol),endCol:Math.max(t.startCol,t.endCol)}}function O(t){if(t==null)return "";let e=String(t);return e.includes(",")||e.includes('"')||e.includes(`
2
- `)?`"${e.replace(/"/g,'""')}"`:e}function j(t){return t.map(e=>O(e.name)).join(",")}function Y(t,e,n,r){return t.map((o,l)=>e.map(i=>{if(r?.exportMode==="formulas"&&r.hasFormula&&r.getFormula&&r.columnIdToIndex){let s=r.columnIdToIndex.get(i.columnId);if(s!==void 0&&r.hasFormula(s,l)){let d=r.getFormula(s,l);if(d)return O(d)}}return O(n(o,i.columnId))}).join(","))}function pe(t,e,n,r,o){let l=j(e),i=Y(t,e,n,o),s=[l,...i].join(`
3
- `);K(s,r??`export_${new Date().toISOString().slice(0,10)}.csv`);}function K(t,e){let n=new Blob([t],{type:"text/csv;charset=utf-8;"}),r=URL.createObjectURL(n),o=document.createElement("a");try{o.setAttribute("href",r),o.setAttribute("download",e),o.style.visibility="hidden",document.body.appendChild(o),o.click();}finally{try{document.body.removeChild(o);}catch{}URL.revokeObjectURL(r);}}function x(t,e){return e.valueGetter?e.valueGetter(t):t[e.columnId]}function h(t,e){return t.editable===true||typeof t.editable=="function"&&t.editable(e)}function ge(t,e){return {getCellValue:(n,r)=>r<0||r>=t.length||n<0||n>=e.length?null:x(t[r],e[n]),getRowCount:()=>t.length,getColumnCount:()=>e.length}}function V(t){return "children"in t&&Array.isArray(t.children)}function Z(t){let e=[];for(let n of t)V(n)?e.push(...Z(n.children)):e.push(n);return e}function Ce(t,e){function n(m,c){let a=c;for(let u of m)V(u)&&(a=Math.max(a,n(u.children,c+1)));return a}let r=n(t,0);if(r===0){let m=[];for(let c of t)if(!V(c)){if(e&&!e.has(c.columnId))continue;m.push({label:c.name,colSpan:1,isGroup:false,columnDef:c,depth:0});}return [m]}let o=r+1,l=Array.from({length:o},()=>[]),i=new Map;function s(m){let c=i.get(m);if(c!==void 0)return c;let a=0;for(let u of m)V(u)?a+=s(u.children):(!e||e.has(u.columnId))&&a++;return i.set(m,a),a}function d(m,c){for(let a of m)if(V(a)){let u=s(a.children);if(u===0)continue;l[c].push({label:a.headerName,colSpan:u,isGroup:true,depth:c}),d(a.children,c+1);}else {if(e&&!e.has(a.columnId))continue;l[c].push({label:a.name,colSpan:1,isGroup:false,columnDef:a,depth:c});}}return d(t,0),l.filter(m=>m.length>0)}function v(t){return t!=null&&typeof t=="object"&&"type"in t}function S(t){return (v(t.filterable)?t.filterable:null)?.filterField??t.columnId}function Ie(t,e,n){if(n===void 0||n.type==="text"&&n.value.trim()===""||n.type==="multiSelect"&&n.value.length===0||n.type==="date"&&!n.value.from&&!n.value.to||n.type==="people"&&!n.value){let{[e]:o,...l}=t;return l}return {...t,[e]:n}}function be(t,e){let n=[];for(let l=0;l<e.length;l++){let i=e[l];(v(i.filterable)?i.filterable:null)?.type==="multiSelect"&&n.push({col:i,field:S(i)});}if(n.length===0)return {};let r=new Map;for(let l=0;l<n.length;l++)r.set(n[l].field,new Set);for(let l=0;l<t.length;l++){let i=t[l];for(let s=0;s<n.length;s++){let d=x(i,n[s].col),m=r.get(n[s].field);d!=null&&d!==""&&m&&m.add(String(d));}}let o={};for(let l=0;l<n.length;l++){let i=r.get(n[l].field);o[n[l].field]=i?Array.from(i).sort():[];}return o}function xe(t){let e=[];for(let n of t)(v(n.filterable)?n.filterable:null)?.type==="multiSelect"&&e.push(S(n));return e}function he(t){let{totalCount:e,filteredCount:n,selectedCount:r,selectedCellCount:o,aggregation:l,suppressRowCount:i}=t,s=[];return i||s.push({key:"total",label:"Rows:",value:e}),n!==void 0&&n!==e&&s.push({key:"filtered",label:"Filtered:",value:n}),r!==void 0&&r>0&&s.push({key:"selected",label:"Selected:",value:r}),o!==void 0&&o>1&&s.push({key:"cells",label:"Cells:",value:o}),l&&(s.push({key:"sum",label:"Sum:",value:l.sum}),s.push({key:"avg",label:"Avg:",value:Math.round(l.avg*100)/100}),s.push({key:"min",label:"Min:",value:l.min}),s.push({key:"max",label:"Max:",value:l.max}),s.push({key:"count",label:"Count:",value:l.count})),s}function Re(t,e,n,r){return t?typeof t=="object"?t:{totalCount:e,selectedCount:n>0?n:void 0,filteredCount:r!==void 0&&r!==e?r:void 0}:null}var Q=[10,25,50,100];function Bt(t,e){return e.includes(t)?e:[...e,t].sort((n,r)=>n-r)}var J=5;function ye(t,e,n,r){if(n<=0)return null;let o=r?.maxPageButtons??J,l=Math.ceil(n/e),i,s,d;if(l<=o){i=[];for(let a=1;a<=l;a++)i.push(a);s=false,d=false;}else {let a=Math.max(1,t-2),u=Math.min(l,t+2);u-a+1<o&&(a===1?u=Math.min(l,a+o-1):u===l&&(a=Math.max(1,u-o+1))),i=[];for(let f=a;f<=u;f++)i.push(f);s=a>1,d=u<l;}let m=Math.max(1,(t-1)*e+1),c=Math.min(t*e,n);return {totalPages:l,pageNumbers:i,showStartEllipsis:s,showEndEllipsis:d,startItem:m,endItem:c,pageSizeOptions:Bt(e,r?.pageSizeOptions??Q)}}var Te=[{id:"undo",label:"Undo",shortcut:"Ctrl+Z"},{id:"redo",label:"Redo",shortcut:"Ctrl+Y"},{id:"copy",label:"Copy",shortcut:"Ctrl+C",disabledWhenNoSelection:true,dividerBefore:true},{id:"cut",label:"Cut",shortcut:"Ctrl+X",disabledWhenNoSelection:true},{id:"paste",label:"Paste",shortcut:"Ctrl+V"},{id:"selectAll",label:"Select all",shortcut:"Ctrl+A",dividerBefore:true}];function we(t){return typeof navigator<"u"&&/Mac|iPhone|iPad|iPod/.test(navigator.userAgent)?t.replace("Ctrl","\u2318"):t}function Se(t){let{onCopy:e,onCut:n,onPaste:r,onSelectAll:o,onUndo:l,onRedo:i,onClose:s}=t;return {undo:()=>{l(),s();},redo:()=>{i(),s();},copy:()=>{e(),s();},cut:()=>{n(),s();},paste:()=>{r(),s();},selectAll:()=>{o(),s();}}}var De=[{id:"pinLeft",label:"Pin left"},{id:"pinRight",label:"Pin right"},{id:"unpin",label:"Unpin"}];function ve(t){let{canPinLeft:e,canPinRight:n,canUnpin:r,currentSort:o,isSortable:l=true,isResizable:i=true}=t,s=[];if(s.push({id:"pinLeft",label:"Pin left",disabled:!e},{id:"pinRight",label:"Pin right",disabled:!n},{id:"unpin",label:"Unpin",disabled:!r,divider:l||i}),l)if(!o)s.push({id:"sortAsc",label:"Sort ascending"},{id:"sortDesc",label:"Sort descending",divider:i});else {let d=o==="asc"?"desc":"asc",m=o==="asc"?"Sort descending":"Sort ascending";s.push({id:`sort${d==="asc"?"Asc":"Desc"}`,label:m},{id:"clearSort",label:"Clear sort",divider:i});}return i&&s.push({id:"autosizeThis",label:"Autosize this column"},{id:"autosizeAll",label:"Autosize all columns"}),s}function T(t,e,n,r){if(r.valueParser){let l={newValue:t,oldValue:e,data:n,column:r},i=r.valueParser(l);return i===void 0?{valid:false,value:void 0}:{valid:true,value:i}}if(r.cellEditor==="select"&&r.cellEditorParams?.values!=null&&Array.isArray(r.cellEditorParams.values)){let l=r.cellEditorParams.values,i=typeof t=="string"?t:String(t??"");if(i==="")return {valid:true,value:""};let s=l.find(d=>String(d).toLowerCase()===i.toLowerCase());return s!==void 0?{valid:true,value:s}:{valid:false,value:void 0}}let o=r.type;if(o==="date"){let l=te({newValue:t});return l===void 0?{valid:false,value:void 0}:{valid:true,value:l}}if(o==="boolean"){let l=ne({newValue:t});return l===void 0?{valid:false,value:void 0}:{valid:true,value:l}}if(o==="numeric"){let l=ee({newValue:t});return l===void 0?{valid:false,value:void 0}:{valid:true,value:l}}return {valid:true,value:t}}function ee(t){let{newValue:e}=t;if(e===""||e==null)return null;let n=String(e).replace(/[\s,]/g,""),r=Number(n);return Number.isNaN(r)?void 0:r}function Ee(t){let{newValue:e}=t;if(e===""||e==null)return null;let n=String(e).replace(/[$\u20AC\u00A3\u00A5]/g,"").replace(/[\s,]/g,""),r=Number(n);return Number.isNaN(r)?void 0:r}function te(t){let{newValue:e}=t;if(e===""||e==null)return null;let n=String(e).trim(),r=new Date(n);if(!Number.isNaN(r.getTime()))return r.toISOString()}function Fe(t){let{newValue:e}=t;if(e===""||e==null)return null;let n=String(e).trim();return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(n)?n:void 0}function ne(t){let{newValue:e}=t;if(e===""||e==null)return null;let n=String(e).trim().toLowerCase();if(["true","yes","1"].includes(n))return true;if(["false","no","0"].includes(n))return false}function Me(t,e,n){if(!n)return null;let r=R(n),o=0,l=0,i=1/0,s=-1/0,d=0;for(let m=r.startRow;m<=r.endRow;m++)for(let c=r.startCol;c<=r.endCol;c++){if(m>=t.length||c>=e.length)continue;o++;let a=t[m],u=e[c],f=x(a,u),p=typeof f=="number"?f:Number(f);!isNaN(p)&&isFinite(p)&&(l+=p,p<i&&(i=p),p>s&&(s=p),d++);}return o<2||d===0?null:{sum:l,avg:l/d,min:i,max:s,count:d}}var Pe=new WeakMap;function M(t,e,n,r,o){let l=Pe.get(e);if(!l){l=new Map;for(let m=0;m<e.length;m++)l.set(e[m].columnId,e[m]);Pe.set(e,l);}let i=[];for(let m=0;m<e.length;m++){let c=e[m],a=S(c),u=n[a];if(u)switch(u.type){case "multiSelect":if(u.value.length>0){let f=new Set(u.value);i.push(p=>f.has(String(x(p,c))));}break;case "text":{let f=u.value.trim();if(f){let p=f.toLowerCase(),g=new Map;for(let I=0;I<t.length;I++)g.set(t[I],String(x(t[I],c)??"").toLowerCase());i.push(I=>(g.get(I)??"").includes(p));}break}case "people":{let f=u.value.email.toLowerCase(),p=new Map;for(let g=0;g<t.length;g++)p.set(t[g],String(x(t[g],c)??"").toLowerCase());i.push(g=>(p.get(g)??"")===f);break}case "date":{let f=u.value,p=f.from?new Date(f.from+"T00:00:00").getTime():NaN,g=f.to?new Date(f.to+"T23:59:59.999").getTime():NaN,I=new Map;for(let C=0;C<t.length;C++){let b=x(t[C],c);if(b==null)I.set(t[C],NaN);else {let y=new Date(String(b)).getTime();I.set(t[C],Number.isNaN(y)?NaN:y);}}i.push(C=>{let b=I.get(C)??NaN;return !(Number.isNaN(b)||!Number.isNaN(p)&&b<p||!Number.isNaN(g)&&b>g)});break}}}let s=i.length>0,d=s?t.filter(m=>{for(let c=0;c<i.length;c++)if(!i[c](m))return false;return true}):t;if(r){let m=s?d:d.slice(),c=l.get(r),a=c?.compare,u=o==="asc"?1:-1;if(c?.type==="date"&&!a){let p=new Map;for(let g=0;g<m.length;g++){let I=m[g],C=c?x(I,c):I[r];if(C==null)p.set(I,NaN);else {let b=new Date(String(C)).getTime();p.set(I,Number.isNaN(b)?0:b);}}m.sort((g,I)=>{let C=p.get(g)??NaN,b=p.get(I)??NaN;return Number.isNaN(C)&&Number.isNaN(b)?0:Number.isNaN(C)?-1*u:Number.isNaN(b)?1*u:C===b?0:C>b?u:-u});}else if(a)m.sort((p,g)=>a(p,g)*u);else {let p=new Map;for(let g=0;g<m.length;g++){let I=m[g],C=c?x(I,c):I[r];C==null?p.set(I,void 0):typeof C=="number"?p.set(I,C):p.set(I,String(C).toLowerCase());}m.sort((g,I)=>{let C=p.get(g),b=p.get(I);return C===void 0&&b===void 0?0:C===void 0?-1*u:b===void 0?1*u:C===b?0:C>b?u:-u});}return m}return d}function D(t,e){if(!t)return false;let n=Math.min(t.startRow,t.endRow),r=Math.max(t.startRow,t.endRow);return e>=n&&e<=r}function Ne(t,e){if(t.item!==e.item||t.isSelected!==e.isSelected||t.hasCheckboxCol!==e.hasCheckboxCol||t.visibleCols!==e.visibleCols||t.columnMeta!==e.columnMeta||t.cellClassMap!==e.cellClassMap||t.columnLayouts!==e.columnLayouts)return false;let n=t.rowIndex;if(t.editingRowId!==e.editingRowId&&(t.editingRowId===t.rowId||e.editingRowId===e.rowId))return false;let r=t.activeCell?.rowIndex===n,o=e.activeCell?.rowIndex===n;if(r!==o||r&&o&&t.activeCell?.columnIndex!==e.activeCell?.columnIndex)return false;let l=D(t.selectionRange,n),i=D(e.selectionRange,n);if(l!==i||l&&i&&(t.selectionRange?.startCol!==e.selectionRange?.startCol||t.selectionRange?.endCol!==e.selectionRange?.endCol))return false;let s=t.selectionRange?.endRow===n,d=e.selectionRange?.endRow===n;return !(s!==d||(s||d)&&t.isDragging!==e.isDragging||t.cutRange!==e.cutRange&&(D(t.cutRange,n)||D(e.cutRange,n))||t.copyRange!==e.copyRange&&(D(t.copyRange,n)||D(e.copyRange,n)))}function re(t,e){return e?e.left?.includes(t)?"left":e.right?.includes(t)?"right":"unpinned":"unpinned"}function Ae(t,e,n){let r=t.filter(i=>i!==e),o=Math.max(0,Math.min(n,r.length)),l=[...r];return l.splice(o,0,e),l}function _e(t){let{mouseX:e,columnOrder:n,draggedColumnId:r,draggedPinState:o,tableElement:l,pinnedColumns:i}=t,s=l.querySelectorAll("[data-column-id]");if(s.length===0)return null;let d=[];if(s.forEach(u=>{let f=u.getAttribute("data-column-id");if(!f||re(f,i)!==o)return;let g=u.getBoundingClientRect(),I=n.indexOf(f);I!==-1&&d.push({columnId:f,left:g.left,right:g.right,midX:g.left+g.width/2,orderIndex:I});}),d.length===0)return null;d.sort((u,f)=>u.left-f.left);let m,c;if(e<=d[0].midX)m=d[0].orderIndex,c=d[0].left;else if(e>=d[d.length-1].midX){let u=d[d.length-1];m=u.orderIndex+1,c=u.right;}else {let u=-1;for(let f=0;f<d.length-1;f++)if(e>=d[f].midX&&e<d[f+1].midX){u=f;break}if(u===-1)return null;m=d[u].orderIndex+1,c=d[u].right;}let a=n.indexOf(r);return a===m||a+1===m?{targetIndex:m,indicatorX:null}:{targetIndex:m,indicatorX:c}}function ke(t,e,n,r=2){if(e.length===0||n<=0)return {startIndex:0,endIndex:-1,leftOffset:0,rightOffset:0};let o=0,l=e.length,i=-1;for(let a=0;a<e.length;a++){let u=o;o+=e[a],o>t&&l===e.length&&(l=a),u<t+n&&(i=a);}if(l>i)return {startIndex:0,endIndex:-1,leftOffset:0,rightOffset:0};let s=Math.max(0,l-r),d=Math.min(e.length-1,i+r),m=0;for(let a=0;a<s;a++)m+=e[a];let c=0;for(let a=d+1;a<e.length;a++)c+=e[a];return {startIndex:s,endIndex:d,leftOffset:m,rightOffset:c}}function Oe(t,e,n){let r=[],o=[],l=[];for(let s of t){let d=n?.[s.columnId];d==="left"?r.push(s):d==="right"?o.push(s):l.push(s);}if(!e||e.endIndex<0)return {pinnedLeft:r,virtualizedUnpinned:l,pinnedRight:o,leftSpacerWidth:0,rightSpacerWidth:0};let i=l.slice(e.startIndex,e.endIndex+1);return {pinnedLeft:r,virtualizedUnpinned:i,pinnedRight:o,leftSpacerWidth:e.leftOffset,rightSpacerWidth:e.rightOffset}}function Ve(t,e,n,r,o=5){if(r<=0||e<=0||n<=0)return {startIndex:0,endIndex:0,offsetTop:0,offsetBottom:0};let l=Math.max(0,Math.floor(t/e)-o),i=Math.min(r-1,Math.ceil((t+n)/e)+o),s=l*e,d=Math.max(0,(r-i-1)*e);return {startIndex:l,endIndex:i,offsetTop:s,offsetBottom:d}}function Le(t,e){return t*e}function Ue(t,e,n,r="start"){let o=t*e;switch(r){case "start":return o;case "center":return Math.max(0,o-(n-e)/2);case "end":return Math.max(0,o-n+e)}}function He(){let t=self;t.onmessage=e=>{let n=e.data;if(n.type!=="sort-filter")return;let{requestId:r,values:o,filters:l,sort:i}=n,s=o.length,d=[],m=Object.entries(l);if(m.length===0){d=new Array(s);for(let a=0;a<s;a++)d[a]=a;}else for(let a=0;a<s;a++){let u=true;for(let f=0;f<m.length;f++){let p=Number(m[f][0]),g=m[f][1],I=o[a][p];switch(g.type){case "text":{let C=g.value.trim().toLowerCase();C&&!String(I??"").toLowerCase().includes(C)&&(u=false);break}case "multiSelect":{g.value.length>0&&(new Set(g.value).has(String(I??""))||(u=false));break}case "date":{if(I==null){u=false;break}let C=new Date(String(I)).getTime();if(isNaN(C)){u=false;break}if(g.value.from){let b=new Date(g.value.from+"T00:00:00").getTime();if(C<b){u=false;break}}if(g.value.to){let b=new Date(g.value.to+"T23:59:59.999").getTime();if(C>b){u=false;break}}break}}if(!u)break}u&&d.push(a);}if(i){let{columnIndex:a,direction:u}=i,f=u==="asc"?1:-1;d.sort((p,g)=>{let I=o[p][a],C=o[g][a];if(I==null&&C==null)return 0;if(I==null)return -1*f;if(C==null)return 1*f;if(typeof I=="number"&&typeof C=="number")return I===C?0:I>C?f:-f;let b=String(I).toLowerCase(),y=String(C).toLowerCase();return b===y?0:b>y?f:-f});}let c={type:"sort-filter-result",requestId:r,indices:d};t.postMessage(c);};}var w=null,Wt=0,E=new Map;function oe(){if(w)return w;if(typeof Worker>"u"||typeof Blob>"u"||typeof URL>"u")return null;try{let t=He.toString(),e=new Blob([`(${t})()`],{type:"application/javascript"}),n=URL.createObjectURL(e);return w=new Worker(n),URL.revokeObjectURL(n),w.onmessage=r=>{let{requestId:o,indices:l}=r.data,i=E.get(o);i&&(E.delete(o),i.resolve(l));},w.onerror=r=>{for(let[o,l]of E)l.reject(new Error(r.message||"Worker error")),E.delete(o);},w}catch{return null}}function Ge(){w&&(w.terminate(),w=null);for(let[t,e]of E)e.reject(new Error("Worker terminated")),E.delete(t);}function le(t,e){let n=new Array(t.length);for(let r=0;r<t.length;r++){let o=new Array(e.length);for(let l=0;l<e.length;l++){let i=x(t[r],e[l]);i==null?o[l]=null:typeof i=="string"||typeof i=="number"||typeof i=="boolean"?o[l]=i:o[l]=String(i);}n[r]=o;}return n}function Be(t,e,n,r,o){if(r&&e.find(f=>f.columnId===r)?.compare)return Promise.resolve(M(t,e,n,r,o));let l=oe();if(!l)return Promise.resolve(M(t,e,n,r,o));let i=new Map;for(let u=0;u<e.length;u++)i.set(e[u].columnId,u);let s=le(t,e),d=e.map((u,f)=>({type:u.type??"text",index:f})),m={};for(let u of e){let f=S(u),p=n[f];if(!p)continue;let g=i.get(u.columnId);if(g!==void 0)switch(p.type){case "text":m[g]={type:"text",value:p.value};break;case "multiSelect":m[g]={type:"multiSelect",value:p.value};break;case "date":m[g]={type:"date",value:{from:p.value.from,to:p.value.to}};break;case "people":return Promise.resolve(M(t,e,n,r,o))}}let c;if(r){let u=i.get(r);u!==void 0&&(c={columnIndex:u,direction:o??"asc"});}let a=++Wt;return new Promise((u,f)=>{E.set(a,{resolve:g=>{let I=new Array(g.length);for(let C=0;C<g.length;C++)I[C]=t[g[C]];u(I);},reject:f});let p={type:"sort-filter",requestId:a,values:s,columnMeta:d,filters:m,sort:c};l.postMessage(p);})}var G="YYYY-MM-DD";function B(t,e,n="UTC"){if(t==null)return null;let r=t instanceof Date?t:new Date(String(t));if(Number.isNaN(r.getTime()))return null;let o,l,i;if(n==="UTC")o=r.getUTCFullYear(),l=r.getUTCMonth()+1,i=r.getUTCDate();else {let a=new Intl.DateTimeFormat("en-CA",{timeZone:n,year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(r);o=parseInt(a.find(u=>u.type==="year")?.value??"0",10),l=parseInt(a.find(u=>u.type==="month")?.value??"0",10),i=parseInt(a.find(u=>u.type==="day")?.value??"0",10);}let s=String(o).padStart(4,"0"),d=String(l).padStart(2,"0"),m=String(i).padStart(2,"0");return e.replace("YYYY",s).replace("MM",d).replace("DD",m)}function We(t,e){if(!t||!t.trim())return null;let r=t.trim().split(/[/\-.\s]+/).filter(Boolean);if(r.length===0)return null;let o=new Date().getUTCFullYear(),l=$t(e),i,s,d;if(r.length===3){let[c,a,u]=r.map(Number);l==="YMD"?(i=c,s=a,d=u):l==="DMY"?(d=c,s=a,i=u):(s=c,d=a,i=u),i!==void 0&&i<100&&(i=i<50?2e3+i:1900+i);}else if(r.length===2){let[c,a]=r.map(Number);l==="DMY"?(d=c,s=a):(s=c,d=a),i=o;}else if(r.length===1){let c=r[0];if(/^\d+$/.test(c))if(c.length===8)i=parseInt(c.slice(0,4),10),s=parseInt(c.slice(4,6),10),d=parseInt(c.slice(6,8),10);else if(c.length===4)s=parseInt(c.slice(0,2),10),d=parseInt(c.slice(2,4),10),i=o;else return null;else return null}else return null;if(!Xt(i,s,d))return null;let m=new Date(Date.UTC(i,s-1,d));return m.getUTCFullYear()!==i||m.getUTCMonth()+1!==s||m.getUTCDate()!==d?null:m}function $e(t){return t}function $t(t){let e=t.indexOf("Y"),n=t.indexOf("M"),r=t.indexOf("D");return e===-1||n===-1||r===-1?"MDY":e<n&&n<r?"YMD":r<n&&n<e?"DMY":"MDY"}function Xt(t,e,n){return !(t==null||e==null||n==null||!Number.isFinite(t)||!Number.isFinite(e)||!Number.isFinite(n)||e<1||e>12||n<1||n>31)}var L=class{constructor(e,n){this.type=e;this.message=n;}toString(){return this.type}};function qe(t,e){let n=v(t.filterable)?t.filterable:null,r=n?.type??"none",o=n?.filterField??t.columnId,l=t.sortable!==false,i=e.filters[o],s={columnKey:t.columnId,columnName:t.name,filterType:r,isSorted:e.sortBy===t.columnId,isSortedDescending:e.sortBy===t.columnId&&e.sortDirection==="desc",onSort:l?()=>e.onColumnSort(t.columnId):void 0};return r==="text"?{...s,textValue:i?.type==="text"?i.value:"",onTextChange:d=>e.onFilterChange(o,d.trim()?{type:"text",value:d}:void 0)}:r==="people"?{...s,selectedUser:i?.type==="people"?i.value:void 0,onUserChange:d=>e.onFilterChange(o,d?{type:"people",value:d}:void 0),peopleSearch:e.peopleSearch}:r==="multiSelect"?{...s,options:e.filterOptions[o]??[],isLoadingOptions:e.loadingFilterOptions[o]??false,selectedValues:i?.type==="multiSelect"?i.value:[],onFilterChange:d=>e.onFilterChange(o,d.length?{type:"multiSelect",value:d}:void 0)}:r==="date"?{...s,dateValue:i?.type==="date"?i.value:void 0,onDateChange:d=>e.onFilterChange(o,d?{type:"date",value:d}:void 0)}:s}var $=class ${constructor(){this.cache=new Map;this.lastVersion="";}static computeVersion(e){let n=e.editingCell,r=e.activeCell,o=e.selectionRange,l=e.cutRange,i=e.copyRange;return (n?`${String(n.rowId)}\0${n.columnId}`:"")+""+(r?`${r.rowIndex}\0${r.columnIndex}`:"")+""+(o?`${o.startRow}\0${o.startCol}\0${o.endRow}\0${o.endCol}`:"")+""+(l?`${l.startRow}\0${l.startCol}\0${l.endRow}\0${l.endCol}`:"")+""+(i?`${i.startRow}\0${i.startCol}\0${i.endRow}\0${i.endCol}`:"")+""+(e.isDragging?"1":"0")+""+(e.editable!==false?"1":"0")+""+(e.onCellValueChanged?"1":"0")+""+(e.formulaVersion??0)}get(e,n,r,o){let l=e*$.MAX_COL_STRIDE+n,i=this.cache.get(l);if(i!==void 0&&i.version===r)return i.descriptor;let s=o();return this.cache.set(l,{version:r,descriptor:s}),s}updateVersion(e){this.lastVersion=e;}get currentVersion(){return this.lastVersion}clear(){this.cache.clear();}};$.MAX_COL_STRIDE=1024;var W=$;function ze(t,e,n,r,o,l){return l!==void 0?l.get(n,r,l.currentVersion,()=>Xe(t,e,n,r,o)):Xe(t,e,n,r,o)}function Xe(t,e,n,r,o){let l=o.getRowId(t),i=r+o.colOffset,s=h(e,t),d=o.editable!==false&&s&&!!o.onCellValueChanged&&typeof e.cellEditor!="function",m=o.editable!==false&&s&&!!o.onCellValueChanged&&typeof e.cellEditor=="function"&&e.cellEditorPopup!==false,c=d||m,a=o.editingCell?.rowId===l&&o.editingCell?.columnId===e.columnId,u=!o.isDragging&&o.activeCell?.rowIndex===n&&o.activeCell?.columnIndex===i,f=o.selectionRange!=null&&o.selectionRange.startRow===o.selectionRange.endRow&&o.selectionRange.startCol===o.selectionRange.endCol,p=o.selectionRange!=null&&!f&&F(o.selectionRange,n,r),g=o.cutRange!=null&&F(o.cutRange,n,r),I=o.copyRange!=null&&F(o.copyRange,n,r),C=!o.isDragging&&o.copyRange==null&&o.cutRange==null&&o.selectionRange!=null&&n===o.selectionRange.endRow&&r===o.selectionRange.endCol,b=e.pinned!=null,y=e.pinned??void 0,N=x(t,e),H=o.hasFormula?.(r,n)??false,A=H?o.getFormulaValue?.(r,n):void 0,_="display",k;a&&d?(_="editing-inline",e.cellEditor==="text"||e.cellEditor==="select"||e.cellEditor==="checkbox"||e.cellEditor==="richSelect"||e.cellEditor==="date"?k=e.cellEditor:e.type==="date"?k="date":e.type==="boolean"?k="checkbox":k="text"):a&&m&&typeof e.cellEditor=="function"&&(_="editing-popover");let Gt=a&&H?o.getFormula?.(r,n)??N:N;return {mode:_,editorType:k,value:Gt,isActive:u,isInRange:p,isInCutRange:g,isInCopyRange:I,isSelectionEndCell:C,canEditAny:c,isPinned:b,pinnedSide:y,globalColIndex:i,rowId:l,rowIndex:n,displayValue:A!==void 0?A:N,columnType:e.type}}function je(t,e,n){if(n instanceof L)return n.toString();let r=t;if(r.renderCell&&typeof r.renderCell=="function")return r.renderCell(e);if(t.valueFormatter)return t.valueFormatter(n,e);if(n==null)return null;if(t.type==="date"){let o=t.dateFormat??G,l=B(n,o);if(l!==null)return l}return t.type==="boolean"?n?"True":"False":String(n)}function Ye(t,e,n){let r=t,o=n instanceof L,l=r.cellStyle?typeof r.cellStyle=="function"?r.cellStyle(e):r.cellStyle:void 0;return o?{...l,color:"var(--ogrid-formula-error-color, #d32f2f)"}:l}function Ke(t,e,n,r){let o=n.editorType??"text";return {value:n.value,item:t,column:e,rowIndex:n.rowIndex,editorType:o,onCommit:l=>r.commitCellEdit(t,e.columnId,n.value,l,n.rowIndex,n.globalColIndex,o==="checkbox"?{skipAdvance:true}:void 0),onCancel:()=>r.setEditingCell(null)}}function Ze(t,e,n,r,o){let l=n.value,i=r!==void 0?r:l,s=r;return {value:i,onValueChange:d=>{s=d,o.setPendingEditorValue(d);},onCommit:()=>{let d=s!==void 0?s:l;o.commitCellEdit(t,e.columnId,l,d,n.rowIndex,n.globalColIndex);},onCancel:o.cancelPopoverEdit,item:t,column:e,cellEditorParams:e.cellEditorParams}}function Qe(t,e){let n=null,r=((...o)=>{n!==null&&clearTimeout(n),n=setTimeout(()=>{t(...o),n=null;},e);});return r.cancel=()=>{n!==null&&(clearTimeout(n),n=null);},r}function Je(t,e,n){let r=e.startCol+n,o=e.endCol+n,l=t.querySelector(`[data-row-index="${e.startRow}"][data-col-index="${r}"]`),i=t.querySelector(`[data-row-index="${e.endRow}"][data-col-index="${o}"]`);if(!l||!i)return null;let s=t.getBoundingClientRect(),d=l.getBoundingClientRect(),m=i.getBoundingClientRect();return {top:d.top-s.top,left:d.left-s.left,width:m.right-d.left,height:m.bottom-d.top}}function et(t){let e=new Map;if(!t)return e;let n=t.querySelectorAll("[data-row-index][data-col-index]");for(let r=0;r<n.length;r++){let o=n[r],l=o.getAttribute("data-row-index")??"",i=o.getAttribute("data-col-index")??"";e.set(`${l},${i}`,o);}return e}function tt(t,e){if(typeof document>"u"||document.getElementById(t))return;let n=document.createElement("style");n.id=t,n.textContent=e,document.head.appendChild(n);}function nt(t,e,n){return n===null?{field:"",direction:"asc"}:n?{field:e,direction:n}:{field:e,direction:t.field===e&&t.direction==="asc"?"desc":"asc"}}var rt=48,ot=50,X=80,lt=16,it=30,st="__row_number__",at=6;var ie=16,se=520,qt=44,zt=8;function ut(t){return Math.max(80,Math.ceil(t.length*zt+qt))}function jt(t){let e=getComputedStyle(t),n=(parseFloat(e.paddingLeft)||0)+(parseFloat(e.paddingRight)||0),r=(parseFloat(e.borderLeftWidth)||0)+(parseFloat(e.borderRightWidth)||0),o=0;for(let a=0;a<t.children.length;a++){let u=t.children[a],f=u.className||"";if(f.includes("resizeHandle")||f.includes("resize-handle")||f.includes("ogrid-resize-handle")){o=u.offsetWidth;break}}let l=t.firstElementChild;if(!l)return t.offsetWidth;let i=[],s=a=>{for(let u=0;u<a.children.length;u++){let f=a.children[u],p=getComputedStyle(f);(p.overflow==="hidden"||p.flexShrink!=="0")&&(i.push({el:f,overflow:f.style.overflow,flexShrink:f.style.flexShrink,width:f.style.width,minWidth:f.style.minWidth,maxWidth:f.style.maxWidth}),f.style.overflow="visible",f.style.flexShrink="0",f.style.width="max-content",f.style.minWidth="max-content",f.style.maxWidth="none"),s(f);}},d=l.style.position,m=l.style.width;l.style.position="absolute",l.style.width="max-content",s(l);let c=l.offsetWidth;l.style.position=d,l.style.width=m;for(let a of i)a.el.style.overflow=a.overflow,a.el.style.flexShrink=a.flexShrink,a.el.style.width=a.width,a.el.style.minWidth=a.minWidth,a.el.style.maxWidth=a.maxWidth;return c+o+n+r}function dt(t,e,n){let r=e??80,l=(n??document).querySelectorAll(`[data-column-id="${t}"]`);if(l.length===0)return r;let i=r,s=[],d=[],m=[];if(l.forEach(c=>{let a=c;if(!!a.querySelector?.("[data-header-label]"))i=Math.max(i,jt(a));else {let f=a.firstElementChild??a;s.push(f);}}),s.length>0){for(let c=0;c<s.length;c++){let a=s[c];d.push(a.style.position),m.push(a.style.width),a.style.position="absolute",a.style.width="max-content";}for(let c=0;c<s.length;c++)i=Math.max(i,s[c].offsetWidth+ie);for(let c=0;c<s.length;c++)s[c].style.position=d[c],s[c].style.width=m[c];}return Math.min(se,Math.max(r,Math.ceil(i)))}function P(t,e,n,r){if(t===e)return t;let o=t+n;if(!r(t)&&!r(o)){let i=o;for(;i!==e;){if(r(i+n))return i;i+=n;}return e}let l=o;for(;l!==e;){if(!r(l))return l;l+=n;}return e}function ct(t,e,n,r,o,l){let i=t,s=e;return l?e>o?s=e-1:t>0&&(i=t-1,s=r):e<r?s=e+1:t<n&&(i=t+1,s=o),{rowIndex:i,columnIndex:s}}function mt(t){let{direction:e,rowIndex:n,columnIndex:r,dataColIndex:o,colOffset:l,maxRowIndex:i,maxColIndex:s,visibleColCount:d,isCtrl:m,isShift:c,selectionRange:a,isEmptyAt:u}=t,f=n,p=r;e==="ArrowDown"?f=m?P(n,i,1,b=>u(b,Math.max(0,o))):Math.min(n+1,i):e==="ArrowUp"?f=m?P(n,0,-1,b=>u(b,Math.max(0,o))):Math.max(n-1,0):e==="ArrowRight"?m&&o>=0?p=P(o,d-1,1,b=>u(n,b))+l:p=Math.min(r+1,s):m&&o>=0?p=P(o,0,-1,b=>u(n,b))+l:p=Math.max(r-1,l);let g=p-l,I=e==="ArrowDown"||e==="ArrowUp",C;return c?I?C=R({startRow:a?.startRow??n,startCol:a?.startCol??o,endRow:f,endCol:a?.endCol??o}):C=R({startRow:a?.startRow??n,startCol:a?.startCol??o,endRow:a?.endRow??n,endCol:g}):C={startRow:f,startCol:g,endRow:f,endCol:g},{newRowIndex:f,newColumnIndex:p,newDataColIndex:g,newRange:C}}function ft(t,e,n){let r=R(t),o=[];for(let l=r.startRow;l<=r.endRow;l++)for(let i=r.startCol;i<=r.endCol;i++){if(l>=e.length||i>=n.length)continue;let s=e[l],d=n[i];if(!h(d,s))continue;let m=x(s,d),c=T("",m,s,d);c.valid&&o.push({item:s,columnId:d.columnId,oldValue:m,newValue:c.value,rowIndex:l});}return o}function pt(t,e){return t===e?true:!t||!e?false:t.startRow===e.startRow&&t.endRow===e.endRow&&t.startCol===e.startCol&&t.endCol===e.endCol}function gt(t,e,n){return e<0||n<0?null:{startRow:Math.max(0,Math.min(t.startRow,e)),endRow:Math.max(0,Math.min(t.endRow,e)),startCol:Math.max(0,Math.min(t.startCol,n)),endCol:Math.max(0,Math.min(t.endCol,n))}}function Ct(t,e=40,n=2,r=20){let o=Math.min(t/e,1);return n+o*(r-n)}function It(t,e,n,r,o,l){let i=new Set(l),s=Math.min(t,e),d=Math.max(t,e);for(let m=s;m<=d;m++)if(m<r.length){let c=o(r[m]);n?i.add(c):i.delete(c);}return i}function bt(t,e,n){if(t.size===0||e.length===0)return {allSelected:false,someSelected:false};let r=t.size>=e.length&&e.every(l=>t.has(n(l))),o=!r&&t.size>0;return {allSelected:r,someSelected:o}}function ae(t,e){let n=e!=null&&e!==""?e:t;if(n==null||n==="")return "";try{return String(n).replace(/[\t\n]/g," ")}catch{return "[Object]"}}function xt(t,e,n,r){let o=R(n),l=[];for(let i=o.startRow;i<=o.endRow;i++){let s=[];for(let d=o.startCol;d<=o.endCol&&!(i>=t.length||d>=e.length);d++){let m=t[i],c=e[d];if(r?.hasFormula&&r?.getFormula){let p=r.flatColumns.findIndex(g=>g.columnId===c.columnId);if(p>=0&&r.hasFormula(p,i)){let g=r.getFormula(p,i);if(g){s.push(g);continue}}}let a=x(m,c),f=(c.clipboardFormatter?c.clipboardFormatter(a,m):null)??(c.valueFormatter?c.valueFormatter(a,m):a);s.push(ae(a,f));}l.push(s.join(" "));}return l.join(`\r
4
- `)}function ht(t){return t.trim()?t.split(/\r?\n/).filter(n=>n.length>0).map(n=>n.split(" ")):[]}function Rt(t,e,n,r,o,l){let i=[];for(let s=0;s<t.length;s++){let d=t[s];for(let m=0;m<d.length;m++){let c=e+s,a=n+m;if(c>=r.length||a>=o.length)continue;let u=r[c],f=o[a];if(!h(f,u))continue;let p=d[m]??"";if(p.startsWith("=")&&l?.setFormula){let C=l.flatColumns.findIndex(b=>b.columnId===f.columnId);if(C>=0){l.setFormula(C,c,p);continue}}let g=x(u,f),I=T(p,g,u,f);I.valid&&i.push({item:u,columnId:f.columnId,oldValue:g,newValue:I.value,rowIndex:c});}}return i}function yt(t,e,n){let r=[];for(let o=t.startRow;o<=t.endRow;o++)for(let l=t.startCol;l<=t.endCol;l++){if(o>=e.length||l>=n.length)continue;let i=e[o],s=n[l];if(!h(s,i))continue;let d=x(i,s),m=T("",d,i,s);m.valid&&r.push({item:i,columnId:s.columnId,oldValue:d,newValue:m.value,rowIndex:o});}return r}function U(t){let e="",n=t;for(;n>=0;)e=String.fromCharCode(n%26+65)+e,n=Math.floor(n/26)-1;return e}function q(t){let e=0,n=t.toUpperCase();for(let r=0;r<n.length;r++)e=e*26+(n.charCodeAt(r)-64);return e-1}function Tt(t,e){return `${U(t)}${e}`}var wt=/(?:'[^']*'!|[A-Za-z_]\w*!)?(\$?)([A-Z]+)(\$?)(\d+)/g;function St(t,e,n){return wt.lastIndex=0,t.replace(wt,(r,o,l,i,s)=>{let d=r.indexOf(o+l),m=d>0?r.substring(0,d):"",c=l,a=s;if(o!=="$"){let u=q(l)+e;if(u<0)return "#REF!";c=U(u);}if(i!=="$"){let u=parseInt(s,10)+n;if(u<1)return "#REF!";a=String(u);}return `${m}${o}${c}${i}${a}`})}function ue(t,e){if(t.columnId===e.columnId)return true;let n=t.type??"text",r=e.type??"text";return !(n!==r||t.cellEditor!==e.cellEditor)}function Dt(t,e,n,r,o,l){let i=[],s=r[t.startRow],d=o[t.startCol];if(!s||!d)return i;let m=x(s,d),c=l?l.flatColumns.findIndex(u=>u.columnId===d.columnId):-1,a=new Set;for(let u=t.startCol;u<=t.endCol;u++)u<o.length&&ue(d,o[u])&&a.add(u);for(let u=t.startRow;u<=t.endRow;u++)for(let f=t.startCol;f<=t.endCol;f++){if(u===e&&f===n||u>=r.length||!a.has(f))continue;let p=r[u],g=o[f];if(!h(g,p))continue;if(l&&l.hasFormula&&l.getFormula&&l.setFormula&&c>=0&&l.hasFormula(c,e)){let b=l.getFormula(c,e);if(b){let y=u-e,N=f-n,H=St(b,N,y),A=l.flatColumns.findIndex(_=>_.columnId===g.columnId);if(A>=0){l.setFormula(A,u,H);continue}}}let I=x(p,g),C=T(m,I,p,g);C.valid&&i.push({item:p,columnId:g.columnId,oldValue:I,newValue:C.value,rowIndex:u});}return i}var z=class{constructor(e=100){this.history=[];this.redoStack=[];this.batch=null;this.maxDepth=e;}get canUndo(){return this.history.length>0}get canRedo(){return this.redoStack.length>0}get historyLength(){return this.history.length}get redoLength(){return this.redoStack.length}get isBatching(){return this.batch!==null}push(e){e.length!==0&&(this.batch!==null?this.batch.push(...e):(this.history.push(e),this.history.length>this.maxDepth&&this.history.splice(0,this.history.length-this.maxDepth),this.redoStack.length=0));}record(e){this.push([e]);}beginBatch(){this.batch===null&&(this.batch=[]);}endBatch(){let e=this.batch;this.batch=null,!(!e||e.length===0)&&(this.history.push(e),this.history.length>this.maxDepth&&this.history.splice(0,this.history.length-this.maxDepth),this.redoStack.length=0);}undo(){let e=this.history.pop();return e?(this.redoStack.push(e),e):null}redo(){let e=this.redoStack.pop();return e?(this.history.push(e),e):null}clear(){this.history=[],this.redoStack=[];}};function vt(t){if(!Array.isArray(t)||t.length===0){console.warn("[OGrid] columns prop is empty or not an array");return}let e=typeof process<"u"&&process.env?.NODE_ENV!=="production",n=new Set;for(let r of t)r.columnId||console.warn("[OGrid] Column missing columnId:",r),n.has(r.columnId)&&console.warn(`[OGrid] Duplicate columnId: "${r.columnId}"`),n.add(r.columnId),e&&r.editable===true&&r.cellEditor==null&&console.warn(`[OGrid] Column "${r.columnId}" has editable=true but no cellEditor defined. Cells will not open an editor on double-click. Set cellEditor to 'text', 'select', 'checkbox', 'date', or a custom component.`);}function Et(t){typeof process<"u"&&process.env?.NODE_ENV==="production"||t.enabled===true&&(!t.rowHeight||t.rowHeight<=0)&&console.warn("[OGrid] virtualScroll.enabled is true but rowHeight is missing or <= 0. Set a positive rowHeight (e.g. virtualScroll: { enabled: true, rowHeight: 36 }) for correct virtual scrolling behavior.");}function Ft(t,e){if(typeof process<"u"&&process.env.NODE_ENV==="production"||!e)return;let n=new Set,r=Math.min(t.length,100);for(let o=0;o<r;o++){let l=e(t[o]);if(l==null){console.warn(`[OGrid] getRowId returned null/undefined for row ${o}`);return}if(n.has(l)){console.warn(`[OGrid] Duplicate row ID "${l}" at index ${o}. getRowId must return unique values.`);return}n.add(l);}}var de=[{minWidth:0,maxPriority:0},{minWidth:576,maxPriority:1},{minWidth:768,maxPriority:2},{minWidth:992,maxPriority:3},{minWidth:1200,maxPriority:1/0}];function ce(t,e,n){let r=n?.breakpoints??de,o=new Set;if(t<=0||e.length===0)return o;let l=1/0;for(let i=r.length-1;i>=0;i--)if(t>=r[i].minWidth){l=r[i].maxPriority;break}if(l===1/0)return o;for(let i of e)i.responsivePriority!=null&&(i.required||i.responsivePriority>l&&o.add(i.columnId));return o}function Mt(t){return t===true?{}:t||void 0}function Pt(t,e,n){if(!n||e<=0)return t;let r=ce(e,t,n);return r.size===0?t:t.filter(o=>!r.has(o.columnId))}function Nt(t,e,n,r,o){t.stopPropagation();let l=n-r;o.setActiveCell({rowIndex:e,columnIndex:n}),o.setSelectionRange({startRow:e,startCol:l,endRow:e,endCol:l});}function At(t){return t!==null&&typeof t=="object"&&"__ogridGroupHeader"in t&&t.__ogridGroupHeader===true}function me(t,e){return `${t}::${String(e??"")}`}function Yt(t,e,n){return t==null||t===""?"(blank)":e?.valueFormatter?e.valueFormatter(t,n):String(t)}function _t(t,e,n,r,o){if(n.length===0||t.length===0)return [];let l=n[0],i=n.slice(1),s=e.find(c=>c.columnId===l),d=new Map,m=[];for(let c of t){let a=s?x(c,s):c[l],u=me(l,a),f=o?`${o}>${u}`:u,p=d.get(f);p||(p={value:a,rows:[]},d.set(f,p),m.push(f)),p.rows.push(c);}return m.map(c=>{let a=d.get(c),u=i.length>0?_t(a.rows,e,i,r+1,c):void 0,f=u?u.reduce((p,g)=>p+g.itemCount,0):a.rows.length;return {groupKey:c,groupValue:a.value,columnId:l,displayText:Yt(a.value,s,a.rows[0]),items:a.rows,itemCount:f,subGroups:u,depth:r}})}function kt(t,e){let n=[];for(let r of t)n.push({__ogridGroupHeader:true,group:r}),e.has(r.groupKey)&&(r.subGroups&&r.subGroups.length>0?n.push(...kt(r.subGroups,e)):n.push(...r.items));return n}function Ot(t,e,n,r){if(n.length===0)return {displayRows:t,groupTree:[]};let o=_t(t,e,n,0,"");return {displayRows:kt(o,r),groupTree:o}}var Vt=300,Lt=300,Ut=300;var Ht={RESIZE_HANDLE:1,ACTIVE_CELL:2,FILL_HANDLE:3,SELECTION_OVERLAY:4,ROW_NUMBER:5,CLIPBOARD_OVERLAY:5,PINNED:6,SELECTION_CELL:7,THEAD:8,PINNED_HEADER:10,HEADER_FOCUS:11,SELECTION_HEADER_PINNED:12,LOADING:2,DROP_INDICATOR:100,DROPDOWN:1e3,FILTER_POPOVER:1e3,MODAL:2e3,FULLSCREEN:9999,CONTEXT_MENU:1e4};export{ie as AUTOSIZE_EXTRA_PX,se as AUTOSIZE_MAX_PX,lt as CELL_PADDING,rt as CHECKBOX_COLUMN_WIDTH,De as COLUMN_HEADER_MENU_ITEMS,W as CellDescriptorCache,G as DEFAULT_DATE_FORMAT,Vt as DEFAULT_DEBOUNCE_MS,X as DEFAULT_MIN_COLUMN_WIDTH,at as GRID_BORDER_RADIUS,Te as GRID_CONTEXT_MENU_ITEMS,J as MAX_PAGE_BUTTONS,Q as PAGE_SIZE_OPTIONS,Lt as PEOPLE_SEARCH_DEBOUNCE_MS,de as RESPONSIVE_BREAKPOINTS,st as ROW_NUMBER_COLUMN_ID,it as ROW_NUMBER_COLUMN_MIN_WIDTH,ot as ROW_NUMBER_COLUMN_WIDTH,Ut as SIDEBAR_TRANSITION_MS,z as UndoRedoStack,Ht as Z_INDEX,ft as applyCellDeletion,yt as applyCutClear,Dt as applyFillValues,Rt as applyPastedValues,It as applyRangeRowSelection,Pt as applyResponsiveHiding,ue as areFillCompatible,Ne as areGridRowPropsEqual,ne as booleanParser,et as buildCellIndex,j as buildCsvHeader,Y as buildCsvRows,Ot as buildGroupedRows,Ce as buildHeaderRows,Ke as buildInlineEditorProps,Ze as buildPopoverEditorProps,_e as calculateDropTarget,gt as clampSelectionToBounds,q as columnLetterToIndex,Me as computeAggregations,mt as computeArrowNavigation,Ct as computeAutoScrollSpeed,nt as computeNextSortState,bt as computeRowSelectionState,ct as computeTabNavigation,Le as computeTotalHeight,ke as computeVisibleColumnRange,Ve as computeVisibleRange,ge as createGridDataAccessor,oe as createSortFilterWorker,Ee as currencyParser,te as dateParser,Qe as debounce,be as deriveFilterOptionsFromData,Fe as emailParser,O as escapeCsvValue,ut as estimateHeaderMinWidth,pe as exportToCsv,le as extractValueMatrix,P as findCtrlArrowTarget,Z as flattenColumns,Tt as formatCellReference,ae as formatCellValueForTsv,B as formatDateForDisplay,xt as formatSelectionAsTsv,we as formatShortcut,ze as getCellRenderDescriptor,x as getCellValue,ve as getColumnHeaderMenuItems,Se as getContextMenuHandlers,Re as getDataGridStatusBarConfig,$e as getDateInputPlaceholder,S as getFilterField,me as getGroupKey,qe as getHeaderFilterConfig,xe as getMultiSelectFilterFields,ye as getPaginationViewModel,re as getPinStateForColumn,ce as getResponsiveHiddenColumns,Ue as getScrollTopForRow,he as getStatusBarParts,Nt as handleBooleanCellPointerDown,U as indexToColumnLetter,tt as injectGlobalStyles,h as isColumnEditable,v as isFilterConfig,At as isGroupHeader,F as isInSelectionRange,D as isRowInRange,dt as measureColumnContentWidth,Je as measureRange,Ie as mergeFilter,R as normalizeSelectionRange,ee as numberParser,ht as parseTsvClipboard,We as parseUserInputDate,T as parseValue,Oe as partitionColumnsForVirtualization,M as processClientSideData,Be as processClientSideDataAsync,pt as rangesEqual,Ae as reorderColumnArray,je as resolveCellDisplayContent,Ye as resolveCellStyle,Mt as resolveResponsiveConfig,Ge as terminateSortFilterWorker,fe as toUserLike,K as triggerCsvDownload,vt as validateColumns,Ft as validateRowIds,Et as validateVirtualScrollConfig};
1
+ function me(t){if(t)return {id:t.id,displayName:t.displayName,email:"email"in t&&t.email?t.email:t.mail||t.userPrincipalName||"",photo:t.photo}}function F(t,e,n){let r=Math.min(t.startRow,t.endRow),o=Math.max(t.startRow,t.endRow),l=Math.min(t.startCol,t.endCol),i=Math.max(t.startCol,t.endCol);return e>=r&&e<=o&&n>=l&&n<=i}function R(t){return {startRow:Math.min(t.startRow,t.endRow),endRow:Math.max(t.startRow,t.endRow),startCol:Math.min(t.startCol,t.endCol),endCol:Math.max(t.startCol,t.endCol)}}function k(t){if(t==null)return "";let e=String(t);return e.includes(",")||e.includes('"')||e.includes(`
2
+ `)?`"${e.replace(/"/g,'""')}"`:e}function j(t){return t.map(e=>k(e.name)).join(",")}function K(t,e,n,r){return t.map((o,l)=>e.map(i=>{if(r?.exportMode==="formulas"&&r.hasFormula&&r.getFormula&&r.columnIdToIndex){let a=r.columnIdToIndex.get(i.columnId);if(a!==void 0&&r.hasFormula(a,l)){let u=r.getFormula(a,l);if(u)return k(u)}}return k(n(o,i.columnId))}).join(","))}function fe(t,e,n,r,o){let l=j(e),i=K(t,e,n,o),a=[l,...i].join(`
3
+ `);Y(a,r??`export_${new Date().toISOString().slice(0,10)}.csv`);}function Y(t,e){let n=new Blob([t],{type:"text/csv;charset=utf-8;"}),r=URL.createObjectURL(n),o=document.createElement("a");try{o.setAttribute("href",r),o.setAttribute("download",e),o.style.visibility="hidden",document.body.appendChild(o),o.click();}finally{try{document.body.removeChild(o);}catch{}URL.revokeObjectURL(r);}}function x(t,e){return e.valueGetter?e.valueGetter(t):t[e.columnId]}function h(t,e){return t.editable===true||typeof t.editable=="function"&&t.editable(e)}function pe(t,e){return {getCellValue:(n,r)=>r<0||r>=t.length||n<0||n>=e.length?null:x(t[r],e[n]),getRowCount:()=>t.length,getColumnCount:()=>e.length}}function L(t){return "children"in t&&Array.isArray(t.children)}function Z(t){let e=[];for(let n of t)L(n)?e.push(...Z(n.children)):e.push(n);return e}function ge(t,e){function n(m,c){let d=c;for(let s of m)L(s)&&(d=Math.max(d,n(s.children,c+1)));return d}let r=n(t,0);if(r===0){let m=[];for(let c of t)if(!L(c)){if(e&&!e.has(c.columnId))continue;m.push({label:c.name,colSpan:1,isGroup:false,columnDef:c,depth:0});}return [m]}let o=r+1,l=Array.from({length:o},()=>[]),i=new Map;function a(m){let c=i.get(m);if(c!==void 0)return c;let d=0;for(let s of m)L(s)?d+=a(s.children):(!e||e.has(s.columnId))&&d++;return i.set(m,d),d}function u(m,c){for(let d of m)if(L(d)){let s=a(d.children);if(s===0)continue;l[c].push({label:d.headerName,colSpan:s,isGroup:true,depth:c}),u(d.children,c+1);}else {if(e&&!e.has(d.columnId))continue;l[c].push({label:d.name,colSpan:1,isGroup:false,columnDef:d,depth:c});}}return u(t,0),l.filter(m=>m.length>0)}function v(t){return t!=null&&typeof t=="object"&&"type"in t}function w(t){return (v(t.filterable)?t.filterable:null)?.filterField??t.columnId}function Ce(t,e,n){if(n===void 0||n.type==="text"&&n.value.trim()===""||n.type==="multiSelect"&&n.value.length===0||n.type==="date"&&!n.value.from&&!n.value.to||n.type==="people"&&!n.value){let{[e]:o,...l}=t;return l}return {...t,[e]:n}}function Ie(t,e){let n=[];for(let l=0;l<e.length;l++){let i=e[l];(v(i.filterable)?i.filterable:null)?.type==="multiSelect"&&n.push({col:i,field:w(i)});}if(n.length===0)return {};let r=new Map;for(let l=0;l<n.length;l++)r.set(n[l].field,new Set);for(let l=0;l<t.length;l++){let i=t[l];for(let a=0;a<n.length;a++){let u=x(i,n[a].col),m=r.get(n[a].field);u!=null&&u!==""&&m&&m.add(String(u));}}let o={};for(let l=0;l<n.length;l++){let i=r.get(n[l].field);o[n[l].field]=i?Array.from(i).sort():[];}return o}function be(t){let e=[];for(let n of t)(v(n.filterable)?n.filterable:null)?.type==="multiSelect"&&e.push(w(n));return e}function xe(t){let{totalCount:e,filteredCount:n,selectedCount:r,selectedCellCount:o,aggregation:l,suppressRowCount:i}=t,a=[];return i||a.push({key:"total",label:"Rows:",value:e}),n!==void 0&&n!==e&&a.push({key:"filtered",label:"Filtered:",value:n}),r!==void 0&&r>0&&a.push({key:"selected",label:"Selected:",value:r}),o!==void 0&&o>1&&a.push({key:"cells",label:"Cells:",value:o}),l&&(a.push({key:"sum",label:"Sum:",value:l.sum}),a.push({key:"avg",label:"Avg:",value:Math.round(l.avg*100)/100}),a.push({key:"min",label:"Min:",value:l.min}),a.push({key:"max",label:"Max:",value:l.max}),a.push({key:"count",label:"Count:",value:l.count})),a}function he(t,e,n,r){return t?typeof t=="object"?t:{totalCount:e,selectedCount:n>0?n:void 0,filteredCount:r!==void 0&&r!==e?r:void 0}:null}var Q=[10,25,50,100];function Ht(t,e){return e.includes(t)?e:[...e,t].sort((n,r)=>n-r)}var J=5;function Re(t,e,n,r){if(n<=0)return null;let o=r?.maxPageButtons??J,l=Math.ceil(n/e),i,a,u;if(l<=o){i=[];for(let d=1;d<=l;d++)i.push(d);a=false,u=false;}else {let d=Math.max(1,t-2),s=Math.min(l,t+2);s-d+1<o&&(d===1?s=Math.min(l,d+o-1):s===l&&(d=Math.max(1,s-o+1))),i=[];for(let f=d;f<=s;f++)i.push(f);a=d>1,u=s<l;}let m=Math.max(1,(t-1)*e+1),c=Math.min(t*e,n);return {totalPages:l,pageNumbers:i,showStartEllipsis:a,showEndEllipsis:u,startItem:m,endItem:c,pageSizeOptions:Ht(e,r?.pageSizeOptions??Q)}}var ye=[{id:"undo",label:"Undo",shortcut:"Ctrl+Z"},{id:"redo",label:"Redo",shortcut:"Ctrl+Y"},{id:"copy",label:"Copy",shortcut:"Ctrl+C",disabledWhenNoSelection:true,dividerBefore:true},{id:"cut",label:"Cut",shortcut:"Ctrl+X",disabledWhenNoSelection:true},{id:"paste",label:"Paste",shortcut:"Ctrl+V"},{id:"selectAll",label:"Select all",shortcut:"Ctrl+A",dividerBefore:true}];function Te(t){return typeof navigator<"u"&&/Mac|iPhone|iPad|iPod/.test(navigator.userAgent)?t.replace("Ctrl","\u2318"):t}function Se(t){let{onCopy:e,onCut:n,onPaste:r,onSelectAll:o,onUndo:l,onRedo:i,onClose:a}=t;return {undo:()=>{l(),a();},redo:()=>{i(),a();},copy:()=>{e(),a();},cut:()=>{n(),a();},paste:()=>{r(),a();},selectAll:()=>{o(),a();}}}var we=[{id:"pinLeft",label:"Pin left"},{id:"pinRight",label:"Pin right"},{id:"unpin",label:"Unpin"}];function De(t){let{canPinLeft:e,canPinRight:n,canUnpin:r,currentSort:o,isSortable:l=true,isResizable:i=true}=t,a=[];if(a.push({id:"pinLeft",label:"Pin left",disabled:!e},{id:"pinRight",label:"Pin right",disabled:!n},{id:"unpin",label:"Unpin",disabled:!r,divider:l||i}),l)if(!o)a.push({id:"sortAsc",label:"Sort ascending"},{id:"sortDesc",label:"Sort descending",divider:i});else {let u=o==="asc"?"desc":"asc",m=o==="asc"?"Sort descending":"Sort ascending";a.push({id:`sort${u==="asc"?"Asc":"Desc"}`,label:m},{id:"clearSort",label:"Clear sort",divider:i});}return i&&a.push({id:"autosizeThis",label:"Autosize this column"},{id:"autosizeAll",label:"Autosize all columns"}),a}function T(t,e,n,r){if(r.valueParser){let l={newValue:t,oldValue:e,data:n,column:r},i=r.valueParser(l);return i===void 0?{valid:false,value:void 0}:{valid:true,value:i}}if(r.cellEditor==="select"&&r.cellEditorParams?.values!=null&&Array.isArray(r.cellEditorParams.values)){let l=r.cellEditorParams.values,i=typeof t=="string"?t:String(t??"");if(i==="")return {valid:true,value:""};let a=l.find(u=>String(u).toLowerCase()===i.toLowerCase());return a!==void 0?{valid:true,value:a}:{valid:false,value:void 0}}let o=r.type;if(o==="date"){let l=te({newValue:t});return l===void 0?{valid:false,value:void 0}:{valid:true,value:l}}if(o==="boolean"){let l=ne({newValue:t});return l===void 0?{valid:false,value:void 0}:{valid:true,value:l}}if(o==="numeric"){let l=ee({newValue:t});return l===void 0?{valid:false,value:void 0}:{valid:true,value:l}}return {valid:true,value:t}}function ee(t){let{newValue:e}=t;if(e===""||e==null)return null;let n=String(e).replace(/[\s,]/g,""),r=Number(n);return Number.isNaN(r)?void 0:r}function ve(t){let{newValue:e}=t;if(e===""||e==null)return null;let n=String(e).replace(/[$\u20AC\u00A3\u00A5]/g,"").replace(/[\s,]/g,""),r=Number(n);return Number.isNaN(r)?void 0:r}function te(t){let{newValue:e}=t;if(e===""||e==null)return null;let n=String(e).trim(),r=new Date(n);if(!Number.isNaN(r.getTime()))return r.toISOString().substring(0,10)}function Ee(t){let{newValue:e}=t;if(e===""||e==null)return null;let n=String(e).trim();return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(n)?n:void 0}function ne(t){let{newValue:e}=t;if(e===""||e==null)return null;let n=String(e).trim().toLowerCase();if(["true","yes","1"].includes(n))return true;if(["false","no","0"].includes(n))return false}function Fe(t,e,n){if(!n)return null;let r=R(n),o=0,l=0,i=1/0,a=-1/0,u=0;for(let m=r.startRow;m<=r.endRow;m++)for(let c=r.startCol;c<=r.endCol;c++){if(m>=t.length||c>=e.length)continue;o++;let d=t[m],s=e[c],f=x(d,s),g=typeof f=="number"?f:Number(f);!isNaN(g)&&isFinite(g)&&(l+=g,g<i&&(i=g),g>a&&(a=g),u++);}return o<2||u===0?null:{sum:l,avg:l/u,min:i,max:a,count:u}}var Me=new WeakMap;function M(t,e,n,r,o){let l=Me.get(e);if(!l){l=new Map;for(let m=0;m<e.length;m++)l.set(e[m].columnId,e[m]);Me.set(e,l);}let i=[];for(let m=0;m<e.length;m++){let c=e[m],d=w(c),s=n[d];if(s)switch(s.type){case "multiSelect":if(s.value.length>0){let f=new Set(s.value);i.push(g=>f.has(String(x(g,c))));}break;case "text":{let f=s.value.trim();if(f){let g=f.toLowerCase(),p=new Map;for(let I=0;I<t.length;I++)p.set(t[I],String(x(t[I],c)??"").toLowerCase());i.push(I=>(p.get(I)??"").includes(g));}break}case "people":{let f=s.value.email.toLowerCase(),g=new Map;for(let p=0;p<t.length;p++)g.set(t[p],String(x(t[p],c)??"").toLowerCase());i.push(p=>(g.get(p)??"")===f);break}case "date":{let f=s.value,g=f.from?new Date(f.from+"T00:00:00").getTime():NaN,p=f.to?new Date(f.to+"T23:59:59.999").getTime():NaN,I=new Map;for(let C=0;C<t.length;C++){let b=x(t[C],c);if(b==null)I.set(t[C],NaN);else {let y=new Date(String(b)).getTime();I.set(t[C],Number.isNaN(y)?NaN:y);}}i.push(C=>{let b=I.get(C)??NaN;return !(Number.isNaN(b)||!Number.isNaN(g)&&b<g||!Number.isNaN(p)&&b>p)});break}}}let a=i.length>0,u=a?t.filter(m=>{for(let c=0;c<i.length;c++)if(!i[c](m))return false;return true}):t;if(r){let m=a?u:u.slice(),c=l.get(r),d=c?.compare,s=o==="asc"?1:-1;if(c?.type==="date"&&!d){let g=new Map;for(let p=0;p<m.length;p++){let I=m[p],C=c?x(I,c):I[r];if(C==null)g.set(I,NaN);else {let b=new Date(String(C)).getTime();g.set(I,Number.isNaN(b)?0:b);}}m.sort((p,I)=>{let C=g.get(p)??NaN,b=g.get(I)??NaN;return Number.isNaN(C)&&Number.isNaN(b)?0:Number.isNaN(C)?-1*s:Number.isNaN(b)?1*s:C===b?0:C>b?s:-s});}else if(d)m.sort((g,p)=>d(g,p)*s);else {let g=new Map;for(let p=0;p<m.length;p++){let I=m[p],C=c?x(I,c):I[r];C==null?g.set(I,void 0):typeof C=="number"?g.set(I,C):g.set(I,String(C).toLowerCase());}m.sort((p,I)=>{let C=g.get(p),b=g.get(I);return C===void 0&&b===void 0?0:C===void 0?-1*s:b===void 0?1*s:C===b?0:C>b?s:-s});}return m}return u}function D(t,e){if(!t)return false;let n=Math.min(t.startRow,t.endRow),r=Math.max(t.startRow,t.endRow);return e>=n&&e<=r}function Ae(t,e){if(t.item!==e.item||t.isSelected!==e.isSelected||t.hasCheckboxCol!==e.hasCheckboxCol||t.visibleCols!==e.visibleCols||t.columnMeta!==e.columnMeta||t.cellClassMap!==e.cellClassMap||t.columnLayouts!==e.columnLayouts)return false;let n=t.rowIndex;if(t.editingRowId!==e.editingRowId&&(t.editingRowId===t.rowId||e.editingRowId===e.rowId))return false;let r=t.activeCell?.rowIndex===n,o=e.activeCell?.rowIndex===n;if(r!==o||r&&o&&t.activeCell?.columnIndex!==e.activeCell?.columnIndex)return false;let l=D(t.selectionRange,n),i=D(e.selectionRange,n);if(l!==i||l&&i&&(t.selectionRange?.startCol!==e.selectionRange?.startCol||t.selectionRange?.endCol!==e.selectionRange?.endCol))return false;let a=t.selectionRange?.endRow===n,u=e.selectionRange?.endRow===n;return !(a!==u||(a||u)&&t.isDragging!==e.isDragging||t.cutRange!==e.cutRange&&(D(t.cutRange,n)||D(e.cutRange,n))||t.copyRange!==e.copyRange&&(D(t.copyRange,n)||D(e.copyRange,n)))}function re(t,e){return e?e.left?.includes(t)?"left":e.right?.includes(t)?"right":"unpinned":"unpinned"}function Pe(t,e,n){let r=t.filter(i=>i!==e),o=Math.max(0,Math.min(n,r.length)),l=[...r];return l.splice(o,0,e),l}function Ne(t){let{mouseX:e,columnOrder:n,draggedColumnId:r,draggedPinState:o,tableElement:l,pinnedColumns:i}=t,a=l.querySelectorAll("[data-column-id]");if(a.length===0)return null;let u=[];if(a.forEach(s=>{let f=s.getAttribute("data-column-id");if(!f||re(f,i)!==o)return;let p=s.getBoundingClientRect(),I=n.indexOf(f);I!==-1&&u.push({columnId:f,left:p.left,right:p.right,midX:p.left+p.width/2,orderIndex:I});}),u.length===0)return null;u.sort((s,f)=>s.left-f.left);let m,c;if(e<=u[0].midX)m=u[0].orderIndex,c=u[0].left;else if(e>=u[u.length-1].midX){let s=u[u.length-1];m=s.orderIndex+1,c=s.right;}else {let s=-1;for(let f=0;f<u.length-1;f++)if(e>=u[f].midX&&e<u[f+1].midX){s=f;break}if(s===-1)return null;m=u[s].orderIndex+1,c=u[s].right;}let d=n.indexOf(r);return d===m||d+1===m?{targetIndex:m,indicatorX:null}:{targetIndex:m,indicatorX:c}}function Oe(t,e,n,r=2){if(e.length===0||n<=0)return {startIndex:0,endIndex:-1,leftOffset:0,rightOffset:0};let o=0,l=e.length,i=-1;for(let d=0;d<e.length;d++){let s=o;o+=e[d],o>t&&l===e.length&&(l=d),s<t+n&&(i=d);}if(l>i)return {startIndex:0,endIndex:-1,leftOffset:0,rightOffset:0};let a=Math.max(0,l-r),u=Math.min(e.length-1,i+r),m=0;for(let d=0;d<a;d++)m+=e[d];let c=0;for(let d=u+1;d<e.length;d++)c+=e[d];return {startIndex:a,endIndex:u,leftOffset:m,rightOffset:c}}function _e(t,e,n){let r=[],o=[],l=[];for(let a of t){let u=n?.[a.columnId];u==="left"?r.push(a):u==="right"?o.push(a):l.push(a);}if(!e||e.endIndex<0)return {pinnedLeft:r,virtualizedUnpinned:l,pinnedRight:o,leftSpacerWidth:0,rightSpacerWidth:0};let i=l.slice(e.startIndex,e.endIndex+1);return {pinnedLeft:r,virtualizedUnpinned:i,pinnedRight:o,leftSpacerWidth:e.leftOffset,rightSpacerWidth:e.rightOffset}}function ke(t,e,n,r,o=5){if(r<=0||e<=0||n<=0)return {startIndex:0,endIndex:0,offsetTop:0,offsetBottom:0};let l=Math.max(0,Math.floor(t/e)-o),i=Math.min(r-1,Math.ceil((t+n)/e)+o),a=l*e,u=Math.max(0,(r-i-1)*e);return {startIndex:l,endIndex:i,offsetTop:a,offsetBottom:u}}function Le(t,e){return t*e}function Ve(t,e,n,r="start"){let o=t*e;switch(r){case "start":return o;case "center":return Math.max(0,o-(n-e)/2);case "end":return Math.max(0,o-n+e)}}function Ue(){let t=self;t.onmessage=e=>{let n=e.data;if(n.type!=="sort-filter")return;let{requestId:r,values:o,filters:l,sort:i}=n,a=o.length,u=[],m=Object.entries(l);if(m.length===0){u=new Array(a);for(let d=0;d<a;d++)u[d]=d;}else for(let d=0;d<a;d++){let s=true;for(let f=0;f<m.length;f++){let g=Number(m[f][0]),p=m[f][1],I=o[d][g];switch(p.type){case "text":{let C=p.value.trim().toLowerCase();C&&!String(I??"").toLowerCase().includes(C)&&(s=false);break}case "multiSelect":{p.value.length>0&&(new Set(p.value).has(String(I??""))||(s=false));break}case "date":{if(I==null){s=false;break}let C=new Date(String(I)).getTime();if(isNaN(C)){s=false;break}if(p.value.from){let b=new Date(p.value.from+"T00:00:00").getTime();if(C<b){s=false;break}}if(p.value.to){let b=new Date(p.value.to+"T23:59:59.999").getTime();if(C>b){s=false;break}}break}}if(!s)break}s&&u.push(d);}if(i){let{columnIndex:d,direction:s}=i,f=s==="asc"?1:-1;u.sort((g,p)=>{let I=o[g][d],C=o[p][d];if(I==null&&C==null)return 0;if(I==null)return -1*f;if(C==null)return 1*f;if(typeof I=="number"&&typeof C=="number")return I===C?0:I>C?f:-f;let b=String(I).toLowerCase(),y=String(C).toLowerCase();return b===y?0:b>y?f:-f});}let c={type:"sort-filter-result",requestId:r,indices:u};t.postMessage(c);};}var S=null,Bt=0,E=new Map;function oe(){if(S)return S;if(typeof Worker>"u"||typeof Blob>"u"||typeof URL>"u")return null;try{let t=Ue.toString(),e=new Blob([`(${t})()`],{type:"application/javascript"}),n=URL.createObjectURL(e);return S=new Worker(n),URL.revokeObjectURL(n),S.onmessage=r=>{let{requestId:o,indices:l}=r.data,i=E.get(o);i&&(E.delete(o),i.resolve(l));},S.onerror=r=>{for(let[o,l]of E)l.reject(new Error(r.message||"Worker error")),E.delete(o);},S}catch{return null}}function He(){S&&(S.terminate(),S=null);for(let[t,e]of E)e.reject(new Error("Worker terminated")),E.delete(t);}function le(t,e){let n=new Array(t.length);for(let r=0;r<t.length;r++){let o=new Array(e.length);for(let l=0;l<e.length;l++){let i=x(t[r],e[l]);i==null?o[l]=null:typeof i=="string"||typeof i=="number"||typeof i=="boolean"?o[l]=i:o[l]=String(i);}n[r]=o;}return n}function Be(t,e,n,r,o){if(r&&e.find(f=>f.columnId===r)?.compare)return Promise.resolve(M(t,e,n,r,o));let l=oe();if(!l)return Promise.resolve(M(t,e,n,r,o));let i=new Map;for(let s=0;s<e.length;s++)i.set(e[s].columnId,s);let a=le(t,e),u=e.map((s,f)=>({type:s.type??"text",index:f})),m={};for(let s of e){let f=w(s),g=n[f];if(!g)continue;let p=i.get(s.columnId);if(p!==void 0)switch(g.type){case "text":m[p]={type:"text",value:g.value};break;case "multiSelect":m[p]={type:"multiSelect",value:g.value};break;case "date":m[p]={type:"date",value:{from:g.value.from,to:g.value.to}};break;case "people":return Promise.resolve(M(t,e,n,r,o))}}let c;if(r){let s=i.get(r);s!==void 0&&(c={columnIndex:s,direction:o??"asc"});}let d=++Bt;return new Promise((s,f)=>{E.set(d,{resolve:p=>{let I=new Array(p.length);for(let C=0;C<p.length;C++)I[C]=t[p[C]];s(I);},reject:f});let g={type:"sort-filter",requestId:d,values:a,columnMeta:u,filters:m,sort:c};l.postMessage(g);})}var We=5e3;function Ge(t,e,n){return !(!(t===true||t==="auto"&&e>5e3)||n?.filters&&Object.values(n.filters).some(o=>o?.type==="people")||n?.sortBy&&n.columns&&n.columns.find(l=>l.columnId===n.sortBy)?.compare)}var B="YYYY-MM-DD";function W(t,e,n="UTC"){if(t==null)return null;let r=t instanceof Date?t:new Date(String(t));if(Number.isNaN(r.getTime()))return null;let o,l,i;if(n==="UTC")o=r.getUTCFullYear(),l=r.getUTCMonth()+1,i=r.getUTCDate();else {let d=new Intl.DateTimeFormat("en-CA",{timeZone:n,year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(r);o=parseInt(d.find(s=>s.type==="year")?.value??"0",10),l=parseInt(d.find(s=>s.type==="month")?.value??"0",10),i=parseInt(d.find(s=>s.type==="day")?.value??"0",10);}let a=String(o).padStart(4,"0"),u=String(l).padStart(2,"0"),m=String(i).padStart(2,"0");return e.replace("YYYY",a).replace("MM",u).replace("DD",m)}function $e(t,e){if(!t||!t.trim())return null;let r=t.trim().split(/[/\-.\s]+/).filter(Boolean);if(r.length===0)return null;let o=new Date().getUTCFullYear(),l=Wt(e),i,a,u;if(r.length===3){let[c,d,s]=r.map(Number);l==="YMD"?(i=c,a=d,u=s):l==="DMY"?(u=c,a=d,i=s):(a=c,u=d,i=s),i!==void 0&&i<100&&(i=i<50?2e3+i:1900+i);}else if(r.length===2){let[c,d]=r.map(Number);l==="DMY"?(u=c,a=d):(a=c,u=d),i=o;}else if(r.length===1){let c=r[0];if(/^\d+$/.test(c))if(c.length===8)i=parseInt(c.slice(0,4),10),a=parseInt(c.slice(4,6),10),u=parseInt(c.slice(6,8),10);else if(c.length===4)a=parseInt(c.slice(0,2),10),u=parseInt(c.slice(2,4),10),i=o;else return null;else return null}else return null;if(!Gt(i,a,u))return null;let m=new Date(Date.UTC(i,a-1,u));return m.getUTCFullYear()!==i||m.getUTCMonth()+1!==a||m.getUTCDate()!==u?null:m}function Xe(t){return t}function Wt(t){let e=t.indexOf("Y"),n=t.indexOf("M"),r=t.indexOf("D");return e===-1||n===-1||r===-1?"MDY":e<n&&n<r?"YMD":r<n&&n<e?"DMY":"MDY"}function Gt(t,e,n){return !(t==null||e==null||n==null||!Number.isFinite(t)||!Number.isFinite(e)||!Number.isFinite(n)||e<1||e>12||n<1||n>31)}var V=class{constructor(e,n){this.type=e;this.message=n;}toString(){return this.type}};function je(t,e){let n=v(t.filterable)?t.filterable:null,r=n?.type??"none",o=n?.filterField??t.columnId,l=t.sortable!==false,i=e.filters[o],a={columnKey:t.columnId,columnName:t.name,filterType:r,isSorted:e.sortBy===t.columnId,isSortedDescending:e.sortBy===t.columnId&&e.sortDirection==="desc",onSort:l?()=>e.onColumnSort(t.columnId):void 0};return r==="text"?{...a,textValue:i?.type==="text"?i.value:"",onTextChange:u=>e.onFilterChange(o,u.trim()?{type:"text",value:u}:void 0)}:r==="people"?{...a,selectedUser:i?.type==="people"?i.value:void 0,onUserChange:u=>e.onFilterChange(o,u?{type:"people",value:u}:void 0),peopleSearch:e.peopleSearch}:r==="multiSelect"?{...a,options:e.filterOptions[o]??[],isLoadingOptions:e.loadingFilterOptions[o]??false,selectedValues:i?.type==="multiSelect"?i.value:[],onFilterChange:u=>e.onFilterChange(o,u.length?{type:"multiSelect",value:u}:void 0)}:r==="date"?{...a,dateValue:i?.type==="date"?i.value:void 0,onDateChange:u=>e.onFilterChange(o,u?{type:"date",value:u}:void 0)}:a}function qe(t){return t!=null&&typeof t!="string"}var $=class ${constructor(){this.cache=new Map;this.lastVersion="";}static computeVersion(e){let n=e.editingCell,r=e.activeCell,o=e.selectionRange,l=e.cutRange,i=e.copyRange;return (n?`${String(n.rowId)}\0${n.columnId}`:"")+""+(r?`${r.rowIndex}\0${r.columnIndex}`:"")+""+(o?`${o.startRow}\0${o.startCol}\0${o.endRow}\0${o.endCol}`:"")+""+(l?`${l.startRow}\0${l.startCol}\0${l.endRow}\0${l.endCol}`:"")+""+(i?`${i.startRow}\0${i.startCol}\0${i.endRow}\0${i.endCol}`:"")+""+(e.isDragging?"1":"0")+""+(e.editable!==false?"1":"0")+""+(e.onCellValueChanged?"1":"0")+""+(e.formulaVersion??0)}get(e,n,r,o){let l=e*$.MAX_COL_STRIDE+n,i=this.cache.get(l);if(i!==void 0&&i.version===r)return i.descriptor;let a=o();return this.cache.set(l,{version:r,descriptor:a}),a}updateVersion(e){this.lastVersion=e;}get currentVersion(){return this.lastVersion}clear(){this.cache.clear();}};$.MAX_COL_STRIDE=1024;var G=$;function Ke(t,e,n,r,o,l){return l!==void 0?l.get(n,r,l.currentVersion,()=>ze(t,e,n,r,o)):ze(t,e,n,r,o)}function ze(t,e,n,r,o){let l=o.getRowId(t),i=r+o.colOffset,a=h(e,t),u=o.editable!==false&&a&&!!o.onCellValueChanged&&!qe(e.cellEditor),m=o.editable!==false&&a&&!!o.onCellValueChanged&&qe(e.cellEditor)&&e.cellEditorPopup!==false,c=u||m,d=o.editingCell?.rowId===l&&o.editingCell?.columnId===e.columnId,s=!o.isDragging&&o.activeCell?.rowIndex===n&&o.activeCell?.columnIndex===i,f=o.selectionRange!=null&&o.selectionRange.startRow===o.selectionRange.endRow&&o.selectionRange.startCol===o.selectionRange.endCol,g=o.selectionRange!=null&&!f&&F(o.selectionRange,n,r),p=o.cutRange!=null&&F(o.cutRange,n,r),I=o.copyRange!=null&&F(o.copyRange,n,r),C=!o.isDragging&&o.copyRange==null&&o.cutRange==null&&o.selectionRange!=null&&n===o.selectionRange.endRow&&r===o.selectionRange.endCol,b=e.pinned!=null,y=e.pinned??void 0,P=x(t,e),H=o.hasFormula?.(r,n)??false,N=H?o.getFormulaValue?.(r,n):void 0,O="display",_;d&&u?(O="editing-inline",e.cellEditor==="text"||e.cellEditor==="select"||e.cellEditor==="checkbox"||e.cellEditor==="richSelect"||e.cellEditor==="date"?_=e.cellEditor:e.type==="date"?_="date":e.type==="boolean"?_="checkbox":_="text"):d&&m&&(O="editing-popover");let Ut=d&&H?o.getFormula?.(r,n)??P:P;return {mode:O,editorType:_,value:Ut,isActive:s,isInRange:g,isInCutRange:p,isInCopyRange:I,isSelectionEndCell:C,canEditAny:c,isPinned:b,pinnedSide:y,globalColIndex:i,rowId:l,rowIndex:n,displayValue:N!==void 0?N:P,columnType:e.type}}function Ye(t,e,n){if(n instanceof V)return n.toString();let r=t;if(r.renderCell&&typeof r.renderCell=="function")return r.renderCell(e);if(t.valueFormatter)return t.valueFormatter(n,e);if(n==null)return null;if(t.type==="date"){let o=t.dateFormat??B,l=W(n,o);if(l!==null)return l}return t.type==="boolean"?n?"True":"False":String(n)}function Ze(t,e,n){let r=t,o=n instanceof V,l=r.cellStyle?typeof r.cellStyle=="function"?r.cellStyle(e):r.cellStyle:void 0;return o?{...l,color:"var(--ogrid-formula-error-color, #d32f2f)"}:l}function Qe(t,e,n,r){let o=n.editorType??"text";return {value:n.value,item:t,column:e,rowIndex:n.rowIndex,editorType:o,onCommit:l=>r.commitCellEdit(t,e.columnId,n.value,l,n.rowIndex,n.globalColIndex,o==="checkbox"?{skipAdvance:true}:void 0),onCancel:()=>r.setEditingCell(null)}}function Je(t,e,n,r,o){let l=n.value,i=r!==void 0?r:l,a=r;return {value:i,onValueChange:u=>{a=u,o.setPendingEditorValue(u);},onCommit:()=>{let u=a!==void 0?a:l;o.commitCellEdit(t,e.columnId,l,u,n.rowIndex,n.globalColIndex);},onCancel:o.cancelPopoverEdit,item:t,column:e,cellEditorParams:e.cellEditorParams}}function et(t,e){let n=null,r=((...o)=>{n!==null&&clearTimeout(n),n=setTimeout(()=>{t(...o),n=null;},e);});return r.cancel=()=>{n!==null&&(clearTimeout(n),n=null);},r}function tt(t,e,n){let r=e.startCol+n,o=e.endCol+n,l=t.querySelector(`[data-row-index="${e.startRow}"][data-col-index="${r}"]`),i=t.querySelector(`[data-row-index="${e.endRow}"][data-col-index="${o}"]`);if(!l||!i)return null;let a=t.getBoundingClientRect(),u=l.getBoundingClientRect(),m=i.getBoundingClientRect();return {top:u.top-a.top,left:u.left-a.left,width:m.right-u.left,height:m.bottom-u.top}}function nt(t){let e=new Map;if(!t)return e;let n=t.querySelectorAll("[data-row-index][data-col-index]");for(let r=0;r<n.length;r++){let o=n[r],l=o.getAttribute("data-row-index")??"",i=o.getAttribute("data-col-index")??"";e.set(`${l},${i}`,o);}return e}function rt(t,e){if(typeof document>"u"||document.getElementById(t))return;let n=document.createElement("style");n.id=t,n.textContent=e,document.head.appendChild(n);}function ot(t,e,n){return n===null?{field:"",direction:"asc"}:n?{field:e,direction:n}:{field:e,direction:t.field===e&&t.direction==="asc"?"desc":"asc"}}var lt=48,it=50,X=80,at=16,st=30,ut="__row_number__",dt=6;var ie=16,ae=520,$t=44,Xt=8;function ct(t){return Math.max(80,Math.ceil(t.length*Xt+$t))}function qt(t){let e=getComputedStyle(t),n=(parseFloat(e.paddingLeft)||0)+(parseFloat(e.paddingRight)||0),r=(parseFloat(e.borderLeftWidth)||0)+(parseFloat(e.borderRightWidth)||0),o=0;for(let d=0;d<t.children.length;d++){let s=t.children[d],f=s.className||"";if(f.includes("resizeHandle")||f.includes("resize-handle")||f.includes("ogrid-resize-handle")){o=s.offsetWidth;break}}let l=t.firstElementChild;if(!l)return t.offsetWidth;let i=[],a=d=>{for(let s=0;s<d.children.length;s++){let f=d.children[s],g=getComputedStyle(f);(g.overflow==="hidden"||g.flexShrink!=="0")&&(i.push({el:f,overflow:f.style.overflow,flexShrink:f.style.flexShrink,width:f.style.width,minWidth:f.style.minWidth,maxWidth:f.style.maxWidth}),f.style.overflow="visible",f.style.flexShrink="0",f.style.width="max-content",f.style.minWidth="max-content",f.style.maxWidth="none"),a(f);}},u=l.style.position,m=l.style.width;l.style.position="absolute",l.style.width="max-content",a(l);let c=l.offsetWidth;l.style.position=u,l.style.width=m;for(let d of i)d.el.style.overflow=d.overflow,d.el.style.flexShrink=d.flexShrink,d.el.style.width=d.width,d.el.style.minWidth=d.minWidth,d.el.style.maxWidth=d.maxWidth;return c+o+n+r}function mt(t,e,n){let r=e??80,l=(n??document).querySelectorAll(`[data-column-id="${t}"]`);if(l.length===0)return r;let i=r,a=[],u=[],m=[];if(l.forEach(c=>{let d=c;if(!!d.querySelector?.("[data-header-label]"))i=Math.max(i,qt(d));else {let f=d.firstElementChild??d;a.push(f);}}),a.length>0){for(let c=0;c<a.length;c++){let d=a[c];u.push(d.style.position),m.push(d.style.width),d.style.position="absolute",d.style.width="max-content";}for(let c=0;c<a.length;c++)i=Math.max(i,a[c].offsetWidth+ie);for(let c=0;c<a.length;c++)a[c].style.position=u[c],a[c].style.width=m[c];}return Math.min(ae,Math.max(r,Math.ceil(i)))}function A(t,e,n,r){if(t===e)return t;let o=t+n;if(!r(t)&&!r(o)){let i=o;for(;i!==e;){if(r(i+n))return i;i+=n;}return e}let l=o;for(;l!==e;){if(!r(l))return l;l+=n;}return e}function ft(t,e,n,r,o,l){let i=t,a=e;return l?e>o?a=e-1:t>0&&(i=t-1,a=r):e<r?a=e+1:t<n&&(i=t+1,a=o),{rowIndex:i,columnIndex:a}}function pt(t){let{direction:e,rowIndex:n,columnIndex:r,dataColIndex:o,colOffset:l,maxRowIndex:i,maxColIndex:a,visibleColCount:u,isCtrl:m,isShift:c,selectionRange:d,isEmptyAt:s}=t,f=n,g=r;e==="ArrowDown"?f=m?A(n,i,1,b=>s(b,Math.max(0,o))):Math.min(n+1,i):e==="ArrowUp"?f=m?A(n,0,-1,b=>s(b,Math.max(0,o))):Math.max(n-1,0):e==="ArrowRight"?m&&o>=0?g=A(o,u-1,1,b=>s(n,b))+l:g=Math.min(r+1,a):m&&o>=0?g=A(o,0,-1,b=>s(n,b))+l:g=Math.max(r-1,l);let p=g-l,I=e==="ArrowDown"||e==="ArrowUp",C;return c?I?C=R({startRow:d?.startRow??n,startCol:d?.startCol??o,endRow:f,endCol:d?.endCol??o}):C=R({startRow:d?.startRow??n,startCol:d?.startCol??o,endRow:d?.endRow??n,endCol:p}):C={startRow:f,startCol:p,endRow:f,endCol:p},{newRowIndex:f,newColumnIndex:g,newDataColIndex:p,newRange:C}}function gt(t,e,n){let r=R(t),o=[];for(let l=r.startRow;l<=r.endRow;l++)for(let i=r.startCol;i<=r.endCol;i++){if(l>=e.length||i>=n.length)continue;let a=e[l],u=n[i];if(!h(u,a))continue;let m=x(a,u),c=T("",m,a,u);c.valid&&o.push({item:a,columnId:u.columnId,oldValue:m,newValue:c.value,rowIndex:l});}return o}function Ct(t,e){return t===e?true:!t||!e?false:t.startRow===e.startRow&&t.endRow===e.endRow&&t.startCol===e.startCol&&t.endCol===e.endCol}function It(t,e,n){return e<0||n<0?null:{startRow:Math.max(0,Math.min(t.startRow,e)),endRow:Math.max(0,Math.min(t.endRow,e)),startCol:Math.max(0,Math.min(t.startCol,n)),endCol:Math.max(0,Math.min(t.endCol,n))}}function bt(t,e=40,n=2,r=20){let o=Math.min(t/e,1);return n+o*(r-n)}function xt(t,e,n,r,o,l){let i=new Set(l),a=Math.min(t,e),u=Math.max(t,e);for(let m=a;m<=u;m++)if(m<r.length){let c=o(r[m]);n?i.add(c):i.delete(c);}return i}function ht(t,e,n){if(t.size===0||e.length===0)return {allSelected:false,someSelected:false};let r=t.size>=e.length&&e.every(l=>t.has(n(l))),o=!r&&t.size>0;return {allSelected:r,someSelected:o}}function se(t,e){let n=e!=null&&e!==""?e:t;if(n==null||n==="")return "";try{return String(n).replace(/[\t\n]/g," ")}catch{return "[Object]"}}function Rt(t,e,n,r){let o=R(n),l=[];for(let i=o.startRow;i<=o.endRow;i++){let a=[];for(let u=o.startCol;u<=o.endCol&&!(i>=t.length||u>=e.length);u++){let m=t[i],c=e[u];if(r?.hasFormula&&r?.getFormula){let g=r.flatColumns.findIndex(p=>p.columnId===c.columnId);if(g>=0&&r.hasFormula(g,i)){let p=r.getFormula(g,i);if(p){a.push(p);continue}}}let d=x(m,c),f=(c.clipboardFormatter?c.clipboardFormatter(d,m):null)??(c.valueFormatter?c.valueFormatter(d,m):d);a.push(se(d,f));}l.push(a.join(" "));}return l.join(`\r
4
+ `)}function yt(t){return t.trim()?t.split(/\r?\n/).filter(n=>n.length>0).map(n=>n.split(" ")):[]}function Tt(t,e,n,r,o,l){let i=[];for(let a=0;a<t.length;a++){let u=t[a];for(let m=0;m<u.length;m++){let c=e+a,d=n+m;if(c>=r.length||d>=o.length)continue;let s=r[c],f=o[d];if(!h(f,s))continue;let g=u[m]??"";if(g.startsWith("=")&&l?.setFormula){let C=l.flatColumns.findIndex(b=>b.columnId===f.columnId);if(C>=0){l.setFormula(C,c,g);continue}}let p=x(s,f),I=T(g,p,s,f);I.valid&&i.push({item:s,columnId:f.columnId,oldValue:p,newValue:I.value,rowIndex:c});}}return i}function St(t,e,n){let r=[];for(let o=t.startRow;o<=t.endRow;o++)for(let l=t.startCol;l<=t.endCol;l++){if(o>=e.length||l>=n.length)continue;let i=e[o],a=n[l];if(!h(a,i))continue;let u=x(i,a),m=T("",u,i,a);m.valid&&r.push({item:i,columnId:a.columnId,oldValue:u,newValue:m.value,rowIndex:o});}return r}function U(t){let e="",n=t;for(;n>=0;)e=String.fromCharCode(n%26+65)+e,n=Math.floor(n/26)-1;return e}function q(t){let e=0,n=t.toUpperCase();for(let r=0;r<n.length;r++)e=e*26+(n.charCodeAt(r)-64);return e-1}function wt(t,e){return `${U(t)}${e}`}var Dt=/(?:'[^']*'!|[A-Za-z_]\w*!)?(\$?)([A-Z]+)(\$?)(\d+)/g;function vt(t,e,n){return Dt.lastIndex=0,t.replace(Dt,(r,o,l,i,a)=>{let u=r.indexOf(o+l),m=u>0?r.substring(0,u):"",c=l,d=a;if(o!=="$"){let s=q(l)+e;if(s<0)return "#REF!";c=U(s);}if(i!=="$"){let s=parseInt(a,10)+n;if(s<1)return "#REF!";d=String(s);}return `${m}${o}${c}${i}${d}`})}function ue(t,e){if(t.columnId===e.columnId)return true;let n=t.type??"text",r=e.type??"text";return !(n!==r||t.cellEditor!==e.cellEditor)}function Et(t,e,n,r,o,l){let i=[],a=r[t.startRow],u=o[t.startCol];if(!a||!u)return i;let m=x(a,u),c=l?l.flatColumns.findIndex(s=>s.columnId===u.columnId):-1,d=new Set;for(let s=t.startCol;s<=t.endCol;s++)s<o.length&&ue(u,o[s])&&d.add(s);for(let s=t.startRow;s<=t.endRow;s++)for(let f=t.startCol;f<=t.endCol;f++){if(s===e&&f===n||s>=r.length||!d.has(f))continue;let g=r[s],p=o[f];if(!h(p,g))continue;if(l&&l.hasFormula&&l.getFormula&&l.setFormula&&c>=0&&l.hasFormula(c,e)){let b=l.getFormula(c,e);if(b){let y=s-e,P=f-n,H=vt(b,P,y),N=l.flatColumns.findIndex(O=>O.columnId===p.columnId);if(N>=0){l.setFormula(N,s,H);continue}}}let I=x(g,p),C=T(m,I,g,p);C.valid&&i.push({item:g,columnId:p.columnId,oldValue:I,newValue:C.value,rowIndex:s});}return i}var z=class{constructor(e=100){this.history=[];this.redoStack=[];this.batch=null;this.maxDepth=e;}get canUndo(){return this.history.length>0}get canRedo(){return this.redoStack.length>0}get historyLength(){return this.history.length}get redoLength(){return this.redoStack.length}get isBatching(){return this.batch!==null}push(e){e.length!==0&&(this.batch!==null?this.batch.push(...e):(this.history.push(e),this.history.length>this.maxDepth&&this.history.splice(0,this.history.length-this.maxDepth),this.redoStack.length=0));}record(e){this.push([e]);}beginBatch(){this.batch===null&&(this.batch=[]);}endBatch(){let e=this.batch;this.batch=null,!(!e||e.length===0)&&(this.history.push(e),this.history.length>this.maxDepth&&this.history.splice(0,this.history.length-this.maxDepth),this.redoStack.length=0);}undo(){let e=this.history.pop();return e?(this.redoStack.push(e),e):null}redo(){let e=this.redoStack.pop();return e?(this.history.push(e),e):null}clear(){this.history=[],this.redoStack=[];}};function Ft(t){if(!Array.isArray(t)||t.length===0){console.warn("[OGrid] columns prop is empty or not an array");return}let e=typeof process<"u"&&process.env?.NODE_ENV!=="production",n=new Set;for(let r of t)r.columnId||console.warn("[OGrid] Column missing columnId:",r),n.has(r.columnId)&&console.warn(`[OGrid] Duplicate columnId: "${r.columnId}"`),n.add(r.columnId),e&&r.editable===true&&r.cellEditor==null&&console.warn(`[OGrid] Column "${r.columnId}" has editable=true but no cellEditor defined. Cells will not open an editor on double-click. Set cellEditor to 'text', 'select', 'checkbox', 'date', or a custom component.`);}function Mt(t){typeof process<"u"&&process.env?.NODE_ENV==="production"||t.enabled===true&&(!t.rowHeight||t.rowHeight<=0)&&console.warn("[OGrid] virtualScroll.enabled is true but rowHeight is missing or <= 0. Set a positive rowHeight (e.g. virtualScroll: { enabled: true, rowHeight: 36 }) for correct virtual scrolling behavior.");}function At(t,e){if(typeof process<"u"&&process.env.NODE_ENV==="production"||!e)return;let n=new Set,r=Math.min(t.length,100);for(let o=0;o<r;o++){let l=e(t[o]);if(l==null){console.warn(`[OGrid] getRowId returned null/undefined for row ${o}`);return}if(n.has(l)){console.warn(`[OGrid] Duplicate row ID "${l}" at index ${o}. getRowId must return unique values.`);return}n.add(l);}}var de=[{minWidth:0,maxPriority:0},{minWidth:576,maxPriority:1},{minWidth:768,maxPriority:2},{minWidth:992,maxPriority:3},{minWidth:1200,maxPriority:1/0}];function ce(t,e,n){let r=n?.breakpoints??de,o=new Set;if(t<=0||e.length===0)return o;let l=1/0;for(let i=r.length-1;i>=0;i--)if(t>=r[i].minWidth){l=r[i].maxPriority;break}if(l===1/0)return o;for(let i of e)i.responsivePriority!=null&&(i.required||i.responsivePriority>l&&o.add(i.columnId));return o}function Pt(t){return t===true?{}:t||void 0}function Nt(t,e,n){if(!n||e<=0)return t;let r=ce(e,t,n);return r.size===0?t:t.filter(o=>!r.has(o.columnId))}function Ot(t,e,n,r,o){t.stopPropagation();let l=n-r;o.setActiveCell({rowIndex:e,columnIndex:n}),o.setSelectionRange({startRow:e,startCol:l,endRow:e,endCol:l});}var _t=300,kt=300,Lt=300;var Vt={RESIZE_HANDLE:1,ACTIVE_CELL:2,FILL_HANDLE:3,SELECTION_OVERLAY:4,ROW_NUMBER:5,CLIPBOARD_OVERLAY:5,PINNED:6,SELECTION_CELL:7,THEAD:8,PINNED_HEADER:10,HEADER_FOCUS:11,SELECTION_HEADER_PINNED:12,LOADING:2,DROP_INDICATOR:100,DROPDOWN:1e3,FILTER_POPOVER:1e3,MODAL:2e3,FULLSCREEN:9999,CONTEXT_MENU:1e4};export{ie as AUTOSIZE_EXTRA_PX,ae as AUTOSIZE_MAX_PX,at as CELL_PADDING,lt as CHECKBOX_COLUMN_WIDTH,we as COLUMN_HEADER_MENU_ITEMS,G as CellDescriptorCache,B as DEFAULT_DATE_FORMAT,_t as DEFAULT_DEBOUNCE_MS,X as DEFAULT_MIN_COLUMN_WIDTH,We as DEFAULT_WORKER_SORT_AUTO_THRESHOLD,dt as GRID_BORDER_RADIUS,ye as GRID_CONTEXT_MENU_ITEMS,J as MAX_PAGE_BUTTONS,Q as PAGE_SIZE_OPTIONS,kt as PEOPLE_SEARCH_DEBOUNCE_MS,de as RESPONSIVE_BREAKPOINTS,ut as ROW_NUMBER_COLUMN_ID,st as ROW_NUMBER_COLUMN_MIN_WIDTH,it as ROW_NUMBER_COLUMN_WIDTH,Lt as SIDEBAR_TRANSITION_MS,z as UndoRedoStack,Vt as Z_INDEX,gt as applyCellDeletion,St as applyCutClear,Et as applyFillValues,Tt as applyPastedValues,xt as applyRangeRowSelection,Nt as applyResponsiveHiding,ue as areFillCompatible,Ae as areGridRowPropsEqual,ne as booleanParser,nt as buildCellIndex,j as buildCsvHeader,K as buildCsvRows,ge as buildHeaderRows,Qe as buildInlineEditorProps,Je as buildPopoverEditorProps,Ne as calculateDropTarget,It as clampSelectionToBounds,q as columnLetterToIndex,Fe as computeAggregations,pt as computeArrowNavigation,bt as computeAutoScrollSpeed,ot as computeNextSortState,ht as computeRowSelectionState,ft as computeTabNavigation,Le as computeTotalHeight,Oe as computeVisibleColumnRange,ke as computeVisibleRange,pe as createGridDataAccessor,oe as createSortFilterWorker,ve as currencyParser,te as dateParser,et as debounce,Ie as deriveFilterOptionsFromData,Ee as emailParser,k as escapeCsvValue,ct as estimateHeaderMinWidth,fe as exportToCsv,le as extractValueMatrix,A as findCtrlArrowTarget,Z as flattenColumns,wt as formatCellReference,se as formatCellValueForTsv,W as formatDateForDisplay,Rt as formatSelectionAsTsv,Te as formatShortcut,Ke as getCellRenderDescriptor,x as getCellValue,De as getColumnHeaderMenuItems,Se as getContextMenuHandlers,he as getDataGridStatusBarConfig,Xe as getDateInputPlaceholder,w as getFilterField,je as getHeaderFilterConfig,be as getMultiSelectFilterFields,Re as getPaginationViewModel,re as getPinStateForColumn,ce as getResponsiveHiddenColumns,Ve as getScrollTopForRow,xe as getStatusBarParts,Ot as handleBooleanCellPointerDown,U as indexToColumnLetter,rt as injectGlobalStyles,h as isColumnEditable,v as isFilterConfig,F as isInSelectionRange,D as isRowInRange,mt as measureColumnContentWidth,tt as measureRange,Ce as mergeFilter,R as normalizeSelectionRange,ee as numberParser,yt as parseTsvClipboard,$e as parseUserInputDate,T as parseValue,_e as partitionColumnsForVirtualization,M as processClientSideData,Be as processClientSideDataAsync,Ct as rangesEqual,Pe as reorderColumnArray,Ye as resolveCellDisplayContent,Ze as resolveCellStyle,Pt as resolveResponsiveConfig,Ge as shouldUseWorkerSort,He as terminateSortFilterWorker,me as toUserLike,Y as triggerCsvDownload,Ft as validateColumns,At as validateRowIds,Mt as validateVirtualScrollConfig};
@@ -1,7 +1,6 @@
1
1
  export type { ColumnFilterType, IDateFilterValue, IColumnFilterDef, DateFormat, IColumnMeta, IValueParserParams, IColumnDef, ICellValueChangedEvent, ICellEditorProps, CellEditorParams, IColumnGroupDef, HeaderCell, HeaderRow, IColumnDefinition, } from './types';
2
2
  export type { RowId, UserLike, UserLikeInput, FilterValue, IFilters, IFetchParams, IPageResult, IDataSource, IGridColumnState, RowSelectionMode, IRowSelectionChangeEvent, StatusBarPanel, IStatusBarProps, IActiveCell, ISelectionRange, SideBarPanelId, ISideBarDef, ISheetDef, IVirtualScrollConfig, IColumnReorderConfig, IOGridApi, } from './types';
3
3
  export { toUserLike, isInSelectionRange, normalizeSelectionRange, } from './types';
4
- export type { IRowGroup, IRowGroupingConfig, RowGroupingDisplayRow, } from './types';
5
4
  export { escapeCsvValue, buildCsvHeader, buildCsvRows, exportToCsv, triggerCsvDownload, } from './utils';
6
5
  export type { CsvColumn, FormulaExportOptions } from './utils';
7
6
  export { getCellValue, isColumnEditable, createGridDataAccessor } from './utils';
@@ -27,7 +26,7 @@ export { getPinStateForColumn, reorderColumnArray, calculateDropTarget, } from '
27
26
  export type { ColumnPinState, IDropTarget, ICalculateDropTargetParams } from './utils';
28
27
  export { computeVisibleRange, computeTotalHeight, getScrollTopForRow, computeVisibleColumnRange, partitionColumnsForVirtualization, } from './utils';
29
28
  export type { IVisibleRange, IVisibleColumnRange } from './utils';
30
- export { createSortFilterWorker, terminateSortFilterWorker, extractValueMatrix, processClientSideDataAsync, } from './utils';
29
+ export { createSortFilterWorker, terminateSortFilterWorker, extractValueMatrix, processClientSideDataAsync, DEFAULT_WORKER_SORT_AUTO_THRESHOLD, shouldUseWorkerSort, } from './utils';
31
30
  export type { SortFilterRequest, SortFilterResponse } from './utils';
32
31
  export { getHeaderFilterConfig, getCellRenderDescriptor, CellDescriptorCache, resolveCellDisplayContent, resolveCellStyle, buildInlineEditorProps, buildPopoverEditorProps, } from './utils';
33
32
  export type { HeaderFilterConfigInput, HeaderFilterConfig, CellRenderDescriptorInput, CellRenderDescriptor, CellRenderMode, } from './utils';
@@ -50,7 +49,6 @@ export type { FormulaReference } from './utils';
50
49
  export { getResponsiveHiddenColumns, RESPONSIVE_BREAKPOINTS, resolveResponsiveConfig, applyResponsiveHiding } from './utils';
51
50
  export type { IResponsiveColumnsConfig } from './utils';
52
51
  export { formatDateForDisplay, parseUserInputDate, getDateInputPlaceholder, DEFAULT_DATE_FORMAT } from './utils';
53
- export { isGroupHeader, getGroupKey, buildGroupedRows } from './utils';
54
52
  export { CHECKBOX_COLUMN_WIDTH, ROW_NUMBER_COLUMN_WIDTH, ROW_NUMBER_COLUMN_MIN_WIDTH, ROW_NUMBER_COLUMN_ID, DEFAULT_MIN_COLUMN_WIDTH, CELL_PADDING, GRID_BORDER_RADIUS, } from './constants';
55
53
  export { DEFAULT_DEBOUNCE_MS, PEOPLE_SEARCH_DEBOUNCE_MS, SIDEBAR_TRANSITION_MS, } from './constants';
56
54
  export { Z_INDEX } from './constants';
@@ -33,6 +33,8 @@ export interface IColumnMeta {
33
33
  minWidth?: number;
34
34
  defaultWidth?: number;
35
35
  idealWidth?: number;
36
+ /** CSS width value (e.g. '100%') to make a column fill remaining space. */
37
+ width?: string;
36
38
  /** Pin column to left or right edge (sticky during horizontal scroll). */
37
39
  pinned?: 'left' | 'right';
38
40
  }
@@ -53,10 +55,6 @@ export interface IColumnDef<T = unknown> extends IColumnMeta {
53
55
  valueGetter?: (item: T) => unknown;
54
56
  /** Format the cell value for display (used when no renderCell). */
55
57
  valueFormatter?: (value: unknown, item: T) => string;
56
- /** When true, this column is used as a grouping dimension. */
57
- rowGroup?: boolean;
58
- /** When true, keep the column visible even when it's being grouped by (default: hidden). */
59
- showRowGroup?: boolean;
60
58
  /** Format the cell value for clipboard copy. When set, overrides valueFormatter for copy/paste. */
61
59
  clipboardFormatter?: (value: unknown, item: T) => string;
62
60
  /**
@@ -43,6 +43,8 @@ export interface IFetchParams {
43
43
  direction: 'asc' | 'desc';
44
44
  };
45
45
  filters: IFilters;
46
+ /** Optional abort signal for cancelling stale requests when the grid state changes. */
47
+ signal?: AbortSignal;
46
48
  }
47
49
  export interface IPageResult<T> {
48
50
  items: T[];
@@ -88,6 +90,8 @@ export interface IStatusBarProps {
88
90
  filteredCount?: number;
89
91
  /** Number of selected rows. Omit or 0 to hide. */
90
92
  selectedCount?: number;
93
+ /** Number of selected cells in the current cell range. Omit or 0/1 to hide. */
94
+ selectedCellCount?: number;
91
95
  /** Panels to show (default: all applicable). */
92
96
  panels?: StatusBarPanel[];
93
97
  /** Aggregation values for selected numeric cells. */
@@ -1,4 +1,3 @@
1
1
  export type { ColumnFilterType, IDateFilterValue, IColumnFilterDef, DateFormat, IColumnMeta, IValueParserParams, IColumnDef, ICellValueChangedEvent, ICellEditorProps, CellEditorParams, IColumnGroupDef, HeaderCell, HeaderRow, IColumnDefinition, } from './columnTypes';
2
2
  export type { RowId, UserLike, UserLikeInput, FilterValue, IFilters, IFetchParams, IPageResult, IDataSource, IGridColumnState, RowSelectionMode, IRowSelectionChangeEvent, StatusBarPanel, IStatusBarProps, IActiveCell, ISelectionRange, SideBarPanelId, ISideBarDef, ISheetDef, IVirtualScrollConfig, IColumnReorderConfig, IOGridApi, } from './dataGridTypes';
3
- export type { IRowGroup, IRowGroupingConfig, RowGroupingDisplayRow, } from './groupingTypes';
4
3
  export { toUserLike, isInSelectionRange, normalizeSelectionRange, } from './dataGridTypes';
@@ -22,6 +22,7 @@ export type { ColumnPinState, IDropTarget, ICalculateDropTargetParams } from './
22
22
  export { computeVisibleRange, computeTotalHeight, getScrollTopForRow, computeVisibleColumnRange, partitionColumnsForVirtualization, } from './virtualScroll';
23
23
  export type { IVisibleRange, IVisibleColumnRange } from './virtualScroll';
24
24
  export { createSortFilterWorker, terminateSortFilterWorker, extractValueMatrix, processClientSideDataAsync, } from './workerSortFilter';
25
+ export { DEFAULT_WORKER_SORT_AUTO_THRESHOLD, shouldUseWorkerSort } from './workerSortMode';
25
26
  export type { SortFilterRequest, SortFilterResponse } from '../workers/sortFilterWorker';
26
27
  export { getHeaderFilterConfig, getCellRenderDescriptor, CellDescriptorCache, resolveCellDisplayContent, resolveCellStyle, buildInlineEditorProps, buildPopoverEditorProps, } from './dataGridViewModel';
27
28
  export type { HeaderFilterConfigInput, HeaderFilterConfig, CellRenderDescriptorInput, CellRenderDescriptor, CellRenderMode, } from './dataGridViewModel';
@@ -47,4 +48,3 @@ export type { IResponsiveColumnsConfig } from './responsiveColumns';
47
48
  export { formatDateForDisplay, parseUserInputDate, getDateInputPlaceholder, DEFAULT_DATE_FORMAT } from './dateFormatter';
48
49
  export { handleBooleanCellPointerDown } from './checkboxUtils';
49
50
  export type { BooleanCellSelectHandlers } from './checkboxUtils';
50
- export { isGroupHeader, getGroupKey, buildGroupedRows } from './rowGrouping';
@@ -0,0 +1,10 @@
1
+ import type { IColumnDef, IFilters } from '../types';
2
+ /** Shared row-count threshold used by workerSort='auto'. */
3
+ export declare const DEFAULT_WORKER_SORT_AUTO_THRESHOLD = 5000;
4
+ export interface WorkerSortModeOptions<T> {
5
+ columns?: IColumnDef<T>[];
6
+ filters?: IFilters;
7
+ sortBy?: string;
8
+ }
9
+ /** Resolves whether client-side worker sort should be enabled for the current dataset. */
10
+ export declare function shouldUseWorkerSort<T>(workerSort: boolean | 'auto' | undefined, rowCount: number, options?: WorkerSortModeOptions<T>): boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alaarab/ogrid-core",
3
- "version": "2.6.0",
3
+ "version": "2.7.0",
4
4
  "description": "OGrid core – framework-agnostic types, algorithms, and utilities for OGrid data grids.",
5
5
  "main": "dist/esm/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -1,18 +0,0 @@
1
- export interface IRowGroup<T> {
2
- groupKey: string;
3
- groupValue: unknown;
4
- columnId: string;
5
- displayText: string;
6
- items: T[];
7
- itemCount: number;
8
- subGroups?: IRowGroup<T>[];
9
- depth: number;
10
- }
11
- export interface IRowGroupingConfig {
12
- groupBy: string[];
13
- expandedGroups: Set<string>;
14
- }
15
- export type RowGroupingDisplayRow<T> = T | {
16
- __ogridGroupHeader: true;
17
- group: IRowGroup<T>;
18
- };
@@ -1,11 +0,0 @@
1
- import type { IColumnDef } from '../types/columnTypes';
2
- import type { IRowGroup, RowGroupingDisplayRow } from '../types/groupingTypes';
3
- export declare function isGroupHeader<T>(row: RowGroupingDisplayRow<T>): row is {
4
- __ogridGroupHeader: true;
5
- group: IRowGroup<T>;
6
- };
7
- export declare function getGroupKey(columnId: string, value: unknown): string;
8
- export declare function buildGroupedRows<T>(items: T[], columns: IColumnDef<T>[], groupByColumnIds: string[], expandedGroups: Set<string>): {
9
- displayRows: RowGroupingDisplayRow<T>[];
10
- groupTree: IRowGroup<T>[];
11
- };