@trebco/treb 32.13.2 → 32.14.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,4 +1,4 @@
|
|
|
1
|
-
/*! TREB v32.
|
|
1
|
+
/*! TREB v32.14.0. Copyright 2018-2025 trebco, llc. All rights reserved. LGPL: https://treb.app/license */
|
|
2
2
|
var Ws=Object.defineProperty;var qs=(l,e)=>{for(var t in e)Ws(l,t,{get:e[t],enumerable:!0})};var tr=class{get list(){return this.sheets_.slice(0)}get length(){return this.sheets_.length}names=new Map;ids=new Map;sheets_=[];Assign(e){this.sheets_=[...e],this.UpdateIndexes()}Add(e){this.sheets_.push(e),this.UpdateIndexes()}Splice(e,t,...r){this.sheets_.splice(e,t,...r),this.UpdateIndexes()}Find(e){return typeof e=="string"?this.names.get(e.toLocaleUpperCase()):this.ids.get(e)}Name(e){return this.ids.get(e)?.name||void 0}ID(e){return this.names.get(e.toLocaleUpperCase())?.id||void 0}UpdateIndexes(){this.names.clear(),this.ids.clear();for(let e of this.sheets_){let t=e.name.toLocaleUpperCase();this.names.set(t,e),this.ids.set(e.id,e)}}};var On={spreadsheet_semantics:!0,dimensioned_quantities:!1,fractions:!0,decimal_mark:".",argument_separator:",",boolean_true:"TRUE",boolean_false:"FALSE"};var Re=/[\s-+=<>!()]/,Ci=/['*\\]/,fi=34,mi=39,Ks=160,Hn=32,Xs=9,Qs=10,Ys=13,Ne=48,xt=57,pi=46,bi=43,Ct=45,Gn=40,_i=41,St=44,Zs=37,gi=95,rr=36,ea=123,ta=125,At=91,Bn=93,ra=63,ia=33,$n=59,yi=35,na=64,nt=65,kt=97,oa=69,sa=101,ir=90,nr=122,aa=105,vi=192,wi=382,xi={"==":6,"!=":6,"<>":6,"=":6,"<":7,">":7,"<=":7,">=":7,"+":9,"-":9,"&":9,"*":10,"/":10,"^":11,":":13},la={"@":50,"-":100,"+":100},ca=[...Object.keys(xi),"@"].sort((l,e)=>e.length-l.length),Rt=class{get argument_separator(){return this.flags.argument_separator}get decimal_mark(){return this.flags.decimal_mark}flags={...On};r1c1_regex=/[rR]((?:\[[-+]{0,1}\d+\]|\d*))[cC]((?:\[[-+]{0,1}\d+\]|\d*))$/;argument_separator_char=St;decimal_mark_char=pi;imaginary_char=aa;imaginary_number="i";id_counter=0;expression="";data=[];index=0;length=0;valid=!0;error_position;error;dependencies={addresses:{},ranges:{}};address_refcount={};full_reference_list=[];parser_state_cache=[];SetLocaleSettings(e,t){if(typeof t>"u"&&(t=e===","?";":","),t===e)throw new Error("invalid locale setting");this.flags.argument_separator=t,this.flags.decimal_mark=e}Save(){this.parser_state_cache.push(JSON.stringify(this.flags))}Restore(){let e=this.parser_state_cache.shift();if(e)try{this.flags=JSON.parse(e)}catch(t){console.error(t)}else console.warn("No parser state to restore")}Walk2(e,t){let r=t(e);if(typeof r=="object")return r;switch(e.type){case"address":case"missing":case"literal":case"complex":case"identifier":case"operator":case"structured-reference":break;case"dimensioned":r&&(e.expression=this.Walk2(e.expression,t),e.unit=this.Walk2(e.unit,t));break;case"range":t(e)&&(e.start=this.Walk2(e.start,t),e.end=this.Walk2(e.end,t));break;case"binary":t(e)&&(e.left=this.Walk2(e.left,t),e.right=this.Walk2(e.right,t));break;case"unary":t(e)&&(e.operand=this.Walk2(e.operand,t));break;case"group":t(e)&&(e.elements=e.elements.map(i=>this.Walk2(i,t)));break;case"implicit-call":t(e)&&(e.call=this.Walk2(e.call,t),e.args=e.args.map(i=>this.Walk2(i,t)));break;case"call":t(e)&&(e.args=e.args.map(i=>this.Walk2(i,t)));break}return e}Walk(e,t){switch(e.type){case"address":case"missing":case"literal":case"complex":case"identifier":case"operator":case"structured-reference":t(e);return;case"dimensioned":t(e)&&(this.Walk(e.expression,t),this.Walk(e.unit,t));return;case"range":t(e)&&(this.Walk(e.start,t),this.Walk(e.end,t));return;case"binary":t(e)&&(this.Walk(e.left,t),this.Walk(e.right,t));return;case"unary":t(e)&&this.Walk(e.operand,t);return;case"group":if(t(e))for(let r of e.elements)this.Walk(r,t);return;case"implicit-call":if(t(e)){this.Walk(e.call,t);for(let r of e.args)this.Walk(r,t)}return;case"call":if(t(e))for(let r of e.args)this.Walk(r,t)}}Transpose(e){let t=e.length,r=[],i=0;for(let n=0;n<t;n++)Array.isArray(e[n])&&(i=Math.max(i,e[n].length));for(let n=0;n<i;n++){r[n]=[];for(let o=0;o<t;o++)r[n][o]=e[o]?e[o][n]:void 0}return r}Render(e,t={}){let r=t.offset||{rows:0,columns:0},i=t.missing??"(missing)",{convert_decimal:n,convert_argument_separator:o,long_structured_references:s,table_name:a}=t,c=this.flags.argument_separator+" ";o===","?c=", ":o===";"&&(c="; ");let d=n===","?",":".",u=this.flags.decimal_mark===","?/,/:/\./,h=this.flags.decimal_mark===","?/,/g:/\./g;switch(e.type){case"address":return t.pass_through_addresses?e.label:t.r1c1?this.R1C1Label(e,t):this.AddressLabel(e,r);case"range":return t.pass_through_addresses?e.label:t.r1c1?this.R1C1Label(e.start,t)+":"+this.R1C1Label(e.end,t):this.AddressLabel(e.start,r)+":"+this.AddressLabel(e.end,r);case"missing":return i;case"array":return"{"+this.Transpose(e.values).map(f=>f.map(m=>typeof m=="string"?'"'+m+'"':m).join(", ")).join("; ")+"}";case"binary":{let f=e.operator===":"||e.operator==="^"?"":" ";return this.Render(e.left,t)+f+e.operator+f+this.Render(e.right,t)}case"unary":return e.operator+this.Render(e.operand,t);case"complex":if(e.text)return n?e.text.replace(h,d):e.text;{let f=Math.abs(e.imaginary).toString();if((n===","||this.flags.decimal_mark===",")&&(f=f.replace(/\./,",")),e.real){let m=e.real.toString();(n===","||this.flags.decimal_mark===",")&&(m=m.replace(/\./,","));let p=Math.abs(e.imaginary);return`${m}${e.imaginary<0?" - ":" + "}${p===1?"":f}i`}else return e.imaginary===-1?"-i":e.imaginary===1?"i":`${e.imaginary<0?"-":""}${f}i`}break;case"literal":if(typeof e.value=="string")return'"'+e.value.replace(/"/g,'""')+'"';if(typeof e.value=="boolean")return e.value?t.boolean_true||this.flags.boolean_true||"true":t.boolean_false||this.flags.boolean_false||"false";if(n&&typeof e.value=="number")if(e.text){let f=e.text;return n===","&&this.flags.decimal_mark==="."&&(f=f.replace(/,/g,"")),f.replace(u,d)}else return e.value.toString().replace(/\./,d);else if(e.text)return e.text;return e.value.toString();case"identifier":return e.name;case"operator":return"["+e.operator+"]";case"group":return e.explicit?"("+e.elements.map(f=>this.Render(f,t)).join(c)+")":e.elements.map(f=>this.Render(f,t)).join(c);case"implicit-call":return this.Render(e.call,t)+"("+e.args.map(f=>this.Render(f,t)).join(c)+")";case"call":return e.name+"("+e.args.map(f=>this.Render(f,t)).join(c)+")";case"dimensioned":return this.Render(e.expression)+" "+this.Render(e.unit);case"structured-reference":{let f=e.column;/[^A-Za-z]/.test(f)&&(f="["+f+"]");let m=e.table;switch(!m&&s&&a&&(m=a),e.scope){case"all":return`${m}[[#all],${f}]`;case"row":return s?`${m}[[#this row],${f}]`:`${m}[@${f}]`;case"column":return`${m}[${f}]`}throw new Error("unhandled scope in structured reference")}}return"??"}Parse(e){switch(e=e.trim(),e[0]==="="&&(e=e.substr(1).trim()),this.expression=e,this.data=[],this.length=e.length,this.index=0,this.valid=!0,this.error_position=void 0,this.error=void 0,this.dependencies.addresses={},this.dependencies.ranges={},this.address_refcount={},this.full_reference_list=[],this.id_counter=0,this.flags.argument_separator){case";":this.argument_separator_char=$n;break;default:this.argument_separator_char=St;break}switch(this.flags.decimal_mark){case",":this.decimal_mark_char=St;break;default:this.decimal_mark_char=pi;break}for(let i=0;i<this.length;i++)this.data[i]=e.charCodeAt(i);let t=this.ParseGeneric(),r={};for(let i of Object.keys(this.dependencies.addresses))this.address_refcount[i]&&(r[i]=this.dependencies.addresses[i]);return this.dependencies.addresses=r,{expression:t||void 0,valid:this.valid,error:this.error,error_position:this.error_position,dependencies:this.dependencies,separator:this.flags.argument_separator,decimal_mark:this.flags.decimal_mark,full_reference_list:this.full_reference_list.slice(0)}}ColumnLabel(e){if(e===1/0)return"";let t=String.fromCharCode(65+e%26);for(;e>25;)e=Math.floor(e/26)-1,t=String.fromCharCode(65+e%26)+t;return t}R1C1Label(e,t){let r=!!t.r1c1_force_relative,i=t.r1c1_base,n="";e.sheet&&(n=(Re.test(e.sheet)?"'"+e.sheet+"'":e.sheet)+"!");let o="",s="";if(r&&t.r1c1_proper_semantics&&i){if(e.absolute_row)o=(e.row+1).toString();else{let a=e.row-i.row;a&&(o=`[${a}]`)}if(e.absolute_column)s=(e.column+1).toString();else{let a=e.column-i.column;a&&(s=`[${a}]`)}}else if(r&&i){let a=e.row-i.row,c=e.column-i.column;a&&(o=`[${a}]`),c&&(s=`[${c}]`)}else o=e.offset_row?`[${e.row}]`:(e.row+1).toString(),s=e.offset_column?`[${e.column}]`:(e.column+1).toString();return n+=`R${o}C${s}`,n}AddressLabel(e,t){let r=e.column;!e.absolute_column&&e.column!==1/0&&(r+=t.columns);let i=e.row;if(!e.absolute_row&&e.row!==1/0&&(i+=t.rows),i<0||r<0||i===1/0&&r===1/0)return"#REF";let n="";return e.sheet&&(n=(Re.test(e.sheet)?"'"+e.sheet+"'":e.sheet)+"!"),i===1/0?n+(e.absolute_column?"$":"")+this.ColumnLabel(r):r===1/0?n+(e.absolute_row?"$":"")+(i+1):n+(e.absolute_column?"$":"")+this.ColumnLabel(r)+(e.absolute_row?"$":"")+(i+1)+(e.spill?"#":"")}ParseGeneric(e=[0],t=!1){let r=[];for(;this.index<this.length;){let i=this.ParseNext(r.length===0);if(typeof i=="number"){if(e.some(n=>i===n))break;if(i===Gn){this.index++;let n=this.ParseGeneric([_i],!0);this.index++,r.push({type:"group",id:this.id_counter++,elements:n?[n]:[],explicit:!0})}else{let n=this.ConsumeOperator();n?r.push(n):t&&i===this.argument_separator_char?(r.push({type:"group-separator",position:this.index,id:this.id_counter++}),this.index++):(this.error=`unexpected character [1]: ${String.fromCharCode(i)}, 0x${i.toString(16)}`,this.valid=!1,this.index++)}}else r.push(i)}if(r.length){if(r=this.BinaryToRange2(r),this.flags.fractions){let i=[],n=s=>s.type==="literal"&&typeof s.value=="number"&&s.value%1===0,o=0;for(;o<r.length-3;o++)if(n(r[o])&&n(r[o+1])&&r[o+2].type==="operator"&&r[o+2].operator==="/"&&n(r[o+3])){let s=r[o],a=r[o+1],c=r[o+3],d=(s.value<0?-1:1)*(a.value/c.value);o+=3,i.push({id:r[o].id,type:"literal",text:this.expression.substring(s.position,c.position+1),value:s.value+d,position:s.position})}else i.push(r[o]);for(;o<r.length;o++)i.push(r[o]);r=i}if(r=r.map(i=>i.type==="identifier"&&i.name===this.imaginary_number?{type:"complex",real:0,imaginary:1,position:i.position,text:i.name,id:this.id_counter++}:i),this.flags.dimensioned_quantities){let i=[],n;for(let o=0;o<r.length;o++){let s=r[o];if(!n)n=s;else if(s.type==="identifier"&&(n.type==="literal"||n.type==="group"||n.type==="call")){let a=s;for(;r[o+1]?.type==="identifier";)a.name+=" "+r[++o].name;i.push({type:"dimensioned",expression:n,unit:s,id:this.id_counter++}),n=void 0}else i.push(n),n=s}n&&i.push(n),r=i}}return r.length===0?null:r.length===1?r[0]:this.BinaryToComplex(this.ArrangeUnits(r))}UnitToAddress(e){if(e.type==="literal"){if(typeof e.value=="number"&&e.value>0&&!/\./.test(e.text||""))return{type:"address",position:e.position,label:e.value.toString(),row:e.value-1,id:this.id_counter++,column:1/0}}else{let t,r=e.name,i=r.split("!");if(i.length>1&&(t=i.slice(0,i.length-1).join("!"),r=r.substr(t.length+1),t[0]==="'"))if(t.length>1&&t[t.length-1]==="'")t=t.substr(1,t.length-2);else return;let n=r[0]==="$";r=(n?r.substr(1):r).toUpperCase();let o=Number(r);if(isNaN(o)){if(/[A-Z]{1,3}/.test(r)){let s=-1;for(let a=0;a<r.length;a++){let c=r[a].charCodeAt(0);s=26*(1+s)+(c-nt)}return{type:"address",position:e.position,absolute_column:n,label:e.name,column:s,id:this.id_counter++,row:1/0,sheet:t}}}else if(o>0&&o!==1/0&&!/\./.test(r))return{type:"address",position:e.position,absolute_row:n,label:e.name,row:o-1,id:this.id_counter++,column:1/0,sheet:t}}}BinaryToRange2(e){let t=[];for(let r=0;r<e.length;r++){let i=e[r],n=e[r+1],o=e[r+2],s,a="",c;if(i&&n&&o&&n.type==="operator"&&n.operator===":"){if(i.type==="address"&&o.type==="address"){let d=i.position+i.label.length,u=o.position;s={type:"range",id:this.id_counter++,position:i.position,start:i,end:o,label:i.label+this.expression.substring(d,u)+o.label},a=s.start.label+":"+s.end.label,this.address_refcount[s.start.label]--,this.address_refcount[s.end.label]--;let h=[i.position,o.position];this.full_reference_list=this.full_reference_list.filter(f=>f.position!==h[0]&&f.position!==h[1])}else if((i.type==="literal"||i.type==="identifier")&&(o.type==="literal"||o.type==="identifier")){let d=this.UnitToAddress(i);if(!d&&i.type==="literal"&&typeof i.value=="number"&&i.value<0){let h={...i,text:(i.text||"").replace(/^-/,""),position:i.position+1,value:-i.value};d=this.UnitToAddress(h),d&&(c={type:"operator",operator:"-",position:i.position,id:this.id_counter++})}let u=this.UnitToAddress(o);d&&u&&(d.column===1/0&&u.column===1/0||d.row===1/0&&u.row===1/0)&&(a=d.label+":"+u.label,s={type:"range",id:this.id_counter++,position:d.position,start:d,end:u,label:a})}}s?(c&&t.push(c),t.push(s),this.dependencies.ranges[a]=s,this.full_reference_list.push(s),r+=2):t.push(i)}return t}BinaryToComplex(e){if(e.type==="binary")if((e.operator==="+"||e.operator==="-")&&e.left.type==="literal"&&typeof e.left.value=="number"&&e.right.type==="complex"&&!e.right.composited){let t="";t=this.expression.substring(e.left.position,e.right.position+(e.right.text?.length||0));let r=e.right.imaginary;return e.operator==="-"&&(r=-r),{type:"complex",position:e.left.position,text:t,id:this.id_counter++,imaginary:r,real:e.left.value,composited:!0}}else e.left=this.BinaryToComplex(e.left),e.right=this.BinaryToComplex(e.right);else if(e.type==="unary"&&(e.operator==="-"||e.operator==="+")&&e.operand.type==="complex"&&e.operand.text===this.imaginary_number)return{...e.operand,position:e.position,text:this.expression.substring(e.position,e.operand.position+(e.operand.text||"").length),imaginary:e.operand.imaginary*(e.operator==="-"?-1:1)};return e}ArrangeUnits(e){if(e.length===0)return{type:"missing",id:this.id_counter++};if(e.length===1)return e[0];let t=[];for(let r=0;r<e.length;r++){let i=e[r];if(i.type!=="group-separator"){if(i.type==="operator")if(t.length===0||t[t.length-1].type==="operator")if(la[i.operator]){let n=this.BinaryToComplex(this.ArrangeUnits(e.slice(r+1)));if(!this.valid)return{type:"group",id:this.id_counter++,elements:e,explicit:!1};n.type==="binary"?(n.left={type:"unary",id:this.id_counter++,operator:i.operator,operand:n.left,position:i.position},i=n):i={type:"unary",id:this.id_counter++,operator:i.operator,operand:n,position:i.position},r=e.length}else return this.error=`unexpected character [2]: ${i.operator}`,this.error_position=i.position,this.valid=!1,{type:"group",id:this.id_counter++,elements:e,explicit:!1};else{t.push(i);continue}if(t.length<2){if(t.length===1){let n=t[0].type;if(i.type==="group"&&i.explicit&&(n==="address"||n==="call"||n==="identifier"||n==="implicit-call")){let o=i.elements;o.length===1&&o[0].type==="group"&&!o[0].explicit&&(o=o[0].elements),t[0]={type:"implicit-call",call:t[0],args:o,id:this.id_counter++,position:t[0].position};continue}}t.push(i)}else if(t[t.length-1].type==="operator"){let n=t[t.length-2],o=t[t.length-1],s=o.operator,a={type:"binary",id:this.id_counter++,left:n,operator:s,position:o.position,right:i};n.type==="binary"&&xi[s]>xi[n.operator]&&(a.left=n.left,a.operator=n.operator,a.position=n.position,a.right={type:"binary",id:this.id_counter++,left:n.right,right:i,operator:s,position:o.position}),t.splice(-2,2,a)}else t.push(i)}}return t.length>1?{type:"group",id:this.id_counter++,elements:t,explicit:!1}:t[0]}ParseNext(e=!0){this.ConsumeWhiteSpace();let t=this.data[this.index];if(t===fi)return{type:"literal",id:this.id_counter++,position:this.index,value:this.ConsumeString()};if(t>=Ne&&t<=xt||t===this.decimal_mark_char)return this.ConsumeNumber();if(t===ea)return this.ConsumeArray();if(e&&(t===Ct||t===bi)){let r=this.data[this.index+1];if(r>=Ne&&r<=xt||r===this.decimal_mark_char)return this.ConsumeNumber()}else if(t>=nt&&t<=ir||t>=kt&&t<=nr||t===gi||t===yi||t===mi||t===rr||t===At||t>=vi&&t<=wi)return this.ConsumeToken(t);return t}ConsumeArray(){let e={type:"array",id:this.id_counter++,values:[],position:this.index};this.index++;let t=0,r=0;for(;this.index<this.length;){let i=this.ParseNext(),n=this.index;if(typeof i=="number")switch(this.index++,i){case $n:r++,t=0;break;case St:t++;break;case ta:return e;default:this.valid&&(this.error="invalid character in array literal",this.error_position=n,this.valid=!1);break}else switch(i.type){case"literal":e.values[t]||(e.values[t]=[]),e.values[t][r]=i.value;break;default:this.valid&&(this.error="invalid value in array literal",this.error_position=n,this.valid=!1);break}}return e}ConsumeOperator(){for(let e of ca)if(this.expression.substr(this.index,e.length)===e){let t=this.index;return this.index+=e.length,{type:"operator",id:this.id_counter++,operator:e,position:t}}return null}ConsumeArguments(){this.index++;let e=0,t=[];for(;this.index<this.length;){let r=this.ParseGeneric([this.argument_separator_char,_i]);r!==null&&t.push(r);let i=this.data[this.index];if(i===this.argument_separator_char){this.index++,e++;for(let n=t.length;n<e;n++)t.push({type:"missing",id:this.id_counter++})}else if(i===_i)return this.index++,t}return t}ConsumeToken(e){let t=[e],r=this.index,i=e===mi,n=0,o=!1;for(e===At&&(n=1,o=!0),++this.index;this.index<this.length;this.index++){let u=this.data[this.index];if(u>=nt&&u<=ir||u>=kt&&u<=nr||u>=vi&&u<=wi||u===gi||u===rr||u===pi||u===ia||i||u>=Ne&&u<=xt||u===At||n>0&&u===Bn||u===Ct&&this.flags.r1c1&&n===1||n>0&&u===na&&this.data[this.index-1]===At||n===1&&(u===St||u===Hn)||n>1||u===ra&&n===0)t.push(u),u===At&&(n++,o=!0),u===Bn&&n--,u===mi&&(i=!1);else break}this.data[this.index]===yi&&t.push(this.data[this.index++]);let s=t.map(u=>String.fromCharCode(u)).join("");if(i)return this.error="unbalanced single quote",this.error_position=r,this.valid=!1,{type:"identifier",id:this.id_counter++,name:s,position:r};if(n)return this.error="unbalanced square bracket",this.error_position=r,this.valid=!1,{type:"identifier",id:this.id_counter++,name:s,position:r};if(this.ConsumeWhiteSpace(),this.flags.spreadsheet_semantics){let u=this.ConsumeAddress(s,r);if(u)return u}if(this.data[this.index]===Gn){let u=this.ConsumeArguments();return{type:"call",id:this.id_counter++,name:s,args:u,position:r,end:this.index}}if(this.flags.spreadsheet_semantics&&o){let u=this.ConsumeStructuredReference(s,r);if(u)return u}let c=s.toLowerCase();if(c==="true"||this.flags.boolean_true&&c===this.flags.boolean_true.toLowerCase())return{type:"literal",id:this.id_counter++,value:!0,position:r};if(c==="false"||this.flags.boolean_false&&c===this.flags.boolean_false.toLowerCase())return{type:"literal",id:this.id_counter++,value:!1,position:r};let d={type:"identifier",id:this.id_counter++,name:s,position:r};return this.full_reference_list.push(d),d}ConsumeStructuredReference(e,t){let r=e.length,i=e,n="",o=0;for(;o<r;o++){if(e[o]==="["){e=e.substring(o);break}n+=e[o]}if(e[0]!=="["||e[e.length-1]!=="]")return;e=e.substring(1,e.length-1);let s=e.split(",").map(u=>u.trim()),a="column",c="";if(s.length>2)return;s.length===2?(/\[#this row\]/i.test(s[0])?a="row":/\[#all\]/i.test(s[0])&&(a="all"),c=s[1]):(c=s[0],c[0]==="@"&&(a="row",c=c.substring(1,c.length))),c[0]==="["&&c[c.length-1]==="]"&&(c=c.substring(1,c.length-1));let d={type:"structured-reference",id:this.id_counter++,label:i,position:t,scope:a,column:c,table:n};return this.full_reference_list.push(d),d}ConsumeAddress(e,t){let r=t,i=e.length,n,o=e.split("!");if(o.length>1&&(n=o.slice(0,o.length-1).join("!"),t+=n.length+1),this.flags.r1c1){let u=o[o.length-1].match(this.r1c1_regex);if(u){let h={type:"address",id:this.id_counter++,label:e,row:0,column:0,position:r,sheet:n,r1c1:!0};return u[1][0]==="["?(h.offset_row=!0,h.row=Number(u[1].substring(1,u[1].length-1))):u[1]?(h.row=Number(u[1])-1,this.flags.r1c1_proper_semantics&&(h.absolute_row=!0)):(h.offset_row=!0,h.row=0),u[2][0]==="["?(h.offset_column=!0,h.column=Number(u[2].substring(1,u[2].length-1))):u[2]?(h.column=Number(u[2])-1,this.flags.r1c1_proper_semantics&&(h.absolute_column=!0)):(h.offset_column=!0,h.column=0),h}}let s=this.ConsumeAddressColumn(t);if(!s)return null;t=s.position;let a=this.ConsumeAddressRow(t);if(!a||(t=a.position,s.column===8508&&a.row===9))return null;let c=n?n+e.substr(n.length,t-r).toUpperCase():e.substr(0,t-r).toUpperCase();n&&n[0]==="'"&&(n=n.substr(1,n.length-2));let d={type:"address",id:this.id_counter++,label:c,row:a.row,column:s.column,absolute_row:a.absolute,absolute_column:s.absolute,position:r,sheet:n,spill:a.spill};return i!==t-r?null:(this.dependencies.addresses[d.label]=d,this.address_refcount[d.label]=(this.address_refcount[d.label]||0)+1,this.full_reference_list.push(d),d)}ConsumeAddressRow(e){let t=this.data[e]===rr;t&&e++;let r=e,i=0;for(;;e++){let o=this.data[e];if(o>=Ne&&o<=xt)i*=10,i+=o-Ne;else break}if(r===e||i===0)return!1;let n=!1;return this.data[e]===yi&&(e++,n=!0),{absolute:t,row:i-1,position:e,spill:n}}ConsumeAddressColumn(e){let t=-1,r=0,i=this.data[e]===rr;for(i&&e++;;e++,r++){if(r>=4)return!1;let n=this.data[e];if(n>=nt&&n<=ir)t=26*(1+t)+(n-nt);else if(n>=kt&&n<=nr)t=26*(1+t)+(n-kt);else break}return t<0?!1:{absolute:i,column:t,position:e}}ConsumeNumber(){let e=this.index,t=0,r=!1,i=!1,n=0,o=0,s=0,a="integer",c=0,d=!1,u=this.index;for(;this.index<this.length;this.index++,c++){let f=this.data[this.index];if(f===this.decimal_mark_char)if(a==="integer")a="fraction";else break;else if(f===Zs){n/=100,s/=100,this.index++;break}else if(f===bi||f===Ct)if(c===0)f===Ct&&(i=!0);else break;else if(f===oa||f===sa)if(a==="integer"||a==="fraction")a="exponent",this.index<this.length-1&&(this.data[this.index+1]===bi?this.index++:this.data[this.index+1]===Ct&&(this.index++,r=!0));else break;else if(f===this.imaginary_char){let m=this.data[this.index+1];if(m>=nt&&m<=ir||m>=kt&&m<=nr||m>=vi&&m<=wi||m===gi)break;if(a==="integer"||a==="fraction"){this.index++,d=!0;break}}else if(f>=Ne&&f<=xt)switch(a){case"integer":n=n*10+(f-Ne);break;case"fraction":s=s*10+(f-Ne),o++;break;case"exponent":t=t*10+(f-Ne);break}else break}let h=n+s/Math.pow(10,o);return a==="exponent"&&(h=h*Math.pow(10,(r?-1:1)*t)),d?{type:"complex",id:this.id_counter++,position:e,imaginary:i?-h:h,real:0,text:this.expression.substring(u,this.index)||""}:{type:"literal",id:this.id_counter++,position:e,value:i?-h:h,text:this.expression.substring(u,this.index)||""}}ConsumeString(){this.index++;let e=[];for(;this.index<this.length;this.index++){let t=this.data[this.index];if(t===fi&&(this.index++,this.index>=this.length||this.data[this.index]!==fi))break;e.push(t)}return e.map(t=>String.fromCharCode(t)).join("")}ConsumeWhiteSpace(){for(;this.index<this.length;){let e=this.data[this.index];if(e===Hn||e===Xs||e===Qs||e===Ys||e===Ks)this.index++;else return}}};var Si=(l,e=",")=>{let t=0,r=[],i="",n=[],o=l.length;if(/[\r\n"]/.test(e))throw new Error("invalid delimiter");for(let s=0;s<o;s++){let a=l[s];if(!(s===0&&a.charCodeAt(0)===65279))if(t===0)switch(a){case e:r.push(i),i="";break;case"\r":break;case`
|
|
3
3
|
`:r.push(i),i="",n.push(r),r=[];break;case'"':i.length===0?t=1:i+=a;break;default:i+=a;break}else a==='"'?s+1<o&&l[s+1]==='"'?(i+='"',s++):t=0:i+=a}return(r.length||i.length)&&(r.push(i),n.push(r)),n};var Ue=class l{static _instance=new l;constructor(){}static get instance(){return this._instance}HTML(e,t={}){t={br:!0,...t};let r=[];for(let i of e){let n=[];for(let o of i)o.pre&&n.push("<pre>"),o.emphasis&&n.push("<em>"),o.strong&&n.push("<strong>"),o.strike&&n.push("<strike>"),n.push(o.text),o.strike&&n.push("</strike>"),o.strong&&n.push("</strong>"),o.emphasis&&n.push("</em>"),o.pre&&n.push("</pre>");r.push(n.join(""))}return r.join(t.br?`<br/>
|
|
4
4
|
`:`
|
|
@@ -11,10 +11,10 @@ var Ws=Object.defineProperty;var qs=(l,e)=>{for(var t in e)Ws(l,t,{get:e[t],enum
|
|
|
11
11
|
`).map(d=>d.split(" ").map(u=>u.trim())),c=this.RecyclePasteAreas(new g({row:0,column:0},{row:a.length-1,column:a[0].length-1}),r);if(c.length===1&&(r.Resize(a.length,a[0].length),r.Resize(c[0].rows,c[0].columns)),!this.ValidatePasteAreas(c)){this.Error(5);return}for(let d of c)for(let u=0;u<a.length;u++)for(let h=0;h<a[0].length;h++){let f=new g({row:u+d.start.row,column:h+d.start.column});if(this.active_sheet.cells.EnsureCell(f.end),a[u][h]){let m=this.SetInferredType({area:f,target:f.start,empty:!1},a[u][h],!1,!1);if(m)for(let p of m)i.push(p)}else{let m=this.active_sheet.cells.GetCell(f.start,!1);m&&m.type!==0&&i.push({key:12,area:f.Clone()})}}}this.ExecCommand(i),this.Select(this.primary_selection,r)}AllSelections(e=!1){let t=[this.primary_selection,this.active_selection].concat(this.additional_selections);return e?t:t.filter(r=>!r.empty)}InsertRowsInternal(e){let t=super.InsertRowsInternal(e);if(t.error)return t;let r=this.FindSheet(e.sheet_id);if(r===this.active_sheet){if(e.count<0)for(let i of this.AllSelections())i.empty=!0;else for(let i of this.AllSelections())i.target.row>=e.before_row&&(i.target.row+=e.count),i.area.entire_column||(i.area.start.row>=e.before_row?i.area.Shift(e.count,0):i.area.end.row>=e.before_row&&i.area.ConsumeAddress({row:i.area.end.row+e.count,column:i.area.end.column}));for(let i of t.delete_annotations_list||[])this.layout.RemoveAnnotation(i);if(this.QueueLayoutUpdate(),this.Repaint(),t.update_annotations_list?.length){this.layout.UpdateAnnotation(t.update_annotations_list,this.theme);for(let i of t.resize_annotations_list||[]){let n=i.view[this.view_index];n?.resize_callback&&n.resize_callback.call(void 0)}}}else this.pending_layout_update.add(r.id);return t}InsertColumnsInternal(e){let t=super.InsertColumnsInternal(e);if(t.error)return t;let r=this.FindSheet(e.sheet_id);if(r===this.active_sheet){if(e.count<0)for(let i of this.AllSelections())i.empty=!0;else for(let i of this.AllSelections())i.target.column>=e.before_column&&(i.target.column+=e.count),i.area.entire_row||(i.area.start.column>=e.before_column?i.area.Shift(0,e.count):i.area.end.column>=e.before_column&&i.area.ConsumeAddress({row:i.area.end.row,column:i.area.end.column+e.count}));for(let i of t.delete_annotations_list||[])this.layout.RemoveAnnotation(i);if(this.tile_renderer?.FlushOverflows(),this.QueueLayoutUpdate(),this.DelayedRender(!0,void 0,!0),t.update_annotations_list?.length){this.layout.UpdateAnnotation(t.update_annotations_list,this.theme);for(let i of t.resize_annotations_list||[]){let n=i.view[this.view_index];n?.resize_callback&&n.resize_callback.call(void 0)}}}else this.pending_layout_update.add(r.id);return t}ResetInternal(){super.ResetInternal(),this.RemoveAnnotationNodes(),this.ClearSelection(this.primary_selection),this.ScrollIntoView({row:0,column:0}),this.QueueLayoutUpdate(),this.layout.HideNote()}ResizeColumnsInternal(e){if(this.headless)return super.ResizeColumnsInternal(e);let t=e.sheet_id?this.FindSheet(e.sheet_id):this.active_sheet,r=e.column;if(typeof r>"u"){r=[];for(let o=0;o<t.columns;o++)r.push(o)}typeof r=="number"&&(r=[r]);let i=typeof e.width!="number",n=Math.round((e.width||0)/this.scale);if(i)for(let o of r)this.AutoSizeColumn(t,o,!0);else for(let o of r)t.SetColumnWidth(o,n);t===this.active_sheet?(this.layout.UpdateTotalSize(),this.layout.container&&this.layout.container.offsetWidth&&this.layout.container.offsetWidth>this.layout.total_width?this.UpdateLayout():(this.layout.UpdateTileWidths(!0),this.render_tiles=this.layout.VisibleTiles(),this.Repaint(!1,!0)),this.layout.UpdateAnnotation(this.active_sheet.annotations,this.theme),this.RenderSelections()):this.pending_layout_update.add(t.id)}ResizeRowsInternal(e){let t,r=e.sheet_id?this.FindSheet(e.sheet_id):this.active_sheet,i=e.row;if(typeof i>"u"){i=[];for(let a=0;a<r.rows;a++)i.push(a)}typeof i=="number"&&(i=[i]);let n=typeof e.shrink=="boolean"?e.shrink:!0,o=typeof e.height!="number",s=Math.round(e.height||0/this.scale);if(o)for(let a of i)r.GetRowHeight(a)||(t?t.ConsumeAddress({row:a,column:1}):t=new g({row:a,column:1/0,sheet_id:r.id})),this.AutoSizeRow(r,a,n);else for(let a of i){let c=r.GetRowHeight(a);(!c&&s||c&&!s)&&(t?t.ConsumeAddress({row:a,column:1}):t=new g({row:a,column:1/0,sheet_id:r.id})),r.SetRowHeight(a,s)}return r===this.active_sheet?(this.layout.UpdateTotalSize(),this.layout.container&&this.layout.container.offsetHeight&&this.layout.container.offsetHeight>this.layout.total_height?this.UpdateLayout():(this.layout.UpdateTileHeights(!0),this.render_tiles=this.layout.VisibleTiles(),this.Repaint(!1,!0)),this.layout.UpdateAnnotation(this.active_sheet.annotations,this.theme),this.RenderSelections()):this.pending_layout_update.add(r.id),t?{start:t.start,end:t.end}:void 0}SelectInternal(e){e.area?(e.area.start.sheet_id&&e.area.start.sheet_id!==this.active_sheet.id&&this.ActivateSheetInternal({key:22,id:e.area.start.sheet_id}),this.Select(this.primary_selection,new g(e.area.start,e.area.end)),this.RenderSelections()):this.ClearSelection(this.primary_selection)}FreezeInternal(e){let t=this.FindSheet(e.sheet_id||this.active_sheet.id),r=(typeof e.highlight_transition=="boolean"?e.highlight_transition:!0)&&t===this.active_sheet;if(e.rows===t.freeze.rows&&e.columns===t.freeze.columns){r&&this.HighlightFreezeArea();return}t.freeze.rows=e.rows,t.freeze.columns=e.columns,t===this.active_sheet?(this.QueueLayoutUpdate(),this.Repaint(),r&&this.HighlightFreezeArea(),e.rows||e.columns?this.layout.CloneFrozenAnnotations():this.layout.ClearFrozenAnnotations()):this.pending_layout_update.add(t.id)}ExecCommand(e,t=!0){let r=super.ExecCommand(e,t);this.batch||r.render_area&&this.DelayedRender(!1,r.render_area),r.repaint&&this.Repaint();for(let i of r.pending||[])this.pending_layout_update.add(i);return r.layout&&this.QueueLayoutUpdate(),r.sheets&&this.tab_bar&&this.tab_bar.Update(),r.formula&&this.UpdateFormulaBarFormula(),r}};var wo={spreadsheet_semantics:!0,dimensioned_quantities:!1,fractions:!0,decimal_mark:".",argument_separator:",",boolean_true:"TRUE",boolean_false:"FALSE"};var Rr=/[\s-+=<>!()]/;var Hi=34,Gi=39,tl=160,xo=32,rl=9,il=10,nl=13,Be=48,Gt=57,Bi=46,$i=43,Bt=45,Co=40,ji=41,$t=44,ol=37,Ji=95,Sr=36,sl=123,al=125,jt=91,So=93,ll=63,cl=33,Ao=59,Wi=35,dl=64,ft=65,Jt=97,ul=69,hl=101,Ar=90,kr=122,fl=105,qi=192,Ki=382,Xi={"==":6,"!=":6,"<>":6,"=":6,"<":7,">":7,"<=":7,">=":7,"+":9,"-":9,"&":9,"*":10,"/":10,"^":11,":":13},ml={"@":50,"-":100,"+":100},pl=[...Object.keys(Xi),"@"].sort((l,e)=>e.length-l.length),Tr=class{get argument_separator(){return this.flags.argument_separator}get decimal_mark(){return this.flags.decimal_mark}flags={...wo};r1c1_regex=/[rR]((?:\[[-+]{0,1}\d+\]|\d*))[cC]((?:\[[-+]{0,1}\d+\]|\d*))$/;argument_separator_char=$t;decimal_mark_char=Bi;imaginary_char=fl;imaginary_number="i";id_counter=0;expression="";data=[];index=0;length=0;valid=!0;error_position;error;dependencies={addresses:{},ranges:{}};address_refcount={};full_reference_list=[];parser_state_cache=[];SetLocaleSettings(e,t){if(typeof t>"u"&&(t=e===","?";":","),t===e)throw new Error("invalid locale setting");this.flags.argument_separator=t,this.flags.decimal_mark=e}Save(){this.parser_state_cache.push(JSON.stringify(this.flags))}Restore(){let e=this.parser_state_cache.shift();if(e)try{this.flags=JSON.parse(e)}catch(t){console.error(t)}else console.warn("No parser state to restore")}Walk2(e,t){let r=t(e);if(typeof r=="object")return r;switch(e.type){case"address":case"missing":case"literal":case"complex":case"identifier":case"operator":case"structured-reference":break;case"dimensioned":r&&(e.expression=this.Walk2(e.expression,t),e.unit=this.Walk2(e.unit,t));break;case"range":t(e)&&(e.start=this.Walk2(e.start,t),e.end=this.Walk2(e.end,t));break;case"binary":t(e)&&(e.left=this.Walk2(e.left,t),e.right=this.Walk2(e.right,t));break;case"unary":t(e)&&(e.operand=this.Walk2(e.operand,t));break;case"group":t(e)&&(e.elements=e.elements.map(i=>this.Walk2(i,t)));break;case"implicit-call":t(e)&&(e.call=this.Walk2(e.call,t),e.args=e.args.map(i=>this.Walk2(i,t)));break;case"call":t(e)&&(e.args=e.args.map(i=>this.Walk2(i,t)));break}return e}Walk(e,t){switch(e.type){case"address":case"missing":case"literal":case"complex":case"identifier":case"operator":case"structured-reference":t(e);return;case"dimensioned":t(e)&&(this.Walk(e.expression,t),this.Walk(e.unit,t));return;case"range":t(e)&&(this.Walk(e.start,t),this.Walk(e.end,t));return;case"binary":t(e)&&(this.Walk(e.left,t),this.Walk(e.right,t));return;case"unary":t(e)&&this.Walk(e.operand,t);return;case"group":if(t(e))for(let r of e.elements)this.Walk(r,t);return;case"implicit-call":if(t(e)){this.Walk(e.call,t);for(let r of e.args)this.Walk(r,t)}return;case"call":if(t(e))for(let r of e.args)this.Walk(r,t)}}Transpose(e){let t=e.length,r=[],i=0;for(let n=0;n<t;n++)Array.isArray(e[n])&&(i=Math.max(i,e[n].length));for(let n=0;n<i;n++){r[n]=[];for(let o=0;o<t;o++)r[n][o]=e[o]?e[o][n]:void 0}return r}Render(e,t={}){let r=t.offset||{rows:0,columns:0},i=t.missing??"(missing)",{convert_decimal:n,convert_argument_separator:o,long_structured_references:s,table_name:a}=t,c=this.flags.argument_separator+" ";o===","?c=", ":o===";"&&(c="; ");let d=n===","?",":".",u=this.flags.decimal_mark===","?/,/:/\./,h=this.flags.decimal_mark===","?/,/g:/\./g;switch(e.type){case"address":return t.pass_through_addresses?e.label:t.r1c1?this.R1C1Label(e,t):this.AddressLabel(e,r);case"range":return t.pass_through_addresses?e.label:t.r1c1?this.R1C1Label(e.start,t)+":"+this.R1C1Label(e.end,t):this.AddressLabel(e.start,r)+":"+this.AddressLabel(e.end,r);case"missing":return i;case"array":return"{"+this.Transpose(e.values).map(f=>f.map(m=>typeof m=="string"?'"'+m+'"':m).join(", ")).join("; ")+"}";case"binary":{let f=e.operator===":"||e.operator==="^"?"":" ";return this.Render(e.left,t)+f+e.operator+f+this.Render(e.right,t)}case"unary":return e.operator+this.Render(e.operand,t);case"complex":if(e.text)return n?e.text.replace(h,d):e.text;{let f=Math.abs(e.imaginary).toString();if((n===","||this.flags.decimal_mark===",")&&(f=f.replace(/\./,",")),e.real){let m=e.real.toString();(n===","||this.flags.decimal_mark===",")&&(m=m.replace(/\./,","));let p=Math.abs(e.imaginary);return`${m}${e.imaginary<0?" - ":" + "}${p===1?"":f}i`}else return e.imaginary===-1?"-i":e.imaginary===1?"i":`${e.imaginary<0?"-":""}${f}i`}break;case"literal":if(typeof e.value=="string")return'"'+e.value.replace(/"/g,'""')+'"';if(typeof e.value=="boolean")return e.value?t.boolean_true||this.flags.boolean_true||"true":t.boolean_false||this.flags.boolean_false||"false";if(n&&typeof e.value=="number")if(e.text){let f=e.text;return n===","&&this.flags.decimal_mark==="."&&(f=f.replace(/,/g,"")),f.replace(u,d)}else return e.value.toString().replace(/\./,d);else if(e.text)return e.text;return e.value.toString();case"identifier":return e.name;case"operator":return"["+e.operator+"]";case"group":return e.explicit?"("+e.elements.map(f=>this.Render(f,t)).join(c)+")":e.elements.map(f=>this.Render(f,t)).join(c);case"implicit-call":return this.Render(e.call,t)+"("+e.args.map(f=>this.Render(f,t)).join(c)+")";case"call":return e.name+"("+e.args.map(f=>this.Render(f,t)).join(c)+")";case"dimensioned":return this.Render(e.expression)+" "+this.Render(e.unit);case"structured-reference":{let f=e.column;/[^A-Za-z]/.test(f)&&(f="["+f+"]");let m=e.table;switch(!m&&s&&a&&(m=a),e.scope){case"all":return`${m}[[#all],${f}]`;case"row":return s?`${m}[[#this row],${f}]`:`${m}[@${f}]`;case"column":return`${m}[${f}]`}throw new Error("unhandled scope in structured reference")}}return"??"}Parse(e){switch(e=e.trim(),e[0]==="="&&(e=e.substr(1).trim()),this.expression=e,this.data=[],this.length=e.length,this.index=0,this.valid=!0,this.error_position=void 0,this.error=void 0,this.dependencies.addresses={},this.dependencies.ranges={},this.address_refcount={},this.full_reference_list=[],this.id_counter=0,this.flags.argument_separator){case";":this.argument_separator_char=Ao;break;default:this.argument_separator_char=$t;break}switch(this.flags.decimal_mark){case",":this.decimal_mark_char=$t;break;default:this.decimal_mark_char=Bi;break}for(let i=0;i<this.length;i++)this.data[i]=e.charCodeAt(i);let t=this.ParseGeneric(),r={};for(let i of Object.keys(this.dependencies.addresses))this.address_refcount[i]&&(r[i]=this.dependencies.addresses[i]);return this.dependencies.addresses=r,{expression:t||void 0,valid:this.valid,error:this.error,error_position:this.error_position,dependencies:this.dependencies,separator:this.flags.argument_separator,decimal_mark:this.flags.decimal_mark,full_reference_list:this.full_reference_list.slice(0)}}ColumnLabel(e){if(e===1/0)return"";let t=String.fromCharCode(65+e%26);for(;e>25;)e=Math.floor(e/26)-1,t=String.fromCharCode(65+e%26)+t;return t}R1C1Label(e,t){let r=!!t.r1c1_force_relative,i=t.r1c1_base,n="";e.sheet&&(n=(Rr.test(e.sheet)?"'"+e.sheet+"'":e.sheet)+"!");let o="",s="";if(r&&t.r1c1_proper_semantics&&i){if(e.absolute_row)o=(e.row+1).toString();else{let a=e.row-i.row;a&&(o=`[${a}]`)}if(e.absolute_column)s=(e.column+1).toString();else{let a=e.column-i.column;a&&(s=`[${a}]`)}}else if(r&&i){let a=e.row-i.row,c=e.column-i.column;a&&(o=`[${a}]`),c&&(s=`[${c}]`)}else o=e.offset_row?`[${e.row}]`:(e.row+1).toString(),s=e.offset_column?`[${e.column}]`:(e.column+1).toString();return n+=`R${o}C${s}`,n}AddressLabel(e,t){let r=e.column;!e.absolute_column&&e.column!==1/0&&(r+=t.columns);let i=e.row;if(!e.absolute_row&&e.row!==1/0&&(i+=t.rows),i<0||r<0||i===1/0&&r===1/0)return"#REF";let n="";return e.sheet&&(n=(Rr.test(e.sheet)?"'"+e.sheet+"'":e.sheet)+"!"),i===1/0?n+(e.absolute_column?"$":"")+this.ColumnLabel(r):r===1/0?n+(e.absolute_row?"$":"")+(i+1):n+(e.absolute_column?"$":"")+this.ColumnLabel(r)+(e.absolute_row?"$":"")+(i+1)+(e.spill?"#":"")}ParseGeneric(e=[0],t=!1){let r=[];for(;this.index<this.length;){let i=this.ParseNext(r.length===0);if(typeof i=="number"){if(e.some(n=>i===n))break;if(i===Co){this.index++;let n=this.ParseGeneric([ji],!0);this.index++,r.push({type:"group",id:this.id_counter++,elements:n?[n]:[],explicit:!0})}else{let n=this.ConsumeOperator();n?r.push(n):t&&i===this.argument_separator_char?(r.push({type:"group-separator",position:this.index,id:this.id_counter++}),this.index++):(this.error=`unexpected character [1]: ${String.fromCharCode(i)}, 0x${i.toString(16)}`,this.valid=!1,this.index++)}}else r.push(i)}if(r.length){if(r=this.BinaryToRange2(r),this.flags.fractions){let i=[],n=s=>s.type==="literal"&&typeof s.value=="number"&&s.value%1===0,o=0;for(;o<r.length-3;o++)if(n(r[o])&&n(r[o+1])&&r[o+2].type==="operator"&&r[o+2].operator==="/"&&n(r[o+3])){let s=r[o],a=r[o+1],c=r[o+3],d=(s.value<0?-1:1)*(a.value/c.value);o+=3,i.push({id:r[o].id,type:"literal",text:this.expression.substring(s.position,c.position+1),value:s.value+d,position:s.position})}else i.push(r[o]);for(;o<r.length;o++)i.push(r[o]);r=i}if(r=r.map(i=>i.type==="identifier"&&i.name===this.imaginary_number?{type:"complex",real:0,imaginary:1,position:i.position,text:i.name,id:this.id_counter++}:i),this.flags.dimensioned_quantities){let i=[],n;for(let o=0;o<r.length;o++){let s=r[o];if(!n)n=s;else if(s.type==="identifier"&&(n.type==="literal"||n.type==="group"||n.type==="call")){let a=s;for(;r[o+1]?.type==="identifier";)a.name+=" "+r[++o].name;i.push({type:"dimensioned",expression:n,unit:s,id:this.id_counter++}),n=void 0}else i.push(n),n=s}n&&i.push(n),r=i}}return r.length===0?null:r.length===1?r[0]:this.BinaryToComplex(this.ArrangeUnits(r))}UnitToAddress(e){if(e.type==="literal"){if(typeof e.value=="number"&&e.value>0&&!/\./.test(e.text||""))return{type:"address",position:e.position,label:e.value.toString(),row:e.value-1,id:this.id_counter++,column:1/0}}else{let t,r=e.name,i=r.split("!");if(i.length>1&&(t=i.slice(0,i.length-1).join("!"),r=r.substr(t.length+1),t[0]==="'"))if(t.length>1&&t[t.length-1]==="'")t=t.substr(1,t.length-2);else return;let n=r[0]==="$";r=(n?r.substr(1):r).toUpperCase();let o=Number(r);if(isNaN(o)){if(/[A-Z]{1,3}/.test(r)){let s=-1;for(let a=0;a<r.length;a++){let c=r[a].charCodeAt(0);s=26*(1+s)+(c-ft)}return{type:"address",position:e.position,absolute_column:n,label:e.name,column:s,id:this.id_counter++,row:1/0,sheet:t}}}else if(o>0&&o!==1/0&&!/\./.test(r))return{type:"address",position:e.position,absolute_row:n,label:e.name,row:o-1,id:this.id_counter++,column:1/0,sheet:t}}}BinaryToRange2(e){let t=[];for(let r=0;r<e.length;r++){let i=e[r],n=e[r+1],o=e[r+2],s,a="",c;if(i&&n&&o&&n.type==="operator"&&n.operator===":"){if(i.type==="address"&&o.type==="address"){let d=i.position+i.label.length,u=o.position;s={type:"range",id:this.id_counter++,position:i.position,start:i,end:o,label:i.label+this.expression.substring(d,u)+o.label},a=s.start.label+":"+s.end.label,this.address_refcount[s.start.label]--,this.address_refcount[s.end.label]--;let h=[i.position,o.position];this.full_reference_list=this.full_reference_list.filter(f=>f.position!==h[0]&&f.position!==h[1])}else if((i.type==="literal"||i.type==="identifier")&&(o.type==="literal"||o.type==="identifier")){let d=this.UnitToAddress(i);if(!d&&i.type==="literal"&&typeof i.value=="number"&&i.value<0){let h={...i,text:(i.text||"").replace(/^-/,""),position:i.position+1,value:-i.value};d=this.UnitToAddress(h),d&&(c={type:"operator",operator:"-",position:i.position,id:this.id_counter++})}let u=this.UnitToAddress(o);d&&u&&(d.column===1/0&&u.column===1/0||d.row===1/0&&u.row===1/0)&&(a=d.label+":"+u.label,s={type:"range",id:this.id_counter++,position:d.position,start:d,end:u,label:a})}}s?(c&&t.push(c),t.push(s),this.dependencies.ranges[a]=s,this.full_reference_list.push(s),r+=2):t.push(i)}return t}BinaryToComplex(e){if(e.type==="binary")if((e.operator==="+"||e.operator==="-")&&e.left.type==="literal"&&typeof e.left.value=="number"&&e.right.type==="complex"&&!e.right.composited){let t="";t=this.expression.substring(e.left.position,e.right.position+(e.right.text?.length||0));let r=e.right.imaginary;return e.operator==="-"&&(r=-r),{type:"complex",position:e.left.position,text:t,id:this.id_counter++,imaginary:r,real:e.left.value,composited:!0}}else e.left=this.BinaryToComplex(e.left),e.right=this.BinaryToComplex(e.right);else if(e.type==="unary"&&(e.operator==="-"||e.operator==="+")&&e.operand.type==="complex"&&e.operand.text===this.imaginary_number)return{...e.operand,position:e.position,text:this.expression.substring(e.position,e.operand.position+(e.operand.text||"").length),imaginary:e.operand.imaginary*(e.operator==="-"?-1:1)};return e}ArrangeUnits(e){if(e.length===0)return{type:"missing",id:this.id_counter++};if(e.length===1)return e[0];let t=[];for(let r=0;r<e.length;r++){let i=e[r];if(i.type!=="group-separator"){if(i.type==="operator")if(t.length===0||t[t.length-1].type==="operator")if(ml[i.operator]){let n=this.BinaryToComplex(this.ArrangeUnits(e.slice(r+1)));if(!this.valid)return{type:"group",id:this.id_counter++,elements:e,explicit:!1};n.type==="binary"?(n.left={type:"unary",id:this.id_counter++,operator:i.operator,operand:n.left,position:i.position},i=n):i={type:"unary",id:this.id_counter++,operator:i.operator,operand:n,position:i.position},r=e.length}else return this.error=`unexpected character [2]: ${i.operator}`,this.error_position=i.position,this.valid=!1,{type:"group",id:this.id_counter++,elements:e,explicit:!1};else{t.push(i);continue}if(t.length<2){if(t.length===1){let n=t[0].type;if(i.type==="group"&&i.explicit&&(n==="address"||n==="call"||n==="identifier"||n==="implicit-call")){let o=i.elements;o.length===1&&o[0].type==="group"&&!o[0].explicit&&(o=o[0].elements),t[0]={type:"implicit-call",call:t[0],args:o,id:this.id_counter++,position:t[0].position};continue}}t.push(i)}else if(t[t.length-1].type==="operator"){let n=t[t.length-2],o=t[t.length-1],s=o.operator,a={type:"binary",id:this.id_counter++,left:n,operator:s,position:o.position,right:i};n.type==="binary"&&Xi[s]>Xi[n.operator]&&(a.left=n.left,a.operator=n.operator,a.position=n.position,a.right={type:"binary",id:this.id_counter++,left:n.right,right:i,operator:s,position:o.position}),t.splice(-2,2,a)}else t.push(i)}}return t.length>1?{type:"group",id:this.id_counter++,elements:t,explicit:!1}:t[0]}ParseNext(e=!0){this.ConsumeWhiteSpace();let t=this.data[this.index];if(t===Hi)return{type:"literal",id:this.id_counter++,position:this.index,value:this.ConsumeString()};if(t>=Be&&t<=Gt||t===this.decimal_mark_char)return this.ConsumeNumber();if(t===sl)return this.ConsumeArray();if(e&&(t===Bt||t===$i)){let r=this.data[this.index+1];if(r>=Be&&r<=Gt||r===this.decimal_mark_char)return this.ConsumeNumber()}else if(t>=ft&&t<=Ar||t>=Jt&&t<=kr||t===Ji||t===Wi||t===Gi||t===Sr||t===jt||t>=qi&&t<=Ki)return this.ConsumeToken(t);return t}ConsumeArray(){let e={type:"array",id:this.id_counter++,values:[],position:this.index};this.index++;let t=0,r=0;for(;this.index<this.length;){let i=this.ParseNext(),n=this.index;if(typeof i=="number")switch(this.index++,i){case Ao:r++,t=0;break;case $t:t++;break;case al:return e;default:this.valid&&(this.error="invalid character in array literal",this.error_position=n,this.valid=!1);break}else switch(i.type){case"literal":e.values[t]||(e.values[t]=[]),e.values[t][r]=i.value;break;default:this.valid&&(this.error="invalid value in array literal",this.error_position=n,this.valid=!1);break}}return e}ConsumeOperator(){for(let e of pl)if(this.expression.substr(this.index,e.length)===e){let t=this.index;return this.index+=e.length,{type:"operator",id:this.id_counter++,operator:e,position:t}}return null}ConsumeArguments(){this.index++;let e=0,t=[];for(;this.index<this.length;){let r=this.ParseGeneric([this.argument_separator_char,ji]);r!==null&&t.push(r);let i=this.data[this.index];if(i===this.argument_separator_char){this.index++,e++;for(let n=t.length;n<e;n++)t.push({type:"missing",id:this.id_counter++})}else if(i===ji)return this.index++,t}return t}ConsumeToken(e){let t=[e],r=this.index,i=e===Gi,n=0,o=!1;for(e===jt&&(n=1,o=!0),++this.index;this.index<this.length;this.index++){let u=this.data[this.index];if(u>=ft&&u<=Ar||u>=Jt&&u<=kr||u>=qi&&u<=Ki||u===Ji||u===Sr||u===Bi||u===cl||i||u>=Be&&u<=Gt||u===jt||n>0&&u===So||u===Bt&&this.flags.r1c1&&n===1||n>0&&u===dl&&this.data[this.index-1]===jt||n===1&&(u===$t||u===xo)||n>1||u===ll&&n===0)t.push(u),u===jt&&(n++,o=!0),u===So&&n--,u===Gi&&(i=!1);else break}this.data[this.index]===Wi&&t.push(this.data[this.index++]);let s=t.map(u=>String.fromCharCode(u)).join("");if(i)return this.error="unbalanced single quote",this.error_position=r,this.valid=!1,{type:"identifier",id:this.id_counter++,name:s,position:r};if(n)return this.error="unbalanced square bracket",this.error_position=r,this.valid=!1,{type:"identifier",id:this.id_counter++,name:s,position:r};if(this.ConsumeWhiteSpace(),this.flags.spreadsheet_semantics){let u=this.ConsumeAddress(s,r);if(u)return u}if(this.data[this.index]===Co){let u=this.ConsumeArguments();return{type:"call",id:this.id_counter++,name:s,args:u,position:r,end:this.index}}if(this.flags.spreadsheet_semantics&&o){let u=this.ConsumeStructuredReference(s,r);if(u)return u}let c=s.toLowerCase();if(c==="true"||this.flags.boolean_true&&c===this.flags.boolean_true.toLowerCase())return{type:"literal",id:this.id_counter++,value:!0,position:r};if(c==="false"||this.flags.boolean_false&&c===this.flags.boolean_false.toLowerCase())return{type:"literal",id:this.id_counter++,value:!1,position:r};let d={type:"identifier",id:this.id_counter++,name:s,position:r};return this.full_reference_list.push(d),d}ConsumeStructuredReference(e,t){let r=e.length,i=e,n="",o=0;for(;o<r;o++){if(e[o]==="["){e=e.substring(o);break}n+=e[o]}if(e[0]!=="["||e[e.length-1]!=="]")return;e=e.substring(1,e.length-1);let s=e.split(",").map(u=>u.trim()),a="column",c="";if(s.length>2)return;s.length===2?(/\[#this row\]/i.test(s[0])?a="row":/\[#all\]/i.test(s[0])&&(a="all"),c=s[1]):(c=s[0],c[0]==="@"&&(a="row",c=c.substring(1,c.length))),c[0]==="["&&c[c.length-1]==="]"&&(c=c.substring(1,c.length-1));let d={type:"structured-reference",id:this.id_counter++,label:i,position:t,scope:a,column:c,table:n};return this.full_reference_list.push(d),d}ConsumeAddress(e,t){let r=t,i=e.length,n,o=e.split("!");if(o.length>1&&(n=o.slice(0,o.length-1).join("!"),t+=n.length+1),this.flags.r1c1){let u=o[o.length-1].match(this.r1c1_regex);if(u){let h={type:"address",id:this.id_counter++,label:e,row:0,column:0,position:r,sheet:n,r1c1:!0};return u[1][0]==="["?(h.offset_row=!0,h.row=Number(u[1].substring(1,u[1].length-1))):u[1]?(h.row=Number(u[1])-1,this.flags.r1c1_proper_semantics&&(h.absolute_row=!0)):(h.offset_row=!0,h.row=0),u[2][0]==="["?(h.offset_column=!0,h.column=Number(u[2].substring(1,u[2].length-1))):u[2]?(h.column=Number(u[2])-1,this.flags.r1c1_proper_semantics&&(h.absolute_column=!0)):(h.offset_column=!0,h.column=0),h}}let s=this.ConsumeAddressColumn(t);if(!s)return null;t=s.position;let a=this.ConsumeAddressRow(t);if(!a||(t=a.position,s.column===8508&&a.row===9))return null;let c=n?n+e.substr(n.length,t-r).toUpperCase():e.substr(0,t-r).toUpperCase();n&&n[0]==="'"&&(n=n.substr(1,n.length-2));let d={type:"address",id:this.id_counter++,label:c,row:a.row,column:s.column,absolute_row:a.absolute,absolute_column:s.absolute,position:r,sheet:n,spill:a.spill};return i!==t-r?null:(this.dependencies.addresses[d.label]=d,this.address_refcount[d.label]=(this.address_refcount[d.label]||0)+1,this.full_reference_list.push(d),d)}ConsumeAddressRow(e){let t=this.data[e]===Sr;t&&e++;let r=e,i=0;for(;;e++){let o=this.data[e];if(o>=Be&&o<=Gt)i*=10,i+=o-Be;else break}if(r===e||i===0)return!1;let n=!1;return this.data[e]===Wi&&(e++,n=!0),{absolute:t,row:i-1,position:e,spill:n}}ConsumeAddressColumn(e){let t=-1,r=0,i=this.data[e]===Sr;for(i&&e++;;e++,r++){if(r>=4)return!1;let n=this.data[e];if(n>=ft&&n<=Ar)t=26*(1+t)+(n-ft);else if(n>=Jt&&n<=kr)t=26*(1+t)+(n-Jt);else break}return t<0?!1:{absolute:i,column:t,position:e}}ConsumeNumber(){let e=this.index,t=0,r=!1,i=!1,n=0,o=0,s=0,a="integer",c=0,d=!1,u=this.index;for(;this.index<this.length;this.index++,c++){let f=this.data[this.index];if(f===this.decimal_mark_char)if(a==="integer")a="fraction";else break;else if(f===ol){n/=100,s/=100,this.index++;break}else if(f===$i||f===Bt)if(c===0)f===Bt&&(i=!0);else break;else if(f===ul||f===hl)if(a==="integer"||a==="fraction")a="exponent",this.index<this.length-1&&(this.data[this.index+1]===$i?this.index++:this.data[this.index+1]===Bt&&(this.index++,r=!0));else break;else if(f===this.imaginary_char){let m=this.data[this.index+1];if(m>=ft&&m<=Ar||m>=Jt&&m<=kr||m>=qi&&m<=Ki||m===Ji)break;if(a==="integer"||a==="fraction"){this.index++,d=!0;break}}else if(f>=Be&&f<=Gt)switch(a){case"integer":n=n*10+(f-Be);break;case"fraction":s=s*10+(f-Be),o++;break;case"exponent":t=t*10+(f-Be);break}else break}let h=n+s/Math.pow(10,o);return a==="exponent"&&(h=h*Math.pow(10,(r?-1:1)*t)),d?{type:"complex",id:this.id_counter++,position:e,imaginary:i?-h:h,real:0,text:this.expression.substring(u,this.index)||""}:{type:"literal",id:this.id_counter++,position:e,value:i?-h:h,text:this.expression.substring(u,this.index)||""}}ConsumeString(){this.index++;let e=[];for(;this.index<this.length;this.index++){let t=this.data[this.index];if(t===Hi&&(this.index++,this.index>=this.length||this.data[this.index]!==Hi))break;e.push(t)}return e.map(t=>String.fromCharCode(t)).join("")}ConsumeWhiteSpace(){for(;this.index<this.length;){let e=this.data[this.index];if(e===xo||e===rl||e===il||e===nl||e===tl)this.index++;else return}}};var ko=class l{static _instance=new l;constructor(){}static get instance(){return this._instance}HTML(e,t={}){t={br:!0,...t};let r=[];for(let i of e){let n=[];for(let o of i)o.pre&&n.push("<pre>"),o.emphasis&&n.push("<em>"),o.strong&&n.push("<strong>"),o.strike&&n.push("<strike>"),n.push(o.text),o.strike&&n.push("</strike>"),o.strong&&n.push("</strong>"),o.emphasis&&n.push("</em>"),o.pre&&n.push("</pre>");r.push(n.join(""))}return r.join(t.br?`<br/>
|
|
12
12
|
`:`
|
|
13
13
|
`)}Dummy(e=""){return e.split(/\n/).map(t=>[{text:t}])}Parse(e=""){let t=this.Tokenize(e);for(let r=0;r<t.length;r++){let i=t[r];if(i.type==="delimeter"){let n=t[r-1],o=t[r+1],s=!n||n.type==="whitespace"||n.type==="newline",a=n&&n.type==="text"&&/[^\w\d]$/.test(n.text),c=!o||o.type==="whitespace"||o.type==="newline",d=o&&o.type==="text"&&/^[^\w\d]/.test(o.text);i.left_flanking=!c&&(!d||s),i.right_flanking=!s&&(!a||c||d)}}return this.ApplyFormatting(t),this.Consolidate(t)}IsWhitespace(e){return e===" "||e===" "}IsNewline(e){return e==="\r"||e===`
|
|
14
|
-
`}IsDelimeter(e){return e==="*"||e==="_"||e==="~"}Consolidate(e){let t=[],r={},i=[],n={type:"text",text:""};for(let o of e)if(o.type==="newline")n.text.length&&i.push(n),n={...r,text:"",type:"text"},t.push(i),i=[];else switch((!!r.strong!=!!o.strong||!!r.emphasis!=!!o.emphasis||!!r.strike!=!!o.strike)&&(r.strong=!!o.strong,r.emphasis=!!o.emphasis,r.strike=!!o.strike,n.text.length&&i.push(n),n={...r,text:"",type:"text"}),o.type){case"text":case"whitespace":n.text+=o.text;break;case"delimeter":for(let s=0;s<o.length;s++)n.text+=o.char;break}return n.text.length&&i.push(n),i.length&&t.push(i),t}ApplyFormatting(e,t){let r=0,i=e.length;for(r=0;r<i;r++){let n=e[r];if(n.type==="delimeter"){if(t&&n.right_flanking&&t.char===n.char&&n.length>0)return{index:r,token:n};if(n.left_flanking){let o=this.ApplyFormatting(e.slice(r+1),n);if(o.token){let s=Math.min(o.token.length,n.length),a=n.char==="~",c=!a&&!!(s%2),d=!a&&s>=2;for(let u=r+1;u<=r+o.index;u++)e[u].strong=!!e[u].strong||d,e[u].emphasis=!!e[u].emphasis||c,e[u].strike=!!e[u].strike||a;o.token.length-=s,n.length-=s,n.length>0?r--:r+=o.index}}}}return{index:r}}Tokenize(e=""){let t=[],r=e.length,i=0,n=!1,o="";for(i=0;i<r;i++){let s=e[i];if(this.IsWhitespace(s)){o&&t.push({type:"text",text:o});let a=s;for(;;){let c=e[i+1];if(this.IsWhitespace(c))a+=c,i++;else break}t.push({type:"whitespace",text:a}),n=!1,o=""}else if(this.IsNewline(s)){o&&t.push({type:"text",text:o}),t.push({type:"newline",text:s});let a="";for(;;){let c=e[i+1];if(this.IsNewline(c))a+=c,i++;else break}a.length&&t.push({type:"newline",text:a}),n=!1,o=""}else if(n)o+=s,n=!1;else if(this.IsDelimeter(s)){o&&t.push({type:"text",text:o});let a=s;for(;;){let c=e[i+1];if(c===s)a+=c,i++;else break}t.push({type:"delimeter",text:a,char:s,length:a.length}),n=!1,o=""}else s==="\\"?n=!0:o+=s}return o&&t.push({type:"text",text:o}),t}};var Er=class l{static type="vertex";type=l.type;color=0;edges_in=new Set;edges_out=new Set;get has_inbound_edges(){return this.edges_in.size>0}get has_outbound_edges(){return this.edges_out.size>0}Reset(){for(let e of this.edges_out)e.RemoveDependency(this);for(let e of this.edges_in)e.RemoveDependent(this);this.edges_out.clear(),this.edges_in.clear()}ClearDependencies(){for(let e of this.edges_in)e.RemoveDependent(this);this.edges_in.clear()}AddDependent(e){e!==this&&(this.edges_out.has(e)||this.edges_out.add(e))}RemoveDependent(e){this.edges_out.delete(e)}AddDependency(e){e!==this&&(this.edges_in.has(e)||this.edges_in.add(e))}RemoveDependency(e){this.edges_in.delete(e)}LinkTo(e){this.AddDependent(e),e.AddDependency(this)}DependsOn(e){this.AddDependency(e),e.AddDependent(this)}LoopCheck(){let e=[this];for(;e.length;){let t=e[e.length-1],r=!0;if(t.color!==2){t.color=1;for(let i of t.edges_out){if(i.color===1)return this.color=0,!0;i.color===0&&i.edges_out.size&&(e.push(i),r=!1)}}r&&(t.color=2,e.pop())}return this.color=2,!1}};var mt=class extends Er{dirty=!1};var Ro={error:"NOTIMPL"},Se=()=>({type:7,value:"N/A"}),be=()=>({type:7,value:"EXPR"});var xe=()=>({type:7,value:"DIV/0"}),E=()=>({type:7,value:"ARG"}),U=()=>({type:7,value:"VALUE"}),J=()=>({type:7,value:"REF"}),Qi=()=>({type:7,value:"NAME"}),To=()=>({type:7,value:"SPILL"}),Mr=()=>({type:7,value:"UNK"});var $e=class l extends mt{static type="spreadsheet-vertex";reference;error=0;address;result={type:0};expression={type:"missing",id:-1};expression_error=!1;short_circuit=!1;type=l.type;get array_head(){return this.address?!!this.reference&&!!this.reference.area&&this.reference.area.start.column===this.address.column&&this.reference.area.start.row===this.address.row:!1}TakeReferenceValue(){this.reference&&(this.result=j(this.reference.GetValue()))}Calculate(e){if(this.dirty){if(this.color===0&&this.LoopCheck()&&(this.dirty=!1,this.edges_in.size)){this.reference&&(this.array_head||this.reference.type===1)&&this.reference.SetCalculationError("LOOP");for(let t of this.edges_out)t.Calculate(e);return}for(let t of this.edges_in)if(t.dirty)return;if(this.reference){if(this.reference.type===1){this.short_circuit=!1;let t=e.CalculationCallback.call(e,this);if(this.result=t.value,this.short_circuit)return;t.volatile&&e.volatile_list.push(this)}else this.result=this.reference.GetValue4();if(this.array_head)e.SpreadCallback.call(e,this,this.result);else if(this.reference.type===1)if(this.result.type===9){let t=e.SpillCallback.call(e,this,this.result);if(t)for(let r of t)for(let i of r.edges_out)i.dirty=!0,i.Calculate(e)}else this.reference.SetCalculatedValue(this.result.value,this.result.type)}else console.info("skip dirty constant? [or dangling...]");this.dirty=!1;for(let t of this.edges_out)t.dirty&&e.calculation_list.push(t)}}};var et=class l extends mt{static type="array-vertex";static list=[];type=l.type;area;static GetVertex(e){for(let t of this.list)if(t.area.start.sheet_id===e.start.sheet_id&&t.area.Equals(e))return[t,!1];return[new l(e),!0]}static Clear(){this.list=[]}static GetContainingArrays(e){let t=[];for(let r of this.list)r.area.start.sheet_id===e.sheet_id&&r.area.Contains(e)&&t.push(r);return t}static CreateImplicitEdges(e,t){for(let r of this.list)r.area.start.sheet_id===t.sheet_id&&r.area.Contains(t)&&r.DependsOn(e)}constructor(e){super(),this.area=e.Clone(),l.list.push(this)}RemoveDependent(e){super.RemoveDependent(e),this.edges_out.size||(this.Reset(),l.list=l.list.filter(t=>t!==this))}Calculate(e){if(this.dirty){if(this.color===0&&this.LoopCheck()&&(this.dirty=!1,this.edges_in.size)){for(let t of this.edges_out)t.Calculate(e);return}for(let t of this.edges_in)if(t.dirty)return;this.dirty=!1;for(let t of this.edges_out)t.Calculate(e)}}};var Dr=class{vertices=[[]];volatile_list=[];calculation_list=[];spill_data=[];loop_hint;leaf_vertices=new Set;dirty_list=[];loop_check_required=!1;IsSpreadsheetVertex(e){return e.type===$e.type}FlushTree(){this.dirty_list=[],this.volatile_list=[],this.vertices=[[]],this.leaf_vertices.clear(),et.Clear()}ResolveArrayHead(e){if(!e.sheet_id)throw new Error("resolve array head with no sheet id");let t=this.model.sheets.Find(e.sheet_id)?.cells;if(!t)throw new Error("no cells? sheet id "+e.sheet_id);let r=t.data[e.row];if(r){let i=r[e.column];if(i&&i.area){let n={row:i.area.start.row,column:i.area.start.column,sheet_id:e.sheet_id};return console.info("array head",e,n),n}}return e}*IterateVertices(e,t=!1){for(let r of ur.Iterate(e)){let i=this.GetVertex(r,t);i&&(yield i)}}GetVertex(e,t){if(!e.sheet_id)throw console.info(JSON.stringify({address:e,create:t})),console.trace(),new Error("getvertex with no sheet id");let r=this.model.sheets.Find(e.sheet_id)?.cells;if(!r)throw new Error("no cells? sheet id "+e.sheet_id);if(!this.vertices[e.sheet_id]){if(!t)return;this.vertices[e.sheet_id]=[]}if(this.vertices[e.sheet_id][e.column]){let n=this.vertices[e.sheet_id][e.column][e.row];if(n)return n;if(!t)return}else{if(!t)return;this.vertices[e.sheet_id][e.column]=[]}let i=new $e;return i.address={row:e.row,column:e.column,absolute_row:e.absolute_row,absolute_column:e.absolute_column,sheet_id:e.sheet_id},i.reference=r.EnsureCell(e),this.vertices[e.sheet_id][e.column][e.row]=i,et.CreateImplicitEdges(i,e),i}RemoveVertex(e){if(!e.sheet_id)throw new Error("removevertex with no sheet id");let t=this.GetVertex(e,!1);t&&(t.Reset(),this.vertices[e.sheet_id][e.column][e.row]=void 0)}ResetVertex(e){let t=this.GetVertex(e,!1);t&&t.Reset()}RIBcount=0;ResetInbound(e,t=!1,r=!0,i=!1){this.RIBcount++;let n=this.GetVertex(e,r);if(!n){if(t){let s=et.GetContainingArrays(e);for(let a of s)this.SetVertexDirty(a)}return}let o=[];if(i&&(o=Array.from(n.edges_in)),n.ClearDependencies(),t&&this.SetVertexDirty(n),i){n.has_outbound_edges||this.RemoveVertex(e);for(let s of o)if(!s.has_inbound_edges&&!s.has_outbound_edges){let a=s;a.address&&this.RemoveVertex(a.address)}}}ResetLoopState(){for(let e of this.vertices)if(e){for(let t of e)if(t)for(let r of t)r&&(r.color=r.edges_out.size?0:2)}for(let e of this.leaf_vertices)e.color=2}LoopCheck(e=!1){if(!this.loop_check_required&&!e)return!1;let t=[];for(let i of this.vertices)if(i){for(let n of i)if(n)for(let o of n)o&&(o.color=o.edges_out.size?0:2,t.push(o))}let r=[];for(let i of t)if(i.color===0){for(i.color=1,r.push(i);r.length;){let n=r[r.length-1],o=!0;if(n.color!==2)for(let s of n.edges_out){if(s.color===1)return this.loop_hint=this.RenderAddress(i.address),console.info("loop detected @",this.loop_hint),!0;s.color===0&&(r.push(s),o=!1)}o&&(r.pop(),n.color=2)}i.color=2}return this.loop_check_required=!1,this.loop_hint=void 0,!1}RenderAddress(e){if(!e)return"undefined";let t="";if(e.sheet_id){let i=this.model.sheets.Find(e.sheet_id);i&&(t=i.name+"!")}let r=new g(e);return t+r.spreadsheet_label}CompositeAddArrayEdge(e,t){if(!e.start.sheet_id)throw new Error("AddArrayEdge called without sheet ID");let[r,i]=et.GetVertex(e);if(t.DependsOn(r),this.loop_check_required=!0,!i)return;let n=this.vertices[e.start.sheet_id];if(n){if(e.entire_row){for(let o=0;o<n.length;o++)if(n[o])for(let s=e.start.row;s<=e.end.row;s++){let a=n[o][s];a&&r.DependsOn(a)}}else if(e.entire_column){for(let o=e.start.column;o<=e.end.column;o++)if(n[o])for(let s of n[o])s?.address&&r.DependsOn(s)}else for(let o=e.start.row;o<=e.end.row;o++)for(let s=e.start.column;s<=e.end.column;s++)if(n[s]){let a=n[s][o];a&&r.DependsOn(a)}}}AddLeafVertexArrayEdge(e,t){this.CompositeAddArrayEdge(e,t)}AddArrayEdge(e,t){if(!e.start.sheet_id)throw new Error("AddArrayEdge called without sheet ID");let r=this.GetVertex(t,!0);this.CompositeAddArrayEdge(e,r)}AddEdge(e,t){let r=this.GetVertex(e,!0);this.GetVertex(t,!0).DependsOn(r),r.reference&&r.reference.area&&!r.array_head&&this.AddEdge({...e,row:r.reference.area.start.row,column:r.reference.area.start.column},t),this.loop_check_required=!0}RemoveEdge(e,t){let r=this.GetVertex(e,!1),i=this.GetVertex(t,!1);!r||!i||(r.RemoveDependent(i),i.RemoveDependency(r))}SetAreaDirty(e){if(e.start.column===1/0||e.end.column===1/0||e.start.row===1/0||e.end.row===1/0)throw new Error("don't iterate over infinite area");let t=e.start.sheet_id;if(!t)throw new Error("invalid area, missing sheet id");for(let r=e.start.column;r<=e.end.column;r++)for(let i=e.start.row;i<=e.end.row;i++){let n={row:i,column:r,sheet_id:t};this.GetVertex(n,!1)&&this.SetDirty(n)}}SetVertexDirty(e){if(!e.dirty){this.dirty_list.push(e),e.dirty=!0;for(let t of e.edges_out)this.SetVertexDirty(t)}}SetDirty(e){let t=this.GetVertex(e,!0);this.SetVertexDirty(t)}AddLeafVertex(e){this.leaf_vertices.add(e)}RemoveLeafVertex(e){this.leaf_vertices.delete(e)}AddLeafVertexEdge(e,t){let r=this.GetVertex(e,!0);return t.DependsOn(r),0}RemoveLeafVertexEdge(e,t){let r=this.GetVertex(e,!1);r&&(r.RemoveDependent(t),t.RemoveDependency(r))}InitializeGraph(){for(let e of this.dirty_list)this.IsSpreadsheetVertex(e)&&(e.TakeReferenceValue(),this.CheckVolatile(e)&&this.volatile_list.push(e)),e.dirty=!1;this.dirty_list=[]}Recalculate(){for(let e of this.volatile_list)this.SetVertexDirty(e);this.spill_data=this.spill_data.filter(({area:e,vertex:t})=>{if(t.dirty){t.Reset();let r=e.start.sheet_id?this.model.sheets.Find(e.start.sheet_id)?.cells:void 0;if(r)for(let{cell:i,row:n,column:o}of r.IterateRC(new g(e.start,e.end)))i.spill&&(i.spill=void 0,typeof i.value>"u"&&i.Reset()),this.SetDirty({row:n,column:o,sheet_id:e.start.sheet_id});return!1}return!0}),this.calculation_list=this.dirty_list.slice(0),this.volatile_list=[],this.dirty_list=[],this.loop_check_required&&(this.ResetLoopState(),this.loop_check_required=!1);for(let e=0;e<this.calculation_list.length;e++)this.calculation_list[e].Calculate(this);this.calculation_list=[]}};var bl=l=>{let e={m:l,n:l,array:[]};for(let t=0;t<l;t++){let r=[];for(let i=0;i<l;i++)r.push({real:0,imaginary:0});e.array.push(r)}return e};var _l=l=>{let{r:e,theta:t}=l,r=e*Math.cos(t),i=e*Math.sin(t);return{real:r,imaginary:i}},Lr=l=>{let e=Math.sqrt(l.real*l.real+l.imaginary*l.imaginary),t=Math.atan2(l.imaginary,l.real);return{r:e,theta:t}},Mo=l=>{let e={real:Math.sinh(l.real)*Math.cos(l.imaginary),imaginary:Math.cosh(l.real)*Math.sin(l.imaginary)},t={real:Math.cosh(l.real)*Math.cos(l.imaginary),imaginary:Math.sinh(l.real)*Math.sin(l.imaginary)};return Ke(e,t)},Uo=l=>Ke({real:Math.tan(l.real),imaginary:Math.tanh(l.imaginary)},{real:1,imaginary:-(Math.tan(l.real)*Math.tanh(l.imaginary))}),Do=l=>({real:Math.cosh(l.real)*Math.cos(l.imaginary),imaginary:Math.sinh(l.real)*Math.sin(l.imaginary)}),Lo=l=>({real:Math.cos(l.real)*Math.cosh(l.imaginary),imaginary:Math.sin(l.real)*Math.sinh(l.imaginary)}),Io=l=>({real:Math.sinh(l.real)*Math.cos(l.imaginary),imaginary:Math.cosh(l.real)*Math.sin(l.imaginary)}),Ir=l=>({real:Math.sin(l.real)*Math.cosh(l.imaginary),imaginary:Math.cos(l.real)*Math.sinh(l.imaginary)}),Zi=l=>{if(l.imaginary===0)return{real:Math.asin(l.real),imaginary:0};let e=Math.hypot(l.real+1,l.imaginary)/2,t=Math.hypot(l.real-1,l.imaginary)/2,r=e+t,i=e-t,n={real:Math.asin(i),imaginary:Math.log(r+Math.sqrt(r*r-1))};return(l.imaginary<0||l.imaginary===0&&l.real>1)&&(n.imaginary=-n.imaginary),n},zo=l=>{if(l.imaginary===0)return{real:Math.acos(l.real),imaginary:0};let e=Zi(l);return{real:Math.PI/2-e.real,imaginary:e.imaginary}},Vo=l=>{let{real:e,imaginary:t}=l;if(e===0){if(t>1)return{real:Math.PI/2,imaginary:.5*Math.log((t-1)/(t+1))};if(t<-1)return{real:-Math.PI/2,imaginary:.5*Math.log((1-t)/(-1-t))}}let r=e*e,i=t*t,n=.5*Math.atan2(2*e,1-r-i),o=.25*Math.log((r+(t+1)*(t+1))/(r+(t-1)*(t-1)));return{real:n,imaginary:o}},Fo=(l,e)=>{if(e.real===0&&e.imaginary===0&&l.real===0&&l.imaginary===0)return!1;let t=e.real*e.real+e.imaginary*e.imaginary,r={real:(l.real*e.real+l.imaginary*e.imaginary)/t,imaginary:(l.imaginary*e.real-l.real*e.imaginary)/t},i=r.real*r.real,n=r.imaginary*r.imaginary,o={real:.5*Math.atan2(2*r.real,1-i-n),imaginary:.25*Math.log((i+(r.imaginary+1)*(r.imaginary+1))/(i+(r.imaginary-1)*(r.imaginary-1)))};return e.real<0&&(o.real+=l.real>=0||l.imaginary>=0?Math.PI:-Math.PI),o},No=(...l)=>{let e=l.shift();if(!e)return{real:0,imaginary:0};for(let t of l)e=se(e,t);return e},se=(l,e)=>({real:l.real*e.real-l.imaginary*e.imaginary,imaginary:l.real*e.imaginary+l.imaginary*e.real}),gl=(l,e)=>{let t=[];for(let r=0;r<l.m;r++){let i=[];for(let n=0;n<l.n;n++)i.push(l.array[r][n]+e.array[r][n]);t.push(i)}return{m:l.m,n:l.n,array:t}},Yi=(l,e)=>{let t=[];for(let r=0;r<l.m;r++){let i=[];for(let n=0;n<e.n;n++){let o=0;for(let s=0;s<l.n;s++)o+=l.array[r][s]*e.array[s][n];i.push(o)}t.push(i)}return{array:t,m:l.m,n:e.n}},Po=(l,e)=>{let t=[];for(let r=0;r<l.m;r++){let i=[];for(let n=0;n<e.n;n++){let o={real:0,imaginary:0};for(let s=0;s<l.n;s++)o.real+=l.array[r][s].real*e.array[s][n].real-l.array[r][s].imaginary*e.array[s][n].imaginary,o.imaginary+=l.array[r][s].real*e.array[s][n].imaginary+l.array[r][s].imaginary*e.array[s][n].real;i.push(o)}t.push(i)}return t},zr=l=>{let e={real:0,imaginary:0},t=l.n;if(t==2){let i=se(l.array[0][0],l.array[1][1]),n=se(l.array[1][0],l.array[0][1]);return{real:i.real-n.real,imaginary:i.imaginary-n.imaginary}}let r=bl(l.n);for(let i=0;i<t;i++){let n=0;for(let a=1;a<t;a++){let c=0;for(let d=0;d<t;d++)d!=i&&(r.array[n][c]={...l.array[a][d]},c++);n++}r.m=r.n=t-1;let o=Math.pow(-1,i),s=se({real:l.array[0][i].real*o,imaginary:l.array[0][i].imaginary*o},zr(r));e.real+=s.real,e.imaginary+=s.imaginary}return e};var yl=l=>{let e={real_values:!1,imaginary_values:!1,square:l.m===l.n,unit_diagonal:!0},t={m:l.m,n:l.n,array:[]},r={m:l.m,n:l.n,array:[]};for(let i=0;i<l.m;i++){let n=l.array[i],o=[],s=[];for(let a=0;a<l.n;a++)n[a].real&&(e.real_values=!0),n[a].imaginary&&(e.imaginary_values=!0),a===i&&e.unit_diagonal&&(n[a].real!==1||n[a].imaginary!==0)&&(e.unit_diagonal=!1),o.push(n[a].real),s.push(n[a].imaginary);t.array.push(o),r.array.push(s)}return{real:t,imaginary:r,flags:e}},vl=l=>{let e=l.array.map(t=>t.slice(0));return{m:l.m,n:l.n,array:e}},Eo=l=>{if(l.m!==l.n)return;let e=vl(l),t=e.array,r=0,i=0,n=0,o=0,s=l.m;for(i=1;i<s;i++)t[0][i]/=t[0][0];for(i=1;i<s;i++){for(n=i;n<s;n++){for(r=0,o=0;o<i;o++)r+=t[n][o]*t[o][i];t[n][i]-=r}if(i!=s-1)for(n=i+1;n<s;n++){for(r=0,o=0;o<i;o++)r+=t[i][o]*t[o][n];t[i][n]=(t[i][n]-r)/t[i][i]}}for(i=0;i<s;i++)for(n=i;n<s;n++){let a=1;if(i!=n)for(a=0,o=i;o<n;o++)a-=t[n][o]*t[o][i];t[n][i]=a/t[n][n]}for(i=0;i<s;i++)for(n=i;n<s;n++)if(i!=n){for(r=0,o=i;o<n;o++)r+=t[o][n]*(i==o?1:t[i][o]);t[i][n]=-r}for(i=0;i<s;i++)for(n=0;n<s;n++){for(r=0,o=i>n?i:n;o<s;o++)r+=(n==o?1:t[n][o])*t[o][i];t[n][i]=r}return e},Oo=l=>{let e=[];if(l.m!==l.n)return;let{real:t,imaginary:r,flags:i}=yl(l),n=Eo(t);if(!n)return;if(!i.imaginary_values){for(let u=0;u<l.m;u++){let h=[];for(let f=0;f<l.n;f++)h.push({real:n.array[u][f],imaginary:0});e.push(h)}return e}let o=Yi(n,r),s=Yi(r,o),a=gl(t,s),c=Eo(a);if(!c)return;let d=Yi(o,c);for(let u=0;u<l.m;u++){let h=[];for(let f=0;f<l.n;f++)h.push({real:c.array[u][f],imaginary:-d.array[u][f]});e.push(h)}return e},Ke=(l,e)=>{let t={real:e.real,imaginary:-e.imaginary},r=se(l,t),i=se(e,t);return{real:r.real/i.real,imaginary:r.imaginary/i.real}},Wt=l=>{let e=l.real||0,t=l.imaginary||0;return se({real:Math.exp(e),imaginary:0},{real:Math.cos(t),imaginary:Math.sin(t)})},en=l=>{let e=Lr(l);return{real:Math.log(e.r),imaginary:e.theta}},Ce=(l,e)=>{if(e.imaginary)return Wt(se(e,en(l)));{let t=Lr(l);return _l({r:Math.pow(t.r,e.real),theta:t.theta*e.real})}};var Ho=(l,e=0)=>l&&l.type===8?l:{type:8,value:{real:e,imaginary:0}},tt=l=>l.imaginary?{type:8,value:l}:{type:3,value:l.real},rt=(l,e)=>{if(l.type===7)return[0,0,l];if(e.type===7)return[0,0,e];let t=[0,0];switch(l.type){case 3:t[0]=l.value;break;case 4:t[0]=l.value?1:0;break;case 0:break;case 8:t[3]=l;break;default:return[0,0,U()]}switch(e.type){case 3:t[1]=e.value;break;case 4:t[1]=e.value?1:0;break;case 0:break;case 8:t[4]=e;break;default:return[0,0,U()]}return(t[3]||t[4])&&(t[3]=Ho(t[3],t[0]),t[4]=Ho(t[4],t[1])),t},wl=(l,e)=>{let[t,r,i,n,o]=rt(l,e);return i||(n&&o?tt({real:n.value.real+o.value.real,imaginary:n.value.imaginary+o.value.imaginary}):{value:t+r,type:3})},nn=(l,e)=>{let[t,r,i,n,o]=rt(l,e);return i||(n&&o?tt({real:n.value.real-o.value.real,imaginary:n.value.imaginary-o.value.imaginary}):{value:t-r,type:3})},xl=(l,e)=>{let[t,r,i,n,o]=rt(l,e);if(i)return i;if(n&&o)return tt(Ce(n.value,o.value));let s=Math.pow(t,r);return isNaN(s)?U():{type:3,value:s}},Cl=(l,e)=>{let[t,r,i,n,o]=rt(l,e);if(i)return i;if(n&&o)return tt(Ce(n.value,o.value));if(t<0&&r!==0&&Math.abs(r)<1)return tt(Ce({real:t,imaginary:0},{real:r,imaginary:0}));let s=Math.pow(t,r);return isNaN(s)?U():{type:3,value:s}},tn=xl,Sl=(l,e)=>{let[t,r,i,n,o]=rt(l,e);return i||(n&&o?tt(se(n.value,o.value)):{value:t*r,type:3})},Al=(l,e)=>{let[t,r,i,n,o]=rt(l,e);return i||(n&&o?o.value.real===0&&o.value.imaginary===0?xe():tt(Ke(n.value,o.value)):r===0?xe():{value:t/r,type:3})},kl=(l,e)=>{let[t,r,i]=rt(l,e);return i||(r===0?xe():{value:t%r,type:3})},rn=(l,e)=>l.type===7?l:e.type===7?e:l.type===0&&(e.value===""||e.value===0||e.type===8&&e.value.real===0&&e.value.imaginary===0)||e.type===0&&(l.value===""||l.value===0||l.type===8&&l.value.real===0&&l.value.imaginary===0)?{type:4,value:!0}:l.type===8?e.type===8?{type:4,value:l.value.imaginary===e.value.imaginary&&l.value.real===e.value.real}:{type:4,value:!l.value.imaginary&&l.value.real===e.value}:e.type===8?{type:4,value:!e.value.imaginary&&l.value===e.value.real}:l.type===2&&e.type===2?{type:4,value:l.value.toLowerCase()===e.value.toLowerCase()}:{type:4,value:l.value==e.value},Go=(l,e)=>{let t=rn(l,e);return t.type===7?t:{type:4,value:!t.value}},Rl=(l,e)=>l.type===7?l:e.type===7?e:l.type===8||e.type===8?U():{type:4,value:(l.value||0)>(e.value||0)},on=(l,e)=>!(l.type===8||l.type===9||l.type===10||l.type===5||e.type===8||e.type===9||e.type===10||e.type===5),Tl=(l,e)=>l.type===7?l:e.type===7?e:on(l,e)?{type:4,value:(l.value||0)>=(e.value||0)}:U(),El=(l,e)=>l.type===7?l:e.type===7?e:on(l,e)?{type:4,value:(l.value||0)<(e.value||0)}:U(),Ml=(l,e)=>l.type===7?l:e.type===7?e:on(l,e)?{type:4,value:(l.value||0)<=(e.value||0)}:U(),Bo=()=>{tn=Cl},$o=l=>{switch(l){case"+":return wl;case"-":return nn;case"*":return Sl;case"/":return Al;case"^":return tn;case"**":return tn;case"%":return kl;case"=":return rn;case"==":return rn;case"!=":return Go;case"<>":return Go;case">":return Rl;case">=":return Tl;case"<":return El;case"<=":return Ml}};var sn=l=>!Array.isArray(l)&&l.type===5&&!!l.value.type,fe=l=>l.type===5&&l.key==="metadata",Fr=class{constructor(e,t,r){this.data_model=e;this.library=t;this.parser=r}context={address:{row:-1,column:-1},volatile:!1,bindings:[]};Calculate(e,t,r,i=!1){return i||(this.context.address=t,this.context.volatile=!1,this.context.area=r),{value:this.CalculateExpression(e),volatile:this.context.volatile}}CellFunction2(e){if(!e.sheet_id)if(e.sheet)e.sheet_id=this.data_model.sheets.ID(e.sheet)||0;else return()=>J();let t=this.data_model.sheets.Find(e.sheet_id)?.cells;if(!t)return console.warn("missing cells reference @ "+e.sheet_id),()=>J();let r=t.GetCell(e);return r?e.spill&&r.spill&&r.spill.start.row===e.row&&r.spill.start.column===e.column?()=>r.spill?t.GetRange4(r.spill.start,r.spill.end,!0)||J():To():()=>r.GetValue4():()=>({type:3,value:0})}CellFunction4(e,t){return e.sheet_id?this.data_model.sheets.Find(e.sheet_id)?.cells?.GetRange4(e,t,!0)||J():J()}GetMetadata(e,t){let r,i;switch(e.type){case"address":if(e.spill){let n;if(e.sheet_id&&(n=this.data_model.sheets.Find(e.sheet_id)),!n)return console.error("missing sheet [da6]"),J();let o=n.CellData(e);o.spill&&(i=o.spill)}else r=e;break;case"range":i=e;break;case"structured-reference":{let n=this.data_model.ResolveStructuredReference(e,this.context.address);n&&(n.type==="address"?r=n:n.type==="range"&&(i=n))}break;case"identifier":{let n=this.data_model.GetName(e.name,this.context.address.sheet_id||0);n?.type==="range"&&(n.area.count===1?r=n.area.start:i=n.area)}break;case"call":{let n=this.CalculateExpression(e,!0);if(sn(n))if(n.value.type==="address")r=n.value;else if(n.value.type==="range")i=n.value;else return n;else return n}break;default:return this.CalculateExpression(e)}if(r){let n;if(r.sheet_id&&(n=this.data_model.sheets.Find(r.sheet_id)),!n)return console.error("missing sheet [ac8]"),J();let o=n.CellData(r),s=o.calculated_type?o.calculated:o.value,a={type:"metadata",address:{...r,position:0,id:0,type:"address",label:new g(r).spreadsheet_label},value:s,format:o.style?o.style.number_format:void 0,...t(o,r)};return{type:5,value:a,key:"metadata"}}else if(i){if(i.start.row===1/0||i.start.column===1/0)return J();let n;if(i.start.sheet_id&&(n=this.data_model.sheets.Find(i.start.sheet_id)),!n)throw new Error("missing sheet [ac9]");let o=[];for(let s=i.start.column;s<=i.end.column;s++){let a=[];for(let c=i.start.row;c<=i.end.row;c++){let d=n.CellData({row:c,column:s});r={...i.start,row:c,column:s};let u=d.calculated_type?d.calculated:d.value,h={type:"metadata",address:r,value:u,format:d.style?d.style.number_format:void 0,...t(d,r)};a.push({type:5,value:h,key:"metadata"})}o.push(a)}return{type:9,value:o}}return this.CalculateExpression(e)}RewriteMacro(e,t){let r;switch(e.type){case"identifier":if(r=t[e.name.toUpperCase()],r)return JSON.parse(JSON.stringify(r));break;case"binary":e.left=this.RewriteMacro(e.left,t),e.right=this.RewriteMacro(e.right,t);break;case"unary":e.operand=this.RewriteMacro(e.operand,t);break;case"group":e.elements=e.elements.map(i=>this.RewriteMacro(i,t));break;case"call":e.args=e.args.map(i=>this.RewriteMacro(i,t));break}return e}CallMacro(e,t){if(!t.expression)return()=>be();let r=JSON.stringify(t.expression),i={},n=t.argument_names?.map(o=>o.toUpperCase())||[];return o=>{let s=JSON.parse(r);for(let a=0;a<n.length;a++)i[n[a]]=o.args[a]||{type:"missing",id:0};return this.CalculateExpression(this.RewriteMacro(s,i))}}ImplicitCallTail(e,t){let r=e.value;if(!r.func||!r.bindings)return be();let i={};for(let o=0;o<r.bindings.length;o++){let s=r.bindings[o];if(s?.type==="identifier")i[s.name.toUpperCase()]=t[o]||{type:"missing"};else return be()}let n=JSON.parse(JSON.stringify(r.func));return this.parser.Walk2(n,o=>{if(o.type==="identifier"){let s=o.name.toUpperCase(),a=i[s];if(a)return JSON.parse(JSON.stringify(a))}return!0}),this.CalculateExpression(n)}Apply(e,t){let r=t.map(i=>{switch(i.type){case 3:case 4:case 2:return{type:"literal",value:i.value,id:0,position:0};case 7:return{type:"literal",value:"#"+i.value,id:0,position:0};case 9:{let n=[];for(let o=0;o<i.value.length;o++){let s=i.value[o],a=[];for(let c=0;c<s.length;c++){let d=s[c];switch(d.type){case 4:case 3:case 2:a.push(d.value||void 0);break;default:console.warn("unhandled array value",d),a.push(void 0)}}n.push(a)}return{type:"array",values:n,id:0,position:0}}case 0:return{type:"missing",id:0};default:console.warn("unhandled parameter value",i)}return{type:"missing",id:0}});return this.ImplicitCallTail(e,r)}ImplicitCall(){return e=>{e.type==="call"&&(e={type:"implicit-call",args:e.args,call:{type:"identifier",name:e.name,position:e.position,id:0},position:e.position,id:0});let t=this.CalculateExpression(e.call);return t.type===6?this.ImplicitCallTail(t,e.args):be()}}NormalizeBindings(e){let t={};for(let[r,i]of Object.entries(e))t[r.toUpperCase()]=i;return t}CallExpression(e,t=!1){let r=this.library.Get(e.name);if(!r){let i=e.name.toUpperCase();return this.LookupBinding(i)?this.ImplicitCall():this.data_model.GetName(i,this.context.address.sheet_id||0)?this.ImplicitCall():()=>Qi()}return i=>{this.context.volatile=this.context.volatile||!!r.volatile;let n=e.name.toLowerCase()==="if",o=-1,s,a=i.args,c=r.arguments||[],d;r.create_binding_context&&(d=r.create_binding_context.call(0,{args:i.args,descriptors:c}),d?(a=d.args,d.argument_descriptors&&(c=d.argument_descriptors),this.context.bindings.unshift(this.NormalizeBindings(d.context))):s=E());let u=a.map((m,p)=>{if(s)return;let b=c[Math.min(p,c.length-1)]||{};if(b.passthrough)return m;if(p===o)return b.boxed?{type:0}:void 0;if(typeof m>"u")return n&&p===0&&(o=1),b.boxed?{type:0}:void 0;if(b.address)return b.boxed?{type:2,value:this.parser.Render(m).replace(/\$/g,"")}:this.parser.Render(m).replace(/\$/g,"");if(b.metadata)return this.GetMetadata(m,()=>({}));{let _=this.CalculateExpression(m);if(_.type===7){if(b.allow_error)return _;s=_;return}if(n&&p===0&&_.type!==9){let x=!1;if(_.type===2){let v=_.value.toLowerCase().trim();x=v!=="false"&&v!=="f"}else x=!!_.value;o=x?2:1}return b.boxed?_:_.type===9?_.value.map(x=>x.map(v=>v.value)):_.value}});if(d&&this.context.bindings.shift(),s)return s;let h={address:{...this.context.address},area:this.context.area?{start:{...this.context.area.start},end:{...this.context.area.end}}:void 0,apply:r.fp?this.Apply.bind(this):void 0},f=r.fn.apply(h,u);if(r.return_type==="reference"){if(t)return f;if(sn(f)){if(f.value.type==="address")return this.CellFunction2(f.value)();if(f.value.type==="range")return this.CellFunction4(f.value.start,f.value.end)}return f}return f}}ResolveStructuredReference(e){let t=this.data_model.ResolveStructuredReference(e,this.context.address);if(t){if(t.type==="address")return this.CellFunction2(t);if(t.type==="range")return()=>this.CellFunction4(t.start,t.end)}return()=>J()}ResolveDimensionedQuantity(){return e=>{let t=this.CalculateExpression(e.expression);return{type:10,value:{value:t.value,unit:e.unit.name}}}}UnaryExpression(e,t=!1){switch(e.operator){case"+":return r=>this.CalculateExpression(r.operand);case"-":{let r=nn,i={type:3,value:0};return n=>{let o=this.CalculateExpression(n.operand);return o.type===9?{type:9,value:o.value.map(s=>s.map(a=>r(i,a)))}:r(i,o)}}case"@":return r=>{let i;switch(r.operand.type){case"address":if(r.operand.spill){let o=this.CellFunction2(r.operand)();if(o.type===9){let s=this.context.address.row??-1,a=this.context.address.column??-1;if(s>=r.operand.row&&s<r.operand.row+o.value[0]?.length&&o.value.length===1){if(!t)return o.value[0][s-r.operand.row];i={...r.operand,row:s,spill:!1}}else if(a>=r.operand.column&&a<r.operand.column+o.value.length&&o.value[0]?.length===1){if(!t)return o.value[a-r.operand.column][0];i={...r.operand,column:a,spill:!1}}else return U()}}break;case"range":{let o=this.context.address.row??-1,s=this.context.address.column??-1;if(o>=r.operand.start.row&&o<=r.operand.end.row&&r.operand.start.column===r.operand.end.column)i={...r.operand.start,row:o,spill:!1};else if(s>=r.operand.start.column&&s<=r.operand.end.column&&r.operand.start.row===r.operand.end.row)i={...r.operand.start,column:s,spill:!1};else return U()}}if(i)return t?{type:5,value:i}:this.CellFunction2(i)();let n=this.CalculateExpression(r.operand);return n.type===9?n.value[0][0]:n};default:return()=>(console.warn("unexpected unary operator:",e.operator),be())}}RecycleArray(e,t,r){if(e[0].length<r){let i=e[0].length;for(let n of e)for(let o=i;o<r;o++)n[o]=n[o%i]}if(e.length<t){let i=e.length;for(let n=i;n<t;n++)e[n]=e[n%i].slice(0)}return e}ElementwiseBinaryExpression(e,t,r){let i=Math.max(t.value.length,r.value.length),n=Math.max(t.value[0].length,r.value[0].length),o=this.RecycleArray(t.value,i,n),s=this.RecycleArray(r.value,i,n),a=[];for(let c=0;c<i;c++){let d=[];for(let u=0;u<n;u++)d[u]=e(o[c][u]||{type:0},s[c][u]||{type:0});a.push(d)}return{type:9,value:a}}AsReference(e){switch(e.type){case"address":return e;case"range":if(e.start.row===e.end.row&&e.start.column===e.end.column)return e.start;break;default:{let t=this.CalculateExpression(e,!0);if(sn(t)){if(t.value.type==="address")return t.value;if(t.value.type==="range"&&t.value.start.row===t.value.end.row&&t.value.start.column===t.value.end.column)return t.value.start}}break}}BinaryExpression(e){let t=e.operator==="&"?(r,i)=>{if(r.type===7)return r;if(i.type===7)return i;let n=[r,i].map(o=>o.type===0?"":o.type===4?o.value?this.data_model.language_model?.boolean_true||"TRUE":this.data_model.language_model?.boolean_false||"FALSE":o.value);return{type:2,value:`${n[0]}${n[1]}`}}:$o(e.operator);return t?r=>{let i=this.CalculateExpression(r.left),n=this.CalculateExpression(r.right);return i.type===9?n.type===9?this.ElementwiseBinaryExpression(t,i,n):this.ElementwiseBinaryExpression(t,i,{type:9,value:[[n]]}):n.type===9?this.ElementwiseBinaryExpression(t,{type:9,value:[[i]]},n):t(i,n)}:e.operator===":"?r=>{let i=this.AsReference(r.left),n=this.AsReference(r.right);return i&&n?this.CellFunction4(i,n):be()}:()=>(console.info(`(unexpected binary operator: ${e.operator})`),be())}Identifier(e){let t=e.name;if(t[0]==="#")return()=>J();let r=t.toUpperCase();switch(r){case"FALSE":return()=>({value:!1,type:4});case"TRUE":return()=>({value:!0,type:4});case"UNDEFINED":return()=>({value:void 0,type:0})}return()=>{let i=this.LookupBinding(r);if(i)return this.CalculateExpression(i);let n=this.data_model.GetName(r,this.context.address.sheet_id||0);switch(n?.type){case"range":return n.area.count===1?this.CellFunction4(n.area.start,n.area.start):this.CellFunction4(n.area.start,n.area.end);case"expression":return this.CalculateExpression(n.expression)}return Qi()}}LookupBinding(e){e=e.toUpperCase();for(let t of this.context.bindings){let r=t[e];if(r)return r}}GroupExpression(e){return!e.elements||e.elements.length!==1?(console.warn("Can't handle group !== 1"),()=>be()):t=>this.CalculateExpression(t.elements[0])}CalculateExpression(e,t=!1){if(e.fn)return e.fn(e);switch(e.type){case"implicit-call":return(e.fn=this.ImplicitCall())(e);case"call":{let r=this.data_model.macro_functions.get(e.name.toUpperCase());return r?(e.fn=this.CallMacro(e,r))(e):(e.fn=this.CallExpression(e,t))(e)}case"address":return(e.fn=this.CellFunction2(e))();case"range":return(e.fn=r=>this.CellFunction4(r.start,r.end))(e);case"binary":return(e.fn=this.BinaryExpression(e))(e);case"unary":return(e.fn=this.UnaryExpression(e,t))(e);case"identifier":return(e.fn=this.Identifier(e))();case"missing":return(e.fn=()=>({value:void 0,type:0}))();case"dimensioned":return(e.fn=this.ResolveDimensionedQuantity())(e);case"literal":{let r={value:e.value,type:ve(e.value)};return(e.fn=()=>r)()}case"group":return(e.fn=this.GroupExpression(e))(e);case"complex":{let r={value:{real:e.real,imaginary:e.imaginary},type:8};return(e.fn=()=>r)()}case"structured-reference":return(e.fn=this.ResolveStructuredReference(e))();case"array":return(e.fn=()=>({type:9,value:e.values.map(r=>(Array.isArray(r)?r:[r]).map(i=>({type:ve(i),value:i})))}))();default:return console.warn("Unhandled parse expr:",e),Mr()}}};var Qb=1e3*60*60*24;var Nr=l=>{let e=[],t=l.length,r=l[0].length;for(let i=0;i<r;i++){e[i]=[];for(let n=0;n<t;n++)e[i][n]=l[n][i]}return e},an=l=>{if(!l)return[];if(typeof l[0]>"u")return[];let e=[],t=l.length,r=l[0].length;for(let i=0;i<r;i++){e[i]=[];for(let n=0;n<t;n++)e[i][n]=l[n][i]}return e};var ae=l=>{let e=[];for(let t of l)if(t?.type===9)for(let r of t.value)e=e.concat(ae(r));else e.push(t);return e},K=(l,e=!1)=>Array.isArray(l)?l.reduce((t,r)=>typeof r>"u"&&!e?t:Array.isArray(r)?t.concat(K(r,e)):r instanceof Float32Array||r instanceof Float64Array?t.concat(Array.from(r)):t.concat([r]),[]):[l],ie=l=>K(l).filter(e=>typeof e=="number"),ln=(l,e=!1)=>e?l.map((t=>{switch(typeof t){case"number":case"undefined":case"string":case"boolean":return t}})):l.filter(t=>{switch(typeof t){case"number":case"undefined":case"string":case"boolean":return!0}return!1}),Ul=l=>!!l&&typeof l=="object"&&l.type===9,Jo=(l,e)=>(...t)=>{let r=[],i=[];for(let[n,o]of t.entries())if(o&&l[n]){let s=Array.isArray(o)?o:Ul(o)?o.value:void 0;s&&(r[n]=s,i.length||(i=s))}return r.length?{type:9,value:i.map((n,o)=>n.map((s,a)=>{let c=t.map((d,u)=>r[u]?r[u][o][a]??{type:0}:d);return e(...c)}))}:e(...t)},qt=l=>{let e=[],t=l.length,r="[\\^$.|?*+()";for(let i=0;i<t;i++){let n=l[i];switch(n){case"*":e.push(".","*");break;case"?":e.push(".");break;case"~":n=l[++i]||"";default:for(let o=0;o<r.length;o++)if(n===r[o]){e.push("\\");break}e.push(n);break}}return e.join("")},Wo=l=>({type:2,value:l});var Or=class{functions={};Register(...e){for(let t of e)for(let r of Object.keys(t)){if(/[^a-zA-Z0-9._]/.test(r))throw new Error("invalid function name (invalid character)");if(r.length>255)throw new Error("invalid function name (too long, > 255)");if(/^[^a-zA-Z]/.test(r))throw new Error("invalid function name (start with an ascii letter)");let i=r.toLowerCase();if(this.functions[i])throw new Error(`function name (${i}) is already in use`);let n=t[r];if(n.canonical_name=r,!n.unrolled){let o=n.arguments?.map(s=>!!s.unroll);o?.some(s=>!!s)&&(n.fn=Jo(o,n.fn),n.unrolled=!0)}this.functions[i]=n}}Get(e){let t=e.toLowerCase();return this.functions[t]}List(e=!0){let t={};for(let r of Object.keys(this.functions))e&&this.functions[r].visibility==="internal"||(t[r]=this.functions[r]);return t}Alias(e,t){let r=this.Get(t);if(!r)throw new Error(`referenced function ${t} does not exist`);this.Register({[e]:{...r}})}};var Kt=class{static default_color="#888";static UnpackValues(e){if(Array.isArray(e)){let t=e[0];return Array.isArray(t)||t instanceof Float64Array||t instanceof Float32Array?e.reduce((r,i)=>r.concat(this.UnpackValues(i)),[]):e.map(r=>isNaN(r)?void 0:r)}else{if(e instanceof Float32Array||e instanceof Float64Array)return Array.prototype.slice.call(e);if(e&&typeof e=="object"){let r=Object.keys(e).length;if(typeof e[0]<"u"&&typeof e[(r-1).toString()]<"u"){let i=[];for(let n=0;n<r;n++)i[n]=e[n.toString()];return i}}}return[]}static SparklineCommon(e,t){let r=[],i=B(t.text)?t.text.text:this.default_color,n=[i,i];return Array.isArray(e.calculated)&&(r=this.UnpackValues(e.calculated[0]),typeof e.calculated[1]=="string"&&(n[0]=e.calculated[1]),typeof e.calculated[2]=="string"&&(n[1]=e.calculated[2])),{values:r,colors:n}}static RenderLine(e,t,r,i,n){let{values:o,colors:s}=this.SparklineCommon(i,n),a=.05,c=.1,d=1;Array.isArray(i.calculated)&&typeof i.calculated[2]=="number"&&(d=i.calculated[2]);let u=0,h=0,f=-1;for(let m=0;m<o.length;m++){let p=o[m];typeof p=="number"&&(f>=0?(u=Math.min(u,p),h=Math.max(h,p)):(f=m,u=h=p))}if(u===h&&(u&&(u-=1),h+=1),u!==h){let m=e*(1-2*a)/(o.length-1),p=h-u,b=t*(1-2*c),_=t*c;r.strokeStyle=s[0],r.lineWidth=d,r.lineCap="round",r.lineJoin="round",r.beginPath();let x=0;for(let v=f;v<o.length;v++){let w=o[v];if(typeof w=="number"){let y=e*a+m*v,C=t-(w-u)*b/p-_;x===0?(r.moveTo(y,C),x=1):r.lineTo(y,C)}else x=0}r.stroke()}}static RenderColumn(e,t,r,i,n){let{values:o,colors:s}=this.SparklineCommon(i,n),a=3,c=2.5,d=0,u=0,h=!1;for(let f of o)typeof f=="number"&&(h?(d=Math.min(d,f),u=Math.max(u,f)):(h=!0,d=u=f));if(d===u&&(d&&(d-=1),u+=1),o.length){let f=(e-2*a-2)/(o.length-0),m=t-2*c,p=c;if(d!==u)if(d<0&&u>0){let b=u-d,_=p+u/b*m;for(let x=0;x<o.length;x++){let v=o[x];if(typeof v=="number"){let w=a+x*f,y=Math.abs(v)/b*m;if(v>=0){r.fillStyle=s[0];let C=_-y;r.fillRect(w+2,C,f-2,y)}else{r.fillStyle=s[1];let C=_;r.fillRect(w+2,C,f-2,y)}}}}else if(u>0){r.fillStyle=s[0];let b=u-d;for(let _=0;_<o.length;_++){let x=o[_];if(typeof x=="number"){let v=a+_*f,w=Math.max(1,(x-d)/b*m),y=t-p-w;r.fillRect(v+2,y,f-2,w)}}}else{r.fillStyle=s[1];let b=u-d;for(let _=0;_<o.length;_++){let x=o[_];if(typeof x=="number"){let v=a+_*f,w=Math.max(1,Math.abs(u-x)/b*m),y=p;r.fillRect(v+2,y,f-2,w)}}}}}};var qo=l=>{let{x:e,y:t,width:r,height:i,cell:n}=l,o={},s=3,a=Math.round(16*(l.scale||1));if(n&&r&&i&&e&&t){let c={x:s,y:i-s-a};if(n.style){switch(n.style.vertical_align){case"top":c.y=s;break;case"middle":c.y=Math.round((i-a)/2);break}switch(n.style.horizontal_align){case"right":c.x=Math.round(r-s-a);break;case"center":c.x=Math.round((r-a)/2);break}}e>=c.x&&e<=c.x+a&&t>=c.y&&t<=c.y+a&&(o.value=`=Checkbox(${n.calculated?"FALSE":"TRUE"})`,o.block_selection=!0)}return o},Ko=l=>{let{context:e,width:t,height:r,cell:i}=l,n=l.scale||1;e.lineJoin="round",e.lineCap="round";let o=3*n,s=16*n,a=o,c=r-o-s;if(i.style){switch(i.style.vertical_align){case"top":c=o;break;case"middle":c=(r-s)/2;break}switch(i.style.horizontal_align){case"right":a=t-o-s;break;case"center":a=(t-s)/2;break}}a=Math.floor(a)+.5,c=Math.floor(c)+.5;let d=Math.floor(a+s)+.5,u=Math.floor(c+s)+.5;if(i&&i.calculated){e.lineWidth=.5,e.fillStyle=e.strokeStyle,e.beginPath(),e.moveTo(a,c),e.lineTo(a+16*n,c),e.lineTo(a+16*n,c+16*n),e.lineTo(a,c+16*n),e.closePath(),e.moveTo(a+15*n,c+4*n);for(let h of[[13.59,2.58],[6,10.17],[2.41,6.59],[1,8],[6,13]])e.lineTo(a+h[0]*n,c+h[1]*n);e.closePath(),e.fill()}else e.lineWidth=1,e.lineJoin="round",e.beginPath(),e.moveTo(a,c),e.lineTo(d,c),e.lineTo(d,u),e.lineTo(a,u),e.closePath(),e.stroke();return{handled:!0}};var Xe=l=>{switch(l.type){case 8:return l.value;case 3:return{real:l.value,imaginary:0};case 4:return{real:l.value?1:0,imaginary:0};case 0:return{real:0,imaginary:0}}return!1};var Xo=(l,e,t)=>{let r=new Date;return r.setMilliseconds(0),r.setSeconds(0),r.setMinutes(0),r.setHours(0),l<0||l>1e4||(l<1899&&(l+=1900),r.setFullYear(l),e<1||e>12)||(r.setMonth(e-1),t<1||t>31)?!1:(r.setDate(t),He(r.getTime()))};var Qo=(l,e)=>{let t=new Date(Oe(l)),r=t.getUTCMonth()+e,i=t.getUTCFullYear();for(t.setUTCHours(12),t.setUTCMinutes(0),t.setUTCSeconds(0),t.setUTCMilliseconds(0);r<0;)r+=12,i--;for(;r>11;)r-=12,i++;if(t.setUTCMonth(r),t.setUTCFullYear(i),t.getUTCMonth()!==r){let o=t.getUTCDate();t=new Date(t.getTime()-o*86400*1e3)}return t},Yo=[{name:"Lookup value"},{name:"Table"},{name:"Result index"},{name:"Inexact",default:!0}],Zo=(l,e,t,r=!0,i=!1)=>{if(i&&(e=an(e)),t=Math.max(0,t-1),r){let n=e[t][0];if(typeof l=="number"){let o=Number(e[0][0]);if(isNaN(o)||o>l)return Se();for(let s=1;s<e[0].length&&(o=Number(e[0][s]),!(isNaN(o)||o>l));s++)n=e[t][s]}else{l=(l||"").toString().toLowerCase();let o=(e[0][0]||"").toString().toLowerCase();if(o.localeCompare(l)>0)return Se();for(let s=1;s<e[0].length&&(o=(e[0][s]||"").toString().toLowerCase(),!(o.localeCompare(l)>0));s++)n=e[t][s]}return j(n)}else{for(let n=0;n<e[0].length;n++)if(e[0][n]==l)return j(e[t][n]);return Se()}},Hr=(l,e=!1)=>{if(!l)return e;switch(l.type){case 3:return l.value;case 0:return e}return!1},je=(l,e,t)=>({description:t,arguments:[{name:"number",boxed:!0,unroll:!0}],fn:r=>r.type===3?{type:3,value:l(r.value)}:r.type===8?{type:8,value:e(r.value)}:E()}),es=(l,e,t)=>{if(e===t)return 0;if(e===void 0)return 1;if(t===void 0)return-1;if(typeof e=="number"&&typeof t=="number")return(e-t)*l;if(typeof e=="string"&&typeof t=="string")return e.toLocaleLowerCase().localeCompare(t.toLowerCase())*l;if(typeof e=="boolean"&&typeof t=="boolean")return e?l:-l;if(ye(e)&&ye(t))return 0;let r=[e,t].map(i=>{switch(typeof i){case"number":return 0;case"string":return 2;case"boolean":return 3;default:return ye(i)?1:4}});return(r[0]-r[1])*l},cn={Sqrt:{description:"Returns the square root of the argument",arguments:[{boxed:!0,unroll:!0}],fn:l=>{if(l.type===8){let e=Ce(l.value,{real:.5,imaginary:0});return he(e)}else{if(l.type===0||!l.value)return{type:3,value:0};if(l.type===3&&l.value<0){let e=Ce({real:l.value,imaginary:0},{real:.5,imaginary:0});return{type:8,value:e}}else if(l.type===3){let e=Math.sqrt(l.value);return isNaN(e)?U():{type:3,value:e}}else return U()}}},Power:{description:"Returns base raised to the given power",arguments:[{name:"base",boxed:!0,unroll:!0},{name:"exponent",boxed:!0,unroll:!0}],fn:(l,e)=>{if(l.type===3&&e.type===3&&(l.value>=0||e.value===0||Math.abs(e.value)>=1)){let i=Math.pow(l.value,e.value);return isNaN(i)?U():{type:3,value:i}}let t=Xe(l),r=Xe(e);if(t&&r){let i=Ce(t,r);return he(i)}return U()}}},pt={True:{fn:()=>({type:4,value:!0})},False:{fn:()=>({type:4,value:!1})},Int:{fn:l=>({type:3,value:Math.floor(l)})},Rand:{volatile:!0,fn:()=>({type:3,value:Math.random()})},RandArray:{volatile:!0,arguments:[{name:"rows"},{name:"columns"},{name:"min"},{name:"max"},{name:"integer"}],description:"Returns an array of uniformly-distributed random numbers",fn:(l=1,e=1,t=0,r=1,i=!1)=>{let n=[];if(i){let o=r-t+1;for(let s=0;s<e;s++){let a=[];for(let c=0;c<l;c++)a.push({type:3,value:Math.floor(Math.random()*o+t)});n.push(a)}}else{let o=r-t;for(let s=0;s<e;s++){let a=[];for(let c=0;c<l;c++)a.push({type:3,value:Math.random()*o+t});n.push(a)}}return{type:9,value:n}}},RandBetween:{arguments:[{name:"min"},{name:"max"}],volatile:!0,fn:(l=0,e=1)=>{if(l>e){let t=l;l=e,e=t}return{type:3,value:Math.floor(Math.random()*(e+1-l)+l)}}},Sum:{description:"Adds arguments and ranges",arguments:[{boxed:!0,name:"values or ranges",repeat:!0}],fn:(...l)=>{let e={real:0,imaginary:0},t=ae(l);for(let r of t)switch(r.type){case 3:e.real+=r.value;break;case 4:break;case 8:e.real+=r.value.real,e.imaginary+=r.value.imaginary;break;case 7:return r}return he(e)}},SumSQ:{description:"Returns the sum of the squares of all arguments",arguments:[{boxed:!0,name:"values or ranges",repeat:!0}],fn:(...l)=>{let e={real:0,imaginary:0},t=ae(l);for(let r of t)switch(r.type){case 3:e.real+=r.value*r.value;break;case 4:break;case 8:{let i=se(r.value,r.value);e.real+=i.real,e.imaginary+=i.imaginary}break;case 7:return r}return he(e)}},EDate:{arguments:[{name:"Start date",unroll:!0},{name:"Months",unroll:!0}],fn:(l,e=0)=>{if(typeof l!="number"||typeof e!="number")return E();let t=Qo(l,e);return{type:3,value:He(t.getTime(),!1)}}},EOMonth:{arguments:[{name:"Start date",unroll:!0},{name:"Months",unroll:!0}],fn:(l,e=0)=>{if(typeof l!="number"||typeof e!="number")return E();let t=Qo(l,e);switch(t.getUTCMonth()){case 1:{let i=t.getUTCFullYear();i%4===0&&(i===1900||i%400===0||i%100!==0)?t.setUTCDate(29):t.setUTCDate(28)}break;case 0:case 2:case 4:case 6:case 7:case 9:case 11:t.setUTCDate(31);break;default:t.setUTCDate(30);break}return{type:3,value:He(t.getTime(),!1)}}},Now:{description:"Returns current time",volatile:!0,fn:()=>({type:3,value:He(new Date().getTime())})},YearFrac:{description:"Returns the fraction of a year between two dates",arguments:[{name:"Start"},{name:"End"},{name:"Basis",default:0}],fn:(l,e,t)=>{if(e<l){let n=l;l=e,e=n}let r=Math.max(0,e-l),i=360;if(t&&t<0||t>4)return E();switch(t){case 1:break;case 2:break;case 3:i=365;break}return{type:3,value:r/i}}},Date:{description:"Constructs a date from year/month/day",arguments:[{name:"year",unroll:!0},{name:"month",unroll:!0},{name:"day",unroll:!0}],fn:(l,e,t)=>{let r=Xo(l,e,t);return r===!1?E():{type:3,value:r}}},Today:{description:"Returns current day",volatile:!0,fn:()=>{let l=new Date;return l.setMilliseconds(0),l.setSeconds(0),l.setMinutes(0),l.setHours(12),{type:3,value:He(l.getTime())}}},IfError:{description:"Returns the original value, or the alternate value if the original value contains an error",arguments:[{name:"original value",allow_error:!0,boxed:!0},{name:"alternate value"}],fn:(l,e=0)=>l&&l.type===7?{value:e,type:ve(e)}:l},IsNA:{description:"Checks if another cell contains a #NA error",arguments:[{name:"reference",allow_error:!0,boxed:!0}],fn:(...l)=>{let e=ae(l);for(let t of e)if(t.type===7&&t.value==="N/A")return{type:4,value:!0};return{type:4,value:!1}}},IsErr:{description:"Checks if another cell contains an error",arguments:[{name:"reference",allow_error:!0,boxed:!0}],fn:(...l)=>{let e=ae(l);for(let t of e)if(t.type===7&&t.value!=="N/A")return{type:4,value:!0};return{type:4,value:!1}}},IsError:{description:"Checks if another cell contains an error",arguments:[{name:"reference",allow_error:!0,boxed:!0}],fn:(...l)=>{let e=ae(l);for(let t of e)if(t.type===7)return{type:4,value:!0};return{type:4,value:!1}}},Year:{description:"Returns year from date",arguments:[{name:"date",unroll:!0}],fn:l=>j(new Date(Oe(l)).getUTCFullYear())},Month:{description:"Returns month from date",arguments:[{name:"date",unroll:!0}],fn:l=>j(new Date(Oe(l)).getUTCMonth()+1)},Day:{description:"Returns day of month from date",arguments:[{name:"date",unroll:!0}],fn:l=>j(new Date(Oe(l)).getUTCDate())},Radians:{description:"Converts degrees to radians",arguments:[{name:"Degrees",description:"Angle in degrees",unroll:!0}],fn:l=>j(l*Math.PI/180)},Degrees:{description:"Converts radians to degrees",arguments:[{name:"Radians",description:"Angle in radians",unroll:!0}],fn:l=>j(l/Math.PI*180)},CountA:{description:"Counts cells that are not empty",fn:(...l)=>j(K(l).reduce((e,t)=>typeof t>"u"?e:e+1,0))},Count:{description:"Counts cells that contain numbers",fn:(...l)=>j(K(l).reduce((e,t)=>typeof t=="number"||ye(t)?e+1:e,0))},Or:{fn:(...l)=>{let e=!1;l=K(l);for(let t of l)e=e||!!t;return j(e)}},And:{fn:(...l)=>{let e=!0;l=K(l);for(let t of l)e=e&&!!t;return j(e)}},Not:{arguments:[{unroll:!0,boxed:!0}],fn:l=>{let e=!1;if(l)switch(l.type){case 0:e=!1;break;case 2:case 4:case 3:e=!!l.value;break;case 7:return l}return j(!e)}},If:{arguments:[{name:"test value",boxed:!0},{name:"value if true",boxed:!0,allow_error:!0},{name:"value if false",boxed:!0,allow_error:!0}],fn:(l,e={type:4,value:!0},t={type:4,value:!1})=>{let r=e.type===9,i=t.type===9;return l.type===9?{type:9,value:l.value.map((o,s)=>o.map((a,c)=>(a.type===2?a.value.toLowerCase()!=="false"&&a.value.toLowerCase()!=="f":!!a.value)?r?e.value[s][c]:e:i?t.value[s][c]:t))}:(l.type===2?l.value.toLowerCase()!=="false"&&l.value.toLowerCase()!=="f":!!l.value)?e:t}},Fact:{description:"Returns the factorial of a number",arguments:[{name:"number",unroll:!0}],fn:l=>{l=Math.round(l);let e=1;for(;l>1;)e*=l,l--;return{type:3,value:e}}},Factdouble:{description:"Returns the double factorial of a number",arguments:[{name:"number",unroll:!0}],fn:l=>{l=Math.round(l);let e=1;for(;l>1;)e*=l,l-=2;return{type:3,value:e}}},Power:{description:"Returns base raised to the given power",arguments:[{name:"base",boxed:!0,unroll:!0},{name:"exponent",boxed:!0,unroll:!0}],fn:(l,e)=>{let t=Xe(l),r=Xe(e);if(!t||!r)return U();if(l.type===8||e.type===8)return he(Ce(t,r));{let i=Math.pow(t.real,r.real);return isNaN(i)?U():{type:3,value:i}}}},Mod:{arguments:[{unroll:!0},{unroll:!0}],fn:(l,e)=>e?j(l%e):xe()},Large:{description:"Returns the nth numeric value from the data, in descending order",arguments:[{name:"values"},{name:"index",unroll:!0}],fn:(l,e)=>{if(e<=0)return E();let t=ie(l);return t.sort((r,i)=>i-r),e<=t.length?{type:3,value:t[e-1]}:E()}},Small:{description:"Returns the nth numeric value from the data, in ascending order",arguments:[{name:"values"},{name:"index",unroll:!0}],fn:(l,e)=>{if(e<=0)return E();let t=ie(l);return t.sort((r,i)=>r-i),e<=t.length?{type:3,value:t[e-1]}:E()}},Filter:{description:"Filter an array using a second array.",arguments:[{name:"source",description:"Source array"},{name:"filter",description:"Filter array"}],fn:(l,e)=>{if(typeof l>"u"||typeof e>"u")return E();Array.isArray(l)||(l=[[l]]),Array.isArray(e)||(e=[[e]]);let t=l.length,r=l[0].length,i=e.length,n=e[0].length;if(r===n){let o=[];for(let s=0;s<t;s++)o.push([]);for(let[s,a]of e[0].entries())if(a)for(let c=0;c<t;c++)o[c].push(j(l[c][s]));return{type:9,value:o}}else if(t===i){let o=[];for(let[s,[a]]of e.entries())a&&o.push(l[s].map(c=>j(c)));return{type:9,value:o}}return E()}},SortBy:{arguments:[{name:"array"},{name:"index"},{name:"order",description:"Set to -1 to sort in descending order",default:1}],fn:(l,...e)=>{if(Array.isArray(l)||(l=[[l]]),e.length<1)return E();let t=l[0]?.length||0,r=[],i=[];for(let a=0;a<e.length;a+=2){let c=a/2,d=e[a];if(Array.isArray(d)||(d=[[d]]),(d[0]?.length||0)!==t)return E();let h=1,f=e[a+1];typeof f=="number"&&f<0&&(h=-1),r[c]=h,i[c]=d[0]}let n=l[0]?.map((a,c)=>c);n.sort((a,c)=>{for(let d=0;d<r.length;d++){let u=r[d],h=i[d],f=es(u,h[a],h[c]);if(f)return f}return 0});let o=l.length,s=[];for(let a=0;a<o;a++){let c=[];for(let d of n)c.push(j(l[a][d]));s.push(c)}return{type:9,value:s}}},Sort:{arguments:[{name:"array"},{name:"index"},{name:"order",description:"Set to -1 to sort in descending order",default:1}],fn:(l,e=1,t=1)=>{Array.isArray(l)||(l=[[l]]);let r=l[e-1];if(!r)return E();t<0?t=-1:t=1;let i=r.map((s,a)=>({value:s,index:a}));i.sort((s,a)=>es(t,s.value,a.value));let n=l.length,o=[];for(let s=0;s<n;s++){let a=[];for(let{index:c}of i)a.push(j(l[s][c]));o.push(a)}return{type:9,value:o}}},Transpose:{description:"Returns transpose of input matrix",arguments:[{name:"matrix",boxed:!0}],fn:l=>l.type===9?{type:9,value:Nr(l.value)}:l},Max:{fn:(...l)=>({type:3,value:Math.max.apply(0,ie(l))})},Min:{fn:(...l)=>({type:3,value:Math.min.apply(0,ie(l))})},SumProduct:{description:"Returns the sum of pairwise products of two or more ranges",fn:(...l)=>{let e=l.map(i=>K(i)),t=Math.max.apply(0,e.map(i=>i.length)),r=0;for(let i=0;i<t;i++)r+=e.reduce((n,o)=>{let s=o[i];return s===!0&&(s=1),typeof s=="number"?n*s:0},1);return{type:3,value:r}}},Row:{arguments:[{name:"reference",metadata:!0}],fn:function(l){if(!l)if(this?.area){let e=[];for(let t=this.area.start.column;t<=this.area.end.column;t++){let r=[];for(let i=this.area.start.row;i<=this.area.end.row;i++)r.push({type:3,value:i+1});e.push(r)}return{type:9,value:e}}else return{type:3,value:this?this.address.row+1:-1};if(l.type===9){let e=l.value,t=e[0][0];if(fe(t))return{type:9,value:[e[0].map((r,i)=>({type:3,value:i+t.value.address.row+1}))]}}else if(fe(l))return{type:3,value:l.value.address.row+1};return E()}},Column:{arguments:[{name:"reference",metadata:!0}],fn:function(l){if(!l)if(this?.area){let e=[];for(let t=this.area.start.column;t<=this.area.end.column;t++){let r=[];for(let i=this.area.start.row;i<=this.area.end.row;i++)r.push({type:3,value:t+1});e.push(r)}return{type:9,value:e}}else return{type:3,value:this?this.address.column+1:-1};if(l.type===9){let e=l.value,t=e[0][0];if(fe(t))return{type:9,value:e.map((r,i)=>[{type:3,value:i+t.value.address.column+1}])}}else if(fe(l))return{type:3,value:l.value.address.row+1};return E()}},Choose:{arguments:[{name:"Selected index"},{name:"Choice 1...",metadata:!0}],return_type:"reference",description:"Returns one of a list of choices",fn:(l,...e)=>{if(l<1||l>e.length)return U();let t=e[l-1];if(fe(t))return{type:5,value:t.value.address};if(t.type===9){let r=t.value,i=r.length,n=r[0].length,o=r[0][0],s=r[i-1][n-1];if(i===1&&n===1){if(fe(o))return{type:5,value:o.value.address}}else if(fe(o)&&fe(s))return{type:5,value:{type:"range",position:0,id:0,label:"",start:o.value.address,end:s.value.address}}}return{...t}}},XLOOKUP:{arguments:[{name:"Lookup value"},{name:"Lookup array"},{name:"Return array",metadata:!0},{name:"Not found",boxed:!0},{name:"Match mode",default:0},{name:"Search mode",default:1}],return_type:"reference",xlfn:!0,fn:(l,e,t,r,i=0,n=1)=>{if(!t)return E();let o,s=!1;if(t.type===9){let u=t.value,h=u.length,f=u[0].length,m=u[0][0],p=u[h-1][f-1];fe(m)&&fe(p)?o=new g(m.value.address,p.value.address):s=!0}if(!o&&!s)return console.info("invalid range"),J();if(!Array.isArray(e))return console.info("lookup is not an array"),U();let a=e[0];if(!Array.isArray(a))return console.info("lookup is not a 2d array"),U();if(e.length!==1&&a.length!==1)return console.info("lookup array has invalid dimensions"),U();let c=e.length===1;c&&(e=an(e)),n<0&&e.reverse();let d=u=>{if(s&&t.type===9){let m=t.value.length,p=t.value[0]?.length||0,b=[],_=0,x=p-1,v=0,w=m-1;c?(n<0&&(u=p-1-u),_=x=u):(n<0&&(u=m-1-u),v=w=u);for(let y=v;y<=w;y++){let C=[];for(let S=_;S<=x;S++)C.push(t.value[y][S]);b.push(C)}return{type:9,value:b}}if(!o)throw new Error("invalid range");let h,f;if(c?(n<0&&(u=o.rows-1-u),u>=0&&u<o.rows&&(h={type:"address",position:0,id:1,label:"",row:o.start.row+u,column:o.start.column,sheet_id:o.start.sheet_id},f={type:"address",position:0,id:2,label:"",row:o.start.row+u,column:o.end.column,sheet_id:o.start.sheet_id})):(n<0&&(u=o.columns-1-u),u>=0&&u<o.columns&&(h={type:"address",position:0,id:1,label:"",row:o.start.row,column:o.start.column+u,sheet_id:o.start.sheet_id},f={type:"address",position:0,id:2,label:"",row:o.end.row,column:o.start.column+u,sheet_id:o.start.sheet_id})),h&&f){let m={type:"range",position:0,id:0,label:"",start:h,end:f};return{type:5,value:m}}return{type:0}};if(i===2&&typeof l!="string"&&(i=0),(i===1||i===-1)&&typeof l=="number"){let u=0,h=-1;for(let f=0;f<e.length;f++){let m=e[f][0];if(typeof m=="number"){if(m===l)return d(f);let p=Math.abs(m-l);(i===1&&m>l||i===-1&&m<l)&&(h<0||p<u)&&(u=p,h=f)}}if(h>=0)return d(h)}switch(i){case 2:{let u=qt(l?.toString()||""),h=new RegExp("^"+u+"$","i");for(let f=0;f<e.length;f++){let m=e[f][0];if(typeof m=="string"&&h.exec(m))return d(f)}}break;case 0:typeof l=="string"&&(l=l.toLowerCase());for(let u=0;u<e.length;u++){let h=e[u][0];if(typeof h=="string"&&(h=h.toLowerCase()),h===l)return d(u)}break}return r&&r.type!==0?r:Se()}},HLookup:{arguments:[...Yo],fn:(l,e,t,r=!0)=>Zo(l,e,t,r,!0)},VLookup:{arguments:[...Yo],fn:(l,e,t,r=!0)=>Zo(l,e,t,r,!1)},Product:{arguments:[{boxed:!0}],fn:(...l)=>{let e={real:1,imaginary:0};l=ae(l);for(let t of l)t.type===8?e=se(e,t.value):t.type===3&&(e.real*=t.value,e.imaginary*=t.value);return he(e)}},Log:{arguments:[{name:"number",unroll:!0},{name:"base",unroll:!0}],fn:(l,e=10)=>({type:3,value:Math.log(l)/Math.log(e)})},Log10:{arguments:[{name:"number",unroll:!0}],fn:l=>({type:3,value:Math.log(l)/Math.log(10)})},Ln:{arguments:[{name:"number",unroll:!0}],fn:l=>({type:3,value:Math.log(l)})},"Ceiling.Math":{arguments:[{name:"number",unroll:!0},{name:"significance",unroll:!0},{name:"away from zero",unroll:!0}],fn:(l,e=1,t)=>{let r=0;return t&&l<0?r=-Math.ceil(-l/e)*e:r=Math.ceil(l/e)*e,{type:3,value:r}}},"Floor.Math":{arguments:[{name:"number",unroll:!0},{name:"significance",unroll:!0},{name:"away from zero",unroll:!0}],fn:(l,e=1,t)=>{let r=0;return t&&l<0?r=-Math.floor(-l/e)*e:r=Math.floor(l/e)*e,{type:3,value:r}}},Floor:{arguments:[{name:"number",unroll:!0},{name:"significance",unroll:!0}],fn:(l,e=1)=>({type:3,value:Math.floor(l/e)*e})},Ceiling:{arguments:[{name:"number",unroll:!0},{name:"significance",unroll:!0}],fn:(l,e=1)=>({type:3,value:Math.ceil(l/e)*e})},Round:{arguments:[{unroll:!0},{unroll:!0}],fn:(l,e=0)=>{let t=Math.pow(10,e);return{type:3,value:Math.round(t*l)/t}}},RoundDown:{arguments:[{unroll:!0},{unroll:!0}],fn:(l,e=0)=>{let t=Math.pow(10,e),r=l>=0;return{type:3,value:r?Math.floor(t*l)/t:Math.ceil(t*l)/t}}},RoundUp:{arguments:[{unroll:!0},{unroll:!0}],fn:(l,e=0)=>{let t=Math.pow(10,e),r=l>=0;return{type:3,value:r?Math.ceil(t*l)/t:Math.floor(t*l)/t}}},Reverse:{arguments:[{boxed:!0}],fn:l=>l.type===9?(l.value.length===1?l.value[0].reverse():l.value.reverse(),l):{type:2,value:(l.value??"").toString().split("").reverse().join("")}},Exp:{arguments:[{boxed:!0,unroll:!0}],fn:l=>{if(l.type===8){let e=Wt(l.value);return he(e)}return l.type!==3?U():{type:3,value:Math.exp(l.value)}}},Abs:{arguments:[{boxed:!0,unroll:!0}],fn:l=>l.type===8?{type:3,value:Math.sqrt(l.value.real*l.value.real+l.value.imaginary*l.value.imaginary)}:l.type!==3?U():{type:3,value:Math.abs(l.value||0)}},Simplify:{arguments:[{name:"value",unroll:!0},{name:"significant digits",unroll:!0}],fn:(l,e=2)=>{if(e=e||2,l===0)return{type:3,value:l};let t=l<0?-1:1;l*=t;let r=Math.pow(10,Math.floor(Math.log10(l))+1-e);return{type:3,value:Math.round(l/r)*r*t}}},Sqrt:{description:"Returns the square root of the argument",arguments:[{boxed:!0,unroll:!0}],fn:l=>{if(l.type===8){let e=Ce(l.value,{real:.5,imaginary:0});return he(e)}else{if(l.type===0||!l.value)return{type:3,value:0};if(l.type===3)return{type:3,value:Math.sqrt(l.value)}}return U()}},HexToDec:{arguments:[{description:"hexadecimal string",unroll:!0}],fn:l=>({type:3,value:parseInt(l,16)})},DecToHex:{arguments:[{description:"number",unroll:!0}],fn:l=>({type:2,value:l.toString(16)})},Checkbox:{arguments:[{name:"checked"}],click:qo,render:Ko,fn:l=>({value:!!l,type:4})},"Sparkline.Column":{arguments:[{name:"data"},{name:"color"},{name:"negative color"}],render:l=>(Kt.RenderColumn(l.width,l.height,l.context,l.cell,l.style),{handled:!0}),fn:(...l)=>({type:5,value:l,key:"sparkline-data"})},"Sparkline.Line":{arguments:[{name:"data"},{name:"color"},{name:"line width"}],render:l=>(Kt.RenderLine(l.width,l.height,l.context,l.cell,l.style),{handled:!0}),fn:(...l)=>({type:5,value:l,key:"sparkline-data"})},UniqueValues:{arguments:[{name:"range",boxed:!0}],visibility:"internal",fn:l=>{if(l.type===9){let e=n=>{if(n)switch(n.type){case 2:case 3:case 4:return n.value;case 0:return"";default:return console.info("check",n,n.value),n.value?.toString()||""}else return""},t=new Set,r=new Set;for(let n of l.value)for(let o of n){let s=e(o);t.has(s)?r.add(s):t.add(s)}let i=[];for(let n of l.value){let o=[];for(let s of n){let a=e(s);o.push({type:4,value:!r.has(a)})}i.push(o)}return{type:9,value:i}}return{type:4,value:!0}}},Between:{arguments:[{name:"target",boxed:!0,unroll:!0},{name:"min"},{name:"max"}],visibility:"internal",fn:(l,e=0,t=1)=>({type:4,value:l.type===3&&l.value>=e&&l.value<=t})},Gradient:{arguments:[{name:"range",boxed:!0},{name:"min"},{name:"max"},{name:"parameters"}],visibility:"internal",fn:(l,e,t,r)=>{let i=ae([l]),n=0,o=0,s=0;for(let u of i){if(u.type===7)return u;u.type===3&&(n===0&&!r?(o=u.value,s=u.value):(o=Math.min(o,u.value),s=Math.max(s,u.value)),n++)}typeof t=="number"&&(s=t),typeof e=="number"&&(o=e);let a=s-o,c=1,d=1;if(l.type===9){c=l.value.length,d=l.value[0]?.length||0;let u=[];for(let h=0;h<c;h++){let f=[];for(let m=0;m<d;m++){let p=l.value[h][m];if(p.type===3){let b=0;s===o?p.value>s?b=1:p.value<s?b=0:b=.5:a>0&&(b=(p.value-o)/a),r?f.push({type:9,value:[[{type:3,value:b},{type:3,value:(0-o)/a}]]}):f.push({type:3,value:b})}else f.push({type:0})}u.push(f)}return{type:9,value:u}}else return E()}},ATan2:{arguments:[{name:"y",boxed:!0,unroll:!0},{name:"x",boxed:!0,unroll:!0}],fn:(l,e)=>{if(l.type===3&&e.type===3)return{type:3,value:Math.atan2(l.value,e.value)};if(l.type===3&&(l={type:8,value:{real:l.value,imaginary:0}}),e.type===3&&(e={type:8,value:{real:e.value,imaginary:0}}),l.type===8&&e.type===8){let t=Fo(l.value,e.value);return t===!1?E():{type:8,value:t}}return E()}},Sin:je(Math.sin,Ir),SinH:je(Math.sinh,Io),ASin:je(Math.asin,Zi),Cos:je(Math.cos,Lo),CosH:je(Math.cosh,Do),ACos:je(Math.acos,zo),Tan:je(Math.tan,Uo),TanH:je(Math.tanh,Mo),ATan:je(Math.atan,Vo),E:{fn:()=>({type:3,value:Math.E})},PI:{fn:()=>({type:3,value:Math.PI})},SQRT2:{fn:()=>({type:3,value:Math.SQRT2})},SQRT1_2:{fn:()=>({type:3,value:Math.SQRT1_2})},Sequence:{arguments:[{name:"rows",boxed:!0},{name:"columns",default:1,boxed:!0},{name:"start",default:1,boxed:!0},{name:"step",default:1,boxed:!0}],fn:(l,e,t,r)=>{let i=Hr(l,1),n=Hr(e,1),o=Hr(r,1),s=Hr(t,1);if(i===!1||n===!1||o===!1||s===!1)return E();let a=[];for(let c=0;c<n;c++){let d=[];for(let u=0;u<i;u++)d.push({type:3,value:s+u*o*n+c*o});a.push(d)}return{type:9,value:a}}}},ts={};for(let l of Object.keys(pt))ts[l.toLowerCase()]=l;var Dl=["ceil","pow","ln10","ln2","log10","log10e","log1p","log2","log2e","random","imul","clz32","fround","f16round"],rs={};for(let l of Dl)rs[l.toLowerCase()]=l;for(let l of Object.getOwnPropertyNames(Math)){let e=l.toLowerCase();if(ts[e]||rs[e])continue;let t=Object.getOwnPropertyDescriptor(Math,l);if(!t)continue;let r=t.value,i=typeof r;switch(i){case"number":pt[l]={fn:()=>({type:3,value:r}),category:["Math Functions"]};break;case"function":pt[l]={fn:(...n)=>j(r(...n)),category:["Math Functions"]};break;default:console.info("unexpected type:",i,l);break}}Math.log10||(Math.log10=l=>Math.log(l)/Math.log(10));var Xt=(l,e,t=0,r=0,i=0)=>i?-(t*(l/(1-Math.pow(1+l,-e))))/(1+l)-r*(1/((1+l)*((Math.pow(1+l,e)-1)/l))):-(t*l*Math.pow(1+l,e)+r*l)/(Math.pow(1+l,e)-1),ns=(l,e,t,r=0,i=0)=>i?(1+l)*-t/l*(Math.pow(1+l,e)-1)-r*Math.pow(1+l,e):-t/l*(Math.pow(1+l,e)-1)-r*Math.pow(1+l,e),dn=(l,e,t,r=0,i=0,n=0)=>{if(e<1)return NaN;if(e===1&&n)return 0;let o=Xt(l,t,r,i,n),s=ns(l,e-1,o,r,n)*l;return n?s/(1+l):s},is=(l,e,t,r=0,i=0,n=0)=>Xt(l,t,r,i,n)-dn(l,e,t,r,i,n),os={NPV:{description:"Returns the present value of a series of future cashflows",arguments:[{name:"Rate"},{name:"Cashflow"}],fn:(l=0,...e)=>{let t=0,r=K(e);for(let i=0;i<r.length;i++){let n=r[i];typeof n=="number"&&(t+=Math.pow(1+l,-(i+1))*n)}return{type:3,value:t}}},XNPV:{description:"returns the NPV of a nonperiodic stream of payments at a given rate",arguments:[{name:"Discount rate"},{name:"Values"},{name:"Dates"}],fn:(l,e,t)=>{if(typeof l!="number")return E();if(e=K(e),t=K(t),e.length!==t.length)return E();let r=[];for(let o of e){if(typeof o!="number")return E();r.push(o)}let i=[];for(let o of t){if(typeof o!="number")return E();i.push(Math.floor(o))}let n=0;for(let o=0;o<r.length;o++)n+=(r[o]||0)/Math.pow(1+l,(i[o]-i[0])/365);return{type:3,value:n}}},XIRR:{description:"returns the internal rate of return of a nonperiodic stream of payments",arguments:[{name:"Values"},{name:"Dates"},{name:"Guess",default:.1}],fn:(l,e,t=.1)=>{if(l=K(l),e=K(e),l.length!==e.length)return E();let r=0,i=0,n=[];for(let u of l){if(typeof u!="number")return E();u>0&&r++,u<0&&i++,n.push(u)}if(r<=0||i<=0)return E();let o=[];for(let u of e){if(typeof u!="number")return E();o.push(Math.floor(u))}let s=o[0];for(let u of o)if(u<s)return E();let a=.1,c=[{found:!1,value:0},{found:!1,value:0}],d=n.length;for(let u=0;u<100;u++){let h=0;for(let f=0;f<d;f++)h+=(n[f]||0)/Math.pow(1+t,(o[f]-o[0])/365);if(Math.abs(h)<=1e-6)return{type:3,value:t};if(h>0){if(c[0].value=c[0].found?Math.max(c[0].value,t):t,c[0].found=!0,!c[1].found){t+=a;continue}}else if(c[1].value=c[1].found?Math.min(c[1].value,t):t,c[1].found=!0,!c[0].found){t-=a;continue}t=c[0].value+(c[1].value-c[0].value)/2}return U()}},IRR:{description:"Calculates the internal rate of return of a series of cashflows",arguments:[{name:"Cashflows"},{name:"Guess",default:.1}],fn:(l,e=.1)=>{let t=K(l).map(n=>typeof n=="number"?n:0),r=.1,i=[{found:!1,value:0},{found:!1,value:0}];for(let n=0;n<50;n++){let o=0;for(let s=0;s<t.length;s++)o+=Math.pow(1+e,-(s+1))*t[s];if(Math.abs(o)<=.00125)return{type:3,value:e};if(o>0){if(i[0].value=i[0].found?Math.max(i[0].value,e):e,i[0].found=!0,!i[1].found){e+=r;continue}}else if(i[1].value=i[1].found?Math.min(i[1].value,e):e,i[1].found=!0,!i[0].found){e-=r;continue}e=i[0].value+(i[1].value-i[0].value)/2}return{type:7,value:"NUM"}}},CUMPRINC:{description:"Returns cumulative principal paid on a loan between two periods",arguments:[{name:"Rate"},{name:"Periods"},{name:"Present Value"},{name:"Start Period"},{name:"End Period"},{name:"Type",default:0}],fn:(l,e,t,r,i,n=0)=>{let o=0;for(let s=r;s<=i;s++)o+=is(l,s,e,t,0,n);return{type:3,value:o}}},CUMIPMT:{description:"Returns cumulative interest paid on a loan between two periods",arguments:[{name:"Rate"},{name:"Periods"},{name:"Present Value"},{name:"Start Period"},{name:"End Period"},{name:"Type",default:0}],fn:(l,e,t,r,i,n=0)=>{let o=0;for(let s=r;s<=i;s++)o+=dn(l,s,e,t,0,n);return{type:3,value:o}}},IPMT:{description:"Returns the interest portion of a payment",arguments:[{name:"Rate"},{name:"Period"},{name:"Periods"},{name:"Present Value",default:0},{name:"Future Value",default:0},{name:"Type",default:0}],fn:(l,e,t,r=0,i=0,n=0)=>({type:3,value:dn(l,e,t,r,i,n)})},PPMT:{description:"Returns the principal portion of a payment",arguments:[{name:"Rate"},{name:"Period"},{name:"Periods"},{name:"Present Value",default:0},{name:"Future Value",default:0},{name:"Type",default:0}],fn:(l,e,t,r=0,i=0,n=0)=>({type:3,value:is(l,e,t,r,i,n)})},Rate:{description:"Returns the interest rate of a loan",arguments:[{name:"Periods"},{name:"Payment"},{name:"Present Value",default:0},{name:"Future Value",default:0},{name:"Type",default:0}],fn:(l,e,t=0,r=0,i=0)=>{let n=.25,o=[-1,1],s=32,a=1e-6;for(let c=0;c<s;c++){let d=Xt(n,l,t,r,i);if(Math.abs(d-e)<=a)return{type:3,value:n};let u=Xt(o[1],l,t,r,i);e>=d&&e<=u||e>=u&&e<=d?o[0]=n:o[1]=n,n=o[0]+(o[1]-o[0])/2}return{type:3,value:n}}},FV:{description:"Returns the future value of an investment",arguments:[{name:"Rate"},{name:"Periods"},{name:"Payment"},{name:"Present Value",default:0},{name:"Type",default:0}],fn:(l,e,t,r=0,i=0)=>({type:3,value:ns(l,e,t,r,i)})},PV:{description:"Returns the present value of an investment",arguments:[{name:"Rate"},{name:"Periods"},{name:"Payment"},{name:"Future Value",default:0},{name:"Type",default:0}],fn:(l,e,t,r=0,i=0)=>i?(t+=r*(1/((1+l)*((Math.pow(1+l,e)-1)/l))),{type:3,value:-(t+t/l*(1-Math.pow(1+l,-(e-1))))}):{type:3,value:-(r+t/l*(Math.pow(1+l,e)-1))/Math.pow(1+l,e)}},NPER:{description:"Returns the number of periods of an investment",arguments:[{name:"Rate"},{name:"Payment"},{name:"Present Value"},{name:"Future Value",default:0},{name:"Type",default:0}],fn:(l,e,t=0,r=0,i=0)=>i?{type:3,value:1+(-Math.log(1+l*(1-t/-e))+Math.log(1+r*l/(-e*(1+l))))/Math.log(1+l)}:{type:3,value:(Math.log(Math.pow(1-t*l/-e,-1))+Math.log(1+r*l/-e))/Math.log(1+l)}},PMT:{description:"Returns the periodic payment of a loan",arguments:[{name:"Rate"},{name:"Periods"},{name:"Present Value"},{name:"Future Value",default:0},{name:"Type",default:0}],fn:(l,e,t,r=0,i=0)=>({type:3,value:Xt(l,e,t,r,i)})}};var ss={Char:{arguments:[{name:"number"}],fn:l=>({type:2,value:String.fromCodePoint(l||32)}),category:["text"]},Code:{arguments:[{name:"string"}],fn:l=>({type:3,value:l.codePointAt(0)||0}),category:["text"]},Value:{arguments:[{name:"text"}],fn:l=>{let e=pe.TryParse(l);return e.type===3?{type:3,value:e.value}:E()},category:["text"]},Text:{arguments:[{name:"value"},{name:"number format"}],fn:(l,e="0.00####")=>({type:2,value:F.Get(e).Format(l||0)}),category:["text"]},WildcardMatch:{visibility:"internal",arguments:[{name:"text",unroll:!0},{name:"text",unroll:!0},{name:"invert"}],fn:(l,e,t=!1)=>{if(typeof l=="string"&&typeof e=="string"){let r=qt(e),i=new RegExp("^"+r+"$","i").exec(l);return{type:4,value:t?!i:!!i}}return{type:4,value:l===e||l?.toString()===e?.toString()}}},Exact:{arguments:[{name:"text",boxed:!0,unroll:!0},{name:"text",boxed:!0,unroll:!0}],category:["text"],fn:(l,e)=>({type:4,value:l?.value?.toString()===e?.value?.toString()})},Len:{arguments:[{name:"string",unroll:!0}],fn:l=>({type:3,value:l.toString().length})},Substitute:{arguments:[{name:"text"},{name:"search"},{name:"replacement"},{name:"index"}],fn:(l,e,t,r)=>{if(typeof r=="number"){if(r<1)return U();let i=1;return{type:2,value:l.replaceAll(e,(...n)=>(console.info(n),i++===r?t:e))}}else return{type:2,value:l.replaceAll(e,t)}}},Left:{arguments:[{name:"string"},{name:"count"}],fn:(l,e=1)=>({type:2,value:l.substr(0,e)}),category:["text"]},Right:{arguments:[{name:"string"},{name:"count"}],fn:(l,e=1)=>({type:2,value:l.slice(-e)}),category:["text"]},Mid:{arguments:[{name:"string"},{name:"left"},{name:"count"}],fn:(l,e=0,t=1)=>({type:2,value:l.substr(Math.max(0,e-1),t)}),category:["text"]},Search:{description:"Find a string (needle) in another string (haystack). Case-insensitive.",arguments:[{name:"Needle"},{name:"Haystack"},{name:"Start",default:1}],fn:(l,e,t=1)=>{if(t>=1){if(!l)return{type:3,value:t};let r=qt(l),i=new RegExp(r,"i").exec(e.substr(t-1));if(i)return{type:3,value:i.index+t}}return U()}},Find:{description:"Find a string (needle) in another string (haystack). Case-sensitive.",arguments:[{name:"Needle"},{name:"Haystack"},{name:"Start",default:1}],fn:(l,e,t=1)=>{if(t>=1){if(!l)return{type:3,value:t};l=l.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");let r=new RegExp(l).exec(e.substr(t-1));if(r)return{type:3,value:r.index+t}}return U()}},Upper:{description:"Converts text to upper case",arguments:[{name:"text",unroll:!0}],fn:l=>l==null?{type:0}:{type:2,value:l.toString().toUpperCase()}},Lower:{description:"Converts text to lower case",arguments:[{name:"text",unroll:!0}],fn:l=>l==null?{type:0}:{type:2,value:l.toString().toLowerCase()}},Concat:{description:"Pastes strings together",fn:(...l)=>{let t=K(l).map(r=>{let i=r?.toString()||"";return typeof r=="number"&&V.decimal_separator===","?i.replace(/\./,","):i}).join("");return{type:2,value:t}}}},un={Concatenate:"Concat"};var Gr=(l,e)=>({type:4,value:typeof e.value?.value===l}),Br=[{name:"Reference",metadata:!0,unroll:!0}],as={IsBlank:{description:"Returns true if the reference is blank",arguments:Br,fn:Gr.bind(0,"undefined")},IsNumber:{description:"Returns true if the reference is a number",arguments:Br,fn:Gr.bind(0,"number")},IsLogical:{description:"Returns true if the reference is a logical TRUE or FALSE",arguments:Br,fn:Gr.bind(0,"boolean")},IsText:{description:"Returns true if the reference is text",arguments:Br,fn:Gr.bind(0,"string")}};var ls=2220446049250313e-31,Ll=l=>{let e=1+l;return Math.log(e)-(e-1-l)/e},$r=(l,e,t,r)=>{let i=2*Number.MIN_VALUE,n=0,o=1,s=1-(l+e)*t/(l+1);Math.abs(s)<i&&(s=Number.NaN),s=1/s,n=s;for(let a=1;a<=512;a++){let c=a*(e-a)*t/((l-1+2*a)*(l+2*a)),d=0;if(s=1+c*s,o=1+c/o,Math.abs(s)<i&&(s=Number.NaN),Math.abs(o)<i&&(o=Number.NaN),s=1/s,d=s*o,n*=d,c=-(l+a)*(l+e+a)*t/((l+2*a)*(l+2*a+1)),s=1+c*s,o=1+c/o,Math.abs(s)<i&&(s=Number.NaN),Math.abs(o)<i&&(o=Number.NaN),s=1/s,d=s*o,n*=d,Math.abs(d-1)<2*ls||n*Math.abs(d-1)<r)return n}return Number.NaN},hn=(l,e,t)=>{if(e<0||t<0)return Number.NaN;if(l<=0)return 0;if(l>=1)return 1;if(l>.5)return 1-hn(1-l,t,e);let r=e/(e+t),i=0;if(l<.1){let n=(Math.log(e)+le(e)+le(t)-le(e+t)+Math.log(l))/e;n<=0?(i=Math.exp(n),i*=Math.pow(1-i,-(t-1)/e)):i=r,i>r&&(i=r)}else i=r;for(let n=0;n<64;n++){let o=l-mn(i,e,t),s=fn(i,e,t);if(o===0)return i;let a=o/Math.max(2*Math.abs(o/i),s),c=a,d=-((e-1)/i-(t-1)/(1-i))*a*a/2,u=c;if(Math.abs(d)<Math.abs(c)?u+=d:u*=2*Math.abs(c/d),i+u>0&&i+u<1?i+=u:i=Math.sqrt(i)*Math.sqrt(r),Math.abs(c)<=1e-10*i)return i}return i},le=l=>{let e=l-1,t=e+5.5;t-=(e+.5)*Math.log(t);let r=1,i=[76.18009173,-86.50532033,24.01409822,-1.231739516,.00120858003,-536382e-11];for(let n of i)r+=n/++e;return-t+Math.log(2.50662827465*r)},fn=(l,e,t)=>l<0||l>1?0:Math.exp(le(e+t)-le(e)-le(t))*Math.pow(l,e-1)*Math.pow(1-l,t-1),mn=(l,e,t)=>{if(l<=0)return 0;if(l>=1)return 1;let i=-(le(e)+le(t)-le(e+t))+e*Math.log(l)+t*Ll(-l),n=Math.exp(i);if(l<(e+1)/(e+t+2)){let o=$r(e,t,l,0);return n*o/e}else{let o=Math.abs(t/n)*ls,s=$r(t,e,1-l,o);return 1-n*s/t}},cs=(l,e,t)=>{if(l<0||l>1)return 0;let r=l===0||l===1?0:Math.exp(le(e+t)-le(e)-le(t)+e*Math.log(l)+t*Math.log(1-l));return l<(e+1)/(e+t+2)?r*$r(e,t,l,0)/e:1-r*$r(t,e,1-l,0)/t};var ds=l=>{let e=l-1,t=e+5.5;t-=(e+.5)*Math.log(t);let r=1,i=[76.18009173,-86.50532033,24.01409822,-1.231739516,.00120858003,-536382e-11];for(let n of i)r+=n/++e;return-t+Math.log(2.50662827465*r)},Il=(l,e)=>{let t=ds(l);if(e===0)return 0;let r=l,i=1/l,n=i;for(let o=1;o<1e3;o++)if(++r,n*=e/r,i+=n,Math.abs(n)<Math.abs(i)*3e-9)return i*Math.exp(-e+l*Math.log(e)-t);return console.error("too many iterations"),!1},zl=(l,e)=>{let t=ds(l),r=e+1-l,i=1/1e-30,n=1/r,o=n;for(let s=1;s<=1e3;s++){let a=-s*(s-l);r+=2,n=a*n+r,Math.abs(n)<1e-30&&(n=1e-30),i=r+a/i,Math.abs(i)<1e-30&&(i=1e-30),n=1/n;let c=n*i;if(o*=c,Math.abs(c-1)<3e-9)return Math.exp(-e+l*Math.log(e)-t)*o}return console.error("too many iterations"),!1},jr=(l,e)=>{if(e<0||l<=0)return console.error("invalid parameter"),!1;if(e<l+1)return Il(l,e);{let t=zl(l,e);return t===!1?!1:1-t}};var Qt=l=>{if(l===.5)return 0;let e=l<1&&l>.5?1-l:l,t=Math.sqrt(Math.log(1/Math.pow(e,2))),r=t-(2.515517+.802853*t+.010328*Math.pow(t,2))/(1+1.432788*t+.189269*Math.pow(t,2)+.001308*Math.pow(t,3));return l>.5?r:-r};var pn=(l,e)=>{let t=e/(e+l*l),r=e/2,n=cs(t,r,.5);return l>=0?1-.5*n:.5*n},bn=(l,e)=>{let t=le((e+1)/2),r=le(e/2)+.5*Math.log(e*Math.PI),i=-((e+1)/2)*Math.log(1+l*l/e),n=t-r+i;return Math.exp(n)},_n=(l,e)=>{let r=1;{let i=Qt(l),n=(Math.pow(i,3)+i)/4,o=(5*Math.pow(i,5)+16*Math.pow(i,3)+3*i)/96,s=(3*Math.pow(i,7)+19*Math.pow(i,5)+17*Math.pow(i,3)-15*i)/384,a=(79*Math.pow(i,9)+776*Math.pow(i,7)+1482*Math.pow(i,5)-1920*Math.pow(i,3)-945*i)/92160;r=i+n/e+o/Math.pow(e,2)+s/Math.pow(e,3)+a/Math.pow(e,4)}for(let i=0;i<16;i++){let n=pn(r,e)-l;if(Math.abs(n)<1e-12)break;let o=bn(r,e);if(o===0)break;let s=n/o,a=Math.max(-1,Math.min(1,s));r-=a}return r};var hs=l=>{let e=.254829592,t=-.284496736,r=1.421413741,i=-1.453152027,n=1.061405429,o=.3275911;l=Math.abs(l);let s=1/(1+o*l);return 1-((((n*s+i)*s+r)*s+t)*s+e)*s*Math.exp(-1*l*l)},Vl=Math.sqrt(2*Math.PI),gn=(l,e,t,r)=>{let i=0;return r?i=.5*(1+(l<e?-1:1)*hs(Math.abs(l-e)/(t*Math.sqrt(2)))):i=Math.exp(-1/2*Math.pow((l-e)/t,2))/(t*Vl),i},yn=l=>{let e=l.length;return e%2?l[Math.floor(e/2)]:(l[e/2]+l[e/2-1])/2},us=(l,e=!0)=>{l.sort((i,n)=>i-n);let t=l.length,r=(i,n,o)=>{let s=n*i+o,a=s%1;if(a){let c=l[Math.floor(s)],d=l[Math.ceil(s)];return c+(d-c)*a}else return l[s]};return e?[l[0],r(.25,t-1,0),yn(l),r(.75,t-1,0),l[t-1]]:t%1?[l[0],r(.25,t-2,0),yn(l),r(.75,t-2,1),l[t-1]]:[l[0],r(.25,t-3,0),yn(l),r(.75,t-3,2),l[t-1]]},Jr=l=>{let e=[.9999999999998099,676.5203681218851,-1259.1392167224028,771.3234287776531,-176.6150291621406,12.507343278686905,-.13857109526572012,9984369578019572e-21,15056327351493116e-23],t=Math.PI,r=Ir,i=Ke,n=se,o=m=>({real:m,imaginary:0}),s=(m,p)=>({real:m.real+p.real,imaginary:m.imaginary+p.imaginary}),a=Ce,c=Wt,d=m=>({real:-m.real,imaginary:-m.imaginary}),u=No;if(l.real<.5)return i(o(t),n(r(n(o(t),l)),Jr({real:1-l.real,imaginary:-l.imaginary})));l.real-=1;let h=o(e[0]);for(let m=1;m<e.length;m++)h=s(h,i(o(e[m]),s(l,o(m))));let f=s(l,o(7.5));return u(o(Math.sqrt(2*t)),a(f,s(l,o(.5))),c(d(f)),h)},Fl=(l,e,t)=>{let r=Jr({real:e,imaginary:0}).real;return Math.pow(l,e-1)*Math.exp(-l/t)/(r*Math.pow(t,e))},Nl=(l,e,t)=>{let r=0,i=e*10,n=1e-6,o=0;for(;i-r>n;){o++;let s=(i+r)/2,a=jr(e,r/t),c=jr(e,s/t);if(a===!1||c===!1)return!1;(c-l)*(a-l)<0?i=s:r=s}return(r+i)/2},Ie=(l,e=!1)=>{let t=l.length,r=0,i=0;for(let n=0;n<t;n++)r+=l[n];r/=t;for(let n=0;n<t;n++){let o=l[n]-r;i+=o*o}return e?i/(t-1):i/t},fs={Slope:{arguments:[{name:"known_y"},{name:"known_x"}],fn:(l,e)=>{let t=ie(e),r=ie(l);if(t.length!==r.length)return E();let i=0,n=0,o=0,s=0;for(let c=0;c<t.length;c++){let d=t[c],u=r[c];o+=d*u,i+=d,n+=u,s+=d*d}let a=(t.length*o-i*n)/(t.length*s-i*i);return{type:3,value:a}}},Intercept:{arguments:[{name:"known_y"},{name:"known_x"}],fn:(l,e)=>{let t=ie(e),r=ie(l);if(t.length!==r.length)return E();let i=t.length,n=0,o=0,s=0,a=0;for(let d=0;d<i;d++){let u=t[d],h=r[d];s+=u*h,n+=u,o+=h,a+=u*u}let c=i*s-n*o;return c/=i*a-n*n,{type:3,value:(o-c*n)/i}}},Phi:{arguments:[{name:"x",boxed:!0,unroll:!0}],fn:l=>l.type===3?{type:3,value:1/Math.sqrt(Math.PI*2)*Math.exp(-l.value*l.value/2)}:E()},"Z.Test":{arguments:[{name:"Array",boxed:!0},{name:"x",boxed:!0,unroll:!0},{name:"Sigma",boxed:!0,unroll:!0}],fn:(l,e,t)=>{let r=[];if(l.type===9)for(let i of l.value)for(let n of i)n.type===3&&r.push(n.value);else l.type===3&&r.push(l.value);if(r.length&&e.type===3){let i=0,n=r.length;for(let s of r)i+=s;i/=n;let o=t?.type===3?t.value:Math.sqrt(Ie(r,!0));return{type:3,value:1-gn((i-e.value)/(o/Math.sqrt(n)),0,1,!0)}}return E()}},"Beta.Dist":{description:"beta distribution",arguments:[{name:"x",unroll:!0},{name:"a"},{name:"b"},{name:"cumulative"}],fn:(l,e,t,r)=>e<0||t<0?E():r?{type:3,value:mn(l,e,t)}:{type:3,value:fn(l,e,t)}},"Beta.Inv":{description:"Inverse of the beta distribution",arguments:[{name:"probability",unroll:!0},{name:"a"},{name:"b"}],fn:(l,e,t)=>e<0||t<0?E():{type:3,value:hn(l,e,t)}},Erf:{fn:l=>({type:3,value:hs(l)})},"Norm.Inv":{description:"Inverse of the normal cumulative distribution",arguments:[{name:"probability"},{name:"mean",default:0},{name:"standard deviation",default:1}],xlfn:!0,fn:(l,e=0,t=1)=>({type:3,value:Qt(l)*t+e})},"Norm.S.Inv":{description:"Inverse of the standard normal cumulative distribution",arguments:[{name:"probability",unroll:!0}],xlfn:!0,fn:l=>({type:3,value:Qt(l)})},"Norm.Dist":{description:"Cumulative normal distribution",arguments:[{name:"value"},{name:"mean",default:0},{name:"standard deviation",default:1},{name:"cumulative",default:!0}],xlfn:!0,fn:(l,e=0,t=1,r=!0)=>({type:3,value:gn(l,e,t,r)})},"Norm.S.Dist":{description:"Cumulative normal distribution",arguments:[{name:"value"},{name:"cumulative",default:!0}],xlfn:!0,fn:(l,e=!0)=>({type:3,value:gn(l,0,1,e)})},"StDev.P":{description:"Returns the standard deviation of a set of values, corresponding to a population",arguments:[{name:"data"}],fn:(...l)=>({type:3,value:Math.sqrt(Ie(ie(l),!1))})},"StDev.S":{description:"Returns the standard deviation of a set of values, corresponding to a sample of a population",arguments:[{name:"data"}],fn:(...l)=>({type:3,value:Math.sqrt(Ie(ie(l),!0))})},"Var.P":{description:"Returns the variance of a set of values, corresponding to a population",arguments:[{name:"data"}],fn:(...l)=>({type:3,value:Ie(ie(l),!1)})},"Var.S":{description:"Returns the variance of a set of values, corresponding to a sample of a population",arguments:[{name:"data"}],fn:(...l)=>({type:3,value:Ie(ie(l),!0)})},Covar:{description:"Returns the covariance between two ranges of values",arguments:[{name:"A"},{name:"B"}],fn:(l,e)=>{if(!Array.isArray(l)||!Array.isArray(e))return U();if(!Array.isArray(l[0])||!Array.isArray(e[0]))return U();if(l.length!==e.length)return E();let t=0,r=0,i={x:0,y:0},n={x:[],y:[]};for(let o=0;o<l.length;o++){if(!l[o]||!e[o])continue;if(l[o].length!==e[o].length)return E();let s=l[o].length;r+=s;for(let a=0;a<s;a++)i.x+=l[o][a]||0,i.y+=e[o][a]||0,n.x.push(l[o][a]||0),n.y.push(e[o][a]||0)}if(r===0)return Se();i.x/=r,i.y/=r;for(let o=0;o<r;o++)t+=(n.x[o]-i.x)*(n.y[o]-i.y);return{type:3,value:t/r}}},Correl:{description:"Returns the correlation between two ranges of values",arguments:[{name:"A"},{name:"B"}],fn:(l,e)=>{if(!Array.isArray(l)||!Array.isArray(e))return U();if(!Array.isArray(l[0])||!Array.isArray(e[0]))return U();let t=0,r=0,i=0,n=0,o=0,s=0,a=0;for(let c=0;c<l.length;c++){if(!l[c]||!e[c])continue;let d=l[c].length;for(let u=0;u<d;u++){let h=Number(l[c][u]),f=Number(e[c][u]);isNaN(h)||isNaN(f)||(r+=h*f,i+=h,n+=f,o+=h*h,s+=f*f,a++)}}return t=a*r-i*n,t&&(t/=Math.sqrt((a*o-i*i)*(a*s-n*n))),{type:3,value:t}}},GeoMean:{description:"Returns the geometric mean of all numeric arguments",arguments:[{boxed:!0}],fn:(...l)=>{l=ae(l);let e=0,t={real:1,imaginary:0},r=!1,i=!1;for(let n of l)n.type===8?(r=!0,t=se(t,n.value),e++):n.type===3&&(n.value<0&&(i=!0),e++,t.real*=n.value,t.imaginary*=n.value);if(r){let n=Ce(t,{real:1/e,imaginary:0});return n.imaginary?{type:8,value:n}:{type:3,value:n.real}}else return i?U():{type:3,value:Math.pow(t.real,1/e)}}},LCM:{description:"Retuns the least common mulitple of the arguments",arguments:[{boxed:!0}],fn:(...l)=>{l=ae(l);let e=[];for(let i of l){if(i.type===7)return i;if(i.type===3)e.push(i.value);else if(i.type!==0)return console.info("RT",i.type),E()}let t=(i,n)=>i%n==0?n:t(n,i%n);if(e.length===0)return{type:3,value:0};let r=e[0];for(let i=1;i<e.length;i++)r=r*e[i]/t(r,e[i]);return{type:3,value:r}}},"Gamma.Inv":{description:"Returns the inverse of the gamma distribution",arguments:[{name:"probability",unroll:!0},{name:"alpha"},{name:"beta"}],fn:(l,e,t)=>{if(l<0||l>1)return E();let r=Nl(l,e,t);return r===!1?U():{type:3,value:r}}},"Gamma.Dist":{fn:(l,e,t,r)=>{if(l<0||e<=0||t<=0)return E();let i=r?jr(e,l/t):Fl(l,e,t);return i===!1?U():{type:3,value:i}}},"T.DIST":{description:"Returns the left-tailed Student's t-distribution",arguments:[{name:"X",unroll:!0,boxed:!0},{name:"degrees of freedom",unroll:!0,boxed:!0},{name:"cumulative",unroll:!0,boxed:!0}],fn:(l,e,t)=>{let r=t?!!t.value:!1;return e.type!==3||l.type!==3||e.value<1?E():{type:3,value:r?pn(l.value,e.value):bn(l.value,e.value)}}},"T.Inv":{description:"Returns the left-tailed inverse of the Student's t-distribution",arguments:[{name:"Probability",boxed:!0,unroll:!0},{name:"Degrees of freedom",boxed:!0,unroll:!0}],fn:(l,e)=>e.type!==3||e.value<1||l.type!==3||l.value<=0||l.value>=1?E():{type:3,value:_n(l.value,e.value)}},"T.Inv.2T":{description:"Returns the two-tailed inverse of the Student's t-distribution",arguments:[{name:"Probability",boxed:!0,unroll:!0},{name:"Degrees of freedom",boxed:!0,unroll:!0}],fn:(l,e)=>e.type!==3||e.value<1||l.type!==3||l.value<=0||l.value>=1?E():{type:3,value:Math.abs(_n(1-l.value/2,e.value))}},GammaLn:{description:"Returns the natural log of the gamma function",arguments:[{name:"value",boxed:!0,unroll:!0}],fn:l=>l.type===3?{type:3,value:le(l.value)}:E()},"GammaLn.Precise":{description:"Returns the natural log of the gamma function",arguments:[{name:"value",boxed:!0,unroll:!0}],fn:l=>{let e;if(l.type===3?e={real:l.value,imaginary:0}:l.type===8&&(e=l.value),e){let t=Jr(e);return he(en(t))}return E()}},Gamma:{description:"Returns the gamma function for the given value",arguments:[{name:"value",boxed:!0,unroll:!0}],fn:l=>{let e={real:0,imaginary:0};if(l.type===8)e={...l.value};else if(l.type===3)e.real=l.value;else return E();if(e.imaginary===0&&e.real%1===0&&e.real<=0)return U();let t=Jr(e);return Math.abs(t.imaginary)<=1e-7?{type:3,value:t.real}:{type:8,value:t}}},Delta:{arguments:[{name:"number"},{name:"number",default:0}],fn:(l,e=0)=>typeof l!="number"||typeof e!="number"?U():{type:3,value:l===e?1:0}},GCD:{description:"Finds the greatest common divisor of the arguments",arguments:[{boxed:!0}],fn:(...l)=>{l=ae(l);let e=[];for(let i of l){if(i.type===7)return i;if(i.type===3)e.push(i.value);else if(i.type!==0)return console.info("RT",i.type),E()}let t=(i,n)=>i%n==0?n:t(n,i%n);if(e.length===0)return U();if(e.length===1)return{type:3,value:e[0]};let r=e[0];for(let i=1;i<e.length;i++)r=t(r,e[i]);return{type:3,value:r}}},HarMean:{description:"Returns the harmonic mean of the arguments",arguments:[{boxed:!0}],fn:(...l)=>{l=ae(l);let e={real:0,imaginary:0},t=0;for(let r of l){if(r.type===7)return r;if(r.type===3&&(e.real+=1/r.value,t++),r.type===8){let i=Ke({real:1,imaginary:0},r.value);e.real+=i.real,e.imaginary+=i.imaginary,t++}}return e.imaginary?{type:8,value:Ke({real:t,imaginary:0},e)}:{type:3,value:t/e.real}}},Average:{description:"Returns the arithmetic mean of all numeric arguments",arguments:[{boxed:!0}],fn:(...l)=>{l=ae(l);let e={real:0,imaginary:0},t=0;for(let r of l){if(r.type===7)return r;r.type===3&&(e.real+=r.value,t++),r.type===8&&(e.real+=r.value.real,e.imaginary+=r.value.imaginary,t++)}return e.real/=t,e.imaginary/=t,e.imaginary?{type:8,value:e}:{type:3,value:e.real}}},Percentile:{description:"Returns the kth percentile value from the range of data",arguments:[{name:"range"},{name:"percentile"}],fn:(l,e)=>{let t=ie(l);t.sort((a,c)=>a-c);let r=t.length,i=Math.pow(10,8),n=Math.round((1+(r-1)*e)*i)/i,o=Math.floor(n),s=Math.ceil(n);return{type:3,value:(t[o-1]+t[s-1])/2}}},"Quartile.Inc":{description:"Returns the interpolated quartile of the data set (including median)",arguments:[{name:"range"},{name:"quartile"}],xlfn:!0,fn:(l,e)=>{if(typeof e!="number"||e<0||e>4||e%1)return E();let t=ie(l),r=us(t,!0);return{type:3,value:r[e]}}},"Quartile.Exc":{description:"Returns the interpolated quartile of the data set (excluding median)",arguments:[{name:"range"},{name:"quartile"}],xlfn:!0,fn:(l,e)=>{if(typeof e!="number"||e<1||e>3||e%1)return E();let t=ie(l),r=us(t,!1);return{type:3,value:r[e]}}},Median:{description:"Returns the median value of the range of data",arguments:[{name:"range"}],fn:(...l)=>{let e=ie(l);e.sort((o,s)=>o-s);let r=1+(e.length-1)*.5,i=Math.floor(r),n=Math.ceil(r);return{type:3,value:(e[i-1]+e[n-1])/2}}},Rank:{arguments:[{name:"Value"},{name:"Source"},{name:"Order"}],fn:(l,e,t=0)=>{if(typeof l!="number")return E();let r=ie(e);r.sort(t?(i,n)=>i-n:(i,n)=>n-i);for(let i=0;i<r.length;i++)if(r[i]===l)return{type:3,value:i+1};return U()}}},vn={Mean:"Average",StDev:"StDev.S",StDevA:"StDev.S",StDevPA:"StDev.P",Var:"Var.S",Quartile:"Quartile.Inc",NormSInv:"Norm.S.Inv",NormSDist:"Norm.S.Dist",NormDist:"Norm.Dist"};var ms={IsComplex:{description:"Returns true if the reference is a complex number",arguments:[{name:"Reference",metadata:!0,unroll:!0}],fn:l=>({type:4,value:!!l?.value&&ye(l.value.value)})},Real:{description:"Returns the real part of a complex number",arguments:[{boxed:!0,unroll:!0}],fn:l=>l.type===3?{...l}:l.type===8?{type:3,value:l.value.real||0}:l.type===0||l.type===2&&l.value===""?{type:3,value:0}:U()},Imaginary:{description:"Returns the imaginary part of a complex number (as real)",arguments:[{boxed:!0,unroll:!0}],fn:l=>l.type===8?{type:3,value:l.value.imaginary||0}:l.type===3||l.type===0||l.type===2&&l.value===""?{type:3,value:0}:U()},Conjugate:{description:"Returns the conjugate of a complex number",arguments:[{boxed:!0,unroll:!0}],fn:l=>{let e=Xe(l);return e?e.imaginary?{type:8,value:{real:e.real,imaginary:-e.imaginary}}:{type:3,value:e.real}:U()}},Arg:{description:"Returns the principal argument of a complex number (in radians)",arguments:[{boxed:!0,unroll:!0}],fn:l=>l.type===8?{type:3,value:Math.atan2(l.value.imaginary,l.value.real)}:l.type===3||l.type===0||l.type===2&&l.value===""?{type:3,value:Math.atan2(0,l.value||0)}:U()},Rectangular:{description:"Converts a complex number in polar form to rectangular form",arguments:[{name:"r"},{name:"\u03B8 in radians"}],fn:(l=0,e=0)=>({type:8,value:{real:l*Math.cos(e),imaginary:l*Math.sin(e)}})},Complex:{description:"Ensures that the given value will be treated as a complex number",arguments:[{boxed:!0,unroll:!0}],fn:l=>{let e=Xe(l);return e?{type:8,value:e}:U()}},ComplexLog:{description:"Returns the principal value Log(z) of a complex number z",arguments:[{boxed:!0,unroll:!0}],fn:l=>{if(l.type===3){if(!l.value)return U();l={type:8,value:{real:l.value,imaginary:0}}}else if(l.type===0||l.type===2&&l.value==="")return U();if(l.type===8){let e=Lr(l.value),t={real:Math.log(e.r),imaginary:e.theta};return t.imaginary?{type:8,value:t}:{type:3,value:t.real}}return U()}}};var Wr=l=>{let e=[];l.type===9?e=l.value:e=[[l]];let t=e.length,r=t?e[0].length:0,i=[];if(!t||!r)return{m:t,n:r,array:i};for(let n=0;n<t;n++){let o=[];for(let s=0;s<r;s++){let a=e[n][s];if(a.type===8)o.push({...a.value});else if(a.type===3)o.push({real:a.value,imaginary:0});else if(a.type===0||a.value==="")o.push({real:0,imaginary:0});else return{m:t,n:r,error:!0,array:[]}}i.push(o)}return{m:t,n:r,array:i}},ps={MDeterm:{description:"Returns the determinant of a matrix",arguments:[{name:"matrix",boxed:!0}],fn:l=>{let e=Wr(l);if(!e.array||!e.m||!e.n||e.m!==e.n||e.error)return U();let t=zr(e);return t?he(t):U()}},MInverse:{description:"Returns the inverse matrix",arguments:[{name:"matrix",boxed:!0}],fn:l=>{let e=Wr(l);if(!e.array||!e.m||!e.n||e.m!==e.n||e.error)return U();let t=zr(e);if(t&&t.real===0&&t?.imaginary===0)return U();let r=Oo(e);return r?{type:9,value:r.map(i=>i.map(n=>he(n)))}:U()}},MMult:{description:"Returns the dot product A \u22C5 B",arguments:[{name:"A",boxed:!0},{name:"B",boxed:!0}],fn:(l,e)=>{let t=Wr(l),r=Wr(e);if(!t.array||t.error||!r.array||r.error)return U();if(t.m!==r.n)return U();let i=Po(r,t);return{type:9,value:i.map(n=>n.map(o=>he(o)))}}}};var bs={RegexExtract:{description:"Extract text using a regular expression",arguments:[{name:"text",unroll:!0},{name:"pattern",unroll:!0},{name:"return mode",unroll:!0,default:0},{name:"case insensitive",unroll:!0,default:!1}],fn:(l,e,t=0,r=!1)=>{let i=[];r&&i.push("i"),t===1&&i.push("g");let n=new RegExp(e,i.length?i.join(""):void 0);switch(t){case 0:{let o=l.match(n);return{type:2,value:o===null?"":o[0]??""}}case 1:{let o=Array.from(l.matchAll(n));return console.info({result:o}),{type:9,value:[o.map(s=>({type:2,value:s[0]||""}))]}}case 2:{let o=l.match(n);if(o===null)return{type:2,value:""};let s=Array.from(o).slice(1);return{type:9,value:[s.map(a=>({type:2,value:a}))]}}default:return E()}}},RegexReplace:{arguments:[{name:"text",unroll:!0},{name:"pattern",unroll:!0},{name:"replacement",unroll:!0},{name:"occurrence",unroll:!0,default:0},{name:"case insensitive",unroll:!0,default:!1}],description:"Replace text in a string using a regex",fn:(l,e,t,r=0,i=!1)=>{let n=["g"];i&&n.push("i");let o=new RegExp(e,n.length?n.join(""):void 0);if(r===0)return{type:2,value:l.replaceAll(o,t)};if(r<0){let a=Array.from(l.matchAll(o)).length;r+=a+1}let s=l.replace(o,a=>--r===0?t:a);return{type:2,value:s}}},RegexTest:{arguments:[{name:"text",unroll:!0},{name:"pattern",unroll:!0},{name:"case insensitive",unroll:!0,default:!1}],description:"Match text against a regular expression",fn:(l,e,t=!1)=>{let r=new RegExp(e,t?"i":void 0);return{type:4,value:r.test(l)}}}};var _s={Lambda:{description:"Creates a function",arguments:[{name:"Argument",repeat:!0,boxed:!0,passthrough:!0},{name:"Function",boxed:!0,passthrough:!0}],fn:(...l)=>({type:6,value:{bindings:l.slice(0,l.length-1),func:l[l.length-1],alt:"LAMBDA",type:"function"}})},Let:{description:"Binds values to names for a calculation",arguments:[{name:"Name",repeat:!0},{name:"Value",repeat:!0},{name:"Calculation",boxed:!0}],create_binding_context:({args:l,descriptors:e})=>{if(l.length%2!==1)return;let t={};for(let r=0;r<l.length-1;r+=2){let i=l[r],n=l[r+1];if(i.type==="identifier")t[i.name]=n;else return}return{context:t,args:l.slice(-1),argument_descriptors:e.slice(-1)}},fn:l=>l||{type:0}}};var gs={MakeArray:{description:"Create an array using a function",arguments:[{name:"rows"},{name:"columns"},{name:"lambda",description:"Function to apply",boxed:!0}],fp:!0,fn:function(l,e,t){if(l>0&&e>0&&t?.type===6){let r=this?.apply;if(!r)return U();let i=[];for(let n=0;n<e;n++){let o=[];for(let s=0;s<l;s++)o.push(r(t,[{type:3,value:s+1},{type:3,value:n+1}]));i.push(o)}return{type:9,value:i}}return E()}},ChooseCols:{description:"Returns one or more columns from an array, by column index",arguments:[{name:"array"},{name:"column",repeat:!0}],fn:function(l,...e){Array.isArray(l)||(l=[[l]]);let t=K(e),r=l.length,i=[];for(let n of t)if(typeof n=="number"){n<0?n=r+n:n--;let o=l[n];if(o){let s=[];for(let a of o)s.push(j(a));i.push(s)}else return E()}return i.length||i.push([]),{type:9,value:i}}},ChooseRows:{description:"Returns one or more rows from an array, by row index",arguments:[{name:"array"},{name:"row",repeat:!0}],fn:function(l,...e){Array.isArray(l)||(l=[[l]]);let t=K(e),r=l[0]?.length||0,i=[];for(let n of t)if(typeof n=="number"){n<0?n=r+n:n--;for(let[o,s]of l.entries()){let a=i[o]||[];if(n<0||n>=s.length)return E();a.push(j(s[n])),i[o]=a}}return i.length||i.push([]),{type:9,value:i}}},Take:{description:"Returns some number of rows/columns from the start or end of an array",arguments:[{name:"array"},{name:"rows"},{name:"columns"}],fn:function(l,e,t){if(!e&&!t||e===0||t===0||typeof e!="number"&&typeof e<"u"||typeof t!="number"&&typeof t<"u")return E();Array.isArray(l)||(l=[[l]]);let r=l.length,i=l[0].length,n=[],o=0,s=r-1,a=0,c=i-1;typeof t=="number"&&(t>0?s=Math.min(t,r)-1:t<0&&(s=r-1,o=Math.max(0,s+t+1))),typeof e=="number"&&(e>0?c=Math.min(e,i)-1:e<0&&(c=i-1,a=Math.max(0,c+e+1)));for(let d=o;d<=s;d++){let u=[];for(let h=a;h<=c;h++)u.push(j(l[d][h]));n.push(u)}return{type:9,value:n}}},Reduce:{description:"Accumulates a value by applying a function to a set of values",arguments:[{name:"initial value",boxed:!0},{name:"data",description:"Input data",boxed:!0},{name:"lambda",description:"Function to apply",boxed:!0}],fp:!0,fn:function(l,e,t){if(!this?.apply)return U();if(t.type!==6)return E();e.type!==9&&(e={type:9,value:[[e]]});let r=e.value.length,i=e.value[0].length;for(let n=0;n<i;n++)for(let o=0;o<r;o++){let s=[l,e.value[o][n]];l=this.apply(t,s)}return l}},Scan:{description:"Applies a function to a set of values, iteratively",arguments:[{name:"initial value",boxed:!0},{name:"data",description:"Input data",boxed:!0},{name:"lambda",description:"Function to apply",boxed:!0}],fp:!0,fn:function(l,e,t){if(!this?.apply)return U();if(t.type!==6)return E();e.type!==9&&(e={type:9,value:[[e]]});let r=[],i=e.value.length,n=e.value[0].length;for(let o=0;o<i;o++)r.push([]);for(let o=0;o<n;o++)for(let s=0;s<i;s++){let a=[l,e.value[s][o]],c=this.apply(t,a);r[s][o]=c,l=c}return{type:9,value:r}}},ByRow:{description:"Apply a function to each row in an array",arguments:[{name:"data",description:"Input data",repeat:!0,boxed:!0},{name:"lambda",description:"Function to apply",boxed:!0}],fp:!0,fn:function(l,e){if(!this?.apply)return U();if(e.type!==6)return E();l.type!==9&&(l={type:9,value:[[l]]});let t=l.value.length,r=l.value[0].length,i=[[]];for(let n=0;n<r;n++){let o=[];for(let s=0;s<t;s++)o.push(l.value[s][n]);i[0].push(this.apply(e,[{type:9,value:[o]}]))}return{type:9,value:i}}},ByCol:{description:"Apply a function to each column in an array",arguments:[{name:"data",description:"Input data",repeat:!0,boxed:!0},{name:"lambda",description:"Function to apply",boxed:!0}],fp:!0,fn:function(l,e){if(!this?.apply)return U();if(e.type!==6)return E();l.type!==9&&(l={type:9,value:[[l]]});let t=l.value.length,r=l.value[0].length,i=[];for(let n=0;n<t;n++){let o=[];for(let s=0;s<r;s++)o.push(l.value[n][s]);i.push([this.apply(e,[{type:9,value:[o]}])])}return{type:9,value:i}}},Map:{description:"Apply a function to a set of values",arguments:[{name:"data",description:"Input data",repeat:!0,boxed:!0},{name:"lambda",description:"Function to apply",boxed:!0}],fp:!0,fn:function(...l){if(l.length<2)return E();let e=l[l.length-1];if(e.type!==6)return E();let t=this?.apply;if(!t)return U();for(let n=0;n<l.length-1;n++){let o=l[n];o.type!==9&&(l[n]={type:9,value:[[o]]})}let r=l[0],i=[];if(r.type===9)for(let n=0;n<r.value.length;n++){let o=r.value[n],s=[];for(let a=0;a<o.length;a++){let c=[o[a]];for(let d=1;d<l.length-1;d++){let u=l[d];u.type===9&&c.push(u.value[n][a])}s.push(t(e,c))}i.push(s)}return{type:9,value:i}}}};var bt=class l extends $e{static type="state-leaf-vertex";state_id=0;type=l.type;color=2;Calculate(){if(this.dirty){for(let e of this.edges_in)if(e.dirty)return;this.state_id++,this.dirty=!1}}AddDependent(){throw new Error("leaf vertex cannot have dependents")}};var qr=class l extends $e{static type="calculation-leaf-vertex";type=l.type;address={row:-1,column:-1};use;updated=!1;color=2;Calculate(e){if(!this.dirty)return;for(let r of this.edges_in)if(r.dirty)return;let t=e.CalculationCallback.call(e,this);this.result=t.value,this.dirty=!1,this.updated=!0}AddDependent(){throw new Error("leaf vertex cannot have dependents")}};var Pl=l=>{if(typeof l=="string")switch(l=l.toUpperCase(),l){case"AVERAGE":case"MEAN":l=101;break;case"COUNT":l=102;break;case"COUNTA":l=103;break;case"MAX":l=104;break;case"MIN":l=105;break;case"PRODUCT":l=106;break;case"STDEV":l=107;break;case"STDEVP":l=108;break;case"SUM":l=109;break;case"VAR":l=110;break;case"VARP":l=111;break;default:l=0;break}return l},Ol={complex_numbers:"off",spill:!1},Kr=class extends Dr{constructor(t,r={}){super();this.model=t;if(this.expression_calculator=new Fr(this.model,this.library,this.parser),this.options={...Ol,...r},this.options.complex_numbers==="on"){for(let o of Object.keys(cn))pt[o]=cn[o];Bo()}this.UpdateLocale(),this.library.Register(pt,ss,fs,os,as,ms,ps,bs,_s,gs);for(let o of Object.keys(vn))this.library.Alias(o,vn[o]);for(let o of Object.keys(un))this.library.Alias(o,un[o]);let i=(o,s,...a)=>{Array.isArray(s)||(s=[[s]]);let c=[];for(let f=0;f<a.length;f+=2){let m=a[f];Array.isArray(m)||(m=[[m]]);{let p=n(m,a[f+1]);if(p.type!==9)return p;for(let[b,_]of p.value[0].entries())c[b]=!!_.value&&c[b]!==!1}}let d=K(s,!0),u=0,h=0;for(let[f,m]of c.entries())if(m){u++;let p=d[f];typeof p=="number"&&(h+=p)}switch(o){case"count":return{type:3,value:u};case"sum":return{type:3,value:h};case"average":return u===0?xe():{type:3,value:h/u}}},n=(o,s)=>{let a=K(o,!0),c,d,u="=";if(typeof s=="string"){s=s.trim();let f=s.match(/^([=<>]+)/);f&&(u=f[1],s=s.substring(u.length));let m=pe.TryParse(s);if(m?.type===2?s=`"${m.value}"`:s=m?.value?.toString()||"",/[?*]/.test(s)){let p=this.parser.argument_separator;if(u==="="||u==="<>"){if(c=this.parser.Parse(`=WildcardMatch({}${p} ${s}${p} ${u==="<>"})`),d=c.expression,c.error||!d)return be();d?.type==="call"&&d.args[0]?.type==="array"&&(d.args[0].values=[ln(a,!0)])}}}else s=(s||0).toString();if(!c){if(c=this.parser.Parse("{}"+u+s),d=c.expression,c.error||!d)return be();if(d.type!=="binary")return console.warn("invalid expression [1]",d),be();if(d.left.type!=="array")return console.warn("invalid expression [1]",d),be();d.right.type==="identifier"&&(console.warn("will never happen"),d.right={...d.right,type:"literal",value:d.right.name}),d.left.values=[ln(a,!0)]}return d?this.CalculateExpression(d):U()};this.library.Register({Subtotal:{arguments:[{name:"type"},{name:"range",metadata:!0}],fn:(o,...s)=>{if(o=Pl(o),o>100&&(o-=100),o<1||o>11)return E();let a=ae(s),c=[],d=0,u=0,h;for(let m of a){let p=m.value?.address;if(!p)return J();if(!h||h.id!==p.sheet_id){if(!p.sheet_id)return console.warn("invalid reference in metadata"),J();if(h=this.model.sheets.Find(p.sheet_id),!h)return console.warn("invalid sheet in metadata"),J()}if(!h.GetRowHeight(p.row))continue;let _=m.value?.value;typeof _>"u"||(d++,typeof _=="number"&&(u+=_,c.push(_)))}let f=0;switch(o){case 1:if(c.length===0)return xe();f=u/c.length;break;case 2:f=c.length;break;case 3:f=d;break;case 4:if(c.length===0)return U();f=Math.max.apply(0,c);break;case 5:if(c.length===0)return U();f=Math.min.apply(0,c);break;case 6:if(c.length===0)return U();f=1;for(let m of c)f*=m;break;case 7:if(c.length<2)return xe();f=Math.sqrt(Ie(c,!0));break;case 8:if(c.length===0)return xe();f=Math.sqrt(Ie(c,!1));break;case 9:f=u;break;case 10:if(c.length<2)return xe();f=Ie(c,!0);break;case 11:if(c.length===0)return xe();f=Ie(c,!1);break}return{type:3,value:f}}},Cell:{description:"Returns data about a cell",arguments:[{name:"type",description:"Type of data to return",unroll:!0},{name:"reference",description:"Cell reference",metadata:!0,unroll:!0}],fn:(o,s)=>{if(!fe(s))return J();if(o)switch(o.toString().toLowerCase()){case"format":return s.value.format?{type:2,value:s.value.format}:J();case"address":{let a="";return s.value.address.sheet_id&&(a=this.model.sheets.Find(s.value.address.sheet_id)?.name||""),a&&(Re.test(a)&&(a=`'${a}'`),a+="!"),{type:2,value:"[]"+a+s.value.address.label.replace(/\$/g,"")}}}return{type:7,value:Ro.error}}},Address:{arguments:[{name:"row"},{name:"column"},{name:"absolute"},{name:"a1"},{name:"sheet name"}],fn:(o=1,s=1,a=1,c=!0,d)=>{let u={type:"address",id:0,position:0,label:"",row:o-1,column:s-1};switch(a){case 2:u.absolute_row=!0;break;case 3:u.absolute_column=!0;break;case 4:break;default:u.absolute_column=!0,u.absolute_row=!0}return d&&(u.sheet=d),Wo(this.parser.Render(u,{r1c1:!c}))}},CountIfs:{arguments:[{name:"range"},{name:"criteria"},{name:"range"},{name:"criteria"}],fn:(...o)=>i("count",o[0],...o)},AverageIf:{arguments:[{name:"range"},{name:"criteria"}],fn:(o,s,a)=>i("average",a||o,o,s)},AverageIfs:{arguments:[{name:"value range"},{name:"criteria range"},{name:"criteria"},{name:"criteria range"},{name:"criteria"}],fn:(o,...s)=>i("average",o,...s)},SumIf:{arguments:[{name:"range"},{name:"criteria"}],fn:(o,s,a)=>i("sum",a||o,o,s)},SumIfs:{arguments:[{name:"value range"},{name:"criteria range"},{name:"criteria"},{name:"criteria range"},{name:"criteria"}],fn:(o,...s)=>i("sum",o,...s)},CountIf:{arguments:[{name:"range"},{name:"criteria"}],fn:(o,s)=>i("count",o,o,s)},Offset:{arguments:[{name:"reference",description:"Base reference",metadata:!0},{name:"rows",description:"number of rows to offset"},{name:"columns",description:"number of columns to offset"},{name:"height"},{name:"width"}],return_type:"reference",volatile:!0,fn:((o,s=0,a=0,c,d)=>{if(!o)return E();if(o.type===9){let h=typeof c=="number"?s+c:void 0,f=typeof d=="number"?a+d:void 0;return{type:9,value:o.value.slice(s,h).map(p=>p.slice(a,f))}}if(!fe(o))return console.info("e2",{reference:o}),J();let u=this.DynamicDependencies(o.value.address,this.expression_calculator.context.address,!0,s,a,d,c);if(!u)return console.info("e1",{check_result:u}),J();if(u.dirty){let h=this.GetVertex(this.expression_calculator.context.address,!0);return h.short_circuit=!0,{type:0,value:void 0}}if(u.area){let h={type:"address",...u.area.start,label:"",position:0,id:0},f={type:"address",...u.area.end,label:"",position:0,id:0},m=u.area.count===1?h:{type:"range",start:h,end:f,label:"",position:0,id:0};return{type:5,value:m}}return U()}).bind(this)},Indirect:{arguments:[{name:"reference",description:"Cell reference (string)"}],return_type:"reference",volatile:!0,fn:(o=>{if(!o||typeof o!="string")return E();let s=this.parser.Parse(o);if(s.error||!s.expression||s.expression.type!=="address"&&s.expression.type!=="range")return J();let a=this.DynamicDependencies(s.expression,this.expression_calculator.context.address);if(!a)return J();if(a.dirty){let c=this.GetVertex(this.expression_calculator.context.address,!0);return c.short_circuit=!0,{type:0,value:void 0}}return{type:5,value:s.expression}}).bind(this)},Match:{arguments:[{name:"value",boxed:!0},{name:"range",boxed:!0},{name:"type"}],fn:(o,s,a=0)=>{if(a)return console.warn("inexact match not supported",{value:o,range:s,type:a}),Se();if(s.type===9){if(s.value.length===1){let c=s.value[0];for(let d=0;d<c.length;d++)if(o.type==c[d].type&&o.value===c[d].value)return{type:3,value:d+1}}else for(let c=0;c<s.value.length;c++){let d=s.value[c];if(d.length!==1)return Se();if(o.type==d[0].type&&o.value===d[0].value)return{type:3,value:c+1}}return Se()}else return o.type===s.type&&o.value===s.value?{type:3,value:1}:Se();return E()}},Index:{return_type:"reference",arguments:[{name:"range",metadata:!0},{name:"row"},{name:"column"}],volatile:!1,fn:(o,s,a)=>{if(!o)return E();if(s===void 0&&a===void 0)return E();s=s||0,a=a||0;let c=[];if(o.type===9)c=o.value;else if(o.type===5){let h=o.value;h.type==="metadata"&&h.address&&c.push([o])}let d=c.length,u=c[0]?.length||0;if(u<=0||d<=0||s>u||a>d||s<0||a<0)return E();if(a===0&&s===0){let h=d===1&&u===1?{...c[0][0].value.address}:{type:"range",start:c[0][0].value.address,end:c[d-1][u-1].value.address,label:"",position:0,id:0};return{type:5,value:h}}if((s||u===1)&&(a||d===1))return{type:5,value:c[a?a-1:0][s?s-1:0].value.address};if(s){let h={type:"range",start:c[0][s-1].value.address,end:c[d-1][s-1].value.address,label:"",position:0,id:0};return{type:5,value:h}}else if(a){let h={type:"range",start:c[a-1][0].value.address,end:c[a-1][u-1].value.address,label:"",position:0,id:0};return{type:5,value:h}}return E()}},Rows:{arguments:[{name:"reference",description:"Array or reference"}],volatile:!1,fn:o=>{if(!o)return E();if(Array.isArray(o)){let s=o[0];return Array.isArray(s)?{type:3,value:s.length}:U()}return{type:3,value:1}}},Columns:{arguments:[{name:"reference",description:"Array or reference"}],volatile:!1,fn:o=>o?Array.isArray(o)?{type:3,value:o.length}:{type:3,value:1}:E()},FormulaText:{description:"Returns a formula as a string",arguments:[{name:"reference",description:"Cell reference",metadata:!0,unroll:!0}],fn:o=>{if(!fe(o))return J();let s=this.model.sheets.Find(o.value?.address?.sheet_id||0);if(s){let a=s.cells.GetCell(o.value.address,!1);return{type:2,value:a?.value?.toString()||""}}return J()}},IsFormula:{description:"Returns true if the reference is a formula",arguments:[{name:"Reference",unroll:!0,metadata:!0}],fn:o=>{let s=o?.value?.address,a=this.model.sheets.Find(s?.sheet_id||0);if(s&&a){let c=a.cells.GetCell(s,!1);return{type:4,value:c?.type===1}}return{type:4,value:!1}}}})}get parser(){return this.model.parser}library=new Or;registered_libraries={};expression_calculator;full_rebuild_required=!1;options;grid_expanded=!1;ExportCalculatedValues(){let t={};for(let r of this.model.sheets.list){let i=r.cells.toJSON({calculated_value:!0}).data;t[r.id]=i.filter(n=>n.calculated!==void 0)}return t}ApplyCalculatedValues(t){for(let r of this.model.sheets.list){let i=t[r.id];if(!i)console.info("mismatch",r.id);else for(let n of i)r.cells.data[n.row][n.column].SetCalculatedValue(n.calculated)}}AttachSpillData(t,r){if(r||(r=(t.start.sheet_id?this.model.sheets.Find(t.start.sheet_id):void 0)?.cells),!r)throw console.info({area:t,cells:r}),new Error("invalid sheet ID in attach spill data");let i=new bt,n=0,o=!1;for(let{cell:s,row:a,column:c}of r.IterateRC(t,!0))n++&&(s.type!==0||s.area||s.merge_area||s.table)&&(o=!0),this.AddLeafVertexEdge({row:a,column:c,sheet_id:t.start.sheet_id},i);return this.spill_data.push({area:t,vertex:i}),{vertex:i,area:t,error:o}}SpillCallback(t,r){let{reference:i,address:n}=t,{value:o}=r,s=[];if(!i)return console.error("invalid reference in spill callback"),s;if(!n||!n.sheet_id)return console.error("invalid address in spill callback"),s;if(o.length===1&&o[0].length===1||!this.options.spill)return i.SetCalculatedValue(o[0][0].value),s;let a=this.model.sheets.Find(n.sheet_id),c=a?.cells;if(c){let d=r.value.length,u=r.value[0].length,h=new g(n).Reshape(u,d),{error:f}=this.AttachSpillData(h,c);if(f)return i.SetCalculationError("SPILL"),s;a.rows<h.end.row+1&&(a.cells.EnsureRow(h.end.row+1),this.grid_expanded=!0),a.columns<h.end.column+1&&(a.cells.EnsureColumn(h.end.column+1),this.grid_expanded=!0);let m=n.sheet_id;for(let{row:p,column:b}of c.IterateRC(h)){if(p===n.row&&b===n.column)continue;let _=this.GetVertex({sheet_id:m,row:p,column:b},!1);_&&(_.dirty||s.push(_))}for(let{cell:p,row:b,column:_}of c.IterateRC(h)){p.spill=h,b-=n.row,_-=n.column;let x=r.value[_][b];switch(x.type){case 5:case 9:case 6:break;default:p.SetCalculatedValue(x.value,x.type);break}}return s}return console.error("invalid cell reference in spill callback"),i.SetCalculationError("SPILL"),[]}SpreadCallback(t,r){if(!t.address||!t.address.sheet_id)throw new Error("spread callback called without sheet id");let i=this.model.sheets.Find(t.address.sheet_id)?.cells;if(!i)throw new Error("spread callback called without cells");if(!t||!t.reference)return;let n=t.reference.area;if(n){let o=n.rows,s=n.columns;if(r.type===9){let a=Nr(r.value);for(let c=0;c<o;c++)if(a[c]){let d=0;for(;d<s&&d<a[c].length;d++){let u=a[c][d];switch(u.type===9&&(u=u.value[0][0]),u.type){case 9:case 5:case 6:i.data[c+n.start.row][d+n.start.column].SetCalculatedValue(void 0);break;default:i.data[c+n.start.row][d+n.start.column].SetCalculatedValue(u.value,u.type)}}for(;d<s;d++)i.data[c+n.start.row][d+n.start.column].SetCalculatedValue(void 0,0)}else for(let d=0;d<s;d++)i.data[c+n.start.row][d+n.start.column].SetCalculatedValue(void 0,0)}else{let a={...r};(a.type===5||a.type===6)&&(a={type:0,value:void 0});for(let c=0;c<o;c++)for(let d=0;d<s;d++)i.data[c+n.start.row][d+n.start.column].SetCalculatedValue(a.value,a.type)}}}CalculationCallback(t){if(!t.address)throw new Error("vertex missing address");return t.expression_error?{value:Mr()}:this.expression_calculator.Calculate(t.expression,t.address,t.reference?.area)}DynamicDependencies(t,r,i=!1,n=0,o=0,s=1,a=1){let c=this.ResolveExpressionAddress(t,r);if(!c)return;let d=!1,u;if(t.type==="address"||t.type==="range"){let f=t.type==="range"?t.start:t;f.sheet_id?u=this.model.sheets.Find(f.sheet_id):f.sheet&&(u=this.model.sheets.Find(f.sheet))}if(!u&&r?.sheet_id&&(u=this.model.sheets.Find(r.sheet_id)),!u)throw new Error("missing sheet in dynamic dependencies [b21]");c=u.RealArea(c);let h=c.start.sheet_id;i&&(c=new g({column:c.start.column+o,row:c.start.row+n,sheet_id:c.start.sheet_id},{column:c.start.column+o+s-1,row:c.start.row+n+a-1,sheet_id:c.end.sheet_id}));for(let f=c.start.row;f<=c.end.row;f++)for(let m=c.start.column;m<=c.end.column;m++){let p=this.GetVertex({row:f,column:m,sheet_id:h},!1);p&&p.dirty&&(this.AddEdge({row:f,column:m,sheet_id:h},this.expression_calculator.context.address),d=!0)}return{dirty:d,area:c}}UpdateLocale(){V.decimal_separator===","?this.parser.SetLocaleSettings(","):this.parser.SetLocaleSettings(".")}SupportedFunctions(){let t=this.library.List(),r=Object.keys(t).map(i=>{let n=t[i].canonical_name;return n||(n=i.replace(/_/g,".")),{name:n,description:t[i].description,arguments:(t[i].arguments||[]).map(o=>({name:o.name||""})),type:"function"}});for(let i of this.model.macro_functions.values())r.push({name:i.name,description:i.description,arguments:(i.argument_names||[]).map(n=>({name:n})),type:"function"});return r}RegisterLibrary(t,r){return this.registered_libraries[t]?!1:(this.RegisterFunction(r),this.registered_libraries[t]=!0,!0)}RegisterFunction(t){for(let r of Object.keys(t)){let i=t[r];this.library.Register({[r]:i})}}Calculate(t){if(t&&!t.start.sheet_id)throw new Error("CalculateInternal called with subset w/out sheet ID");this.full_rebuild_required&&(t=void 0,this.UpdateAnnotations(),this.UpdateConditionals(),this.UpdateConnectedElements(),this.full_rebuild_required=!1),this.RebuildGraph(t),this.grid_expanded=!1;try{this.Recalculate()}catch(r){console.error(r),console.info("calculation error trapped")}}Reset(){this.FlushTree(),this.full_rebuild_required=!0}DecoratedFunctionList(){let t={},r=this.library.List();for(let i of Object.keys(r)){let n=r[i];n.xlfn?t[i]="_xlfn":n.extension&&(t[i]="_xll")}return t}Evaluate(t,r,i={},n=!1){let o=i?.preparsed;if(!o){this.parser.Save(),i.argument_separator&&(i.argument_separator===","?this.parser.SetLocaleSettings("."):this.parser.SetLocaleSettings(",")),i.r1c1&&(this.parser.flags.r1c1=i.r1c1);let s=this.parser.Parse(t);if(this.parser.Restore(),o=s.expression,s.error)throw new Error(s.error)}if(o){this.parser.Walk(o,a=>{if(a.type==="address"||a.type==="range"){if(a.type==="address"){if(a.offset_column||a.offset_row)throw new Error("Evaluate does not support offset references")}else if(a.start.offset_column||a.start.offset_row||a.end.offset_column||a.end.offset_row)throw new Error("Evaluate does not support offset references");this.model.ResolveSheetID(a,void 0,r)}return!0});let s=this.CalculateExpression(o,i.address);return n?s:s.type===9?s.value.map(a=>a.map(c=>c.value)):s.value}throw new Error("invalid expression")}CalculateExpression(t,r={row:-1,column:-1},i=!1){return this.expression_calculator.Calculate(t,r,void 0,i).value}RebuildClean(t=!1){this.full_rebuild_required=!1,this.RebuildGraph(),this.UpdateAnnotations(),this.UpdateConditionals(),this.UpdateConnectedElements(),this.InitializeGraph(),t&&this.volatile_list.length&&this.Recalculate()}FlattenCellList(t){let r={},i=[];for(let n of t){let o={column:n.column,row:n.row,sheet_id:n.sheet_id},s=g.CellAddressToLabel(o,!0);r[s]||(r[s]=s,i.push(o))}return i}Unresolve(t,r,i=!0,n=!0){let o="",s=N(t)?new g(t):new g(t.start,t.end);if(n){let d=this.model.named.MatchSelection(s);if(d)return d}if(o=s.spreadsheet_label,!i)return o;let a=s.start.sheet_id||r?.id,c=this.ResolveSheetName(a,!0);return c?c+"!"+o:o}ResolveSheetName(t,r=!1){let i=this.model.sheets.Find(t);if(i)return r&&Re.test(i.name)?`'${i.name}'`:i.name}RemoveConditional(t){if(t.type==="expression"){let r=t.internal?.vertex;r&&(r.Reset(),this.RemoveLeafVertex(r))}}RemoveConnectedELement(t){let r=t.internal;return r?.vertex?(this.RemoveLeafVertex(r.vertex),!0):!1}UpdateConnectedElements(t,r){if(t||(t=this.model.sheets.list[0]),r){let n=r.internal;n?.vertex&&this.RemoveLeafVertex(n.vertex)}let i=r?[r]:this.model.connected_elements.values();for(let n of i){let o=n.internal;o||(o={vertex:new bt},n.internal=o);let s=o.vertex;this.AddLeafVertex(s),this.UpdateLeafVertex(s,n.formula,t)}}UpdateConditionals(t,r){if(!t){for(let i of this.model.sheets.list)i.conditional_formats?.length&&this.UpdateConditionals(i.conditional_formats,i);return}if(!r)throw new Error("invalid call to update conditionals without context");t&&!Array.isArray(t)&&(t=[t]);for(let i of t){let n="";switch(i.type){case"cell-match":i.between?n=`BETWEEN(${[this.Unresolve(i.area,r,!0,!1),...i.between].join(", ")})`:n=this.Unresolve(i.area,r,!0,!1)+" "+i.expression;break;case"expression":n=i.expression;break;case"duplicate-values":n=`UniqueValues(${this.Unresolve(i.area,r,!0,!1)})`,i.unique||(n=`NOT(${n})`);break;case"data-bar":case"gradient":n=`=Gradient(${[this.Unresolve(i.area,r,!0,!1),i.min??"",i.max??"",...i.type==="data-bar"?["TRUE"]:[]].join(",")})`;break;default:continue}if(!n)continue;if(i.internal||(i.internal={}),!i.internal.vertex){let s=new qr;s.use="conditional",i.internal.vertex=s;let a={argument_separator:","};i.type!=="gradient"&&i.type!=="duplicate-values"&&i.type!=="data-bar"&&(a={...i.options,...a});let c=this.Evaluate(n,r,a,!0);i.internal.vertex.result=c,i.internal.vertex.updated=!0}let o=i.internal.vertex;this.AddLeafVertex(o),this.UpdateLeafVertex(o,n,r,".")}}RemoveAnnotation(t){let r=t.temp;r.vertex&&(r.vertex.Reset(),this.RemoveLeafVertex(r.vertex))}UpdateAnnotations(t,r){if(!t){for(let i of this.model.sheets.list)this.UpdateAnnotations(i.annotations,i);return}if(!r)throw new Error("invalid call to UpdateAnnotations with list but no sheet");typeof t<"u"&&!Array.isArray(t)&&(t=[t]);for(let i of t)if(i.data.formula){let n=i.temp;n.vertex||(n.vertex=new bt),this.AddLeafVertex(n.vertex),this.UpdateLeafVertex(n.vertex,i.data.formula,r)}}ResolveExpressionAddress(t,r){switch(t.type){case"address":if(this.model.ResolveSheetID(t,r))return new g(t);break;case"range":if(this.model.ResolveSheetID(t,r))return new g(t.start,t.end);break;case"identifier":{let i=this.model.GetName(t.name,r?.sheet_id||0);if(i&&i.type==="range")return new g(i.area.start,i.area.end)}break}}NamedRangeToAddressUnit(t,r){let i=t.name.toUpperCase(),n=this.model.GetName(i,r.sheet_id||0);if(n&&n.type==="range")return n.area.count===1?this.ConstructAddressUnit(n.area.start,i,t.id,t.position):{type:"range",start:this.ConstructAddressUnit(n.area.start,i,t.id,t.position),end:this.ConstructAddressUnit(n.area.end,i,t.id,t.position),label:i,id:t.id,position:t.position}}ConstructAddressUnit(t,r,i,n){return{type:"address",row:t.row,column:t.column,sheet_id:t.sheet_id,label:r,id:i,position:n}}RebuildDependencies(t,r,i,n={addresses:{},ranges:{}},o){if(!i){let s=this.model.sheets.Find(r);s&&(i=s.name)}switch(t.type){case"literal":case"missing":case"operator":break;case"identifier":{let s=this.model.GetName(t.name,o.sheet_id||0);if(s?.type==="expression")this.RebuildDependencies(s.expression,r,i,n,o);else{let a=this.NamedRangeToAddressUnit(t,o);a&&(a.type==="address"?n.addresses[a.label]=a:n.ranges[a.label]=a)}}break;case"structured-reference":{let s=this.model.ResolveStructuredReference(t,o);s&&(s.type==="address"?n.addresses[s.sheet_id+"!"+s.label]=s:n.ranges[s.label]=s);let a=this.model.tables.get(t.table.toLowerCase());if(a){let c=o.row;if(c<a.area.start.row||c>a.area.end.row)break;let d=t.column.toLowerCase(),u=-1;if(a.columns){for(let h=0;h<a.columns.length;h++)if(d===a.columns[h]){u=a.area.start.column+h;break}}if(u>=0){let h={label:t.label,type:"address",row:c,column:u,sheet_id:a.area.start.sheet_id,id:t.id,position:t.position};n.addresses[h.sheet_id+"!"+h.label]=h}}}break;case"address":if(!t.sheet_id)if(t.sheet){let s=this.model.sheets.Find(t.sheet);s&&(t.sheet_id=s.id)}else t.sheet_id=r,t.sheet=i;t.sheet_id?n.addresses[t.sheet_id+"!"+t.label]=t:console.warn("invalid address in range [9d]");break;case"range":if(!t.start.sheet_id)if(t.start.sheet){let s=this.model.sheets.Find(t.start.sheet);s&&(t.start.sheet_id=s.id)}else t.start.sheet_id=r,t.start.sheet=i;t.start.sheet_id?n.ranges[t.start.sheet_id+"!"+t.start.label+":"+t.end.label]=t:console.warn("invalid sheet in range",t);break;case"unary":this.RebuildDependencies(t.operand,r,i,n,o);break;case"binary":this.RebuildDependencies(t.left,r,i,n,o),this.RebuildDependencies(t.right,r,i,n,o);break;case"group":t.elements.forEach(s=>this.RebuildDependencies(s,r,i,n,o));break;case"implicit-call":{for(let s of t.args)this.RebuildDependencies(s,r,i,n,o);this.RebuildDependencies(t.call,r,i,n,o)}break;case"call":{let s=t.args.slice(0),a=this.library.Get(t.name);a&&a.arguments&&a.arguments.forEach((c,d)=>{c&&c.address&&(this.RebuildDependencies(s[d],r,i,void 0,o),s[d]={type:"missing",id:-1})}),s.forEach(c=>this.RebuildDependencies(c,r,i,n,o))}break}return n}UpdateLeafVertex(t,r,i,n){t.Reset(),n&&(this.parser.Save(),this.parser.SetLocaleSettings(n));let o=this.parser.Parse(r);if(o.expression){let s=this.RebuildDependencies(o.expression,i.id,i.name,void 0,{row:0,column:0});for(let a of Object.keys(s.ranges)){let c=s.ranges[a],d=new g(c.start,c.end);d.entire_column||d.entire_row||d.count>1?this.AddLeafVertexArrayEdge(d,t):this.AddLeafVertexEdge(d.start,t)}for(let a of Object.keys(s.addresses)){let c=s.addresses[a];this.AddLeafVertexEdge(c,t)}}t.expression=o.expression||{type:"missing",id:-1},t.expression_error=!o.valid,n&&this.parser.Restore()}RebuildGraphCell(t,r){if(t.spill&&this.options.spill&&(t.spill.start.row===r.row&&t.spill.start.column===r.column?this.AttachSpillData(new g(t.spill.start,t.spill.end)):this.AddEdge(t.spill.start,r)),t.area&&t.area.start.column===r.column&&t.area.start.row===r.row){let{start:i,end:n}=t.area,o=i.sheet_id||r.sheet_id;i.sheet_id||(i.sheet_id=o);for(let s=i.column;s<=n.column;s++)for(let a=i.row;a<=n.row;a++)this.ResetInbound({column:s,row:a,sheet_id:o},!0,!1);this.SetDirty(r);for(let s=i.column;s<=n.column;s++)for(let a=i.row;a<=n.row;a++)a===i.row&&s===i.column||this.AddEdge(i,{...i,row:a,column:s})}if(t.type===1){this.ResetInbound(r,!0);let i=this.parser.Parse(t.value);if(i.expression){if(i.expression.type==="call"){let s=this.library.Get(i.expression.name);s&&(s.render||s.click)&&(t.render_function=s.render,t.click_function=s.click)}let o=this.RebuildDependencies(i.expression,r.sheet_id,"",void 0,r);for(let s of Object.keys(o.ranges)){let a=o.ranges[s],c=new g(a.start,a.end);if(c.entire_row||c.entire_column)this.AddArrayEdge(c,r);else for(let d of c)this.AddEdge(d,r)}for(let s of Object.keys(o.addresses)){let a=o.addresses[s];this.AddEdge(a,r)}}let n=this.GetVertex(r,!0);n&&(n.expression=i.expression||{type:"missing",id:-1},n.expression_error=!i.valid)}else t.value!==t.calculated?this.ResetInbound(r,!0,!1):t.type===0&&this.ResetInbound(r,!0,!1,!0)}RebuildGraph(t){if(t){if(!t.start.sheet_id)throw new Error("subset missing sheet id");let r=this.model.sheets.Find(t.start.sheet_id)?.cells;if(r)for(let i=t.start.row;i<=t.end.row;i++){let n=r.data[i];if(n)for(let o=t.start.column;o<=t.end.column;o++){let s=n[o];s&&this.RebuildGraphCell(s,{row:i,column:o,sheet_id:t.start.sheet_id})}}}else for(let r of this.model.sheets.list||[]){let i=r.cells.data.length;for(let n=0;n<i;n++){let o=r.cells.data[n];if(o){let s=o.length;for(let a=0;a<s;a++){let c=o[a];c&&this.RebuildGraphCell(c,{row:n,column:a,sheet_id:r.id})}}}}}CheckVolatile(t){if(!t.expression||t.expression_error)return!1;let r=!1;return this.parser.Walk(t.expression,i=>{if(i.type==="call"){let n=this.library.Get(i.name);n&&n.volatile&&(r=!0)}return!r}),r}};var Ae=l=>l!==null&&typeof l=="object"&&"row"in l&&"column"in l,wn=l=>l!==null&&typeof l=="object"&&"start"in l&&Ae(l.start)&&"end"in l&&Ae(l.end),Ee=class l{start_;end_;constructor(e,t=e,r=!1){this.end_=this.PatchNull(t),this.start_=this.PatchNull(e),r&&this.Normalize()}static FromColumn(e){return new l({row:1/0,column:e})}static FromRow(e){return new l({row:e,column:1/0})}static ColumnToLabel(e){let t=String.fromCharCode(65+e%26);for(;e>25;)e=Math.floor(e/26)-1,t=String.fromCharCode(65+e%26)+t;return t}static CellAddressToLabel(e,t=!1){if(e.row===1/0&&e.column===1/0)throw new Error("this is going to break something");let r=t?`${e.sheet_id||0}!`:"";return e.row===1/0?r+(e.absolute_column?"$":"")+this.ColumnToLabel(e.column):e.column===1/0?r+(e.absolute_row?"$":"")+(e.row+1):r+(e.absolute_column?"$":"")+this.ColumnToLabel(e.column)+(e.absolute_row?"$":"")+(e.row+1)+(e.spill?"#":"")}static Join(e,...t){let r=new l(e.start,e.end);for(let i of t)i&&(r.ConsumeAddress(i.start),r.ConsumeAddress(i.end));return r}static Bleed(e,t=1){return new l({row:Math.max(0,e.start.row-t),column:Math.max(0,e.start.column-t),sheet_id:e.start.sheet_id},{row:e.end.row+t,column:e.end.column+t})}static PatchArea(e,t){let{before_column:r,column_count:i,before_row:n,row_count:o}=t,s=new l(e.start,e.end),a=e.start.sheet_id;if(i&&r<=s.end.column){if(i>0)r<=s.start.column?s.Shift(0,i):r>s.start.column&&r<=s.end.column?s.ConsumeAddress({row:s.end.row,column:s.end.column+i}):console.warn("AA X case 1",r,i,JSON.stringify(s));else if(i<0)if(r-i<=s.start.column)s.Shift(0,i);else{if(r<=s.start.column&&r-i>s.end.column)return!1;if(r<=s.start.column){let c=r-i-1;s=new l({row:s.start.row,column:c+1+i,sheet_id:a},{row:s.end.row,column:s.end.column+i})}else r<=s.end.column?r-i-1>=s.end.column?s=new l({row:s.start.row,column:s.start.column,sheet_id:a},{row:s.end.row,column:r-1}):s=new l({row:s.start.row,column:s.start.column,sheet_id:a},{row:s.end.row,column:s.start.column+s.columns+i-1}):console.warn("AA X case 2",r,i,JSON.stringify(s))}}if(o&&n<=s.end.row){if(o>0)n<=s.start.row?s.Shift(o,0):n>s.start.row&&n<=s.end.row?s.ConsumeAddress({row:s.end.row+o,column:s.end.column}):console.warn("AA X case 3",n,o,JSON.stringify(s));else if(o<0)if(n-o<=s.start.row)s.Shift(o,0);else{if(n<=s.start.row&&n-o>s.end.row)return!1;if(n<=s.start.row){let c=n-o-1;s=new l({column:s.start.column,row:c+1+o,sheet_id:a},{column:s.end.column,row:s.end.row+o})}else n<=s.end.row?n-o-1>=s.end.row?s=new l({column:s.start.column,row:s.start.row,sheet_id:a},{column:s.end.column,row:n-1}):s=new l({column:s.start.column,row:s.start.row,sheet_id:a},{column:s.end.column,row:s.start.row+s.rows+o-1}):console.warn("AA X case 4",n,o,JSON.stringify(s))}}return s}get start(){return{...this.start_}}set start(e){this.start_=e}get end(){return{...this.end_}}set end(e){this.end_=e}get rows(){return this.start_.row===1/0||this.end_.row===1/0?1/0:this.end_.row-this.start_.row+1}get columns(){return this.start_.column===1/0||this.end_.column===1/0?1/0:this.end_.column-this.start_.column+1}get count(){return this.rows*this.columns}get entire_sheet(){return this.entire_row&&this.entire_column}get entire_column(){return this.start_.row===1/0}get entire_row(){return this.start_.column===1/0}PatchNull(e){let t={...e};return t.row===null&&(t.row=1/0),t.column===null&&(t.column=1/0),t}SetSheetID(e){this.start_.sheet_id=e}Normalize(){let e={...this.start_},t={...this.end_};e.row===1/0||t.row===1/0?e.row=t.row=1/0:e.row>t.row&&(e.row=this.end_.row,e.absolute_row=this.end_.absolute_row,t.row=this.start_.row,t.absolute_row=this.start_.absolute_row),e.column===1/0||t.column===1/0?e.column=t.column=1/0:e.column>t.column&&(e.column=this.end_.column,e.absolute_column=this.end_.absolute_column,t.column=this.start_.column,t.absolute_column=this.start_.absolute_column),this.start_=e,this.end_=t}TopLeft(){let e={row:0,column:0};return this.entire_row||(e.column=this.start.column),this.entire_column||(e.row=this.start.row),e}BottomRight(){let e={row:0,column:0};return this.entire_row||(e.column=this.end.column),this.entire_column||(e.row=this.end.row),e}ContainsRow(e){return this.entire_column||e>=this.start_.row&&e<=this.end_.row}ContainsColumn(e){return this.entire_row||e>=this.start_.column&&e<=this.end_.column}Contains(e){return(this.entire_column||e.row>=this.start_.row&&e.row<=this.end_.row)&&(this.entire_row||e.column>=this.start_.column&&e.column<=this.end_.column)}ContainsArea(e){return this.start.column<=e.start.column&&this.end.column>=e.end.column&&this.start.row<=e.start.row&&this.end.row>=e.end.row}Intersects(e){return!(e.start.column>this.end.column||this.start.column>e.end.column||e.start.row>this.end.row||this.start.row>e.end.row)}Equals(e){return e.start_.row===this.start_.row&&e.start_.column===this.start_.column&&e.end_.row===this.end_.row&&e.end_.column===this.end_.column}Equals2(e){return e.start.row===this.start_.row&&e.start.column===this.start_.column&&e.end.row===this.end_.row&&e.end.column===this.end_.column}Clone(){return new l(this.start,this.end)}get left(){let e=new l(this.start_,this.end_);return e.end_.column=e.start_.column,e}get right(){let e=new l(this.start_,this.end_);return e.start_.column=e.end_.column,e}get top(){let e=new l(this.start_,this.end_);return e.end_.row=e.start_.row,e}get bottom(){let e=new l(this.start_,this.end_);return e.start_.row=e.end_.row,e}Shift(e,t){return this.start_.row+=e,this.start_.column+=t,this.end_.row+=e,this.end_.column+=t,this}ConsumeAddress(e){this.entire_row||(e.column<this.start_.column&&(this.start_.column=e.column),e.column>this.end_.column&&(this.end_.column=e.column)),this.entire_column||(e.row<this.start_.row&&(this.start_.row=e.row),e.row>this.end_.row&&(this.end_.row=e.row))}Reshape(e,t){return this.end_.row=this.start_.row+e-1,this.end_.column=this.start_.column+t-1,this}ConsumeArea(e){this.ConsumeAddress(e.start),this.ConsumeAddress(e.end)}Resize(e,t){return this.end_.row=this.start_.row+e-1,this.end_.column=this.start_.column+t-1,this}[Symbol.iterator](){if(this.entire_row||this.entire_column)throw new Error("don't iterate infinite area");let e=this.start_.row,t=this.start_.column;return{next:()=>{let r={column:t,row:e,sheet_id:this.start_.sheet_id};return t>this.end_.column?{done:!0,value:void 0}:(++e>this.end_.row&&(e=this.start_.row,t++),{value:r})}}}get spreadsheet_label(){let e;return this.entire_sheet?"":this.entire_column?(e=l.ColumnToLabel(this.start_.column),e+=":"+l.ColumnToLabel(this.end_.column),e):this.entire_row?(e=String(this.start_.row+1),e+=":"+(this.end_.row+1),e):(e=l.CellAddressToLabel(this.start_),this.columns>1||this.rows>1?e+":"+l.CellAddressToLabel(this.end_):e)}toJSON(){return{start:{...this.start_},end:{...this.end_}}}};var Yt=l=>typeof l=="object"&&!!l&&typeof l.real=="number"&&typeof l.imaginary=="number",xn=l=>l.real?l.imaginary?l.imaginary>0?`${l.real} + ${l.imaginary}i`:`${l.real} - ${Math.abs(l.imaginary)}i`:l.real.toString():l.imaginary?l.imaginary+"i":"0";var ys=["undefined","formula","string","number","boolean","object","function","error","complex","array","dimensioned_quantity"];var Sn=l=>!l.cells,ws=l=>!!l[0]&&Sn(l[0]);var Gg=ys.map((l,e)=>({[l]:e})).reduce((l,e)=>({...l,...e}),{});var Je=class{static locale="en-us";static decimal_separator=".";static argument_separator=",";static grouping_separator=",";static date_components={short_days:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],long_days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],short_months:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],long_months:["January","February","March","April","May","June","July","August","September","October","November","December"]};static UpdateLocale(e){if(e)this.locale=e;else if(typeof self<"u"){let i=self?.document?.location;if(i&&i.search&&/locale=([^?&]+?)(?:\?|$|&)/.test(i.search)){let n=i.search.match(/locale=(.*?)(?:\?|$|&)/);n&&(this.locale=n[1]),console.info("override locale",this.locale)}else typeof navigator<"u"&&(navigator.languages&&navigator.languages[0]?this.locale=navigator.languages[0]:this.locale=navigator.language)}this.locale==="C"&&(console.warn("Locale not set, defaulting to en-us"),this.locale="en-us");let t=new Intl.NumberFormat(this.locale,{minimumFractionDigits:1}).format(3.3).replace(/\d/g,"");this.decimal_separator=t===","?",":".",this.decimal_separator===","?(this.argument_separator=";",this.grouping_separator=" "):(this.argument_separator=",",this.grouping_separator=",");let r=new Date(2e3,0,2,12,0,0,0);this.UpdateDateComponent(0,0,r),r=new Date(2e3,1,7,12,0,0,0),this.UpdateDateComponent(1,1,r),r=new Date(2e3,2,7,12,0,0,0),this.UpdateDateComponent(2,2,r),r=new Date(2e3,3,5,12,0,0,0),this.UpdateDateComponent(3,3,r),r=new Date(2e3,4,4,12,0,0,0),this.UpdateDateComponent(4,4,r),r=new Date(2e3,5,2,12,0,0,0),this.UpdateDateComponent(5,5,r),r=new Date(2e3,6,1,12,0,0,0),this.UpdateDateComponent(6,6,r),r=new Date(2e3,7,1,12,0,0,0),this.UpdateDateComponent(7,-1,r),r=new Date(2e3,8,1,12,0,0,0),this.UpdateDateComponent(8,-1,r),r=new Date(2e3,9,1,12,0,0,0),this.UpdateDateComponent(9,-1,r),r=new Date(2e3,10,1,12,0,0,0),this.UpdateDateComponent(10,-1,r),r=new Date(2e3,11,1,12,0,0,0),this.UpdateDateComponent(11,-1,r)}static UpdateDateComponent(e,t,r){t>=0&&(this.date_components.short_days[t]=r.toLocaleString(this.locale,{weekday:"short"}),this.date_components.long_days[t]=r.toLocaleString(this.locale,{weekday:"long"})),e>=0&&(this.date_components.short_months[e]=r.toLocaleString(this.locale,{month:"short"}),this.date_components.long_months[e]=r.toLocaleString(this.locale,{month:"long"}))}};Je.UpdateLocale();var Xr=class l{constructor(e=0,t=0,r=0,i=0){this.left=e;this.top=t;this.width=r;this.height=i}get right(){return this.left+this.width}get bottom(){return this.top+this.height}static Create(e){return new l(e.left||0,e.top||0,e.width||0,e.height||0)}static IsRectangle(e){return!!e&&typeof e=="object"&&typeof e.left=="number"&&typeof e.top=="number"&&typeof e.width=="number"&&typeof e.height=="number"}Shift(e=0,t=0){return new l(this.left+e,this.top+t,this.width,this.height)}Scale(e=1,t=e){return new l(this.left*e,this.top*t,this.width*e,this.height*t)}Expand(e=0,t=0){return new l(this.left,this.top,this.width+e,this.height+t)}Combine(e){return new l(Math.min(this.left,e.left),Math.min(this.top,e.top),Math.max(this.right,e.right)-Math.min(this.left,e.left),Math.max(this.bottom,e.bottom)-Math.min(this.top,e.top))}Contains(e,t,r=0){return e>=this.left-r&&e<=this.left+this.width+r&&t>=this.top-r&&t<=this.top+this.height+r}ContextFill(e){e.fillRect(this.left,this.top,this.width,this.height)}ContextStroke(e){e.strokeRect(this.left,this.top,this.width,this.height)}Clamp(e,t){return e=Math.min(Math.max(e,this.left),this.right),t=Math.min(Math.max(t,this.top),this.bottom),{x:e,y:t}}ApplyStyle(e){e.style.top=this.top+"px",e.style.left=this.left+"px",e.style.width=this.width+"px",e.style.height=this.height+"px"}toJSON(){return{top:this.top,left:this.left,width:this.width,height:this.height}}};var Hl=JSON.stringify({}),Gl={Background:0,Text:1,Background2:2,Text2:3,Accent:4,Accent2:5,Accent3:6,Accent4:7,Accent5:8,Accent6:9},An=l=>typeof l.theme=="number"?l.theme:Gl[l.theme]||0,kn=l=>!!l&&typeof l.text=="string",Qr=l=>!!l&&typeof l.theme<"u";var _t={DefaultProperties:{horizontal_align:"",vertical_align:"",number_format:"General",nan:"NaN",font_size:{unit:"em",value:1},bold:!1,italic:!1,underline:!1,strike:!1,text:{theme:1},border_top:0,border_left:0,border_right:0,border_bottom:0},CompositeBorders:l=>({top:{width:l.border_top||0,color:l.border_top_fill||{}},left:{width:l.border_left||0,color:l.border_left_fill||{}},right:{width:l.border_right||0,color:l.border_right_fill||{}},bottom:{width:l.border_bottom||0,color:l.border_bottom_fill||{}}}),Serialize:l=>{let e=JSON.parse(JSON.stringify(l));return e.border_bottom_fill&&!e.border_bottom&&(e.border_bottom_fill=void 0),e.border_top_fill&&!e.border_top&&(e.border_top_fill=void 0),e.border_left_fill&&!e.border_left&&(e.border_left_fill=void 0),e.border_right_fill&&!e.border_right&&(e.border_right_fill=void 0),JSON.stringify(e)},Merge:(l,e,t=!0)=>{let r=t?{...l,...e}:{...e};return JSON.parse(JSON.stringify(r))},Composite:l=>JSON.parse(JSON.stringify(l.reduce((e,t)=>({...e,...t}),{}))),Empty:l=>JSON.stringify(l)===Hl,ParseFontSize:(l="",e="em")=>{let t=l.match(/(-*[\d.]+)\s*(\S*)/);if(t){let r=Number(t[1]);if(!r||isNaN(r)||r<0)return{};let i=t[2].toLowerCase()||e;if(i==="pt"||i==="em"||i==="%"||i==="px")return{font_size:{unit:i,value:r}}}return{}},RelativeFontSize:(l,e)=>{let t=12,r=12;switch(l.font_size?.unit){case"pt":if(!l.font_size.value)return 1;r=l.font_size.value;break;case"px":if(!l.font_size.value)return 1;r=Math.round(l.font_size.value*300/4)/100;break;case"em":return l.font_size.value||1;case"%":return(l.font_size.value||100)/100;default:return 1}switch(e.font_size?.unit){case"pt":if(!e.font_size.value)return 1;t=e.font_size.value;break;case"px":if(!e.font_size.value)return 1;t=Math.round(e.font_size.value*300/4)/100;break;default:return 1}return r/t},FontSize:(l,e=!0)=>{let t=l.font_size?.value;switch(l.font_size?.unit){case"pt":return(t||12)+"pt";case"px":return e?Math.round((t||16)*300/4)/100+"pt":(t||16)+"px";case"em":return(t||1)+"em";case"%":return(t||100)+"%"}return""},CompositeFontSize:(l,e,t=1,r=!1)=>{let i={...l};return e.unit==="pt"||e.unit==="px"?i={...e}:(i.value=e.value*l.value,e.unit==="%"&&(i.value/=100)),i.unit==="px"&&r&&(i.value=Math.round((i.value||16)*300/4)/100),i.value*=t,i},CompositeFont:(l,e,t,r)=>{let i,n,o,s=[];e.bold&&s.push("bold"),e.italic&&s.push("italic");let a=e.font_face||"stack:default";if(a.startsWith("stack:")){let c=r.font_stacks[a.substring(6)||"default"];c||(c=r.font_stacks.default),c&&(n=e.font_size,o=_t.CompositeFontSize(c.size,e.font_size||{unit:"pt",value:10},t),s.push(o.value.toFixed(2)+o.unit),s.push(c.font||""),i=c.variants)}else o=_t.CompositeFontSize(l,e.font_size||{unit:"pt",value:10},t),s.push(o.value.toFixed(2)+o.unit),s.push(a||"");return{font:s.join(" "),variants:i,base:l,size:e.font_size,scale:t,stack_size:n,font_size:o}}};var ee={Darken:(l,e,t,r,i=!1)=>{let{h:n,s:o,l:s}=ee.RGBToHSL(l,e,t);return i?s-=s*r/100:s-=r/100,s=Math.max(0,Math.min(1,s)),ee.HSLToRGB(n,o,s)},Lighten:(l,e,t,r,i=!1)=>{let{h:n,s:o,l:s}=ee.RGBToHSL(l,e,t);return i?s+=s*r/100:s+=r/100,s=Math.max(0,Math.min(1,s)),ee.HSLToRGB(n,o,s)},RGBToHSL:(l,e,t)=>{l/=255,e/=255,t/=255;let r=Math.max(l,e,t),i=Math.min(l,e,t),n=0,o=0,s=(r+i)/2;if(r===i)n=o=0;else{let a=r-i;switch(o=s>.5?a/(2-r-i):a/(r+i),r){case l:n=(e-t)/a+(e<t?6:0);break;case e:n=(t-l)/a+2;break;case t:n=(l-e)/a+4;break}n/=6}return{h:n*360,s:o,l:s}},HSLToRGB:(l,e,t)=>{let r,i,n;if(e===0)r=i=n=t;else{l=l/360;let o=t<.5?t*(1+e):t+e-t*e,s=2*t-o;r=ee.HueToRGB(s,o,l+.3333333333333333),i=ee.HueToRGB(s,o,l),n=ee.HueToRGB(s,o,l-.3333333333333333)}return{r:Math.round(r*255),g:Math.round(i*255),b:Math.round(n*255)}},HueToRGB:(l,e,t)=>(t<0&&(t+=1),t>1&&(t-=1),t<.16666666666666666?l+(e-l)*6*t:t<.5?e:t<.6666666666666666?l+(e-l)*(.6666666666666666-t)*6:l),GetLuminance:([l,e,t])=>{let r=[l,e,t].map(i=>(i/=255,i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4)));return .2126*r[0]+.7152*r[1]+.0722*r[2]},WeightedLuminance:([l,e,t],r=[1,1,1])=>{let i=[l,e,t].map(n=>(n/=255,n<=.03928?n/12.92:Math.pow((n+.055)/1.055,2.4)));return .2126*i[0]*r[0]+.7152*i[1]*r[1]+.0722*i[2]*r[2]},GetContrastRatio:l=>(l.sort((e,t)=>t-e),(l[0]+.05)/(l[1]+.05)),GetTextColor:(l,e,t)=>{let r=[.4,.3,.3],i=ee.WeightedLuminance(l,r),n=ee.WeightedLuminance(e,r),o=ee.WeightedLuminance(t,r),s=ee.GetContrastRatio([n,i]),a=ee.GetContrastRatio([o,i]);return s>a?e:t}};var Bl="http://www.w3.org/2000/svg",Me=class l{static instances=[];static GetInstance(e){for(let r of this.instances)if(r.doc===e)return r;let t=new l(e);return this.instances.push(t),t}doc;view;get HTMLElement(){return this.view?.HTMLElement}constructor(e){e&&(this.doc=e,this.view=e?.defaultView)}GetSelection(){return this.view?.getSelection()}Div(e,t,r){return this.Create("div",e,t,r)}ClassNames(e,t){e.classList.add(...(Array.isArray(t)?t:[t]).reduce((r,i)=>[...r,...i.split(/\s+/g)],[]))}SVG(e,t,r){let i=this.doc.createElementNS(Bl,e);return t&&this.ClassNames(i,t),r&&r.appendChild(i),i}Text(e){return this.doc.createTextNode(e)}Fragment(){return this.doc.createDocumentFragment()}Create(e,t,r,i){let n=this.doc.createElement(e);if(t&&this.ClassNames(n,t),i){if(i.attrs)for(let[o,s]of Object.entries(i.attrs))n.setAttribute(o,s);if(i.data)for(let[o,s]of Object.entries(i.data))n.dataset[o]=s;if(i.text&&(n.textContent=i.text),i.html&&(n.innerHTML=i.html),i.events)for(let[o,s]of Object.entries(i.events))n.addEventListener(o,s);if(i.style)for(let[o,s]of Object.entries(i.style))n.style[o]=s}return r&&r.appendChild(n),n}};var Yr={default:"Sans-serif","old-style":"Old style",transitional:"Serif",handwritten:"Handwritten",monospace:"Monospace",industrial:"Industrial sans",ui:"System UI"};var $l=(l,e)=>{let t=An(e),r=e.tint||0;l.mode==="dark"&&(r=-r),l.tint_cache||(l.tint_cache=[]),l.tint_cache[t]||(l.tint_cache[t]={});let i=l.tint_cache[t][r];if(!i){let n=(l.theme_colors_rgb?l.theme_colors_rgb[t]:[0,0,0])||[0,0,0],o;r>0?o=ee.Lighten(n[0],n[1],n[2],r*100,!0):o=ee.Darken(n[0],n[1],n[2],-r*100,!0),i=`rgb(${o.r},${o.g},${o.b})`,l.tint_cache[t][r]=i}return i},gt=(l,e,t)=>{if(e&&e.offset){if(e.offset.offset)return console.warn("invalid offset color"),"";let r="";if(kn(e.offset)){let n=W.MeasureColor(e.offset.text);r=`rgb(${n[0]}, ${n[1]}, ${n[2]})`}else r=gt(l,e.offset,void 0);if(l.offset_cache&&l.offset_cache[r])return l.offset_cache[r];let i=l.offset_light;if(r){let n=r.match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/);if(n){let o=[Number(n[1]),Number(n[2]),Number(n[3])],s=Array.from(W.MeasureColor(l.offset_dark)),a=Array.from(W.MeasureColor(l.offset_light)),c=ee.GetTextColor(o,s,a);i=`rgb(${c[0]}, ${c[1]}, ${c[2]})`}else console.warn("can't offset against color",r,"(1)");l.offset_cache||(l.offset_cache={}),l.offset_cache[r]=i}else console.warn("can't resolve offset color",e.offset,"(2)");return i}return kn(e)?e.text==="none"?"":e.text:Qr(e)?e.tint?$l(l,e):l.theme_colors?l.theme_colors[An(e)]:"":(t||t===0)&&l.theme_colors?l.theme_colors[t]:""};var Rn=(l,e=.7)=>{let t={border_top:1,border_top_fill:{theme:l},border_bottom:1,border_bottom_fill:{theme:l}};return{header:{text:{offset:{theme:l}},fill:{theme:l},bold:!0,...t},odd:{fill:{theme:l,tint:e},...t},even:{...t},total:{...t,border_top:2}}};var Zr=class{constructor(e,t,r="RGB"){this.color_space=r;this.mapped=e.map(i=>{if(i.value<0||i.value>1)throw new Error("invalid stop value");let n=W.MeasureColor(gt(t,i.color)),o=[];if(r==="HSL"){let s=ee.RGBToHSL(n[0],n[1],n[2]);o=[s.h,s.s,s.l]}else o=[...n];return{...i,resolved:o}}),this.mapped.sort((i,n)=>i.value-n.value),this.mapped[0].value>0&&this.mapped.unshift({...this.mapped[0],value:0}),this.mapped[this.mapped.length-1].value<1&&this.mapped.push({...this.mapped[this.mapped.length-1],value:1})}mapped;RenderColor(e){return this.color_space==="RGB"?{text:`rgb(${e})`}:{text:`hsl(${e[0]},${e[1]*100}%,${e[2]*100}%)`}}Interpolate(e){e=Math.min(1,Math.max(0,e));for(let[t,r]of this.mapped.entries()){if(e===r.value)return this.RenderColor(r.resolved);if(e<r.value){let i=this.mapped[t-1],n=r,o=n.value-i.value,s=e-i.value,a=[0,1,2].map(c=>i.resolved[c]+(n.resolved[c]-i.resolved[c])/o*s);return this.RenderColor(a)}}return{text:""}}};var Jl=1e3,ei=class{constructor(e=!1,t){this.verbose=e;this.log_id=t}queue=[];dispatched=!1;subscribers=[];Publish(e){this.verbose&&console.info(`es publish (${this.log_id})`,e),Array.isArray(e)?this.queue.push(...e):this.queue.push(e),this.dispatched||(this.dispatched=!0,Promise.resolve().then(()=>{let t=this.queue.slice(0);this.dispatched=!1,this.queue=[];for(let r of t)for(let i of this.subscribers)i.subscriber(r)}))}Subscribe(e){let t=Jl++;return this.subscribers.push({subscriber:e,token:t}),t}Cancel(e){this.subscribers=this.subscribers.filter(t=>t.token!==e)}CancelAll(){this.subscribers=[]}};var ti=class{static color_measurement_canvas;static text_measurement_node;static color_cache={};static MeasureColorARGB(e){let t=this.MeasureColor(e),r="FF";for(let i=0;i<3;i++){let n=t[i].toString(16);n.length===0?r+="00":n.length===1?r+=`0${n}`:r+=n}return r.toUpperCase()}static MeasureColor(e){let t=this.color_cache[e];if(t)return t;this.color_measurement_canvas||(this.color_measurement_canvas=document.createElement("canvas"),this.color_measurement_canvas.width=1,this.color_measurement_canvas.height=1);let r=this.color_measurement_canvas.getContext("2d",{willReadFrequently:!0});return r?(r.fillStyle="#fff",r.fillRect(0,0,1,1),r.fillStyle=e,r.fillRect(0,0,1,1),t=new Uint8ClampedArray(r.getImageData(0,0,1,1).data),this.color_cache[e]=t,t):new Uint8ClampedArray(3)}static EnsureMeasurementNode(){if(!this.text_measurement_node){let e=document.querySelector(".treb-chart-measurement-node");e?this.text_measurement_node=e:(this.text_measurement_node=document.createElement("div"),this.text_measurement_node.classList.add("treb-chart-measurement-node"),this.text_measurement_node.style.margin="0px",this.text_measurement_node.style.padding="0px",this.text_measurement_node.style.height="initial",this.text_measurement_node.style.width="initial",this.text_measurement_node.style.whiteSpace="nowrap",this.text_measurement_node.style.position="fixed",this.text_measurement_node.style.border="0px",this.text_measurement_node.style.border="1px solid red",this.text_measurement_node.style.boxSizing="content-box",this.text_measurement_node.style.top=this.text_measurement_node.style.left="-1000px",document.body.appendChild(this.text_measurement_node))}}static FontLoaded(e,t=!1,r=400){let i=`${t?"italic":""} ${r} 20pt ${e}`,n=this.MeasureText(`${i}, sans-serif`,"check font"),o=this.MeasureText(`${i}, serif`,"check font"),s=this.MeasureText(`${i}, monospace`,"check font");return n.width===o.width&&o.width===s.width}static MeasureText(e,t,r=0){this.EnsureMeasurementNode(),this.text_measurement_node.style.font=e,/\n/.test(t)?(t=t.replace(/\n/g,"<BR/>"),this.text_measurement_node.innerHTML=t):this.text_measurement_node.textContent=t,this.text_measurement_node.style.lineHeight="1em",r?this.text_measurement_node.style.transform=`rotate(${r}deg)`:this.text_measurement_node.style.transform="";let i=this.text_measurement_node.getBoundingClientRect();return{width:i.width,height:i.height}}};var Wl={data:!0,same_origin:!0,remote:!1},xs=(l,e={})=>{let t={...Wl,...e};try{let r=new URL(l,document.location.href);return r.protocol==="data:"?t.data?r.href:void 0:r.origin===document.location.origin?t.same_origin?r.href:void 0:t.remote?r.hash:void 0}catch(r){console.error(r)}};var We=class{date_format=!1;string_format=!1;fraction_format=!1;twelve_hour=!1;fraction_denominator=0;fraction_integer=!0;fraction_align=0;fraction_denominator_digits=0;integer_min_digits=0;decimal_min_digits=0;decimal_max_digits=0;grouping=!1;has_number_format=!1;prefix=[{text:""}];suffix=[{text:""}];scaling=0;percent=!1;exponential=!1;has_asterisk=!1};var Cs=42,Ss=95,Tn=63,ri=48,As=46,En=44,ks=37,Mn=34,Zt=35,Rs=59,ii=92,Ts=64,ql=91,Kl=93,Es=69,Ms=101,Xl=72,Ql=104,Yl=77,Zl=109,ec=83,tc=115,rc=68,ic=100,nc=89,oc=121,sc=65,ac=97;var ni=class{static date_pattern=!1;static pattern="";static char_index=0;static characters=[];static sections=[];static current_section=new We;static preserve_formatting_characters=!1;static decimal_mark=As;static group_separator=En;static Parse(e){if(this.pattern=e,this.characters=e.split("").map(t=>t.charCodeAt(0)),this.char_index=0,this.current_section=new We,this.sections=[this.current_section],this.ParseDatePattern())return this.sections;for(this.char_index=0,this.current_section=new We,this.sections=[this.current_section];this.char_index<this.characters.length;)this.ConsumeChar();return this.sections}static ConsumeString(){let e="";for(this.preserve_formatting_characters&&(e+=this.pattern[this.char_index]),++this.char_index;this.char_index<this.characters.length;this.char_index++)switch(this.characters[this.char_index]){case ii:this.preserve_formatting_characters&&(e+=this.pattern[this.char_index]),this.char_index+1<this.characters.length&&(e+=this.pattern[++this.char_index]);break;case Mn:return this.preserve_formatting_characters&&(e+=this.pattern[this.char_index]),this.char_index++,e;default:e+=this.pattern[this.char_index];break}throw new Error("unterminated string")}static ConsumeFormatting(){let e="";for(++this.char_index;this.char_index<this.characters.length;this.char_index++)switch(this.characters[this.char_index]){case ii:throw new Error("invalid escape character in formatting block");case Kl:return this.char_index++,e;default:e+=this.pattern[this.char_index];break}throw new Error("unterminated format")}static ScanFractionFormat(){let e=/^([#?]+ +){0,1}([#?]+)\/([#?0-9]+)(?:$|[^#?0-9])/,r=this.pattern.substr(this.char_index).match(e);if(!r)return!1;let i=(r[1]||"").length+r[2].length+r[3].length+1;this.current_section.fraction_format=!0,this.current_section.fraction_integer=!!r[1];let n=Number(r[3]);return isNaN(n)||(this.current_section.fraction_denominator=n),this.current_section.decimal_max_digits=this.current_section.fraction_denominator_digits=r[3].length,this.char_index+=i,this.current_section.has_number_format=!0,!0}static ConsumeNumberFormat(){let e=0;for(this.char_index;this.char_index<this.characters.length;this.char_index++)switch(this.characters[this.char_index]){case this.group_separator:{let r=!1;for(let i=this.char_index+1;!r&&i<this.characters.length;i++){let n=this.characters[i];if(n===this.decimal_mark||n===Zt||n===ri)r=!0;else if(n!==En)break}if(r){if(e===1)throw new Error("invalid grouping in decimal part");this.current_section.grouping=!0}else this.current_section.scaling=(this.current_section.scaling||1)*1e3}break;case this.decimal_mark:if(e===1)throw new Error("too many decimal marks");e=1;break;case Zt:e===1?this.current_section.decimal_max_digits++:this.current_section.integer_min_digits&&this.current_section.integer_min_digits++;break;case ri:e===1?(this.current_section.decimal_max_digits++,this.current_section.decimal_min_digits=this.current_section.decimal_max_digits):this.current_section.integer_min_digits++;break;default:return}}static AppendCharAsText(e=!0){this.current_section.has_number_format?this.current_section.suffix[this.current_section.suffix.length-1].text+=this.pattern[this.char_index]:this.current_section.prefix[this.current_section.prefix.length-1].text+=this.pattern[this.char_index],e&&this.char_index++}static AppendString(e){this.current_section.has_number_format?this.current_section.suffix[this.current_section.suffix.length-1].text+=e:this.current_section.prefix[this.current_section.prefix.length-1].text+=e}static AppendTextPart(e){this.current_section.has_number_format?(this.current_section.suffix.push(e),this.current_section.suffix.push({text:""})):(this.current_section.prefix.push(e),this.current_section.prefix.push({text:""}))}static ConsumeChar(){let e=this.characters[this.char_index];if(!((e===Tn||e===Zt)&&!this.current_section.has_number_format&&!this.current_section.string_format&&this.ScanFractionFormat()))switch(e){case Rs:this.char_index++,this.current_section=new We,this.sections.length===3&&(this.current_section.string_format=!0),this.sections.push(this.current_section);break;case Ts:this.char_index++,this.AppendTextPart({text:"@",flag:5}),this.current_section.string_format=!0;break;case ri:case Zt:case As:case En:!this.current_section.has_number_format&&!this.current_section.string_format?(this.ConsumeNumberFormat(),this.current_section.has_number_format=!0):this.AppendCharAsText();break;case ql:this.AppendTextPart({text:this.ConsumeFormatting(),flag:6});break;case Mn:this.AppendString(this.ConsumeString());break;case Tn:this.preserve_formatting_characters?this.AppendCharAsText():(this.AppendTextPart({text:"0",flag:1}),this.char_index++);break;case Ss:if(this.preserve_formatting_characters)this.AppendCharAsText();else{if(++this.char_index>=this.characters.length)throw new Error("invalid pad character at end");this.AppendTextPart({text:this.pattern[this.char_index++],flag:1})}break;case Cs:if(this.current_section.has_asterisk)throw new Error("we don't support multiple asterisks");if(this.preserve_formatting_characters)this.AppendCharAsText();else{if(++this.char_index>=this.characters.length)throw new Error("invalid pad character at end");this.AppendTextPart({text:this.pattern[this.char_index++],flag:2}),this.current_section.has_asterisk=!0}break;case Ms:case Es:this.current_section.percent||this.current_section.exponential||this.current_section.string_format?this.AppendCharAsText():(this.current_section.exponential=!0,this.char_index++);break;case ks:!this.current_section.exponential&&!this.current_section.string_format&&(this.current_section.percent=!0),this.AppendCharAsText();break;case ii:if(this.preserve_formatting_characters&&this.AppendCharAsText(!1),++this.char_index>=this.characters.length)throw new Error("invalid escape character at end");this.AppendCharAsText();break;default:this.AppendCharAsText()}}static ParseDatePattern(){for(this.date_pattern=!0;this.date_pattern&&this.char_index<this.pattern.length;)this.DatePatternConsumeChar();if(this.date_pattern){this.date_pattern=!1;for(let e of this.sections)for(let t of e.prefix)t.flag&&t.flag&7&&(this.date_pattern=!0)}return this.date_pattern&&(this.sections[0].date_format=!0,this.sections[0].prefix.forEach((e,t)=>{if(e.flag===3&&(e.text==="mm"||e.text==="m")){if(t)for(let r=t-1;r;r--){let i=this.sections[0].prefix[r];if(i.flag===3){/h/i.test(i.text)&&(e.flag=4,e.text=e.text.toLowerCase());break}}if(t<this.sections[0].prefix.length-1)for(let r=t+1;r<this.sections[0].prefix.length;r++){let i=this.sections[0].prefix[r];if(i.flag===3){/s/i.test(i.text)&&(e.flag=4,e.text=e.text.toLowerCase());break}}}})),this.date_pattern}static ConsumeDatePart(){let e=this.pattern[this.char_index++],t=e.toLowerCase(),r={text:e,flag:3};for(;this.pattern[this.char_index]&&this.pattern[this.char_index].toLowerCase()===t;)r.text+=this.pattern[this.char_index++];if(t==="s"&&this.pattern[this.char_index]===".")for(r.text+=this.pattern[this.char_index++];this.pattern[this.char_index]==="0";)r.text+=this.pattern[this.char_index++];return r}static ConsumeAMPM(){let e=this.pattern.substr(this.char_index,5);if(e==="am/pm"||e==="AM/PM")return this.char_index+=5,this.sections[0].twelve_hour=!0,{text:e,flag:3};if(e=this.pattern.substr(this.char_index,3),e==="a/p"||e==="A/P")return this.char_index+=3,this.sections[0].twelve_hour=!0,{text:e,flag:3}}static DatePatternConsumeChar(){switch(this.characters[this.char_index]){case Rs:this.char_index=this.characters.length;break;case ri:case Zt:case Ms:case Es:case ks:case Ts:this.date_pattern=!1;break;case Xl:case Ql:case Yl:case Zl:case ec:case tc:case rc:case ic:case nc:case oc:this.AppendTextPart(this.ConsumeDatePart());break;case sc:case ac:{let t=this.ConsumeAMPM();t?this.AppendTextPart(t):this.AppendCharAsText()}break;case Mn:this.AppendString(this.ConsumeString());break;case Tn:this.preserve_formatting_characters?this.AppendCharAsText():(this.AppendTextPart({text:"0",flag:1}),this.char_index++);break;case Ss:if(this.preserve_formatting_characters)this.AppendCharAsText();else{if(++this.char_index>=this.characters.length)throw new Error("invalid pad character at end");this.AppendTextPart({text:this.pattern[this.char_index++],flag:1})}break;case Cs:if(this.current_section.has_asterisk)throw new Error("we don't support multiple asterisks");if(this.preserve_formatting_characters)this.AppendCharAsText();else{if(++this.char_index>=this.characters.length)throw new Error("invalid pad character at end");this.AppendTextPart({text:this.pattern[this.char_index++],flag:2}),this.current_section.has_asterisk=!0}break;case ii:if(this.preserve_formatting_characters&&this.AppendCharAsText(!1),++this.char_index>=this.characters.length)throw new Error("invalid escape character at end");this.AppendCharAsText();break;default:this.AppendCharAsText()}}};var Un=l=>(l>=60&&l--,new Date(-22090752e5+864e5*l)),oi=(l,e=!0)=>{if(e){let t=new Date(l);l=new Date(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()).getTime()}return l=(l+22090752e5)/864e5,l>=60&&l++,l},ze=class l{static grouping_regexp=/\d{1,3}(?=(\d{3})+(?!\d))/g;static fraction_limits=[9,99,999,9999];static imaginary_character="\u{1D456}";static minus_character="-";magic_decimal=!1;transform_value;_pattern="";sections;decimal_zero_regexp=[];cloned=[];get pattern(){return this._pattern}get date_format(){return this.sections[0]&&this.sections[0].date_format}constructor(e){if(this._pattern=e,this.sections=ni.Parse(e),this.sections.length||(this.sections=[]),this.sections[0]||(this.sections[0]=new We),this.sections[1]||(this.sections[1]={...this.sections[0]},this.sections[1].prefix=JSON.parse(JSON.stringify(this.sections[1].prefix)),this.sections[1].suffix=JSON.parse(JSON.stringify(this.sections[1].suffix)),this.sections[1].prefix.push({text:"-"}),this.cloned[1]=!0),this.sections[2]||(this.sections[2]={...this.sections[0]},this.cloned[2]=!0),!this.sections[3]){for(let t of this.sections[0].prefix)if(t.flag===5){this.sections[3]={...this.sections[0]},this.sections[3].string_format=!0,this.cloned[3]=!0;break}}this.decimal_zero_regexp=this.sections.map(t=>{if(t.decimal_max_digits>t.decimal_min_digits)return new RegExp(`0{1,${t.decimal_max_digits-t.decimal_min_digits}}(?:$|e)`)})}static FormatPartsAsText(e,t=0){let r=-1,i=e.map((n,o)=>{switch(n.flag){case 2:return r=o,n.text;case 1:return n.text.replace(/./g," ");case 6:return"";default:return n.text}});if(r>=0&&t){let n=i.reduce((s,a,c)=>c===r?s:s+a.length,0),o="";for(let s=0;s<t-n;s++)o+=i[r];i[r]=o}return i.join("")}SetDecimal(e){for(let t of this.sections)t.fraction_format||(t.decimal_min_digits=e,t.decimal_max_digits=e)}IncreaseDecimal(){this.sections.forEach(e=>{e.fraction_format?e.fraction_denominator||(e.fraction_denominator_digits=Math.min(e.fraction_denominator_digits+1,4)):(e.decimal_min_digits++,e.decimal_max_digits=e.decimal_min_digits)})}DecreaseDecimal(){this.sections.forEach(e=>{e.fraction_format?e.fraction_denominator||(e.fraction_denominator_digits=Math.max(e.fraction_denominator_digits-1,1)):(e.decimal_min_digits=Math.max(0,e.decimal_min_digits-1),e.decimal_max_digits=e.decimal_min_digits)})}AddGrouping(){this.sections.forEach(e=>{e.grouping=!0})}RemoveGrouping(){this.sections.forEach(e=>{e.grouping=!1})}ToggleGrouping(){let e=!this.sections[0].grouping;this.sections.forEach(t=>{t.grouping=e})}toString(){return this.sections[0].date_format?this._pattern:this.sections.filter((e,t)=>!this.cloned[t]).map(e=>{let t="",r=0;if(e.fraction_format){e.fraction_integer&&(t+="? ");let i="";for(let n=0;n<e.fraction_denominator_digits;n++)i+="#";t+=i,t+="/",e.fraction_denominator?t+=e.fraction_denominator:t+=i}else if(e.has_number_format){for(r=0;r<e.integer_min_digits;r++)t+="0";if(e.grouping&&(t.length<4&&(t=("####"+t).slice(-4)),t=t.replace(/[\d#]{1,3}(?=([\d#]{3})+(?![\d#]))/g,"$&,")),e.decimal_max_digits||e.decimal_min_digits){for(t+=".",r=0;r<e.decimal_min_digits;r++)t+="0";for(;r<e.decimal_max_digits;r++)t+="#"}if(e.scaling){let i=Math.log10(e.scaling)/3;for(r=0;r<i;r++)t+=","}e.exponential&&(t+="e")}return e.prefix.map(i=>i.flag===1?i.text==="0"?"?":"_"+i.text:i.flag===2?"*"+i.text:i.flag===6?"["+i.text+"]":i.text).join("")+t+e.suffix.map(i=>i.flag===1?i.text==="0"?"?":"_"+i.text:i.flag===2?"*"+i.text:i.text).join("")}).join(";")}FormatDimensionedQuantity(e){if(this.transform_value){let r=this.transform_value(e);if(Tt(r))e=r;else return typeof r=="string"?r:this.FormatParts(r)}let t=this.FormatParts(e.value||0);return e.unit&&t.push({text:" "},{text:e.unit}),t}FormatComplex(e){if(e.imaginary===1/0||e.imaginary===-1/0||e.real===1/0||e.real===-1/0)return[{text:"Infinity"}];let t=[],r=[],i=!1,n=!!e.imaginary;n&&(t=this.FormatParts(e.imaginary),n=t.some(a=>/[1-9]/.test(a.text)),t.length===1&&this.sections[0].integer_min_digits<=1&&t[0].text==="1"?(t[0].text="",i=!0):t.length===1&&this.sections[1].integer_min_digits<=1&&t[0].text==="-1"&&(t[0].text="-",i=!0));let o=!!e.real;o&&(r=this.FormatParts(e.real),o=r.some(a=>/[1-9]/.test(a.text)));let s=[];if(o||!o&&!n){if(s.push(...r),n){s.push({text:e.imaginary<0?` ${l.minus_character} `:" + "});let a=i?[]:this.FormatParts(Math.abs(e.imaginary));s.push(...a,{text:l.imaginary_character})}}else n&&s.push(...t,{text:l.imaginary_character});return s}FormatParts(e){if(typeof e!="number"&&!this.sections[3])return[{text:(e??"").toString()}];let{parts:t,section:r}=this.BaseFormat(e),i=[];if(r.date_format||r.string_format)for(let n of t)typeof n=="string"?i.push({text:n}):i.push(n);else this.magic_decimal&&t[1]===""&&t.splice(1,1),i=[...r.prefix.map(n=>({...n})),{text:r.has_number_format?t.join(V.decimal_separator):""},...r.suffix.map(n=>({...n}))];for(let n=1;n<i.length;n++)i[n].flag===i[n-1].flag&&(i[n].text=i[n-1].text+i[n].text,i[n-1].text="");return i.filter(n=>n.text)}Format(e,t=0){return l.FormatPartsAsText(this.FormatParts(e),t)}ZeroPad(e,t){for(;e.length<t;)e="0"+e;return e}DateFormat(e){let t=Un(e),r=this.sections[0],i=t.getUTCHours();return r.twelve_hour&&(i>12&&(i-=12),i===0&&(i=12)),{parts:r.prefix.map(o=>{if(o.flag===4)return o.text==="mm"?{text:this.ZeroPad(t.getUTCMinutes().toString(),2)}:{text:this.ZeroPad(t.getUTCMinutes().toString(),1)};if(o.flag===3){switch(o.text.toLowerCase()){case"am/pm":case"a/p":{let a=o.text.split("/");return{text:t.getUTCHours()>12?a[1]:a[0]}}case"mmmmm":return{text:V.date_components.long_months[t.getUTCMonth()][0]};case"mmmm":return o.text==="MMMM"?{text:V.date_components.long_months[t.getUTCMonth()].toUpperCase()}:{text:V.date_components.long_months[t.getUTCMonth()]};case"mmm":return o.text==="MMM"?{text:V.date_components.short_months[t.getUTCMonth()].toUpperCase()}:{text:V.date_components.short_months[t.getUTCMonth()]};case"mm":return{text:this.ZeroPad((t.getUTCMonth()+1).toString(),2)};case"m":return{text:this.ZeroPad((t.getUTCMonth()+1).toString(),1)};case"ddddd":case"dddd":return o.text==="DDDDD"||o.text==="DDDD"?{text:V.date_components.long_days[t.getUTCDay()].toUpperCase()}:{text:V.date_components.long_days[t.getUTCDay()]};case"ddd":return o.text==="DDD"?{text:V.date_components.short_days[t.getUTCDay()].toUpperCase()}:{text:V.date_components.short_days[t.getUTCDay()]};case"dd":return{text:this.ZeroPad(t.getUTCDate().toString(),2)};case"d":return{text:this.ZeroPad(t.getUTCDate().toString(),1)};case"yyyy":case"yyy":return{text:t.getUTCFullYear().toString()};case"yy":case"y":return{text:this.ZeroPad((t.getUTCFullYear()%100).toString(),2)};case"hh":return{text:this.ZeroPad(i.toString(),2)};case"h":return{text:this.ZeroPad(i.toString(),1)};case"ss":return{text:this.ZeroPad(t.getUTCSeconds().toString(),2)};case"s":return{text:this.ZeroPad(t.getUTCSeconds().toString(),1)}}let s=o.text.match(/^(s+)\.(0+)$/);if(s)return{text:this.ZeroPad(t.getUTCSeconds().toString(),s[1].length)+V.decimal_separator+(t.getUTCMilliseconds()/1e3).toFixed(s[2].length).substr(2)}}return{...o}}),section:r}}StringFormat(e,t){let r=[];for(let i of t.prefix)i.flag===5?r.push({text:e}):r.push({...i});return{parts:r,section:t}}Round2(e,t){let r=Math.pow(10,t);return Math.round(r*e)/r}FormatFraction(e,t){t.percent&&(e*=100);let r={denominator:1,numerator:Math.round(e),error:Math.abs(Math.round(e)-e)};if(t.fraction_denominator)r.denominator=t.fraction_denominator,r.numerator=Math.round(e*r.denominator);else if(r.error){let n=l.fraction_limits[t.fraction_denominator_digits-1]||l.fraction_limits[0];for(let o=2;o<=n;o++){let s=Math.round(e*o),a=Math.abs(s/o-e);if(a<r.error&&(r={numerator:s,denominator:o,error:a},!a))break}}let i=[];if(t.fraction_integer){let n=Math.floor(r.numerator/r.denominator);r.numerator%=r.denominator,(n||!r.numerator)&&(i.push(n.toString()),r.numerator&&i.push(" "))}else r.numerator||i.push("0");return r.numerator&&(i.push(r.numerator.toString()),i.push("/"),i.push(r.denominator.toString())),i.join("")}BaseFormat(e){if(this.sections[0].date_format)return this.DateFormat(Number(e));if(typeof e!="number")return this.StringFormat((e??"").toString(),this.sections[3]);let t=this.sections[0],r=this.decimal_zero_regexp[0];e<0&&(t=this.sections[1]);let i=t.percent?t.decimal_max_digits+2:t.decimal_max_digits,n=Math.pow(10,-i)/2,o=Math.abs(e);if(o<n&&(t=this.sections[2],r=this.decimal_zero_regexp[2]),t.scaling&&(o/=t.scaling,o<n&&(t=this.sections[2],r=this.decimal_zero_regexp[2])),t.string_format)return this.StringFormat(e.toString(),t);let s="";if(t.fraction_format)return{parts:[this.FormatFraction(o,t)],section:t};t.exponential?s=o.toExponential(t.decimal_max_digits):(t.percent&&(o*=100),s=this.Round2(o,t.decimal_max_digits).toFixed(t.decimal_max_digits)),r&&(s=s.replace(r,""));let a=s.split(".");for(;a[0].length<t.integer_min_digits;)a[0]=("0000000000000000"+a[0]).slice(-t.integer_min_digits);return t.integer_min_digits===0&&a[0]==="0"&&(a[0]=""),t.grouping&&(a[0]=a[0].replace(l.grouping_regexp,"$&"+V.grouping_separator)),{parts:a,section:t}}};var me=class{static cache={};static complex_general;static symbolc_name_map={};static base_formats={Accounting:"_(#,##0.00_);(#,##0.00);-???",Number:"0.00",Integer:"0",Percent:"0.00%",General:"0.######",Fraction:"# ?/?",Dollar:"$* _(#,##0.00_);$* (#,##0.00);$* -???",Exponential:"0.000e","Short Date":"mm/dd/yy","Long Date":"dddd, mmm d yyyy",Timestamp:"mm-dd-yy hh:mm:ss"};static aliases={Scientific:"Exponential",Percentage:"Percent",Currency:"Dollar"};static Get(e,t=!1){if(t&&e==="General")return this.complex_general;let r=this.symbolc_name_map[e.toLowerCase()],i=this.cache[r||e];return i||(i=new ze(e),this.cache[e]=i),i}static Equals(e,t){if(e===t)return!0;let r=this.Get(e),i=this.Get(t);return r.pattern===i.pattern}static Translate(e){let t=this.symbolc_name_map[e.toLowerCase()];return t?this.cache[t].toString():e}static SymbolicName(e){for(let t of Object.keys(this.base_formats))if(e===this.base_formats[t])return t;return null}static InitCache(){for(let e of Object.keys(this.base_formats))this.cache[e]=new ze(this.base_formats[e]),this.symbolc_name_map[e.toLowerCase()]=e;this.cache.General.magic_decimal=!0,this.complex_general=new ze("0.###"),this.complex_general.magic_decimal=!0;for(let e of Object.keys(this.aliases))this.cache[e]=this.cache[this.aliases[e]],this.symbolc_name_map[e.toLowerCase()]=e}};me.InitCache();var Us=new Date().getUTCFullYear(),Dn=class{compare_day;compare_month;TestDate(e){let t=Date.parse(e);if(isNaN(t))return!1;let r=new Date(t),n=e.replace(/[\d\-\\/,.\s]+/g," ").toLocaleLowerCase().split(/\s+/).map(a=>a.trim()).filter(a=>!!a);if(!n.length)return t;if(!this.compare_month){this.compare_month={};for(let a=0;a<12;a++)this.compare_month[V.date_components.long_months[a].toLocaleLowerCase().replace(/\./,"")]=a,this.compare_month[V.date_components.short_months[a].toLocaleLowerCase().replace(/\./,"")]=a}if(!this.compare_day){this.compare_day={};for(let a=0;a<7;a++)this.compare_day[V.date_components.long_days[a].toLocaleLowerCase().replace(/\./,"")]=a,this.compare_day[V.date_components.short_days[a].toLocaleLowerCase().replace(/\./,"")]=a}let o=!1,s=!1;for(let a of n){let c=!1;for(let[d,u]of Object.entries(this.compare_month))if(a===d){if(o||r.getUTCMonth()!==u)return!1;c=!0,o=!0}if(!c){for(let[d,u]of Object.entries(this.compare_day))if(a===d){if(s||r.getUTCDay()!==u)return!1;c=!0,s=!0}}if(!c)return!1}return s&&!o?!1:t}TryParse(e=""){let t={};if(e[0]==="'")return{value:e,type:2};if(e==="")return{value:e,type:2};if(e==="NaN")return{value:NaN,type:3,hints:{Nan:!0}};let r=e.trim(),i=r.match(/^[$](.*?)$/);i&&(r=i[1],t.Currency=!0);let n=r.match(/^\((.*?)\)$/);n&&(r=n[1],t.Parens=!0);let o=r.match(/^(.*?)%\s*$/);o&&(r=o[1],t.Percent=!0),V.decimal_separator==="."?/,/.test(r)&&(r=r.replace(/,/g,""),t.Grouping=!0):(r=r.replace(/(\d)\s+/g,"$1"),r=r.replace(/\./g,""),r=r.replace(/,/,"."));let s=Number(r);if(s===null||isNaN(s)){let a=e.toLowerCase();if(a==="false")return{value:!1,type:4};if(a==="true")return{value:!0,type:4};let c=this.TestDate(e);if(c!==!1&&!isNaN(c)){let d=new Date(c),u=d.getUTCFullYear();if(u>=Us-200&&u<=Us+200)return t={Date:!0},(d.getHours()||d.getMinutes()||d.getSeconds())&&(t.Time=!0),{value:oi(c,!0),type:3,hints:t}}return{value:e,type:2}}if(n&&(s=-s),o){let a=s<0?-1:1,c=(a*s).toString().split(".");c[0]=("00"+c[0]).replace(/(\d\d)$/,".$1"),s=Number(c.join(""))*a}return/e/.test(e)&&(t.Exponential=!0),{value:s,type:3,hints:t}}},Ds=new Dn;var si=class{model={};layout_element;visible_=!1;timeout=0;pending_dialog_resoltion=[];options_={type:"initial"};set options(e){if(e.type==="about"&&(e.close_box=!0,e.icon=!0),this.options_.icon!==e.icon&&(this.model.left.style.display=e.icon?"block":"none"),this.options_.close_box!==e.close_box&&(this.model.close.style.display=e.close_box?"block":"none"),this.options_.message!==e.message&&(this.model.message.textContent=e.message||"",this.model.message.style.display=e.message?"block":"none"),this.options_.title!==e.title&&(this.model.title.textContent=e.title||"",this.model.title.style.display=e.title?"block":"none"),this.options_.type!==e.type){let t=this.model.dialog.className.replace(/dialog-type-\S+/g,"").trim();e.type&&(t+=` dialog-type-${e.type}`),this.model.dialog.className=t,e.type==="about"?this.model.about.style.display="block":this.model.about.style.display="none"}this.options_=e}event_handler=e=>{(e.key==="Escape"||e.key==="Esc")&&(e.stopPropagation(),e.preventDefault(),this.visible=!1)};get visible(){return this.visible_}set visible(e){if(e!==this.visible_)if(this.visible_=e,e)this.layout_element?.setAttribute("dialog",""),window.addEventListener("keydown",this.event_handler);else{this.layout_element?.removeAttribute("dialog"),window.removeEventListener("keydown",this.event_handler);let t=this.pending_dialog_resoltion.slice(0);this.pending_dialog_resoltion=[],Promise.resolve().then(()=>{for(let r of t)r()})}}constructor(e){this.layout_element=e.parentElement;let t=this.layout_element?.querySelector(".treb-dialog-mask");if(t){let r=t.querySelectorAll("[data-bind]");for(let i of Array.from(r)){let n=i.dataset.bind;n&&(this.model[n]=i)}}if(this.model.about){let r=["<div>TREB version 32.13.2"];r.push("<small><a target=_blank href='https://treb.app'>http://treb.app</a></small>"),this.model.about.innerHTML=r.join(`
|
|
14
|
+
`}IsDelimeter(e){return e==="*"||e==="_"||e==="~"}Consolidate(e){let t=[],r={},i=[],n={type:"text",text:""};for(let o of e)if(o.type==="newline")n.text.length&&i.push(n),n={...r,text:"",type:"text"},t.push(i),i=[];else switch((!!r.strong!=!!o.strong||!!r.emphasis!=!!o.emphasis||!!r.strike!=!!o.strike)&&(r.strong=!!o.strong,r.emphasis=!!o.emphasis,r.strike=!!o.strike,n.text.length&&i.push(n),n={...r,text:"",type:"text"}),o.type){case"text":case"whitespace":n.text+=o.text;break;case"delimeter":for(let s=0;s<o.length;s++)n.text+=o.char;break}return n.text.length&&i.push(n),i.length&&t.push(i),t}ApplyFormatting(e,t){let r=0,i=e.length;for(r=0;r<i;r++){let n=e[r];if(n.type==="delimeter"){if(t&&n.right_flanking&&t.char===n.char&&n.length>0)return{index:r,token:n};if(n.left_flanking){let o=this.ApplyFormatting(e.slice(r+1),n);if(o.token){let s=Math.min(o.token.length,n.length),a=n.char==="~",c=!a&&!!(s%2),d=!a&&s>=2;for(let u=r+1;u<=r+o.index;u++)e[u].strong=!!e[u].strong||d,e[u].emphasis=!!e[u].emphasis||c,e[u].strike=!!e[u].strike||a;o.token.length-=s,n.length-=s,n.length>0?r--:r+=o.index}}}}return{index:r}}Tokenize(e=""){let t=[],r=e.length,i=0,n=!1,o="";for(i=0;i<r;i++){let s=e[i];if(this.IsWhitespace(s)){o&&t.push({type:"text",text:o});let a=s;for(;;){let c=e[i+1];if(this.IsWhitespace(c))a+=c,i++;else break}t.push({type:"whitespace",text:a}),n=!1,o=""}else if(this.IsNewline(s)){o&&t.push({type:"text",text:o}),t.push({type:"newline",text:s});let a="";for(;;){let c=e[i+1];if(this.IsNewline(c))a+=c,i++;else break}a.length&&t.push({type:"newline",text:a}),n=!1,o=""}else if(n)o+=s,n=!1;else if(this.IsDelimeter(s)){o&&t.push({type:"text",text:o});let a=s;for(;;){let c=e[i+1];if(c===s)a+=c,i++;else break}t.push({type:"delimeter",text:a,char:s,length:a.length}),n=!1,o=""}else s==="\\"?n=!0:o+=s}return o&&t.push({type:"text",text:o}),t}};var Er=class l{static type="vertex";type=l.type;color=0;edges_in=new Set;edges_out=new Set;get has_inbound_edges(){return this.edges_in.size>0}get has_outbound_edges(){return this.edges_out.size>0}Reset(){for(let e of this.edges_out)e.RemoveDependency(this);for(let e of this.edges_in)e.RemoveDependent(this);this.edges_out.clear(),this.edges_in.clear()}ClearDependencies(){for(let e of this.edges_in)e.RemoveDependent(this);this.edges_in.clear()}AddDependent(e){e!==this&&(this.edges_out.has(e)||this.edges_out.add(e))}RemoveDependent(e){this.edges_out.delete(e)}AddDependency(e){e!==this&&(this.edges_in.has(e)||this.edges_in.add(e))}RemoveDependency(e){this.edges_in.delete(e)}LinkTo(e){this.AddDependent(e),e.AddDependency(this)}DependsOn(e){this.AddDependency(e),e.AddDependent(this)}LoopCheck(){let e=[this];for(;e.length;){let t=e[e.length-1],r=!0;if(t.color!==2){t.color=1;for(let i of t.edges_out){if(i.color===1)return this.color=0,!0;i.color===0&&i.edges_out.size&&(e.push(i),r=!1)}}r&&(t.color=2,e.pop())}return this.color=2,!1}};var mt=class extends Er{dirty=!1};var Ro={error:"NOTIMPL"},Se=()=>({type:7,value:"N/A"}),be=()=>({type:7,value:"EXPR"});var xe=()=>({type:7,value:"DIV/0"}),E=()=>({type:7,value:"ARG"}),U=()=>({type:7,value:"VALUE"}),J=()=>({type:7,value:"REF"}),Qi=()=>({type:7,value:"NAME"}),To=()=>({type:7,value:"SPILL"}),Mr=()=>({type:7,value:"UNK"});var $e=class l extends mt{static type="spreadsheet-vertex";reference;error=0;address;result={type:0};expression={type:"missing",id:-1};expression_error=!1;short_circuit=!1;type=l.type;get array_head(){return this.address?!!this.reference&&!!this.reference.area&&this.reference.area.start.column===this.address.column&&this.reference.area.start.row===this.address.row:!1}TakeReferenceValue(){this.reference&&(this.result=j(this.reference.GetValue()))}Calculate(e){if(this.dirty){if(this.color===0&&this.LoopCheck()&&(this.dirty=!1,this.edges_in.size)){this.reference&&(this.array_head||this.reference.type===1)&&this.reference.SetCalculationError("LOOP");for(let t of this.edges_out)t.Calculate(e);return}for(let t of this.edges_in)if(t.dirty)return;if(this.reference){if(this.reference.type===1){this.short_circuit=!1;let t=e.CalculationCallback.call(e,this);if(this.result=t.value,this.short_circuit)return;t.volatile&&e.volatile_list.push(this)}else this.result=this.reference.GetValue4();if(this.array_head)e.SpreadCallback.call(e,this,this.result);else if(this.reference.type===1)if(this.result.type===9){let t=e.SpillCallback.call(e,this,this.result);if(t)for(let r of t)for(let i of r.edges_out)i.dirty=!0,i.Calculate(e)}else this.reference.SetCalculatedValue(this.result.value,this.result.type)}else console.info("skip dirty constant? [or dangling...]");this.dirty=!1;for(let t of this.edges_out)t.dirty&&e.calculation_list.push(t)}}};var et=class l extends mt{static type="array-vertex";static list=[];type=l.type;area;static GetVertex(e){for(let t of this.list)if(t.area.start.sheet_id===e.start.sheet_id&&t.area.Equals(e))return[t,!1];return[new l(e),!0]}static Clear(){this.list=[]}static GetContainingArrays(e){let t=[];for(let r of this.list)r.area.start.sheet_id===e.sheet_id&&r.area.Contains(e)&&t.push(r);return t}static CreateImplicitEdges(e,t){for(let r of this.list)r.area.start.sheet_id===t.sheet_id&&r.area.Contains(t)&&r.DependsOn(e)}constructor(e){super(),this.area=e.Clone(),l.list.push(this)}RemoveDependent(e){super.RemoveDependent(e),this.edges_out.size||(this.Reset(),l.list=l.list.filter(t=>t!==this))}Calculate(e){if(this.dirty){if(this.color===0&&this.LoopCheck()&&(this.dirty=!1,this.edges_in.size)){for(let t of this.edges_out)t.Calculate(e);return}for(let t of this.edges_in)if(t.dirty)return;this.dirty=!1;for(let t of this.edges_out)t.Calculate(e)}}};var Dr=class{vertices=[[]];volatile_list=[];calculation_list=[];spill_data=[];loop_hint;leaf_vertices=new Set;dirty_list=[];loop_check_required=!1;IsSpreadsheetVertex(e){return e.type===$e.type}FlushTree(){this.dirty_list=[],this.volatile_list=[],this.vertices=[[]],this.leaf_vertices.clear(),et.Clear()}ResolveArrayHead(e){if(!e.sheet_id)throw new Error("resolve array head with no sheet id");let t=this.model.sheets.Find(e.sheet_id)?.cells;if(!t)throw new Error("no cells? sheet id "+e.sheet_id);let r=t.data[e.row];if(r){let i=r[e.column];if(i&&i.area){let n={row:i.area.start.row,column:i.area.start.column,sheet_id:e.sheet_id};return console.info("array head",e,n),n}}return e}*IterateVertices(e,t=!1){for(let r of ur.Iterate(e)){let i=this.GetVertex(r,t);i&&(yield i)}}GetVertex(e,t){if(!e.sheet_id)throw console.info(JSON.stringify({address:e,create:t})),console.trace(),new Error("getvertex with no sheet id");let r=this.model.sheets.Find(e.sheet_id)?.cells;if(!r)throw new Error("no cells? sheet id "+e.sheet_id);if(!this.vertices[e.sheet_id]){if(!t)return;this.vertices[e.sheet_id]=[]}if(this.vertices[e.sheet_id][e.column]){let n=this.vertices[e.sheet_id][e.column][e.row];if(n)return n;if(!t)return}else{if(!t)return;this.vertices[e.sheet_id][e.column]=[]}let i=new $e;return i.address={row:e.row,column:e.column,absolute_row:e.absolute_row,absolute_column:e.absolute_column,sheet_id:e.sheet_id},i.reference=r.EnsureCell(e),this.vertices[e.sheet_id][e.column][e.row]=i,et.CreateImplicitEdges(i,e),i}RemoveVertex(e){if(!e.sheet_id)throw new Error("removevertex with no sheet id");let t=this.GetVertex(e,!1);t&&(t.Reset(),this.vertices[e.sheet_id][e.column][e.row]=void 0)}ResetVertex(e){let t=this.GetVertex(e,!1);t&&t.Reset()}RIBcount=0;ResetInbound(e,t=!1,r=!0,i=!1){this.RIBcount++;let n=this.GetVertex(e,r);if(!n){if(t){let s=et.GetContainingArrays(e);for(let a of s)this.SetVertexDirty(a)}return}let o=[];if(i&&(o=Array.from(n.edges_in)),n.ClearDependencies(),t&&this.SetVertexDirty(n),i){n.has_outbound_edges||this.RemoveVertex(e);for(let s of o)if(!s.has_inbound_edges&&!s.has_outbound_edges){let a=s;a.address&&this.RemoveVertex(a.address)}}}ResetLoopState(){for(let e of this.vertices)if(e){for(let t of e)if(t)for(let r of t)r&&(r.color=r.edges_out.size?0:2)}for(let e of this.leaf_vertices)e.color=2}LoopCheck(e=!1){if(!this.loop_check_required&&!e)return!1;let t=[];for(let i of this.vertices)if(i){for(let n of i)if(n)for(let o of n)o&&(o.color=o.edges_out.size?0:2,t.push(o))}let r=[];for(let i of t)if(i.color===0){for(i.color=1,r.push(i);r.length;){let n=r[r.length-1],o=!0;if(n.color!==2)for(let s of n.edges_out){if(s.color===1)return this.loop_hint=this.RenderAddress(i.address),console.info("loop detected @",this.loop_hint),!0;s.color===0&&(r.push(s),o=!1)}o&&(r.pop(),n.color=2)}i.color=2}return this.loop_check_required=!1,this.loop_hint=void 0,!1}RenderAddress(e){if(!e)return"undefined";let t="";if(e.sheet_id){let i=this.model.sheets.Find(e.sheet_id);i&&(t=i.name+"!")}let r=new g(e);return t+r.spreadsheet_label}CompositeAddArrayEdge(e,t){if(!e.start.sheet_id)throw new Error("AddArrayEdge called without sheet ID");let[r,i]=et.GetVertex(e);if(t.DependsOn(r),this.loop_check_required=!0,!i)return;let n=this.vertices[e.start.sheet_id];if(n){if(e.entire_row){for(let o=0;o<n.length;o++)if(n[o])for(let s=e.start.row;s<=e.end.row;s++){let a=n[o][s];a&&r.DependsOn(a)}}else if(e.entire_column){for(let o=e.start.column;o<=e.end.column;o++)if(n[o])for(let s of n[o])s?.address&&r.DependsOn(s)}else for(let o=e.start.row;o<=e.end.row;o++)for(let s=e.start.column;s<=e.end.column;s++)if(n[s]){let a=n[s][o];a&&r.DependsOn(a)}}}AddLeafVertexArrayEdge(e,t){this.CompositeAddArrayEdge(e,t)}AddArrayEdge(e,t){if(!e.start.sheet_id)throw new Error("AddArrayEdge called without sheet ID");let r=this.GetVertex(t,!0);this.CompositeAddArrayEdge(e,r)}AddEdge(e,t){let r=this.GetVertex(e,!0);this.GetVertex(t,!0).DependsOn(r),r.reference&&r.reference.area&&!r.array_head&&this.AddEdge({...e,row:r.reference.area.start.row,column:r.reference.area.start.column},t),this.loop_check_required=!0}RemoveEdge(e,t){let r=this.GetVertex(e,!1),i=this.GetVertex(t,!1);!r||!i||(r.RemoveDependent(i),i.RemoveDependency(r))}SetAreaDirty(e){if(e.start.column===1/0||e.end.column===1/0||e.start.row===1/0||e.end.row===1/0)throw new Error("don't iterate over infinite area");let t=e.start.sheet_id;if(!t)throw new Error("invalid area, missing sheet id");for(let r=e.start.column;r<=e.end.column;r++)for(let i=e.start.row;i<=e.end.row;i++){let n={row:i,column:r,sheet_id:t};this.GetVertex(n,!1)&&this.SetDirty(n)}}SetVertexDirty(e){if(!e.dirty){this.dirty_list.push(e),e.dirty=!0;for(let t of e.edges_out)this.SetVertexDirty(t)}}SetDirty(e){let t=this.GetVertex(e,!0);this.SetVertexDirty(t)}AddLeafVertex(e){this.leaf_vertices.add(e)}RemoveLeafVertex(e){this.leaf_vertices.delete(e)}AddLeafVertexEdge(e,t){let r=this.GetVertex(e,!0);return t.DependsOn(r),0}RemoveLeafVertexEdge(e,t){let r=this.GetVertex(e,!1);r&&(r.RemoveDependent(t),t.RemoveDependency(r))}InitializeGraph(){for(let e of this.dirty_list)this.IsSpreadsheetVertex(e)&&(e.TakeReferenceValue(),this.CheckVolatile(e)&&this.volatile_list.push(e)),e.dirty=!1;this.dirty_list=[]}Recalculate(){for(let e of this.volatile_list)this.SetVertexDirty(e);this.spill_data=this.spill_data.filter(({area:e,vertex:t})=>{if(t.dirty){t.Reset();let r=e.start.sheet_id?this.model.sheets.Find(e.start.sheet_id)?.cells:void 0;if(r)for(let{cell:i,row:n,column:o}of r.IterateRC(new g(e.start,e.end)))i.spill&&(i.spill=void 0,typeof i.value>"u"&&i.Reset()),this.SetDirty({row:n,column:o,sheet_id:e.start.sheet_id});return!1}return!0}),this.calculation_list=this.dirty_list.slice(0),this.volatile_list=[],this.dirty_list=[],this.loop_check_required&&(this.ResetLoopState(),this.loop_check_required=!1);for(let e=0;e<this.calculation_list.length;e++)this.calculation_list[e].Calculate(this);this.calculation_list=[]}};var bl=l=>{let e={m:l,n:l,array:[]};for(let t=0;t<l;t++){let r=[];for(let i=0;i<l;i++)r.push({real:0,imaginary:0});e.array.push(r)}return e};var _l=l=>{let{r:e,theta:t}=l,r=e*Math.cos(t),i=e*Math.sin(t);return{real:r,imaginary:i}},Lr=l=>{let e=Math.sqrt(l.real*l.real+l.imaginary*l.imaginary),t=Math.atan2(l.imaginary,l.real);return{r:e,theta:t}},Mo=l=>{let e={real:Math.sinh(l.real)*Math.cos(l.imaginary),imaginary:Math.cosh(l.real)*Math.sin(l.imaginary)},t={real:Math.cosh(l.real)*Math.cos(l.imaginary),imaginary:Math.sinh(l.real)*Math.sin(l.imaginary)};return Ke(e,t)},Uo=l=>Ke({real:Math.tan(l.real),imaginary:Math.tanh(l.imaginary)},{real:1,imaginary:-(Math.tan(l.real)*Math.tanh(l.imaginary))}),Do=l=>({real:Math.cosh(l.real)*Math.cos(l.imaginary),imaginary:Math.sinh(l.real)*Math.sin(l.imaginary)}),Lo=l=>({real:Math.cos(l.real)*Math.cosh(l.imaginary),imaginary:Math.sin(l.real)*Math.sinh(l.imaginary)}),Io=l=>({real:Math.sinh(l.real)*Math.cos(l.imaginary),imaginary:Math.cosh(l.real)*Math.sin(l.imaginary)}),Ir=l=>({real:Math.sin(l.real)*Math.cosh(l.imaginary),imaginary:Math.cos(l.real)*Math.sinh(l.imaginary)}),Zi=l=>{if(l.imaginary===0)return{real:Math.asin(l.real),imaginary:0};let e=Math.hypot(l.real+1,l.imaginary)/2,t=Math.hypot(l.real-1,l.imaginary)/2,r=e+t,i=e-t,n={real:Math.asin(i),imaginary:Math.log(r+Math.sqrt(r*r-1))};return(l.imaginary<0||l.imaginary===0&&l.real>1)&&(n.imaginary=-n.imaginary),n},zo=l=>{if(l.imaginary===0)return{real:Math.acos(l.real),imaginary:0};let e=Zi(l);return{real:Math.PI/2-e.real,imaginary:e.imaginary}},Vo=l=>{let{real:e,imaginary:t}=l;if(e===0){if(t>1)return{real:Math.PI/2,imaginary:.5*Math.log((t-1)/(t+1))};if(t<-1)return{real:-Math.PI/2,imaginary:.5*Math.log((1-t)/(-1-t))}}let r=e*e,i=t*t,n=.5*Math.atan2(2*e,1-r-i),o=.25*Math.log((r+(t+1)*(t+1))/(r+(t-1)*(t-1)));return{real:n,imaginary:o}},Fo=(l,e)=>{if(e.real===0&&e.imaginary===0&&l.real===0&&l.imaginary===0)return!1;let t=e.real*e.real+e.imaginary*e.imaginary,r={real:(l.real*e.real+l.imaginary*e.imaginary)/t,imaginary:(l.imaginary*e.real-l.real*e.imaginary)/t},i=r.real*r.real,n=r.imaginary*r.imaginary,o={real:.5*Math.atan2(2*r.real,1-i-n),imaginary:.25*Math.log((i+(r.imaginary+1)*(r.imaginary+1))/(i+(r.imaginary-1)*(r.imaginary-1)))};return e.real<0&&(o.real+=l.real>=0||l.imaginary>=0?Math.PI:-Math.PI),o},No=(...l)=>{let e=l.shift();if(!e)return{real:0,imaginary:0};for(let t of l)e=se(e,t);return e},se=(l,e)=>({real:l.real*e.real-l.imaginary*e.imaginary,imaginary:l.real*e.imaginary+l.imaginary*e.real}),gl=(l,e)=>{let t=[];for(let r=0;r<l.m;r++){let i=[];for(let n=0;n<l.n;n++)i.push(l.array[r][n]+e.array[r][n]);t.push(i)}return{m:l.m,n:l.n,array:t}},Yi=(l,e)=>{let t=[];for(let r=0;r<l.m;r++){let i=[];for(let n=0;n<e.n;n++){let o=0;for(let s=0;s<l.n;s++)o+=l.array[r][s]*e.array[s][n];i.push(o)}t.push(i)}return{array:t,m:l.m,n:e.n}},Po=(l,e)=>{let t=[];for(let r=0;r<l.m;r++){let i=[];for(let n=0;n<e.n;n++){let o={real:0,imaginary:0};for(let s=0;s<l.n;s++)o.real+=l.array[r][s].real*e.array[s][n].real-l.array[r][s].imaginary*e.array[s][n].imaginary,o.imaginary+=l.array[r][s].real*e.array[s][n].imaginary+l.array[r][s].imaginary*e.array[s][n].real;i.push(o)}t.push(i)}return t},zr=l=>{let e={real:0,imaginary:0},t=l.n;if(t==2){let i=se(l.array[0][0],l.array[1][1]),n=se(l.array[1][0],l.array[0][1]);return{real:i.real-n.real,imaginary:i.imaginary-n.imaginary}}let r=bl(l.n);for(let i=0;i<t;i++){let n=0;for(let a=1;a<t;a++){let c=0;for(let d=0;d<t;d++)d!=i&&(r.array[n][c]={...l.array[a][d]},c++);n++}r.m=r.n=t-1;let o=Math.pow(-1,i),s=se({real:l.array[0][i].real*o,imaginary:l.array[0][i].imaginary*o},zr(r));e.real+=s.real,e.imaginary+=s.imaginary}return e};var yl=l=>{let e={real_values:!1,imaginary_values:!1,square:l.m===l.n,unit_diagonal:!0},t={m:l.m,n:l.n,array:[]},r={m:l.m,n:l.n,array:[]};for(let i=0;i<l.m;i++){let n=l.array[i],o=[],s=[];for(let a=0;a<l.n;a++)n[a].real&&(e.real_values=!0),n[a].imaginary&&(e.imaginary_values=!0),a===i&&e.unit_diagonal&&(n[a].real!==1||n[a].imaginary!==0)&&(e.unit_diagonal=!1),o.push(n[a].real),s.push(n[a].imaginary);t.array.push(o),r.array.push(s)}return{real:t,imaginary:r,flags:e}},vl=l=>{let e=l.array.map(t=>t.slice(0));return{m:l.m,n:l.n,array:e}},Eo=l=>{if(l.m!==l.n)return;let e=vl(l),t=e.array,r=0,i=0,n=0,o=0,s=l.m;for(i=1;i<s;i++)t[0][i]/=t[0][0];for(i=1;i<s;i++){for(n=i;n<s;n++){for(r=0,o=0;o<i;o++)r+=t[n][o]*t[o][i];t[n][i]-=r}if(i!=s-1)for(n=i+1;n<s;n++){for(r=0,o=0;o<i;o++)r+=t[i][o]*t[o][n];t[i][n]=(t[i][n]-r)/t[i][i]}}for(i=0;i<s;i++)for(n=i;n<s;n++){let a=1;if(i!=n)for(a=0,o=i;o<n;o++)a-=t[n][o]*t[o][i];t[n][i]=a/t[n][n]}for(i=0;i<s;i++)for(n=i;n<s;n++)if(i!=n){for(r=0,o=i;o<n;o++)r+=t[o][n]*(i==o?1:t[i][o]);t[i][n]=-r}for(i=0;i<s;i++)for(n=0;n<s;n++){for(r=0,o=i>n?i:n;o<s;o++)r+=(n==o?1:t[n][o])*t[o][i];t[n][i]=r}return e},Oo=l=>{let e=[];if(l.m!==l.n)return;let{real:t,imaginary:r,flags:i}=yl(l),n=Eo(t);if(!n)return;if(!i.imaginary_values){for(let u=0;u<l.m;u++){let h=[];for(let f=0;f<l.n;f++)h.push({real:n.array[u][f],imaginary:0});e.push(h)}return e}let o=Yi(n,r),s=Yi(r,o),a=gl(t,s),c=Eo(a);if(!c)return;let d=Yi(o,c);for(let u=0;u<l.m;u++){let h=[];for(let f=0;f<l.n;f++)h.push({real:c.array[u][f],imaginary:-d.array[u][f]});e.push(h)}return e},Ke=(l,e)=>{let t={real:e.real,imaginary:-e.imaginary},r=se(l,t),i=se(e,t);return{real:r.real/i.real,imaginary:r.imaginary/i.real}},Wt=l=>{let e=l.real||0,t=l.imaginary||0;return se({real:Math.exp(e),imaginary:0},{real:Math.cos(t),imaginary:Math.sin(t)})},en=l=>{let e=Lr(l);return{real:Math.log(e.r),imaginary:e.theta}},Ce=(l,e)=>{if(e.imaginary)return Wt(se(e,en(l)));{let t=Lr(l);return _l({r:Math.pow(t.r,e.real),theta:t.theta*e.real})}};var Ho=(l,e=0)=>l&&l.type===8?l:{type:8,value:{real:e,imaginary:0}},tt=l=>l.imaginary?{type:8,value:l}:{type:3,value:l.real},rt=(l,e)=>{if(l.type===7)return[0,0,l];if(e.type===7)return[0,0,e];let t=[0,0];switch(l.type){case 3:t[0]=l.value;break;case 4:t[0]=l.value?1:0;break;case 0:break;case 8:t[3]=l;break;default:return[0,0,U()]}switch(e.type){case 3:t[1]=e.value;break;case 4:t[1]=e.value?1:0;break;case 0:break;case 8:t[4]=e;break;default:return[0,0,U()]}return(t[3]||t[4])&&(t[3]=Ho(t[3],t[0]),t[4]=Ho(t[4],t[1])),t},wl=(l,e)=>{let[t,r,i,n,o]=rt(l,e);return i||(n&&o?tt({real:n.value.real+o.value.real,imaginary:n.value.imaginary+o.value.imaginary}):{value:t+r,type:3})},nn=(l,e)=>{let[t,r,i,n,o]=rt(l,e);return i||(n&&o?tt({real:n.value.real-o.value.real,imaginary:n.value.imaginary-o.value.imaginary}):{value:t-r,type:3})},xl=(l,e)=>{let[t,r,i,n,o]=rt(l,e);if(i)return i;if(n&&o)return tt(Ce(n.value,o.value));let s=Math.pow(t,r);return isNaN(s)?U():{type:3,value:s}},Cl=(l,e)=>{let[t,r,i,n,o]=rt(l,e);if(i)return i;if(n&&o)return tt(Ce(n.value,o.value));if(t<0&&r!==0&&Math.abs(r)<1)return tt(Ce({real:t,imaginary:0},{real:r,imaginary:0}));let s=Math.pow(t,r);return isNaN(s)?U():{type:3,value:s}},tn=xl,Sl=(l,e)=>{let[t,r,i,n,o]=rt(l,e);return i||(n&&o?tt(se(n.value,o.value)):{value:t*r,type:3})},Al=(l,e)=>{let[t,r,i,n,o]=rt(l,e);return i||(n&&o?o.value.real===0&&o.value.imaginary===0?xe():tt(Ke(n.value,o.value)):r===0?xe():{value:t/r,type:3})},kl=(l,e)=>{let[t,r,i]=rt(l,e);return i||(r===0?xe():{value:t%r,type:3})},rn=(l,e)=>l.type===7?l:e.type===7?e:l.type===0&&(e.value===""||e.value===0||e.type===8&&e.value.real===0&&e.value.imaginary===0)||e.type===0&&(l.value===""||l.value===0||l.type===8&&l.value.real===0&&l.value.imaginary===0)?{type:4,value:!0}:l.type===8?e.type===8?{type:4,value:l.value.imaginary===e.value.imaginary&&l.value.real===e.value.real}:{type:4,value:!l.value.imaginary&&l.value.real===e.value}:e.type===8?{type:4,value:!e.value.imaginary&&l.value===e.value.real}:l.type===2&&e.type===2?{type:4,value:l.value.toLowerCase()===e.value.toLowerCase()}:{type:4,value:l.value==e.value},Go=(l,e)=>{let t=rn(l,e);return t.type===7?t:{type:4,value:!t.value}},Rl=(l,e)=>l.type===7?l:e.type===7?e:l.type===8||e.type===8?U():{type:4,value:(l.value||0)>(e.value||0)},on=(l,e)=>!(l.type===8||l.type===9||l.type===10||l.type===5||e.type===8||e.type===9||e.type===10||e.type===5),Tl=(l,e)=>l.type===7?l:e.type===7?e:on(l,e)?{type:4,value:(l.value||0)>=(e.value||0)}:U(),El=(l,e)=>l.type===7?l:e.type===7?e:on(l,e)?{type:4,value:(l.value||0)<(e.value||0)}:U(),Ml=(l,e)=>l.type===7?l:e.type===7?e:on(l,e)?{type:4,value:(l.value||0)<=(e.value||0)}:U(),Bo=()=>{tn=Cl},$o=l=>{switch(l){case"+":return wl;case"-":return nn;case"*":return Sl;case"/":return Al;case"^":return tn;case"**":return tn;case"%":return kl;case"=":return rn;case"==":return rn;case"!=":return Go;case"<>":return Go;case">":return Rl;case">=":return Tl;case"<":return El;case"<=":return Ml}};var sn=l=>!Array.isArray(l)&&l.type===5&&!!l.value.type,fe=l=>l.type===5&&l.key==="metadata",Fr=class{constructor(e,t,r){this.data_model=e;this.library=t;this.parser=r}context={address:{row:-1,column:-1},volatile:!1,bindings:[]};Calculate(e,t,r,i=!1){return i||(this.context.address=t,this.context.volatile=!1,this.context.area=r),{value:this.CalculateExpression(e),volatile:this.context.volatile}}CellFunction2(e){if(!e.sheet_id)if(e.sheet)e.sheet_id=this.data_model.sheets.ID(e.sheet)||0;else return()=>J();let t=this.data_model.sheets.Find(e.sheet_id)?.cells;if(!t)return console.warn("missing cells reference @ "+e.sheet_id),()=>J();let r=t.GetCell(e);return r?e.spill&&r.spill&&r.spill.start.row===e.row&&r.spill.start.column===e.column?()=>r.spill?t.GetRange4(r.spill.start,r.spill.end,!0)||J():To():()=>r.GetValue4():()=>({type:3,value:0})}CellFunction4(e,t){return e.sheet_id?this.data_model.sheets.Find(e.sheet_id)?.cells?.GetRange4(e,t,!0)||J():J()}GetMetadata(e,t){let r,i;switch(e.type){case"address":if(e.spill){let n;if(e.sheet_id&&(n=this.data_model.sheets.Find(e.sheet_id)),!n)return console.error("missing sheet [da6]"),J();let o=n.CellData(e);o.spill&&(i=o.spill)}else r=e;break;case"range":i=e;break;case"structured-reference":{let n=this.data_model.ResolveStructuredReference(e,this.context.address);n&&(n.type==="address"?r=n:n.type==="range"&&(i=n))}break;case"identifier":{let n=this.data_model.GetName(e.name,this.context.address.sheet_id||0);n?.type==="range"&&(n.area.count===1?r=n.area.start:i=n.area)}break;case"call":{let n=this.CalculateExpression(e,!0);if(sn(n))if(n.value.type==="address")r=n.value;else if(n.value.type==="range")i=n.value;else return n;else return n}break;default:return this.CalculateExpression(e)}if(r){let n;if(r.sheet_id&&(n=this.data_model.sheets.Find(r.sheet_id)),!n)return console.error("missing sheet [ac8]"),J();let o=n.CellData(r),s=o.calculated_type?o.calculated:o.value,a={type:"metadata",address:{...r,position:0,id:0,type:"address",label:new g(r).spreadsheet_label},value:s,format:o.style?o.style.number_format:void 0,...t(o,r)};return{type:5,value:a,key:"metadata"}}else if(i){if(i.start.row===1/0||i.start.column===1/0)return J();let n;if(i.start.sheet_id&&(n=this.data_model.sheets.Find(i.start.sheet_id)),!n)throw new Error("missing sheet [ac9]");let o=[];for(let s=i.start.column;s<=i.end.column;s++){let a=[];for(let c=i.start.row;c<=i.end.row;c++){let d=n.CellData({row:c,column:s});r={...i.start,row:c,column:s};let u=d.calculated_type?d.calculated:d.value,h={type:"metadata",address:r,value:u,format:d.style?d.style.number_format:void 0,...t(d,r)};a.push({type:5,value:h,key:"metadata"})}o.push(a)}return{type:9,value:o}}return this.CalculateExpression(e)}RewriteMacro(e,t){let r;switch(e.type){case"identifier":if(r=t[e.name.toUpperCase()],r)return JSON.parse(JSON.stringify(r));break;case"binary":e.left=this.RewriteMacro(e.left,t),e.right=this.RewriteMacro(e.right,t);break;case"unary":e.operand=this.RewriteMacro(e.operand,t);break;case"group":e.elements=e.elements.map(i=>this.RewriteMacro(i,t));break;case"call":e.args=e.args.map(i=>this.RewriteMacro(i,t));break}return e}CallMacro(e,t){if(!t.expression)return()=>be();let r=JSON.stringify(t.expression),i={},n=t.argument_names?.map(o=>o.toUpperCase())||[];return o=>{let s=JSON.parse(r);for(let a=0;a<n.length;a++)i[n[a]]=o.args[a]||{type:"missing",id:0};return this.CalculateExpression(this.RewriteMacro(s,i))}}ImplicitCallTail(e,t){let r=e.value;if(!r.func||!r.bindings)return be();let i={};for(let o=0;o<r.bindings.length;o++){let s=r.bindings[o];if(s?.type==="identifier")i[s.name.toUpperCase()]=t[o]||{type:"missing"};else return be()}let n=JSON.parse(JSON.stringify(r.func));return this.parser.Walk2(n,o=>{if(o.type==="identifier"){let s=o.name.toUpperCase(),a=i[s];if(a)return JSON.parse(JSON.stringify(a))}return!0}),this.CalculateExpression(n)}Apply(e,t){let r=t.map(i=>{switch(i.type){case 3:case 4:case 2:return{type:"literal",value:i.value,id:0,position:0};case 7:return{type:"literal",value:"#"+i.value,id:0,position:0};case 9:{let n=[];for(let o=0;o<i.value.length;o++){let s=i.value[o],a=[];for(let c=0;c<s.length;c++){let d=s[c];switch(d.type){case 4:case 3:case 2:a.push(d.value||void 0);break;default:console.warn("unhandled array value",d),a.push(void 0)}}n.push(a)}return{type:"array",values:n,id:0,position:0}}case 0:return{type:"missing",id:0};default:console.warn("unhandled parameter value",i)}return{type:"missing",id:0}});return this.ImplicitCallTail(e,r)}ImplicitCall(){return e=>{e.type==="call"&&(e={type:"implicit-call",args:e.args,call:{type:"identifier",name:e.name,position:e.position,id:0},position:e.position,id:0});let t=this.CalculateExpression(e.call);return t.type===6?this.ImplicitCallTail(t,e.args):be()}}NormalizeBindings(e){let t={};for(let[r,i]of Object.entries(e))t[r.toUpperCase()]=i;return t}CallExpression(e,t=!1){let r=this.library.Get(e.name);if(!r){let i=e.name.toUpperCase();return this.LookupBinding(i)?this.ImplicitCall():this.data_model.GetName(i,this.context.address.sheet_id||0)?this.ImplicitCall():()=>Qi()}return i=>{this.context.volatile=this.context.volatile||!!r.volatile;let n=e.name.toLowerCase()==="if",o=-1,s,a=i.args,c=r.arguments||[],d;r.create_binding_context&&(d=r.create_binding_context.call(0,{args:i.args,descriptors:c}),d?(a=d.args,d.argument_descriptors&&(c=d.argument_descriptors),this.context.bindings.unshift(this.NormalizeBindings(d.context))):s=E());let u=a.map((m,p)=>{if(s)return;let b=c[Math.min(p,c.length-1)]||{};if(b.passthrough)return m;if(p===o)return b.boxed?{type:0}:void 0;if(typeof m>"u")return n&&p===0&&(o=1),b.boxed?{type:0}:void 0;if(b.address)return b.boxed?{type:2,value:this.parser.Render(m).replace(/\$/g,"")}:this.parser.Render(m).replace(/\$/g,"");if(b.metadata)return this.GetMetadata(m,()=>({}));{let _=this.CalculateExpression(m);if(_.type===7){if(b.allow_error)return _;s=_;return}if(n&&p===0&&_.type!==9){let x=!1;if(_.type===2){let v=_.value.toLowerCase().trim();x=v!=="false"&&v!=="f"}else x=!!_.value;o=x?2:1}return b.boxed?_:_.type===9?_.value.map(x=>x.map(v=>v.value)):_.value}});if(d&&this.context.bindings.shift(),s)return s;let h={address:{...this.context.address},area:this.context.area?{start:{...this.context.area.start},end:{...this.context.area.end}}:void 0,apply:r.fp?this.Apply.bind(this):void 0},f=r.fn.apply(h,u);if(r.return_type==="reference"){if(t)return f;if(sn(f)){if(f.value.type==="address")return this.CellFunction2(f.value)();if(f.value.type==="range")return this.CellFunction4(f.value.start,f.value.end)}return f}return f}}ResolveStructuredReference(e){let t=this.data_model.ResolveStructuredReference(e,this.context.address);if(t){if(t.type==="address")return this.CellFunction2(t);if(t.type==="range")return()=>this.CellFunction4(t.start,t.end)}return()=>J()}ResolveDimensionedQuantity(){return e=>{let t=this.CalculateExpression(e.expression);return{type:10,value:{value:t.value,unit:e.unit.name}}}}UnaryExpression(e,t=!1){switch(e.operator){case"+":return r=>this.CalculateExpression(r.operand);case"-":{let r=nn,i={type:3,value:0};return n=>{let o=this.CalculateExpression(n.operand);return o.type===9?{type:9,value:o.value.map(s=>s.map(a=>r(i,a)))}:r(i,o)}}case"@":return r=>{let i;switch(r.operand.type){case"address":if(r.operand.spill){let o=this.CellFunction2(r.operand)();if(o.type===9){let s=this.context.address.row??-1,a=this.context.address.column??-1;if(s>=r.operand.row&&s<r.operand.row+o.value[0]?.length&&o.value.length===1){if(!t)return o.value[0][s-r.operand.row];i={...r.operand,row:s,spill:!1}}else if(a>=r.operand.column&&a<r.operand.column+o.value.length&&o.value[0]?.length===1){if(!t)return o.value[a-r.operand.column][0];i={...r.operand,column:a,spill:!1}}else return U()}}break;case"range":{let o=this.context.address.row??-1,s=this.context.address.column??-1;if(o>=r.operand.start.row&&o<=r.operand.end.row&&r.operand.start.column===r.operand.end.column)i={...r.operand.start,row:o,spill:!1};else if(s>=r.operand.start.column&&s<=r.operand.end.column&&r.operand.start.row===r.operand.end.row)i={...r.operand.start,column:s,spill:!1};else return U()}}if(i)return t?{type:5,value:i}:this.CellFunction2(i)();let n=this.CalculateExpression(r.operand);return n.type===9?n.value[0][0]:n};default:return()=>(console.warn("unexpected unary operator:",e.operator),be())}}RecycleArray(e,t,r){if(e[0].length<r){let i=e[0].length;for(let n of e)for(let o=i;o<r;o++)n[o]=n[o%i]}if(e.length<t){let i=e.length;for(let n=i;n<t;n++)e[n]=e[n%i].slice(0)}return e}ElementwiseBinaryExpression(e,t,r){let i=Math.max(t.value.length,r.value.length),n=Math.max(t.value[0].length,r.value[0].length),o=this.RecycleArray(t.value,i,n),s=this.RecycleArray(r.value,i,n),a=[];for(let c=0;c<i;c++){let d=[];for(let u=0;u<n;u++)d[u]=e(o[c][u]||{type:0},s[c][u]||{type:0});a.push(d)}return{type:9,value:a}}AsReference(e){switch(e.type){case"address":return e;case"range":if(e.start.row===e.end.row&&e.start.column===e.end.column)return e.start;break;default:{let t=this.CalculateExpression(e,!0);if(sn(t)){if(t.value.type==="address")return t.value;if(t.value.type==="range"&&t.value.start.row===t.value.end.row&&t.value.start.column===t.value.end.column)return t.value.start}}break}}BinaryExpression(e){let t=e.operator==="&"?(r,i)=>{if(r.type===7)return r;if(i.type===7)return i;let n=[r,i].map(o=>o.type===0?"":o.type===4?o.value?this.data_model.language_model?.boolean_true||"TRUE":this.data_model.language_model?.boolean_false||"FALSE":o.value);return{type:2,value:`${n[0]}${n[1]}`}}:$o(e.operator);return t?r=>{let i=this.CalculateExpression(r.left),n=this.CalculateExpression(r.right);return i.type===9?n.type===9?this.ElementwiseBinaryExpression(t,i,n):this.ElementwiseBinaryExpression(t,i,{type:9,value:[[n]]}):n.type===9?this.ElementwiseBinaryExpression(t,{type:9,value:[[i]]},n):t(i,n)}:e.operator===":"?r=>{let i=this.AsReference(r.left),n=this.AsReference(r.right);return i&&n?this.CellFunction4(i,n):be()}:()=>(console.info(`(unexpected binary operator: ${e.operator})`),be())}Identifier(e){let t=e.name;if(t[0]==="#")return()=>J();let r=t.toUpperCase();switch(r){case"FALSE":return()=>({value:!1,type:4});case"TRUE":return()=>({value:!0,type:4});case"UNDEFINED":return()=>({value:void 0,type:0})}return()=>{let i=this.LookupBinding(r);if(i)return this.CalculateExpression(i);let n=this.data_model.GetName(r,this.context.address.sheet_id||0);switch(n?.type){case"range":return n.area.count===1?this.CellFunction4(n.area.start,n.area.start):this.CellFunction4(n.area.start,n.area.end);case"expression":return this.CalculateExpression(n.expression)}return Qi()}}LookupBinding(e){e=e.toUpperCase();for(let t of this.context.bindings){let r=t[e];if(r)return r}}GroupExpression(e){return!e.elements||e.elements.length!==1?(console.warn("Can't handle group !== 1"),()=>be()):t=>this.CalculateExpression(t.elements[0])}CalculateExpression(e,t=!1){if(e.fn)return e.fn(e);switch(e.type){case"implicit-call":return(e.fn=this.ImplicitCall())(e);case"call":{let r=this.data_model.macro_functions.get(e.name.toUpperCase());return r?(e.fn=this.CallMacro(e,r))(e):(e.fn=this.CallExpression(e,t))(e)}case"address":return(e.fn=this.CellFunction2(e))();case"range":return(e.fn=r=>this.CellFunction4(r.start,r.end))(e);case"binary":return(e.fn=this.BinaryExpression(e))(e);case"unary":return(e.fn=this.UnaryExpression(e,t))(e);case"identifier":return(e.fn=this.Identifier(e))();case"missing":return(e.fn=()=>({value:void 0,type:0}))();case"dimensioned":return(e.fn=this.ResolveDimensionedQuantity())(e);case"literal":{let r={value:e.value,type:ve(e.value)};return(e.fn=()=>r)()}case"group":return(e.fn=this.GroupExpression(e))(e);case"complex":{let r={value:{real:e.real,imaginary:e.imaginary},type:8};return(e.fn=()=>r)()}case"structured-reference":return(e.fn=this.ResolveStructuredReference(e))();case"array":return(e.fn=()=>({type:9,value:e.values.map(r=>(Array.isArray(r)?r:[r]).map(i=>({type:ve(i),value:i})))}))();default:return console.warn("Unhandled parse expr:",e),Mr()}}};var Qb=1e3*60*60*24;var Nr=l=>{let e=[],t=l.length,r=l[0].length;for(let i=0;i<r;i++){e[i]=[];for(let n=0;n<t;n++)e[i][n]=l[n][i]}return e},an=l=>{if(!l)return[];if(typeof l[0]>"u")return[];let e=[],t=l.length,r=l[0].length;for(let i=0;i<r;i++){e[i]=[];for(let n=0;n<t;n++)e[i][n]=l[n][i]}return e};var ae=l=>{let e=[];for(let t of l)if(t?.type===9)for(let r of t.value)e=e.concat(ae(r));else e.push(t);return e},K=(l,e=!1)=>Array.isArray(l)?l.reduce((t,r)=>typeof r>"u"&&!e?t:Array.isArray(r)?t.concat(K(r,e)):r instanceof Float32Array||r instanceof Float64Array?t.concat(Array.from(r)):t.concat([r]),[]):[l],ie=l=>K(l).filter(e=>typeof e=="number"),ln=(l,e=!1)=>e?l.map((t=>{switch(typeof t){case"number":case"undefined":case"string":case"boolean":return t}})):l.filter(t=>{switch(typeof t){case"number":case"undefined":case"string":case"boolean":return!0}return!1}),Ul=l=>!!l&&typeof l=="object"&&l.type===9,Jo=(l,e)=>(...t)=>{let r=[],i=[];for(let[n,o]of t.entries())if(o&&l[n]){let s=Array.isArray(o)?o:Ul(o)?o.value:void 0;s&&(r[n]=s,i.length||(i=s))}return r.length?{type:9,value:i.map((n,o)=>n.map((s,a)=>{let c=t.map((d,u)=>r[u]?r[u][o][a]??{type:0}:d);return e(...c)}))}:e(...t)},qt=l=>{let e=[],t=l.length,r="[\\^$.|?*+()";for(let i=0;i<t;i++){let n=l[i];switch(n){case"*":e.push(".","*");break;case"?":e.push(".");break;case"~":n=l[++i]||"";default:for(let o=0;o<r.length;o++)if(n===r[o]){e.push("\\");break}e.push(n);break}}return e.join("")},Wo=l=>({type:2,value:l});var Or=class{functions={};Register(...e){for(let t of e)for(let r of Object.keys(t)){if(/[^a-zA-Z0-9._]/.test(r))throw new Error("invalid function name (invalid character)");if(r.length>255)throw new Error("invalid function name (too long, > 255)");if(/^[^a-zA-Z]/.test(r))throw new Error("invalid function name (start with an ascii letter)");let i=r.toLowerCase();if(this.functions[i])throw new Error(`function name (${i}) is already in use`);let n=t[r];if(n.canonical_name=r,!n.unrolled){let o=n.arguments?.map(s=>!!s.unroll);o?.some(s=>!!s)&&(n.fn=Jo(o,n.fn),n.unrolled=!0)}this.functions[i]=n}}Get(e){let t=e.toLowerCase();return this.functions[t]}List(e=!0){let t={};for(let r of Object.keys(this.functions))e&&this.functions[r].visibility==="internal"||(t[r]=this.functions[r]);return t}Alias(e,t){let r=this.Get(t);if(!r)throw new Error(`referenced function ${t} does not exist`);this.Register({[e]:{...r}})}};var Kt=class{static default_color="#888";static UnpackValues(e){if(Array.isArray(e)){let t=e[0];return Array.isArray(t)||t instanceof Float64Array||t instanceof Float32Array?e.reduce((r,i)=>r.concat(this.UnpackValues(i)),[]):e.map(r=>isNaN(r)?void 0:r)}else{if(e instanceof Float32Array||e instanceof Float64Array)return Array.prototype.slice.call(e);if(e&&typeof e=="object"){let r=Object.keys(e).length;if(typeof e[0]<"u"&&typeof e[(r-1).toString()]<"u"){let i=[];for(let n=0;n<r;n++)i[n]=e[n.toString()];return i}}}return[]}static SparklineCommon(e,t){let r=[],i=B(t.text)?t.text.text:this.default_color,n=[i,i];return Array.isArray(e.calculated)&&(r=this.UnpackValues(e.calculated[0]),typeof e.calculated[1]=="string"&&(n[0]=e.calculated[1]),typeof e.calculated[2]=="string"&&(n[1]=e.calculated[2])),{values:r,colors:n}}static RenderLine(e,t,r,i,n){let{values:o,colors:s}=this.SparklineCommon(i,n),a=.05,c=.1,d=1;Array.isArray(i.calculated)&&typeof i.calculated[2]=="number"&&(d=i.calculated[2]);let u=0,h=0,f=-1;for(let m=0;m<o.length;m++){let p=o[m];typeof p=="number"&&(f>=0?(u=Math.min(u,p),h=Math.max(h,p)):(f=m,u=h=p))}if(u===h&&(u&&(u-=1),h+=1),u!==h){let m=e*(1-2*a)/(o.length-1),p=h-u,b=t*(1-2*c),_=t*c;r.strokeStyle=s[0],r.lineWidth=d,r.lineCap="round",r.lineJoin="round",r.beginPath();let x=0;for(let v=f;v<o.length;v++){let w=o[v];if(typeof w=="number"){let y=e*a+m*v,C=t-(w-u)*b/p-_;x===0?(r.moveTo(y,C),x=1):r.lineTo(y,C)}else x=0}r.stroke()}}static RenderColumn(e,t,r,i,n){let{values:o,colors:s}=this.SparklineCommon(i,n),a=3,c=2.5,d=0,u=0,h=!1;for(let f of o)typeof f=="number"&&(h?(d=Math.min(d,f),u=Math.max(u,f)):(h=!0,d=u=f));if(d===u&&(d&&(d-=1),u+=1),o.length){let f=(e-2*a-2)/(o.length-0),m=t-2*c,p=c;if(d!==u)if(d<0&&u>0){let b=u-d,_=p+u/b*m;for(let x=0;x<o.length;x++){let v=o[x];if(typeof v=="number"){let w=a+x*f,y=Math.abs(v)/b*m;if(v>=0){r.fillStyle=s[0];let C=_-y;r.fillRect(w+2,C,f-2,y)}else{r.fillStyle=s[1];let C=_;r.fillRect(w+2,C,f-2,y)}}}}else if(u>0){r.fillStyle=s[0];let b=u-d;for(let _=0;_<o.length;_++){let x=o[_];if(typeof x=="number"){let v=a+_*f,w=Math.max(1,(x-d)/b*m),y=t-p-w;r.fillRect(v+2,y,f-2,w)}}}else{r.fillStyle=s[1];let b=u-d;for(let _=0;_<o.length;_++){let x=o[_];if(typeof x=="number"){let v=a+_*f,w=Math.max(1,Math.abs(u-x)/b*m),y=p;r.fillRect(v+2,y,f-2,w)}}}}}};var qo=l=>{let{x:e,y:t,width:r,height:i,cell:n}=l,o={},s=3,a=Math.round(16*(l.scale||1));if(n&&r&&i&&e&&t){let c={x:s,y:i-s-a};if(n.style){switch(n.style.vertical_align){case"top":c.y=s;break;case"middle":c.y=Math.round((i-a)/2);break}switch(n.style.horizontal_align){case"right":c.x=Math.round(r-s-a);break;case"center":c.x=Math.round((r-a)/2);break}}e>=c.x&&e<=c.x+a&&t>=c.y&&t<=c.y+a&&(o.value=`=Checkbox(${n.calculated?"FALSE":"TRUE"})`,o.block_selection=!0)}return o},Ko=l=>{let{context:e,width:t,height:r,cell:i}=l,n=l.scale||1;e.lineJoin="round",e.lineCap="round";let o=3*n,s=16*n,a=o,c=r-o-s;if(i.style){switch(i.style.vertical_align){case"top":c=o;break;case"middle":c=(r-s)/2;break}switch(i.style.horizontal_align){case"right":a=t-o-s;break;case"center":a=(t-s)/2;break}}a=Math.floor(a)+.5,c=Math.floor(c)+.5;let d=Math.floor(a+s)+.5,u=Math.floor(c+s)+.5;if(i&&i.calculated){e.lineWidth=.5,e.fillStyle=e.strokeStyle,e.beginPath(),e.moveTo(a,c),e.lineTo(a+16*n,c),e.lineTo(a+16*n,c+16*n),e.lineTo(a,c+16*n),e.closePath(),e.moveTo(a+15*n,c+4*n);for(let h of[[13.59,2.58],[6,10.17],[2.41,6.59],[1,8],[6,13]])e.lineTo(a+h[0]*n,c+h[1]*n);e.closePath(),e.fill()}else e.lineWidth=1,e.lineJoin="round",e.beginPath(),e.moveTo(a,c),e.lineTo(d,c),e.lineTo(d,u),e.lineTo(a,u),e.closePath(),e.stroke();return{handled:!0}};var Xe=l=>{switch(l.type){case 8:return l.value;case 3:return{real:l.value,imaginary:0};case 4:return{real:l.value?1:0,imaginary:0};case 0:return{real:0,imaginary:0}}return!1};var Xo=(l,e,t)=>{let r=new Date;return r.setMilliseconds(0),r.setSeconds(0),r.setMinutes(0),r.setHours(0),l<0||l>1e4||(l<1899&&(l+=1900),r.setFullYear(l),e<1||e>12)||(r.setMonth(e-1),t<1||t>31)?!1:(r.setDate(t),He(r.getTime()))};var Qo=(l,e)=>{let t=new Date(Oe(l)),r=t.getUTCMonth()+e,i=t.getUTCFullYear();for(t.setUTCHours(12),t.setUTCMinutes(0),t.setUTCSeconds(0),t.setUTCMilliseconds(0);r<0;)r+=12,i--;for(;r>11;)r-=12,i++;if(t.setUTCMonth(r),t.setUTCFullYear(i),t.getUTCMonth()!==r){let o=t.getUTCDate();t=new Date(t.getTime()-o*86400*1e3)}return t},Yo=[{name:"Lookup value"},{name:"Table"},{name:"Result index"},{name:"Inexact",default:!0}],Zo=(l,e,t,r=!0,i=!1)=>{if(i&&(e=an(e)),t=Math.max(0,t-1),r){let n=e[t][0];if(typeof l=="number"){let o=Number(e[0][0]);if(isNaN(o)||o>l)return Se();for(let s=1;s<e[0].length&&(o=Number(e[0][s]),!(isNaN(o)||o>l));s++)n=e[t][s]}else{l=(l||"").toString().toLowerCase();let o=(e[0][0]||"").toString().toLowerCase();if(o.localeCompare(l)>0)return Se();for(let s=1;s<e[0].length&&(o=(e[0][s]||"").toString().toLowerCase(),!(o.localeCompare(l)>0));s++)n=e[t][s]}return j(n)}else{for(let n=0;n<e[0].length;n++)if(e[0][n]==l)return j(e[t][n]);return Se()}},Hr=(l,e=!1)=>{if(!l)return e;switch(l.type){case 3:return l.value;case 0:return e}return!1},je=(l,e,t)=>({description:t,arguments:[{name:"number",boxed:!0,unroll:!0}],fn:r=>r.type===3?{type:3,value:l(r.value)}:r.type===8?{type:8,value:e(r.value)}:E()}),es=(l,e,t)=>{if(e===t)return 0;if(e===void 0)return 1;if(t===void 0)return-1;if(typeof e=="number"&&typeof t=="number")return(e-t)*l;if(typeof e=="string"&&typeof t=="string")return e.toLocaleLowerCase().localeCompare(t.toLowerCase())*l;if(typeof e=="boolean"&&typeof t=="boolean")return e?l:-l;if(ye(e)&&ye(t))return 0;let r=[e,t].map(i=>{switch(typeof i){case"number":return 0;case"string":return 2;case"boolean":return 3;default:return ye(i)?1:4}});return(r[0]-r[1])*l},cn={Sqrt:{description:"Returns the square root of the argument",arguments:[{boxed:!0,unroll:!0}],fn:l=>{if(l.type===8){let e=Ce(l.value,{real:.5,imaginary:0});return he(e)}else{if(l.type===0||!l.value)return{type:3,value:0};if(l.type===3&&l.value<0){let e=Ce({real:l.value,imaginary:0},{real:.5,imaginary:0});return{type:8,value:e}}else if(l.type===3){let e=Math.sqrt(l.value);return isNaN(e)?U():{type:3,value:e}}else return U()}}},Power:{description:"Returns base raised to the given power",arguments:[{name:"base",boxed:!0,unroll:!0},{name:"exponent",boxed:!0,unroll:!0}],fn:(l,e)=>{if(l.type===3&&e.type===3&&(l.value>=0||e.value===0||Math.abs(e.value)>=1)){let i=Math.pow(l.value,e.value);return isNaN(i)?U():{type:3,value:i}}let t=Xe(l),r=Xe(e);if(t&&r){let i=Ce(t,r);return he(i)}return U()}}},pt={True:{fn:()=>({type:4,value:!0})},False:{fn:()=>({type:4,value:!1})},Int:{fn:l=>({type:3,value:Math.floor(l)})},Rand:{volatile:!0,fn:()=>({type:3,value:Math.random()})},RandArray:{volatile:!0,arguments:[{name:"rows"},{name:"columns"},{name:"min"},{name:"max"},{name:"integer"}],description:"Returns an array of uniformly-distributed random numbers",fn:(l=1,e=1,t=0,r=1,i=!1)=>{let n=[];if(i){let o=r-t+1;for(let s=0;s<e;s++){let a=[];for(let c=0;c<l;c++)a.push({type:3,value:Math.floor(Math.random()*o+t)});n.push(a)}}else{let o=r-t;for(let s=0;s<e;s++){let a=[];for(let c=0;c<l;c++)a.push({type:3,value:Math.random()*o+t});n.push(a)}}return{type:9,value:n}}},RandBetween:{arguments:[{name:"min"},{name:"max"}],volatile:!0,fn:(l=0,e=1)=>{if(l>e){let t=l;l=e,e=t}return{type:3,value:Math.floor(Math.random()*(e+1-l)+l)}}},Sum:{description:"Adds arguments and ranges",arguments:[{boxed:!0,name:"values or ranges",repeat:!0}],fn:(...l)=>{let e={real:0,imaginary:0},t=ae(l);for(let r of t)switch(r.type){case 3:e.real+=r.value;break;case 4:break;case 8:e.real+=r.value.real,e.imaginary+=r.value.imaginary;break;case 7:return r}return he(e)}},SumSQ:{description:"Returns the sum of the squares of all arguments",arguments:[{boxed:!0,name:"values or ranges",repeat:!0}],fn:(...l)=>{let e={real:0,imaginary:0},t=ae(l);for(let r of t)switch(r.type){case 3:e.real+=r.value*r.value;break;case 4:break;case 8:{let i=se(r.value,r.value);e.real+=i.real,e.imaginary+=i.imaginary}break;case 7:return r}return he(e)}},EDate:{arguments:[{name:"Start date",unroll:!0},{name:"Months",unroll:!0}],fn:(l,e=0)=>{if(typeof l!="number"||typeof e!="number")return E();let t=Qo(l,e);return{type:3,value:He(t.getTime(),!1)}}},EOMonth:{arguments:[{name:"Start date",unroll:!0},{name:"Months",unroll:!0}],fn:(l,e=0)=>{if(typeof l!="number"||typeof e!="number")return E();let t=Qo(l,e);switch(t.getUTCMonth()){case 1:{let i=t.getUTCFullYear();i%4===0&&(i===1900||i%400===0||i%100!==0)?t.setUTCDate(29):t.setUTCDate(28)}break;case 0:case 2:case 4:case 6:case 7:case 9:case 11:t.setUTCDate(31);break;default:t.setUTCDate(30);break}return{type:3,value:He(t.getTime(),!1)}}},Now:{description:"Returns current time",volatile:!0,fn:()=>({type:3,value:He(new Date().getTime())})},YearFrac:{description:"Returns the fraction of a year between two dates",arguments:[{name:"Start"},{name:"End"},{name:"Basis",default:0}],fn:(l,e,t)=>{if(e<l){let n=l;l=e,e=n}let r=Math.max(0,e-l),i=360;if(t&&t<0||t>4)return E();switch(t){case 1:break;case 2:break;case 3:i=365;break}return{type:3,value:r/i}}},Date:{description:"Constructs a date from year/month/day",arguments:[{name:"year",unroll:!0},{name:"month",unroll:!0},{name:"day",unroll:!0}],fn:(l,e,t)=>{let r=Xo(l,e,t);return r===!1?E():{type:3,value:r}}},Today:{description:"Returns current day",volatile:!0,fn:()=>{let l=new Date;return l.setMilliseconds(0),l.setSeconds(0),l.setMinutes(0),l.setHours(12),{type:3,value:He(l.getTime())}}},IfError:{description:"Returns the original value, or the alternate value if the original value contains an error",arguments:[{name:"original value",allow_error:!0,boxed:!0},{name:"alternate value"}],fn:(l,e=0)=>l&&l.type===7?{value:e,type:ve(e)}:l},IsNA:{description:"Checks if another cell contains a #NA error",arguments:[{name:"reference",allow_error:!0,boxed:!0}],fn:(...l)=>{let e=ae(l);for(let t of e)if(t.type===7&&t.value==="N/A")return{type:4,value:!0};return{type:4,value:!1}}},IsErr:{description:"Checks if another cell contains an error",arguments:[{name:"reference",allow_error:!0,boxed:!0}],fn:(...l)=>{let e=ae(l);for(let t of e)if(t.type===7&&t.value!=="N/A")return{type:4,value:!0};return{type:4,value:!1}}},IsError:{description:"Checks if another cell contains an error",arguments:[{name:"reference",allow_error:!0,boxed:!0}],fn:(...l)=>{let e=ae(l);for(let t of e)if(t.type===7)return{type:4,value:!0};return{type:4,value:!1}}},Year:{description:"Returns year from date",arguments:[{name:"date",unroll:!0}],fn:l=>j(new Date(Oe(l)).getUTCFullYear())},Month:{description:"Returns month from date",arguments:[{name:"date",unroll:!0}],fn:l=>j(new Date(Oe(l)).getUTCMonth()+1)},Day:{description:"Returns day of month from date",arguments:[{name:"date",unroll:!0}],fn:l=>j(new Date(Oe(l)).getUTCDate())},Radians:{description:"Converts degrees to radians",arguments:[{name:"Degrees",description:"Angle in degrees",unroll:!0}],fn:l=>j(l*Math.PI/180)},Degrees:{description:"Converts radians to degrees",arguments:[{name:"Radians",description:"Angle in radians",unroll:!0}],fn:l=>j(l/Math.PI*180)},CountA:{description:"Counts cells that are not empty",fn:(...l)=>j(K(l).reduce((e,t)=>typeof t>"u"?e:e+1,0))},Count:{description:"Counts cells that contain numbers",fn:(...l)=>j(K(l).reduce((e,t)=>typeof t=="number"||ye(t)?e+1:e,0))},Or:{fn:(...l)=>{let e=!1;l=K(l);for(let t of l)e=e||!!t;return j(e)}},And:{fn:(...l)=>{let e=!0;l=K(l);for(let t of l)e=e&&!!t;return j(e)}},Not:{arguments:[{unroll:!0,boxed:!0}],fn:l=>{let e=!1;if(l)switch(l.type){case 0:e=!1;break;case 2:case 4:case 3:e=!!l.value;break;case 7:return l}return j(!e)}},If:{arguments:[{name:"test value",boxed:!0},{name:"value if true",boxed:!0,allow_error:!0},{name:"value if false",boxed:!0,allow_error:!0}],fn:(l,e={type:4,value:!0},t={type:4,value:!1})=>{let r=e.type===9,i=t.type===9;return l.type===9?{type:9,value:l.value.map((o,s)=>o.map((a,c)=>(a.type===2?a.value.toLowerCase()!=="false"&&a.value.toLowerCase()!=="f":!!a.value)?r?e.value[s][c]:e:i?t.value[s][c]:t))}:(l.type===2?l.value.toLowerCase()!=="false"&&l.value.toLowerCase()!=="f":!!l.value)?e:t}},Fact:{description:"Returns the factorial of a number",arguments:[{name:"number",unroll:!0}],fn:l=>{l=Math.round(l);let e=1;for(;l>1;)e*=l,l--;return{type:3,value:e}}},Factdouble:{description:"Returns the double factorial of a number",arguments:[{name:"number",unroll:!0}],fn:l=>{l=Math.round(l);let e=1;for(;l>1;)e*=l,l-=2;return{type:3,value:e}}},Power:{description:"Returns base raised to the given power",arguments:[{name:"base",boxed:!0,unroll:!0},{name:"exponent",boxed:!0,unroll:!0}],fn:(l,e)=>{let t=Xe(l),r=Xe(e);if(!t||!r)return U();if(l.type===8||e.type===8)return he(Ce(t,r));{let i=Math.pow(t.real,r.real);return isNaN(i)?U():{type:3,value:i}}}},Mod:{arguments:[{unroll:!0},{unroll:!0}],fn:(l,e)=>e?j(l%e):xe()},Large:{description:"Returns the nth numeric value from the data, in descending order",arguments:[{name:"values"},{name:"index",unroll:!0}],fn:(l,e)=>{if(e<=0)return E();let t=ie(l);return t.sort((r,i)=>i-r),e<=t.length?{type:3,value:t[e-1]}:E()}},Small:{description:"Returns the nth numeric value from the data, in ascending order",arguments:[{name:"values"},{name:"index",unroll:!0}],fn:(l,e)=>{if(e<=0)return E();let t=ie(l);return t.sort((r,i)=>r-i),e<=t.length?{type:3,value:t[e-1]}:E()}},Filter:{description:"Filter an array using a second array.",arguments:[{name:"source",description:"Source array"},{name:"filter",description:"Filter array"}],fn:(l,e)=>{if(typeof l>"u"||typeof e>"u")return E();Array.isArray(l)||(l=[[l]]),Array.isArray(e)||(e=[[e]]);let t=l.length,r=l[0].length,i=e.length,n=e[0].length;if(r===n){let o=[];for(let s=0;s<t;s++)o.push([]);for(let[s,a]of e[0].entries())if(a)for(let c=0;c<t;c++)o[c].push(j(l[c][s]));return{type:9,value:o}}else if(t===i){let o=[];for(let[s,[a]]of e.entries())a&&o.push(l[s].map(c=>j(c)));return{type:9,value:o}}return E()}},SortBy:{arguments:[{name:"array"},{name:"index"},{name:"order",description:"Set to -1 to sort in descending order",default:1}],fn:(l,...e)=>{if(Array.isArray(l)||(l=[[l]]),e.length<1)return E();let t=l[0]?.length||0,r=[],i=[];for(let a=0;a<e.length;a+=2){let c=a/2,d=e[a];if(Array.isArray(d)||(d=[[d]]),(d[0]?.length||0)!==t)return E();let h=1,f=e[a+1];typeof f=="number"&&f<0&&(h=-1),r[c]=h,i[c]=d[0]}let n=l[0]?.map((a,c)=>c);n.sort((a,c)=>{for(let d=0;d<r.length;d++){let u=r[d],h=i[d],f=es(u,h[a],h[c]);if(f)return f}return 0});let o=l.length,s=[];for(let a=0;a<o;a++){let c=[];for(let d of n)c.push(j(l[a][d]));s.push(c)}return{type:9,value:s}}},Sort:{arguments:[{name:"array"},{name:"index"},{name:"order",description:"Set to -1 to sort in descending order",default:1}],fn:(l,e=1,t=1)=>{Array.isArray(l)||(l=[[l]]);let r=l[e-1];if(!r)return E();t<0?t=-1:t=1;let i=r.map((s,a)=>({value:s,index:a}));i.sort((s,a)=>es(t,s.value,a.value));let n=l.length,o=[];for(let s=0;s<n;s++){let a=[];for(let{index:c}of i)a.push(j(l[s][c]));o.push(a)}return{type:9,value:o}}},Transpose:{description:"Returns transpose of input matrix",arguments:[{name:"matrix",boxed:!0}],fn:l=>l.type===9?{type:9,value:Nr(l.value)}:l},Max:{fn:(...l)=>({type:3,value:Math.max.apply(0,ie(l))})},Min:{fn:(...l)=>({type:3,value:Math.min.apply(0,ie(l))})},SumProduct:{description:"Returns the sum of pairwise products of two or more ranges",fn:(...l)=>{let e=l.map(i=>K(i)),t=Math.max.apply(0,e.map(i=>i.length)),r=0;for(let i=0;i<t;i++)r+=e.reduce((n,o)=>{let s=o[i];return s===!0&&(s=1),typeof s=="number"?n*s:0},1);return{type:3,value:r}}},Row:{arguments:[{name:"reference",metadata:!0}],fn:function(l){if(!l)if(this?.area){let e=[];for(let t=this.area.start.column;t<=this.area.end.column;t++){let r=[];for(let i=this.area.start.row;i<=this.area.end.row;i++)r.push({type:3,value:i+1});e.push(r)}return{type:9,value:e}}else return{type:3,value:this?this.address.row+1:-1};if(l.type===9){let e=l.value,t=e[0][0];if(fe(t))return{type:9,value:[e[0].map((r,i)=>({type:3,value:i+t.value.address.row+1}))]}}else if(fe(l))return{type:3,value:l.value.address.row+1};return E()}},Column:{arguments:[{name:"reference",metadata:!0}],fn:function(l){if(!l)if(this?.area){let e=[];for(let t=this.area.start.column;t<=this.area.end.column;t++){let r=[];for(let i=this.area.start.row;i<=this.area.end.row;i++)r.push({type:3,value:t+1});e.push(r)}return{type:9,value:e}}else return{type:3,value:this?this.address.column+1:-1};if(l.type===9){let e=l.value,t=e[0][0];if(fe(t))return{type:9,value:e.map((r,i)=>[{type:3,value:i+t.value.address.column+1}])}}else if(fe(l))return{type:3,value:l.value.address.row+1};return E()}},Choose:{arguments:[{name:"Selected index"},{name:"Choice 1...",metadata:!0}],return_type:"reference",description:"Returns one of a list of choices",fn:(l,...e)=>{if(l<1||l>e.length)return U();let t=e[l-1];if(fe(t))return{type:5,value:t.value.address};if(t.type===9){let r=t.value,i=r.length,n=r[0].length,o=r[0][0],s=r[i-1][n-1];if(i===1&&n===1){if(fe(o))return{type:5,value:o.value.address}}else if(fe(o)&&fe(s))return{type:5,value:{type:"range",position:0,id:0,label:"",start:o.value.address,end:s.value.address}}}return{...t}}},XLOOKUP:{arguments:[{name:"Lookup value"},{name:"Lookup array"},{name:"Return array",metadata:!0},{name:"Not found",boxed:!0},{name:"Match mode",default:0},{name:"Search mode",default:1}],return_type:"reference",xlfn:!0,fn:(l,e,t,r,i=0,n=1)=>{if(!t)return E();let o,s=!1;if(t.type===9){let u=t.value,h=u.length,f=u[0].length,m=u[0][0],p=u[h-1][f-1];fe(m)&&fe(p)?o=new g(m.value.address,p.value.address):s=!0}if(!o&&!s)return console.info("invalid range"),J();if(!Array.isArray(e))return console.info("lookup is not an array"),U();let a=e[0];if(!Array.isArray(a))return console.info("lookup is not a 2d array"),U();if(e.length!==1&&a.length!==1)return console.info("lookup array has invalid dimensions"),U();let c=e.length===1;c&&(e=an(e)),n<0&&e.reverse();let d=u=>{if(s&&t.type===9){let m=t.value.length,p=t.value[0]?.length||0,b=[],_=0,x=p-1,v=0,w=m-1;c?(n<0&&(u=p-1-u),_=x=u):(n<0&&(u=m-1-u),v=w=u);for(let y=v;y<=w;y++){let C=[];for(let S=_;S<=x;S++)C.push(t.value[y][S]);b.push(C)}return{type:9,value:b}}if(!o)throw new Error("invalid range");let h,f;if(c?(n<0&&(u=o.rows-1-u),u>=0&&u<o.rows&&(h={type:"address",position:0,id:1,label:"",row:o.start.row+u,column:o.start.column,sheet_id:o.start.sheet_id},f={type:"address",position:0,id:2,label:"",row:o.start.row+u,column:o.end.column,sheet_id:o.start.sheet_id})):(n<0&&(u=o.columns-1-u),u>=0&&u<o.columns&&(h={type:"address",position:0,id:1,label:"",row:o.start.row,column:o.start.column+u,sheet_id:o.start.sheet_id},f={type:"address",position:0,id:2,label:"",row:o.end.row,column:o.start.column+u,sheet_id:o.start.sheet_id})),h&&f){let m={type:"range",position:0,id:0,label:"",start:h,end:f};return{type:5,value:m}}return{type:0}};if(i===2&&typeof l!="string"&&(i=0),(i===1||i===-1)&&typeof l=="number"){let u=0,h=-1;for(let f=0;f<e.length;f++){let m=e[f][0];if(typeof m=="number"){if(m===l)return d(f);let p=Math.abs(m-l);(i===1&&m>l||i===-1&&m<l)&&(h<0||p<u)&&(u=p,h=f)}}if(h>=0)return d(h)}switch(i){case 2:{let u=qt(l?.toString()||""),h=new RegExp("^"+u+"$","i");for(let f=0;f<e.length;f++){let m=e[f][0];if(typeof m=="string"&&h.exec(m))return d(f)}}break;case 0:typeof l=="string"&&(l=l.toLowerCase());for(let u=0;u<e.length;u++){let h=e[u][0];if(typeof h=="string"&&(h=h.toLowerCase()),h===l)return d(u)}break}return r&&r.type!==0?r:Se()}},HLookup:{arguments:[...Yo],fn:(l,e,t,r=!0)=>Zo(l,e,t,r,!0)},VLookup:{arguments:[...Yo],fn:(l,e,t,r=!0)=>Zo(l,e,t,r,!1)},Product:{arguments:[{boxed:!0}],fn:(...l)=>{let e={real:1,imaginary:0};l=ae(l);for(let t of l)t.type===8?e=se(e,t.value):t.type===3&&(e.real*=t.value,e.imaginary*=t.value);return he(e)}},Log:{arguments:[{name:"number",unroll:!0},{name:"base",unroll:!0}],fn:(l,e=10)=>({type:3,value:Math.log(l)/Math.log(e)})},Log10:{arguments:[{name:"number",unroll:!0}],fn:l=>({type:3,value:Math.log(l)/Math.log(10)})},Ln:{arguments:[{name:"number",unroll:!0}],fn:l=>({type:3,value:Math.log(l)})},"Ceiling.Math":{arguments:[{name:"number",unroll:!0},{name:"significance",unroll:!0},{name:"away from zero",unroll:!0}],xlfn:!0,fn:(l,e=1,t)=>{let r=0;return t&&l<0?r=-Math.ceil(-l/e)*e:r=Math.ceil(l/e)*e,{type:3,value:r}}},"Floor.Math":{arguments:[{name:"number",unroll:!0},{name:"significance",unroll:!0},{name:"away from zero",unroll:!0}],fn:(l,e=1,t)=>{let r=0;return t&&l<0?r=-Math.floor(-l/e)*e:r=Math.floor(l/e)*e,{type:3,value:r}}},Floor:{arguments:[{name:"number",unroll:!0},{name:"significance",unroll:!0}],fn:(l,e=1)=>({type:3,value:Math.floor(l/e)*e})},Ceiling:{arguments:[{name:"number",unroll:!0},{name:"significance",unroll:!0}],fn:(l,e=1)=>({type:3,value:Math.ceil(l/e)*e})},Round:{arguments:[{unroll:!0},{unroll:!0}],fn:(l,e=0)=>{let t=Math.pow(10,e);return{type:3,value:Math.round(t*l)/t}}},RoundDown:{arguments:[{unroll:!0},{unroll:!0}],fn:(l,e=0)=>{let t=Math.pow(10,e),r=l>=0;return{type:3,value:r?Math.floor(t*l)/t:Math.ceil(t*l)/t}}},RoundUp:{arguments:[{unroll:!0},{unroll:!0}],fn:(l,e=0)=>{let t=Math.pow(10,e),r=l>=0;return{type:3,value:r?Math.ceil(t*l)/t:Math.floor(t*l)/t}}},Reverse:{arguments:[{boxed:!0}],fn:l=>l.type===9?(l.value.length===1?l.value[0].reverse():l.value.reverse(),l):{type:2,value:(l.value??"").toString().split("").reverse().join("")}},Exp:{arguments:[{boxed:!0,unroll:!0}],fn:l=>{if(l.type===8){let e=Wt(l.value);return he(e)}return l.type!==3?U():{type:3,value:Math.exp(l.value)}}},Abs:{arguments:[{boxed:!0,unroll:!0}],fn:l=>l.type===8?{type:3,value:Math.sqrt(l.value.real*l.value.real+l.value.imaginary*l.value.imaginary)}:l.type!==3?U():{type:3,value:Math.abs(l.value||0)}},Simplify:{arguments:[{name:"value",unroll:!0},{name:"significant digits",unroll:!0}],fn:(l,e=2)=>{if(e=e||2,l===0)return{type:3,value:l};let t=l<0?-1:1;l*=t;let r=Math.pow(10,Math.floor(Math.log10(l))+1-e);return{type:3,value:Math.round(l/r)*r*t}}},Sqrt:{description:"Returns the square root of the argument",arguments:[{boxed:!0,unroll:!0}],fn:l=>{if(l.type===8){let e=Ce(l.value,{real:.5,imaginary:0});return he(e)}else{if(l.type===0||!l.value)return{type:3,value:0};if(l.type===3)return{type:3,value:Math.sqrt(l.value)}}return U()}},HexToDec:{arguments:[{description:"hexadecimal string",unroll:!0}],fn:l=>({type:3,value:parseInt(l,16)})},DecToHex:{arguments:[{description:"number",unroll:!0}],fn:l=>({type:2,value:l.toString(16)})},Checkbox:{arguments:[{name:"checked"}],click:qo,render:Ko,fn:l=>({value:!!l,type:4})},"Sparkline.Column":{arguments:[{name:"data"},{name:"color"},{name:"negative color"}],render:l=>(Kt.RenderColumn(l.width,l.height,l.context,l.cell,l.style),{handled:!0}),fn:(...l)=>({type:5,value:l,key:"sparkline-data"})},"Sparkline.Line":{arguments:[{name:"data"},{name:"color"},{name:"line width"}],render:l=>(Kt.RenderLine(l.width,l.height,l.context,l.cell,l.style),{handled:!0}),fn:(...l)=>({type:5,value:l,key:"sparkline-data"})},UniqueValues:{arguments:[{name:"range",boxed:!0}],visibility:"internal",fn:l=>{if(l.type===9){let e=n=>{if(n)switch(n.type){case 2:case 3:case 4:return n.value;case 0:return"";default:return console.info("check",n,n.value),n.value?.toString()||""}else return""},t=new Set,r=new Set;for(let n of l.value)for(let o of n){let s=e(o);t.has(s)?r.add(s):t.add(s)}let i=[];for(let n of l.value){let o=[];for(let s of n){let a=e(s);o.push({type:4,value:!r.has(a)})}i.push(o)}return{type:9,value:i}}return{type:4,value:!0}}},Between:{arguments:[{name:"target",boxed:!0,unroll:!0},{name:"min"},{name:"max"}],visibility:"internal",fn:(l,e=0,t=1)=>({type:4,value:l.type===3&&l.value>=e&&l.value<=t})},Gradient:{arguments:[{name:"range",boxed:!0},{name:"min"},{name:"max"},{name:"parameters"}],visibility:"internal",fn:(l,e,t,r)=>{let i=ae([l]),n=0,o=0,s=0;for(let u of i){if(u.type===7)return u;u.type===3&&(n===0&&!r?(o=u.value,s=u.value):(o=Math.min(o,u.value),s=Math.max(s,u.value)),n++)}typeof t=="number"&&(s=t),typeof e=="number"&&(o=e);let a=s-o,c=1,d=1;if(l.type===9){c=l.value.length,d=l.value[0]?.length||0;let u=[];for(let h=0;h<c;h++){let f=[];for(let m=0;m<d;m++){let p=l.value[h][m];if(p.type===3){let b=0;s===o?p.value>s?b=1:p.value<s?b=0:b=.5:a>0&&(b=(p.value-o)/a),r?f.push({type:9,value:[[{type:3,value:b},{type:3,value:(0-o)/a}]]}):f.push({type:3,value:b})}else f.push({type:0})}u.push(f)}return{type:9,value:u}}else return E()}},ATan2:{arguments:[{name:"y",boxed:!0,unroll:!0},{name:"x",boxed:!0,unroll:!0}],fn:(l,e)=>{if(l.type===3&&e.type===3)return{type:3,value:Math.atan2(l.value,e.value)};if(l.type===3&&(l={type:8,value:{real:l.value,imaginary:0}}),e.type===3&&(e={type:8,value:{real:e.value,imaginary:0}}),l.type===8&&e.type===8){let t=Fo(l.value,e.value);return t===!1?E():{type:8,value:t}}return E()}},Sin:je(Math.sin,Ir),SinH:je(Math.sinh,Io),ASin:je(Math.asin,Zi),Cos:je(Math.cos,Lo),CosH:je(Math.cosh,Do),ACos:je(Math.acos,zo),Tan:je(Math.tan,Uo),TanH:je(Math.tanh,Mo),ATan:je(Math.atan,Vo),E:{fn:()=>({type:3,value:Math.E})},PI:{fn:()=>({type:3,value:Math.PI})},SQRT2:{fn:()=>({type:3,value:Math.SQRT2})},SQRT1_2:{fn:()=>({type:3,value:Math.SQRT1_2})},Sequence:{arguments:[{name:"rows",boxed:!0},{name:"columns",default:1,boxed:!0},{name:"start",default:1,boxed:!0},{name:"step",default:1,boxed:!0}],fn:(l,e,t,r)=>{let i=Hr(l,1),n=Hr(e,1),o=Hr(r,1),s=Hr(t,1);if(i===!1||n===!1||o===!1||s===!1)return E();let a=[];for(let c=0;c<n;c++){let d=[];for(let u=0;u<i;u++)d.push({type:3,value:s+u*o*n+c*o});a.push(d)}return{type:9,value:a}}}},ts={};for(let l of Object.keys(pt))ts[l.toLowerCase()]=l;var Dl=["ceil","pow","ln10","ln2","log10","log10e","log1p","log2","log2e","random","imul","clz32","fround","f16round"],rs={};for(let l of Dl)rs[l.toLowerCase()]=l;for(let l of Object.getOwnPropertyNames(Math)){let e=l.toLowerCase();if(ts[e]||rs[e])continue;let t=Object.getOwnPropertyDescriptor(Math,l);if(!t)continue;let r=t.value,i=typeof r;switch(i){case"number":pt[l]={fn:()=>({type:3,value:r}),category:["Math Functions"]};break;case"function":pt[l]={fn:(...n)=>j(r(...n)),category:["Math Functions"]};break;default:console.info("unexpected type:",i,l);break}}Math.log10||(Math.log10=l=>Math.log(l)/Math.log(10));var Xt=(l,e,t=0,r=0,i=0)=>i?-(t*(l/(1-Math.pow(1+l,-e))))/(1+l)-r*(1/((1+l)*((Math.pow(1+l,e)-1)/l))):-(t*l*Math.pow(1+l,e)+r*l)/(Math.pow(1+l,e)-1),ns=(l,e,t,r=0,i=0)=>i?(1+l)*-t/l*(Math.pow(1+l,e)-1)-r*Math.pow(1+l,e):-t/l*(Math.pow(1+l,e)-1)-r*Math.pow(1+l,e),dn=(l,e,t,r=0,i=0,n=0)=>{if(e<1)return NaN;if(e===1&&n)return 0;let o=Xt(l,t,r,i,n),s=ns(l,e-1,o,r,n)*l;return n?s/(1+l):s},is=(l,e,t,r=0,i=0,n=0)=>Xt(l,t,r,i,n)-dn(l,e,t,r,i,n),os={NPV:{description:"Returns the present value of a series of future cashflows",arguments:[{name:"Rate"},{name:"Cashflow"}],fn:(l=0,...e)=>{let t=0,r=K(e);for(let i=0;i<r.length;i++){let n=r[i];typeof n=="number"&&(t+=Math.pow(1+l,-(i+1))*n)}return{type:3,value:t}}},XNPV:{description:"returns the NPV of a nonperiodic stream of payments at a given rate",arguments:[{name:"Discount rate"},{name:"Values"},{name:"Dates"}],fn:(l,e,t)=>{if(typeof l!="number")return E();if(e=K(e),t=K(t),e.length!==t.length)return E();let r=[];for(let o of e){if(typeof o!="number")return E();r.push(o)}let i=[];for(let o of t){if(typeof o!="number")return E();i.push(Math.floor(o))}let n=0;for(let o=0;o<r.length;o++)n+=(r[o]||0)/Math.pow(1+l,(i[o]-i[0])/365);return{type:3,value:n}}},XIRR:{description:"returns the internal rate of return of a nonperiodic stream of payments",arguments:[{name:"Values"},{name:"Dates"},{name:"Guess",default:.1}],fn:(l,e,t=.1)=>{if(l=K(l),e=K(e),l.length!==e.length)return E();let r=0,i=0,n=[];for(let u of l){if(typeof u!="number")return E();u>0&&r++,u<0&&i++,n.push(u)}if(r<=0||i<=0)return E();let o=[];for(let u of e){if(typeof u!="number")return E();o.push(Math.floor(u))}let s=o[0];for(let u of o)if(u<s)return E();let a=.1,c=[{found:!1,value:0},{found:!1,value:0}],d=n.length;for(let u=0;u<100;u++){let h=0;for(let f=0;f<d;f++)h+=(n[f]||0)/Math.pow(1+t,(o[f]-o[0])/365);if(Math.abs(h)<=1e-6)return{type:3,value:t};if(h>0){if(c[0].value=c[0].found?Math.max(c[0].value,t):t,c[0].found=!0,!c[1].found){t+=a;continue}}else if(c[1].value=c[1].found?Math.min(c[1].value,t):t,c[1].found=!0,!c[0].found){t-=a;continue}t=c[0].value+(c[1].value-c[0].value)/2}return U()}},IRR:{description:"Calculates the internal rate of return of a series of cashflows",arguments:[{name:"Cashflows"},{name:"Guess",default:.1}],fn:(l,e=.1)=>{let t=K(l).map(n=>typeof n=="number"?n:0),r=.1,i=[{found:!1,value:0},{found:!1,value:0}];for(let n=0;n<50;n++){let o=0;for(let s=0;s<t.length;s++)o+=Math.pow(1+e,-(s+1))*t[s];if(Math.abs(o)<=.00125)return{type:3,value:e};if(o>0){if(i[0].value=i[0].found?Math.max(i[0].value,e):e,i[0].found=!0,!i[1].found){e+=r;continue}}else if(i[1].value=i[1].found?Math.min(i[1].value,e):e,i[1].found=!0,!i[0].found){e-=r;continue}e=i[0].value+(i[1].value-i[0].value)/2}return{type:7,value:"NUM"}}},CUMPRINC:{description:"Returns cumulative principal paid on a loan between two periods",arguments:[{name:"Rate"},{name:"Periods"},{name:"Present Value"},{name:"Start Period"},{name:"End Period"},{name:"Type",default:0}],fn:(l,e,t,r,i,n=0)=>{let o=0;for(let s=r;s<=i;s++)o+=is(l,s,e,t,0,n);return{type:3,value:o}}},CUMIPMT:{description:"Returns cumulative interest paid on a loan between two periods",arguments:[{name:"Rate"},{name:"Periods"},{name:"Present Value"},{name:"Start Period"},{name:"End Period"},{name:"Type",default:0}],fn:(l,e,t,r,i,n=0)=>{let o=0;for(let s=r;s<=i;s++)o+=dn(l,s,e,t,0,n);return{type:3,value:o}}},IPMT:{description:"Returns the interest portion of a payment",arguments:[{name:"Rate"},{name:"Period"},{name:"Periods"},{name:"Present Value",default:0},{name:"Future Value",default:0},{name:"Type",default:0}],fn:(l,e,t,r=0,i=0,n=0)=>({type:3,value:dn(l,e,t,r,i,n)})},PPMT:{description:"Returns the principal portion of a payment",arguments:[{name:"Rate"},{name:"Period"},{name:"Periods"},{name:"Present Value",default:0},{name:"Future Value",default:0},{name:"Type",default:0}],fn:(l,e,t,r=0,i=0,n=0)=>({type:3,value:is(l,e,t,r,i,n)})},Rate:{description:"Returns the interest rate of a loan",arguments:[{name:"Periods"},{name:"Payment"},{name:"Present Value",default:0},{name:"Future Value",default:0},{name:"Type",default:0}],fn:(l,e,t=0,r=0,i=0)=>{let n=.25,o=[-1,1],s=32,a=1e-6;for(let c=0;c<s;c++){let d=Xt(n,l,t,r,i);if(Math.abs(d-e)<=a)return{type:3,value:n};let u=Xt(o[1],l,t,r,i);e>=d&&e<=u||e>=u&&e<=d?o[0]=n:o[1]=n,n=o[0]+(o[1]-o[0])/2}return{type:3,value:n}}},FV:{description:"Returns the future value of an investment",arguments:[{name:"Rate"},{name:"Periods"},{name:"Payment"},{name:"Present Value",default:0},{name:"Type",default:0}],fn:(l,e,t,r=0,i=0)=>({type:3,value:ns(l,e,t,r,i)})},PV:{description:"Returns the present value of an investment",arguments:[{name:"Rate"},{name:"Periods"},{name:"Payment"},{name:"Future Value",default:0},{name:"Type",default:0}],fn:(l,e,t,r=0,i=0)=>i?(t+=r*(1/((1+l)*((Math.pow(1+l,e)-1)/l))),{type:3,value:-(t+t/l*(1-Math.pow(1+l,-(e-1))))}):{type:3,value:-(r+t/l*(Math.pow(1+l,e)-1))/Math.pow(1+l,e)}},NPER:{description:"Returns the number of periods of an investment",arguments:[{name:"Rate"},{name:"Payment"},{name:"Present Value"},{name:"Future Value",default:0},{name:"Type",default:0}],fn:(l,e,t=0,r=0,i=0)=>i?{type:3,value:1+(-Math.log(1+l*(1-t/-e))+Math.log(1+r*l/(-e*(1+l))))/Math.log(1+l)}:{type:3,value:(Math.log(Math.pow(1-t*l/-e,-1))+Math.log(1+r*l/-e))/Math.log(1+l)}},PMT:{description:"Returns the periodic payment of a loan",arguments:[{name:"Rate"},{name:"Periods"},{name:"Present Value"},{name:"Future Value",default:0},{name:"Type",default:0}],fn:(l,e,t,r=0,i=0)=>({type:3,value:Xt(l,e,t,r,i)})}};var ss={Char:{arguments:[{name:"number"}],fn:l=>({type:2,value:String.fromCodePoint(l||32)}),category:["text"]},Code:{arguments:[{name:"string"}],fn:l=>({type:3,value:l.codePointAt(0)||0}),category:["text"]},Value:{arguments:[{name:"text"}],fn:l=>{let e=pe.TryParse(l);return e.type===3?{type:3,value:e.value}:E()},category:["text"]},Text:{arguments:[{name:"value"},{name:"number format"}],fn:(l,e="0.00####")=>({type:2,value:F.Get(e).Format(l||0)}),category:["text"]},WildcardMatch:{visibility:"internal",arguments:[{name:"text",unroll:!0},{name:"text",unroll:!0},{name:"invert"}],fn:(l,e,t=!1)=>{if(typeof l=="string"&&typeof e=="string"){let r=qt(e),i=new RegExp("^"+r+"$","i").exec(l);return{type:4,value:t?!i:!!i}}return{type:4,value:l===e||l?.toString()===e?.toString()}}},Exact:{arguments:[{name:"text",boxed:!0,unroll:!0},{name:"text",boxed:!0,unroll:!0}],category:["text"],fn:(l,e)=>({type:4,value:l?.value?.toString()===e?.value?.toString()})},Len:{arguments:[{name:"string",unroll:!0}],fn:l=>({type:3,value:l.toString().length})},Substitute:{arguments:[{name:"text"},{name:"search"},{name:"replacement"},{name:"index"}],fn:(l,e,t,r)=>{if(typeof r=="number"){if(r<1)return U();let i=1;return{type:2,value:l.replaceAll(e,(...n)=>(console.info(n),i++===r?t:e))}}else return{type:2,value:l.replaceAll(e,t)}}},Left:{arguments:[{name:"string"},{name:"count"}],fn:(l,e=1)=>({type:2,value:l.substr(0,e)}),category:["text"]},Right:{arguments:[{name:"string"},{name:"count"}],fn:(l,e=1)=>({type:2,value:l.slice(-e)}),category:["text"]},Mid:{arguments:[{name:"string"},{name:"left"},{name:"count"}],fn:(l,e=0,t=1)=>({type:2,value:l.substr(Math.max(0,e-1),t)}),category:["text"]},Search:{description:"Find a string (needle) in another string (haystack). Case-insensitive.",arguments:[{name:"Needle"},{name:"Haystack"},{name:"Start",default:1}],fn:(l,e,t=1)=>{if(t>=1){if(!l)return{type:3,value:t};let r=qt(l),i=new RegExp(r,"i").exec(e.substr(t-1));if(i)return{type:3,value:i.index+t}}return U()}},Find:{description:"Find a string (needle) in another string (haystack). Case-sensitive.",arguments:[{name:"Needle"},{name:"Haystack"},{name:"Start",default:1}],fn:(l,e,t=1)=>{if(t>=1){if(!l)return{type:3,value:t};l=l.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");let r=new RegExp(l).exec(e.substr(t-1));if(r)return{type:3,value:r.index+t}}return U()}},Upper:{description:"Converts text to upper case",arguments:[{name:"text",unroll:!0}],fn:l=>l==null?{type:0}:{type:2,value:l.toString().toUpperCase()}},Lower:{description:"Converts text to lower case",arguments:[{name:"text",unroll:!0}],fn:l=>l==null?{type:0}:{type:2,value:l.toString().toLowerCase()}},Concat:{description:"Pastes strings together",fn:(...l)=>{let t=K(l).map(r=>{let i=r?.toString()||"";return typeof r=="number"&&V.decimal_separator===","?i.replace(/\./,","):i}).join("");return{type:2,value:t}}}},un={Concatenate:"Concat"};var Gr=(l,e)=>({type:4,value:typeof e.value?.value===l}),Br=[{name:"Reference",metadata:!0,unroll:!0}],as={IsBlank:{description:"Returns true if the reference is blank",arguments:Br,fn:Gr.bind(0,"undefined")},IsNumber:{description:"Returns true if the reference is a number",arguments:Br,fn:Gr.bind(0,"number")},IsLogical:{description:"Returns true if the reference is a logical TRUE or FALSE",arguments:Br,fn:Gr.bind(0,"boolean")},IsText:{description:"Returns true if the reference is text",arguments:Br,fn:Gr.bind(0,"string")}};var ls=2220446049250313e-31,Ll=l=>{let e=1+l;return Math.log(e)-(e-1-l)/e},$r=(l,e,t,r)=>{let i=2*Number.MIN_VALUE,n=0,o=1,s=1-(l+e)*t/(l+1);Math.abs(s)<i&&(s=Number.NaN),s=1/s,n=s;for(let a=1;a<=512;a++){let c=a*(e-a)*t/((l-1+2*a)*(l+2*a)),d=0;if(s=1+c*s,o=1+c/o,Math.abs(s)<i&&(s=Number.NaN),Math.abs(o)<i&&(o=Number.NaN),s=1/s,d=s*o,n*=d,c=-(l+a)*(l+e+a)*t/((l+2*a)*(l+2*a+1)),s=1+c*s,o=1+c/o,Math.abs(s)<i&&(s=Number.NaN),Math.abs(o)<i&&(o=Number.NaN),s=1/s,d=s*o,n*=d,Math.abs(d-1)<2*ls||n*Math.abs(d-1)<r)return n}return Number.NaN},hn=(l,e,t)=>{if(e<0||t<0)return Number.NaN;if(l<=0)return 0;if(l>=1)return 1;if(l>.5)return 1-hn(1-l,t,e);let r=e/(e+t),i=0;if(l<.1){let n=(Math.log(e)+le(e)+le(t)-le(e+t)+Math.log(l))/e;n<=0?(i=Math.exp(n),i*=Math.pow(1-i,-(t-1)/e)):i=r,i>r&&(i=r)}else i=r;for(let n=0;n<64;n++){let o=l-mn(i,e,t),s=fn(i,e,t);if(o===0)return i;let a=o/Math.max(2*Math.abs(o/i),s),c=a,d=-((e-1)/i-(t-1)/(1-i))*a*a/2,u=c;if(Math.abs(d)<Math.abs(c)?u+=d:u*=2*Math.abs(c/d),i+u>0&&i+u<1?i+=u:i=Math.sqrt(i)*Math.sqrt(r),Math.abs(c)<=1e-10*i)return i}return i},le=l=>{let e=l-1,t=e+5.5;t-=(e+.5)*Math.log(t);let r=1,i=[76.18009173,-86.50532033,24.01409822,-1.231739516,.00120858003,-536382e-11];for(let n of i)r+=n/++e;return-t+Math.log(2.50662827465*r)},fn=(l,e,t)=>l<0||l>1?0:Math.exp(le(e+t)-le(e)-le(t))*Math.pow(l,e-1)*Math.pow(1-l,t-1),mn=(l,e,t)=>{if(l<=0)return 0;if(l>=1)return 1;let i=-(le(e)+le(t)-le(e+t))+e*Math.log(l)+t*Ll(-l),n=Math.exp(i);if(l<(e+1)/(e+t+2)){let o=$r(e,t,l,0);return n*o/e}else{let o=Math.abs(t/n)*ls,s=$r(t,e,1-l,o);return 1-n*s/t}},cs=(l,e,t)=>{if(l<0||l>1)return 0;let r=l===0||l===1?0:Math.exp(le(e+t)-le(e)-le(t)+e*Math.log(l)+t*Math.log(1-l));return l<(e+1)/(e+t+2)?r*$r(e,t,l,0)/e:1-r*$r(t,e,1-l,0)/t};var ds=l=>{let e=l-1,t=e+5.5;t-=(e+.5)*Math.log(t);let r=1,i=[76.18009173,-86.50532033,24.01409822,-1.231739516,.00120858003,-536382e-11];for(let n of i)r+=n/++e;return-t+Math.log(2.50662827465*r)},Il=(l,e)=>{let t=ds(l);if(e===0)return 0;let r=l,i=1/l,n=i;for(let o=1;o<1e3;o++)if(++r,n*=e/r,i+=n,Math.abs(n)<Math.abs(i)*3e-9)return i*Math.exp(-e+l*Math.log(e)-t);return console.error("too many iterations"),!1},zl=(l,e)=>{let t=ds(l),r=e+1-l,i=1/1e-30,n=1/r,o=n;for(let s=1;s<=1e3;s++){let a=-s*(s-l);r+=2,n=a*n+r,Math.abs(n)<1e-30&&(n=1e-30),i=r+a/i,Math.abs(i)<1e-30&&(i=1e-30),n=1/n;let c=n*i;if(o*=c,Math.abs(c-1)<3e-9)return Math.exp(-e+l*Math.log(e)-t)*o}return console.error("too many iterations"),!1},jr=(l,e)=>{if(e<0||l<=0)return console.error("invalid parameter"),!1;if(e<l+1)return Il(l,e);{let t=zl(l,e);return t===!1?!1:1-t}};var Qt=l=>{if(l===.5)return 0;let e=l<1&&l>.5?1-l:l,t=Math.sqrt(Math.log(1/Math.pow(e,2))),r=t-(2.515517+.802853*t+.010328*Math.pow(t,2))/(1+1.432788*t+.189269*Math.pow(t,2)+.001308*Math.pow(t,3));return l>.5?r:-r};var pn=(l,e)=>{let t=e/(e+l*l),r=e/2,n=cs(t,r,.5);return l>=0?1-.5*n:.5*n},bn=(l,e)=>{let t=le((e+1)/2),r=le(e/2)+.5*Math.log(e*Math.PI),i=-((e+1)/2)*Math.log(1+l*l/e),n=t-r+i;return Math.exp(n)},_n=(l,e)=>{let r=1;{let i=Qt(l),n=(Math.pow(i,3)+i)/4,o=(5*Math.pow(i,5)+16*Math.pow(i,3)+3*i)/96,s=(3*Math.pow(i,7)+19*Math.pow(i,5)+17*Math.pow(i,3)-15*i)/384,a=(79*Math.pow(i,9)+776*Math.pow(i,7)+1482*Math.pow(i,5)-1920*Math.pow(i,3)-945*i)/92160;r=i+n/e+o/Math.pow(e,2)+s/Math.pow(e,3)+a/Math.pow(e,4)}for(let i=0;i<16;i++){let n=pn(r,e)-l;if(Math.abs(n)<1e-12)break;let o=bn(r,e);if(o===0)break;let s=n/o,a=Math.max(-1,Math.min(1,s));r-=a}return r};var hs=l=>{let e=.254829592,t=-.284496736,r=1.421413741,i=-1.453152027,n=1.061405429,o=.3275911;l=Math.abs(l);let s=1/(1+o*l);return 1-((((n*s+i)*s+r)*s+t)*s+e)*s*Math.exp(-1*l*l)},Vl=Math.sqrt(2*Math.PI),gn=(l,e,t,r)=>{let i=0;return r?i=.5*(1+(l<e?-1:1)*hs(Math.abs(l-e)/(t*Math.sqrt(2)))):i=Math.exp(-1/2*Math.pow((l-e)/t,2))/(t*Vl),i},yn=l=>{let e=l.length;return e%2?l[Math.floor(e/2)]:(l[e/2]+l[e/2-1])/2},us=(l,e=!0)=>{l.sort((i,n)=>i-n);let t=l.length,r=(i,n,o)=>{let s=n*i+o,a=s%1;if(a){let c=l[Math.floor(s)],d=l[Math.ceil(s)];return c+(d-c)*a}else return l[s]};return e?[l[0],r(.25,t-1,0),yn(l),r(.75,t-1,0),l[t-1]]:t%1?[l[0],r(.25,t-2,0),yn(l),r(.75,t-2,1),l[t-1]]:[l[0],r(.25,t-3,0),yn(l),r(.75,t-3,2),l[t-1]]},Jr=l=>{let e=[.9999999999998099,676.5203681218851,-1259.1392167224028,771.3234287776531,-176.6150291621406,12.507343278686905,-.13857109526572012,9984369578019572e-21,15056327351493116e-23],t=Math.PI,r=Ir,i=Ke,n=se,o=m=>({real:m,imaginary:0}),s=(m,p)=>({real:m.real+p.real,imaginary:m.imaginary+p.imaginary}),a=Ce,c=Wt,d=m=>({real:-m.real,imaginary:-m.imaginary}),u=No;if(l.real<.5)return i(o(t),n(r(n(o(t),l)),Jr({real:1-l.real,imaginary:-l.imaginary})));l.real-=1;let h=o(e[0]);for(let m=1;m<e.length;m++)h=s(h,i(o(e[m]),s(l,o(m))));let f=s(l,o(7.5));return u(o(Math.sqrt(2*t)),a(f,s(l,o(.5))),c(d(f)),h)},Fl=(l,e,t)=>{let r=Jr({real:e,imaginary:0}).real;return Math.pow(l,e-1)*Math.exp(-l/t)/(r*Math.pow(t,e))},Nl=(l,e,t)=>{let r=0,i=e*10,n=1e-6,o=0;for(;i-r>n;){o++;let s=(i+r)/2,a=jr(e,r/t),c=jr(e,s/t);if(a===!1||c===!1)return!1;(c-l)*(a-l)<0?i=s:r=s}return(r+i)/2},Ie=(l,e=!1)=>{let t=l.length,r=0,i=0;for(let n=0;n<t;n++)r+=l[n];r/=t;for(let n=0;n<t;n++){let o=l[n]-r;i+=o*o}return e?i/(t-1):i/t},fs={Slope:{arguments:[{name:"known_y"},{name:"known_x"}],fn:(l,e)=>{let t=ie(e),r=ie(l);if(t.length!==r.length)return E();let i=0,n=0,o=0,s=0;for(let c=0;c<t.length;c++){let d=t[c],u=r[c];o+=d*u,i+=d,n+=u,s+=d*d}let a=(t.length*o-i*n)/(t.length*s-i*i);return{type:3,value:a}}},Intercept:{arguments:[{name:"known_y"},{name:"known_x"}],fn:(l,e)=>{let t=ie(e),r=ie(l);if(t.length!==r.length)return E();let i=t.length,n=0,o=0,s=0,a=0;for(let d=0;d<i;d++){let u=t[d],h=r[d];s+=u*h,n+=u,o+=h,a+=u*u}let c=i*s-n*o;return c/=i*a-n*n,{type:3,value:(o-c*n)/i}}},Phi:{arguments:[{name:"x",boxed:!0,unroll:!0}],fn:l=>l.type===3?{type:3,value:1/Math.sqrt(Math.PI*2)*Math.exp(-l.value*l.value/2)}:E()},"Z.Test":{arguments:[{name:"Array",boxed:!0},{name:"x",boxed:!0,unroll:!0},{name:"Sigma",boxed:!0,unroll:!0}],fn:(l,e,t)=>{let r=[];if(l.type===9)for(let i of l.value)for(let n of i)n.type===3&&r.push(n.value);else l.type===3&&r.push(l.value);if(r.length&&e.type===3){let i=0,n=r.length;for(let s of r)i+=s;i/=n;let o=t?.type===3?t.value:Math.sqrt(Ie(r,!0));return{type:3,value:1-gn((i-e.value)/(o/Math.sqrt(n)),0,1,!0)}}return E()}},"Beta.Dist":{description:"beta distribution",arguments:[{name:"x",unroll:!0},{name:"a"},{name:"b"},{name:"cumulative"}],fn:(l,e,t,r)=>e<0||t<0?E():r?{type:3,value:mn(l,e,t)}:{type:3,value:fn(l,e,t)}},"Beta.Inv":{description:"Inverse of the beta distribution",arguments:[{name:"probability",unroll:!0},{name:"a"},{name:"b"}],fn:(l,e,t)=>e<0||t<0?E():{type:3,value:hn(l,e,t)}},Erf:{fn:l=>({type:3,value:hs(l)})},"Norm.Inv":{description:"Inverse of the normal cumulative distribution",arguments:[{name:"probability"},{name:"mean",default:0},{name:"standard deviation",default:1}],xlfn:!0,fn:(l,e=0,t=1)=>({type:3,value:Qt(l)*t+e})},"Norm.S.Inv":{description:"Inverse of the standard normal cumulative distribution",arguments:[{name:"probability",unroll:!0}],xlfn:!0,fn:l=>({type:3,value:Qt(l)})},"Norm.Dist":{description:"Cumulative normal distribution",arguments:[{name:"value"},{name:"mean",default:0},{name:"standard deviation",default:1},{name:"cumulative",default:!0}],xlfn:!0,fn:(l,e=0,t=1,r=!0)=>({type:3,value:gn(l,e,t,r)})},"Norm.S.Dist":{description:"Cumulative normal distribution",arguments:[{name:"value"},{name:"cumulative",default:!0}],xlfn:!0,fn:(l,e=!0)=>({type:3,value:gn(l,0,1,e)})},"StDev.P":{description:"Returns the standard deviation of a set of values, corresponding to a population",arguments:[{name:"data"}],fn:(...l)=>({type:3,value:Math.sqrt(Ie(ie(l),!1))})},"StDev.S":{description:"Returns the standard deviation of a set of values, corresponding to a sample of a population",arguments:[{name:"data"}],fn:(...l)=>({type:3,value:Math.sqrt(Ie(ie(l),!0))})},"Var.P":{description:"Returns the variance of a set of values, corresponding to a population",arguments:[{name:"data"}],fn:(...l)=>({type:3,value:Ie(ie(l),!1)})},"Var.S":{description:"Returns the variance of a set of values, corresponding to a sample of a population",arguments:[{name:"data"}],fn:(...l)=>({type:3,value:Ie(ie(l),!0)})},Covar:{description:"Returns the covariance between two ranges of values",arguments:[{name:"A"},{name:"B"}],fn:(l,e)=>{if(!Array.isArray(l)||!Array.isArray(e))return U();if(!Array.isArray(l[0])||!Array.isArray(e[0]))return U();if(l.length!==e.length)return E();let t=0,r=0,i={x:0,y:0},n={x:[],y:[]};for(let o=0;o<l.length;o++){if(!l[o]||!e[o])continue;if(l[o].length!==e[o].length)return E();let s=l[o].length;r+=s;for(let a=0;a<s;a++)i.x+=l[o][a]||0,i.y+=e[o][a]||0,n.x.push(l[o][a]||0),n.y.push(e[o][a]||0)}if(r===0)return Se();i.x/=r,i.y/=r;for(let o=0;o<r;o++)t+=(n.x[o]-i.x)*(n.y[o]-i.y);return{type:3,value:t/r}}},Correl:{description:"Returns the correlation between two ranges of values",arguments:[{name:"A"},{name:"B"}],fn:(l,e)=>{if(!Array.isArray(l)||!Array.isArray(e))return U();if(!Array.isArray(l[0])||!Array.isArray(e[0]))return U();let t=0,r=0,i=0,n=0,o=0,s=0,a=0;for(let c=0;c<l.length;c++){if(!l[c]||!e[c])continue;let d=l[c].length;for(let u=0;u<d;u++){let h=Number(l[c][u]),f=Number(e[c][u]);isNaN(h)||isNaN(f)||(r+=h*f,i+=h,n+=f,o+=h*h,s+=f*f,a++)}}return t=a*r-i*n,t&&(t/=Math.sqrt((a*o-i*i)*(a*s-n*n))),{type:3,value:t}}},GeoMean:{description:"Returns the geometric mean of all numeric arguments",arguments:[{boxed:!0}],fn:(...l)=>{l=ae(l);let e=0,t={real:1,imaginary:0},r=!1,i=!1;for(let n of l)n.type===8?(r=!0,t=se(t,n.value),e++):n.type===3&&(n.value<0&&(i=!0),e++,t.real*=n.value,t.imaginary*=n.value);if(r){let n=Ce(t,{real:1/e,imaginary:0});return n.imaginary?{type:8,value:n}:{type:3,value:n.real}}else return i?U():{type:3,value:Math.pow(t.real,1/e)}}},LCM:{description:"Retuns the least common mulitple of the arguments",arguments:[{boxed:!0}],fn:(...l)=>{l=ae(l);let e=[];for(let i of l){if(i.type===7)return i;if(i.type===3)e.push(i.value);else if(i.type!==0)return console.info("RT",i.type),E()}let t=(i,n)=>i%n==0?n:t(n,i%n);if(e.length===0)return{type:3,value:0};let r=e[0];for(let i=1;i<e.length;i++)r=r*e[i]/t(r,e[i]);return{type:3,value:r}}},"Gamma.Inv":{description:"Returns the inverse of the gamma distribution",arguments:[{name:"probability",unroll:!0},{name:"alpha"},{name:"beta"}],fn:(l,e,t)=>{if(l<0||l>1)return E();let r=Nl(l,e,t);return r===!1?U():{type:3,value:r}}},"Gamma.Dist":{fn:(l,e,t,r)=>{if(l<0||e<=0||t<=0)return E();let i=r?jr(e,l/t):Fl(l,e,t);return i===!1?U():{type:3,value:i}}},"T.DIST":{description:"Returns the left-tailed Student's t-distribution",arguments:[{name:"X",unroll:!0,boxed:!0},{name:"degrees of freedom",unroll:!0,boxed:!0},{name:"cumulative",unroll:!0,boxed:!0}],fn:(l,e,t)=>{let r=t?!!t.value:!1;return e.type!==3||l.type!==3||e.value<1?E():{type:3,value:r?pn(l.value,e.value):bn(l.value,e.value)}}},"T.Inv":{description:"Returns the left-tailed inverse of the Student's t-distribution",arguments:[{name:"Probability",boxed:!0,unroll:!0},{name:"Degrees of freedom",boxed:!0,unroll:!0}],fn:(l,e)=>e.type!==3||e.value<1||l.type!==3||l.value<=0||l.value>=1?E():{type:3,value:_n(l.value,e.value)}},"T.Inv.2T":{description:"Returns the two-tailed inverse of the Student's t-distribution",arguments:[{name:"Probability",boxed:!0,unroll:!0},{name:"Degrees of freedom",boxed:!0,unroll:!0}],fn:(l,e)=>e.type!==3||e.value<1||l.type!==3||l.value<=0||l.value>=1?E():{type:3,value:Math.abs(_n(1-l.value/2,e.value))}},GammaLn:{description:"Returns the natural log of the gamma function",arguments:[{name:"value",boxed:!0,unroll:!0}],fn:l=>l.type===3?{type:3,value:le(l.value)}:E()},"GammaLn.Precise":{description:"Returns the natural log of the gamma function",arguments:[{name:"value",boxed:!0,unroll:!0}],fn:l=>{let e;if(l.type===3?e={real:l.value,imaginary:0}:l.type===8&&(e=l.value),e){let t=Jr(e);return he(en(t))}return E()}},Gamma:{description:"Returns the gamma function for the given value",arguments:[{name:"value",boxed:!0,unroll:!0}],fn:l=>{let e={real:0,imaginary:0};if(l.type===8)e={...l.value};else if(l.type===3)e.real=l.value;else return E();if(e.imaginary===0&&e.real%1===0&&e.real<=0)return U();let t=Jr(e);return Math.abs(t.imaginary)<=1e-7?{type:3,value:t.real}:{type:8,value:t}}},Delta:{arguments:[{name:"number"},{name:"number",default:0}],fn:(l,e=0)=>typeof l!="number"||typeof e!="number"?U():{type:3,value:l===e?1:0}},GCD:{description:"Finds the greatest common divisor of the arguments",arguments:[{boxed:!0}],fn:(...l)=>{l=ae(l);let e=[];for(let i of l){if(i.type===7)return i;if(i.type===3)e.push(i.value);else if(i.type!==0)return console.info("RT",i.type),E()}let t=(i,n)=>i%n==0?n:t(n,i%n);if(e.length===0)return U();if(e.length===1)return{type:3,value:e[0]};let r=e[0];for(let i=1;i<e.length;i++)r=t(r,e[i]);return{type:3,value:r}}},HarMean:{description:"Returns the harmonic mean of the arguments",arguments:[{boxed:!0}],fn:(...l)=>{l=ae(l);let e={real:0,imaginary:0},t=0;for(let r of l){if(r.type===7)return r;if(r.type===3&&(e.real+=1/r.value,t++),r.type===8){let i=Ke({real:1,imaginary:0},r.value);e.real+=i.real,e.imaginary+=i.imaginary,t++}}return e.imaginary?{type:8,value:Ke({real:t,imaginary:0},e)}:{type:3,value:t/e.real}}},Average:{description:"Returns the arithmetic mean of all numeric arguments",arguments:[{boxed:!0}],fn:(...l)=>{l=ae(l);let e={real:0,imaginary:0},t=0;for(let r of l){if(r.type===7)return r;r.type===3&&(e.real+=r.value,t++),r.type===8&&(e.real+=r.value.real,e.imaginary+=r.value.imaginary,t++)}return e.real/=t,e.imaginary/=t,e.imaginary?{type:8,value:e}:{type:3,value:e.real}}},Percentile:{description:"Returns the kth percentile value from the range of data",arguments:[{name:"range"},{name:"percentile"}],fn:(l,e)=>{let t=ie(l);t.sort((a,c)=>a-c);let r=t.length,i=Math.pow(10,8),n=Math.round((1+(r-1)*e)*i)/i,o=Math.floor(n),s=Math.ceil(n);return{type:3,value:(t[o-1]+t[s-1])/2}}},"Quartile.Inc":{description:"Returns the interpolated quartile of the data set (including median)",arguments:[{name:"range"},{name:"quartile"}],xlfn:!0,fn:(l,e)=>{if(typeof e!="number"||e<0||e>4||e%1)return E();let t=ie(l),r=us(t,!0);return{type:3,value:r[e]}}},"Quartile.Exc":{description:"Returns the interpolated quartile of the data set (excluding median)",arguments:[{name:"range"},{name:"quartile"}],xlfn:!0,fn:(l,e)=>{if(typeof e!="number"||e<1||e>3||e%1)return E();let t=ie(l),r=us(t,!1);return{type:3,value:r[e]}}},Median:{description:"Returns the median value of the range of data",arguments:[{name:"range"}],fn:(...l)=>{let e=ie(l);e.sort((o,s)=>o-s);let r=1+(e.length-1)*.5,i=Math.floor(r),n=Math.ceil(r);return{type:3,value:(e[i-1]+e[n-1])/2}}},Rank:{arguments:[{name:"Value"},{name:"Source"},{name:"Order"}],fn:(l,e,t=0)=>{if(typeof l!="number")return E();let r=ie(e);r.sort(t?(i,n)=>i-n:(i,n)=>n-i);for(let i=0;i<r.length;i++)if(r[i]===l)return{type:3,value:i+1};return U()}}},vn={Mean:"Average",StDev:"StDev.S",StDevA:"StDev.S",StDevPA:"StDev.P",Var:"Var.S",Quartile:"Quartile.Inc",NormSInv:"Norm.S.Inv",NormSDist:"Norm.S.Dist",NormDist:"Norm.Dist"};var ms={IsComplex:{description:"Returns true if the reference is a complex number",arguments:[{name:"Reference",metadata:!0,unroll:!0}],fn:l=>({type:4,value:!!l?.value&&ye(l.value.value)})},Real:{description:"Returns the real part of a complex number",arguments:[{boxed:!0,unroll:!0}],fn:l=>l.type===3?{...l}:l.type===8?{type:3,value:l.value.real||0}:l.type===0||l.type===2&&l.value===""?{type:3,value:0}:U()},Imaginary:{description:"Returns the imaginary part of a complex number (as real)",arguments:[{boxed:!0,unroll:!0}],fn:l=>l.type===8?{type:3,value:l.value.imaginary||0}:l.type===3||l.type===0||l.type===2&&l.value===""?{type:3,value:0}:U()},Conjugate:{description:"Returns the conjugate of a complex number",arguments:[{boxed:!0,unroll:!0}],fn:l=>{let e=Xe(l);return e?e.imaginary?{type:8,value:{real:e.real,imaginary:-e.imaginary}}:{type:3,value:e.real}:U()}},Arg:{description:"Returns the principal argument of a complex number (in radians)",arguments:[{boxed:!0,unroll:!0}],fn:l=>l.type===8?{type:3,value:Math.atan2(l.value.imaginary,l.value.real)}:l.type===3||l.type===0||l.type===2&&l.value===""?{type:3,value:Math.atan2(0,l.value||0)}:U()},Rectangular:{description:"Converts a complex number in polar form to rectangular form",arguments:[{name:"r"},{name:"\u03B8 in radians"}],fn:(l=0,e=0)=>({type:8,value:{real:l*Math.cos(e),imaginary:l*Math.sin(e)}})},Complex:{description:"Ensures that the given value will be treated as a complex number",arguments:[{boxed:!0,unroll:!0}],fn:l=>{let e=Xe(l);return e?{type:8,value:e}:U()}},ComplexLog:{description:"Returns the principal value Log(z) of a complex number z",arguments:[{boxed:!0,unroll:!0}],fn:l=>{if(l.type===3){if(!l.value)return U();l={type:8,value:{real:l.value,imaginary:0}}}else if(l.type===0||l.type===2&&l.value==="")return U();if(l.type===8){let e=Lr(l.value),t={real:Math.log(e.r),imaginary:e.theta};return t.imaginary?{type:8,value:t}:{type:3,value:t.real}}return U()}}};var Wr=l=>{let e=[];l.type===9?e=l.value:e=[[l]];let t=e.length,r=t?e[0].length:0,i=[];if(!t||!r)return{m:t,n:r,array:i};for(let n=0;n<t;n++){let o=[];for(let s=0;s<r;s++){let a=e[n][s];if(a.type===8)o.push({...a.value});else if(a.type===3)o.push({real:a.value,imaginary:0});else if(a.type===0||a.value==="")o.push({real:0,imaginary:0});else return{m:t,n:r,error:!0,array:[]}}i.push(o)}return{m:t,n:r,array:i}},ps={MDeterm:{description:"Returns the determinant of a matrix",arguments:[{name:"matrix",boxed:!0}],fn:l=>{let e=Wr(l);if(!e.array||!e.m||!e.n||e.m!==e.n||e.error)return U();let t=zr(e);return t?he(t):U()}},MInverse:{description:"Returns the inverse matrix",arguments:[{name:"matrix",boxed:!0}],fn:l=>{let e=Wr(l);if(!e.array||!e.m||!e.n||e.m!==e.n||e.error)return U();let t=zr(e);if(t&&t.real===0&&t?.imaginary===0)return U();let r=Oo(e);return r?{type:9,value:r.map(i=>i.map(n=>he(n)))}:U()}},MMult:{description:"Returns the dot product A \u22C5 B",arguments:[{name:"A",boxed:!0},{name:"B",boxed:!0}],fn:(l,e)=>{let t=Wr(l),r=Wr(e);if(!t.array||t.error||!r.array||r.error)return U();if(t.m!==r.n)return U();let i=Po(r,t);return{type:9,value:i.map(n=>n.map(o=>he(o)))}}}};var bs={RegexExtract:{description:"Extract text using a regular expression",arguments:[{name:"text",unroll:!0},{name:"pattern",unroll:!0},{name:"return mode",unroll:!0,default:0},{name:"case insensitive",unroll:!0,default:!1}],fn:(l,e,t=0,r=!1)=>{let i=[];r&&i.push("i"),t===1&&i.push("g");let n=new RegExp(e,i.length?i.join(""):void 0);switch(t){case 0:{let o=l.match(n);return{type:2,value:o===null?"":o[0]??""}}case 1:{let o=Array.from(l.matchAll(n));return console.info({result:o}),{type:9,value:[o.map(s=>({type:2,value:s[0]||""}))]}}case 2:{let o=l.match(n);if(o===null)return{type:2,value:""};let s=Array.from(o).slice(1);return{type:9,value:[s.map(a=>({type:2,value:a}))]}}default:return E()}}},RegexReplace:{arguments:[{name:"text",unroll:!0},{name:"pattern",unroll:!0},{name:"replacement",unroll:!0},{name:"occurrence",unroll:!0,default:0},{name:"case insensitive",unroll:!0,default:!1}],description:"Replace text in a string using a regex",fn:(l,e,t,r=0,i=!1)=>{let n=["g"];i&&n.push("i");let o=new RegExp(e,n.length?n.join(""):void 0);if(r===0)return{type:2,value:l.replaceAll(o,t)};if(r<0){let a=Array.from(l.matchAll(o)).length;r+=a+1}let s=l.replace(o,a=>--r===0?t:a);return{type:2,value:s}}},RegexTest:{arguments:[{name:"text",unroll:!0},{name:"pattern",unroll:!0},{name:"case insensitive",unroll:!0,default:!1}],description:"Match text against a regular expression",fn:(l,e,t=!1)=>{let r=new RegExp(e,t?"i":void 0);return{type:4,value:r.test(l)}}}};var _s={Lambda:{description:"Creates a function",arguments:[{name:"Argument",repeat:!0,boxed:!0,passthrough:!0},{name:"Function",boxed:!0,passthrough:!0}],fn:(...l)=>({type:6,value:{bindings:l.slice(0,l.length-1),func:l[l.length-1],alt:"LAMBDA",type:"function"}})},Let:{description:"Binds values to names for a calculation",arguments:[{name:"Name",repeat:!0},{name:"Value",repeat:!0},{name:"Calculation",boxed:!0}],create_binding_context:({args:l,descriptors:e})=>{if(l.length%2!==1)return;let t={};for(let r=0;r<l.length-1;r+=2){let i=l[r],n=l[r+1];if(i.type==="identifier")t[i.name]=n;else return}return{context:t,args:l.slice(-1),argument_descriptors:e.slice(-1)}},fn:l=>l||{type:0}}};var gs={MakeArray:{description:"Create an array using a function",arguments:[{name:"rows"},{name:"columns"},{name:"lambda",description:"Function to apply",boxed:!0}],fp:!0,fn:function(l,e,t){if(l>0&&e>0&&t?.type===6){let r=this?.apply;if(!r)return U();let i=[];for(let n=0;n<e;n++){let o=[];for(let s=0;s<l;s++)o.push(r(t,[{type:3,value:s+1},{type:3,value:n+1}]));i.push(o)}return{type:9,value:i}}return E()}},ChooseCols:{description:"Returns one or more columns from an array, by column index",arguments:[{name:"array"},{name:"column",repeat:!0}],fn:function(l,...e){Array.isArray(l)||(l=[[l]]);let t=K(e),r=l.length,i=[];for(let n of t)if(typeof n=="number"){n<0?n=r+n:n--;let o=l[n];if(o){let s=[];for(let a of o)s.push(j(a));i.push(s)}else return E()}return i.length||i.push([]),{type:9,value:i}}},ChooseRows:{description:"Returns one or more rows from an array, by row index",arguments:[{name:"array"},{name:"row",repeat:!0}],fn:function(l,...e){Array.isArray(l)||(l=[[l]]);let t=K(e),r=l[0]?.length||0,i=[];for(let n of t)if(typeof n=="number"){n<0?n=r+n:n--;for(let[o,s]of l.entries()){let a=i[o]||[];if(n<0||n>=s.length)return E();a.push(j(s[n])),i[o]=a}}return i.length||i.push([]),{type:9,value:i}}},Take:{description:"Returns some number of rows/columns from the start or end of an array",arguments:[{name:"array"},{name:"rows"},{name:"columns"}],fn:function(l,e,t){if(!e&&!t||e===0||t===0||typeof e!="number"&&typeof e<"u"||typeof t!="number"&&typeof t<"u")return E();Array.isArray(l)||(l=[[l]]);let r=l.length,i=l[0].length,n=[],o=0,s=r-1,a=0,c=i-1;typeof t=="number"&&(t>0?s=Math.min(t,r)-1:t<0&&(s=r-1,o=Math.max(0,s+t+1))),typeof e=="number"&&(e>0?c=Math.min(e,i)-1:e<0&&(c=i-1,a=Math.max(0,c+e+1)));for(let d=o;d<=s;d++){let u=[];for(let h=a;h<=c;h++)u.push(j(l[d][h]));n.push(u)}return{type:9,value:n}}},Reduce:{description:"Accumulates a value by applying a function to a set of values",arguments:[{name:"initial value",boxed:!0},{name:"data",description:"Input data",boxed:!0},{name:"lambda",description:"Function to apply",boxed:!0}],fp:!0,fn:function(l,e,t){if(!this?.apply)return U();if(t.type!==6)return E();e.type!==9&&(e={type:9,value:[[e]]});let r=e.value.length,i=e.value[0].length;for(let n=0;n<i;n++)for(let o=0;o<r;o++){let s=[l,e.value[o][n]];l=this.apply(t,s)}return l}},Scan:{description:"Applies a function to a set of values, iteratively",arguments:[{name:"initial value",boxed:!0},{name:"data",description:"Input data",boxed:!0},{name:"lambda",description:"Function to apply",boxed:!0}],fp:!0,fn:function(l,e,t){if(!this?.apply)return U();if(t.type!==6)return E();e.type!==9&&(e={type:9,value:[[e]]});let r=[],i=e.value.length,n=e.value[0].length;for(let o=0;o<i;o++)r.push([]);for(let o=0;o<n;o++)for(let s=0;s<i;s++){let a=[l,e.value[s][o]],c=this.apply(t,a);r[s][o]=c,l=c}return{type:9,value:r}}},ByRow:{description:"Apply a function to each row in an array",arguments:[{name:"data",description:"Input data",repeat:!0,boxed:!0},{name:"lambda",description:"Function to apply",boxed:!0}],fp:!0,fn:function(l,e){if(!this?.apply)return U();if(e.type!==6)return E();l.type!==9&&(l={type:9,value:[[l]]});let t=l.value.length,r=l.value[0].length,i=[[]];for(let n=0;n<r;n++){let o=[];for(let s=0;s<t;s++)o.push(l.value[s][n]);i[0].push(this.apply(e,[{type:9,value:[o]}]))}return{type:9,value:i}}},ByCol:{description:"Apply a function to each column in an array",arguments:[{name:"data",description:"Input data",repeat:!0,boxed:!0},{name:"lambda",description:"Function to apply",boxed:!0}],fp:!0,fn:function(l,e){if(!this?.apply)return U();if(e.type!==6)return E();l.type!==9&&(l={type:9,value:[[l]]});let t=l.value.length,r=l.value[0].length,i=[];for(let n=0;n<t;n++){let o=[];for(let s=0;s<r;s++)o.push(l.value[n][s]);i.push([this.apply(e,[{type:9,value:[o]}])])}return{type:9,value:i}}},Map:{description:"Apply a function to a set of values",arguments:[{name:"data",description:"Input data",repeat:!0,boxed:!0},{name:"lambda",description:"Function to apply",boxed:!0}],fp:!0,fn:function(...l){if(l.length<2)return E();let e=l[l.length-1];if(e.type!==6)return E();let t=this?.apply;if(!t)return U();for(let n=0;n<l.length-1;n++){let o=l[n];o.type!==9&&(l[n]={type:9,value:[[o]]})}let r=l[0],i=[];if(r.type===9)for(let n=0;n<r.value.length;n++){let o=r.value[n],s=[];for(let a=0;a<o.length;a++){let c=[o[a]];for(let d=1;d<l.length-1;d++){let u=l[d];u.type===9&&c.push(u.value[n][a])}s.push(t(e,c))}i.push(s)}return{type:9,value:i}}}};var bt=class l extends $e{static type="state-leaf-vertex";state_id=0;type=l.type;color=2;Calculate(){if(this.dirty){for(let e of this.edges_in)if(e.dirty)return;this.state_id++,this.dirty=!1}}AddDependent(){throw new Error("leaf vertex cannot have dependents")}};var qr=class l extends $e{static type="calculation-leaf-vertex";type=l.type;address={row:-1,column:-1};use;updated=!1;color=2;Calculate(e){if(!this.dirty)return;for(let r of this.edges_in)if(r.dirty)return;let t=e.CalculationCallback.call(e,this);this.result=t.value,this.dirty=!1,this.updated=!0}AddDependent(){throw new Error("leaf vertex cannot have dependents")}};var Pl=l=>{if(typeof l=="string")switch(l=l.toUpperCase(),l){case"AVERAGE":case"MEAN":l=101;break;case"COUNT":l=102;break;case"COUNTA":l=103;break;case"MAX":l=104;break;case"MIN":l=105;break;case"PRODUCT":l=106;break;case"STDEV":l=107;break;case"STDEVP":l=108;break;case"SUM":l=109;break;case"VAR":l=110;break;case"VARP":l=111;break;default:l=0;break}return l},Ol={complex_numbers:"off",spill:!1},Kr=class extends Dr{constructor(t,r={}){super();this.model=t;if(this.expression_calculator=new Fr(this.model,this.library,this.parser),this.options={...Ol,...r},this.options.complex_numbers==="on"){for(let o of Object.keys(cn))pt[o]=cn[o];Bo()}this.UpdateLocale(),this.library.Register(pt,ss,fs,os,as,ms,ps,bs,_s,gs);for(let o of Object.keys(vn))this.library.Alias(o,vn[o]);for(let o of Object.keys(un))this.library.Alias(o,un[o]);let i=(o,s,...a)=>{Array.isArray(s)||(s=[[s]]);let c=[];for(let f=0;f<a.length;f+=2){let m=a[f];Array.isArray(m)||(m=[[m]]);{let p=n(m,a[f+1]);if(p.type!==9)return p;for(let[b,_]of p.value[0].entries())c[b]=!!_.value&&c[b]!==!1}}let d=K(s,!0),u=0,h=0;for(let[f,m]of c.entries())if(m){u++;let p=d[f];typeof p=="number"&&(h+=p)}switch(o){case"count":return{type:3,value:u};case"sum":return{type:3,value:h};case"average":return u===0?xe():{type:3,value:h/u}}},n=(o,s)=>{let a=K(o,!0),c,d,u="=";if(typeof s=="string"){s=s.trim();let f=s.match(/^([=<>]+)/);f&&(u=f[1],s=s.substring(u.length));let m=pe.TryParse(s);if(m?.type===2?s=`"${m.value}"`:s=m?.value?.toString()||"",/[?*]/.test(s)){let p=this.parser.argument_separator;if(u==="="||u==="<>"){if(c=this.parser.Parse(`=WildcardMatch({}${p} ${s}${p} ${u==="<>"})`),d=c.expression,c.error||!d)return be();d?.type==="call"&&d.args[0]?.type==="array"&&(d.args[0].values=[ln(a,!0)])}}}else s=(s||0).toString();if(!c){if(c=this.parser.Parse("{}"+u+s),d=c.expression,c.error||!d)return be();if(d.type!=="binary")return console.warn("invalid expression [1]",d),be();if(d.left.type!=="array")return console.warn("invalid expression [1]",d),be();d.right.type==="identifier"&&(console.warn("will never happen"),d.right={...d.right,type:"literal",value:d.right.name}),d.left.values=[ln(a,!0)]}return d?this.CalculateExpression(d):U()};this.library.Register({Subtotal:{arguments:[{name:"type"},{name:"range",metadata:!0}],fn:(o,...s)=>{if(o=Pl(o),o>100&&(o-=100),o<1||o>11)return E();let a=ae(s),c=[],d=0,u=0,h;for(let m of a){let p=m.value?.address;if(!p)return J();if(!h||h.id!==p.sheet_id){if(!p.sheet_id)return console.warn("invalid reference in metadata"),J();if(h=this.model.sheets.Find(p.sheet_id),!h)return console.warn("invalid sheet in metadata"),J()}if(!h.GetRowHeight(p.row))continue;let _=m.value?.value;typeof _>"u"||(d++,typeof _=="number"&&(u+=_,c.push(_)))}let f=0;switch(o){case 1:if(c.length===0)return xe();f=u/c.length;break;case 2:f=c.length;break;case 3:f=d;break;case 4:if(c.length===0)return U();f=Math.max.apply(0,c);break;case 5:if(c.length===0)return U();f=Math.min.apply(0,c);break;case 6:if(c.length===0)return U();f=1;for(let m of c)f*=m;break;case 7:if(c.length<2)return xe();f=Math.sqrt(Ie(c,!0));break;case 8:if(c.length===0)return xe();f=Math.sqrt(Ie(c,!1));break;case 9:f=u;break;case 10:if(c.length<2)return xe();f=Ie(c,!0);break;case 11:if(c.length===0)return xe();f=Ie(c,!1);break}return{type:3,value:f}}},Cell:{description:"Returns data about a cell",arguments:[{name:"type",description:"Type of data to return",unroll:!0},{name:"reference",description:"Cell reference",metadata:!0,unroll:!0}],fn:(o,s)=>{if(!fe(s))return J();if(o)switch(o.toString().toLowerCase()){case"format":return s.value.format?{type:2,value:s.value.format}:J();case"address":{let a="";return s.value.address.sheet_id&&(a=this.model.sheets.Find(s.value.address.sheet_id)?.name||""),a&&(Re.test(a)&&(a=`'${a}'`),a+="!"),{type:2,value:"[]"+a+s.value.address.label.replace(/\$/g,"")}}}return{type:7,value:Ro.error}}},Address:{arguments:[{name:"row"},{name:"column"},{name:"absolute"},{name:"a1"},{name:"sheet name"}],fn:(o=1,s=1,a=1,c=!0,d)=>{let u={type:"address",id:0,position:0,label:"",row:o-1,column:s-1};switch(a){case 2:u.absolute_row=!0;break;case 3:u.absolute_column=!0;break;case 4:break;default:u.absolute_column=!0,u.absolute_row=!0}return d&&(u.sheet=d),Wo(this.parser.Render(u,{r1c1:!c}))}},CountIfs:{arguments:[{name:"range"},{name:"criteria"},{name:"range"},{name:"criteria"}],fn:(...o)=>i("count",o[0],...o)},AverageIf:{arguments:[{name:"range"},{name:"criteria"}],fn:(o,s,a)=>i("average",a||o,o,s)},AverageIfs:{arguments:[{name:"value range"},{name:"criteria range"},{name:"criteria"},{name:"criteria range"},{name:"criteria"}],fn:(o,...s)=>i("average",o,...s)},SumIf:{arguments:[{name:"range"},{name:"criteria"}],fn:(o,s,a)=>i("sum",a||o,o,s)},SumIfs:{arguments:[{name:"value range"},{name:"criteria range"},{name:"criteria"},{name:"criteria range"},{name:"criteria"}],fn:(o,...s)=>i("sum",o,...s)},CountIf:{arguments:[{name:"range"},{name:"criteria"}],fn:(o,s)=>i("count",o,o,s)},Offset:{arguments:[{name:"reference",description:"Base reference",metadata:!0},{name:"rows",description:"number of rows to offset"},{name:"columns",description:"number of columns to offset"},{name:"height"},{name:"width"}],return_type:"reference",volatile:!0,fn:((o,s=0,a=0,c,d)=>{if(!o)return E();if(o.type===9){let h=typeof c=="number"?s+c:void 0,f=typeof d=="number"?a+d:void 0;return{type:9,value:o.value.slice(s,h).map(p=>p.slice(a,f))}}if(!fe(o))return console.info("e2",{reference:o}),J();let u=this.DynamicDependencies(o.value.address,this.expression_calculator.context.address,!0,s,a,d,c);if(!u)return console.info("e1",{check_result:u}),J();if(u.dirty){let h=this.GetVertex(this.expression_calculator.context.address,!0);return h.short_circuit=!0,{type:0,value:void 0}}if(u.area){let h={type:"address",...u.area.start,label:"",position:0,id:0},f={type:"address",...u.area.end,label:"",position:0,id:0},m=u.area.count===1?h:{type:"range",start:h,end:f,label:"",position:0,id:0};return{type:5,value:m}}return U()}).bind(this)},Indirect:{arguments:[{name:"reference",description:"Cell reference (string)"}],return_type:"reference",volatile:!0,fn:(o=>{if(!o||typeof o!="string")return E();let s=this.parser.Parse(o);if(s.error||!s.expression||s.expression.type!=="address"&&s.expression.type!=="range")return J();let a=this.DynamicDependencies(s.expression,this.expression_calculator.context.address);if(!a)return J();if(a.dirty){let c=this.GetVertex(this.expression_calculator.context.address,!0);return c.short_circuit=!0,{type:0,value:void 0}}return{type:5,value:s.expression}}).bind(this)},Match:{arguments:[{name:"value",boxed:!0},{name:"range",boxed:!0},{name:"type"}],fn:(o,s,a=0)=>{if(a)return console.warn("inexact match not supported",{value:o,range:s,type:a}),Se();if(s.type===9){if(s.value.length===1){let c=s.value[0];for(let d=0;d<c.length;d++)if(o.type==c[d].type&&o.value===c[d].value)return{type:3,value:d+1}}else for(let c=0;c<s.value.length;c++){let d=s.value[c];if(d.length!==1)return Se();if(o.type==d[0].type&&o.value===d[0].value)return{type:3,value:c+1}}return Se()}else return o.type===s.type&&o.value===s.value?{type:3,value:1}:Se();return E()}},Index:{return_type:"reference",arguments:[{name:"range",metadata:!0},{name:"row"},{name:"column"}],volatile:!1,fn:(o,s,a)=>{if(!o)return E();if(s===void 0&&a===void 0)return E();s=s||0,a=a||0;let c=[];if(o.type===9)c=o.value;else if(o.type===5){let h=o.value;h.type==="metadata"&&h.address&&c.push([o])}let d=c.length,u=c[0]?.length||0;if(u<=0||d<=0||s>u||a>d||s<0||a<0)return E();if(a===0&&s===0){let h=d===1&&u===1?{...c[0][0].value.address}:{type:"range",start:c[0][0].value.address,end:c[d-1][u-1].value.address,label:"",position:0,id:0};return{type:5,value:h}}if((s||u===1)&&(a||d===1))return{type:5,value:c[a?a-1:0][s?s-1:0].value.address};if(s){let h={type:"range",start:c[0][s-1].value.address,end:c[d-1][s-1].value.address,label:"",position:0,id:0};return{type:5,value:h}}else if(a){let h={type:"range",start:c[a-1][0].value.address,end:c[a-1][u-1].value.address,label:"",position:0,id:0};return{type:5,value:h}}return E()}},Rows:{arguments:[{name:"reference",description:"Array or reference"}],volatile:!1,fn:o=>{if(!o)return E();if(Array.isArray(o)){let s=o[0];return Array.isArray(s)?{type:3,value:s.length}:U()}return{type:3,value:1}}},Columns:{arguments:[{name:"reference",description:"Array or reference"}],volatile:!1,fn:o=>o?Array.isArray(o)?{type:3,value:o.length}:{type:3,value:1}:E()},FormulaText:{description:"Returns a formula as a string",arguments:[{name:"reference",description:"Cell reference",metadata:!0,unroll:!0}],fn:o=>{if(!fe(o))return J();let s=this.model.sheets.Find(o.value?.address?.sheet_id||0);if(s){let a=s.cells.GetCell(o.value.address,!1);return{type:2,value:a?.value?.toString()||""}}return J()}},IsFormula:{description:"Returns true if the reference is a formula",arguments:[{name:"Reference",unroll:!0,metadata:!0}],fn:o=>{let s=o?.value?.address,a=this.model.sheets.Find(s?.sheet_id||0);if(s&&a){let c=a.cells.GetCell(s,!1);return{type:4,value:c?.type===1}}return{type:4,value:!1}}}})}get parser(){return this.model.parser}library=new Or;registered_libraries={};expression_calculator;full_rebuild_required=!1;options;grid_expanded=!1;ExportCalculatedValues(){let t={};for(let r of this.model.sheets.list){let i=r.cells.toJSON({calculated_value:!0}).data;t[r.id]=i.filter(n=>n.calculated!==void 0)}return t}ApplyCalculatedValues(t){for(let r of this.model.sheets.list){let i=t[r.id];if(!i)console.info("mismatch",r.id);else for(let n of i)r.cells.data[n.row][n.column].SetCalculatedValue(n.calculated)}}AttachSpillData(t,r){if(r||(r=(t.start.sheet_id?this.model.sheets.Find(t.start.sheet_id):void 0)?.cells),!r)throw console.info({area:t,cells:r}),new Error("invalid sheet ID in attach spill data");let i=new bt,n=0,o=!1;for(let{cell:s,row:a,column:c}of r.IterateRC(t,!0))n++&&(s.type!==0||s.area||s.merge_area||s.table)&&(o=!0),this.AddLeafVertexEdge({row:a,column:c,sheet_id:t.start.sheet_id},i);return this.spill_data.push({area:t,vertex:i}),{vertex:i,area:t,error:o}}SpillCallback(t,r){let{reference:i,address:n}=t,{value:o}=r,s=[];if(!i)return console.error("invalid reference in spill callback"),s;if(!n||!n.sheet_id)return console.error("invalid address in spill callback"),s;if(o.length===1&&o[0].length===1||!this.options.spill)return i.SetCalculatedValue(o[0][0].value),s;let a=this.model.sheets.Find(n.sheet_id),c=a?.cells;if(c){let d=r.value.length,u=r.value[0].length,h=new g(n).Reshape(u,d),{error:f}=this.AttachSpillData(h,c);if(f)return i.SetCalculationError("SPILL"),s;a.rows<h.end.row+1&&(a.cells.EnsureRow(h.end.row+1),this.grid_expanded=!0),a.columns<h.end.column+1&&(a.cells.EnsureColumn(h.end.column+1),this.grid_expanded=!0);let m=n.sheet_id;for(let{row:p,column:b}of c.IterateRC(h)){if(p===n.row&&b===n.column)continue;let _=this.GetVertex({sheet_id:m,row:p,column:b},!1);_&&(_.dirty||s.push(_))}for(let{cell:p,row:b,column:_}of c.IterateRC(h)){p.spill=h,b-=n.row,_-=n.column;let x=r.value[_][b];switch(x.type){case 5:case 9:case 6:break;default:p.SetCalculatedValue(x.value,x.type);break}}return s}return console.error("invalid cell reference in spill callback"),i.SetCalculationError("SPILL"),[]}SpreadCallback(t,r){if(!t.address||!t.address.sheet_id)throw new Error("spread callback called without sheet id");let i=this.model.sheets.Find(t.address.sheet_id)?.cells;if(!i)throw new Error("spread callback called without cells");if(!t||!t.reference)return;let n=t.reference.area;if(n){let o=n.rows,s=n.columns;if(r.type===9){let a=Nr(r.value);for(let c=0;c<o;c++)if(a[c]){let d=0;for(;d<s&&d<a[c].length;d++){let u=a[c][d];switch(u.type===9&&(u=u.value[0][0]),u.type){case 9:case 5:case 6:i.data[c+n.start.row][d+n.start.column].SetCalculatedValue(void 0);break;default:i.data[c+n.start.row][d+n.start.column].SetCalculatedValue(u.value,u.type)}}for(;d<s;d++)i.data[c+n.start.row][d+n.start.column].SetCalculatedValue(void 0,0)}else for(let d=0;d<s;d++)i.data[c+n.start.row][d+n.start.column].SetCalculatedValue(void 0,0)}else{let a={...r};(a.type===5||a.type===6)&&(a={type:0,value:void 0});for(let c=0;c<o;c++)for(let d=0;d<s;d++)i.data[c+n.start.row][d+n.start.column].SetCalculatedValue(a.value,a.type)}}}CalculationCallback(t){if(!t.address)throw new Error("vertex missing address");return t.expression_error?{value:Mr()}:this.expression_calculator.Calculate(t.expression,t.address,t.reference?.area)}DynamicDependencies(t,r,i=!1,n=0,o=0,s=1,a=1){let c=this.ResolveExpressionAddress(t,r);if(!c)return;let d=!1,u;if(t.type==="address"||t.type==="range"){let f=t.type==="range"?t.start:t;f.sheet_id?u=this.model.sheets.Find(f.sheet_id):f.sheet&&(u=this.model.sheets.Find(f.sheet))}if(!u&&r?.sheet_id&&(u=this.model.sheets.Find(r.sheet_id)),!u)throw new Error("missing sheet in dynamic dependencies [b21]");c=u.RealArea(c);let h=c.start.sheet_id;i&&(c=new g({column:c.start.column+o,row:c.start.row+n,sheet_id:c.start.sheet_id},{column:c.start.column+o+s-1,row:c.start.row+n+a-1,sheet_id:c.end.sheet_id}));for(let f=c.start.row;f<=c.end.row;f++)for(let m=c.start.column;m<=c.end.column;m++){let p=this.GetVertex({row:f,column:m,sheet_id:h},!1);p&&p.dirty&&(this.AddEdge({row:f,column:m,sheet_id:h},this.expression_calculator.context.address),d=!0)}return{dirty:d,area:c}}UpdateLocale(){V.decimal_separator===","?this.parser.SetLocaleSettings(","):this.parser.SetLocaleSettings(".")}SupportedFunctions(){let t=this.library.List(),r=Object.keys(t).map(i=>{let n=t[i].canonical_name;return n||(n=i.replace(/_/g,".")),{name:n,description:t[i].description,arguments:(t[i].arguments||[]).map(o=>({name:o.name||""})),type:"function"}});for(let i of this.model.macro_functions.values())r.push({name:i.name,description:i.description,arguments:(i.argument_names||[]).map(n=>({name:n})),type:"function"});return r}RegisterLibrary(t,r){return this.registered_libraries[t]?!1:(this.RegisterFunction(r),this.registered_libraries[t]=!0,!0)}RegisterFunction(t){for(let r of Object.keys(t)){let i=t[r];this.library.Register({[r]:i})}}Calculate(t){if(t&&!t.start.sheet_id)throw new Error("CalculateInternal called with subset w/out sheet ID");this.full_rebuild_required&&(t=void 0,this.UpdateAnnotations(),this.UpdateConditionals(),this.UpdateConnectedElements(),this.full_rebuild_required=!1),this.RebuildGraph(t),this.grid_expanded=!1;try{this.Recalculate()}catch(r){console.error(r),console.info("calculation error trapped")}}Reset(){this.FlushTree(),this.full_rebuild_required=!0}DecoratedFunctionList(){let t={},r=this.library.List();for(let i of Object.keys(r)){let n=r[i];n.xlfn?t[i]="_xlfn":n.extension&&(t[i]="_xll")}return t}Evaluate(t,r,i={},n=!1){let o=i?.preparsed;if(!o){this.parser.Save(),i.argument_separator&&(i.argument_separator===","?this.parser.SetLocaleSettings("."):this.parser.SetLocaleSettings(",")),i.r1c1&&(this.parser.flags.r1c1=i.r1c1);let s=this.parser.Parse(t);if(this.parser.Restore(),o=s.expression,s.error)throw new Error(s.error)}if(o){this.parser.Walk(o,a=>{if(a.type==="address"||a.type==="range"){if(a.type==="address"){if(a.offset_column||a.offset_row)throw new Error("Evaluate does not support offset references")}else if(a.start.offset_column||a.start.offset_row||a.end.offset_column||a.end.offset_row)throw new Error("Evaluate does not support offset references");this.model.ResolveSheetID(a,void 0,r)}return!0});let s=this.CalculateExpression(o,i.address);return n?s:s.type===9?s.value.map(a=>a.map(c=>c.value)):s.value}throw new Error("invalid expression")}CalculateExpression(t,r={row:-1,column:-1},i=!1){return this.expression_calculator.Calculate(t,r,void 0,i).value}RebuildClean(t=!1){this.full_rebuild_required=!1,this.RebuildGraph(),this.UpdateAnnotations(),this.UpdateConditionals(),this.UpdateConnectedElements(),this.InitializeGraph(),t&&this.volatile_list.length&&this.Recalculate()}FlattenCellList(t){let r={},i=[];for(let n of t){let o={column:n.column,row:n.row,sheet_id:n.sheet_id},s=g.CellAddressToLabel(o,!0);r[s]||(r[s]=s,i.push(o))}return i}Unresolve(t,r,i=!0,n=!0){let o="",s=N(t)?new g(t):new g(t.start,t.end);if(n){let d=this.model.named.MatchSelection(s);if(d)return d}if(o=s.spreadsheet_label,!i)return o;let a=s.start.sheet_id||r?.id,c=this.ResolveSheetName(a,!0);return c?c+"!"+o:o}ResolveSheetName(t,r=!1){let i=this.model.sheets.Find(t);if(i)return r&&Re.test(i.name)?`'${i.name}'`:i.name}RemoveConditional(t){if(t.type==="expression"){let r=t.internal?.vertex;r&&(r.Reset(),this.RemoveLeafVertex(r))}}RemoveConnectedELement(t){let r=t.internal;return r?.vertex?(this.RemoveLeafVertex(r.vertex),!0):!1}UpdateConnectedElements(t,r){if(t||(t=this.model.sheets.list[0]),r){let n=r.internal;n?.vertex&&this.RemoveLeafVertex(n.vertex)}let i=r?[r]:this.model.connected_elements.values();for(let n of i){let o=n.internal;o||(o={vertex:new bt},n.internal=o);let s=o.vertex;this.AddLeafVertex(s),this.UpdateLeafVertex(s,n.formula,t)}}UpdateConditionals(t,r){if(!t){for(let i of this.model.sheets.list)i.conditional_formats?.length&&this.UpdateConditionals(i.conditional_formats,i);return}if(!r)throw new Error("invalid call to update conditionals without context");t&&!Array.isArray(t)&&(t=[t]);for(let i of t){let n="";switch(i.type){case"cell-match":i.between?n=`BETWEEN(${[this.Unresolve(i.area,r,!0,!1),...i.between].join(", ")})`:n=this.Unresolve(i.area,r,!0,!1)+" "+i.expression;break;case"expression":n=i.expression;break;case"duplicate-values":n=`UniqueValues(${this.Unresolve(i.area,r,!0,!1)})`,i.unique||(n=`NOT(${n})`);break;case"data-bar":case"gradient":n=`=Gradient(${[this.Unresolve(i.area,r,!0,!1),i.min??"",i.max??"",...i.type==="data-bar"?["TRUE"]:[]].join(",")})`;break;default:continue}if(!n)continue;if(i.internal||(i.internal={}),!i.internal.vertex){let s=new qr;s.use="conditional",i.internal.vertex=s;let a={argument_separator:","};i.type!=="gradient"&&i.type!=="duplicate-values"&&i.type!=="data-bar"&&(a={...i.options,...a});let c=this.Evaluate(n,r,a,!0);i.internal.vertex.result=c,i.internal.vertex.updated=!0}let o=i.internal.vertex;this.AddLeafVertex(o),this.UpdateLeafVertex(o,n,r,".")}}RemoveAnnotation(t){let r=t.temp;r.vertex&&(r.vertex.Reset(),this.RemoveLeafVertex(r.vertex))}UpdateAnnotations(t,r){if(!t){for(let i of this.model.sheets.list)this.UpdateAnnotations(i.annotations,i);return}if(!r)throw new Error("invalid call to UpdateAnnotations with list but no sheet");typeof t<"u"&&!Array.isArray(t)&&(t=[t]);for(let i of t)if(i.data.formula){let n=i.temp;n.vertex||(n.vertex=new bt),this.AddLeafVertex(n.vertex),this.UpdateLeafVertex(n.vertex,i.data.formula,r)}}ResolveExpressionAddress(t,r){switch(t.type){case"address":if(this.model.ResolveSheetID(t,r))return new g(t);break;case"range":if(this.model.ResolveSheetID(t,r))return new g(t.start,t.end);break;case"identifier":{let i=this.model.GetName(t.name,r?.sheet_id||0);if(i&&i.type==="range")return new g(i.area.start,i.area.end)}break}}NamedRangeToAddressUnit(t,r){let i=t.name.toUpperCase(),n=this.model.GetName(i,r.sheet_id||0);if(n&&n.type==="range")return n.area.count===1?this.ConstructAddressUnit(n.area.start,i,t.id,t.position):{type:"range",start:this.ConstructAddressUnit(n.area.start,i,t.id,t.position),end:this.ConstructAddressUnit(n.area.end,i,t.id,t.position),label:i,id:t.id,position:t.position}}ConstructAddressUnit(t,r,i,n){return{type:"address",row:t.row,column:t.column,sheet_id:t.sheet_id,label:r,id:i,position:n}}RebuildDependencies(t,r,i,n={addresses:{},ranges:{}},o){if(!i){let s=this.model.sheets.Find(r);s&&(i=s.name)}switch(t.type){case"literal":case"missing":case"operator":break;case"identifier":{let s=this.model.GetName(t.name,o.sheet_id||0);if(s?.type==="expression")this.RebuildDependencies(s.expression,r,i,n,o);else{let a=this.NamedRangeToAddressUnit(t,o);a&&(a.type==="address"?n.addresses[a.label]=a:n.ranges[a.label]=a)}}break;case"structured-reference":{let s=this.model.ResolveStructuredReference(t,o);s&&(s.type==="address"?n.addresses[s.sheet_id+"!"+s.label]=s:n.ranges[s.label]=s);let a=this.model.tables.get(t.table.toLowerCase());if(a){let c=o.row;if(c<a.area.start.row||c>a.area.end.row)break;let d=t.column.toLowerCase(),u=-1;if(a.columns){for(let h=0;h<a.columns.length;h++)if(d===a.columns[h]){u=a.area.start.column+h;break}}if(u>=0){let h={label:t.label,type:"address",row:c,column:u,sheet_id:a.area.start.sheet_id,id:t.id,position:t.position};n.addresses[h.sheet_id+"!"+h.label]=h}}}break;case"address":if(!t.sheet_id)if(t.sheet){let s=this.model.sheets.Find(t.sheet);s&&(t.sheet_id=s.id)}else t.sheet_id=r,t.sheet=i;t.sheet_id?n.addresses[t.sheet_id+"!"+t.label]=t:console.warn("invalid address in range [9d]");break;case"range":if(!t.start.sheet_id)if(t.start.sheet){let s=this.model.sheets.Find(t.start.sheet);s&&(t.start.sheet_id=s.id)}else t.start.sheet_id=r,t.start.sheet=i;t.start.sheet_id?n.ranges[t.start.sheet_id+"!"+t.start.label+":"+t.end.label]=t:console.warn("invalid sheet in range",t);break;case"unary":this.RebuildDependencies(t.operand,r,i,n,o);break;case"binary":this.RebuildDependencies(t.left,r,i,n,o),this.RebuildDependencies(t.right,r,i,n,o);break;case"group":t.elements.forEach(s=>this.RebuildDependencies(s,r,i,n,o));break;case"implicit-call":{for(let s of t.args)this.RebuildDependencies(s,r,i,n,o);this.RebuildDependencies(t.call,r,i,n,o)}break;case"call":{let s=t.args.slice(0),a=this.library.Get(t.name);a&&a.arguments&&a.arguments.forEach((c,d)=>{c&&c.address&&(this.RebuildDependencies(s[d],r,i,void 0,o),s[d]={type:"missing",id:-1})}),s.forEach(c=>this.RebuildDependencies(c,r,i,n,o))}break}return n}UpdateLeafVertex(t,r,i,n){t.Reset(),n&&(this.parser.Save(),this.parser.SetLocaleSettings(n));let o=this.parser.Parse(r);if(o.expression){let s=this.RebuildDependencies(o.expression,i.id,i.name,void 0,{row:0,column:0});for(let a of Object.keys(s.ranges)){let c=s.ranges[a],d=new g(c.start,c.end);d.entire_column||d.entire_row||d.count>1?this.AddLeafVertexArrayEdge(d,t):this.AddLeafVertexEdge(d.start,t)}for(let a of Object.keys(s.addresses)){let c=s.addresses[a];this.AddLeafVertexEdge(c,t)}}t.expression=o.expression||{type:"missing",id:-1},t.expression_error=!o.valid,n&&this.parser.Restore()}RebuildGraphCell(t,r){if(t.spill&&this.options.spill&&(t.spill.start.row===r.row&&t.spill.start.column===r.column?this.AttachSpillData(new g(t.spill.start,t.spill.end)):this.AddEdge(t.spill.start,r)),t.area&&t.area.start.column===r.column&&t.area.start.row===r.row){let{start:i,end:n}=t.area,o=i.sheet_id||r.sheet_id;i.sheet_id||(i.sheet_id=o);for(let s=i.column;s<=n.column;s++)for(let a=i.row;a<=n.row;a++)this.ResetInbound({column:s,row:a,sheet_id:o},!0,!1);this.SetDirty(r);for(let s=i.column;s<=n.column;s++)for(let a=i.row;a<=n.row;a++)a===i.row&&s===i.column||this.AddEdge(i,{...i,row:a,column:s})}if(t.type===1){this.ResetInbound(r,!0);let i=this.parser.Parse(t.value);if(i.expression){if(i.expression.type==="call"){let s=this.library.Get(i.expression.name);s&&(s.render||s.click)&&(t.render_function=s.render,t.click_function=s.click)}let o=this.RebuildDependencies(i.expression,r.sheet_id,"",void 0,r);for(let s of Object.keys(o.ranges)){let a=o.ranges[s],c=new g(a.start,a.end);if(c.entire_row||c.entire_column)this.AddArrayEdge(c,r);else for(let d of c)this.AddEdge(d,r)}for(let s of Object.keys(o.addresses)){let a=o.addresses[s];this.AddEdge(a,r)}}let n=this.GetVertex(r,!0);n&&(n.expression=i.expression||{type:"missing",id:-1},n.expression_error=!i.valid)}else t.value!==t.calculated?this.ResetInbound(r,!0,!1):t.type===0&&this.ResetInbound(r,!0,!1,!0)}RebuildGraph(t){if(t){if(!t.start.sheet_id)throw new Error("subset missing sheet id");let r=this.model.sheets.Find(t.start.sheet_id)?.cells;if(r)for(let i=t.start.row;i<=t.end.row;i++){let n=r.data[i];if(n)for(let o=t.start.column;o<=t.end.column;o++){let s=n[o];s&&this.RebuildGraphCell(s,{row:i,column:o,sheet_id:t.start.sheet_id})}}}else for(let r of this.model.sheets.list||[]){let i=r.cells.data.length;for(let n=0;n<i;n++){let o=r.cells.data[n];if(o){let s=o.length;for(let a=0;a<s;a++){let c=o[a];c&&this.RebuildGraphCell(c,{row:n,column:a,sheet_id:r.id})}}}}}CheckVolatile(t){if(!t.expression||t.expression_error)return!1;let r=!1;return this.parser.Walk(t.expression,i=>{if(i.type==="call"){let n=this.library.Get(i.name);n&&n.volatile&&(r=!0)}return!r}),r}};var Ae=l=>l!==null&&typeof l=="object"&&"row"in l&&"column"in l,wn=l=>l!==null&&typeof l=="object"&&"start"in l&&Ae(l.start)&&"end"in l&&Ae(l.end),Ee=class l{start_;end_;constructor(e,t=e,r=!1){this.end_=this.PatchNull(t),this.start_=this.PatchNull(e),r&&this.Normalize()}static FromColumn(e){return new l({row:1/0,column:e})}static FromRow(e){return new l({row:e,column:1/0})}static ColumnToLabel(e){let t=String.fromCharCode(65+e%26);for(;e>25;)e=Math.floor(e/26)-1,t=String.fromCharCode(65+e%26)+t;return t}static CellAddressToLabel(e,t=!1){if(e.row===1/0&&e.column===1/0)throw new Error("this is going to break something");let r=t?`${e.sheet_id||0}!`:"";return e.row===1/0?r+(e.absolute_column?"$":"")+this.ColumnToLabel(e.column):e.column===1/0?r+(e.absolute_row?"$":"")+(e.row+1):r+(e.absolute_column?"$":"")+this.ColumnToLabel(e.column)+(e.absolute_row?"$":"")+(e.row+1)+(e.spill?"#":"")}static Join(e,...t){let r=new l(e.start,e.end);for(let i of t)i&&(r.ConsumeAddress(i.start),r.ConsumeAddress(i.end));return r}static Bleed(e,t=1){return new l({row:Math.max(0,e.start.row-t),column:Math.max(0,e.start.column-t),sheet_id:e.start.sheet_id},{row:e.end.row+t,column:e.end.column+t})}static PatchArea(e,t){let{before_column:r,column_count:i,before_row:n,row_count:o}=t,s=new l(e.start,e.end),a=e.start.sheet_id;if(i&&r<=s.end.column){if(i>0)r<=s.start.column?s.Shift(0,i):r>s.start.column&&r<=s.end.column?s.ConsumeAddress({row:s.end.row,column:s.end.column+i}):console.warn("AA X case 1",r,i,JSON.stringify(s));else if(i<0)if(r-i<=s.start.column)s.Shift(0,i);else{if(r<=s.start.column&&r-i>s.end.column)return!1;if(r<=s.start.column){let c=r-i-1;s=new l({row:s.start.row,column:c+1+i,sheet_id:a},{row:s.end.row,column:s.end.column+i})}else r<=s.end.column?r-i-1>=s.end.column?s=new l({row:s.start.row,column:s.start.column,sheet_id:a},{row:s.end.row,column:r-1}):s=new l({row:s.start.row,column:s.start.column,sheet_id:a},{row:s.end.row,column:s.start.column+s.columns+i-1}):console.warn("AA X case 2",r,i,JSON.stringify(s))}}if(o&&n<=s.end.row){if(o>0)n<=s.start.row?s.Shift(o,0):n>s.start.row&&n<=s.end.row?s.ConsumeAddress({row:s.end.row+o,column:s.end.column}):console.warn("AA X case 3",n,o,JSON.stringify(s));else if(o<0)if(n-o<=s.start.row)s.Shift(o,0);else{if(n<=s.start.row&&n-o>s.end.row)return!1;if(n<=s.start.row){let c=n-o-1;s=new l({column:s.start.column,row:c+1+o,sheet_id:a},{column:s.end.column,row:s.end.row+o})}else n<=s.end.row?n-o-1>=s.end.row?s=new l({column:s.start.column,row:s.start.row,sheet_id:a},{column:s.end.column,row:n-1}):s=new l({column:s.start.column,row:s.start.row,sheet_id:a},{column:s.end.column,row:s.start.row+s.rows+o-1}):console.warn("AA X case 4",n,o,JSON.stringify(s))}}return s}get start(){return{...this.start_}}set start(e){this.start_=e}get end(){return{...this.end_}}set end(e){this.end_=e}get rows(){return this.start_.row===1/0||this.end_.row===1/0?1/0:this.end_.row-this.start_.row+1}get columns(){return this.start_.column===1/0||this.end_.column===1/0?1/0:this.end_.column-this.start_.column+1}get count(){return this.rows*this.columns}get entire_sheet(){return this.entire_row&&this.entire_column}get entire_column(){return this.start_.row===1/0}get entire_row(){return this.start_.column===1/0}PatchNull(e){let t={...e};return t.row===null&&(t.row=1/0),t.column===null&&(t.column=1/0),t}SetSheetID(e){this.start_.sheet_id=e}Normalize(){let e={...this.start_},t={...this.end_};e.row===1/0||t.row===1/0?e.row=t.row=1/0:e.row>t.row&&(e.row=this.end_.row,e.absolute_row=this.end_.absolute_row,t.row=this.start_.row,t.absolute_row=this.start_.absolute_row),e.column===1/0||t.column===1/0?e.column=t.column=1/0:e.column>t.column&&(e.column=this.end_.column,e.absolute_column=this.end_.absolute_column,t.column=this.start_.column,t.absolute_column=this.start_.absolute_column),this.start_=e,this.end_=t}TopLeft(){let e={row:0,column:0};return this.entire_row||(e.column=this.start.column),this.entire_column||(e.row=this.start.row),e}BottomRight(){let e={row:0,column:0};return this.entire_row||(e.column=this.end.column),this.entire_column||(e.row=this.end.row),e}ContainsRow(e){return this.entire_column||e>=this.start_.row&&e<=this.end_.row}ContainsColumn(e){return this.entire_row||e>=this.start_.column&&e<=this.end_.column}Contains(e){return(this.entire_column||e.row>=this.start_.row&&e.row<=this.end_.row)&&(this.entire_row||e.column>=this.start_.column&&e.column<=this.end_.column)}ContainsArea(e){return this.start.column<=e.start.column&&this.end.column>=e.end.column&&this.start.row<=e.start.row&&this.end.row>=e.end.row}Intersects(e){return!(e.start.column>this.end.column||this.start.column>e.end.column||e.start.row>this.end.row||this.start.row>e.end.row)}Equals(e){return e.start_.row===this.start_.row&&e.start_.column===this.start_.column&&e.end_.row===this.end_.row&&e.end_.column===this.end_.column}Equals2(e){return e.start.row===this.start_.row&&e.start.column===this.start_.column&&e.end.row===this.end_.row&&e.end.column===this.end_.column}Clone(){return new l(this.start,this.end)}get left(){let e=new l(this.start_,this.end_);return e.end_.column=e.start_.column,e}get right(){let e=new l(this.start_,this.end_);return e.start_.column=e.end_.column,e}get top(){let e=new l(this.start_,this.end_);return e.end_.row=e.start_.row,e}get bottom(){let e=new l(this.start_,this.end_);return e.start_.row=e.end_.row,e}Shift(e,t){return this.start_.row+=e,this.start_.column+=t,this.end_.row+=e,this.end_.column+=t,this}ConsumeAddress(e){this.entire_row||(e.column<this.start_.column&&(this.start_.column=e.column),e.column>this.end_.column&&(this.end_.column=e.column)),this.entire_column||(e.row<this.start_.row&&(this.start_.row=e.row),e.row>this.end_.row&&(this.end_.row=e.row))}Reshape(e,t){return this.end_.row=this.start_.row+e-1,this.end_.column=this.start_.column+t-1,this}ConsumeArea(e){this.ConsumeAddress(e.start),this.ConsumeAddress(e.end)}Resize(e,t){return this.end_.row=this.start_.row+e-1,this.end_.column=this.start_.column+t-1,this}[Symbol.iterator](){if(this.entire_row||this.entire_column)throw new Error("don't iterate infinite area");let e=this.start_.row,t=this.start_.column;return{next:()=>{let r={column:t,row:e,sheet_id:this.start_.sheet_id};return t>this.end_.column?{done:!0,value:void 0}:(++e>this.end_.row&&(e=this.start_.row,t++),{value:r})}}}get spreadsheet_label(){let e;return this.entire_sheet?"":this.entire_column?(e=l.ColumnToLabel(this.start_.column),e+=":"+l.ColumnToLabel(this.end_.column),e):this.entire_row?(e=String(this.start_.row+1),e+=":"+(this.end_.row+1),e):(e=l.CellAddressToLabel(this.start_),this.columns>1||this.rows>1?e+":"+l.CellAddressToLabel(this.end_):e)}toJSON(){return{start:{...this.start_},end:{...this.end_}}}};var Yt=l=>typeof l=="object"&&!!l&&typeof l.real=="number"&&typeof l.imaginary=="number",xn=l=>l.real?l.imaginary?l.imaginary>0?`${l.real} + ${l.imaginary}i`:`${l.real} - ${Math.abs(l.imaginary)}i`:l.real.toString():l.imaginary?l.imaginary+"i":"0";var ys=["undefined","formula","string","number","boolean","object","function","error","complex","array","dimensioned_quantity"];var Sn=l=>!l.cells,ws=l=>!!l[0]&&Sn(l[0]);var Gg=ys.map((l,e)=>({[l]:e})).reduce((l,e)=>({...l,...e}),{});var Je=class{static locale="en-us";static decimal_separator=".";static argument_separator=",";static grouping_separator=",";static date_components={short_days:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],long_days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],short_months:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],long_months:["January","February","March","April","May","June","July","August","September","October","November","December"]};static UpdateLocale(e){if(e)this.locale=e;else if(typeof self<"u"){let i=self?.document?.location;if(i&&i.search&&/locale=([^?&]+?)(?:\?|$|&)/.test(i.search)){let n=i.search.match(/locale=(.*?)(?:\?|$|&)/);n&&(this.locale=n[1]),console.info("override locale",this.locale)}else typeof navigator<"u"&&(navigator.languages&&navigator.languages[0]?this.locale=navigator.languages[0]:this.locale=navigator.language)}this.locale==="C"&&(console.warn("Locale not set, defaulting to en-us"),this.locale="en-us");let t=new Intl.NumberFormat(this.locale,{minimumFractionDigits:1}).format(3.3).replace(/\d/g,"");this.decimal_separator=t===","?",":".",this.decimal_separator===","?(this.argument_separator=";",this.grouping_separator=" "):(this.argument_separator=",",this.grouping_separator=",");let r=new Date(2e3,0,2,12,0,0,0);this.UpdateDateComponent(0,0,r),r=new Date(2e3,1,7,12,0,0,0),this.UpdateDateComponent(1,1,r),r=new Date(2e3,2,7,12,0,0,0),this.UpdateDateComponent(2,2,r),r=new Date(2e3,3,5,12,0,0,0),this.UpdateDateComponent(3,3,r),r=new Date(2e3,4,4,12,0,0,0),this.UpdateDateComponent(4,4,r),r=new Date(2e3,5,2,12,0,0,0),this.UpdateDateComponent(5,5,r),r=new Date(2e3,6,1,12,0,0,0),this.UpdateDateComponent(6,6,r),r=new Date(2e3,7,1,12,0,0,0),this.UpdateDateComponent(7,-1,r),r=new Date(2e3,8,1,12,0,0,0),this.UpdateDateComponent(8,-1,r),r=new Date(2e3,9,1,12,0,0,0),this.UpdateDateComponent(9,-1,r),r=new Date(2e3,10,1,12,0,0,0),this.UpdateDateComponent(10,-1,r),r=new Date(2e3,11,1,12,0,0,0),this.UpdateDateComponent(11,-1,r)}static UpdateDateComponent(e,t,r){t>=0&&(this.date_components.short_days[t]=r.toLocaleString(this.locale,{weekday:"short"}),this.date_components.long_days[t]=r.toLocaleString(this.locale,{weekday:"long"})),e>=0&&(this.date_components.short_months[e]=r.toLocaleString(this.locale,{month:"short"}),this.date_components.long_months[e]=r.toLocaleString(this.locale,{month:"long"}))}};Je.UpdateLocale();var Xr=class l{constructor(e=0,t=0,r=0,i=0){this.left=e;this.top=t;this.width=r;this.height=i}get right(){return this.left+this.width}get bottom(){return this.top+this.height}static Create(e){return new l(e.left||0,e.top||0,e.width||0,e.height||0)}static IsRectangle(e){return!!e&&typeof e=="object"&&typeof e.left=="number"&&typeof e.top=="number"&&typeof e.width=="number"&&typeof e.height=="number"}Shift(e=0,t=0){return new l(this.left+e,this.top+t,this.width,this.height)}Scale(e=1,t=e){return new l(this.left*e,this.top*t,this.width*e,this.height*t)}Expand(e=0,t=0){return new l(this.left,this.top,this.width+e,this.height+t)}Combine(e){return new l(Math.min(this.left,e.left),Math.min(this.top,e.top),Math.max(this.right,e.right)-Math.min(this.left,e.left),Math.max(this.bottom,e.bottom)-Math.min(this.top,e.top))}Contains(e,t,r=0){return e>=this.left-r&&e<=this.left+this.width+r&&t>=this.top-r&&t<=this.top+this.height+r}ContextFill(e){e.fillRect(this.left,this.top,this.width,this.height)}ContextStroke(e){e.strokeRect(this.left,this.top,this.width,this.height)}Clamp(e,t){return e=Math.min(Math.max(e,this.left),this.right),t=Math.min(Math.max(t,this.top),this.bottom),{x:e,y:t}}ApplyStyle(e){e.style.top=this.top+"px",e.style.left=this.left+"px",e.style.width=this.width+"px",e.style.height=this.height+"px"}toJSON(){return{top:this.top,left:this.left,width:this.width,height:this.height}}};var Hl=JSON.stringify({}),Gl={Background:0,Text:1,Background2:2,Text2:3,Accent:4,Accent2:5,Accent3:6,Accent4:7,Accent5:8,Accent6:9},An=l=>typeof l.theme=="number"?l.theme:Gl[l.theme]||0,kn=l=>!!l&&typeof l.text=="string",Qr=l=>!!l&&typeof l.theme<"u";var _t={DefaultProperties:{horizontal_align:"",vertical_align:"",number_format:"General",nan:"NaN",font_size:{unit:"em",value:1},bold:!1,italic:!1,underline:!1,strike:!1,text:{theme:1},border_top:0,border_left:0,border_right:0,border_bottom:0},CompositeBorders:l=>({top:{width:l.border_top||0,color:l.border_top_fill||{}},left:{width:l.border_left||0,color:l.border_left_fill||{}},right:{width:l.border_right||0,color:l.border_right_fill||{}},bottom:{width:l.border_bottom||0,color:l.border_bottom_fill||{}}}),Serialize:l=>{let e=JSON.parse(JSON.stringify(l));return e.border_bottom_fill&&!e.border_bottom&&(e.border_bottom_fill=void 0),e.border_top_fill&&!e.border_top&&(e.border_top_fill=void 0),e.border_left_fill&&!e.border_left&&(e.border_left_fill=void 0),e.border_right_fill&&!e.border_right&&(e.border_right_fill=void 0),JSON.stringify(e)},Merge:(l,e,t=!0)=>{let r=t?{...l,...e}:{...e};return JSON.parse(JSON.stringify(r))},Composite:l=>JSON.parse(JSON.stringify(l.reduce((e,t)=>({...e,...t}),{}))),Empty:l=>JSON.stringify(l)===Hl,ParseFontSize:(l="",e="em")=>{let t=l.match(/(-*[\d.]+)\s*(\S*)/);if(t){let r=Number(t[1]);if(!r||isNaN(r)||r<0)return{};let i=t[2].toLowerCase()||e;if(i==="pt"||i==="em"||i==="%"||i==="px")return{font_size:{unit:i,value:r}}}return{}},RelativeFontSize:(l,e)=>{let t=12,r=12;switch(l.font_size?.unit){case"pt":if(!l.font_size.value)return 1;r=l.font_size.value;break;case"px":if(!l.font_size.value)return 1;r=Math.round(l.font_size.value*300/4)/100;break;case"em":return l.font_size.value||1;case"%":return(l.font_size.value||100)/100;default:return 1}switch(e.font_size?.unit){case"pt":if(!e.font_size.value)return 1;t=e.font_size.value;break;case"px":if(!e.font_size.value)return 1;t=Math.round(e.font_size.value*300/4)/100;break;default:return 1}return r/t},FontSize:(l,e=!0)=>{let t=l.font_size?.value;switch(l.font_size?.unit){case"pt":return(t||12)+"pt";case"px":return e?Math.round((t||16)*300/4)/100+"pt":(t||16)+"px";case"em":return(t||1)+"em";case"%":return(t||100)+"%"}return""},CompositeFontSize:(l,e,t=1,r=!1)=>{let i={...l};return e.unit==="pt"||e.unit==="px"?i={...e}:(i.value=e.value*l.value,e.unit==="%"&&(i.value/=100)),i.unit==="px"&&r&&(i.value=Math.round((i.value||16)*300/4)/100),i.value*=t,i},CompositeFont:(l,e,t,r)=>{let i,n,o,s=[];e.bold&&s.push("bold"),e.italic&&s.push("italic");let a=e.font_face||"stack:default";if(a.startsWith("stack:")){let c=r.font_stacks[a.substring(6)||"default"];c||(c=r.font_stacks.default),c&&(n=e.font_size,o=_t.CompositeFontSize(c.size,e.font_size||{unit:"pt",value:10},t),s.push(o.value.toFixed(2)+o.unit),s.push(c.font||""),i=c.variants)}else o=_t.CompositeFontSize(l,e.font_size||{unit:"pt",value:10},t),s.push(o.value.toFixed(2)+o.unit),s.push(a||"");return{font:s.join(" "),variants:i,base:l,size:e.font_size,scale:t,stack_size:n,font_size:o}}};var ee={Darken:(l,e,t,r,i=!1)=>{let{h:n,s:o,l:s}=ee.RGBToHSL(l,e,t);return i?s-=s*r/100:s-=r/100,s=Math.max(0,Math.min(1,s)),ee.HSLToRGB(n,o,s)},Lighten:(l,e,t,r,i=!1)=>{let{h:n,s:o,l:s}=ee.RGBToHSL(l,e,t);return i?s+=s*r/100:s+=r/100,s=Math.max(0,Math.min(1,s)),ee.HSLToRGB(n,o,s)},RGBToHSL:(l,e,t)=>{l/=255,e/=255,t/=255;let r=Math.max(l,e,t),i=Math.min(l,e,t),n=0,o=0,s=(r+i)/2;if(r===i)n=o=0;else{let a=r-i;switch(o=s>.5?a/(2-r-i):a/(r+i),r){case l:n=(e-t)/a+(e<t?6:0);break;case e:n=(t-l)/a+2;break;case t:n=(l-e)/a+4;break}n/=6}return{h:n*360,s:o,l:s}},HSLToRGB:(l,e,t)=>{let r,i,n;if(e===0)r=i=n=t;else{l=l/360;let o=t<.5?t*(1+e):t+e-t*e,s=2*t-o;r=ee.HueToRGB(s,o,l+.3333333333333333),i=ee.HueToRGB(s,o,l),n=ee.HueToRGB(s,o,l-.3333333333333333)}return{r:Math.round(r*255),g:Math.round(i*255),b:Math.round(n*255)}},HueToRGB:(l,e,t)=>(t<0&&(t+=1),t>1&&(t-=1),t<.16666666666666666?l+(e-l)*6*t:t<.5?e:t<.6666666666666666?l+(e-l)*(.6666666666666666-t)*6:l),GetLuminance:([l,e,t])=>{let r=[l,e,t].map(i=>(i/=255,i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4)));return .2126*r[0]+.7152*r[1]+.0722*r[2]},WeightedLuminance:([l,e,t],r=[1,1,1])=>{let i=[l,e,t].map(n=>(n/=255,n<=.03928?n/12.92:Math.pow((n+.055)/1.055,2.4)));return .2126*i[0]*r[0]+.7152*i[1]*r[1]+.0722*i[2]*r[2]},GetContrastRatio:l=>(l.sort((e,t)=>t-e),(l[0]+.05)/(l[1]+.05)),GetTextColor:(l,e,t)=>{let r=[.4,.3,.3],i=ee.WeightedLuminance(l,r),n=ee.WeightedLuminance(e,r),o=ee.WeightedLuminance(t,r),s=ee.GetContrastRatio([n,i]),a=ee.GetContrastRatio([o,i]);return s>a?e:t}};var Bl="http://www.w3.org/2000/svg",Me=class l{static instances=[];static GetInstance(e){for(let r of this.instances)if(r.doc===e)return r;let t=new l(e);return this.instances.push(t),t}doc;view;get HTMLElement(){return this.view?.HTMLElement}constructor(e){e&&(this.doc=e,this.view=e?.defaultView)}GetSelection(){return this.view?.getSelection()}Div(e,t,r){return this.Create("div",e,t,r)}ClassNames(e,t){e.classList.add(...(Array.isArray(t)?t:[t]).reduce((r,i)=>[...r,...i.split(/\s+/g)],[]))}SVG(e,t,r){let i=this.doc.createElementNS(Bl,e);return t&&this.ClassNames(i,t),r&&r.appendChild(i),i}Text(e){return this.doc.createTextNode(e)}Fragment(){return this.doc.createDocumentFragment()}Create(e,t,r,i){let n=this.doc.createElement(e);if(t&&this.ClassNames(n,t),i){if(i.attrs)for(let[o,s]of Object.entries(i.attrs))n.setAttribute(o,s);if(i.data)for(let[o,s]of Object.entries(i.data))n.dataset[o]=s;if(i.text&&(n.textContent=i.text),i.html&&(n.innerHTML=i.html),i.events)for(let[o,s]of Object.entries(i.events))n.addEventListener(o,s);if(i.style)for(let[o,s]of Object.entries(i.style))n.style[o]=s}return r&&r.appendChild(n),n}};var Yr={default:"Sans-serif","old-style":"Old style",transitional:"Serif",handwritten:"Handwritten",monospace:"Monospace",industrial:"Industrial sans",ui:"System UI"};var $l=(l,e)=>{let t=An(e),r=e.tint||0;l.mode==="dark"&&(r=-r),l.tint_cache||(l.tint_cache=[]),l.tint_cache[t]||(l.tint_cache[t]={});let i=l.tint_cache[t][r];if(!i){let n=(l.theme_colors_rgb?l.theme_colors_rgb[t]:[0,0,0])||[0,0,0],o;r>0?o=ee.Lighten(n[0],n[1],n[2],r*100,!0):o=ee.Darken(n[0],n[1],n[2],-r*100,!0),i=`rgb(${o.r},${o.g},${o.b})`,l.tint_cache[t][r]=i}return i},gt=(l,e,t)=>{if(e&&e.offset){if(e.offset.offset)return console.warn("invalid offset color"),"";let r="";if(kn(e.offset)){let n=W.MeasureColor(e.offset.text);r=`rgb(${n[0]}, ${n[1]}, ${n[2]})`}else r=gt(l,e.offset,void 0);if(l.offset_cache&&l.offset_cache[r])return l.offset_cache[r];let i=l.offset_light;if(r){let n=r.match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/);if(n){let o=[Number(n[1]),Number(n[2]),Number(n[3])],s=Array.from(W.MeasureColor(l.offset_dark)),a=Array.from(W.MeasureColor(l.offset_light)),c=ee.GetTextColor(o,s,a);i=`rgb(${c[0]}, ${c[1]}, ${c[2]})`}else console.warn("can't offset against color",r,"(1)");l.offset_cache||(l.offset_cache={}),l.offset_cache[r]=i}else console.warn("can't resolve offset color",e.offset,"(2)");return i}return kn(e)?e.text==="none"?"":e.text:Qr(e)?e.tint?$l(l,e):l.theme_colors?l.theme_colors[An(e)]:"":(t||t===0)&&l.theme_colors?l.theme_colors[t]:""};var Rn=(l,e=.7)=>{let t={border_top:1,border_top_fill:{theme:l},border_bottom:1,border_bottom_fill:{theme:l}};return{header:{text:{offset:{theme:l}},fill:{theme:l},bold:!0,...t},odd:{fill:{theme:l,tint:e},...t},even:{...t},total:{...t,border_top:2}}};var Zr=class{constructor(e,t,r="RGB"){this.color_space=r;this.mapped=e.map(i=>{if(i.value<0||i.value>1)throw new Error("invalid stop value");let n=W.MeasureColor(gt(t,i.color)),o=[];if(r==="HSL"){let s=ee.RGBToHSL(n[0],n[1],n[2]);o=[s.h,s.s,s.l]}else o=[...n];return{...i,resolved:o}}),this.mapped.sort((i,n)=>i.value-n.value),this.mapped[0].value>0&&this.mapped.unshift({...this.mapped[0],value:0}),this.mapped[this.mapped.length-1].value<1&&this.mapped.push({...this.mapped[this.mapped.length-1],value:1})}mapped;RenderColor(e){return this.color_space==="RGB"?{text:`rgb(${e})`}:{text:`hsl(${e[0]},${e[1]*100}%,${e[2]*100}%)`}}Interpolate(e){e=Math.min(1,Math.max(0,e));for(let[t,r]of this.mapped.entries()){if(e===r.value)return this.RenderColor(r.resolved);if(e<r.value){let i=this.mapped[t-1],n=r,o=n.value-i.value,s=e-i.value,a=[0,1,2].map(c=>i.resolved[c]+(n.resolved[c]-i.resolved[c])/o*s);return this.RenderColor(a)}}return{text:""}}};var Jl=1e3,ei=class{constructor(e=!1,t){this.verbose=e;this.log_id=t}queue=[];dispatched=!1;subscribers=[];Publish(e){this.verbose&&console.info(`es publish (${this.log_id})`,e),Array.isArray(e)?this.queue.push(...e):this.queue.push(e),this.dispatched||(this.dispatched=!0,Promise.resolve().then(()=>{let t=this.queue.slice(0);this.dispatched=!1,this.queue=[];for(let r of t)for(let i of this.subscribers)i.subscriber(r)}))}Subscribe(e){let t=Jl++;return this.subscribers.push({subscriber:e,token:t}),t}Cancel(e){this.subscribers=this.subscribers.filter(t=>t.token!==e)}CancelAll(){this.subscribers=[]}};var ti=class{static color_measurement_canvas;static text_measurement_node;static color_cache={};static MeasureColorARGB(e){let t=this.MeasureColor(e),r="FF";for(let i=0;i<3;i++){let n=t[i].toString(16);n.length===0?r+="00":n.length===1?r+=`0${n}`:r+=n}return r.toUpperCase()}static MeasureColor(e){let t=this.color_cache[e];if(t)return t;this.color_measurement_canvas||(this.color_measurement_canvas=document.createElement("canvas"),this.color_measurement_canvas.width=1,this.color_measurement_canvas.height=1);let r=this.color_measurement_canvas.getContext("2d",{willReadFrequently:!0});return r?(r.fillStyle="#fff",r.fillRect(0,0,1,1),r.fillStyle=e,r.fillRect(0,0,1,1),t=new Uint8ClampedArray(r.getImageData(0,0,1,1).data),this.color_cache[e]=t,t):new Uint8ClampedArray(3)}static EnsureMeasurementNode(){if(!this.text_measurement_node){let e=document.querySelector(".treb-chart-measurement-node");e?this.text_measurement_node=e:(this.text_measurement_node=document.createElement("div"),this.text_measurement_node.classList.add("treb-chart-measurement-node"),this.text_measurement_node.style.margin="0px",this.text_measurement_node.style.padding="0px",this.text_measurement_node.style.height="initial",this.text_measurement_node.style.width="initial",this.text_measurement_node.style.whiteSpace="nowrap",this.text_measurement_node.style.position="fixed",this.text_measurement_node.style.border="0px",this.text_measurement_node.style.border="1px solid red",this.text_measurement_node.style.boxSizing="content-box",this.text_measurement_node.style.top=this.text_measurement_node.style.left="-1000px",document.body.appendChild(this.text_measurement_node))}}static FontLoaded(e,t=!1,r=400){let i=`${t?"italic":""} ${r} 20pt ${e}`,n=this.MeasureText(`${i}, sans-serif`,"check font"),o=this.MeasureText(`${i}, serif`,"check font"),s=this.MeasureText(`${i}, monospace`,"check font");return n.width===o.width&&o.width===s.width}static MeasureText(e,t,r=0){this.EnsureMeasurementNode(),this.text_measurement_node.style.font=e,/\n/.test(t)?(t=t.replace(/\n/g,"<BR/>"),this.text_measurement_node.innerHTML=t):this.text_measurement_node.textContent=t,this.text_measurement_node.style.lineHeight="1em",r?this.text_measurement_node.style.transform=`rotate(${r}deg)`:this.text_measurement_node.style.transform="";let i=this.text_measurement_node.getBoundingClientRect();return{width:i.width,height:i.height}}};var Wl={data:!0,same_origin:!0,remote:!1},xs=(l,e={})=>{let t={...Wl,...e};try{let r=new URL(l,document.location.href);return r.protocol==="data:"?t.data?r.href:void 0:r.origin===document.location.origin?t.same_origin?r.href:void 0:t.remote?r.hash:void 0}catch(r){console.error(r)}};var We=class{date_format=!1;string_format=!1;fraction_format=!1;twelve_hour=!1;fraction_denominator=0;fraction_integer=!0;fraction_align=0;fraction_denominator_digits=0;integer_min_digits=0;decimal_min_digits=0;decimal_max_digits=0;grouping=!1;has_number_format=!1;prefix=[{text:""}];suffix=[{text:""}];scaling=0;percent=!1;exponential=!1;has_asterisk=!1};var Cs=42,Ss=95,Tn=63,ri=48,As=46,En=44,ks=37,Mn=34,Zt=35,Rs=59,ii=92,Ts=64,ql=91,Kl=93,Es=69,Ms=101,Xl=72,Ql=104,Yl=77,Zl=109,ec=83,tc=115,rc=68,ic=100,nc=89,oc=121,sc=65,ac=97;var ni=class{static date_pattern=!1;static pattern="";static char_index=0;static characters=[];static sections=[];static current_section=new We;static preserve_formatting_characters=!1;static decimal_mark=As;static group_separator=En;static Parse(e){if(this.pattern=e,this.characters=e.split("").map(t=>t.charCodeAt(0)),this.char_index=0,this.current_section=new We,this.sections=[this.current_section],this.ParseDatePattern())return this.sections;for(this.char_index=0,this.current_section=new We,this.sections=[this.current_section];this.char_index<this.characters.length;)this.ConsumeChar();return this.sections}static ConsumeString(){let e="";for(this.preserve_formatting_characters&&(e+=this.pattern[this.char_index]),++this.char_index;this.char_index<this.characters.length;this.char_index++)switch(this.characters[this.char_index]){case ii:this.preserve_formatting_characters&&(e+=this.pattern[this.char_index]),this.char_index+1<this.characters.length&&(e+=this.pattern[++this.char_index]);break;case Mn:return this.preserve_formatting_characters&&(e+=this.pattern[this.char_index]),this.char_index++,e;default:e+=this.pattern[this.char_index];break}throw new Error("unterminated string")}static ConsumeFormatting(){let e="";for(++this.char_index;this.char_index<this.characters.length;this.char_index++)switch(this.characters[this.char_index]){case ii:throw new Error("invalid escape character in formatting block");case Kl:return this.char_index++,e;default:e+=this.pattern[this.char_index];break}throw new Error("unterminated format")}static ScanFractionFormat(){let e=/^([#?]+ +){0,1}([#?]+)\/([#?0-9]+)(?:$|[^#?0-9])/,r=this.pattern.substr(this.char_index).match(e);if(!r)return!1;let i=(r[1]||"").length+r[2].length+r[3].length+1;this.current_section.fraction_format=!0,this.current_section.fraction_integer=!!r[1];let n=Number(r[3]);return isNaN(n)||(this.current_section.fraction_denominator=n),this.current_section.decimal_max_digits=this.current_section.fraction_denominator_digits=r[3].length,this.char_index+=i,this.current_section.has_number_format=!0,!0}static ConsumeNumberFormat(){let e=0;for(this.char_index;this.char_index<this.characters.length;this.char_index++)switch(this.characters[this.char_index]){case this.group_separator:{let r=!1;for(let i=this.char_index+1;!r&&i<this.characters.length;i++){let n=this.characters[i];if(n===this.decimal_mark||n===Zt||n===ri)r=!0;else if(n!==En)break}if(r){if(e===1)throw new Error("invalid grouping in decimal part");this.current_section.grouping=!0}else this.current_section.scaling=(this.current_section.scaling||1)*1e3}break;case this.decimal_mark:if(e===1)throw new Error("too many decimal marks");e=1;break;case Zt:e===1?this.current_section.decimal_max_digits++:this.current_section.integer_min_digits&&this.current_section.integer_min_digits++;break;case ri:e===1?(this.current_section.decimal_max_digits++,this.current_section.decimal_min_digits=this.current_section.decimal_max_digits):this.current_section.integer_min_digits++;break;default:return}}static AppendCharAsText(e=!0){this.current_section.has_number_format?this.current_section.suffix[this.current_section.suffix.length-1].text+=this.pattern[this.char_index]:this.current_section.prefix[this.current_section.prefix.length-1].text+=this.pattern[this.char_index],e&&this.char_index++}static AppendString(e){this.current_section.has_number_format?this.current_section.suffix[this.current_section.suffix.length-1].text+=e:this.current_section.prefix[this.current_section.prefix.length-1].text+=e}static AppendTextPart(e){this.current_section.has_number_format?(this.current_section.suffix.push(e),this.current_section.suffix.push({text:""})):(this.current_section.prefix.push(e),this.current_section.prefix.push({text:""}))}static ConsumeChar(){let e=this.characters[this.char_index];if(!((e===Tn||e===Zt)&&!this.current_section.has_number_format&&!this.current_section.string_format&&this.ScanFractionFormat()))switch(e){case Rs:this.char_index++,this.current_section=new We,this.sections.length===3&&(this.current_section.string_format=!0),this.sections.push(this.current_section);break;case Ts:this.char_index++,this.AppendTextPart({text:"@",flag:5}),this.current_section.string_format=!0;break;case ri:case Zt:case As:case En:!this.current_section.has_number_format&&!this.current_section.string_format?(this.ConsumeNumberFormat(),this.current_section.has_number_format=!0):this.AppendCharAsText();break;case ql:this.AppendTextPart({text:this.ConsumeFormatting(),flag:6});break;case Mn:this.AppendString(this.ConsumeString());break;case Tn:this.preserve_formatting_characters?this.AppendCharAsText():(this.AppendTextPart({text:"0",flag:1}),this.char_index++);break;case Ss:if(this.preserve_formatting_characters)this.AppendCharAsText();else{if(++this.char_index>=this.characters.length)throw new Error("invalid pad character at end");this.AppendTextPart({text:this.pattern[this.char_index++],flag:1})}break;case Cs:if(this.current_section.has_asterisk)throw new Error("we don't support multiple asterisks");if(this.preserve_formatting_characters)this.AppendCharAsText();else{if(++this.char_index>=this.characters.length)throw new Error("invalid pad character at end");this.AppendTextPart({text:this.pattern[this.char_index++],flag:2}),this.current_section.has_asterisk=!0}break;case Ms:case Es:this.current_section.percent||this.current_section.exponential||this.current_section.string_format?this.AppendCharAsText():(this.current_section.exponential=!0,this.char_index++);break;case ks:!this.current_section.exponential&&!this.current_section.string_format&&(this.current_section.percent=!0),this.AppendCharAsText();break;case ii:if(this.preserve_formatting_characters&&this.AppendCharAsText(!1),++this.char_index>=this.characters.length)throw new Error("invalid escape character at end");this.AppendCharAsText();break;default:this.AppendCharAsText()}}static ParseDatePattern(){for(this.date_pattern=!0;this.date_pattern&&this.char_index<this.pattern.length;)this.DatePatternConsumeChar();if(this.date_pattern){this.date_pattern=!1;for(let e of this.sections)for(let t of e.prefix)t.flag&&t.flag&7&&(this.date_pattern=!0)}return this.date_pattern&&(this.sections[0].date_format=!0,this.sections[0].prefix.forEach((e,t)=>{if(e.flag===3&&(e.text==="mm"||e.text==="m")){if(t)for(let r=t-1;r;r--){let i=this.sections[0].prefix[r];if(i.flag===3){/h/i.test(i.text)&&(e.flag=4,e.text=e.text.toLowerCase());break}}if(t<this.sections[0].prefix.length-1)for(let r=t+1;r<this.sections[0].prefix.length;r++){let i=this.sections[0].prefix[r];if(i.flag===3){/s/i.test(i.text)&&(e.flag=4,e.text=e.text.toLowerCase());break}}}})),this.date_pattern}static ConsumeDatePart(){let e=this.pattern[this.char_index++],t=e.toLowerCase(),r={text:e,flag:3};for(;this.pattern[this.char_index]&&this.pattern[this.char_index].toLowerCase()===t;)r.text+=this.pattern[this.char_index++];if(t==="s"&&this.pattern[this.char_index]===".")for(r.text+=this.pattern[this.char_index++];this.pattern[this.char_index]==="0";)r.text+=this.pattern[this.char_index++];return r}static ConsumeAMPM(){let e=this.pattern.substr(this.char_index,5);if(e==="am/pm"||e==="AM/PM")return this.char_index+=5,this.sections[0].twelve_hour=!0,{text:e,flag:3};if(e=this.pattern.substr(this.char_index,3),e==="a/p"||e==="A/P")return this.char_index+=3,this.sections[0].twelve_hour=!0,{text:e,flag:3}}static DatePatternConsumeChar(){switch(this.characters[this.char_index]){case Rs:this.char_index=this.characters.length;break;case ri:case Zt:case Ms:case Es:case ks:case Ts:this.date_pattern=!1;break;case Xl:case Ql:case Yl:case Zl:case ec:case tc:case rc:case ic:case nc:case oc:this.AppendTextPart(this.ConsumeDatePart());break;case sc:case ac:{let t=this.ConsumeAMPM();t?this.AppendTextPart(t):this.AppendCharAsText()}break;case Mn:this.AppendString(this.ConsumeString());break;case Tn:this.preserve_formatting_characters?this.AppendCharAsText():(this.AppendTextPart({text:"0",flag:1}),this.char_index++);break;case Ss:if(this.preserve_formatting_characters)this.AppendCharAsText();else{if(++this.char_index>=this.characters.length)throw new Error("invalid pad character at end");this.AppendTextPart({text:this.pattern[this.char_index++],flag:1})}break;case Cs:if(this.current_section.has_asterisk)throw new Error("we don't support multiple asterisks");if(this.preserve_formatting_characters)this.AppendCharAsText();else{if(++this.char_index>=this.characters.length)throw new Error("invalid pad character at end");this.AppendTextPart({text:this.pattern[this.char_index++],flag:2}),this.current_section.has_asterisk=!0}break;case ii:if(this.preserve_formatting_characters&&this.AppendCharAsText(!1),++this.char_index>=this.characters.length)throw new Error("invalid escape character at end");this.AppendCharAsText();break;default:this.AppendCharAsText()}}};var Un=l=>(l>=60&&l--,new Date(-22090752e5+864e5*l)),oi=(l,e=!0)=>{if(e){let t=new Date(l);l=new Date(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()).getTime()}return l=(l+22090752e5)/864e5,l>=60&&l++,l},ze=class l{static grouping_regexp=/\d{1,3}(?=(\d{3})+(?!\d))/g;static fraction_limits=[9,99,999,9999];static imaginary_character="\u{1D456}";static minus_character="-";magic_decimal=!1;transform_value;_pattern="";sections;decimal_zero_regexp=[];cloned=[];get pattern(){return this._pattern}get date_format(){return this.sections[0]&&this.sections[0].date_format}constructor(e){if(this._pattern=e,this.sections=ni.Parse(e),this.sections.length||(this.sections=[]),this.sections[0]||(this.sections[0]=new We),this.sections[1]||(this.sections[1]={...this.sections[0]},this.sections[1].prefix=JSON.parse(JSON.stringify(this.sections[1].prefix)),this.sections[1].suffix=JSON.parse(JSON.stringify(this.sections[1].suffix)),this.sections[1].prefix.push({text:"-"}),this.cloned[1]=!0),this.sections[2]||(this.sections[2]={...this.sections[0]},this.cloned[2]=!0),!this.sections[3]){for(let t of this.sections[0].prefix)if(t.flag===5){this.sections[3]={...this.sections[0]},this.sections[3].string_format=!0,this.cloned[3]=!0;break}}this.decimal_zero_regexp=this.sections.map(t=>{if(t.decimal_max_digits>t.decimal_min_digits)return new RegExp(`0{1,${t.decimal_max_digits-t.decimal_min_digits}}(?:$|e)`)})}static FormatPartsAsText(e,t=0){let r=-1,i=e.map((n,o)=>{switch(n.flag){case 2:return r=o,n.text;case 1:return n.text.replace(/./g," ");case 6:return"";default:return n.text}});if(r>=0&&t){let n=i.reduce((s,a,c)=>c===r?s:s+a.length,0),o="";for(let s=0;s<t-n;s++)o+=i[r];i[r]=o}return i.join("")}SetDecimal(e){for(let t of this.sections)t.fraction_format||(t.decimal_min_digits=e,t.decimal_max_digits=e)}IncreaseDecimal(){this.sections.forEach(e=>{e.fraction_format?e.fraction_denominator||(e.fraction_denominator_digits=Math.min(e.fraction_denominator_digits+1,4)):(e.decimal_min_digits++,e.decimal_max_digits=e.decimal_min_digits)})}DecreaseDecimal(){this.sections.forEach(e=>{e.fraction_format?e.fraction_denominator||(e.fraction_denominator_digits=Math.max(e.fraction_denominator_digits-1,1)):(e.decimal_min_digits=Math.max(0,e.decimal_min_digits-1),e.decimal_max_digits=e.decimal_min_digits)})}AddGrouping(){this.sections.forEach(e=>{e.grouping=!0})}RemoveGrouping(){this.sections.forEach(e=>{e.grouping=!1})}ToggleGrouping(){let e=!this.sections[0].grouping;this.sections.forEach(t=>{t.grouping=e})}toString(){return this.sections[0].date_format?this._pattern:this.sections.filter((e,t)=>!this.cloned[t]).map(e=>{let t="",r=0;if(e.fraction_format){e.fraction_integer&&(t+="? ");let i="";for(let n=0;n<e.fraction_denominator_digits;n++)i+="#";t+=i,t+="/",e.fraction_denominator?t+=e.fraction_denominator:t+=i}else if(e.has_number_format){for(r=0;r<e.integer_min_digits;r++)t+="0";if(e.grouping&&(t.length<4&&(t=("####"+t).slice(-4)),t=t.replace(/[\d#]{1,3}(?=([\d#]{3})+(?![\d#]))/g,"$&,")),e.decimal_max_digits||e.decimal_min_digits){for(t+=".",r=0;r<e.decimal_min_digits;r++)t+="0";for(;r<e.decimal_max_digits;r++)t+="#"}if(e.scaling){let i=Math.log10(e.scaling)/3;for(r=0;r<i;r++)t+=","}e.exponential&&(t+="e")}return e.prefix.map(i=>i.flag===1?i.text==="0"?"?":"_"+i.text:i.flag===2?"*"+i.text:i.flag===6?"["+i.text+"]":i.text).join("")+t+e.suffix.map(i=>i.flag===1?i.text==="0"?"?":"_"+i.text:i.flag===2?"*"+i.text:i.text).join("")}).join(";")}FormatDimensionedQuantity(e){if(this.transform_value){let r=this.transform_value(e);if(Tt(r))e=r;else return typeof r=="string"?r:this.FormatParts(r)}let t=this.FormatParts(e.value||0);return e.unit&&t.push({text:" "},{text:e.unit}),t}FormatComplex(e){if(e.imaginary===1/0||e.imaginary===-1/0||e.real===1/0||e.real===-1/0)return[{text:"Infinity"}];let t=[],r=[],i=!1,n=!!e.imaginary;n&&(t=this.FormatParts(e.imaginary),n=t.some(a=>/[1-9]/.test(a.text)),t.length===1&&this.sections[0].integer_min_digits<=1&&t[0].text==="1"?(t[0].text="",i=!0):t.length===1&&this.sections[1].integer_min_digits<=1&&t[0].text==="-1"&&(t[0].text="-",i=!0));let o=!!e.real;o&&(r=this.FormatParts(e.real),o=r.some(a=>/[1-9]/.test(a.text)));let s=[];if(o||!o&&!n){if(s.push(...r),n){s.push({text:e.imaginary<0?` ${l.minus_character} `:" + "});let a=i?[]:this.FormatParts(Math.abs(e.imaginary));s.push(...a,{text:l.imaginary_character})}}else n&&s.push(...t,{text:l.imaginary_character});return s}FormatParts(e){if(typeof e!="number"&&!this.sections[3])return[{text:(e??"").toString()}];let{parts:t,section:r}=this.BaseFormat(e),i=[];if(r.date_format||r.string_format)for(let n of t)typeof n=="string"?i.push({text:n}):i.push(n);else this.magic_decimal&&t[1]===""&&t.splice(1,1),i=[...r.prefix.map(n=>({...n})),{text:r.has_number_format?t.join(V.decimal_separator):""},...r.suffix.map(n=>({...n}))];for(let n=1;n<i.length;n++)i[n].flag===i[n-1].flag&&(i[n].text=i[n-1].text+i[n].text,i[n-1].text="");return i.filter(n=>n.text)}Format(e,t=0){return l.FormatPartsAsText(this.FormatParts(e),t)}ZeroPad(e,t){for(;e.length<t;)e="0"+e;return e}DateFormat(e){let t=Un(e),r=this.sections[0],i=t.getUTCHours();return r.twelve_hour&&(i>12&&(i-=12),i===0&&(i=12)),{parts:r.prefix.map(o=>{if(o.flag===4)return o.text==="mm"?{text:this.ZeroPad(t.getUTCMinutes().toString(),2)}:{text:this.ZeroPad(t.getUTCMinutes().toString(),1)};if(o.flag===3){switch(o.text.toLowerCase()){case"am/pm":case"a/p":{let a=o.text.split("/");return{text:t.getUTCHours()>12?a[1]:a[0]}}case"mmmmm":return{text:V.date_components.long_months[t.getUTCMonth()][0]};case"mmmm":return o.text==="MMMM"?{text:V.date_components.long_months[t.getUTCMonth()].toUpperCase()}:{text:V.date_components.long_months[t.getUTCMonth()]};case"mmm":return o.text==="MMM"?{text:V.date_components.short_months[t.getUTCMonth()].toUpperCase()}:{text:V.date_components.short_months[t.getUTCMonth()]};case"mm":return{text:this.ZeroPad((t.getUTCMonth()+1).toString(),2)};case"m":return{text:this.ZeroPad((t.getUTCMonth()+1).toString(),1)};case"ddddd":case"dddd":return o.text==="DDDDD"||o.text==="DDDD"?{text:V.date_components.long_days[t.getUTCDay()].toUpperCase()}:{text:V.date_components.long_days[t.getUTCDay()]};case"ddd":return o.text==="DDD"?{text:V.date_components.short_days[t.getUTCDay()].toUpperCase()}:{text:V.date_components.short_days[t.getUTCDay()]};case"dd":return{text:this.ZeroPad(t.getUTCDate().toString(),2)};case"d":return{text:this.ZeroPad(t.getUTCDate().toString(),1)};case"yyyy":case"yyy":return{text:t.getUTCFullYear().toString()};case"yy":case"y":return{text:this.ZeroPad((t.getUTCFullYear()%100).toString(),2)};case"hh":return{text:this.ZeroPad(i.toString(),2)};case"h":return{text:this.ZeroPad(i.toString(),1)};case"ss":return{text:this.ZeroPad(t.getUTCSeconds().toString(),2)};case"s":return{text:this.ZeroPad(t.getUTCSeconds().toString(),1)}}let s=o.text.match(/^(s+)\.(0+)$/);if(s)return{text:this.ZeroPad(t.getUTCSeconds().toString(),s[1].length)+V.decimal_separator+(t.getUTCMilliseconds()/1e3).toFixed(s[2].length).substr(2)}}return{...o}}),section:r}}StringFormat(e,t){let r=[];for(let i of t.prefix)i.flag===5?r.push({text:e}):r.push({...i});return{parts:r,section:t}}Round2(e,t){let r=Math.pow(10,t);return Math.round(r*e)/r}FormatFraction(e,t){t.percent&&(e*=100);let r={denominator:1,numerator:Math.round(e),error:Math.abs(Math.round(e)-e)};if(t.fraction_denominator)r.denominator=t.fraction_denominator,r.numerator=Math.round(e*r.denominator);else if(r.error){let n=l.fraction_limits[t.fraction_denominator_digits-1]||l.fraction_limits[0];for(let o=2;o<=n;o++){let s=Math.round(e*o),a=Math.abs(s/o-e);if(a<r.error&&(r={numerator:s,denominator:o,error:a},!a))break}}let i=[];if(t.fraction_integer){let n=Math.floor(r.numerator/r.denominator);r.numerator%=r.denominator,(n||!r.numerator)&&(i.push(n.toString()),r.numerator&&i.push(" "))}else r.numerator||i.push("0");return r.numerator&&(i.push(r.numerator.toString()),i.push("/"),i.push(r.denominator.toString())),i.join("")}BaseFormat(e){if(this.sections[0].date_format)return this.DateFormat(Number(e));if(typeof e!="number")return this.StringFormat((e??"").toString(),this.sections[3]);let t=this.sections[0],r=this.decimal_zero_regexp[0];e<0&&(t=this.sections[1]);let i=t.percent?t.decimal_max_digits+2:t.decimal_max_digits,n=Math.pow(10,-i)/2,o=Math.abs(e);if(o<n&&(t=this.sections[2],r=this.decimal_zero_regexp[2]),t.scaling&&(o/=t.scaling,o<n&&(t=this.sections[2],r=this.decimal_zero_regexp[2])),t.string_format)return this.StringFormat(e.toString(),t);let s="";if(t.fraction_format)return{parts:[this.FormatFraction(o,t)],section:t};t.exponential?s=o.toExponential(t.decimal_max_digits):(t.percent&&(o*=100),s=this.Round2(o,t.decimal_max_digits).toFixed(t.decimal_max_digits)),r&&(s=s.replace(r,""));let a=s.split(".");for(;a[0].length<t.integer_min_digits;)a[0]=("0000000000000000"+a[0]).slice(-t.integer_min_digits);return t.integer_min_digits===0&&a[0]==="0"&&(a[0]=""),t.grouping&&(a[0]=a[0].replace(l.grouping_regexp,"$&"+V.grouping_separator)),{parts:a,section:t}}};var me=class{static cache={};static complex_general;static symbolc_name_map={};static base_formats={Accounting:"_(#,##0.00_);(#,##0.00);-???",Number:"0.00",Integer:"0",Percent:"0.00%",General:"0.######",Fraction:"# ?/?",Dollar:"$* _(#,##0.00_);$* (#,##0.00);$* -???",Exponential:"0.000e","Short Date":"mm/dd/yy","Long Date":"dddd, mmm d yyyy",Timestamp:"mm-dd-yy hh:mm:ss"};static aliases={Scientific:"Exponential",Percentage:"Percent",Currency:"Dollar"};static Get(e,t=!1){if(t&&e==="General")return this.complex_general;let r=this.symbolc_name_map[e.toLowerCase()],i=this.cache[r||e];return i||(i=new ze(e),this.cache[e]=i),i}static Equals(e,t){if(e===t)return!0;let r=this.Get(e),i=this.Get(t);return r.pattern===i.pattern}static Translate(e){let t=this.symbolc_name_map[e.toLowerCase()];return t?this.cache[t].toString():e}static SymbolicName(e){for(let t of Object.keys(this.base_formats))if(e===this.base_formats[t])return t;return null}static InitCache(){for(let e of Object.keys(this.base_formats))this.cache[e]=new ze(this.base_formats[e]),this.symbolc_name_map[e.toLowerCase()]=e;this.cache.General.magic_decimal=!0,this.complex_general=new ze("0.###"),this.complex_general.magic_decimal=!0;for(let e of Object.keys(this.aliases))this.cache[e]=this.cache[this.aliases[e]],this.symbolc_name_map[e.toLowerCase()]=e}};me.InitCache();var Us=new Date().getUTCFullYear(),Dn=class{compare_day;compare_month;TestDate(e){let t=Date.parse(e);if(isNaN(t))return!1;let r=new Date(t),n=e.replace(/[\d\-\\/,.\s]+/g," ").toLocaleLowerCase().split(/\s+/).map(a=>a.trim()).filter(a=>!!a);if(!n.length)return t;if(!this.compare_month){this.compare_month={};for(let a=0;a<12;a++)this.compare_month[V.date_components.long_months[a].toLocaleLowerCase().replace(/\./,"")]=a,this.compare_month[V.date_components.short_months[a].toLocaleLowerCase().replace(/\./,"")]=a}if(!this.compare_day){this.compare_day={};for(let a=0;a<7;a++)this.compare_day[V.date_components.long_days[a].toLocaleLowerCase().replace(/\./,"")]=a,this.compare_day[V.date_components.short_days[a].toLocaleLowerCase().replace(/\./,"")]=a}let o=!1,s=!1;for(let a of n){let c=!1;for(let[d,u]of Object.entries(this.compare_month))if(a===d){if(o||r.getUTCMonth()!==u)return!1;c=!0,o=!0}if(!c){for(let[d,u]of Object.entries(this.compare_day))if(a===d){if(s||r.getUTCDay()!==u)return!1;c=!0,s=!0}}if(!c)return!1}return s&&!o?!1:t}TryParse(e=""){let t={};if(e[0]==="'")return{value:e,type:2};if(e==="")return{value:e,type:2};if(e==="NaN")return{value:NaN,type:3,hints:{Nan:!0}};let r=e.trim(),i=r.match(/^[$](.*?)$/);i&&(r=i[1],t.Currency=!0);let n=r.match(/^\((.*?)\)$/);n&&(r=n[1],t.Parens=!0);let o=r.match(/^(.*?)%\s*$/);o&&(r=o[1],t.Percent=!0),V.decimal_separator==="."?/,/.test(r)&&(r=r.replace(/,/g,""),t.Grouping=!0):(r=r.replace(/(\d)\s+/g,"$1"),r=r.replace(/\./g,""),r=r.replace(/,/,"."));let s=Number(r);if(s===null||isNaN(s)){let a=e.toLowerCase();if(a==="false")return{value:!1,type:4};if(a==="true")return{value:!0,type:4};let c=this.TestDate(e);if(c!==!1&&!isNaN(c)){let d=new Date(c),u=d.getUTCFullYear();if(u>=Us-200&&u<=Us+200)return t={Date:!0},(d.getHours()||d.getMinutes()||d.getSeconds())&&(t.Time=!0),{value:oi(c,!0),type:3,hints:t}}return{value:e,type:2}}if(n&&(s=-s),o){let a=s<0?-1:1,c=(a*s).toString().split(".");c[0]=("00"+c[0]).replace(/(\d\d)$/,".$1"),s=Number(c.join(""))*a}return/e/.test(e)&&(t.Exponential=!0),{value:s,type:3,hints:t}}},Ds=new Dn;var si=class{model={};layout_element;visible_=!1;timeout=0;pending_dialog_resoltion=[];options_={type:"initial"};set options(e){if(e.type==="about"&&(e.close_box=!0,e.icon=!0),this.options_.icon!==e.icon&&(this.model.left.style.display=e.icon?"block":"none"),this.options_.close_box!==e.close_box&&(this.model.close.style.display=e.close_box?"block":"none"),this.options_.message!==e.message&&(this.model.message.textContent=e.message||"",this.model.message.style.display=e.message?"block":"none"),this.options_.title!==e.title&&(this.model.title.textContent=e.title||"",this.model.title.style.display=e.title?"block":"none"),this.options_.type!==e.type){let t=this.model.dialog.className.replace(/dialog-type-\S+/g,"").trim();e.type&&(t+=` dialog-type-${e.type}`),this.model.dialog.className=t,e.type==="about"?this.model.about.style.display="block":this.model.about.style.display="none"}this.options_=e}event_handler=e=>{(e.key==="Escape"||e.key==="Esc")&&(e.stopPropagation(),e.preventDefault(),this.visible=!1)};get visible(){return this.visible_}set visible(e){if(e!==this.visible_)if(this.visible_=e,e)this.layout_element?.setAttribute("dialog",""),window.addEventListener("keydown",this.event_handler);else{this.layout_element?.removeAttribute("dialog"),window.removeEventListener("keydown",this.event_handler);let t=this.pending_dialog_resoltion.slice(0);this.pending_dialog_resoltion=[],Promise.resolve().then(()=>{for(let r of t)r()})}}constructor(e){this.layout_element=e.parentElement;let t=this.layout_element?.querySelector(".treb-dialog-mask");if(t){let r=t.querySelectorAll("[data-bind]");for(let i of Array.from(r)){let n=i.dataset.bind;n&&(this.model[n]=i)}}if(this.model.about){let r=["<div>TREB version 32.14.0"];r.push("<small><a target=_blank href='https://treb.app'>http://treb.app</a></small>"),this.model.about.innerHTML=r.join(`
|
|
15
15
|
`)}this.model.close?.addEventListener("click",r=>{r.stopPropagation(),r.preventDefault(),this.HideDialog()})}Node(e){return this.model[e]}Update(e,t=!0){t&&(e={...this.options_,...e}),this.options=e}HideDialog(){this.visible=!1}ShowDialog(e){return new Promise(t=>{this.pending_dialog_resoltion.push(t),this.options=e,this.visible=!0,this.timeout&&(window.clearTimeout(this.timeout),this.timeout=0),e.timeout&&(this.timeout=window.setTimeout(()=>this.HideDialog(),e.timeout))})}};var ai=class{constructor(e){this.container=e;let t=Me.GetInstance(e.ownerDocument);this.node=t.Div("treb-spinner",e,{html:"<div><div></div><div></div><div></div><div></div></div>"})}node;visible=!1;Show(){this.node.classList.add("visible")}Hide(){this.node.classList.remove("visible")}};var Ls={formula_bar:!0,in_cell_editor:!0,undo:!0,scrollbars:!0,headers:!0,export:!0,tab_bar:"auto",resizable:!0,hyperlinks:"_blank",max_file_size:94208,tint_theme_colors:!0,dnd:!1,add_tab:!1,expand_formula_button:!1,expand:!0,markdown:!1,spinner:!1,complex:"off",spill:!0};var ke=l=>!!l&&typeof l=="object"&&l.key==="metadata"&&!!l.value&&l.value.type==="metadata",Ln=l=>!!l&&typeof l=="object"&&l.key==="series"&&typeof l.value=="object",Is=l=>!!l&&typeof l=="object"&&l.type===9&&Array.isArray(l.value);var $=class{static Scale(e,t,r=6.5,i,n){return Wn(e,t,r,i,n)}static Range(e){let t,r;for(let n of e)typeof n>"u"||((typeof t>"u"||t>n)&&(t=n),(typeof r>"u"||r<n)&&(r=n));let i=typeof t>"u"||typeof r>"u"?0:r-t;return{min:t,max:r,range:i}}static ApplyScale(e,t,r){return t*(e-r.min)/(r.max-r.min)}static Flatten(e){let t=[];if(Array.isArray(e))for(let r of e)Array.isArray(r)?t=t.concat(this.Flatten(r)):t.push(r);else typeof e<"u"&&t.push(e);return t}};var Vs=l=>{In(l,0,l.length)},lc=(l,e,t)=>{let r=l[t-1],i=e;for(let n=e;n<t-1;n+=1)l[n]<=r&&(zs(l,n,i),i+=1);return zs(l,i,t-1),i},zs=(l,e,t)=>{let r=l[e];l[e]=l[t],l[t]=r},In=(l,e,t)=>{if(e<t){let r=lc(l,e,t);In(l,e,r),In(l,r+1,t)}};var zn="#,##0.00",yt=l=>{let e=l[0],t=l[0];for(let r of l)r<e&&(e=r),r>t&&(t=r);return{min:e,max:t}},Fs=l=>{let{label:e,x:t,y:r,z:i,index:n,subtype:o,data_labels:s,axis:a}=l,c={x:{data:[]},y:{data:[]}};if(typeof a=="number"&&(c.axis=a),typeof n=="number"&&(c.index=n),o&&(c.subtype=o.toString()),s){let h=$.Flatten(Array.isArray(s)?s:[s]);c.labels=h.map(f=>typeof f>"u"?"":f.toString())}e&&(c.label=e.toString());let d=(h,f=!1)=>{let m;if(ke(h)&&(h={type:9,value:[[h]]}),Is(h)){m={data:[]};let p=$.Flatten(h.value);if(m.data=p.map(b=>{if(ke(b)){if(typeof b.value.value=="number")return b.value.value}else if(b.type===3)return b.value}),ke(p[0])&&p[0].value?.format&&(m.format=p[0].value.format,f)){let b=F.Get(m.format);m.labels=m.data.map(_=>_===void 0?void 0:b.Format(_))}}return m};c.y=d(r,!0)||{data:[]},c.x=d(t)||{data:[]},c.z=d(i);let u=[c.x,c.y];for(let h of u)if(h.data.length){let f=h.data.filter(m=>m||m===0);h.range=yt(f)}return c},Ns=l=>{let e={x:{data:[]},y:{data:[]}},t=$.Flatten(l.value),r=[];for(let[n,o]of t.entries()){let s=0;if(typeof o.value=="number")s=o.value,r.push(o.value);else if(ke(o))if(ye(o.value.value))e.x.data[n]=o.value.value.real,s=o.value.value.imaginary;else if(typeof o.value.value=="number")s=o.value.value;else continue;else continue;e.y.data[n]=s,r.push(s)}let i="";if(ke(t[0])&&(i=t[0].value.format||""),i){e.y.format=i;let n=F.Get(e.y.format||"");e.y.labels=e.y.data.map(o=>o===void 0?void 0:n.Format(o))}if(e.y.range=yt(r),e.x.data.length){let n=e.x.data.filter(o=>typeof o=="number");if(e.x.range=yt(n),i){e.x.format=i;let o=F.Get(e.x.format||"");e.x.labels=e.x.data.map(s=>s===void 0?void 0:o.Format(s))}}return e},er=(l,e)=>{if(!l)return[];let t=[];if(l.type===5){if(l.key==="group"){if(Array.isArray(l.value)){for(let[n,o]of l.value.entries())if(o&&typeof o=="object")if(Ln(o)){let s=Fs(o.value);typeof s.index>"u"&&(s.index=n+1),t.push(s)}else o.type===9&&t.push(Ns(o))}}else if(Ln(l)){let n=Fs(l.value);t.push(n)}}else l.type===9&&t.push(Ns(l));let r,i=0;if(e?.type===9){let n=$.Flatten(e.value),o="0.00###";ke(n[0])&&n[0].value.format&&(o=n[0].value.format);let s=n.map(c=>{if(c.type===3)return c.value;if(ke(c)&&typeof c.value.value=="number")return c.value.value}),a=s.filter(c=>typeof c=="number");r={data:s,format:o,range:yt(a)}}for(let n of t)i=Math.max(i,n.y.data.length),n.x.data.length&&(r||(r=n.x));if(!r){r={data:[],range:{min:0,max:Math.max(0,i-1)}};for(let n=0;n<i;n++)r.data.push(n)}for(let n of t)n.x.data.length||(n.x=r);return t},Ps=l=>{let e=Math.abs(l.step)%1;if(e){if(Math.log10(Math.abs(e))<-4)return"Scientific";let r=0;for(let n=0;n<l.count;n++){let o=((l.min+l.step*n)%1).toFixed(6).replace(/0+$/,"");r=Math.max(r,o.length-2)}let i="#,##0.";for(let n=0;n<r;n++)i+="0";return i}else return Math.log10(Math.abs(l.step))>=5?"Scientific":"#,##0"},vt=(l,e,t,r,i,n)=>{let o="",s="",a="";for(let R of l)R.axis?R.y.format&&!a&&(a=R.y.format):R.y.format&&!s&&(s=R.y.format),R.x.format&&!o&&(o=R.x.format);let c;l.some(R=>R.label&&R.label.length>0)&&(c=l.map((R,D)=>({label:R.label||`Series ${D+1}`,index:typeof R.index=="number"?R.index:D+1})));let d=l.filter(R=>R.x.range),u=Math.min.apply(0,d.map(R=>R.x.range?.min||0)),h=Math.max.apply(0,d.map(R=>R.x.range?.max||0)),f=d.filter(R=>!R.axis),m=d.filter(R=>R.axis),p=Math.min.apply(0,f.map(R=>R.y.range?.min||0)),b=Math.max.apply(0,f.map(R=>R.y.range?.max||0)),_=-1,x=-1;m.length&&(_=Math.min.apply(0,m.map(R=>R.y.range?.min||0)),x=Math.max.apply(0,m.map(R=>R.y.range?.max||0)));for(let R of l)if(R.z){for(let[D,q]of R.z.data.entries())if(typeof q<"u"){let oe=R.x.data[D],_e=Math.max(0,q/2);typeof oe<"u"&&(u=Math.min(u,oe-_e),h=Math.max(h,oe+_e));let M=R.y.data[D];typeof M<"u"&&(p=Math.min(p,M-_e),b=Math.max(b,M+_e))}}typeof r<"u"&&(u=Math.min(u,r)),typeof i<"u"&&(u=Math.max(u,i)),typeof e<"u"&&(p=Math.min(p,e)),typeof t<"u"&&(b=Math.max(b,t));let v=$.Scale(u,h,7),w=$.Scale(p,b,7),y=$.Scale(_,x,7);if(_!==x&&w&&y&&w.count!==y.count){let R=Math.max(w.count,y.count),D=w.count<R?w:y;for(let q=D.count;q<R;q+=2)D.max+=D.step,D.count++,D.count<R&&(D.min-=D.step,D.count++)}let C,S,A;if(o){C=[];let R=F.Get(o);for(let D=0;D<=v.count;D++)C.push(R.Format(v.min+D*v.step))}if(!s&&n&&(s=Ps(w)),!a&&n&&(a=Ps(y)),s){S=[];let R=F.Get(s);for(let D=0;D<=w.count;D++)S.push(R.Format(w.min+D*w.step))}if(a){A=[];let R=F.Get(a);for(let D=0;D<=y.count;D++)A.push(R.Format(y.min+D*y.step))}let k={x:{format:o,scale:v,labels:C},y:{format:s,scale:w,labels:S},legend:c};return _!==x&&(k.y2={format:a,scale:y,labels:A}),k},li=(l,e,t)=>{for(let r of l){let i={x:F.Get(r.x.format||""),y:F.Get(r.y.format||"")};r.y.labels=[];for(let n=0;n<r.y.data.length;n++){let o=t?t[n]:typeof r.x.data[n]=="number"?i.x.Format(r.x.data[n]):"",s=typeof r.y.data[n]=="number"?i.y.Format(r.y.data[n]):"";r.y.labels[n]=e.replace(/\bx\b/g,o).replace(/\by\b/g,s)}}},dc=l=>{let e=(s,a=0,c=s.length)=>c%2?s[Math.floor(c/2)+a]:(s[c/2+a]+s[c/2-1+a])/2,t=l.length,r=[0,e(l),0];if(t%2){let s=Math.floor(t/2);r[0]=e(l,0,Math.ceil(t/2)),r[2]=e(l,s,l.length-s)}else r[0]=e(l,0,t/2),r[2]=e(l,t/2,l.length-t/2);let i=r[2]-r[0],n=[0,0],o=0;for(let s=0;s<t;s++)o+=l[s];for(let s=0;s<t;s++){let a=l[s];if(a>=r[0]-i*1.5){n[0]=a;break}}for(let s=t-1;s>=0;s--){let a=l[s];if(a<=r[2]+i*1.5){n[1]=a;break}}return{data:l,quartiles:r,whiskers:n,iqr:i,n:t,mean:t?o/t:0,min:l[0],max:l[t-1]}},Os=l=>{let e=er(l[0]),t=vt(e,void 0,void 0,void 0,void 0,!0),r=0,i=!!l[2],n=e.map(u=>{let h=[];for(let m of u.y.data)m!==void 0&&h.push(m);Vs(h);let f=dc(h);return r=Math.max(r,f.n),i&&(f.whiskers[0]=f.min,f.whiskers[1]=f.max),f}),o=l[1]?.toString()||void 0,s=[],a=[],c=F.Get("#,##0");for(let[u,h]of n.entries()){s.push(c.Format(h.n));let f=e[u];a.push(f.label||`Series ${u+1}`)}return{type:"box",series:e,title:o,max_n:r,data:n,x_labels:s,series_names:e.some(u=>!!u.label)?a:void 0,scale:t.y.scale,y_labels:t.y.labels}},Hs=l=>{let e=er(l[0]),t,r;for(let s of e)typeof s.x.range?.min=="number"&&s.x.range.min>0&&s.x.range.min<50&&(r=0),typeof s.y.range?.min=="number"&&s.y.range.min>0&&s.y.range.min<50&&(t=0);let i=vt(e,t,void 0,r),n=l[1]?.toString()||void 0;return{legend:i.legend,legend_style:2,type:"bubble",series:e,title:n,x_scale:i.x.scale,x_labels:i.x.labels,y_scale:i.y.scale,y_labels:i.y.labels}},Vn=(l,e="plot")=>{let t=er(l[0]),r=vt(t),i=l[1]?.toString()||void 0,n=l[2]?.toString()||void 0,o={legend:r.legend,style:e,type:"scatter2",series:t,title:i,x_scale:r.x.scale,x_labels:r.x.labels,y_scale:r.y.scale,y_labels:r.y.labels,y2_scale:r.y2?.scale,y2_labels:r.y2?.labels,lines:e==="line",points:e==="plot"};if(n){o.markers=/marker/i.test(n),o.smooth=/smooth/i.test(n),o.data_labels=/labels/i.test(n);let s=n.match(/labels="(.*?)"/);s&&o.series?li(o.series,s[1]):(s=n.match(/labels=([^\s\r\n,]+)(?:\W|$)/),s&&o.series&&li(o.series,s[1])),s=n.match(/class=([\w_-]+)(?:\W|$)/),s&&(o.class_name=s[1])}return o},Fn=(l,e)=>{let[t,r,i,n]=l,o=n?.toString()||void 0,s=/stacked/i.test(o||""),a=er(t),c=vt(a),d;if(r){d=(r.type===9?$.Flatten(r.value):$.Flatten(r)).map(_=>!_||!_.value?"":ke(_)?typeof _.value.value=="number"?F.Get(_.value.format||zn).Format(_.value.value):_.value.value?.toString()||"":typeof _.value=="number"?F.Get(zn).Format(_.value):_.value.toString());let b=a.reduce((_,x)=>Math.max(_,x.y.data.length),0);for(b<d.length&&(d=d.slice(0,b));b>d.length;)d.push("")}let u,h=c.legend;if(s){u=a;let p=new Map;for(let x of a)for(let[v,w]of x.x.data.entries())if(w!==void 0){let y=x.y.data[v]||0;p.set(w,y+(p.get(w)||0))}let b=Array.from(p.keys()).sort((x,v)=>x-v),_=b.map(x=>p.get(x)||0);a=[{x:{data:b,format:u[0]?.x?.format},y:{data:_,format:u[0]?.y?.format}}],a[0].x.range=yt(b),a[0].y.range=yt(_),c=vt(a,Math.min(0,..._))}let f=i?.toString()||void 0,m={type:e,legend:h,legend_style:1,series2:a,stacked_series:u,scale:c.y.scale,title:f,y_labels:e==="bar"?d:c.y.labels,x_labels:e==="bar"?c.y.labels:d};if(o){m.stacked=s,m.round=/round/i.test(o),m.data_labels=/labels/i.test(o);let p=o.match(/labels="(.*?)"/);p&&a?li(a,p[1],d):(p=o.match(/labels=([^\s\r\n,]+)(?:\W|$)/),p&&a&&li(a,p[1],d)),p=o.match(/class=([\w_-]+)(?:\W|$)/),p&&(m.class_name=p[1])}return m},Nn=(l,e)=>{let t=er(l[0],l[1]),r=vt(t,0,0),i=l[2]?.toString()||void 0,n=l[3]?.toString()||void 0,o={legend:r.legend,type:"scatter2",series:t,title:i,x_scale:r.x.scale,x_labels:r.x.labels,y_scale:r.y.scale,y_labels:r.y.labels,lines:!0,filled:e==="area"};if(n){o.smooth=/smooth/i.test(n);let s=n.match(/class=([\w_-]+)(?:\W|$)/);s&&(o.class_name=s[1])}return o},Gs=(l,e=!1)=>{let[t,r,i,n,o]=l,s=l[0]?.type===9?l[0].value:l[0],a=s?$.Flatten(s):[],c=a.map(y=>{if(ke(y)&&typeof y.value.value=="number")return y.value.value}),d=l[1]?.type===9?l[1].value:l[1],u=$.Flatten(d||[]).map(y=>ke(y)?typeof y.value.value=="number"&&y.value.format?F.Get(y.value.format).Format(y.value.value):y.value.value?.toString()||"":y.value?.toString()||""),h=!1;c=c.map(y=>y&&y<0?(h||(console.warn("pie/donut chart does not support negative values (omitted)"),h=!0),0):y);let f=0,m=c.map((y,C)=>(typeof y<"u"&&(f+=y),{value:y||0,label:u[C]||"",index:C+1,percent:0}));if(f)for(let y of m)y.percent=(y.value||0)/f;let p="";for(let y of a)if(ke(y)){p=y.value.format||"";break}let b=F.Get(p||zn),_=F.Get("percent");typeof l[4]>"u"&&l[1]&&(l[4]="label");let x=l[4]||"";if(x)for(let y of m){let C=b.Format(y.value||0),S=_.Format(y.percent);y.title=x.replace(/value%/ig,_.Format(y.value||0)).replace(/value/ig,C).replace(/percent/ig,S).replace(/label/ig,y.label||"").trim()}let v=(n||"").toUpperCase();if(v==="ASC"||v==="ASCENDING"||v==="INC")m.sort((y,C)=>(y.value||0)-(C.value||0));else if(v==="DESC"||v==="DESCENDING"||v==="DEC")m.sort((y,C)=>(C.value||0)-(y.value||0));else{let y=(n||"").match(/sort=([\w]+)(?:\W|$)/i);y&&(v=y[1],/^(asc|inc)/i.test(v)?m.sort((C,S)=>(C.value||0)-(S.value||0)):/^(desc|dec)/i.test(v)&&m.sort((C,S)=>(S.value||0)-(C.value||0)))}let w={type:e?"pie":"donut",slices:m,title:i||""};if(n){let y=n.match(/class=([_-\w]+)(?:\W|$)/);y&&(w.class_name=y[1])}return w};var Ve=class{constructor(e=0,t=0,r=100,i=100){this.left=e;this.top=t;this.right=r;this.bottom=i}get width(){return this.right-this.left}get height(){return this.bottom-this.top}get center(){return{x:this.left+this.width/2,y:this.top+this.height/2}}};var mc="http://www.w3.org/2000/svg",I=(l,e={},t)=>{let r=document.createElementNS(mc,l);for(let i of Object.keys(e))if(e[i]!==void 0){let n=e[i]??"";r.setAttribute(i,Array.isArray(n)?n.join(" "):n.toString())}return t&&(r.textContent=t),r},ci=class{parent;svg_node;text_measurement_node;container_group;group;axis_group;label_group;size={width:0,height:0};bounds=new Ve;constructor(){this.container_group=I("g"),this.group=I("g"),this.axis_group=I("g",{class:"axis-group"}),this.label_group=I("g",{class:"label-group"}),this.container_group.appendChild(this.axis_group),this.container_group.appendChild(this.group),this.container_group.appendChild(this.label_group)}Initialize(e){this.parent=e,this.svg_node=I("svg",{class:"treb-chart"}),this.svg_node.style.overflow="hidden",this.svg_node.style.position="relative",this.svg_node.style.width="100%",this.svg_node.style.height="100%",this.svg_node.appendChild(this.container_group),this.parent.appendChild(this.svg_node),this.Resize()}Legend(e){let t=I("g");this.group.appendChild(t);let r=I("text");t.appendChild(r),t.setAttribute("class","legend");let i=[[]],n=10,o=e.area.width,s=0,a=0,c=e.area.width,d=e.style===1?14:26,u=e.labels.map((b,_)=>{r.textContent=b.label;let x=r.getBoundingClientRect(),v={width:x.width,height:x.height},w=v.width+d+n;return a=Math.max(a,v.height),e.layout===1?i[_]=[_]:w>o?i[s].length===0?(i[s].push(_),s++,i[s]=[],o=c):(s++,i[s]=[_],o=c-w):(i[s].push(_),o-=w),v});t.removeChild(r);let h=a,f=e.layout||0;f===0&&i.every(b=>b.length<=1)&&(f=0);for(let b=0;b<i.length;b++){let _=i[b].reduce((w,y)=>w+u[y].width+d,(i[b].length-1)*n),x=0,v=f===0?Math.round((c-_)/2):Math.round(n/2);for(let w=0;w<i[b].length;w++){let y=i[b][w],C=u[y],S=e.labels[y],A=h-1,k=!1;typeof navigator<"u"&&(k=/trident/i.test(navigator?.userAgent||""));let R=typeof S.index=="number"?S.index:y+1;switch(t.appendChild(I("text",{"dominant-baseline":"middle",x:v+d,y:h,dy:k?".3em":void 0},S.label)),e.style){case 1:t.appendChild(I("rect",{class:`series-${R}`,x:v,y:A-4,width:8,height:8}));break;case 2:t.appendChild(I("circle",{class:`series-${R}`,cx:v+d-11,cy:A-4+3}));break;default:t.appendChild(I("rect",{class:`series-${R}`,x:v,y:A-1,width:d-3,height:2}));break}x=Math.max(x,C.height),v+=C.width+d+n}h=Math.round(h+x*1.1)}let m=t.getBoundingClientRect(),p={width:m.width,height:m.height+a};switch(e.position){case 1:t.setAttribute("transform",`translate(${e.area.left}, ${e.area.bottom-p.height})`);break;case 2:t.setAttribute("transform",`translate(${e.area.left}, ${e.area.top})`);break;case 3:t.setAttribute("transform",`translate(${e.area.right-p.width}, ${e.area.top})`);break;case 0:default:t.setAttribute("transform",`translate(${e.area.left}, ${e.area.top})`)}e.position===0?e.area.top+=p.height||0:e.position===3?e.area.right-=(p.width||0)+8:e.position===2?e.area.left+=(p.width||0)+8:e.area.bottom-=p.height||0}Clear(e){this.group.textContent="",this.axis_group.textContent="",this.label_group.textContent="",e="treb-chart"+(e?" "+e:""),this.svg_node.setAttribute("class",e)}Resize(){let e=this.svg_node.getBoundingClientRect();this.svg_node.setAttribute("width",e.width.toString()),this.svg_node.setAttribute("height",e.height.toString()),this.size={width:e.width,height:e.height}}Prerender(){let e=this.svg_node.getBoundingClientRect();this.bounds.top=e.top,this.bounds.left=e.left,this.bounds.right=e.right,this.bounds.bottom=e.bottom}RenderTitle(e,t,r,i){let n=I("text",{class:"chart-title",x:Math.round(t.width/2)},e);n.style.textAnchor="middle",this.group.appendChild(n);let o=n.getBoundingClientRect();switch(i){case"bottom":n.setAttribute("y",Math.round(t.bottom-o.height).toString()),t.bottom-=o.height+r;break;default:n.setAttribute("y",Math.round(t.top+r+o.height).toString()),t.top+=o.height+r;break}}MeasureText(e,t,r=!1){this.text_measurement_node||(this.text_measurement_node=I("text",{x:"-100px",y:"-100px"}),this.svg_node.appendChild(this.text_measurement_node)),typeof t<"u"?(typeof t=="string"&&(t=[t]),this.text_measurement_node.setAttribute("class",t.join(" "))):this.text_measurement_node.setAttribute("class",""),this.text_measurement_node.textContent=e;let i=this.text_measurement_node.getBoundingClientRect(),n={width:i.width,height:i.height,y_offset:i.height-(this.bounds.top-i.top-100)};return r&&(n.width=Math.ceil(n.width),n.height=Math.ceil(n.height),n.y_offset=Math.ceil(n.y_offset)),n}RenderTicks(e,t,r,i,n){let o=[],s=e.width/i;for(let a=0;a<i;a++){let c=Math.round(e.left+s/2+s*a)-.5;o.push(`M${c} ${t} L${c} ${r}`)}this.group.appendChild(I("path",{d:o,class:n}))}RenderXAxisBar(e,t,r,i,n){let o=r.length;if(!o)return;let s=4,a=t?e.width/o:e.width/(o-1),c=t?a/2:0,d=1,u=!0;for(;u;){u=!1;let h=0;for(let f=0;f<o;f+=d){let m=Math.round(e.left+c+a*f),p=m-i[f].width/2;if(h&&p<=h){d++,u=!0;break}h=m+i[f].width/2+s}}for(let h=0;h<o;h+=d){let f=Math.round(e.left+c+a*h);this.RenderText(this.axis_group,r[h],"center",{x:f,y:e.bottom},n)}}RenderXAxisTicks(e,t,r){let i=t?e.width/r:e.width/(r-1),n=t?i/2:0,o=[];for(let s=0;s<r;s++){let a=Math.round(e.left+n+i*s)+.5;o.push(`M${a},${e.bottom+.5} v6`)}this.axis_group.appendChild(I("path",{d:o.join(" "),class:"x-axis-tick axis-tick"}))}RenderXAxis(e,t,r,i,n){let o=r.length;if(!o)return;let s=4,a=t?e.width/o:e.width/(o-1),c=t?a/2:0,d=1,u=!0,h=(r.length-1)%2===0,f=(r.length-1)%3===0;for(;u;){u=!1;let m=0;for(let p=0;p<o;p+=d){let b=Math.round(e.left+c+a*p),_=b-i[p].width/2;if(m&&_<=m){d++,u=!0;break}m=b+i[p].width/2+s}}d===3&&!f&&h&&d++;for(let m=0;m<o;m+=d){let p=Math.round(e.left+c+a*m);this.RenderText(this.axis_group,r[m],"center",{x:p,y:e.bottom},n)}}RenderYAxisBar(e,t,r,i){r=r.slice(0),r.reverse();let n=r.length;if(!n)return;let o=e.height/n,s=1,a=!0;for(;a;){a=!1;let c=0;for(let d=0;d<n;d+=s){let u=r[d],h=Math.round(e.bottom-o*(d+.5)+u.metrics.height/4);if(c&&h>=c){s++,a=!0;break}c=h-u.metrics.height}}for(let c=0;c<n;c+=s){let d=r[c],u=Math.round(e.bottom-o*(c+.5)+d.metrics.height/4);this.RenderText(this.axis_group,d.label,"right",{x:t,y:u},i)}}RenderYAxis(e,t,r,i,n="right"){let o=r.length;if(!o)return;let s=e.height/(o-1),a=1,c=!0;for(;c;){c=!1;let d=0;for(let u=0;u<o;u+=a){let h=r[u],f=Math.round(e.bottom-s*u+h.metrics.height/4);if(d&&f>=d){a++,c=!0;break}d=f-h.metrics.height}}for(let d=0;d<o;d+=a){let u=r[d],h=Math.round(e.bottom-s*d+u.metrics.height/4);this.RenderText(this.axis_group,u.label,n,{x:t,y:h},i)}}LineProperties(e,t){let r=t.x-e.x,i=t.y-e.y;return{length:Math.sqrt(r*r+i*i),angle:Math.atan2(i,r)}}RenderSmoothLine(e,t,r=!1,i,n){let o=I("g"),s=[],a=[],c=t.length,d=c-1,u=e.width/c/2,h=[],f=t.map((b,_)=>{if(!(typeof b>"u"))return{x:Math.round(e.left+e.width/d*_),y:e.bottom-b}}),m=[],p=()=>{if(m.length<2)return;let b="",_=m[0],x=m[m.length-1];m.length===2?b=`${m[0].x},${m[0].y} L${m[1].x},${m[1].y}`:m.length>2&&(b=""+this.CatmullRomChain(m).map(w=>`${w.x},${w.y}`).join(" L")),b&&(s.push("M"+b),r&&(a.push(`M ${_.x},${e.bottom} L ${_.x},${_.y}`),a.push("L"+b),a.push(`L ${x.x},${e.bottom}`)))};for(let b of f)b?m.push(b):(p(),m=[]);if(m.length&&p(),r&&o.appendChild(I("path",{class:"fill",d:a})),o.appendChild(I("path",{class:"line",d:s})),typeof n<"u"&&(typeof n=="string"&&(n=[n]),o.setAttribute("class",n.join(" "))),this.group.appendChild(o),i&&h.length){let b=I("g");for(let _ of h){let x=I("circle",{cx:_.x,cy:_.y,r:u});x.addEventListener("mouseenter",()=>{this.parent.setAttribute("title",i[_.i]||"")}),x.addEventListener("mouseleave",()=>{this.parent.setAttribute("title","")}),b.appendChild(x)}b.setAttribute("class","mouse-layer"),this.group.appendChild(b)}}RenderLine(e,t,r=!1,i,n){let o=I("g"),s=[],a=[],c=t.length,d=c-1,u=e.width/c/2,h=[],f=0,m=!0,p;for(;f<c;f++){let b=t[f];if(typeof b>"u"){m=!0,r&&typeof p<"u"&&a.push(`L${p} ${e.bottom}Z`),p=void 0;continue}let _=Math.round(+e.left+e.width/d*f);m?(r&&a.push(`M${_} ${e.bottom} L${_} ${e.bottom-b}`),s.push(`M${_} ${e.bottom-b}`)):(s.push(`L${_} ${e.bottom-b}`),a.push(`L${_} ${e.bottom-b}`)),h.push({x:_,y:e.bottom-b,i:f}),p=_,m=!1}if(r&&typeof p<"u"&&a.push(`L${p} ${e.bottom}Z`),r&&o.appendChild(I("path",{class:"fill",d:a})),o.appendChild(I("path",{class:"line",d:s})),typeof n<"u"&&(typeof n=="string"&&(n=[n]),o.setAttribute("class",n.join(" "))),this.group.appendChild(o),i&&h.length){let b=I("g");for(let _ of h){let x=I("circle",{cx:_.x,cy:_.y,r:u});x.addEventListener("mouseenter",()=>{this.parent.setAttribute("title",i[_.i]||"")}),x.addEventListener("mouseleave",()=>{this.parent.setAttribute("title","")}),b.appendChild(x)}b.setAttribute("class","mouse-layer"),this.group.appendChild(b)}}RenderBarGrid(e,t,r){let i=[],n=e.width/t;for(let o=0;o<=t;o++){let s=Math.round(e.left+n*o)-.5;i.push(`M${s} ${e.top} L${s} ${e.bottom}`)}this.group.appendChild(I("path",{d:i,class:r}))}RenderGrid(e,t,r=0,i,n){let o=[],s=[],a=e.height/t;for(let c=0;c<=t;c++){let d=Math.round(e.top+a*c)-.5;n&&n[1]===c?s.push(`M${e.left} ${d} L${e.right} ${d}`):o.push(`M${e.left} ${d} L${e.right} ${d}`)}a=e.width/(r-1);for(let c=0;c<r;c++){let d=Math.round(e.left+a*c)-.5;n&&n[0]===c?s.push(`M${d} ${e.top} L${d} ${e.bottom}`):o.push(`M${d} ${e.top} L${d} ${e.bottom}`)}this.group.appendChild(I("path",{d:o,class:i})),s.length&&(i?Array.isArray(i)?i.push("zero"):i=i+" zero":i="zero",this.group.appendChild(I("path",{d:s,class:i})))}MultiplyPoint(e,t){return{x:e.x*t,y:e.y*t}}AddPoints(e,t){return{x:e.x+t.x,y:e.y+t.y}}CatmullRomSpline(e,t){let r=.5;r=r/2;let i=(u,h,f)=>{let{x:m,y:p}=h,{x:b,y:_}=f;return((b-m)**2+(_-p)**2)**r+u},n=0,o=i(n,e[0],e[1]),s=i(o,e[1],e[2]),a=i(s,e[2],e[3]),c=(s-o)/t,d=[];for(let u=0;u<t;u++){let h=o+c*u,f=this.AddPoints(this.MultiplyPoint(e[0],(o-h)/(o-n)),this.MultiplyPoint(e[1],(h-n)/(o-n))),m=this.AddPoints(this.MultiplyPoint(e[1],(s-h)/(s-o)),this.MultiplyPoint(e[2],(h-o)/(s-o))),p=this.AddPoints(this.MultiplyPoint(e[2],(a-h)/(a-s)),this.MultiplyPoint(e[3],(h-s)/(a-s))),b=this.AddPoints(this.MultiplyPoint(f,(s-h)/(s-n)),this.MultiplyPoint(m,(h-n)/(s-n))),_=this.AddPoints(this.MultiplyPoint(m,(a-h)/(a-o)),this.MultiplyPoint(p,(h-o)/(a-o))),x=this.AddPoints(this.MultiplyPoint(b,(s-h)/(s-o)),this.MultiplyPoint(_,(h-o)/(s-o)));d.push(x)}return d}CatmullRomChain(e,t=30){let r=e.slice(0),i=[],n=r.length;if(n){let o=r[n-1].x-r[n-2].x,s=r[n-1].y-r[n-2].y;r.push({x:r[n-1].x+o,y:r[n-1].y+s}),r.push({x:r[n-1].x+o,y:r[n-1].y+s}),o=r[1].x-r[0].x,s=r[1].y-r[0].y,r.unshift({x:r[0].x-o,y:r[0].y-s});for(let a=0;a<r.length-4;a++){let c=r.slice(a,a+4),d=this.CatmullRomSpline(c,t);i.push(...d)}}return i}RenderDataLabels(e,t,r,i,n,o,s){let a=Math.max(t.length,r.length),c=i.max-i.min||1,d=n.max-n.min||1;for(let u=0;u<a;u++){let h=t[u],f=r[u];if(h!==void 0&&f!==void 0){let m={x:e.left+(h-i.min)/c*e.width,y:e.bottom-(f-n.min)/d*e.height},p=o[u];if(p){this.label_group.appendChild(I("circle",{class:"label-target",cx:m.x,cy:m.y,r:10}));let b=I("g",{class:"data-label",transform:`translate(${m.x+10},${m.y})`});this.label_group.appendChild(b);let _=I("circle",{cx:-10,y:0,r:5,class:`marker-highlight series-${s}`});b.appendChild(_);let x=I("text",{x:4,y:0},p);b.appendChild(x);let v=x.getBoundingClientRect(),w=v.height,y=v.width+8;y+15+m.x>=e.right&&(b.setAttribute("transform",`translate(${m.x-y-15},${m.y})`),_.setAttribute("cx",(y+15).toString()));let C=I("path",{d:`M0,5 h${y} v-${w} h-${y} Z`});b.insertBefore(C,x)}}}}RenderBoxAndWhisker(e,t,r,i,n,o,s){let a=I("g",{class:s});this.group.appendChild(a);let c=e.width/o,d=c*.2,h=Math.min(c-2*d,90);i>0&&(h=h*Math.sqrt(t.n)/Math.sqrt(i));let f=_=>e.top+e.height-(_-n.min)/(n.max-n.min)*e.height,m=e.left+r*c+c/2,p=f(t.quartiles[0]),b=f(t.quartiles[2]);a.appendChild(I("rect",{class:"iqr",x:e.left+r*c+(c-h)/2,y:b,width:h,height:p-b})),a.appendChild(I("line",{class:"median",x1:m-h*.5,x2:m+h*.5,y1:f(t.quartiles[1]),y2:f(t.quartiles[1])})),a.appendChild(I("line",{class:"whisker",x1:m-h*.25,x2:m+h*.25,y1:f(t.whiskers[0]),y2:f(t.whiskers[0])})),a.appendChild(I("line",{class:"whisker-extent",x1:m,x2:m,y1:f(t.whiskers[0])-2,y2:f(t.quartiles[0])+2})),a.appendChild(I("line",{class:"whisker",x1:m-h*.25,x2:m+h*.25,y1:f(t.whiskers[1]),y2:f(t.whiskers[1])})),a.appendChild(I("line",{class:"whisker-extent",x1:m,x2:m,y1:f(t.whiskers[1])+2,y2:f(t.quartiles[2])-2}));for(let _ of t.data)(_<t.whiskers[0]||_>t.whiskers[1])&&a.appendChild(I("circle",{class:"outlier",cx:m,cy:f(_),r:3}))}RenderBubbleSeries(e,t,r,i,n){let o=r.max-r.min||1,s=i.max-i.min||1,a=[],c=[],d=I("g",{class:n});if(this.group.appendChild(d),t.z)for(let[u,h]of t.z.data.entries()){let f=t.x.data[u],m=t.y.data[u];if(typeof f<"u"&&typeof m<"u"&&typeof h<"u"&&h>0){let p=h/o*e.width,b=h/s*e.height,_=Math.max(p,b),x={x:e.left+(f-r.min)/o*e.width,y:e.bottom-(m-i.min)/s*e.height,z:_};if(a.push(x),t.labels?.[u]){let v=x.z/2;c.push({x:x.x,y:x.y,text:t.labels?.[u]||"",offset:Math.cos(Math.PI/4)*v})}}}for(let u of a)u&&d.appendChild(I("circle",{cx:u.x,cy:u.y,r:u.z/2,class:"point"}));if(c.length){let u=this.label_group.getBoundingClientRect();for(let h of c)if(h.text){let f=this.label_group.appendChild(I("g",{class:"bubble-label"})),m=f.appendChild(I("rect",{x:h.x,y:h.y,class:"label-background"})),b=f.appendChild(I("text",{x:h.x,y:h.y,offset:h.offset,class:"label-text","text-anchor":"middle","alignment-baseline":"middle",style:`--translate-offset: ${Math.round(h.offset)}px`},h.text)).getBoundingClientRect();m.setAttribute("x",(b.left-u.left-2).toString()),m.setAttribute("y",(b.top-u.top-1).toString()),m.style.height=b.height+2+"px",m.style.width=b.width+4+"px"}}}RenderScatterSeries(e,t,r,i,n,o=!0,s=!1,a=!1,c=!1,d=!1,u){let h=Math.max(t.length,r.length),f=i.max-i.min||1,m=n.max-n.min||1,p=[],b=[],_=[],x=I("g",{class:u});this.group.appendChild(x);for(let v=0;v<h;v++){let w=t[v],y=r[v];typeof w>"u"||typeof y>"u"?p.push(void 0):p.push({x:e.left+(w-i.min)/f*e.width,y:e.bottom-(y-n.min)/m*e.height})}if(o){let v=[],w=d?()=>v.length===2?`${v[0].x},${v[0].y} L${v[1].x},${v[1].y}`:v.length>2?this.CatmullRomChain(v).map(C=>`${C.x},${C.y}`).join(" L"):"":()=>v.map(y=>`${y.x},${y.y}`).join(" L");for(let y of p)if(y)v.push(y);else{if(v.length>=2){let C=w();b.push("M"+C),_.push(`M${v[0].x},${e.bottom}L`+C+`L${v[v.length-1].x},${e.bottom}Z`)}v=[]}if(v.length>=2){let y=w();b.push("M"+y),_.push(`M${v[0].x},${e.bottom}L`+y+`L${v[v.length-1].x},${e.bottom}Z`)}}if(a&&x.appendChild(I("path",{d:_,class:"fill"})),o&&x.appendChild(I("path",{d:b,class:"line"})),s)for(let v of p)v&&x.appendChild(I("circle",{cx:v.x,cy:v.y,r:1,class:"point"}));if(c)for(let v of p)v&&x.appendChild(I("circle",{cx:v.x,cy:v.y,r:3,class:"marker"}))}RenderPoints(e,t,r,i){let n=[];for(let o=0;o<t.length;o++){let s=t[o]*e.width+e.left,a=e.bottom-r[o]*e.height;n.push(`M${s-1},${a-1} L${s+1},${a+1}`),n.push(`M${s-1},${a+1} L${s+1},${a-1}`)}this.group.appendChild(I("path",{d:n,class:i}))}RenderPoint(e,t,r){this.group.appendChild(I("circle",{cx:e,cy:t,r:1,class:r}))}RenderCalloutLines(e){let t=I("g",{class:"callouts"});this.label_group.appendChild(t);for(let r of e)t.appendChild(I("path",{d:`M${r.x1},${r.y1} L${r.x2},${r.y2}`,class:"callout "+(r.classes||"").trim()}))}RenderRectangle(e,t,r,i,n,o){let s="";if(t)if(t[0]&&t[0]===t[1]&&t[0]>=e.height){let c=t[0],d=t[0]-e.height,u=Math.sqrt(c*c-d*d);s=`M${e.left+e.width/2-u},${e.bottom} a${c},${c} 0 0 1 ${u*2},0 z`}else if(t[1]&&t[1]===t[2]&&t[1]>=e.width){let c=t[1],d=t[1]-e.width,u=Math.sqrt(c*c-d*d);s=`M${e.left},${e.top+e.height/2-u} a${c},${c} 0 0 1 0,${u*2} z`}else s=`M${e.left},${e.top+t[0]} a${t[0]},${t[0]} 0 0 1 ${t[0]},${-t[0]} h${e.width-t[0]-t[1]} a${t[1]},${t[1]} 0 0 1 ${t[1]},${t[1]} v${e.height-t[1]-t[2]} a${t[2]},${t[2]} 0 0 1 ${-t[2]},${t[2]} h${-e.width+t[2]+t[3]} a${t[3]},${t[3]} 0 0 1 ${-t[3]},${-t[3]} v${-e.height+t[3]+t[0]} `;else s=`M${e.left},${e.top} h${e.width} v${e.height} h${-e.width} v${-e.height} `;let a=I("path",{d:s,class:r});if(i&&(a.addEventListener("mouseenter",()=>{this.parent.setAttribute("title",i)}),a.addEventListener("mouseleave",()=>{this.parent.setAttribute("title","")})),this.group.appendChild(a),n){this.label_group.appendChild(I("path",{class:"label-target",d:s}));let c=o||{x:Math.round(e.left+e.width/2),y:Math.round(e.top-10)},d=I("g",{class:"data-label",transform:`translate(${c.x},${c.y})`});this.label_group.appendChild(d);let u=I("text",{x:0,y:0},n);d.appendChild(u);let h=u.getBoundingClientRect(),f=h.height,m=h.width+8;c.y-h.height<4&&(c.y-=c.y-h.height-4,d.setAttribute("transform",`translate(${c.x},${c.y})`)),u.setAttribute("x",Math.floor(-h.width/2).toString());let p=Math.ceil(f*.125),b=I("rect",{rx:3,x:-m/2,y:Math.round(-f+p*2/3),width:m,height:f+p});d.insertBefore(b,u)}}RenderText(e,t,r,i,n){let o=I("text",{x:i.x,y:i.y,class:n},t);switch(r){case"right":o.style.textAnchor="end";break;case"center":o.style.textAnchor="middle";break;default:o.style.textAnchor="start";break}(e||this.group).appendChild(o)}RenderDonut(e,t,r,i,n,o,s){let a=-Math.PI/2,c=0;o&&(r*=.8,i*=.7);let d=(u,h,f)=>[Math.cos(f)*h+u.x,Math.sin(f)*h+u.y];for(let u of e){let h=u.title||"",f=u.percent,m=u.index,p=[],b=0,_=d.bind(0,t,r),x=d.bind(0,t,i);if(f>.5){b=a+f/2*Math.PI*2,c=a+f*Math.PI*2;let y=b-a,C=c-b;p.push(`M${_(a)}`,`A${r},${r},${y},0,1,${_(b)}`,`A${r},${r},${C},0,1,${_(c)}`,`L${x(c)}`,`A${i},${i},${C},0,0,${x(b)}`,`A${i},${i},${y},0,0,${x(a)}`,"Z")}else{c=a+f*Math.PI*2,b=(c-a)/2+a;let y=c-a;p.push(`M${_(a)}`,`A${r},${r},${y},0,1,${_(c)}`,`L${x(c)}`,`A${i},${i},${y},0,0,${x(a)}`,"Z")}let v=I("path",{d:p,class:typeof m>"u"?void 0:`series-${m}`});typeof m<"u"&&v.setAttribute("data-index",m.toString());let w=I("g",{class:s});if(w.appendChild(v),this.group.appendChild(w),f>=.05&&h){let y=r-i;p=[];let C=d(t,i+(r-i)/2+y,b);p.push(`M${d(t,i+(r-i)/2,b)}`),p.push(`L${C}`),w.appendChild(I("path",{d:p,class:"callout"}));let S=[],A=I("text",{class:"callout-label"});w.appendChild(A);let k=b+Math.PI/2,R=h;A.textContent=R;let D=A.getBoundingClientRect(),q={width:D.width,height:D.height},[oe,_e]=C;oe+=q.height/2*Math.cos(b),_e+=q.height/4+q.height/2*Math.sin(b);let M=!1;k>Math.PI?oe-q.width<=n.left&&(M=!0):oe+q.width>n.right&&(M=!0);let X=/[\s-]/;if(M&&X.test(R)){let Z=-1,Q=1;for(let T=0;T<R.length;T++)if(X.test(R[T])){let O=Math.abs(.5-T/R.length);O<Q&&(Q=O,Z=T)}Z>0&&(S.push(R.substr(0,Z+1).trim()),S.push(R.substr(Z+1).trim()))}if(S.length){let Z=0,Q=0,T=S.map(O=>{A.textContent=O,D=A.getBoundingClientRect();let te={width:D.width,height:D.height};return Q=Math.max(Q,te.width),{text:O,metrics:te}});A.textContent="";for(let O of T){let te=I("tspan");te.textContent=O.text;let ge=k>Math.PI?oe-(Q-O.metrics.width)/2:oe+(Q-O.metrics.width)/2;te.setAttribute("x",ge.toString()),te.setAttribute("dy",Z.toString()),A.appendChild(te),Z=O.metrics.height}}let de=k>Math.PI?"end":"start";A.setAttribute("text-anchor",de),A.setAttribute("x",oe.toString()),A.setAttribute("y",_e.toString()),typeof m<"u"&&A.setAttribute("data-index",m.toString())}a=c}}};var di=class{renderer=new ci;margin={top:.025,left:.05,bottom:.025,right:.075};Resize(e,t){this.renderer.Resize()}Initialize(e){this.renderer.Initialize(e)}Update(e,t){this.renderer.Resize(),this.renderer.Prerender(),this.renderer.Clear(t.class_name);let r=new Ve(0,0,this.renderer.size.width,this.renderer.size.height),i={top:Math.round(r.height)*this.margin.top,bottom:Math.round(r.height)*this.margin.bottom,left:Math.round(r.width)*this.margin.left,right:Math.round(r.width)*this.margin.right},n=t.title;if(n&&this.renderer.RenderTitle(n,r,i.top,t.title_layout||"top"),r.top+=i.top,r.left+=i.left,r.bottom-=i.bottom,r.right-=i.right,t.legend&&t.legend.length){let s=0;t.title&&(!t.title_layout||t.title_layout==="top")&&(s=1);let a=t.legend_position||s;this.renderer.Legend({labels:t.legend,position:a,style:t.legend_style,layout:a===0||a===1?0:1,area:r})}if(t.type==="histogram"||t.type==="line"||t.type==="area"||t.type==="column"||t.type==="histogram2"||t.type==="bar"||t.type==="scatter2"||t.type==="bubble"||t.type==="box"){let s=[],a=0;t.x_labels&&t.x_labels.length&&(s=t.x_labels.map(h=>{let f=this.renderer.MeasureText(h,["axis-label","x-axis-label"],!0);return a=Math.max(a,f.height),f}));let c=[],d=0;t.type==="box"&&t.series_names?.length&&(c=t.series_names.map(h=>{let f=this.renderer.MeasureText(h,["axis-label","x-axis-label","series-name"],!0);return d=Math.max(d,f.height),f}));let u=a&&d?4:0;if(t.y_labels&&t.y_labels.length){let h=[],f=0,m=0,p=t.type==="scatter2"||t.type==="bubble"?t.y_scale:t.scale,b=t.type==="bar"?t.y_labels.length:p.count+1;for(let _=0;_<b;_++){let x=this.renderer.MeasureText(t.y_labels[_],["axis-label","y-axis-label"]);h.push({label:t.y_labels[_],metrics:x}),f=Math.max(f,x.width),m=Math.max(m,x.height)}r.bottom=Math.round(r.bottom-m/2),r.top=Math.round(r.top+m/2),s.length&&(r.bottom-=a+i.bottom),c.length&&(r.bottom-=d+i.bottom),u&&(r.bottom-=u),t.type==="bar"?this.renderer.RenderYAxisBar(r,r.left+f,h,["axis-label","y-axis-label"]):this.renderer.RenderYAxis(r,r.left+f,h,["axis-label","y-axis-label"]),r.left+=f+i.left}if(t.type==="scatter2"&&t.y2_labels&&t.y2_labels.length&&t.y2_scale){let h=[],f=0,m=0,b=t.y2_scale.count+1;for(let _=0;_<b;_++){let x=this.renderer.MeasureText(t.y2_labels[_],["axis-label","y-axis-label"]);h.push({label:t.y2_labels[_],metrics:x}),f=Math.max(f,x.width),m=Math.max(m,x.height)}this.renderer.RenderYAxis(r,r.right-f,h,["axis-label","y-axis-label"],"left"),r.right-=f+i.left}if(s.length&&t.x_labels?.length){let h=t.type==="histogram2",f=t.type!=="line"&&t.type!=="area"&&t.type!=="bar"&&t.type!=="scatter2"&&t.type!=="bubble"&&t.type!=="histogram2";h&&this.renderer.RenderXAxisTicks(r,f,t.x_labels.length),t.y_labels&&(r.bottom+=a+i.bottom),this.renderer.RenderXAxis(r,f,t.x_labels,s,["axis-label","x-axis-label"]),r.bottom-=a+i.bottom}u&&(r.bottom+=u),t.type==="box"&&c.length&&t.series_names?.length&&(t.y_labels&&(r.bottom+=a+d+u+i.bottom),this.renderer.RenderXAxis(r,!0,t.series_names,c,["axis-label","x-axis-label","series-name"]),r.bottom-=a+d+i.bottom+i.bottom)}let o=[];switch(t.type){case"scatter":this.renderer.RenderPoints(r,t.x,t.y,"mc mc-correlation series-1");break;case"box":this.renderer.RenderGrid(r,t.scale.count,void 0,"chart-grid",o);for(let[s,a]of t.data.entries())a.iqr>0&&this.renderer.RenderBoxAndWhisker(r,a,s,t.max_n,t.scale,t.data.length,`box-plot series-${s}`);break;case"bubble":t.x_scale.min<=0&&t.x_scale.max>=0&&(o[0]=Math.round(Math.abs(t.x_scale.min/t.x_scale.step))),t.y_scale.min<=0&&t.y_scale.max>=0&&(o[1]=Math.round(Math.abs(t.y_scale.max/t.y_scale.step))),this.renderer.RenderGrid(r,t.y_scale.count,t.x_scale.count+1,"chart-grid",o);for(let[s,a]of t.series.entries()){let c=typeof a.index=="number"?a.index:s+1;this.renderer.RenderBubbleSeries(r,a,t.x_scale,t.y_scale,`bubble-chart series-${c}`)}break;case"scatter2":if(this.renderer.RenderGrid(r,t.y_scale.count,t.x_scale.count+1,"chart-grid"),t.series){for(let s=0;s<t.series.length;s++){let a=t.series[s],c=!!t.lines,d=!!t.points;a.subtype==="plot"?(d=!0,c=!1):a.subtype==="line"&&(d=!1,c=!0);let u=typeof a.index=="number"?a.index:s+1;this.renderer.RenderScatterSeries(r,a.x.data,a.y.data,t.x_scale,a.axis&&t.y2_scale?t.y2_scale:t.y_scale,c,d,!!t.filled,!!t.markers,!!t.smooth,`scatter-plot series-${u}`)}if(t.data_labels)for(let s=0;s<t.series.length;s++){let a=t.series[s];a.y.labels&&this.renderer.RenderDataLabels(r,a.x.data,a.y.data,t.x_scale,t.y_scale,a.y.labels,s+1)}}break;case"pie":case"donut":{let s=Math.min(r.height,r.width)/2*.9,a=t.type==="pie"?0:s*.8;this.renderer.RenderDonut(t.slices,r.center,s,a,r,!0,"donut")}break;case"line":case"area":{let s=t.scale;if(t.series){let a=t.x_scale?t.x_scale.max:Math.max.apply(0,t.series.map(u=>u.length)),c=t.smooth?this.renderer.RenderSmoothLine:this.renderer.RenderLine;this.renderer.RenderGrid(r,t.scale.count,t.x_scale?t.x_scale.count+1:a,"chart-grid");let d=0;for(let u of t.series){let h=u.map(m=>{if(!(typeof m>"u"))return $.ApplyScale(m,r.height,s)});if(h.length<a)for(let m=h.length;m<a;m++)h.push(void 0);let f=[t.type==="area"?"chart-area":"chart-line",`series-${d+1}`];c.call(this.renderer,r,h,t.type==="area",t.titles,f),d++}}}break;case"bar":{let s;if(this.renderer.RenderBarGrid(r,t.scale.count,"chart-grid"),t.series2){let a=0,c=t.series2.length;for(let p of t.series2)a=Math.max(a,p.y.data.length);let d=r.height/a,u=.7;typeof t.space=="number"&&(u=Math.max(0,Math.min(1,1-t.space)));let h=d*(1-u)/2,f=(d-h*2)/c,m=0;if(t.scale.min<0&&(m=$.ApplyScale(0,r.width,t.scale)),t.round){let p=Math.floor(f/2);s=[0,p,p,0]}for(let p=0;p<c;p++){let b=t.series2[p],_=typeof b.index=="number"?b.index:p+1;for(let x=0;x<b.y.data.length;x++){let v=b.y.data[x];if(typeof v=="number"){let w=Math.round(r.top+x*d+h)+p*f,y=0,C=0;m?v>0?(C=$.ApplyScale(v+t.scale.min,r.width,t.scale),y=r.left+m):(C=$.ApplyScale(t.scale.min-v,r.width,t.scale),y=r.left+m-C):(C=$.ApplyScale(v,r.width,t.scale),y=r.left),C&&this.renderer.RenderRectangle(new Ve(y,w,y+C,w+f),s,["chart-column",`series-${_}`],void 0||void 0)}}}}}break;case"column":case"histogram2":if(this.renderer.RenderGrid(r,t.scale.count,0,"chart-grid"),t.series2){let s=0,a=t.series2.length;for(let p of t.series2)s=Math.max(s,p.y.data.length);let c=r.width/s,d=.7;typeof t.space=="number"&&(d=Math.max(0,Math.min(1,1-t.space)));let u=c*(1-d)/2,h=(c-u*2)/a,f=0;if(t.scale.min<0&&(f=$.ApplyScale(0,r.height,t.scale)),t.callouts&&t.x_scale){let p=t.x_scale,b=t.callouts.map((_,x)=>{let v=Math.round(r.left+$.ApplyScale(_.value,r.width,p))+.5;return{x1:v,y1:r.bottom-r.height,x2:v,y2:r.bottom,classes:`callout-${x+1}`}});this.renderer.RenderCalloutLines(b)}let m;if(t.round){let p=Math.floor(h/2);m=[p,p,0,0]}if(t.stacked_series)for(let p=0;p<t.stacked_series[0].y.data.length;p++){let b=r.left+p*c+u,_=0;for(let x=0;x<t.stacked_series.length;x++){let v=t.stacked_series[x],w=typeof v.index=="number"?v.index:x+1,y=0,C=v.y.data[p]||0;x===0&&(_=Math.min(t.scale.min||0,C)),y=$.ApplyScale(C,r.height,t.scale);let S=r.bottom-y-$.ApplyScale(_,r.height,t.scale);this.renderer.RenderRectangle(new Ve(b,S,b+h,S+y),m,["chart-column",`series-${w}`],void 0||void 0,void 0,void 0),_+=C}}else for(let p=0;p<a;p++){let b=t.series2[p],_=typeof b.index=="number"?b.index:p+1;for(let x=0;x<b.y.data.length;x++){let v=b.y.data[x];if(typeof v=="number"){let w=r.left+x*c+u+p*h,y=0,C=0;f?v>0?(y=$.ApplyScale(v+t.scale.min,r.height,t.scale),C=r.bottom-y-f):(y=$.ApplyScale(t.scale.min-v,r.height,t.scale),C=r.bottom-f):(y=$.ApplyScale(v,r.height,t.scale),C=r.bottom-y);let S=void 0;if(y){let A=t.data_labels&&b.y.labels?b.y.labels[x]:"",k={x:Math.round(w+h/2),y:Math.round(C-10)};this.renderer.RenderRectangle(new Ve(w,C,w+h,C+y),m,["chart-column",`series-${_}`],S||void 0,A,k)}}}}}break;case"histogram":{this.renderer.RenderGrid(r,t.scale.count,0,"chart-grid");let s=r.width/t.count,a=t.column_width,c=s*(1-a)/2;for(let d=0;d<t.count;d++){let u=Math.round(r.left+d*s+c),h=s-c*2,f=$.ApplyScale(t.bins[d],r.height,t.scale),m=r.bottom-f,p=t.titles?t.titles[d]:void 0;this.renderer.RenderRectangle(new Ve(u,m,u+h,m+f),void 0,"chart-column series-1",p||void 0)}}break}}};var it=class{constructor(e=new di){this.renderer=e}static functions_registered=!1;chart_data={type:"null"};node;Initialize(e){this.node=e,this.renderer.Initialize(e)}Exec(e,t){let r=t?.value||[];switch(e.toLowerCase()){case"column.chart":this.chart_data=Fn(r,"column");break;case"bar.chart":this.chart_data=Fn(r,"bar");break;case"line.chart":this.chart_data=Nn(r,"line");break;case"area.chart":this.chart_data=Nn(r,"area");break;case"donut.chart":case"pie.chart":this.chart_data=Gs(r,e.toLowerCase()==="pie.chart");break;case"scatter.plot":this.chart_data=Vn(r,"plot");break;case"scatter.line":this.chart_data=Vn(r,"line");break;case"bubble.chart":this.chart_data=Hs(r);break;case"box.plot":this.chart_data=Os(r);break;default:this.Clear();break}}Clear(){this.chart_data={type:"null"}}Resize(){this.node&&this.renderer.Resize(this.node,this.chart_data)}Update(){this.node&&this.renderer.Update(this.node,this.chart_data)}};var Fe=(...l)=>({type:5,value:l,key:"arguments"}),Pn={Group:{arguments:[{name:"Array...",metadata:!0}],fn:(...l)=>({type:5,value:l,key:"group"}),category:["grouping"]},Series:{arguments:[{name:"Label"},{name:"X",metadata:!0},{name:"Y",metadata:!0},{name:"Z",metadata:!0},{name:"Index"},{name:"Subtype"},{name:"Labels",description:"Labels for bubble charts only (atm)"},{name:"Axis",description:"Series axis (scatter plot only)"}],fn:(...l)=>({type:5,value:{label:l[0],x:l[1],y:l[2],z:l[3],index:l[4],subtype:l[5],data_labels:l[6],axis:l[7]},key:"series"}),category:["chart functions"]},"Bar.Chart":{arguments:[{name:"Data",metadata:!0},{name:"Categories",metadata:!0},{name:"ChartTitle"}],fn:Fe,category:["chart functions"]},"Line.Chart":{arguments:[{name:"y",metadata:!0},{name:"x",metadata:!0},{name:"ChartTitle"}],fn:Fe,category:["chart functions"]},"Area.Chart":{arguments:[{name:"y",metadata:!0},{name:"x",metadata:!0},{name:"ChartTitle"}],fn:Fe,category:["chart functions"]},"Pie.Chart":{arguments:[{name:"Values",metadata:!0},{name:"Labels"},{name:"Title"},{name:"Sort"},{name:"Label"}],fn:Fe,category:["chart functions"]},"Donut.Chart":{arguments:[{name:"Values",metadata:!0},{name:"Labels",metadata:!0},{name:"Title"},{name:"Sort"},{name:"Label"}],fn:Fe,category:["chart functions"]},"Scatter.Line":{arguments:[{name:"Data",metadata:!0},{name:"ChartTitle"}],fn:Fe,category:["chart functions"]},"Scatter.Plot":{arguments:[{name:"Data",metadata:!0},{name:"ChartTitle"}],fn:Fe,category:["chart functions"]},"Column.Chart":{arguments:[{name:"Data",metadata:!0},{name:"Categories",metadata:!0},{name:"Chart Title"}],fn:Fe,category:["chart functions"]},"Bubble.Chart":{arguments:[{name:"Data",metadata:!0},{name:"Chart Title"}],fn:Fe,category:["chart functions"]},"Box.Plot":{arguments:[{name:"Data",metadata:!0},{name:"Chart Title"},{name:"Min/Max Style"}],fn:Fe,category:["chart functions"]}};var ui=class l{static treb_base_path="";static failed_dynamic_modules=[];static one_time_warnings={};static clipboard;DOM=Me.GetInstance();loaded=!1;document_styles={number_formats:[],colors:[],theme_colors:[]};selection_state={};options;get Localization(){return Je}events=new ei;calculation=0;file_version=0;last_save_version=0;initial_load_source=void 0;calculator;grid;model;dialog;spinner;file_chooser;file_chooser_operation=0;get parser(){return this.model.parser}view_node;key_listener;views=[];focus_target=this;parent_view;export_worker;undo_pointer=0;undo_stack=[];last_selection;get active_sheet(){let e=this.grid.active_sheet.name;return Rr.test(e)?`'${e}'`:e}get modified(){return this.undo_stack.length!==1}get document_name(){return this.grid.model.document_name}set document_name(e){this.grid.model.document_name=e,this.DocumentChange()}get user_data(){return this.grid.model.user_data}set user_data(e){this.grid.model.user_data=e,this.DocumentChange()}get scale(){return this.grid.scale}set scale(e){this.grid.scale=e}get headless(){return this.grid.headless}set headless(e){this.grid.headless!==e&&(this.grid.headless=e,e||(this.grid.Update(!0),this.RebuildAllAnnotations()))}get state(){return this.file_version}get can_revert(){return!this.options.inline_document&&!this.options.document?!1:this.initial_load_source==="local-storage"?!0:this.dirty}get dirty(){return this.file_version!==this.last_save_version}set dirty(e){e?this.file_version++:this.last_save_version=this.file_version}get sheet_names(){return this.model.sheets.list.map(e=>e.name)}constructor(e){e.storage_key&&!e.local_storage&&(e.local_storage=e.storage_key),this.options={...Ls,...e,local_storage:this.ResolveStorageKey(e.local_storage,"document")},typeof this.options.imaginary_value=="string"&&(ze.imaginary_character=this.options.imaginary_value),this.options.network_document&&(console.warn("the option `network_document` is deprecated. please use `document` instead."),this.options.document||(this.options.document=this.options.network_document)),this.options.document&&this.options.inline_document&&console.warn("both document and inline-document are provided");let t=this.options.document,r,i;this.options.local_storage&&!this.options.toll_initial_load&&!e.model&&(r=localStorage.getItem(this.options.local_storage)||void 0,r&&(i="local-storage")),!r&&!this.options.toll_initial_load&&!e.model&&e.inline_document&&(r=e.inline_document,i="inline-document"),this.options.local_storage&&!e.model&&window.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&this.options.local_storage&&this.dirty&&this.SaveLocalStorage(this.options.local_storage)});let n;typeof this.options.container=="string"?n=document.querySelector(this.options.container):this.options.container&&(n=this.options.container);let o={in_cell_editor:!0,repaint_on_cell_change:!1,scrollbars:this.options.scrollbars,markdown:!!this.options.markdown,formula_bar:this.options.formula_bar,expand_formula_button:this.options.expand_formula_button,tab_bar:this.options.tab_bar,add_tab:this.options.add_tab,expand:this.options.expand,support_font_stacks:!!this.options.font_stack};if(this.options.scale&&(o.initial_scale=this.options.scale),this.options.stats&&(o.stats=this.options.stats,o.tab_bar=!0),this.options.scale_control&&(o.scale_control=!0,o.tab_bar=!0,this.options.persist_scale&&(o.persist_scale_key=this.ResolveStorageKey(this.options.persist_scale,"scale"),o.persist_scale_key))){let s=localStorage.getItem(o.persist_scale_key);if(s)try{let a=JSON.parse(s);o.initial_scale=a.scale||1}catch{console.warn("parsing persisted scale failed")}}if(e.model?(this.model=e.model.model,this.calculator=e.model.calculator,this.DOM=e.model.DOM):(this.model=new zt,this.model.sheets.Add(Vt.Blank(this.model.theme_style_properties)),this.calculator=this.CreateCalculator(this.model,this.options)),n&&(this.DOM=Me.GetInstance(n.ownerDocument)),this.grid=new Ht(o,this.model,void 0,!!n,this.DOM),this.options.headless&&(this.grid.headless=!0),this.LoadLanguage(e.language),n){this.DOM=Me.GetInstance(n.ownerDocument),this.parent_view||(Y.is_windows?n.parentElement?.classList.add("treb-ua-windows"):Y.is_mac&&n.parentElement?.classList.add("treb-ua-osx"),Y.is_iphone&&n.parentElement?.classList.add("treb-ua-iphone"));let s=n.querySelector(".treb-view-template");this.view_node=s.content.firstElementChild?.cloneNode(!0),n.prepend(this.view_node),this.view_node.addEventListener("focusin",()=>{this.focus_target!==this&&(this.Publish({type:"focus-view"}),this.focus_target=this)}),this.key_listener=c=>this.HandleKeyDown(c),n.addEventListener("keydown",this.key_listener);let a=!!(r||this.options.document);this.grid.Initialize(this.view_node,a),this.options.dnd&&(this.view_node.addEventListener("dragenter",c=>this.HandleDrag(c)),this.view_node.addEventListener("dragover",c=>this.HandleDrag(c)),this.view_node.addEventListener("drop",c=>this.HandleDrop(c))),this.grid.grid_events.Subscribe(c=>{switch(c.type){case"error":this.dialog?.ShowDialog({type:"error",...this.TranslateGridError(c.code),timeout:3e3,close_box:!0});break;case"selection":this.UpdateSelection(c.selection),this.UpdateSelectionStyle(c.selection);break;case"sheet-change":this.OnSheetChange(c),this.UpdateSelectionStyle();break;case"scale":this.RebuildAllAnnotations(),this.Publish({type:"view-change"});break;case"cell-event":this.HandleCellEvent(c);break;case"composite":{let d=this.last_selection;this.calculation===0&&this.Recalculate(c),this.DocumentChange(d),this.UpdateDocumentStyles(),this.UpdateSelectionStyle()}break;case"data":{let d=this.last_selection;this.calculation===0&&this.Recalculate(c),this.DocumentChange(d)}break;case"style":this.DocumentChange(),this.UpdateDocumentStyles(),this.UpdateSelectionStyle();break;case"annotation":if(c.annotation){let d=c.annotation.view[this.grid.view_index]||{},u=!1;if(c.event==="select")u=!0;else switch(this.DocumentChange(),c.event){case"create":this.InflateAnnotation(c.annotation),this.calculator.UpdateAnnotations(c.annotation,this.grid.active_sheet),this.grid.AnnotationUpdated(c.annotation),u=c.annotation===this.grid.selected_annotation;break;case"delete":this.calculator.RemoveAnnotation(c.annotation);break;case"update":d.update_callback?(d.update_callback(),this.grid.AnnotationUpdated(c.annotation)):console.info("annotation update event without update callback"),this.calculator.UpdateAnnotations(c.annotation,this.grid.active_sheet),u=c.annotation===this.grid.selected_annotation;break;case"resize":d.resize_callback&&(d.resize_callback(),this.grid.AnnotationUpdated(c.annotation));break}if(u){this.UpdateSelectionStyleAnnotation(c.annotation),this.Publish({type:"annotation-selection"});break}}else console.info("annotation event without annotation");break;case"structure":{let d=this.last_selection;c.conditional_format&&(this.calculator.UpdateConditionals(),this.ApplyConditionalFormats(this.grid.active_sheet,!1)),c.rebuild_required?(this.calculator.Reset(),this.calculation===0&&this.Recalculate(c),this.DocumentChange(d)):this.DocumentChange(d)}this.UpdateSelectionStyle();break}}),this.options.prompt_save&&window.addEventListener("beforeunload",c=>{this.last_save_version!==this.file_version&&(c.preventDefault(),c.returnValue="")})}else l.one_time_warnings.headless||(l.one_time_warnings.headless=!0,console.info("not initializing layout; don't call UI functions"));if(e.preload&&e.preload.call(0,this),r?(typeof r=="string"&&(r=JSON.parse(r)),r?this.LoadDocument(r,{recalculate:!!this.options.recalculate,source:i}):this.UpdateDocumentStyles()):t||(this.calculator.RebuildClean(!0),this.UpdateDocumentStyles()),this.FlushUndo(),this.grid.ShowHeaders(this.options.headers),this.options.scroll&&!this.options.document){let s=this.options.scroll;requestAnimationFrame(()=>{this.ScrollTo(s)})}this.UpdateAC(),this.options.global_name&&(self[this.options.global_name]=this),n&&this.options.spinner&&(this.spinner=new ai(n)),t&&!e.model&&!r&&this.LoadNetworkDocument(t,this.options),n&&(this.dialog=new si(n))}UpdateAC(){let e=this.calculator.SupportedFunctions();if(this.model.language_model?.functions){let t={};for(let r of this.model.language_model.functions||[])t[r.base.toUpperCase()]=r;e=e.map(r=>{let i=t[r.name.toUpperCase()];if(i){let n=JSON.parse(JSON.stringify({...r,name:i.name}));if(i.description&&(n.description=i.description),i.arguments&&n.arguments)for(let[o,s]of i.arguments.entries())n.arguments[o]&&(n.arguments[o].name=s);return n}return r})}this.grid.SetAutocompleteFunctions(e)}CreateCalculator(e,t){return new Kr(e,{complex_numbers:t.complex,spill:t.spill})}TranslateGridError(e){switch(e){case 0:return{message:"No error"};case 2:return{message:"You can't change part of an array"};case 5:return{message:"Invalid area for paste"};case 4:return{message:"Invalid area for table"};case 3:return{message:"Invalid value (data validation)"};default:return{message:`Unknown error (${e})`}}}CreateView(){let e=new l({...this.options,global_name:void 0,model:this});return e.parent_view=this,e}Unsplit(){let e=this.views.pop();if(e){let t=e.view;t.grid.grid_events.CancelAll(),t.events.CancelAll(),t.view_node?.parentElement&&(t.key_listener&&t.view_node.parentElement.removeEventListener("keydown",t.key_listener),t.view_node.parentElement.removeChild(t.view_node)),this.view_node?.focus(),this.Resize()}}ExternalEditor(e){this.grid.ExternalEditor(e)}Split(){let e=this.CreateView();e.grid.EnsureActiveSheet(!0),e.view_node?.addEventListener("focusin",()=>{this.focus_target!==e&&(this.Publish({type:"focus-view"}),this.focus_target=e)}),e.grid.grid_events.Subscribe(r=>{r.type==="structure"&&(this.grid.EnsureActiveSheet(),this.grid.UpdateLayout(),this.grid.UpdateTabBar(),r.update_annotations&&(this.grid.RefreshAnnotations(),this.InflateAnnotations()))}),e.Subscribe(r=>{switch(r.type){case"selection":break;default:e.UpdateAnnotations(),this.grid.Update(!0),this.grid.UpdateAnnotations()}}),this.grid.grid_events.Subscribe(r=>{r.type==="structure"&&(e.grid.EnsureActiveSheet(),e.grid.UpdateLayout(),e.grid.UpdateTabBar(),r.update_annotations&&(e.grid.RefreshAnnotations(),e.InflateAnnotations()))});let t=this.Subscribe(r=>{switch(r.type){case"selection":break;case"load":case"reset":e.grid.EnsureActiveSheet(!0),e.UpdateAnnotations(),e.grid.UpdateAnnotations(),e.grid.Update(!0);break;default:e.UpdateAnnotations(),e.grid.Update(!0),e.grid.UpdateAnnotations()}});this.views.push({view:e,subscription:t})}ListConditionalFormats(e){return(typeof e>"u"?this.grid.active_sheet:this.model.sheets.Find(e))?.conditional_formats||[]}ConditionalFormatDuplicateValues(e,t){return this.AddConditionalFormat({type:"duplicate-values",area:this.RangeOrSelection(e,"invalid range (no selection)"),...t})}ConditionalFormatGradient(e,t){let r=this.RangeOrSelection(e,"invalid range (no selection)"),i=typeof t=="object"?{type:"gradient",area:r,...t}:{type:"gradient",area:r,..._o[t]};return this.AddConditionalFormat(i),i}ConditionalFormatDataBars(e,t){let i={type:"data-bar",area:this.RangeOrSelection(e,"invalid range (no selection)"),fill:{theme:4,tint:.5},...t};return this.AddConditionalFormat(i),i}ConditionalFormatCellMatch(e,t){let r={type:"cell-match",area:this.RangeOrSelection(e,"invalid range (no selection)"),...t};return this.AddConditionalFormat(r),r}ConditionalFormatExpression(e,t){let r={type:"expression",area:this.RangeOrSelection(e,"invalid range (no selection)"),...t};return this.AddConditionalFormat(r),r}AddConditionalFormat(e){return this.grid.AddConditionalFormat(e),e}RemoveConditionalFormat(e){this.grid.RemoveConditionalFormat({format:e})}RemoveConditionalFormats(e){let t=this.RangeOrSelection(e);t&&this.grid.RemoveConditionalFormat({area:t})}HandleToolbarMessage(e){if(this.focus_target!==this){this.focus_target.HandleToolbarMessage(e);return}let t={};if(this.grid.AnnotationSelected()){switch(e.command){case"adjust-font-scale":{let i=Number(e.delta||0),n=this.grid.GetAnnotationStyle()?.font_size;(!n||n.unit!=="em")&&(n={unit:"em",value:1}),n&&(n.value+=i,t.font_size=n,this.grid.ApplyAnnotationStyle(t))}break;case"font-scale":{let i=Number(e.scale||1);i&&!isNaN(i)&&(t.font_size={unit:"em",value:i},this.grid.ApplyAnnotationStyle(t))}break;case"font-stack":e.font_stack&&(t.font_face="stack:"+e.font_stack),this.grid.ApplyAnnotationStyle(t);break}this.Focus();return}let r=i=>{let n=this.grid.GetSelection();if(n&&!n.empty){let o=n.area.spreadsheet_label;i==="Scatter.Plot"||i==="Scatter.Line"||i==="Box.Plot"?this.InsertAnnotation(`=${i}(Series(,,${o}),"${o}")`,void 0,void 0,","):this.InsertAnnotation(`=${i}(${o},,"${o}")`,void 0,void 0,",")}};if(/^border-/.test(e.command))if(e.command==="border-color")try{t.border_top_fill=t.border_bottom_fill=t.border_left_fill=t.border_right_fill=e.color||{}}catch(i){console.error(i)}else{let i=1,n=e.command.substring(7);e.command==="border-double-bottom"&&(n="bottom",i=2),this.grid.ApplyBorders2(void 0,n,e.color||{},i)}else switch(e.command){case"about":this.About();break;case"number-format":t.number_format=e.format||"General";break;case"font-stack":e.font_stack&&(t.font_face="stack:"+e.font_stack);break;case"adjust-font-scale":{let i=this.selection_state.style?.font_size,n=this.grid.GetSelection(),o=this.grid.active_sheet.RealArea(n.area),s=Number(e.delta||0);if((!i||i.unit!=="em")&&(i={unit:"em",value:1}),i&&s&&!isNaN(s)){i.value+=s,this.grid.ApplyStyle(void 0,{font_size:i},!0);let a=[];for(let c=o.start.row;c<=o.end.row;c++)a.push(c);this.selection_state?.merge||this.grid.SetRowHeight(a,void 0,!1)}}break;case"font-scale":{let i=this.grid.GetSelection(),n=this.grid.active_sheet.RealArea(i.area),o=Number(e.scale||1);if(o&&!isNaN(o)){this.grid.ApplyStyle(void 0,{font_size:{unit:"em",value:o}},!0);let s=[];for(let a=n.start.row;a<=n.end.row;a++)s.push(a);this.selection_state?.merge||this.grid.SetRowHeight(s,void 0,!1)}}break;case"update-comment":this.SetNote(void 0,e.comment||"");break;case"clear-comment":this.SetNote(void 0,"");break;case"text-color":case"fill-color":try{let i=e.color||{};e.command==="text-color"?t.text=i:e.command==="fill-color"&&(t.fill=i)}catch(i){console.error(i)}break;case"insert-table":this.InsertTable();break;case"remove-table":this.RemoveTable();break;case"insert-row":this.InsertRows();break;case"insert-column":this.InsertColumns();break;case"delete-row":this.DeleteRows();break;case"delete-column":this.DeleteColumns();break;case"insert-sheet":this.grid.InsertSheet();break;case"delete-sheet":this.grid.DeleteSheet();break;case"freeze-panes":{let i=this.grid.GetFreeze();i.rows||i.columns?this.Freeze(0,0):this.FreezeSelection()}break;case"insert-image":this.InsertImage();break;case"insert-donut-chart":r("Donut.Chart");break;case"insert-column-chart":r("Column.Chart");break;case"insert-bar-chart":r("Bar.Chart");break;case"insert-line-chart":r("Line.Chart");break;case"insert-scatter-plot":r("Scatter.Plot");break;case"insert-box-plot":r("Box.Plot");break;case"increase-precision":case"decrease-precision":if(this.selection_state?.style){let i=me.Get(this.selection_state.style.number_format||"General");if(i.date_format)break;let n=new ze(i.pattern);if(i.magic_decimal){let o=0,s=this.GetRange();Array.isArray(s)||(s=[[s]]);e:for(let a=0;a<s.length;a++)for(let c=0;c<s[a].length;c++){let d=s[a][c];if(typeof d<"u"&&Yt(d)){let u=me.Get(this.selection_state.style.number_format||"General",!0),h=u.BaseFormat(d.real),f=u.BaseFormat(d.imaginary);h.parts&&typeof h.parts[1]=="string"&&(o=h.parts[1].length),f.parts&&typeof f.parts[1]=="string"&&(o=Math.max(o,f.parts[1].length));break e}else if(typeof d=="number"){let u=i.BaseFormat(d);u.parts&&typeof u.parts[1]=="string"&&(o=u.parts[1].length);break e}}e.command==="increase-precision"?n.SetDecimal(o+1):n.SetDecimal(Math.max(0,o-1))}else e.command==="increase-precision"?n.IncreaseDecimal():n.DecreaseDecimal();t.number_format=n.toString()}break;case"merge-cells":this.grid.MergeCells();break;case"unmerge-cells":this.grid.UnmergeCells();break;case"lock-cells":t={locked:this.selection_state?.style?!this.selection_state.style.locked:!0};break;case"wrap-text":t={wrap:this.selection_state?.style?!this.selection_state?.style.wrap:!0};break;case"justify-left":t={horizontal_align:"left"};break;case"justify-center":t={horizontal_align:"center"};break;case"justify-right":t={horizontal_align:"right"};break;case"align-top":t={vertical_align:"top"};break;case"align-middle":t={vertical_align:"middle"};break;case"align-bottom":t={vertical_align:"bottom"};break;case"reset":this.Reset();break;case"import-file":this.LoadLocalFile();break;case"save-json":this.SaveToDesktop();break;case"save-csv":this.SaveToDesktop("csv");break;case"export-xlsx":this.Export();break;case"revert":this.Revert();break;case"recalculate":this.Recalculate();break;case"toggle-toolbar":case"show-toolbar":case"hide-toolbar":this.ShowToolbar(e.command==="toggle-toolbar"?void 0:e.command==="show-toolbar");break;case"toggle-sidebar":case"show-sidebar":case"hide-sidebar":this.ShowSidebar(e.command==="toggle-sidebar"?void 0:e.command==="show-sidebar");break;case"revert-indicator":this.dialog?.ShowDialog({title:`This is a modified version of the document.
|
|
16
16
|
You can revert to the original or save your
|
|
17
17
|
changes in the sidebar.`,close_box:!0,timeout:5e3,type:"info"});break;case"indent":case"outdent":this.grid.Indent(void 0,e.command==="indent"?1:-1);break;default:console.info("unhandled",e.command);break}Object.keys(t).length&&this.grid.ApplyStyle(void 0,t,!0),this.Focus()}ShowToolbar(e){if(this.options.toolbar&&this.options.container instanceof HTMLElement){let t=this.options.container.parentElement;t&&(e===void 0&&(e=!t.hasAttribute("toolbar")),e?t.setAttribute("toolbar",""):t.removeAttribute("toolbar"))}}ShowSidebar(e){if(this.options.toolbar&&this.options.container instanceof HTMLElement){let t=this.options.container.parentElement;t&&(e===void 0&&(e=t.hasAttribute("collapsed")),e?t.removeAttribute("collapsed"):t.setAttribute("collapsed",""))}}CreateChart(){return this.calculator.RegisterLibrary("treb-charts",Pn)&&this.UpdateAC(),this.options.chart_renderer?typeof this.options.chart_renderer=="function"?new it(this.options.chart_renderer()):new it(this.options.chart_renderer):new it}async LoadLanguage(e=""){(!e||e==="locale")&&(e=(Je.locale||"").split(/-/).map(o=>o.toLowerCase())[0]),e=e.toLowerCase();let t;if(e&&["es","fr","pt","nl","de","pl","sv","no","da","it"].includes(e))try{t=await import(`./languages/treb-i18n-${e}.mjs`)}catch(i){console.error(i)}t?this.model.SetLanguage(t.LanguageMap):this.model.SetLanguage(),this.grid.Reselect(),this.grid.Update(!0),this.UpdateAC()}Batch(e,t=!1){let r=this.last_selection,i=this.grid.Batch(e,t),n=!1,o=!1;for(let s of i)switch(s.type){case"composite":case"data":n=!0;break;case"structure":s.rebuild_required&&(o=!0);break;default:}o&&this.calculator.Reset(),(n||o)&&(this.Recalculate(),this.DocumentChange(r))}Freeze(e=0,t=0){this.grid.Freeze(e,t,!0)}FreezeSelection(){let e=this.grid.GetSelection();if(e.empty)this.grid.Freeze(0,0);else{let t=e.area;t.entire_sheet||(t.entire_row?this.grid.Freeze(t.end.row+1,0):t.entire_column?this.grid.Freeze(0,t.end.column+1):this.grid.Freeze(t.end.row+1,t.end.column+1))}}GetFreeze(){return this.grid.GetFreeze()}UpdateTheme(){this.grid.UpdateTheme(void 0),this.UpdateDocumentStyles();for(let e of this.model.sheets.list){for(let t of e.conditional_formats)t.internal=void 0;for(let t of e.annotations)if(t.view&&t.data.type==="textbox"){let r=t.view[this.grid.view_index]||{};r.update_callback&&r.update_callback()}}this.calculator.UpdateConditionals(),this.ApplyConditionalFormats(this.grid.active_sheet,!1),this.grid.Update(!0),this.Publish({type:"theme-change"})}GetSheetID(e){if(typeof e=="number"){let t=this.grid.model.sheets.list[e];if(t)return t.id}else{let t=this.model.sheets.Find(e);if(t)return t.id}}InsertTable(e,t={}){let r=e?this.model.ResolveArea(e,this.grid.active_sheet):this.GetSelectionReference().area,i=t.theme;typeof i=="number"&&(i=Rn(i)),this.grid.InsertTable(r,t.totals_row,t.sortable,i)}RemoveTable(e){let t=this.ResolveTable(e||this.GetSelectionReference().target);t&&this.grid.RemoveTable(t)}UpdateTableStyle(e,t=4){let r=this.ResolveTable(e||this.GetSelectionReference().target);r&&(typeof t=="number"&&(t=Rn(t)),r.theme=t,this.grid.active_sheet.FlushCellStyles(),this.grid.Update(!0),this.PushUndo())}SetTabColor(e,t){let r=typeof e>"u"?this.grid.active_sheet:this.model.sheets.Find(e);r&&this.grid.TabColor(r,t)}AddSheet(e){this.grid.AddSheet(e);let t=this.model.sheets.list[this.model.sheets.list.length-1];return this.calculator.Reset(),t.id}RemoveConnectedChart(e){let t=this.model.RemoveConnectedElement(e);if(t){let r=this.calculator.RemoveConnectedELement(t)}}UpdateConnectedChart(e,t){let r=this.model.connected_elements.get(e);if(r){r.formula=t;let i=r.internal;i?.state&&(i.state=void 0),this.calculator.UpdateConnectedElements(this.grid.active_sheet,r),r.update&&r.update.call(0,r)}}CreateConnectedFormula(e,t,r={}){let i=r?.r1c1||!1,n=r?.argument_separator||this.parser.argument_separator;this.parser.Save(),this.parser.flags.r1c1=i,n===","?this.parser.SetLocaleSettings("."):this.parser.SetLocaleSettings(",");let o=this.parser.Parse(e);if(this.parser.Restore(),o.expression)e="="+this.parser.Render(o.expression,{missing:""});else throw console.warn("invalid formula",o.error),new Error("invalid formula");let s=this.model.AddConnectedElement({formula:e,update:t?a=>{t.call(0,a)}:void 0});return this.calculator.UpdateConnectedElements(this.grid.active_sheet),this.UpdateConnectedElements(),s}CreateConnectedChart(e,t,r){let i=this.CreateChart();i.Initialize(t);let n=o=>{let s=this.parser.Parse(o.formula);if(s&&s.expression&&s.expression.type==="call"){this.parser.Walk(s.expression,d=>((d.type==="address"||d.type==="range")&&this.model.ResolveSheetID(d,void 0,this.grid.active_sheet),!0));let a=s.expression.name.toLowerCase(),c=this.calculator.CalculateExpression(s.expression);i.Exec(a,c)}i.Update()};return this.CreateConnectedFormula(e,n,r)}InsertAnnotation(e,t="treb-chart",r,i){let n,o,s=!1;if(typeof i=="object"?(o=i.argument_separator,s=!!i.r1c1):(i===","||i===";")&&(o=i),r&&(n=Xr.IsRectangle(r)?r:this.model.ResolveArea(r,this.grid.active_sheet)),o&&o!==this.parser.argument_separator||s){this.parser.Save(),o===","?this.parser.SetLocaleSettings("."):this.parser.SetLocaleSettings(","),this.parser.flags.r1c1=!!s;let h=this.parser.Parse(e);this.parser.Restore(),h.expression&&(e="="+this.parser.Render(h.expression,{missing:""}))}let{x:a,y:c}=this.grid.GetScrollOffset(),d=this.grid.scale||1,u={width:301,height:301};this.grid.CreateAnnotation({type:t,formula:e},void 0,void 0,void 0,n||{top:c/d+30,left:a/d+30,...u})}InsertImage(){this.SelectFile2(".png, .jpg, .jpeg, .gif, .svg",2)}RenameSheet(e,t){let r;typeof e=="number"?r=this.grid.model.sheets.list[e]:typeof e=="string"?r=this.model.sheets.Find(e):r=this.grid.active_sheet,r&&this.grid.RenameSheet(r,t)}DeleteSheet(e){if(typeof e=="string"){let t=this.model.sheets.Find(e);t&&this.grid.DeleteSheetID(t.id)}else this.grid.DeleteSheet(e);this.calculator.Reset()}HideSheet(e=0,t=!0){this.grid.ShowSheet(e,!t)}ListSheets(){return this.model.sheets.list.map(e=>{let t={name:e.name};return e.visible||(t.hidden=!0),t})}ShowSheet(e=0,t=!0){this.grid.ShowSheet(e,t)}ActivateSheet(e){this.grid.ActivateSheet(e)}SetColumnWidth(e,t){this.grid.SetColumnWidth(e,t)}SetRowHeight(e,t){this.grid.SetRowHeight(e,t)}InsertRows(e,t=1){if(typeof e>"u"){let r=this.grid.GetSelection();if(r.empty)return;let i=r.area;e=i.entire_column?0:i.start.row}this.grid.InsertRows(e,t)}InsertColumns(e,t=1){if(typeof e>"u"){let r=this.grid.GetSelection();if(r.empty)return;let i=r.area;e=i.entire_row?0:i.start.column}this.grid.InsertColumns(e,t)}DeleteRows(e,t=1){if(typeof e>"u"){let r=this.grid.GetSelection();if(r.empty)return;let i=r.area;e=i.entire_column?0:i.start.row,t=i.rows}this.grid.InsertRows(e,-t)}DeleteColumns(e,t=1){if(typeof e>"u"){let r=this.grid.GetSelection();if(r.empty)return;let i=r.area;e=i.entire_row?0:i.start.column,t=i.columns}this.grid.InsertColumns(e,-t)}FilterTable(e,t=0,r){let i=this.ResolveTable(e);if(!i)throw new Error("invalid table reference");r?this.grid.FilterTable(i,t,n=>r.call(0,n.value,n.calculated||void 0,JSON.parse(JSON.stringify(n.style||{})))):this.grid.FilterTable(i,0,()=>!0)}SortTable(e,t={}){let r=this.ResolveTable(e);if(!r)throw new Error("invalid table reference");this.grid.SortTable(r,t)}MergeCells(e){this.grid.MergeCells(e?this.model.ResolveArea(e,this.grid.active_sheet):void 0)}UnmergeCells(e){this.grid.UnmergeCells(e?this.model.ResolveArea(e,this.grid.active_sheet):void 0)}async ExportBlob(e){return this.export_worker||(this.export_worker=await this.LoadWorker()),new Promise((t,r)=>{this.export_worker?(this.export_worker.onmessage=i=>{t(i.data?i.data.blob:void 0)},this.export_worker.onerror=i=>{console.error("export worker error"),console.info(i),r(i)},e||(e=this.Serialize({rendered_values:!0,expand_arrays:!0,export_colors:!0,decorated_cells:!0,tables:!0,share_resources:!1,export_functions:!0,apply_row_pattern:!0})),e.decimal_mark=Je.decimal_separator,this.export_worker.postMessage({command:"export",sheet:e,decorated:this.calculator.DecoratedFunctionList()})):r("worker failed")})}Revert(){if(this.options.inline_document){this.LoadDocument(this.options.inline_document),this.initial_load_source="inline-document",this.options.local_storage&&(this.SaveLocalStorage("reverted_backup"),localStorage.removeItem(this.options.local_storage));return}let e=this.options.document;if(e){this.LoadNetworkDocument(e),this.initial_load_source="network-file",this.options.local_storage&&(this.SaveLocalStorage("reverted_backup"),localStorage.removeItem(this.options.local_storage));return}console.warn("to revert, there must be a document set in options"),this.dialog?.ShowDialog({title:"Can't revert -- no document is set in options",close_box:!0,timeout:3e3,type:"error"})}Export(){this.ExportBlob().then(e=>{let t="export";this.grid.model.document_name&&(t=this.grid.model.document_name.toLowerCase().replace(/\s+/g,"-")),e&&(this.SaveAs(e,t+".xlsx"),this.last_save_version=this.file_version)}).catch(e=>{throw/invalid uri/i.test(e.message)&&this.dialog?.ShowDialog({title:"Error exporting file",close_box:!0,message:"The worker cannot run from the filesystem, please use a web server.",timeout:3e3,type:"error"}),e})}GetSelectionReference(){return this.grid.GetSelection()}Focus(){this.grid.Focus()}Resize(){this.grid.UpdateLayout();for(let e of this.views)e.view.grid.UpdateLayout();this.Publish({type:"resize"})}Reset(){if(this.parent_view)return this.parent_view.Reset();this.grid.Reset(),this.ResetInternal(),this.UpdateAC(),this.Publish({type:"reset"})}LoadFromLocalStorage(e){this.options.local_storage=e;let t=localStorage.getItem(e);if(t)try{let r=JSON.parse(t);return this.LoadDocument(r,{source:"local-storage"}),!0}catch(r){console.error(r)}return!1}async LoadNetworkDocument(e,t){let r=t?t.scroll:void 0,i=t?!!t.recalculate:!1,n=t?t.sheet:void 0,o=/csv(?:$|\?|&)/i.test(e),s=/tsv(?:$|\?|&)/i.test(e);try{this.spinner?.Show();let a=await fetch(e);if(this.spinner?.Hide(),!a.ok)throw new Error("network error");let c=await a.text();if(typeof c=="string")if(o)this.LoadCSV(c,"network-file");else{if(s)throw new Error("tsv not supported (TODO)");{c.substr(0,11)==="&&&START&&&"?c=c.substr(11):c.substr(0,8)==="for(;;);"&&(c=c.substr(8));let d=JSON.parse(c);this.LoadDocument(d,{scroll:r,recalculate:i,override_sheet:n,source:"network-file"})}}}catch(a){console.info("error loading network document",e),console.error(a),this.dialog?.ShowDialog({title:"Error loading file",close_box:!0,message:"The network document returned an error",type:"error",timeout:3e3}),this.Reset()}}async LoadLocalFile(){this.SelectFile2(".treb, .csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/json",1)}ExportDelimited(e={}){if(e={delimiter:",",...e},!e.delimiter||e.delimiter!==","&&e.delimiter!==" ")throw new Error("invalid delimiter");let t=this.grid.active_sheet;switch(typeof e.sheet){case"undefined":break;case"string":t=this.model.sheets.Find(e.sheet);break;case"number":t=this.grid.model.sheets.list[e.sheet];break;default:t=void 0;break}if(!t)throw new Error("invalid sheet identifier");let r=t.cells.toJSON({nested:!1,expand_arrays:!0,calculated_value:!0}),i=[];for(let s=0;s<r.columns;s++)i.push("");let n=[];for(let s=0;s<r.rows;s++)n.push(i.slice(0));let o=new RegExp(`[
|
|
18
18
|
\r"${e.delimiter}]`);if(ws(r.data))for(let s of r.data){let a="";!e.formulas&&typeof s.calculated<"u"?a=Yt(s.calculated)?xn(s.calculated):s.calculated.toString():typeof s.value=="string"&&s.value[0]==="'"?a=s.value.substr(1):typeof s.value<"u"&&(a=Yt(s.value)?xn(s.value):s.value.toString()),o.test(a)&&(a=a.replace(/"/g,'""'),a='"'+a+'"'),n[s.row][s.column]=a}return n.map(s=>s.join(e.delimiter)).join(`\r
|
|
19
|
-
`)}SaveLocalFile(e="treb.json",t={}){this.SaveToDesktop(e,t)}SaveToDesktop(e="treb.json",t={}){let r=this.grid.model.document_name||"document",i,n,o=e.split(/\./).filter(a=>a.trim().length),s=o.length?o[o.length-1].toLowerCase():"treb";if(o.length<=1||e==="treb.json")if(e==="treb.json"&&(s=e),(s==="csv"||s==="tsv")&&this.grid.model.sheets.length>1){let a=this.grid.active_sheet.name;e=(r+"-"+a).toLowerCase().replace(/\W+/g,"-")+"."+s}else e=r.toLowerCase().replace(/\W+/g,"-")+"."+s;switch(s){case"csv":n=this.ExportDelimited({delimiter:","});break;case"tsv":n=this.ExportDelimited({delimiter:" "});break;case"treb":case"json":case"treb.json":i=this.SerializeDocument({...t}),n=JSON.stringify(i,void 0,t.pretty?2:void 0),this.last_save_version=this.file_version;break;default:throw new Error("invalid file type")}if(n&&e){let a=new Blob([n],{type:"text/plain;charset=utf-8"});this.SaveAs(a,e)}}LoadCSV(e,t){if(this.parent_view)return this.parent_view.LoadCSV(e,t);this.grid.FromCSV(e),this.ResetInternal(),this.grid.Update(!0),this.Publish({type:"load",source:t}),this.UpdateDocumentStyles()}ScrollOffset(e){return this.grid.ScrollOffset(e)}LoadDocument(e,t={}){if(this.parent_view)return this.parent_view.LoadDocument(e,t);if(this.initial_load_source||(this.initial_load_source=t.source),t={flush:!0,recalculate:!1,...t},t.override_selection&&e.sheet_data){let r=Array.isArray(e.sheet_data)?e.sheet_data:[e.sheet_data];for(let i of r)if(i.id===t.override_selection.target.sheet_id){i.selection=t.override_selection;break}}if(this.ImportDocumentData(e,t.override_sheet),this.calculator.Reset(),e.rendered_values&&!t.recalculate?(this.calculator.RebuildClean(!0),this.ApplyConditionalFormats(this.grid.active_sheet,!1),this.grid.Update()):this.Recalculate(),this.InflateAnnotations(),t.flush&&this.FlushUndo(),this.Publish({type:"load",source:t.source}),this.UpdateDocumentStyles(),this.loaded=!0,t.scroll){let r=t.scroll;Promise.resolve().then(()=>this.ScrollTo(r))}}SetNote(e,t){if(typeof e=="string"){let r=this.model.ResolveAddress(e,this.grid.active_sheet);e=Ae(r)?r:r.start}this.grid.SetNote(e,t)}SetValidation(e,t,r){if(typeof e=="string"){let i=this.model.ResolveAddress(e,this.grid.active_sheet);e=wn(i)?new Ee(i.start,i.end):new Ee(i)}if(Ae(e)&&(e=new Ee(e)),typeof t>"u"||Array.isArray(t))this.grid.SetValidation(e,t,r);else{let i=this.model.ResolveArea(t,this.grid.active_sheet);this.grid.SetValidation(e,i,r)}}RemoveFunction(e){let t=e.toUpperCase();this.model.macro_functions.delete(t),this.UpdateAC()}DefineFunction(e,t="",r="0"){if(!e.length||/^[^A-Za-z]/.test(e)||/[^\w_.]/.test(e))throw new Error("invalid function name");typeof t=="string"&&(t=t?t.split(this.parser.argument_separator).map(i=>i.trim()):[]);for(let i of t)if(!i.length||/^[^A-Za-z]/.test(i)||/[^\w_.]/.test(i))throw new Error("invalid argument name");this.RemoveFunction(e),this.grid.model.macro_functions.set(e.toUpperCase(),{name:e,function_def:r,argument_names:t,expression:this.parser.Parse(r).expression}),this.UpdateAC()}SerializeDocument(e={}){e={share_resources:!0,shrink:!0,...e};let t=this.Serialize(e),r={app:"@trebco/treb",version:"32.13.2",revision:this.file_version,name:this.grid.model.document_name,user_data:this.grid.model.user_data,decimal_mark:Je.decimal_separator,...t};if(e.share_resources){let i=1,n=new Map,o=Array.isArray(r.sheet_data)?r.sheet_data:[r.sheet_data],s=c=>{let d=n.get(c);return d||(d=(i++).toString(),n.set(c,d)),`resource:${d}`};for(let c of o)if(c){c.background_image&&(c.background_image=s(c.background_image));for(let d of c.annotations||[])d.type==="image"&&d.data?.src&&(d.data.src=s(d.data.src))}let a={};for(let[c,d]of n.entries())a[d]=c;r.shared_resources=a}return e.rendered_values&&(r.rendered_values=!0),r}Recalculate(e){let t;switch(e?.type){case"data":t=e.area;break;case"composite":t=e.data_area;break}this.calculator.Calculate(t),this.calculator.grid_expanded&&this.grid.UpdateLayout(),this.ApplyConditionalFormats(this.grid.active_sheet,!1),this.grid.Update(!0),this.UpdateAnnotations(),this.Publish({type:"data"}),this.grid.UpdateStats()}SaveLocalStorage(e=this.options.local_storage){if(!e){console.warn("not saving, no key");return}let t=JSON.stringify(this.SerializeDocument({rendered_values:!0,expand_arrays:!0}));localStorage.setItem(e,t)}Undo(){if(this.parent_view)return this.parent_view.Undo();if(this.undo_pointer<=1){console.warn("nothing to undo");return}let e=this.undo_stack[--this.undo_pointer-1],t=e.selection?JSON.parse(e.selection):void 0;this.LoadDocument(JSON.parse(e.data),{flush:!1,override_selection:t,source:"undo"})}About(){this.dialog?.ShowDialog({type:"about"})}ScrollIntoView(e,t=!1){if(typeof e=="string"){let r=this.model.ResolveAddress(e,this.grid.active_sheet);e=Ae(r)?r:r.start}this.grid.ScrollIntoView(e,t)}ScrollTo(e,t={}){if(typeof e=="string"){let r=this.model.ResolveAddress(e,this.grid.active_sheet);e=Ae(r)?r:r.start}t={x:!0,y:!0,smooth:!1,...t},this.grid.ScrollTo(e,t.x,t.y,t.smooth)}Resolve(e,t){let r=this.model.ResolveAddress(e,this.grid.active_sheet,t);return Ae(r)?r.sheet_id?r:void 0:r.start.sheet_id?r:void 0}Unresolve(e,t=!0,r=!0){if(typeof e=="string"){let i=this.Resolve(e);if(!i)throw new Error("invalid reference");e=i}return this.calculator.Unresolve(e,this.grid.active_sheet,t,r)}Evaluate(e,t={}){return this.calculator.Evaluate(e,this.grid.active_sheet,t)}GetSelection(e=!0){let t=this.grid.GetSelection();if(t.empty)return"";let r="";if(t.area.count>1?r=Ee.CellAddressToLabel(t.area.start)+":"+Ee.CellAddressToLabel(t.area.end):r=Ee.CellAddressToLabel(t.area.start),!e)return r;let i=t.area.start.sheet_id||this.grid.active_sheet.id,n=this.calculator.ResolveSheetName(i,!0);return n?n+"!"+r:r}ParseNumber(e){return Ds.TryParse(e).value}FormatNumber(e,t="General"){return Yt(e)?ze.FormatPartsAsText(me.Get(t).FormatComplex(e)):me.Get(t).Format(e)}SpreadsheetDate(e){return e instanceof Date&&(e=e.getTime()),oi(e,!0)}JavascriptDate(e){return Un(e).getTime()}ApplyBorders(e,t,r=1){this.grid.ApplyBorders2(e?this.model.ResolveArea(e,this.grid.active_sheet):void 0,t,{},r)}ApplyStyle(e,t={},r=!0){this.grid.ApplyStyle(e?this.model.ResolveArea(e,this.grid.active_sheet):void 0,t,r)}ClearName(e){this.grid.SetName(e)}ListNames(){return this.model.SerializeNames()}DefineName(e,t,r,i=!1){if(typeof t>"u"||t===null)throw new Error("invalid value (null or undefined)");if(typeof r=="string"){let n=this.model.sheets.ID(r);if(typeof n=="number")r=n;else throw new Error("invalid scope; use a sheet name or sheet id")}if(typeof t=="object"&&(Ae(t)||wn(t))){this.grid.SetName(e,this.model.ResolveArea(t,this.grid.active_sheet),void 0,r,i);return}if(typeof t=="string"){let n=this.parser.Parse(t);if(!n.expression)throw new Error("invalid expression");switch(n.expression.type){case"address":case"range":this.grid.SetName(e,this.model.ResolveArea(n.expression,this.grid.active_sheet),void 0,r,i);return}this.grid.SetName(e,void 0,t,r,i)}else this.grid.SetName(e,void 0,t.toString(),r,i)}SetLink(e,t=""){if(typeof e=="string"){let r=this.model.ResolveAddress(e,this.grid.active_sheet);e=Ae(r)?r:r.start}if(!e){let r=this.GetSelectionReference();if(r.empty)return;e=r.target}this.grid.SetLink(e,t)}Select(e){let t;e&&(t=this.model.ResolveArea(e,this.grid.active_sheet),t.start.sheet_id&&t.start.sheet_id!==this.grid.active_sheet.id&&this.grid.ActivateSheetID(t.start.sheet_id)),this.grid.SelectRange(t)}Paste(e,...t){let r=l.clipboard,i={};switch(t.length){case 1:Array.isArray(t[0])?r=t[0]:typeof t[0]=="object"&&(i=t[0]);break;case 2:t[0]&&Array.isArray(t[0])&&(r=t[0]),t[1]&&typeof t[1]=="object"&&(i=t[1]);break}if(!r)throw new Error("no clipboad data");this.grid.PasteArea(this.RangeOrSelection(e,"no range and no selection"),r,i)}Copy(e){let t=this.RangeOrSelection(e),r=t?this.grid.CopyArea(t,"copy"):[];return l.clipboard=structuredClone(r),r}Cut(e){let t=this.RangeOrSelection(e),r=t?this.grid.CopyArea(t,"cut"):[];return l.clipboard=structuredClone(r),r}GetRange(e,t={}){let r=this.RangeOrSelection(e);if(!r)return;let i=t.type;return i||(t.formatted&&(i="formatted"),t.formula&&(i="A1")),i==="formula"&&(i="A1"),this.grid.GetRange(r,i)}GetStyle(e,t=!1){let r=this.RangeOrSelection(e);if(r)return this.grid.GetRangeStyle(r,t)}SetRange(e,t=void 0,r={}){let i=this.RangeOrSelection(e);if(i){if(r.spill&&Array.isArray(t)){let n=t.length,o=Math.max(0,...t.map(a=>a.length)),s={row:i.start.row+n+1,column:i.start.column+o+1};i.ConsumeAddress(s)}return this.grid.SetRange(i,t,r)}}Subscribe(e){return this.events.Subscribe(e)}Cancel(e){this.events.Cancel(e)}RangeOrSelection(e,t){if(!e){let r=this.GetSelectionReference();if(r.empty){if(t)throw t;return}else return r.area.Clone()}return this.model.ResolveArea(e,this.grid.active_sheet)}Serialize(e={}){let t=this.grid.active_sheet;t.selection=JSON.parse(JSON.stringify(this.grid.GetSelection()));let r=this.grid.ScrollOffset();r&&(t.scroll_offset=r);let i=this.model.sheets.list.map(a=>a.toJSON(e)),n;this.model.tables.size>0&&(n=Array.from(this.model.tables.values()));let o;if(this.model.macro_functions.size){o=[];for(let a of this.model.macro_functions.values())o.push({...a,expression:void 0})}let s=this.model.SerializeNames(t);return{sheet_data:i,active_sheet:t.id,named:s.length?s:void 0,macro_functions:o,tables:n}}ApplyConditionalFormats(e,t){let r=[];if(e.conditional_formats.length||e.flush_conditional_formats){for(let i of e.conditional_formats)switch(r.push(i.area),i.type){case"gradient":i.internal||(i.internal={}),i.internal.gradient||(i.internal.gradient=new Zr(i.stops,this.grid.theme,i.color_space));break;case"data-bar":i.internal||(i.internal={});break}e.ApplyConditionalFormats()}t&&this.grid.Update(!0,r)}ResolveTable(e){let t;if(typeof e=="string"){let r=e.toLowerCase();this.model.tables.has(r)&&(t=this.model.tables.get(r))}if(!t){let r=this.model.ResolveAddress(e,this.grid.active_sheet);Ae(r)||(r=r.start),t=this.grid.GetTableReference(r)}return t}SaveAs(e,t){let r=this.DOM.Create("a");r.href=URL.createObjectURL(e),r.download=t,r.click(),URL.revokeObjectURL(r.href)}Publish(e){this.events.Publish(e)}async ImportXLSX(e,t){return this.parent_view?this.parent_view.ImportXLSX(e,t):(this.export_worker||(this.export_worker=await this.LoadWorker()),new Promise((r,i)=>{this.export_worker?(this.dialog?.ShowDialog({message:"Importing XLSX..."}),this.export_worker.onmessage=n=>{if(n.data){if(n.data.status==="error")return i(n.data.error||"unknown error");if(this.parser.decimal_mark!=="."){let o=this.parser.decimal_mark,s=this.parser.argument_separator;this.parser.Save(),this.parser.SetLocaleSettings(".");let a=c=>{let d=this.parser.Parse(c);if(d.expression)return"="+this.parser.Render(d.expression,{missing:"",convert_decimal:o,convert_argument_separator:s})};for(let c of n.data.results)c.expression=a(c.expression);for(let c of n.data.results.sheets||[]){for(let d of c.cells||[])d.type==="formula"&&d.value&&(d.value=a(d.value));if(c.annotations)for(let d of c.annotations)d.formula&&(d.formula=a(d.formula))}this.parser.Restore()}this.grid.FromImportData(n.data.results),this.ResetInternal(),this.grid.Update(),this.UpdateAC(),this.Publish({type:"load",source:t}),this.UpdateDocumentStyles(),this.InflateAnnotations(),this.calculator.UpdateConditionals(),this.ApplyConditionalFormats(this.grid.active_sheet,!1)}else return i("unknown error (missing data)");this.dialog?.HideDialog(),r()},this.export_worker.onerror=n=>{console.error("import worker error"),console.info(n),i(n)},this.export_worker.postMessage({command:"import",data:e})):i("worker failed")}))}ResetInternal(){this.calculator.Reset(),this.FlushUndo(),this.file_version=this.last_save_version=0}HandleCellEvent(e){if(e.data?.type==="hyperlink"){let t="hyperlink invalid target",r=e.data.reference||"";if(typeof r=="string"){if(/^https{0,1}:\/\//i.test(r)){if(!this.options.hyperlinks){console.warn("hyperlinks are disabled");return}let i=this.DOM.Create("a");i.setAttribute("target",this.options.hyperlinks),i.setAttribute("href",r),i.setAttribute("noreferrer","true"),i.setAttribute("nofollow","true"),i.click();return}else{let i=this.parser.Parse(r);if(i.expression){if(i.expression.type==="address"){(i.expression.sheet||i.expression.sheet_id)&&this.ActivateSheet(i.expression.sheet||i.expression.sheet_id),this.Select(r);return}else if(i.expression.type==="range"){(i.expression.start.sheet||i.expression.start.sheet_id)&&this.ActivateSheet(i.expression.start.sheet||i.expression.start.sheet_id),this.Select(r);return}}}console.warn(t,2);return}}}OnSheetChange(e){for(let t of e.activate.annotations)this.InflateAnnotation(t),this.calculator.UpdateAnnotations(t,e.activate);this.UpdateAnnotations(),this.calculator.UpdateConditionals(),this.ApplyConditionalFormats(e.activate,!0)}HandleDrag(e){if(e.dataTransfer&&e.dataTransfer.types){if(e.dataTransfer.types.some&&e.dataTransfer.types.some(t=>t==="Files"))e.preventDefault();else for(let t=0;t<e.dataTransfer.types.length;t++)if(e.dataTransfer.types[t]==="files"){e.preventDefault();return}}}HandleDrop(e){if(e.dataTransfer&&e.dataTransfer.files&&e.dataTransfer.files.length){e.preventDefault();let t=e.dataTransfer.files[0];/^image/.test(t.type)?this.InsertImageInternal(t):this.LoadFileInternal(t,"drag-and-drop").catch(()=>{})}}SelectFile2(e,t){if(!this.file_chooser){let r=this.DOM.Create("input",void 0,void 0,{attrs:{type:"file"},events:{change:()=>{if(r.files&&r.files[0]){let i=r.files[0];switch(r.value="",this.file_chooser_operation){case 2:this.InsertImageInternal(i);break;case 1:this.LoadFileInternal(i,"local-file",!0);break;default:console.warn("file chooser: no operation");break}}}}});this.file_chooser=r}if(!this.file_chooser)throw new Error("could not create file chooser");this.file_chooser_operation=t,this.file_chooser.accept=e||"",this.file_chooser.click()}async InsertImageInternal(e){if(this.options.max_file_size&&e.size>this.options.max_file_size){this.dialog?.ShowDialog({type:"error",message:"This file exceeds the allowed image size. Please try a smaller image.",title:"Error adding image",timeout:3e3,close_box:!0});return}let t=e;await new Promise((r,i)=>{let n=new FileReader;n.onload=async()=>{try{if(n.result){let o;if(typeof n.result=="string")o=n.result;else{o="";let a=new Uint8Array(n.result);for(let c=0;c<a.byteLength;c++)o+=String.fromCharCode(a[c])}let s=this.DOM.Create("img");s.src=o,await Promise.resolve(),this.grid.CreateAnnotation({type:"image",formula:"",data:{scale:"",src:o,original_size:{width:s.width||300,height:s.height||300}}},void 0,void 0,void 0,{top:30,left:30,width:s.width||300,height:s.height||300})}r()}catch(o){i(o)}},n.onabort=()=>{i("Aborted")},n.onerror=()=>{i("File error")},setTimeout(()=>{n.readAsDataURL(t)},100)})}LoadFileInternal(e,t,r=!0){if(!e)return Promise.resolve();let i=new FileReader;return new Promise((n,o)=>{let s=a=>{i.onload=null,i.onabort=null,i.onerror=null,a?(r&&(this.dialog?.ShowDialog({title:"Error reading file",close_box:!0,message:"Please make sure your file is a valid XLSX, CSV or TREB file.",type:"error",timeout:3e3}),console.error(a)),o(a)):n()};i.onload=()=>{try{if(i.result)if(/\.csv$/i.test(e.name))this.LoadCSV(i.result,t);else if(/\.xls[xm]$/i.test(e.name)){typeof i.result=="string"?s("Unsupported file"):this.ImportXLSX(i.result,t).then(()=>s()).catch(a=>s(a));return}else{let a=JSON.parse(i.result);this.LoadDocument(a,{source:t})}s()}catch(a){s(a?.toString())}},i.onabort=()=>{s("Aborted")},i.onerror=()=>{s("File error")},setTimeout(()=>{/\.xls[xm]$/i.test(e.name)?i.readAsArrayBuffer(e):i.readAsText(e)},100)})}UpdateAnnotations(){for(let e of this.grid.active_sheet.annotations){let t=e.temp;if(t.vertex&&t.vertex.state_id!==t.state){t.state=t.vertex.state_id;for(let i of e.view)i&&(i.dirty=!0)}let r=e.view[this.grid.view_index]||{};r.dirty&&(r.dirty=!1,r.update_callback&&r.update_callback(),this.grid.AnnotationUpdated(e))}this.UpdateConnectedElements()}UpdateConnectedElements(){for(let e of this.model.connected_elements.values()){let t=e.internal;if(t?.vertex&&t.vertex.state_id!==t.state){t.state=t.vertex.state_id;let r=e.update;r&&Promise.resolve().then(()=>r.call(0,e))}}}RebuildAllAnnotations(){for(let e of this.grid.active_sheet.annotations){this.InflateAnnotation(e);let t=e.view[this.grid.view_index]||{};t.resize_callback&&t.resize_callback(),t.update_callback&&t.update_callback()}}InflateAnnotations(){for(let e of this.grid.active_sheet.annotations)this.InflateAnnotation(e)}InflateAnnotation(e){if(this.grid.headless)return;let t=e.view[this.grid.view_index]||{};if(t.inflated){e.dirty&&(t.resize_callback&&t.resize_callback(),e.dirty=!1);return}if(t.inflated=!0,e.dirty&&(e.dirty=!1),t.content_node){if(e.data.type==="treb-chart"){let r=this.CreateChart();r.Initialize(t.content_node);let i=()=>{if(e.data.formula){let n=this.parser.Parse(e.data.formula);if(n&&n.expression&&n.expression.type==="call"){this.parser.Walk(n.expression,a=>((a.type==="address"||a.type==="range")&&this.model.ResolveSheetID(a,void 0,this.grid.active_sheet),!0));let o=n.expression.name.toLowerCase(),s=this.calculator.CalculateExpression(n.expression);r.Exec(o,s)}}r.Update()};t.resize_callback=()=>{this.grid.headless||(r.Resize(),r.Update())},t.update_callback=()=>{this.grid.headless||i()},t.node?.parentElement&&(this.grid.headless||i())}else if(e.data.type==="image"){if(typeof e.data.data?.src=="string"){let r=xs(e.data.data.src);if(r){let i=this.DOM.Create("img");i.src=r,e.data.data.scale==="fixed"?(i.style.position="relative",i.style.left="50%",i.style.top="50%",i.style.transform="translate(-50%, -50%)"):(i.style.width="100%",i.style.height="100%"),t.content_node.appendChild(i)}}}else if(e.data.type==="textbox"&&e.data.data){let r,i=document.createElement("div");i.classList.add("treb-annotation-textbox");for(let n of e.data.data.paragraphs){let o=document.createElement("p");n.style&&(n.style.horizontal_align==="right"||n.style.horizontal_align==="center")&&(o.style.textAlign=n.style.horizontal_align);for(let s of n.content){let a=document.createElement("span");if(r||(r=a),e.data.formula||(a.textContent=s.text||""),s.style?.bold&&(a.style.fontWeight="600"),s.style?.italic&&(a.style.fontStyle="italic"),o.appendChild(a),e.data.formula)break}if(i.append(o),e.data.formula)break}if(t.content_node.append(i),e.data.data.style){let n=e.data.data.style,o=()=>{if(n.fill){let s=gt(this.grid.theme,n.fill);i.style.background=s}};t.update_callback=()=>{if(this.grid.headless||o(),r&&e.data.formula){let s=this.parser.Parse(e.data.formula);if(s&&s.expression){this.parser.Walk(s.expression,u=>((u.type==="address"||u.type==="range")&&this.model.ResolveSheetID(u,void 0,this.grid.active_sheet),!0));let a=this.calculator.CalculateExpression(s.expression),c=me.Get("General"),d;switch(s.expression.type){case"address":d=s.expression;break;case"range":d=s.expression.start;break}if(d){let h=(d.sheet_id?this.model.sheets.Find(d.sheet_id):this.grid.active_sheet)?.CellStyleData(d);h?.number_format&&(c=me.Get(h.number_format))}switch(a.type){case 3:case 2:case 8:r.textContent=c.Format(a.value);break;default:r.textContent=a.value?.toString()||""}}}},t.update_callback()}}}}DocumentChange(e){Promise.resolve().then(()=>{this.file_version++,this.file_version>=65536&&(this.file_version=1);let t=JSON.stringify(this.SerializeDocument({optimize:"size",rendered_values:!0,expand_arrays:!0}));this.options.undo&&this.PushUndo(t,e,!1),this.Publish({type:"document-change"})})}ResolveStorageKey(e,t=""){if(e){if(e===!0){let r=0,i=document.location.href;for(let o=0,s=i.length;o<s;o++)r=(r<<5)-r+i.charCodeAt(o),r|=0;let n=Math.abs(r).toString(16);return t?t+"-"+n:n}return e}}PushUndo(e,t,r=!0){let i=t||this.last_selection;this.undo_stack[this.undo_pointer-1]&&(this.undo_stack[this.undo_pointer-1].selection=i),r&&(this.file_version++,this.file_version>=65536&&(this.file_version=1)),e||(e=JSON.stringify(this.SerializeDocument({optimize:"size",rendered_values:!0,expand_arrays:!0}))),this.undo_stack[this.undo_pointer++]={data:e,selection:void 0};let n=this.undo_stack.length;if(n>16){let o=n-16;this.undo_stack=this.undo_stack.slice(o),this.undo_pointer-=o}}FlushUndo(e=!0){this.undo_stack=[],this.undo_pointer=0,this.last_save_version=this.file_version,e&&this.PushUndo(void 0,void 0,!1)}UpdateSelection(e){this.last_selection=JSON.stringify(e),this.Publish({type:"selection"})}UpdateSelectionStyleAnnotation(e){let t={style:JSON.parse(JSON.stringify(e.data.style||{}))};t.style&&(t.style.font_face||(t.style.font_face="stack:ui"),t.style.font_size||(t.style.font_size={unit:"em",value:1})),t.relative_font_size=_t.RelativeFontSize(t.style||{},this.grid.theme.grid_cell||{}),this.selection_state=t}UpdateSelectionStyle(e){let t=this.grid.GetFreeze(),r={frozen:!!t.rows||!!t.columns};if(e||(e=this.grid.GetSelection()),e&&!e.empty){r.selection=e;let i=this.grid.active_sheet.CellData(e.target);r.table=!!i.table,r.merge=!!i.merge_area,r.merge&&i.merge_area&&(i.merge_area.start.row!==e.target.row||i.merge_area.start.column!==e.target.column)&&(i=this.grid.active_sheet.CellData(i.merge_area.start)),r.comment=i.note,r.style=i.style?{...i.style}:void 0,r.relative_font_size=_t.RelativeFontSize(r.style||{},this.grid.theme.grid_cell||{}),r.empty=typeof i.value>"u"&&!i.style?.font_face}this.grid?.edit_state&&(this.grid.edit_state.font_face=r.style?.font_face||void 0),this.selection_state=r}UpdateDocumentStyles(){let e={},t={};for(let i of this.grid.model.sheets.list)i.NumberFormatsAndColors(t,e);this.document_styles.colors=Object.keys(t),this.document_styles.number_formats=Object.keys(e),this.document_styles.theme_colors=[];let r=[.5,.25,0,-.25,-.5];for(let i=0;i<10;i++)this.document_styles.theme_colors.push(r.map(n=>{let o={theme:i,tint:n},s=gt(this.grid.theme,o);return{color:o,resolved:s}}))}ConvertLocale(e){let t=new Tr;t.flags={...this.parser.flags};let r,i;e.decimal_mark==="."?(t.SetLocaleSettings("."),r=",",i=";"):(t.SetLocaleSettings(","),r=".",i=",");let n=o=>{let s=t.Parse(o);if(s.expression)return"="+t.Render(s.expression,{missing:"",convert_decimal:r,convert_argument_separator:i})};if(e.macro_functions)for(let o of e.macro_functions){let s=n(o.function_def);s&&(o.function_def=s)}if(e.named)for(let o of e.named){let s=n(o.expression);s&&(o.expression=s)}if(e.sheet_data){let o=Array.isArray(e.sheet_data)?e.sheet_data:[e.sheet_data];for(let s of o){if(s.annotations){for(let a of s.annotations)if(a.formula){let c=n(a.formula);c&&(a.formula=c)}}if(s.data?.length)for(let a of s.data){let c=Sn(a)?[a]:a.cells;for(let d of c)if(d.value&&typeof d.value=="string"&&d.value[0]==="="){let u=n(d.value.slice(1));u&&(d.value=u)}}}}}CompareVersions(e="",t=""){let r=e.split(".").map(s=>Number(s)||0).concat([0,0,0]),i=t.split(".").map(s=>Number(s)||0).concat([0,0,0]),n=[0,1,2],o={match:0};for(let s=0;s<3;s++)if(r[s]!==i[s]){o.match=r[s]>i[s]?1:-1,o.level=n[s];break}return o}ImportDocumentData(e,t){this.file_version=e.revision||0;let r=[],i=this.CompareVersions(e.version,"32.13.2");if(i.match>0&&(i.level===0||i.level===1)&&console.warn(`The file you are opening was created with a newer version of TREB (${e.version} vs 32.13.2).
|
|
20
|
-
You may encounter compatibility errors.`),e.sheet_data&&(Array.isArray(e.sheet_data)?r=e.sheet_data:r.push(e.sheet_data)),e.shared_resources){let o=e.shared_resources,s=a=>/^resource:/.test(a)?o[a.substring(9)]||"":a;for(let a of r){a.background_image&&(a.background_image=s(a.background_image));for(let c of a.annotations||[])c.type==="image"&&c.data?.src&&(c.data.src=s(c.data.src))}}e.decimal_mark&&e.decimal_mark!==Je.decimal_separator&&this.ConvertLocale(e);let n=this.grid.model;if(n.tables.clear(),e.tables)for(let o of e.tables)n.tables.set(o.name.toLowerCase(),o);this.grid.UpdateSheets(r,void 0,t||e.active_sheet);for(let o of this.model.tables.values())if(o.area.start.sheet_id){let s=n.sheets.Find(o.area.start.sheet_id);if(s)for(let a=o.area.start.row;a<=o.area.end.row;a++)for(let c=o.area.start.column;c<=o.area.end.column;c++){let d=s.cells.GetCell({row:a,column:c},!0);d.table=o}}if(n.document_name=e.name,n.user_data=e.user_data,n.named.Reset(),e.named)this.model.UnserializeNames(e.named,this.grid.active_sheet);else{let o=e.named_ranges;if(!o&&r[0]&&r[0].named_ranges&&(o=r[0].named_ranges),o)for(let[s,a]of Object.entries(o))n.named.SetNamedRange(s,new Ee(a.start,a.end));if(e.named_expressions)for(let s of e.named_expressions)this.model.UnserializeNames([{name:s.name,expression:s.expression}],this.grid.active_sheet)}if(n.macro_functions.clear(),e.macro_functions)for(let o of e.macro_functions)n.macro_functions.set(o.name.toUpperCase(),{...o,expression:this.parser.Parse(o.function_def||"").expression});this.UpdateAC()}async LoadWorker(){try{return await(await import("./treb-export-worker.mjs")).CreateWorker()}catch(e){throw console.error(e),e}}HandleKeyDown(e){e.key==="z"?(Y.is_mac&&e.metaKey||e.ctrlKey)&&(e.stopPropagation(),e.preventDefault(),this.Undo()):e.key==="F9"&&this.options.recalculate_on_f9&&(e.stopPropagation(),e.preventDefault(),this.Recalculate())}};var Bs=`@charset "UTF-8";.treb-main.treb-main .treb-mouse-mask{background:transparent;bottom:0;display:none;left:0;position:fixed;right:0;top:0;z-index:9999}.treb-main.treb-main .treb-mouse-mask.column-resize{cursor:col-resize}.treb-main.treb-main .treb-mouse-mask.row-resize{cursor:row-resize}.treb-main.treb-main .treb-mouse-mask.nub-select{cursor:crosshair}.treb-main.treb-main .treb-mouse-mask.move{cursor:move}.treb-main.treb-main .treb-mouse-mask.nw-resize{cursor:nw-resize}.treb-main.treb-main .treb-note{max-width:15em;min-width:15em}.treb-main.treb-main .treb-hover-title,.treb-main.treb-main .treb-note{background:var(--treb-note-background,#fff);border:1px solid var(--treb-note-border-color,var(--treb-ui-border-color,#ddd));border-radius:2px;box-shadow:0 1px 4px 2px hsla(0,0%,43%,.2);color:var(--treb-note-color,#333);font-family:BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,"sans-serif";font-size:10.5pt;left:100px;line-height:normal;opacity:0;padding:7px 10px;position:fixed;top:100px;transition:opacity .2s;white-space:pre-line;z-index:39}.treb-main.treb-main .treb-hover-title{min-width:10em;pointer-events:none}.treb-main.treb-main .treb-sort-button{background:#fff;border:1px solid #ccc;border-radius:2px;height:1em;left:100px;opacity:0;pointer-events:none;position:absolute;top:100px;transition:opacity .1s ease;width:1em;z-index:39}.treb-main.treb-main .treb-sort-button:after{box-sizing:border-box}.treb-main.treb-main .treb-sort-button.asc:after{border:.4em solid transparent;border-top-color:currentcolor;content:"";height:.8em;left:50%;opacity:.5;position:absolute;top:50%;transform:translate(-50%,-25%);width:.8em}.treb-main.treb-main .treb-sort-button.desc:after{border:.4em solid transparent;border-bottom-color:currentcolor;content:"";height:.8em;left:50%;opacity:.5;position:absolute;top:50%;transform:translate(-50%,-80%);width:.8em}.treb-main.treb-main .treb-tooltip{border-radius:2px;box-shadow:0 1px 4px 2px hsla(0,0%,43%,.2);display:none;line-height:normal;padding:2px 10px;pointer-events:none;position:fixed;z-index:39}.treb-main.treb-main .treb-tooltip.arrow-up:after{border:4px solid transparent;border-bottom-color:inherit;box-sizing:border-box;content:" ";height:8px;left:calc(50% - 4px);overflow:hidden;position:absolute;top:-8px;width:8px}.treb-main.treb-main .treb-tooltip.arrow-left:after{border:4px solid transparent;border-right-color:inherit;box-sizing:border-box;content:" ";height:8px;left:-8px;overflow:hidden;position:absolute;top:calc(50% - 4px);width:8px}.treb-main.treb-main .treb-dropdown-caret{background:var(--treb-dropdown-caret-background,#fff);border:1px solid var(--treb-dropdown-caret-border-color,#ccc);border-radius:2px;box-shadow:0 1px 4px 2px hsla(0,0%,43%,.2);display:none;height:20px;position:absolute;width:20px;z-index:39}.treb-main.treb-main .treb-dropdown-caret path{fill:none;stroke:var(--treb-dropdown-caret-color,#444);stroke-linecap:round;stroke-linejoin:round;stroke-width:2}.treb-main.treb-main .treb-dropdown-list{background:var(--treb-dropdown-background,#fff);border:1px solid var(--treb-dropdown-border-color,unset);box-shadow:0 1px 4px 2px hsla(0,0%,43%,.2);color:var(--treb-dropdown-color,inherit);display:none;font-size:10pt;max-height:10em;outline:none;overflow-y:auto;position:absolute;text-align:left;z-index:39}.treb-main.treb-main .treb-dropdown-list div{cursor:default;padding:2px}.treb-main.treb-main .treb-dropdown-list div.selected{background:var(--treb-dropdown-selected-background,#555);color:var(--treb-dropdown-selected-color,#fff)}.treb-main.treb-main .treb-dropdown-caret.active{background:var(--treb-dropdown-caret-active-background,#eee)}.treb-main.treb-main .treb-dropdown-caret.active+.treb-dropdown-list{display:block}.treb-main.treb-main .treb-error-highlight{background:rgba(255,0,0,.25);opacity:0;pointer-events:none;position:absolute;transition:opacity .15s ease-in-out;z-index:40}.treb-main.treb-main .treb-autocomplete{box-sizing:border-box;font-size:inherit;font-weight:400;line-height:normal;max-height:10em;overflow-y:auto;position:fixed;text-align:left;top:-1000px;z-index:39}.treb-main.treb-main .treb-autocomplete *{box-sizing:border-box}.treb-main.treb-main .treb-autocomplete ul{list-style-type:none}.treb-main.treb-main .treb-autocomplete ul,.treb-main.treb-main .treb-autocomplete ul li{font-size:inherit;font-weight:inherit;margin:0;padding:0}.treb-main.treb-main .treb-autocomplete ul li a{color:inherit;cursor:default;display:inline-block;font-size:inherit;font-weight:inherit;padding:3px 6px;text-decoration:none;width:100%}.treb-main.treb-main .treb-autocomplete-tooltip{position:fixed;top:-1000px;white-space:pre;z-index:39}.treb-main.treb-main .treb-formula-bar{display:flex;flex-direction:row;gap:.5em;grid-area:1/1/2/2;max-width:100%;overflow-x:hidden;padding:0 2px 12px;text-align:left}.treb-main.treb-main .treb-formula-bar[hidden]{display:none}.treb-main.treb-main .treb-formula-bar .treb-address-label{border:1px solid var(--treb-formula-bar-border-color,var(--treb-ui-border-color,#ccc));border-radius:2px;display:flex;flex-direction:column;height:1.75em;justify-content:center;min-height:1.5em;min-width:95px;padding-left:3px;width:95px}.treb-main.treb-main .treb-formula-bar .treb-address-label>div{outline:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.treb-main.treb-main .treb-formula-bar .treb-insert-function-button{background:transparent;border:1px solid var(--treb-formula-bar-border-color,var(--treb-ui-border-color,#ccc));border-radius:2px;height:1.75em;min-height:1.5em}.treb-main.treb-main .treb-formula-bar .treb-insert-function-button[hidden]{display:none}.treb-main.treb-main .treb-formula-bar .expand-button{background:transparent;border:0;border-radius:2px;height:1.75em;margin-left:2px;outline:none;padding:1px}.treb-main.treb-main .treb-formula-bar .expand-button:after{border:5px solid transparent;border-top-color:#999;content:" ";display:inline-block;margin:0;padding:0;position:relative;top:-6px;transition:transform .15s ease}.treb-main.treb-main .treb-formula-bar[expanded] .expand-button:after{transform:rotate(180deg) translateY(6px)}.treb-main.treb-main .treb-formula-bar .treb-editor-container{border:1px solid var(--treb-formula-bar-border-color,var(--treb-ui-border-color,#ccc));border-radius:2px;display:flex;flex-direction:column;flex-grow:1;height:1.75em;justify-content:center;min-width:0}.treb-main.treb-main .treb-formula-bar .treb-editor-container>.treb-editor-shadow{opacity:.4}.treb-main.treb-main .treb-formula-bar[expanded] .treb-editor-container{height:4.5em;transition:height .1s ease-in-out}.treb-main.treb-main .treb-formula-bar[expanded] .treb-editor-container>div{overflow-y:auto}.treb-main.treb-main .treb-formula-bar .treb-editor-container>div{flex-grow:1;line-height:1.35;margin:2px;min-height:1em;outline:none;overflow-x:hidden;overflow-y:hidden;white-space:pre-wrap;width:100%}.treb-main.treb-main .treb-mouse-mask .ghost-tab{position:fixed}.treb-main.treb-main .treb-spreadsheet-footer{align-items:center;grid-area:3/1/4/2}.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tab-container{align-self:flex-start;height:2.2em;overflow:hidden}.treb-main.treb-main .treb-spreadsheet-footer,.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs{color:var(--treb-ui-color,inherit);display:flex;flex-direction:row;height:2.2em;list-style-type:none;max-width:100%;padding-inline-start:0;z-index:2}.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs{height:auto;margin-block-start:0;margin:0;overflow-x:scroll;overflow-y:hidden;scrollbar-width:none}.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs::-webkit-scrollbar{display:none}.treb-main.treb-main .treb-spreadsheet-footer[hidden]{display:none}.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs>li{display:inline-block;margin:0;position:relative}.treb-main.treb-main .treb-spreadsheet-footer .treb-add-tab,.treb-main.treb-main .treb-spreadsheet-footer .treb-delete-tab,.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs>li{align-items:center;border-bottom-left-radius:5px;border-bottom-right-radius:5px;border-top-width:1px;border:1px solid var(--treb-tab-bar-tab-border-color,var(--treb-ui-border-color,#ccc));border-top:0 solid var(--treb-tab-bar-tab-border-color,var(--treb-ui-border-color,#ccc));color:var(--treb-tab-bar-tab-color,var(--treb-ui-color,#fff));cursor:default;display:inline-flex;font-size:inherit;height:100%;justify-content:center;margin-right:-2px;overflow:hidden;padding:0 .75em;z-index:1}.treb-main.treb-main .treb-spreadsheet-footer .treb-add-tab:active,.treb-main.treb-main .treb-spreadsheet-footer .treb-add-tab:focus,.treb-main.treb-main .treb-spreadsheet-footer .treb-delete-tab:active,.treb-main.treb-main .treb-spreadsheet-footer .treb-delete-tab:focus,.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs>li:active,.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs>li:focus{z-index:3}.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs>li{height:2.2em;overflow:visible;overflow-x:visible}.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs>li:last-of-type{margin-right:0}.treb-main.treb-main .treb-spreadsheet-footer .treb-add-tab{margin-left:-1px}.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs>li{white-space:nowrap}.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs>li[selected]{z-index:2}.treb-main.treb-main .treb-spreadsheet-footer .treb-scale-control{align-items:center;display:flex;flex-direction:row;font-size:inherit;height:2.2em;justify-content:center;position:relative;width:5em}.treb-main.treb-main .treb-spreadsheet-footer .treb-scale-control .treb-scale-input{background:transparent;border:1px solid transparent;border-radius:2px;color:inherit;font-family:inherit;font-size:inherit;padding:initial;text-align:center;transition:border-color .25s ease,background-color .25s ease;width:4em}.treb-main.treb-main .treb-spreadsheet-footer .treb-scale-control .treb-slider-container{accent-color:var(--treb-scale-slider-accent-color,undefined);align-items:center;background:var(--treb-scale-slider-background,#fff);border:1px solid var(--treb-scale-slider-border-color,var(--treb-ui-border-color,#ccc));display:flex;flex-direction:row;height:4em;justify-content:center;left:.5em;opacity:0;pointer-events:none;position:absolute;top:0;transform:rotate(-90deg);transform-origin:left top;transition:opacity .25s ease;width:10em;z-index:40}.treb-main.treb-main .treb-spreadsheet-footer .treb-scale-control .treb-scale-input:focus,.treb-main.treb-main .treb-spreadsheet-footer .treb-scale-control:hover .treb-scale-input{border-color:var(--treb-ui-border-color,#ccc)}.treb-main.treb-main .treb-spreadsheet-footer .treb-scale-control .treb-slider-container>input[type=range]{width:8.5em}.treb-main.treb-main .treb-spreadsheet-footer .treb-scale-control .treb-scale-input:focus+.treb-slider-container,.treb-main.treb-main .treb-spreadsheet-footer .treb-scale-control .treb-slider-container:focus-within,.treb-main.treb-main .treb-spreadsheet-footer .treb-scale-control:hover .treb-slider-container{opacity:.85;pointer-events:auto}.treb-main.treb-main .treb-spreadsheet-footer .treb-delete-tab{align-items:center;background:transparent;border:none;border-bottom-left-radius:5px;border-bottom-right-radius:5px;border-top:0;color:currentColor;cursor:default;display:inline-flex;flex-direction:row;font-size:inherit;margin-right:-2px;min-width:2.5em;padding:.25em .75em;z-index:1}.treb-main.treb-main .treb-spreadsheet-footer .treb-delete-tab svg{height:1em;opacity:.75;pointer-events:none;transition:opacity .125s ease-in-out;width:1em}.treb-main.treb-main .treb-spreadsheet-footer .treb-delete-tab:hover svg{opacity:.75}.treb-main.treb-main .treb-spreadsheet-footer .treb-delete-tab path{stroke:currentColor;stroke-width:1.5px;stroke-linecap:round}.treb-main.treb-main .treb-spreadsheet-footer .treb-delete-tab:active,.treb-main.treb-main .treb-spreadsheet-footer .treb-delete-tab:focus{z-index:3}.treb-main.treb-main .treb-spreadsheet-footer .treb-stats-panel{flex:1 1;overflow:hidden;text-align:end;text-overflow:ellipsis;white-space:nowrap}.treb-main.treb-main .treb-spreadsheet-footer .treb-stats-panel>*{margin-left:.5em}.treb-main.treb-main .treb-spreadsheet-footer .treb-stats-panel .treb-stats-value{background:var(--treb-stats-value-background,#f8f8ff);border:1px solid var(--treb-stats-value-border-color,var(--treb-ui-border-color,#ddd));border-radius:3px;padding:0 .3em}.treb-main.treb-main .treb-grid .treb-overlay-container{margin:0;opacity:0;outline:none;padding:0;position:absolute;z-index:24}.treb-main.treb-main .treb-grid .treb-overlay-container.align-right .treb-overlay-inset{padding-right:3px;right:0;text-align:right}.treb-main.treb-main .treb-grid .treb-overlay-container.align-center .treb-overlay-inset{left:50%;text-align:center;transform:translateX(-50%)}.treb-main.treb-main .treb-grid .treb-overlay-inset{display:flex;flex-direction:column;height:100%;justify-content:flex-end;margin:0;min-width:100%;padding:0 4px;position:absolute}.treb-main.treb-main .treb-grid .treb-overlay-editor{outline:none;position:relative;white-space:nowrap;white-space:pre}.treb-main.treb-main .treb-grid .treb-overlay-editor.firefox:before{content:"\u200B"}.treb-main.treb-main .treb-spill-border{pointer-events:none;position:absolute;transform:translateZ(0)}.treb-main.treb-main .treb-spill-border rect{stroke:var(--treb-spill-border-color,#5c5ce0);stroke-dasharray:var(--treb-spill-border-dasharray,0);fill:none;stroke-width:var(--treb-spill-border-width,1px);filter:var(--treb-spill-border-filter,drop-shadow(3px 3px 2px rgba(0,0,0,.5)));z-index:35}.treb-main.treb-main .treb-buffer-canvas{display:none;position:absolute}.treb-main.treb-main .treb-spreadsheet-body{grid-area:2/1/3/2;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:transparent;display:flex;overflow:hidden;position:relative;z-index:1}.treb-main.treb-main .treb-grid{flex-grow:1;order:2;overflow:scroll;position:relative;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:transparent;display:grid;grid-template-columns:100px auto;grid-template-rows:20px auto;outline:none;overscroll-behavior:none}.treb-main.treb-main .treb-grid .tile-cover.grid-cover{grid-area:2/2/3/3}.treb-main.treb-main .treb-grid .tile-cover.column-header-cover{grid-area:1/2/2/3;position:-webkit-sticky;position:sticky;top:0}.treb-main.treb-main .treb-grid .tile-cover.row-header-cover{grid-area:2/1/3/2;left:0;position:-webkit-sticky;position:sticky}.treb-main.treb-main .treb-grid .treb-grid-selection{grid-area:1/1/2/2}.treb-main.treb-main .treb-grid .treb-corner{grid-area:1/1/2/2;position:-webkit-sticky;position:sticky}.treb-main.treb-main .treb-grid .treb-left-header{display:grid;grid-area:2/1/3/2;grid-template-columns:auto;grid-template-rows:auto;position:-webkit-sticky;position:sticky}.treb-main.treb-main .treb-grid .treb-top-header{display:grid;grid-area:1/2/2/3;grid-template-columns:auto;grid-template-rows:auto;position:-webkit-sticky;position:sticky}.treb-main.treb-main .treb-grid .treb-contents{display:grid;grid-area:2/2/3/3;grid-template-columns:auto;grid-template-rows:auto}.treb-main.treb-main .treb-grid.safari::-webkit-scrollbar{-webkit-appearance:none;height:7px;width:7px}.treb-main.treb-main .treb-grid.safari::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.25);border-radius:4px;-webkit-box-shadow:0 0 1px hsla(0,0%,100%,.5)}.treb-main.treb-main .treb-grid canvas{background:transparent;border:0;margin:0;padding:0}.treb-main.treb-main .treb-grid .nub-select{cursor:crosshair}.treb-main.treb-main .treb-grid .link-pointer{cursor:pointer}.treb-main.treb-main .treb-grid .mock-selection-node{background:red;left:-100px;position:fixed;top:-100px}.treb-main.treb-main .treb-grid .tile-cover{background:transparent;position:relative;z-index:14}.treb-main.treb-main .treb-grid .tile-cover.column-header-cover{z-index:22}.treb-main.treb-main .treb-grid .tile-cover.column-header-cover.resize{cursor:col-resize}.treb-main.treb-main .treb-grid .tile-cover.row-header-cover{z-index:22}.treb-main.treb-main .treb-grid .tile-cover.row-header-cover.resize{cursor:row-resize}.treb-main.treb-main .treb-grid .frozen-annotation-container,.treb-main.treb-main .treb-grid .treb-annotation-container{left:0;pointer-events:none;position:absolute;top:0;z-index:16}.treb-main.treb-main .treb-grid .frozen-annotation-container .annotation,.treb-main.treb-main .treb-grid .treb-annotation-container .annotation{background:hsla(0,0%,100%,.5);border:1px solid #999;overflow:hidden;pointer-events:auto;position:absolute;z-index:1}.treb-main.treb-main .treb-grid .frozen-annotation-container .annotation .annotation-content,.treb-main.treb-main .treb-grid .treb-annotation-container .annotation .annotation-content{font-family:inherit;font-size:inherit;height:100%;left:0;position:absolute;top:0;width:100%;z-index:1}.treb-main.treb-main .treb-grid .frozen-annotation-container .annotation .annotation-move-target,.treb-main.treb-main .treb-grid .treb-annotation-container .annotation .annotation-move-target{cursor:move;height:10%;left:0;min-height:14px;position:absolute;top:0;width:100%;z-index:2}.treb-main.treb-main .treb-grid .frozen-annotation-container .annotation .annotation-resize-target,.treb-main.treb-main .treb-grid .treb-annotation-container .annotation .annotation-resize-target{bottom:0;cursor:nwse-resize;height:10%;min-height:14px;min-width:14px;position:absolute;right:0;width:10%;z-index:3}.treb-main.treb-main .treb-grid .frozen-annotation-container .annotation.clone-focus,.treb-main.treb-main .treb-grid .frozen-annotation-container .annotation.retain-focus,.treb-main.treb-main .treb-grid .frozen-annotation-container .annotation:focus,.treb-main.treb-main .treb-grid .treb-annotation-container .annotation.clone-focus,.treb-main.treb-main .treb-grid .treb-annotation-container .annotation.retain-focus,.treb-main.treb-main .treb-grid .treb-annotation-container .annotation:focus{box-shadow:0 0 0 3px rgba(14,165,233,.33)}.treb-main.treb-main .treb-grid .frozen-annotation-container .move-buffer,.treb-main.treb-main .treb-grid .treb-annotation-container .move-buffer{border:1px solid red;cursor:move;height:10%;left:0;position:absolute;top:0;width:100%}.treb-main.treb-main .treb-grid .treb-grid-selection{background:transparent;position:absolute;transform:translateZ(0);-moz-transform:scale(1);z-index:10}.treb-main.treb-main .treb-grid .frozen-selection{overflow:hidden;pointer-events:none;position:absolute;transform:translateZ(0);-moz-transform:scale(1);transition:background .33s;z-index:12}.treb-main.treb-main .treb-grid .frozen-selection.frozen-selection-rows{border-bottom:1px solid transparent}.treb-main.treb-main .treb-grid .frozen-selection.frozen-selection-columns{border-right:1px solid transparent}.treb-main.treb-main .treb-grid .frozen-annotation-container{height:100%;left:0;overflow:hidden;position:absolute;top:0;width:100%}.treb-main.treb-main .treb-grid .treb-corner{left:0;top:0;z-index:20}.treb-main.treb-main .treb-grid .treb-corner canvas{left:0;pointer-events:none;position:absolute;top:0}.treb-main.treb-main .treb-grid .treb-left-header{left:0;pointer-events:none;z-index:18}.treb-main.treb-main .treb-grid .treb-top-header{pointer-events:none;top:0;z-index:18}.treb-main.treb-main .treb-grid .treb-contents{height:2000px;width:2000px}.treb-main.treb-main{--alternate-selection-color-1:#fbb13c;--alternate-selection-color-2:#40c040;--alternate-selection-color-3:#b66d0d;--alternate-selection-color-4:#2176ae;--alternate-selection-color-5:#fe6847;--text-reference-color-1:#e08a00;--text-reference-color-2:#3aad3a;--text-reference-color-3:#b66d0d;--text-reference-color-4:#2176ae;--text-reference-color-5:#fe2f01}.treb-main.treb-main:focus-within .treb-grid-selection .primary-selection,.treb-main.treb-main:focus-within .treb-header-overlay{color:var(--treb-selection-color,#4caaf1)}.treb-main.treb-main .theme-color-1{color:var(--treb-theme-color-1,#e7e6e6)}.treb-main.treb-main .theme-color-2{color:var(--treb-theme-color-2,#44546a)}.treb-main.treb-main .theme-color-3{color:var(--treb-theme-color-3,#4472c4)}.treb-main.treb-main .theme-color-4{color:var(--treb-theme-color-4,#ed7d31)}.treb-main.treb-main .theme-color-5{color:var(--treb-theme-color-5,#a5a5a5)}.treb-main.treb-main .theme-color-6{color:var(--treb-theme-color-6,#ffc000)}.treb-main.treb-main .theme-color-7{color:var(--treb-theme-color-7,#5b9bd5)}.treb-main.treb-main .theme-color-8{color:var(--treb-theme-color-8,#70ad47)}.treb-main.treb-main .theme-color-9{color:var(--treb-theme-color-9,#0563c1)}.treb-main.treb-main .theme-color-10{color:var(--treb-theme-color-10,#954f72)}.treb-main.treb-main .treb-offset-dark{color:#000}.treb-main.treb-main .treb-offset-light{color:#fff}.treb-main.treb-main .note-marker{background:var(--treb-note-marker-color,#6fab20)}.treb-main.treb-main .grid-headers{background:var(--treb-grid-header-background,#eeeef2);color:var(--treb-grid-header-color,var(--treb-grid-default-color,#666));font-family:var(--treb-grid-header-font-family,inherit);font-size:var(--treb-grid-header-font-size,10pt);font-style:var(--treb-grid-header-font-style,normal);font-weight:var(--treb-grid-header-font-weight,normal);stroke:var(--treb-grid-header-grid-color,var(--treb-grid-grid-color,#ccccd4))}.treb-main.treb-main .grid-cells{color:var(--treb-grid-default-color,inherit);font-family:var(--treb-grid-font-family,inherit);font-size:var(--treb-grid-font-size,14px);stroke:var(--treb-grid-grid-color,#ccccd4);background:var(--treb-grid-background,#fff)}.treb-main.treb-main .frozen-selection.highlight-area{background:rgba(87,184,255,.25);border-bottom-color:#2176ae;border-left-color:#2176ae}.treb-main.treb-main .treb-autocomplete-tooltip{background:var(--treb-autocomplete-tooltip-background,#fffbb5);border:1px solid var(--treb-autocomplete-tooltip-border-color,unset);border-radius:2px;color:var(--treb-autocomplete-tooltip-color,inherit);font-size:14px;line-height:normal;margin:4px 0;padding:3px 8px}.treb-main.treb-main .treb-autocomplete-tooltip .active-argument{font-weight:700}.treb-main.treb-main .treb-autocomplete-tooltip .function-description{font-style:italic}.treb-main.treb-main .treb-autocomplete{background:var(--treb-autocomplete-background,#fff);border:1px solid var(--treb-autocomplete-border-color,var(--treb-ui-border-color,#ccc));border-radius:2px;box-shadow:0 1px 4px 2px hsla(0,0%,43%,.2);font-size:14px}.treb-main.treb-main .treb-autocomplete li{color:var(--treb-autocomplete-entry-color,#333)}.treb-main.treb-main .treb-autocomplete li a.selected{background:var(--treb-autocomplete-selected-entry-background,#2e8dd6);color:var(--treb-autocomplete-selected-entry-color,#fff)}.treb-main.treb-main .treb-header-overlay{stroke:none;color:var(--treb-selection-color-unfocused,var(--treb-selection-color,#4caaf1))}.treb-main.treb-main .treb-header-overlay .treb-overlay{fill:#000;stroke:none;opacity:.05}.treb-main.treb-main .treb-header-overlay .treb-highlight{fill:currentColor}.treb-main.treb-main .treb-editor-container>div [data-highlight-index="1"],.treb-main.treb-main .treb-overlay-editor [data-highlight-index="1"]{color:var(--text-reference-color-1)}.treb-main.treb-main .treb-editor-container>div [data-highlight-index="2"],.treb-main.treb-main .treb-overlay-editor [data-highlight-index="2"]{color:var(--text-reference-color-2)}.treb-main.treb-main .treb-editor-container>div [data-highlight-index="3"],.treb-main.treb-main .treb-overlay-editor [data-highlight-index="3"]{color:var(--text-reference-color-3)}.treb-main.treb-main .treb-editor-container>div [data-highlight-index="4"],.treb-main.treb-main .treb-overlay-editor [data-highlight-index="4"]{color:var(--text-reference-color-4)}.treb-main.treb-main .treb-editor-container>div [data-highlight-index="5"],.treb-main.treb-main .treb-overlay-editor [data-highlight-index="5"]{color:var(--text-reference-color-5)}.treb-main.treb-main .treb-editor-container>div span.highlight-1,.treb-main.treb-main .treb-overlay-editor span.highlight-1{color:var(--text-reference-color-1)}.treb-main.treb-main .treb-editor-container>div span.highlight-2,.treb-main.treb-main .treb-overlay-editor span.highlight-2{color:var(--text-reference-color-2)}.treb-main.treb-main .treb-editor-container>div span.highlight-3,.treb-main.treb-main .treb-overlay-editor span.highlight-3{color:var(--text-reference-color-3)}.treb-main.treb-main .treb-editor-container>div span.highlight-4,.treb-main.treb-main .treb-overlay-editor span.highlight-4{color:var(--text-reference-color-4)}.treb-main.treb-main .treb-editor-container>div span.highlight-5,.treb-main.treb-main .treb-overlay-editor span.highlight-5{color:var(--text-reference-color-5)}.treb-main.treb-main .frozen-selection .selection,.treb-main.treb-main .treb-grid-selection .selection{stroke-width:var(--treb-selection-stroke-width,2px)}.treb-main.treb-main .frozen-selection .selection .treb-selection-outline,.treb-main.treb-main .treb-grid-selection .selection .treb-selection-outline{stroke:currentColor;fill:none}.treb-main.treb-main .frozen-selection .selection .treb-selection-fill,.treb-main.treb-main .treb-grid-selection .selection .treb-selection-fill{stroke:none;fill:currentColor;opacity:var(--treb-selection-fill-opacity,.1)}.treb-main.treb-main .frozen-selection .alternate-selection,.treb-main.treb-main .treb-grid-selection .alternate-selection{stroke-dasharray:var(--treb-alternate-selection-dasharray,3 2)}.treb-main.treb-main .frozen-selection .alternate-selection:nth-of-type(1n),.treb-main.treb-main .treb-grid-selection .alternate-selection:nth-of-type(1n){color:var(--alternate-selection-color-1)}.treb-main.treb-main .frozen-selection .alternate-selection:nth-of-type(2n),.treb-main.treb-main .treb-grid-selection .alternate-selection:nth-of-type(2n){color:var(--alternate-selection-color-2)}.treb-main.treb-main .frozen-selection .alternate-selection:nth-of-type(3n),.treb-main.treb-main .treb-grid-selection .alternate-selection:nth-of-type(3n){color:var(--alternate-selection-color-3)}.treb-main.treb-main .frozen-selection .alternate-selection:nth-of-type(4n),.treb-main.treb-main .treb-grid-selection .alternate-selection:nth-of-type(4n){color:var(--alternate-selection-color-4)}.treb-main.treb-main .frozen-selection .alternate-selection:nth-of-type(5n),.treb-main.treb-main .treb-grid-selection .alternate-selection:nth-of-type(5n){color:var(--alternate-selection-color-5)}.treb-main.treb-main .frozen-selection .primary-selection,.treb-main.treb-main .treb-grid-selection .primary-selection{color:var(--treb-selection-color-unfocused,var(--treb-selection-color,#4caaf1))}.treb-main.treb-main .frozen-selection .primary-selection .treb-selection-nub,.treb-main.treb-main .treb-grid-selection .primary-selection .treb-selection-nub{stroke:#fff;fill:currentColor;stroke-width:1px}.treb-main.treb-main .treb-tooltip{background:var(--treb-resize-tooltip-background,rgba(0,0,0,.8));border-color:var(--treb-resize-tooltip-background,rgba(0,0,0,.8));color:var(--treb-resize-tooltip-color,#fff);font-size:11pt}.treb-main.treb-main .treb-spreadsheet-footer .treb-add-tab,.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs>li{background:var(--treb-tab-bar-tab-background,#eeeef2);color:var(--treb-tab-bar-tab-color,var(--treb-ui-color,inherit))}.treb-main.treb-main .treb-spreadsheet-footer .treb-add-tab[selected],.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs>li[selected]{background:var(--treb-tab-bar-active-tab-background,#fff);border-bottom-color:var(--treb-tab-bar-active-tab-border-color,currentColor);color:var(--treb-tab-bar-active-tab-color,var(--treb-ui-color,inherit))}.treb-main.treb-main .treb-formula-bar .treb-address-label,.treb-main.treb-main .treb-formula-bar .treb-editor-container{background:var(--treb-formula-bar-background,transparent);color:var(--treb-formula-bar-color,var(--treb-ui-color,inherit))}.treb-main.treb-main .treb-formula-bar .treb-address-label[locked],.treb-main.treb-main .treb-formula-bar .treb-editor-container[locked]{background:var(--treb-formula-bar-locked-background,#eef4fc);position:relative}.treb-main.treb-main .treb-formula-bar .treb-address-label[locked]:after,.treb-main.treb-main .treb-formula-bar .treb-editor-container[locked]:after{content:"";height:12px;opacity:.4;position:absolute;right:2px;top:2px;width:12px;--icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath fill='currentColor' d='M416 224h-16v-80C400 65 335 0 256 0S112 65 112 144v80H96c-35 0-64 29-64 64v160c0 35 29 64 64 64h320c35 0 64-29 64-64V288c0-35-29-64-64-64m-240-80c0-44 36-80 80-80s80 36 80 80v80H176z'/%3E%3C/svg%3E");background:var(--treb-formula-bar-lock-icon-color,currentColor);mask-image:var(--icon);-webkit-mask-image:var(--icon);mask-position:center;-webkit-mask-position:center;mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat;mask-size:12px 12px;-webkit-mask-size:12px 12px}.treb-main.treb-main .treb-annotation-textbox{background:Canvas;height:100%;left:0;overflow:hidden;padding:.5em;position:relative;top:0;width:100%}.treb-main.treb-main .treb-annotation-textbox p{margin-block-end:0;margin-block-start:0}.treb-dark-theme{--treb-autocomplete-background:#333;--treb-autocomplete-border-color:#fff;--treb-autocomplete-entry-color:#fff;--treb-autocomplete-selected-entry-background:darkred;--treb-autocomplete-tooltip-background:darkred;--treb-autocomplete-tooltip-border-color:#fff;--treb-autocomplete-tooltip-color:#fff;--treb-chart-background:#000;--treb-chart-grid-color:#976;--treb-chart-grid-zero-color:#fdd;--treb-chart-text-color:#fff;--treb-dialog-background:#000;--treb-dialog-color:#fff;--treb-dropdown-background:#000;--treb-dropdown-border-color:#fff;--treb-dropdown-caret-active-background:darkred;--treb-dropdown-caret-background:#444;--treb-dropdown-caret-border-color:#fff;--treb-dropdown-caret-color:#fff;--treb-dropdown-color:#fff;--treb-dropdown-selected-background:darkred;--treb-grid-background:#000;--treb-grid-default-color:#fff;--treb-grid-grid-color:#444;--treb-grid-header-background:#444;--treb-grid-header-grid-color:#000;--treb-note-background:#333;--treb-note-border-color:#aaa;--treb-note-color:#fff;--treb-note-marker-color:pink;--treb-resize-tooltip-background:#fff;--treb-resize-tooltip-color:#000;--treb-scale-slider-accent-color:#fff;--treb-scale-slider-background:#333;--treb-scale-slider-border-color:#aaa;--treb-selection-color:#ff0;--treb-selection-fill-opacity:.2;--treb-sidebar-button-background:#000;--treb-sidebar-button-border-color:#888;--treb-stats-value-background:#223;--treb-tab-bar-tab-background:#000;--treb-tab-bar-tab-color:#fff;--treb-theme-color-1:#222;--treb-theme-color-2:#ddd;--treb-toolbar-active-button-background:#555;--treb-toolbar-button-background:#000;--treb-toolbar-hover-button-background:#444;--treb-ui-color:#fff;--treb-table-header-background:#334;--treb-table-odd-background:#122;--treb-table-header-font-weight:700;--treb-table-header-border-top:#889;--treb-table-header-border-bottom:#889;--treb-table-footer-border-bottom:#889;--treb-table-odd-border-top:#889;--treb-table-odd-border-bottom:#889;--treb-table-even-border-top:#889;--treb-table-even-border-bottom:#889;--treb-table-total-border-top:#889;--treb-table-total-border-bottom:#889;--treb-table-total-background:#334;--treb-table-total-font-weight:700;--treb-color-scheme:dark;--treb-resize-handle-color:#add8e6;--treb-resize-frame-color:#add8e6;--treb-formula-bar-locked-background:#234;--treb-grid-background:#1e1e1e;--treb-grid-header-background:#565656;--treb-grid-header-color:#ddd;--treb-tab-bar-active-tab-background:#444;--treb-tab-bar-tab-background:transparent;--treb-tab-bar-tab-border-color:#444;--treb-ui-border-color:#aaa;--treb-toolbar-button-background:#565656;--treb-toolbar-button-background:#212121;--treb-toolbar-border-color:#434343;--treb-toolbar-color:#ddd;--treb-spill-border-color:pink;--treb-spill-border-filter:drop-shadow(3px 3px 2px hsla(0,0%,100%,.95))}@media (prefers-color-scheme:dark){.treb-light-dark-theme{--treb-autocomplete-background:#333;--treb-autocomplete-border-color:#fff;--treb-autocomplete-entry-color:#fff;--treb-autocomplete-selected-entry-background:darkred;--treb-autocomplete-tooltip-background:darkred;--treb-autocomplete-tooltip-border-color:#fff;--treb-autocomplete-tooltip-color:#fff;--treb-chart-background:#000;--treb-chart-grid-color:#976;--treb-chart-grid-zero-color:#fdd;--treb-chart-text-color:#fff;--treb-dialog-background:#000;--treb-dialog-color:#fff;--treb-dropdown-background:#000;--treb-dropdown-border-color:#fff;--treb-dropdown-caret-active-background:darkred;--treb-dropdown-caret-background:#444;--treb-dropdown-caret-border-color:#fff;--treb-dropdown-caret-color:#fff;--treb-dropdown-color:#fff;--treb-dropdown-selected-background:darkred;--treb-grid-background:#000;--treb-grid-default-color:#fff;--treb-grid-grid-color:#444;--treb-grid-header-background:#444;--treb-grid-header-grid-color:#000;--treb-note-background:#333;--treb-note-border-color:#aaa;--treb-note-color:#fff;--treb-note-marker-color:pink;--treb-resize-tooltip-background:#fff;--treb-resize-tooltip-color:#000;--treb-scale-slider-accent-color:#fff;--treb-scale-slider-background:#333;--treb-scale-slider-border-color:#aaa;--treb-selection-color:#ff0;--treb-selection-fill-opacity:.2;--treb-sidebar-button-background:#000;--treb-sidebar-button-border-color:#888;--treb-stats-value-background:#223;--treb-tab-bar-tab-background:#000;--treb-tab-bar-tab-color:#fff;--treb-theme-color-1:#222;--treb-theme-color-2:#ddd;--treb-toolbar-active-button-background:#555;--treb-toolbar-button-background:#000;--treb-toolbar-hover-button-background:#444;--treb-ui-color:#fff;--treb-table-header-background:#334;--treb-table-odd-background:#122;--treb-table-header-font-weight:700;--treb-table-header-border-top:#889;--treb-table-header-border-bottom:#889;--treb-table-footer-border-bottom:#889;--treb-table-odd-border-top:#889;--treb-table-odd-border-bottom:#889;--treb-table-even-border-top:#889;--treb-table-even-border-bottom:#889;--treb-table-total-border-top:#889;--treb-table-total-border-bottom:#889;--treb-table-total-background:#334;--treb-table-total-font-weight:700;--treb-color-scheme:dark;--treb-resize-handle-color:#add8e6;--treb-resize-frame-color:#add8e6;--treb-formula-bar-locked-background:#234;--treb-grid-background:#1e1e1e;--treb-grid-header-background:#565656;--treb-grid-header-color:#ddd;--treb-tab-bar-active-tab-background:#444;--treb-tab-bar-tab-background:transparent;--treb-tab-bar-tab-border-color:#444;--treb-ui-border-color:#aaa;--treb-toolbar-button-background:#565656;--treb-toolbar-button-background:#212121;--treb-toolbar-border-color:#434343;--treb-toolbar-color:#ddd;--treb-spill-border-color:pink;--treb-spill-border-filter:drop-shadow(3px 3px 2px hsla(0,0%,100%,.95))}}.treb-chart,.treb-main.treb-main .treb-chart{background:var(--treb-chart-background,#fff)}.treb-main.treb-main .treb-inherit-font .treb-chart{font-family:inherit}.treb-chart{--segment-2-offset:-20;--segment-3-offset:10;--segment-4-offset:-10;--segment-5-offset:20;--segment-6-offset:-25}.treb-chart .series-1{color:var(--treb-applied-theme-color-1)}.treb-chart .series-2{color:var(--treb-applied-theme-color-2)}.treb-chart .series-3{color:var(--treb-applied-theme-color-3)}.treb-chart .series-4{color:var(--treb-applied-theme-color-4)}.treb-chart .series-5{color:var(--treb-applied-theme-color-5)}.treb-chart .series-6{color:var(--treb-applied-theme-color-6)}.treb-chart .series-7{color:lch(from var(--treb-applied-theme-color-1) calc(l + var(--segment-2-offset)) c h)}.treb-chart .series-8{color:lch(from var(--treb-applied-theme-color-2) calc(l + var(--segment-2-offset)) c h)}.treb-chart .series-9{color:lch(from var(--treb-applied-theme-color-3) calc(l + var(--segment-2-offset)) c h)}.treb-chart .series-10{color:lch(from var(--treb-applied-theme-color-4) calc(l + var(--segment-2-offset)) c h)}.treb-chart .series-11{color:lch(from var(--treb-applied-theme-color-5) calc(l + var(--segment-2-offset)) c h)}.treb-chart .series-12{color:lch(from var(--treb-applied-theme-color-6) calc(l + var(--segment-2-offset)) c h)}.treb-chart .series-13{color:lch(from var(--treb-applied-theme-color-1) calc(l + var(--segment-3-offset)) c h)}.treb-chart .series-14{color:lch(from var(--treb-applied-theme-color-2) calc(l + var(--segment-3-offset)) c h)}.treb-chart .series-15{color:lch(from var(--treb-applied-theme-color-3) calc(l + var(--segment-3-offset)) c h)}.treb-chart .series-16{color:lch(from var(--treb-applied-theme-color-4) calc(l + var(--segment-3-offset)) c h)}.treb-chart .series-17{color:lch(from var(--treb-applied-theme-color-5) calc(l + var(--segment-3-offset)) c h)}.treb-chart .series-18{color:lch(from var(--treb-applied-theme-color-6) calc(l + var(--segment-3-offset)) c h)}.treb-chart .series-19{color:lch(from var(--treb-applied-theme-color-1) calc(l + var(--segment-4-offset)) c h)}.treb-chart .series-20{color:lch(from var(--treb-applied-theme-color-2) calc(l + var(--segment-4-offset)) c h)}.treb-chart .series-21{color:lch(from var(--treb-applied-theme-color-3) calc(l + var(--segment-4-offset)) c h)}.treb-chart .series-22{color:lch(from var(--treb-applied-theme-color-4) calc(l + var(--segment-4-offset)) c h)}.treb-chart .series-23{color:lch(from var(--treb-applied-theme-color-5) calc(l + var(--segment-4-offset)) c h)}.treb-chart .series-24{color:lch(from var(--treb-applied-theme-color-6) calc(l + var(--segment-4-offset)) c h)}.treb-chart .series-25{color:lch(from var(--treb-applied-theme-color-1) calc(l + var(--segment-5-offset)) c h)}.treb-chart .series-26{color:lch(from var(--treb-applied-theme-color-2) calc(l + var(--segment-5-offset)) c h)}.treb-chart .series-27{color:lch(from var(--treb-applied-theme-color-3) calc(l + var(--segment-5-offset)) c h)}.treb-chart .series-28{color:lch(from var(--treb-applied-theme-color-4) calc(l + var(--segment-5-offset)) c h)}.treb-chart .series-29{color:lch(from var(--treb-applied-theme-color-5) calc(l + var(--segment-5-offset)) c h)}.treb-chart .series-30{color:lch(from var(--treb-applied-theme-color-6) calc(l + var(--segment-5-offset)) c h)}.treb-chart .series-31{color:lch(from var(--treb-applied-theme-color-1) calc(l + var(--segment-6-offset)) c h)}.treb-chart .series-32{color:lch(from var(--treb-applied-theme-color-2) calc(l + var(--segment-6-offset)) c h)}.treb-chart .series-33{color:lch(from var(--treb-applied-theme-color-3) calc(l + var(--segment-6-offset)) c h)}.treb-chart .series-34{color:lch(from var(--treb-applied-theme-color-4) calc(l + var(--segment-6-offset)) c h)}.treb-chart .series-35{color:lch(from var(--treb-applied-theme-color-5) calc(l + var(--segment-6-offset)) c h)}.treb-chart .series-36{color:lch(from var(--treb-applied-theme-color-6) calc(l + var(--segment-6-offset)) c h)}.treb-chart .chart-title{font-size:1.4em}.treb-chart .axis-group{font-size:.9em}.treb-chart .axis-group .series-name{font-size:1.3em}.treb-chart text{fill:var(--treb-chart-text-color,#000);stroke:none}.treb-chart .legend{font-size:1.05em}.treb-chart .legend rect{fill:currentColor}.treb-chart .legend circle{fill:currentColor;fill-opacity:.5;stroke:currentColor;stroke-width:2px;r:.25em}.treb-chart .chart-grid,.treb-chart .chart-ticks{stroke:var(--treb-chart-grid-color,#ddd)}.treb-chart .chart-grid.zero,.treb-chart .chart-ticks.zero{stroke:var(--treb-chart-grid-zero-color,var(--treb-chart-grid-color,#999))}.treb-chart .label-target{stroke:none;fill:transparent}.treb-chart path.label-target{transition:fill .2s}.treb-chart path.label-target:hover{fill:rgba(0,0,0,.15)}.treb-chart .data-label{opacity:0;pointer-events:none;transition:opacity .2s ease-in-out}.treb-chart .data-label text{fill:#fff}.treb-chart .data-label path{fill:#000}.treb-chart .data-label .marker-highlight{fill:currentColor;stroke:none}.treb-chart .label-target:hover+.data-label{opacity:1}.treb-chart .chart-line{stroke:currentColor;fill:none;stroke-width:2}.treb-chart .chart-area .line{stroke:currentColor;stroke-width:2px;fill:none}.treb-chart .chart-area .fill{fill:currentColor;opacity:.5}.treb-chart .box-plot .iqr{fill:none;stroke:CanvasText;stroke-width:1px}.treb-chart .box-plot .median{stroke-width:3px;stroke:CanvasText;fill:none}.treb-chart .box-plot .outlier{r:3}.treb-chart .box-plot .outlier,.treb-chart .box-plot .whisker,.treb-chart .box-plot .whisker-extent{stroke-width:1px;stroke:CanvasText;fill:none}.treb-chart .box-plot .whisker-extent{stroke-dasharray:3 3}.treb-chart .bubble-chart{stroke-width:3;fill:color-mix(in srgb,currentColor 75%,transparent);stroke:currentColor}.treb-chart .bubble-label .label-background{stroke:none;fill:none}.treb-chart .bubble-label .label-text{transform:translate(var(--translate-offset),var(--translate-offset))}.treb-chart .scatter-plot{stroke-width:3;fill:none;stroke:currentColor}.treb-chart .scatter-plot .fill{fill:currentColor;opacity:.5;stroke:none}.treb-chart .scatter-plot .marker{stroke-width:2.5px;fill:#fff;transition:stroke-width .15s ease-in}.treb-chart .scatter-plot .marker:hover{stroke-width:5px}.treb-chart .donut path{fill:currentColor}.treb-chart .donut path.callout{fill:none;stroke:#999;stroke-dasharray:2 2}.treb-chart .donut text.callout-label{font-size:1em}.treb-chart .chart-column{fill:currentColor;stroke:none}.treb-chart .mc-correlation{stroke:currentColor;stroke-width:1}.treb-main.treb-main{--treb-icon-svg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' width='153.073' height='133.742' viewBox='0.673 4.629 153.073 133.742'%3E%3ClinearGradient id='a' x1='.673' x2='153.746' y1='71.5' y2='71.5' gradientUnits='userSpaceOnUse'%3E%3Cstop offset='0' style='stop-color:%235cb5ff'/%3E%3Cstop offset='1' style='stop-color:%230059b9'/%3E%3C/linearGradient%3E%3Cpath fill='url(%23a)' d='M91.656 28.313c-4.989 0-17.266 6.249-21.305 8.504-2.344-2.473-2.603-6.162-3.036-10.933-2.344 2.429-.824 9.806 0 12.496-10.238 7.635-18.83 15.531-27.597 24.471-2.992-4.729-5.031-8.593-5.726-17.183-3.038 6.509.867 15.057 3.121 19.784-9.674 12.193-19.263 25.297-27.03 37.834-35.488-74.973 72.853-119.534 143.663-88.855-43.867 29.199-55.192 121.353-132.248 96.843-5.423 7.809-9.069 18.006-13.538 27.072-3.73.263-6.334-1.646-7.288-3.12 7.506-18.181 17.183-34.192 27.075-49.984 10.718.306 21.346.478 30.198-1.04-7.681-2.038-16.877-.78-26.032-3.123C37.51 70.361 45.667 62.203 53.78 54.004c8.808.782 17.746 3.21 27.074 1.041-8.111-1.431-15.966-1.952-22.909-4.165 7.594-8.378 22.777-17.491 33.711-22.567'/%3E%3C/svg%3E")}.treb-main.treb-main .treb-icon-64{background:no-repeat 50%/100% var(--treb-icon-svg);height:64px;width:64px}.treb-main.treb-main .treb-dialog-mask{align-items:center;display:flex;height:100%;justify-content:center;left:0;opacity:0;pointer-events:none;position:absolute;top:0;transition:opacity .2s;width:100%;z-index:1000}.treb-main.treb-main .treb-embed-dialog{align-items:center;background:var(--treb-dialog-background,#fff);border:1px solid var(--treb-dialog-border-color,var(--treb-ui-border-color,#999));border-radius:3px;border-top:3px solid #999;box-shadow:0 4px 6px -4px rgba(0,0,0,.3);color:var(--treb-dialog-color,#000);display:flex;flex-direction:row;font-size:var(--treb-dialog-font-size,16px);line-height:1.6em;padding:1rem;position:relative;text-align:left}.treb-main.treb-main .treb-embed-dialog>*{display:none}.treb-main.treb-main .treb-embed-dialog>div{position:relative}.treb-main.treb-main .treb-embed-dialog>:nth-child(2){display:block;flex-grow:1;padding:2px 20px 2px 12px}.treb-main.treb-main .treb-embed-dialog>.treb-close-box{background:transparent;border:0;padding:4px;position:absolute;right:0;top:0}.treb-main.treb-main .treb-embed-dialog>.treb-close-box>svg{fill:#73828c;cursor:default;height:20px;width:20px}.treb-main.treb-main .treb-embed-dialog>.treb-close-box>svg:active,.treb-main.treb-main .treb-embed-dialog>.treb-close-box>svg:hover{fill:#049cfb}.treb-main.treb-main .treb-embed-dialog small{display:block;font-size:.9em}.treb-main.treb-main .treb-embed-dialog a{color:inherit;text-decoration:none}.treb-main.treb-main .treb-embed-dialog a:active,.treb-main.treb-main .treb-embed-dialog a:hover{color:#049cfb}.treb-main.treb-main .treb-embed-dialog.dialog-type-success{border-top-color:#44d926;border-top-width:3px}.treb-main.treb-main .treb-embed-dialog.dialog-type-about{border-top-color:#009dff;border-top-width:3px}.treb-main.treb-main .treb-embed-dialog.dialog-type-error{border-top-color:#f92f06;border-top-width:3px}.treb-main.treb-main .treb-embed-dialog.dialog-type-info{border-top-color:#009dff;border-top-width:3px}.treb-main.treb-main .treb-embed-dialog .treb-embed-dialog-message,.treb-main.treb-main .treb-embed-dialog .treb-embed-dialog-title{white-space:pre}.treb-main.treb-main .treb-embed-dialog .treb-embed-progress-container{border:1px solid #ddd;height:6px;margin:1rem auto .5rem;position:relative;width:100%}.treb-main.treb-main .treb-embed-dialog .treb-embed-progress-bar{background:#52880b;height:100%;left:0;position:relative;top:0}.treb-main.treb-main .treb-spinner{align-items:center;background:transparent;display:flex;height:100%;justify-content:center;left:0;opacity:0;position:absolute;top:0;transition:visibility .25s,opacity .25s ease;visibility:collapse;width:100%;z-index:1000}.treb-main.treb-main .treb-spinner.visible{opacity:1;transition:visibility 0s,opacity 1s ease;visibility:visible}.treb-main.treb-main .treb-spinner>div{display:inline-block;height:80px;position:relative;width:80px}.treb-main.treb-main .treb-spinner>div div{animation:treb-spinner 1.2s cubic-bezier(.5,0,.5,1) infinite;border:8px solid #fff;border-color:var(--treb-spinner-color,currentColor) transparent transparent transparent;border-radius:50%;box-sizing:border-box;display:block;height:64px;margin:8px;position:absolute;width:64px}.treb-main.treb-main .treb-spinner>div div:first-child{animation-delay:-.45s}.treb-main.treb-main .treb-spinner>div div:nth-child(2){animation-delay:-.3s}.treb-main.treb-main .treb-spinner>div div:nth-child(3){animation-delay:-.15s}@keyframes treb-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.treb-main.treb-main{--icon-x:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708"/></svg>');--icon-popout:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28"><path fill="currentColor" d="M22 14.5v5c0 2.484-2.016 4.5-4.5 4.5h-13A4.5 4.5 0 0 1 0 19.5v-13C0 4.016 2.016 2 4.5 2h11c.281 0 .5.219.5.5v1c0 .281-.219.5-.5.5h-11A2.507 2.507 0 0 0 2 6.5v13C2 20.875 3.125 22 4.5 22h13c1.375 0 2.5-1.125 2.5-2.5v-5c0-.281.219-.5.5-.5h1c.281 0 .5.219.5.5M28 1v8c0 .547-.453 1-1 1a1 1 0 0 1-.703-.297l-2.75-2.75L13.36 17.14c-.094.094-.234.156-.359.156s-.266-.063-.359-.156l-1.781-1.781c-.094-.094-.156-.234-.156-.359s.063-.266.156-.359L21.048 4.454l-2.75-2.75a1 1 0 0 1-.297-.703c0-.547.453-1 1-1h8c.547 0 1 .453 1 1z"/></svg>');--icon-toolbar:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 28"><path fill="currentColor" d="M5.5 22v2H0v-2zm5.5-2c.547 0 1 .453 1 1v4c0 .547-.453 1-1 1H7c-.547 0-1-.453-1-1v-4c0-.547.453-1 1-1zm2.5-6v2H0v-2zm-10-8v2H0V6zM24 22v2H12.5v-2zM9 4c.547 0 1 .453 1 1v4c0 .547-.453 1-1 1H5c-.547 0-1-.453-1-1V5c0-.547.453-1 1-1zm10 8c.547 0 1 .453 1 1v4c0 .547-.453 1-1 1h-4c-.547 0-1-.453-1-1v-4c0-.547.453-1 1-1zm5 2v2h-3.5v-2zm0-8v2H10.5V6z"/></svg>');--icon-export:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 26 28"><path fill="currentColor" d="M20 21c0-.547-.453-1-1-1s-1 .453-1 1 .453 1 1 1 1-.453 1-1m4 0c0-.547-.453-1-1-1s-1 .453-1 1 .453 1 1 1 1-.453 1-1m2-3.5v5a1.5 1.5 0 0 1-1.5 1.5h-23A1.5 1.5 0 0 1 0 22.5v-5A1.5 1.5 0 0 1 1.5 16h7.266l2.109 2.125c.578.562 1.328.875 2.125.875s1.547-.313 2.125-.875L17.25 16h7.25a1.5 1.5 0 0 1 1.5 1.5m-5.078-8.891a.98.98 0 0 1-.219 1.094l-7 7c-.187.203-.453.297-.703.297s-.516-.094-.703-.297l-7-7a.98.98 0 0 1-.219-1.094C5.234 8.25 5.594 8 6 8h4V1c0-.547.453-1 1-1h4c.547 0 1 .453 1 1v7h4c.406 0 .766.25.922.609"/></svg>');--icon-reset:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 28"><path fill="currentColor" d="M23.609 16.5c0 .031 0 .078-.016.109C22.265 22.14 17.702 26 11.937 26c-3.047 0-6-1.203-8.219-3.313l-2.016 2.016A1 1 0 0 1 .999 25c-.547 0-1-.453-1-1v-7c0-.547.453-1 1-1h7c.547 0 1 .453 1 1a1 1 0 0 1-.297.703l-2.141 2.141A7.99 7.99 0 0 0 11.998 22a7.98 7.98 0 0 0 6.813-3.813c.375-.609.562-1.203.828-1.828.078-.219.234-.359.469-.359h3c.281 0 .5.234.5.5zM24 4v7c0 .547-.453 1-1 1h-7c-.547 0-1-.453-1-1a1 1 0 0 1 .297-.703l2.156-2.156A8.04 8.04 0 0 0 12 6a7.98 7.98 0 0 0-6.813 3.813c-.375.609-.562 1.203-.828 1.828-.078.219-.234.359-.469.359H.781a.503.503 0 0 1-.5-.5v-.109C1.625 5.844 6.234 2 12 2c3.063 0 6.047 1.219 8.266 3.313l2.031-2.016A1 1 0 0 1 23 3c.547 0 1 .453 1 1"/></svg>');--icon-about:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 28"><path fill="currentColor" d="M14 21.5v-3c0-.281-.219-.5-.5-.5h-3c-.281 0-.5.219-.5.5v3c0 .281.219.5.5.5h3c.281 0 .5-.219.5-.5M18 11c0-2.859-3-5-5.688-5-2.547 0-4.453 1.094-5.797 3.328a.49.49 0 0 0 .125.656l2.063 1.563a.48.48 0 0 0 .297.094.5.5 0 0 0 .391-.187c.734-.938 1.047-1.219 1.344-1.437.266-.187.781-.375 1.344-.375 1 0 1.922.641 1.922 1.328 0 .812-.422 1.219-1.375 1.656-1.109.5-2.625 1.797-2.625 3.313v.562c0 .281.219.5.5.5h3c.281 0 .5-.219.5-.5 0-.359.453-1.125 1.188-1.547 1.188-.672 2.812-1.578 2.812-3.953zm6 3c0 6.625-5.375 12-12 12S0 20.625 0 14 5.375 2 12 2s12 5.375 12 12"/></svg>');--icon-chevron-left:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 21 28"><path fill="currentColor" d="M18.297 4.703 10 13l8.297 8.297a.99.99 0 0 1 0 1.406l-2.594 2.594a.99.99 0 0 1-1.406 0L2.703 13.703a.99.99 0 0 1 0-1.406L14.297.703a.99.99 0 0 1 1.406 0l2.594 2.594a.99.99 0 0 1 0 1.406"/></svg>');--icon-chevron-right:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19 28"><path fill="currentColor" d="M17.297 13.703 5.703 25.297a.99.99 0 0 1-1.406 0l-2.594-2.594a.99.99 0 0 1 0-1.406L10 13 1.703 4.703a.99.99 0 0 1 0-1.406L4.297.703a.99.99 0 0 1 1.406 0l11.594 11.594a.99.99 0 0 1 0 1.406"/></svg>');--icon-revert:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 28"><path fill="currentColor" d="M24 14c0 6.609-5.391 12-12 12a11.97 11.97 0 0 1-9.234-4.328.52.52 0 0 1 .031-.672l2.141-2.156a.6.6 0 0 1 .391-.141.5.5 0 0 1 .359.187A7.91 7.91 0 0 0 12 21.999c4.406 0 8-3.594 8-8s-3.594-8-8-8A7.95 7.95 0 0 0 6.563 8.14l2.141 2.156a.96.96 0 0 1 .219 1.078 1 1 0 0 1-.922.625h-7c-.547 0-1-.453-1-1v-7c0-.406.25-.766.625-.922a.96.96 0 0 1 1.078.219l2.031 2.016c2.203-2.078 5.187-3.313 8.266-3.313 6.609 0 12 5.391 12 12zM14 9.5v7c0 .281-.219.5-.5.5h-5a.494.494 0 0 1-.5-.5v-1c0-.281.219-.5.5-.5H12V9.5c0-.281.219-.5.5-.5h1c.281 0 .5.219.5.5"/></svg>');--icon-text-indent:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-text-indent-left" viewBox="0 0 16 16"><path d="M2 3.5a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5m.646 2.146a.5.5 0 0 1 .708 0l2 2a.5.5 0 0 1 0 .708l-2 2a.5.5 0 0 1-.708-.708L4.293 8 2.646 6.354a.5.5 0 0 1 0-.708M7 6.5a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1h-6a.5.5 0 0 1-.5-.5m0 3a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1h-6a.5.5 0 0 1-.5-.5m-5 3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5"/></svg>');--icon-text-outdent:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-text-indent-right" viewBox="0 0 16 16"><path d="M2 3.5a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5m10.646 2.146a.5.5 0 0 1 .708.708L11.707 8l1.647 1.646a.5.5 0 0 1-.708.708l-2-2a.5.5 0 0 1 0-.708zM2 6.5a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1h-6a.5.5 0 0 1-.5-.5m0 3a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1h-6a.5.5 0 0 1-.5-.5m0 3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5"/></svg>');--icon-text-align-left:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M2 12.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5m0-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5m0-3a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5m0-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5"/></svg>');--icon-text-align-center:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M4 12.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5m-2-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5m2-3a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5m-2-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5"/></svg>');--icon-text-align-right:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M6 12.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5m-4-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5m4-3a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5m-4-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5"/></svg>');--icon-text-align-top:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath d='M8 15a.5.5 0 0 0 .5-.5V5.707l3.146 3.146a.5.5 0 0 0 .707-.707l-4-4a.5.5 0 0 0-.706-.001l-.001.001-4 4a.5.5 0 0 0 .708.707L7.5 5.707V14.5a.5.5 0 0 0 .5.5'/%3E%3Cpath fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-miterlimit='10' d='M3 1.5h10'/%3E%3C/svg%3E");--icon-text-align-middle:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M1 8a.5.5 0 0 1 .5-.5h13a.5.5 0 0 1 0 1h-13A.5.5 0 0 1 1 8m7-8a.5.5 0 0 1 .5.5v3.793l1.146-1.147a.5.5 0 0 1 .708.708l-2 2a.5.5 0 0 1-.708 0l-2-2a.5.5 0 1 1 .708-.708L7.5 4.293V.5A.5.5 0 0 1 8 0m-.5 11.707-1.146 1.147a.5.5 0 0 1-.708-.708l2-2a.5.5 0 0 1 .708 0l2 2a.5.5 0 0 1-.708.708L8.5 11.707V15.5a.5.5 0 0 1-1 0z"/></svg>');--icon-text-align-bottom:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath d='M8 1a.5.5 0 0 0-.5.5v8.793L4.354 7.146a.5.5 0 0 0-.707.707l4 4a.5.5 0 0 0 .707.001l.001-.001 4-4a.5.5 0 0 0-.708-.707L8.5 10.293V1.5A.5.5 0 0 0 8 1'/%3E%3Cpath fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-miterlimit='10' d='M13 14.5H3'/%3E%3C/svg%3E");--icon-file-menu:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M.54 3.87.5 3a2 2 0 0 1 2-2h3.672a2 2 0 0 1 1.414.586l.828.828A2 2 0 0 0 9.828 3h3.982a2 2 0 0 1 1.992 2.181l-.637 7A2 2 0 0 1 13.174 14H2.826a2 2 0 0 1-1.991-1.819l-.637-7a2 2 0 0 1 .342-1.31zM2.19 4a1 1 0 0 0-.996 1.09l.637 7a1 1 0 0 0 .995.91h10.348a1 1 0 0 0 .995-.91l.637-7A1 1 0 0 0 13.81 4zm4.69-1.707A1 1 0 0 0 6.172 2H2.5a1 1 0 0 0-1 .981l.006.139q.323-.119.684-.12h5.396z"/></svg>');--icon-wrap-text:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M4 5h8a.5.5 0 0 0 0-1H4a.5.5 0 0 0 0 1M10 8H4a.5.5 0 0 0 0 1h6a1.5 1.5 0 0 1 0 3v-1.203l-2.953 1.707L10 14.203V13a2.5 2.5 0 1 0 0-5M3.75 12.5a.5.5 0 0 0 .5.5H6v-1H4.25a.5.5 0 0 0-.5.5"/></svg>');--icon-unmerge-cells:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M1.5 1a.5.5 0 0 0-.5.5v4a.5.5 0 0 1-1 0v-4A1.5 1.5 0 0 1 1.5 0h4a.5.5 0 0 1 0 1zM10 .5a.5.5 0 0 1 .5-.5h4A1.5 1.5 0 0 1 16 1.5v4a.5.5 0 0 1-1 0v-4a.5.5 0 0 0-.5-.5h-4a.5.5 0 0 1-.5-.5M.5 10a.5.5 0 0 1 .5.5v4a.5.5 0 0 0 .5.5h4a.5.5 0 0 1 0 1h-4A1.5 1.5 0 0 1 0 14.5v-4a.5.5 0 0 1 .5-.5m15 0a.5.5 0 0 1 .5.5v4a1.5 1.5 0 0 1-1.5 1.5h-4a.5.5 0 0 1 0-1h4a.5.5 0 0 0 .5-.5v-4a.5.5 0 0 1 .5-.5"/></svg>');--icon-merge-cells:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M5.5 0a.5.5 0 0 1 .5.5v4A1.5 1.5 0 0 1 4.5 6h-4a.5.5 0 0 1 0-1h4a.5.5 0 0 0 .5-.5v-4a.5.5 0 0 1 .5-.5m5 0a.5.5 0 0 1 .5.5v4a.5.5 0 0 0 .5.5h4a.5.5 0 0 1 0 1h-4A1.5 1.5 0 0 1 10 4.5v-4a.5.5 0 0 1 .5-.5M0 10.5a.5.5 0 0 1 .5-.5h4A1.5 1.5 0 0 1 6 11.5v4a.5.5 0 0 1-1 0v-4a.5.5 0 0 0-.5-.5h-4a.5.5 0 0 1-.5-.5m10 1a1.5 1.5 0 0 1 1.5-1.5h4a.5.5 0 0 1 0 1h-4a.5.5 0 0 0-.5.5v4a.5.5 0 0 1-1 0z"/></svg>');--icon-lock:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M8 1a2 2 0 0 1 2 2v4H6V3a2 2 0 0 1 2-2m3 6V3a3 3 0 0 0-6 0v4a2 2 0 0 0-2 2v5a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2M5 8h6a1 1 0 0 1 1 1v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V9a1 1 0 0 1 1-1"/></svg>');--icon-comment:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M14 1a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1h-2.5a2 2 0 0 0-1.6.8L8 14.333 6.1 11.8a2 2 0 0 0-1.6-.8H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zM2 0a2 2 0 0 0-2 2v8a2 2 0 0 0 2 2h2.5a1 1 0 0 1 .8.4l1.9 2.533a1 1 0 0 0 1.6 0l1.9-2.533a1 1 0 0 1 .8-.4H14a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2z"/></svg>');--icon-fill-color:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M6.192 2.78c-.458-.677-.927-1.248-1.35-1.643a3 3 0 0 0-.71-.515c-.217-.104-.56-.205-.882-.02-.367.213-.427.63-.43.896-.003.304.064.664.173 1.044.196.687.556 1.528 1.035 2.402L.752 8.22c-.277.277-.269.656-.218.918.055.283.187.593.36.903.348.627.92 1.361 1.626 2.068.707.707 1.441 1.278 2.068 1.626.31.173.62.305.903.36.262.05.64.059.918-.218l5.615-5.615c.118.257.092.512.05.939-.03.292-.068.665-.073 1.176v.123h.003a1 1 0 0 0 1.993 0H14v-.057a1 1 0 0 0-.004-.117c-.055-1.25-.7-2.738-1.86-3.494a4 4 0 0 0-.211-.434c-.349-.626-.92-1.36-1.627-2.067S8.857 3.052 8.23 2.704c-.31-.172-.62-.304-.903-.36-.262-.05-.64-.058-.918.219l-.217.216zM4.16 1.867c.381.356.844.922 1.311 1.632l-.704.705c-.382-.727-.66-1.402-.813-1.938a3.3 3.3 0 0 1-.131-.673q.137.09.337.274m.394 3.965c.54.852 1.107 1.567 1.607 2.033a.5.5 0 1 0 .682-.732c-.453-.422-1.017-1.136-1.564-2.027l1.088-1.088q.081.181.183.365c.349.627.92 1.361 1.627 2.068.706.707 1.44 1.278 2.068 1.626q.183.103.365.183l-4.861 4.862a1 1 0 0 1-.068-.01c-.137-.027-.342-.104-.608-.252-.524-.292-1.186-.8-1.846-1.46s-1.168-1.32-1.46-1.846c-.147-.265-.225-.47-.251-.607a1 1 0 0 1-.01-.068zm2.87-1.935a2.4 2.4 0 0 1-.241-.561c.135.033.324.11.562.241.524.292 1.186.8 1.846 1.46.45.45.83.901 1.118 1.31a3.5 3.5 0 0 0-1.066.091 11 11 0 0 1-.76-.694c-.66-.66-1.167-1.322-1.458-1.847z"/></svg>');--icon-text-color:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="16" height="16" viewBox="0 0 16 16"><path d="m12.259 14.001-1.389-3.727H5.465l-1.354 3.727h-1.3L7.609 1.397h1.178l4.772 12.604zM8.418 3.604a6 6 0 0 1-.127-.387 4 4 0 0 1-.11-.501h-.035a5.5 5.5 0 0 1-.247.888L5.86 9.211h4.614z"/></svg>');--icon-border-bottom:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M.969 0H0v.969h.5V1h.469V.969H1V.5H.969zm.937 1h.938V0h-.938zm1.875 0h.938V0H3.78v1zm1.875 0h.938V0h-.938zM7.531.969V1h.938V.969H8.5V.5h-.031V0H7.53v.5H7.5v.469zM9.406 1h.938V0h-.938zm1.875 0h.938V0h-.938zm1.875 0h.938V0h-.938zm1.875 0h.469V.969h.5V0h-.969v.5H15v.469h.031zM1 2.844v-.938H0v.938zm6.5-.938v.938h1v-.938zm7.5 0v.938h1v-.938zM1 4.719V3.78H0v.938h1zm6.5-.938v.938h1V3.78h-1zm7.5 0v.938h1V3.78h-1zM1 6.594v-.938H0v.938zm6.5-.938v.938h1v-.938zm7.5 0v.938h1v-.938zM.5 8.5h.469v-.031H1V7.53H.969V7.5H.5v.031H0v.938h.5zm1.406 0h.938v-1h-.938zm1.875 0h.938v-1H3.78v1zm1.875 0h.938v-1h-.938zm2.813 0v-.031H8.5V7.53h-.031V7.5H7.53v.031H7.5v.938h.031V8.5zm.937 0h.938v-1h-.938zm1.875 0h.938v-1h-.938zm1.875 0h.938v-1h-.938zm1.875 0h.469v-.031h.5V7.53h-.5V7.5h-.469v.031H15v.938h.031zM0 9.406v.938h1v-.938zm7.5 0v.938h1v-.938zm8.5.938v-.938h-1v.938zm-16 .937v.938h1v-.938zm7.5 0v.938h1v-.938zm8.5.938v-.938h-1v.938zm-16 .937v.938h1v-.938zm7.5 0v.938h1v-.938zm8.5.938v-.938h-1v.938zM0 15h16v1H0z"/></svg>');--icon-border-top:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M0 0v1h16V0zm1 2.844v-.938H0v.938zm6.5-.938v.938h1v-.938zm7.5 0v.938h1v-.938zM1 4.719V3.78H0v.938h1zm6.5-.938v.938h1V3.78h-1zm7.5 0v.938h1V3.78h-1zM1 6.594v-.938H0v.938zm6.5-.938v.938h1v-.938zm7.5 0v.938h1v-.938zM.5 8.5h.469v-.031H1V7.53H.969V7.5H.5v.031H0v.938h.5zm1.406 0h.938v-1h-.938zm1.875 0h.938v-1H3.78v1zm1.875 0h.938v-1h-.938zm2.813 0v-.031H8.5V7.53h-.031V7.5H7.53v.031H7.5v.938h.031V8.5zm.937 0h.938v-1h-.938zm1.875 0h.938v-1h-.938zm1.875 0h.938v-1h-.938zm1.875 0h.469v-.031h.5V7.53h-.5V7.5h-.469v.031H15v.938h.031zM0 9.406v.938h1v-.938zm7.5 0v.938h1v-.938zm8.5.938v-.938h-1v.938zm-16 .937v.938h1v-.938zm7.5 0v.938h1v-.938zm8.5.938v-.938h-1v.938zm-16 .937v.938h1v-.938zm7.5 0v.938h1v-.938zm8.5.938v-.938h-1v.938zM0 16h.969v-.5H1v-.469H.969V15H.5v.031H0zm1.906 0h.938v-1h-.938zm1.875 0h.938v-1H3.78v1zm1.875 0h.938v-1h-.938zm1.875-.5v.5h.938v-.5H8.5v-.469h-.031V15H7.53v.031H7.5v.469zm1.875.5h.938v-1h-.938zm1.875 0h.938v-1h-.938zm1.875 0h.938v-1h-.938zm1.875-.5v.5H16v-.969h-.5V15h-.469v.031H15v.469z"/></svg>');--icon-border-left:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M0 0v16h1V0zm1.906 1h.938V0h-.938zm1.875 0h.938V0H3.78v1zm1.875 0h.938V0h-.938zM7.531.969V1h.938V.969H8.5V.5h-.031V0H7.53v.5H7.5v.469zM9.406 1h.938V0h-.938zm1.875 0h.938V0h-.938zm1.875 0h.938V0h-.938zm1.875 0h.469V.969h.5V0h-.969v.5H15v.469h.031zM7.5 1.906v.938h1v-.938zm7.5 0v.938h1v-.938zM7.5 3.781v.938h1V3.78h-1zm7.5 0v.938h1V3.78h-1zM7.5 5.656v.938h1v-.938zm7.5 0v.938h1v-.938zM1.906 8.5h.938v-1h-.938zm1.875 0h.938v-1H3.78v1zm1.875 0h.938v-1h-.938zm2.813 0v-.031H8.5V7.53h-.031V7.5H7.53v.031H7.5v.938h.031V8.5zm.937 0h.938v-1h-.938zm1.875 0h.938v-1h-.938zm1.875 0h.938v-1h-.938zm1.875 0h.469v-.031h.5V7.53h-.5V7.5h-.469v.031H15v.938h.031zM7.5 9.406v.938h1v-.938zm8.5.938v-.938h-1v.938zm-8.5.937v.938h1v-.938zm8.5.938v-.938h-1v.938zm-8.5.937v.938h1v-.938zm8.5.938v-.938h-1v.938zM1.906 16h.938v-1h-.938zm1.875 0h.938v-1H3.78v1zm1.875 0h.938v-1h-.938zm1.875-.5v.5h.938v-.5H8.5v-.469h-.031V15H7.53v.031H7.5v.469zm1.875.5h.938v-1h-.938zm1.875 0h.938v-1h-.938zm1.875 0h.938v-1h-.938zm1.875-.5v.5H16v-.969h-.5V15h-.469v.031H15v.469z"/></svg>');--icon-border-right:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M.969 0H0v.969h.5V1h.469V.969H1V.5H.969zm.937 1h.938V0h-.938zm1.875 0h.938V0H3.78v1zm1.875 0h.938V0h-.938zM7.531.969V1h.938V.969H8.5V.5h-.031V0H7.53v.5H7.5v.469zM9.406 1h.938V0h-.938zm1.875 0h.938V0h-.938zm1.875 0h.938V0h-.938zM16 0h-1v16h1zM1 2.844v-.938H0v.938zm6.5-.938v.938h1v-.938zM1 4.719V3.78H0v.938h1zm6.5-.938v.938h1V3.78h-1zM1 6.594v-.938H0v.938zm6.5-.938v.938h1v-.938zM.5 8.5h.469v-.031H1V7.53H.969V7.5H.5v.031H0v.938h.5zm1.406 0h.938v-1h-.938zm1.875 0h.938v-1H3.78v1zm1.875 0h.938v-1h-.938zm2.813 0v-.031H8.5V7.53h-.031V7.5H7.53v.031H7.5v.938h.031V8.5zm.937 0h.938v-1h-.938zm1.875 0h.938v-1h-.938zm1.875 0h.938v-1h-.938zM0 9.406v.938h1v-.938zm7.5 0v.938h1v-.938zM0 11.281v.938h1v-.938zm7.5 0v.938h1v-.938zM0 13.156v.938h1v-.938zm7.5 0v.938h1v-.938zM0 16h.969v-.5H1v-.469H.969V15H.5v.031H0zm1.906 0h.938v-1h-.938zm1.875 0h.938v-1H3.78v1zm1.875 0h.938v-1h-.938zm1.875-.5v.5h.938v-.5H8.5v-.469h-.031V15H7.53v.031H7.5v.469zm1.875.5h.938v-1h-.938zm1.875 0h.938v-1h-.938zm1.875 0h.938v-1h-.938z"/></svg>');--icon-border-double-bottom:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path d="M.969 0H0v.969h.5V1h.469V.969H1V.5H.969zm.937 1h.938V0h-.938zm1.875 0h.938V0H3.78v1zm1.875 0h.938V0h-.938zM7.531.969V1h.938V.969H8.5V.5h-.031V0H7.53v.5H7.5v.469zM9.406 1h.938V0h-.938zm1.875 0h.938V0h-.938zm1.875 0h.938V0h-.938zm1.875 0h.469V.969h.5V0h-.969v.5H15v.469h.031zM1 2.844v-.938H0v.938zm6.5-.938v.938h1v-.938zm7.5 0v.938h1v-.938zM1 4.719V3.78H0v.938zm6.5-.938v.938h1V3.78h-1zm7.5 0v.938h1V3.78h-1zM1 6.594v-.938H0v.938zm6.5-.938v.938h1v-.938zm7.5 0v.938h1v-.938zM.5 8.5h.469v-.031H1V7.53H.969V7.5H.5v.031H0v.938h.5zm1.406 0h.938v-1h-.938zm1.875 0h.938v-1H3.78v1zm1.875 0h.938v-1h-.938zm2.813 0v-.031H8.5V7.53h-.031V7.5H7.53v.031H7.5v.938h.031V8.5zm.937 0h.938v-1h-.938zm1.875 0h.938v-1h-.938zm1.875 0h.938v-1h-.938zm1.875 0h.469v-.031h.5V7.53h-.5V7.5h-.469v.031H15v.938h.031zM0 9.406v.938h1v-.938zm7.5 0v.938h1v-.938zm8.5.938v-.938h-1v.938zm-16 .937v.938h1v-.938zm7.5 0v.938h1v-.938zm8.5.938v-.938h-1v.938zM0 15h16v1H0zm0-2h16v1H0z"/></svg>');--icon-border-all:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M0 0h16v16H0zm1 1v6.5h6.5V1zm7.5 0v6.5H15V1zM15 8.5H8.5V15H15zM7.5 15V8.5H1V15z"/></svg>');--icon-border-outer:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M7.5 1.906v.938h1v-.938zm0 1.875v.938h1V3.78h-1zm0 1.875v.938h1v-.938zM1.906 8.5h.938v-1h-.938zm1.875 0h.938v-1H3.78v1zm1.875 0h.938v-1h-.938zm2.813 0v-.031H8.5V7.53h-.031V7.5H7.53v.031H7.5v.938h.031V8.5zm.937 0h.938v-1h-.938zm1.875 0h.938v-1h-.938zm1.875 0h.938v-1h-.938zM7.5 9.406v.938h1v-.938zm0 1.875v.938h1v-.938zm0 1.875v.938h1v-.938z"/><path d="M0 0v16h16V0zm1 1h14v14H1z"/></svg>');--icon-border-none:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M0 0h.969v.5H1v.469H.969V1H.5V.969H0zm2.844 1h-.938V0h.938zm1.875 0H3.78V0h.938v1zm1.875 0h-.938V0h.938zm.937 0V.969H7.5V.5h.031V0h.938v.5H8.5v.469h-.031V1zm2.813 0h-.938V0h.938zm1.875 0h-.938V0h.938zm1.875 0h-.938V0h.938zM15.5 1h-.469V.969H15V.5h.031V0H16v.969h-.5zM1 1.906v.938H0v-.938zm6.5.938v-.938h1v.938zm7.5 0v-.938h1v.938zM1 3.78v.938H0V3.78zm6.5.938V3.78h1v.938zm7.5 0V3.78h1v.938zM1 5.656v.938H0v-.938zm6.5.938v-.938h1v.938zm7.5 0v-.938h1v.938zM.969 8.5H.5v-.031H0V7.53h.5V7.5h.469v.031H1v.938H.969zm1.875 0h-.938v-1h.938zm1.875 0H3.78v-1h.938v1zm1.875 0h-.938v-1h.938zm1.875-.031V8.5H7.53v-.031H7.5V7.53h.031V7.5h.938v.031H8.5v.938zm1.875.031h-.938v-1h.938zm1.875 0h-.938v-1h.938zm1.875 0h-.938v-1h.938zm1.406 0h-.469v-.031H15V7.53h.031V7.5h.469v.031h.5v.938h-.5zM0 10.344v-.938h1v.938zm7.5 0v-.938h1v.938zm8.5-.938v.938h-1v-.938zM0 12.22v-.938h1v.938zm7.5 0v-.938h1v.938zm8.5-.938v.938h-1v-.938zM0 14.094v-.938h1v.938zm7.5 0v-.938h1v.938zm8.5-.938v.938h-1v-.938zM.969 16H0v-.969h.5V15h.469v.031H1v.469H.969zm1.875 0h-.938v-1h.938zm1.875 0H3.78v-1h.938v1zm1.875 0h-.938v-1h.938zm.937 0v-.5H7.5v-.469h.031V15h.938v.031H8.5v.469h-.031v.5zm2.813 0h-.938v-1h.938zm1.875 0h-.938v-1h.938zm1.875 0h-.938v-1h.938zm.937 0v-.5H15v-.469h.031V15h.469v.031h.5V16z"/></svg>');--icon-palette:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M0 .5A.5.5 0 0 1 .5 0h5a.5.5 0 0 1 .5.5v5.277l4.147-4.131a.5.5 0 0 1 .707 0l3.535 3.536a.5.5 0 0 1 0 .708L10.261 10H15.5a.5.5 0 0 1 .5.5v5a.5.5 0 0 1-.5.5H3a3 3 0 0 1-2.121-.879A3 3 0 0 1 0 13.044m6-.21 7.328-7.3-2.829-2.828L6 7.188zM4.5 13a1.5 1.5 0 1 0-3 0 1.5 1.5 0 0 0 3 0M15 15v-4H9.258l-4.015 4zM0 .5v12.495zM0 12.995V13z"/></svg>');--icon-layout:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="20" height="20" viewBox="0 0 20 20"><path d="m3 0 17 17.156v-.114z"/><path d="M3 0H0v16h1V1h1.585L19 17.455V19H4v1h16v-2.844z"/><path d="M6.886 3.922 5.343 5.465a.5.5 0 0 0 .708.707l1.539-1.54zM9.702 6.763l-1.53 1.53A.5.5 0 0 0 8.879 9l1.526-1.526zM12.517 9.604 11 11.121a.5.5 0 0 0 .707.707l1.514-1.514zM15.332 12.445l-1.504 1.504a.5.5 0 0 0 .707.707l1.501-1.5zM1 16H0a4 4 0 0 0 4 4v-1c-1.654 0-3-1.346-3-3M5 9v6h6zm1 2.414L8.586 14H6z"/></svg>');--icon-freeze:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M8 16a.5.5 0 0 1-.5-.5v-1.293l-.646.647a.5.5 0 0 1-.707-.708L7.5 12.793V8.866l-3.4 1.963-.496 1.85a.5.5 0 1 1-.966-.26l.237-.882-1.12.646a.5.5 0 0 1-.5-.866l1.12-.646-.884-.237a.5.5 0 1 1 .26-.966l1.848.495L7 8 3.6 6.037l-1.85.495a.5.5 0 0 1-.258-.966l.883-.237-1.12-.646a.5.5 0 1 1 .5-.866l1.12.646-.237-.883a.5.5 0 1 1 .966-.258l.495 1.849L7.5 7.134V3.207L6.147 1.854a.5.5 0 1 1 .707-.708l.646.647V.5a.5.5 0 1 1 1 0v1.293l.647-.647a.5.5 0 1 1 .707.708L8.5 3.207v3.927l3.4-1.963.496-1.85a.5.5 0 1 1 .966.26l-.236.882 1.12-.646a.5.5 0 0 1 .5.866l-1.12.646.883.237a.5.5 0 1 1-.26.966l-1.848-.495L9 8l3.4 1.963 1.849-.495a.5.5 0 0 1 .259.966l-.883.237 1.12.646a.5.5 0 0 1-.5.866l-1.12-.646.236.883a.5.5 0 1 1-.966.258l-.495-1.849-3.4-1.963v3.927l1.353 1.353a.5.5 0 0 1-.707.708l-.647-.647V15.5a.5.5 0 0 1-.5.5z"/></svg>');--icon-column-chart:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="20" height="20" viewBox="0 0 20 20"><path d="M4.5 17.5a.5.5 0 0 1-1 0v-5a.5.5 0 0 1 1 0zM12.5 17.5a.5.5 0 0 1-1 0v-9a.5.5 0 0 1 1 0zM16.5 17.5a.5.5 0 0 1-1 0v-13a.5.5 0 0 1 1 0zM8.5 17.5a.5.5 0 0 1-1 0v-14a.5.5 0 0 1 1 0z"/></svg>');--icon-donut-chart:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="20" height="20" viewBox="0 0 20 20"><path d="M12 1.23v1.548c2.526.701 4.5 2.699 5.203 5.222h1.565A9.01 9.01 0 0 0 12 1.23M2.5 10c0-3.51 2.426-6.456 5.688-7.27V1.183A9 9 0 0 0 1 10c0 1.761.513 3.397 1.387 4.784l1.093-1.093A7.43 7.43 0 0 1 2.5 10M17.221 12c-.878 3.166-3.778 5.5-7.221 5.5a7.45 7.45 0 0 1-3.692-.979l-1.093 1.093A8.96 8.96 0 0 0 10 19c4.282 0 7.859-2.993 8.77-7z"/></svg>');--icon-bar-chart:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="20" height="20" viewBox="0 0 20 20"><path d="M2.5 4.5a.5.5 0 0 1 0-1h5a.5.5 0 0 1 0 1zM2.5 12.5a.5.5 0 0 1 0-1h9a.5.5 0 0 1 0 1zM2.5 16.5a.5.5 0 0 1 0-1h13a.5.5 0 0 1 0 1zM2.5 8.5a.5.5 0 0 1 0-1h14a.5.5 0 0 1 0 1z"/></svg>');--icon-line-chart:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="20" height="20" viewBox="0 0 20 20"><path d="m1 8 3-3 7 5 8-8v2l-8 8-7-5-3 3z"/></svg>');--icon-image:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M6.002 5.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0"/><path d="M2.002 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm12 1a1 1 0 0 1 1 1v6.5l-3.777-1.947a.5.5 0 0 0-.577.093l-3.71 3.71-2.66-1.772a.5.5 0 0 0-.63.062L1.002 12V3a1 1 0 0 1 1-1z"/></svg>');--icon-recalculate:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="20" height="20" viewBox="0 0 20 20"><path d="M9.478 4.022c2.402-.209 4.583 1.047 5.711 3.014l1.083-.095c-1.233-2.528-3.912-4.175-6.881-3.916-2.97.26-5.321 2.347-6.098 5.051l1.083-.095c.768-2.132 2.698-3.748 5.102-3.959M10.523 15.977c-2.403.211-4.585-1.047-5.712-3.013l-1.08.095c1.234 2.527 3.91 4.175 6.879 3.914 2.971-.259 5.32-2.347 6.095-5.05l-1.08.095c-.769 2.132-2.699 3.749-5.102 3.959"/><path d="m2.272 15.616 5.197-3-4.098-1.097zM17.728 4.384l-5.197 3 4.098 1.098z"/></svg>');--icon-check:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M13.854 3.646a.5.5 0 0 1 0 .708l-7 7a.5.5 0 0 1-.708 0l-3.5-3.5a.5.5 0 1 1 .708-.708L6.5 10.293l6.646-6.647a.5.5 0 0 1 .708 0"/></svg>');--icon-table:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm15 2h-4v3h4zm0 4h-4v3h4zm0 4h-4v3h3a1 1 0 0 0 1-1zm-5 3v-3H6v3zm-5 0v-3H1v2a1 1 0 0 0 1 1zm-4-4h4V8H1zm0-4h4V4H1zm5-3v3h4V4zm4 4H6v3h4z"/></svg>')}.treb-main.treb-main .treb-layout-header{overflow:hidden;overflow-x:scroll;position:relative;-ms-overflow-style:none;scrollbar-width:none}.treb-main.treb-main .treb-layout-header::-webkit-scrollbar{display:none}.treb-main.treb-main .treb-toolbar{color:var(--treb-toolbar-color,var(--treb-ui-color,#333));display:flex;flex-direction:row;font-size:var(--treb-toolbar-font-size,inherit);gap:.5rem}.treb-main.treb-main .treb-toolbar>div{display:flex;flex-direction:row}.treb-main.treb-main .treb-toolbar>div>input,.treb-main.treb-main .treb-toolbar>input{background-color:var(--treb-toolbar-button-background,transparent);border:1px solid var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));height:32px;overflow:hidden;padding-left:.5em;padding-right:.5em;text-overflow:ellipsis}.treb-main.treb-main .treb-toolbar>.treb-menu>button{border-radius:3px}.treb-main.treb-main .treb-toolbar>.group>.treb-menu+button,.treb-main.treb-main .treb-toolbar>.group>button+.treb-menu>button,.treb-main.treb-main .treb-toolbar>.group>button+button,.treb-main.treb-main .treb-toolbar>.group>input+.treb-menu>button,.treb-main.treb-main .treb-toolbar>.group>input+button,.treb-main.treb-main .treb-toolbar>[composite]>.treb-menu+button,.treb-main.treb-main .treb-toolbar>[composite]>button+.treb-menu>button,.treb-main.treb-main .treb-toolbar>[composite]>button+button,.treb-main.treb-main .treb-toolbar>[composite]>input+.treb-menu>button,.treb-main.treb-main .treb-toolbar>[composite]>input+button{border-left-width:0}.treb-main.treb-main .treb-toolbar>.group>button:first-child,.treb-main.treb-main .treb-toolbar>.group>input:first-child,.treb-main.treb-main .treb-toolbar>[composite]>button:first-child,.treb-main.treb-main .treb-toolbar>[composite]>input:first-child{border-bottom-left-radius:3px;border-top-left-radius:3px}.treb-main.treb-main .treb-toolbar>.group>.treb-menu:last-child>button,.treb-main.treb-main .treb-toolbar>.group>button:last-child,.treb-main.treb-main .treb-toolbar>[composite]>.treb-menu:last-child>button,.treb-main.treb-main .treb-toolbar>[composite]>button:last-child{border-bottom-right-radius:3px;border-top-right-radius:3px}.treb-main.treb-main .treb-toolbar .treb-icon-buttons>button,.treb-main.treb-main .treb-toolbar .treb-menu>button,.treb-main.treb-main .treb-toolbar button[data-icon],.treb-main.treb-main .treb-toolbar>button,.treb-main.treb-main .treb-toolbar>div>button{align-items:center;background-color:var(--treb-toolbar-button-background,transparent);border:1px solid var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));display:flex;flex-direction:column;height:32px;justify-content:center;position:relative;width:32px}.treb-main.treb-main .treb-toolbar .treb-icon-buttons>button[dropdown],.treb-main.treb-main .treb-toolbar .treb-menu>button[dropdown],.treb-main.treb-main .treb-toolbar button[data-icon][dropdown],.treb-main.treb-main .treb-toolbar>button[dropdown],.treb-main.treb-main .treb-toolbar>div>button[dropdown]{width:16px}.treb-main.treb-main .treb-toolbar .treb-icon-buttons>button[dropdown]:after,.treb-main.treb-main .treb-toolbar .treb-menu>button[dropdown]:after,.treb-main.treb-main .treb-toolbar button[data-icon][dropdown]:after,.treb-main.treb-main .treb-toolbar>button[dropdown]:after,.treb-main.treb-main .treb-toolbar>div>button[dropdown]:after{border:5px solid transparent;border-top-color:currentcolor;box-sizing:content-box;content:"";height:0;left:50%;position:absolute;top:18px;transform:translate(-50%,-50%);width:0}.treb-main.treb-main .treb-toolbar .treb-icon-buttons>button:hover,.treb-main.treb-main .treb-toolbar .treb-icon-buttons>button[active],.treb-main.treb-main .treb-toolbar .treb-menu>button:hover,.treb-main.treb-main .treb-toolbar .treb-menu>button[active],.treb-main.treb-main .treb-toolbar button[data-icon]:hover,.treb-main.treb-main .treb-toolbar button[data-icon][active],.treb-main.treb-main .treb-toolbar>button:hover,.treb-main.treb-main .treb-toolbar>button[active],.treb-main.treb-main .treb-toolbar>div>button:hover,.treb-main.treb-main .treb-toolbar>div>button[active]{background-color:var(--treb-toolbar-hover-button-background,#f3f4f6)}.treb-main.treb-main .treb-toolbar .treb-icon-buttons>button[data-color-bar]:after,.treb-main.treb-main .treb-toolbar .treb-menu>button[data-color-bar]:after,.treb-main.treb-main .treb-toolbar button[data-icon][data-color-bar]:after,.treb-main.treb-main .treb-toolbar>button[data-color-bar]:after,.treb-main.treb-main .treb-toolbar>div>button[data-color-bar]:after{background:var(--treb-color-bar-color,var(--treb-default-color,unset));border:1px solid var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));box-sizing:border-box;content:"";display:block;height:6px;position:relative;width:20px}.treb-main.treb-main .treb-toolbar .treb-icon-buttons>button[data-command]:before,.treb-main.treb-main .treb-toolbar .treb-icon-buttons>button[data-icon]:before,.treb-main.treb-main .treb-toolbar .treb-menu>button[data-command]:before,.treb-main.treb-main .treb-toolbar .treb-menu>button[data-icon]:before,.treb-main.treb-main .treb-toolbar button[data-icon][data-command]:before,.treb-main.treb-main .treb-toolbar button[data-icon][data-icon]:before,.treb-main.treb-main .treb-toolbar>button[data-command]:before,.treb-main.treb-main .treb-toolbar>button[data-icon]:before,.treb-main.treb-main .treb-toolbar>div>button[data-command]:before,.treb-main.treb-main .treb-toolbar>div>button[data-icon]:before{background:currentColor;content:"";display:block;height:20px;mask-image:var(--icon);-webkit-mask-image:var(--icon);mask-position:center;-webkit-mask-position:center;mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat;mask-size:var(--icon-size,16px 16px);-webkit-mask-size:var(--icon-size,16px 16px);position:relative;width:20px}.treb-main.treb-main .treb-toolbar .treb-icon-buttons>button[data-command].treb-font-stack:before,.treb-main.treb-main .treb-toolbar .treb-icon-buttons>button[data-icon].treb-font-stack:before,.treb-main.treb-main .treb-toolbar .treb-menu>button[data-command].treb-font-stack:before,.treb-main.treb-main .treb-toolbar .treb-menu>button[data-icon].treb-font-stack:before,.treb-main.treb-main .treb-toolbar button[data-icon][data-command].treb-font-stack:before,.treb-main.treb-main .treb-toolbar button[data-icon][data-icon].treb-font-stack:before,.treb-main.treb-main .treb-toolbar>button[data-command].treb-font-stack:before,.treb-main.treb-main .treb-toolbar>button[data-icon].treb-font-stack:before,.treb-main.treb-main .treb-toolbar>div>button[data-command].treb-font-stack:before,.treb-main.treb-main .treb-toolbar>div>button[data-icon].treb-font-stack:before{display:none}.treb-main.treb-main .treb-toolbar .treb-split{display:flex;flex-direction:column;gap:0}.treb-main.treb-main .treb-toolbar .treb-split button[data-command]{font-size:10px}.treb-main.treb-main .treb-toolbar .treb-split button[data-command]:before{display:none}.treb-main.treb-main .treb-toolbar .treb-split>button{align-items:center;display:flex;height:16px;justify-content:center}.treb-main.treb-main .treb-toolbar .treb-split>button:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.treb-main.treb-main .treb-toolbar .treb-split>button:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px;border-top:0}.treb-main.treb-main .treb-toolbar .treb-font-stack{align-items:flex-start;overflow:hidden;width:8em}.treb-main.treb-main .treb-toolbar .treb-font-stack:before{display:none}.treb-main.treb-main .treb-toolbar .treb-menu{outline:none}.treb-main.treb-main .treb-toolbar .treb-menu>div{background:var(--treb-toolbar-button-background,#fff);border:1px solid var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));border-radius:3px;box-shadow:0 4px 6px -4px rgba(0,0,0,.4);display:none;flex-direction:column;margin-top:.5rem;position:fixed;top:48px;z-index:20}.treb-main.treb-main .treb-toolbar .treb-menu>div button{background:transparent;border:0;margin:3px 0;padding:.4rem 1rem;text-align:left;transition:background-color .125s ease;white-space:nowrap}.treb-main.treb-main .treb-toolbar .treb-menu>div button:hover{background:var(--treb-toolbar-hover-button-background,#f3f4f6)}.treb-main.treb-main .treb-toolbar .treb-menu>div.treb-icon-buttons>.treb-menu>button,.treb-main.treb-main .treb-toolbar .treb-menu>div.treb-icon-buttons>button{padding:0}.treb-main.treb-main .treb-toolbar .treb-menu>div>[separator]{background:var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));height:1px;margin:2px 0}.treb-main.treb-main .treb-toolbar .treb-menu.visible>div,.treb-main.treb-main .treb-toolbar .treb-menu:focus-within>div{display:flex}.treb-main.treb-main .treb-toolbar [data-icon=file-menu]{--icon:var(--icon-file-menu)}.treb-main.treb-main .treb-toolbar [data-command=justify-left]{--icon:var(--icon-text-align-left)}.treb-main.treb-main .treb-toolbar [data-command=justify-right]{--icon:var(--icon-text-align-right)}.treb-main.treb-main .treb-toolbar [data-command=justify-center]{--icon:var(--icon-text-align-center)}.treb-main.treb-main .treb-toolbar [data-command=indent]{--icon:var(--icon-text-indent)}.treb-main.treb-main .treb-toolbar [data-command=outdent]{--icon:var(--icon-text-outdent)}.treb-main.treb-main .treb-toolbar [data-command=align-top]{--icon:var(--icon-text-align-top)}.treb-main.treb-main .treb-toolbar [data-command=align-middle]{--icon:var(--icon-text-align-middle)}.treb-main.treb-main .treb-toolbar [data-command=align-bottom]{--icon:var(--icon-text-align-bottom)}.treb-main.treb-main .treb-toolbar [data-command=merge-cells]{--icon:var(--icon-merge-cells)}.treb-main.treb-main .treb-toolbar [data-command=unmerge-cells]{--icon:var(--icon-unmerge-cells)}.treb-main.treb-main .treb-toolbar [data-command=fill-color]{--icon:var(--icon-fill-color)}.treb-main.treb-main .treb-toolbar [data-command=text-color]{--icon:var(--icon-text-color)}.treb-main.treb-main .treb-toolbar [data-command=lock-cells]{--icon:var(--icon-lock)}.treb-main.treb-main .treb-toolbar [data-command=wrap-text]{--icon:var(--icon-wrap-text)}.treb-main.treb-main .treb-toolbar [data-icon=comment]{--icon:var(--icon-comment)}.treb-main.treb-main .treb-toolbar [data-icon=table]{--icon:var(--icon-table)}.treb-main.treb-main .treb-toolbar [data-icon=layout]{--icon:var(--icon-layout)}.treb-main.treb-main .treb-toolbar [data-command=freeze-panes]{--icon:var(--icon-freeze)}.treb-main.treb-main .treb-toolbar [data-command=insert-column-chart]{--icon:var(--icon-column-chart)}.treb-main.treb-main .treb-toolbar [data-command=insert-donut-chart]{--icon:var(--icon-donut-chart)}.treb-main.treb-main .treb-toolbar [data-command=insert-bar-chart]{--icon:var(--icon-bar-chart)}.treb-main.treb-main .treb-toolbar [data-command=insert-line-chart]{--icon:var(--icon-line-chart)}.treb-main.treb-main .treb-toolbar [data-command=insert-image]{--icon:var(--icon-image)}.treb-main.treb-main .treb-toolbar [data-command=border-bottom]{--icon:var(--icon-border-bottom)}.treb-main.treb-main .treb-toolbar [data-command=border-left]{--icon:var(--icon-border-left)}.treb-main.treb-main .treb-toolbar [data-command=border-right]{--icon:var(--icon-border-right)}.treb-main.treb-main .treb-toolbar [data-command=border-top]{--icon:var(--icon-border-top)}.treb-main.treb-main .treb-toolbar [data-command=border-outside]{--icon:var(--icon-border-outer)}.treb-main.treb-main .treb-toolbar [data-command=border-all]{--icon:var(--icon-border-all)}.treb-main.treb-main .treb-toolbar [data-command=border-none]{--icon:var(--icon-border-none)}.treb-main.treb-main .treb-toolbar [data-command=border-double-bottom]{--icon:var(--icon-border-double-bottom)}.treb-main.treb-main .treb-toolbar [data-icon=palette]{--icon:var(--icon-palette)}.treb-main.treb-main .treb-toolbar [data-command=recalculate]{--icon:var(--icon-recalculate);--icon-size:20px 20px}.treb-main.treb-main .treb-toolbar .treb-font-scale{width:4em}.treb-main.treb-main .treb-toolbar .treb-number-format{width:8em}.treb-main.treb-main .treb-toolbar .treb-color-chooser button[data-command=set-color]{align-items:center;display:flex;justify-content:center;padding:0;width:32px}.treb-main.treb-main .treb-toolbar .treb-color-chooser button[data-command=set-color]>svg{pointer-events:none}.treb-main.treb-main .treb-toolbar .treb-color-chooser>div{padding:.75rem}.treb-main.treb-main .treb-toolbar .treb-color-chooser>div+div{padding-top:0}.treb-main.treb-main .treb-toolbar .treb-color-chooser>div:last-child{align-items:center;display:flex;flex-direction:row;gap:.5rem}.treb-main.treb-main .treb-toolbar .treb-color-chooser>div:last-child input{flex-grow:1;padding:0 .5rem}.treb-main.treb-main .treb-toolbar .treb-color-chooser>div:last-child button,.treb-main.treb-main .treb-toolbar .treb-color-chooser>div:last-child input{border:1px solid var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));border-radius:3px;height:32px}.treb-main.treb-main .treb-toolbar .treb-color-chooser .treb-default-swatch button,.treb-main.treb-main .treb-toolbar .treb-color-chooser .treb-swatches button{border:1px solid var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));border-radius:2px;height:18px;margin:0;padding:0;width:18px}.treb-main.treb-main .treb-toolbar .treb-color-chooser .treb-default-swatch .treb-default-color:before,.treb-main.treb-main .treb-toolbar .treb-color-chooser .treb-swatches .treb-default-color:before{background:currentColor;content:"";display:block;height:100%;mask-image:var(--icon-x);-webkit-mask-image:var(--icon-x);mask-position:center;-webkit-mask-position:center;mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat;mask-size:24px 24px;-webkit-mask-size:24px 24px;opacity:.7;position:relative;width:100%}.treb-main.treb-main .treb-toolbar .treb-color-chooser .treb-default-swatch{align-items:center;display:grid;gap:.5rem;grid-template-columns:auto 1fr}.treb-main.treb-main .treb-toolbar .treb-color-chooser .treb-swatches{display:grid;gap:.5rem;grid-template-columns:repeat(10,1fr)}.treb-main.treb-main .treb-toolbar .treb-comment-box textarea{border:1px solid var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));font:inherit;height:10rem;line-height:1.5;margin:.5rem;padding:.25rem;resize:both}.treb-main.treb-main .treb-toolbar .treb-comment-box textarea+div{align-items:center;display:flex;flex-direction:row;gap:.5rem;justify-content:center;padding:0 0 .5rem}.treb-main.treb-main .treb-toolbar .treb-comment-box textarea+div button{border:1px solid var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));border-radius:3px}.treb-main.treb-main .treb-toolbar .treb-font-scale{padding-left:2em;text-align:right;width:5em}.treb-main.treb-main .treb-toolbar [composite][font-scale]{position:relative}.treb-main.treb-main .treb-toolbar .treb-font-scale-icon{border-radius:3px;left:.5em;line-height:1;opacity:.9;pointer-events:none;position:absolute;top:50%;transform:translateY(-50%)}.treb-main.treb-main .treb-toolbar .treb-font-scale-icon:after,.treb-main.treb-main .treb-toolbar .treb-font-scale-icon:before{content:"A";position:relative}.treb-main.treb-main .treb-toolbar .treb-font-scale-icon:before{font-size:1.2em}.treb-main.treb-main .treb-toolbar .treb-font-scale-icon:after{font-size:.9em;left:-.125em}.treb-main.treb-main{--treb-font-stack-default-size:14px;--treb-font-stack-calibri-size:16px;--treb-font-stack-tscu-comic-size:16px;--treb-font-stack-helvetica-neue-size:13px;--treb-font-stack-cambria-size:16px;--treb-font-stack-sitka-text-variant:lining-nums tabular-nums}.treb-main.treb-main.treb-ua-osx{--treb-font-stack-system-ui-size:10pt}.treb-main.treb-main .treb-font-stack-default{font-family:calibri,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,"sans-serif"}.treb-main.treb-main .treb-font-stack-transitional{font-family:Charter,Bitstream Charter,Cambria,serif}.treb-main.treb-main .treb-font-stack-old-style{font-family:Iowan Old Style,Palatino Linotype,URW Palladio L,P052,serif}.treb-main.treb-main .treb-font-stack-handwritten{font-family:Segoe Print,Bradley Hand,Chilanka,TSCu_Comic,casual,cursive}.treb-main.treb-main .treb-font-stack-industrial{font-family:Bahnschrift,DIN Alternate,Franklin Gothic Medium,Nimbus Sans Narrow,sans-serif-condensed,sans-serif}.treb-main.treb-main .treb-font-stack-monospace{font-family:ui-monospace,Cascadia Code,Source Code Pro,Menlo,Consolas,DejaVu Sans Mono,monospace}.treb-main.treb-main .treb-font-stack-ui{font-family:system-ui,sans-serif}.treb-main.treb-main{all:revert;box-sizing:border-box;color:inherit;color-scheme:var(--treb-color-scheme,unset);display:grid;font-family:var(--treb-default-font,system-ui,"BlinkMacSystemFont","Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue","sans-serif");font-family:BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,"sans-serif";font-size:14px;font-style:normal;font-weight:400;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:auto minmax(0,1fr);height:100%;line-height:normal;position:relative;text-align:start;width:100%}.treb-main.treb-main a,.treb-main.treb-main button,.treb-main.treb-main div,.treb-main.treb-main input,.treb-main.treb-main li,.treb-main.treb-main ol,.treb-main.treb-main svg,.treb-main.treb-main textarea,.treb-main.treb-main ul{all:revert;box-sizing:border-box;font-family:var(--treb-default-font,system-ui,"BlinkMacSystemFont","Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue","sans-serif")}.treb-main.treb-main button,.treb-main.treb-main input{color:inherit;font:inherit}.treb-main.treb-main *{box-sizing:border-box}.treb-main.treb-main [contenteditable]{-webkit-user-modify:read-write;-moz-user-modify:read-write}.treb-main.treb-main[animate] .treb-layout-header{transition:height var(--treb-sidebar-transition,.2s ease),opacity var(--treb-sidebar-transition,.2s ease)}.treb-main.treb-main .treb-layout-header{grid-column:1/3;grid-row:1;height:1px;opacity:0}.treb-main.treb-main[toolbar] .treb-layout-header{height:42px;opacity:1}.treb-main.treb-main[dialog] .treb-layout-header,.treb-main.treb-main[dialog]>*{opacity:.6}.treb-main.treb-main[dialog] .treb-dialog-mask{opacity:1;pointer-events:auto}.treb-main.treb-main .treb-layout-spreadsheet{display:flex;flex-direction:row;gap:1em;grid-column:1;grid-row:2;position:relative;transition:opacity .2s ease;z-index:5}.treb-main.treb-main .treb-views.treb-can-revert .treb-view .treb-revert-indicator{opacity:1;pointer-events:auto}.treb-main.treb-main .treb-view{display:grid;flex:1 1 0px;grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(0,1fr) auto;position:relative}.treb-main.treb-main .treb-view .treb-spreadsheet-backdrop{box-shadow:0 4px 6px -4px rgba(0,0,0,.4);grid-column:1;grid-row:2;z-index:2}.treb-main.treb-main .treb-view .treb-spreadsheet-body{position:relative;z-index:4}.treb-main.treb-main .treb-view .treb-spreadsheet-footer{position:relative;z-index:5}.treb-main.treb-main .treb-view .treb-layout-resize-handle,.treb-main.treb-main .treb-view .treb-revert-indicator{display:none}.treb-main.treb-main .treb-view:first-of-type .treb-revert-indicator{align-self:start;border-color:orange transparent transparent orange;border-style:solid;border-width:.5em;display:block;grid-area:2/1/3/2;height:1rem;justify-self:start;opacity:0;overflow:hidden;pointer-events:none;position:relative;transition:opacity .125s ease;width:1rem;z-index:20}.treb-main.treb-main .treb-view:last-of-type .treb-layout-resize-handle{align-self:end;border-bottom:.5rem solid var(--treb-resize-handle-color,#0059b9);border-left:.5rem solid transparent;border-right:.5rem solid var(--treb-resize-handle-color,#0059b9);border-top:.5rem solid transparent;cursor:nw-resize;display:block;grid-area:2/1/3/2;height:1rem;justify-self:end;width:1rem;z-index:20}.treb-main.treb-main[animate] .treb-layout-sidebar{transition:width var(--treb-sidebar-transition,.2s ease),opacity var(--treb-sidebar-transition,.2s ease)}.treb-main.treb-main .treb-layout-sidebar{align-items:center;display:flex;flex-direction:column;gap:.75rem;grid-column:2;grid-row:2;justify-content:flex-start;overflow:hidden;padding-top:3rem;width:2.5rem;width:3rem}.treb-main.treb-main[collapsed] .treb-layout-sidebar{opacity:0;width:0}.treb-main.treb-main[collapsed] .treb-toggle-sidebar-button{background:var(--treb-toolbar-button-background,#fff);border-bottom-right-radius:0;border-color:var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));border-right-color:var(--treb-toolbar-button-background,transparent);border-top-right-radius:0;right:0}.treb-main.treb-main[collapsed] .treb-toggle-sidebar-button:after{mask-image:var(--icon-chevron-left);-webkit-mask-image:var(--icon-chevron-left)}.treb-main.treb-main .treb-layout-sidebar>button,.treb-main.treb-main .treb-toggle-sidebar-button{background:transparent;border:0;margin:0;padding:0}.treb-main.treb-main .treb-layout-sidebar>button:after,.treb-main.treb-main .treb-toggle-sidebar-button:after{background:#ccc;content:"";display:block;height:24px;mask-image:var(--icon);-webkit-mask-image:var(--icon);mask-position:center;-webkit-mask-position:center;mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat;transition:background-color .1s ease;width:24px}.treb-main.treb-main .treb-layout-sidebar>button[data-can-revert=false],.treb-main.treb-main .treb-toggle-sidebar-button[data-can-revert=false]{display:none}.treb-main.treb-main .treb-layout-sidebar>button:hover:after,.treb-main.treb-main .treb-toggle-sidebar-button:hover:after{background:#666}.treb-main.treb-main .treb-layout-sidebar>button[data-command=recalculate],.treb-main.treb-main .treb-toggle-sidebar-button[data-command=recalculate]{--icon:var(--icon-reset)}.treb-main.treb-main .treb-layout-sidebar>button[data-command=toggle-toolbar],.treb-main.treb-main .treb-toggle-sidebar-button[data-command=toggle-toolbar]{--icon:var(--icon-toolbar)}.treb-main.treb-main .treb-layout-sidebar>button[data-command=revert],.treb-main.treb-main .treb-toggle-sidebar-button[data-command=revert]{--icon:var(--icon-revert)}.treb-main.treb-main .treb-layout-sidebar>button[data-command=export-xlsx],.treb-main.treb-main .treb-toggle-sidebar-button[data-command=export-xlsx]{--icon:var(--icon-export)}.treb-main.treb-main .treb-layout-sidebar>button[data-command=about],.treb-main.treb-main .treb-toggle-sidebar-button[data-command=about]{--icon:var(--icon-about)}.treb-main.treb-main .treb-toggle-sidebar-button{align-items:center;background:transparent;border:1px solid transparent;border-radius:12px;bottom:6rem;display:flex;height:24px;justify-content:center;margin:0;padding:0;position:absolute;right:.5rem;right:calc(1.5rem - 12px);width:24px;z-index:39}.treb-main.treb-main .treb-toggle-sidebar-button:after{height:12px;mask-image:var(--icon-chevron-right);-webkit-mask-image:var(--icon-chevron-right);width:12px}.treb-main.treb-main .treb-resize-rect{border:1px dotted var(--treb-resize-frame-color,blue);display:block;height:100%;left:0;position:fixed;top:0;width:100%;z-index:9998}.treb-main.treb-main .treb-resize-mask{height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:9999}treb-spreadsheet{display:block;overflow:hidden;position:relative}.treb-default-size{height:550px;width:800px}`;var $s='<div class="treb-main treb-theme"><div class="treb-layout-header treb-animate"><div class="treb-toolbar"></div></div><div class="treb-dialog-mask"><div data-bind="dialog" class="treb-embed-dialog"><div data-bind="left"><a href="https://treb.app" target="_blank"><div class="treb-icon-64"></div></a></div><div data-bind="middle"><div data-bind="title" class="treb-embed-dialog-title"></div><div data-bind="message" class="treb-embed-dialog-message"></div><div data-bind="about" class="treb-embed-dialog-body"></div></div><button type="button" data-title="close_dialog" data-bind="close" class="treb-close-box"><svg viewBox="0 0 16 16"><path d="M11.854 4.146a.5.5 0 0 1 0 .708l-7 7a.5.5 0 0 1-.708-.708l7-7a.5.5 0 0 1 .708 0z"/><path d="M4.146 4.146a.5.5 0 0 0 0 .708l7 7a.5.5 0 0 0 .708-.708l-7-7a.5.5 0 0 0-.708 0z"/></svg></button></div></div><div class="treb-layout-spreadsheet treb-views"><template class="treb-view-template"><div class="treb-view"><div class="treb-formula-bar notranslate" hidden><div class="treb-address-label"><div></div></div><button class="treb-insert-function-button" data-title="insert_function" data-conditional="insert-function">\u{1D453}<small>(x)</small></button><div class="treb-editor-container"><div contenteditable="true"></div></div></div><div class="treb-spreadsheet-backdrop"></div><div class="treb-spreadsheet-body" role="grid"><div class="treb-grid" tabindex="-1"><div class="treb-overlay-container notranslate" translate="no"><div class="treb-overlay-inset"><div class="treb-overlay-editor" contenteditable tabindex="-1" spellcheck="true" role="gridcell"></div></div></div></div></div><div class="treb-spreadsheet-footer" hidden><button class="treb-delete-tab" data-title="delete_sheet" data-command="delete-tab" data-conditional="delete-tab"><svg tabindex="-1" viewbox="0 0 16 16"><path d="M4,4 L12,12 M12,4 L4,12"/></svg></button><div class="treb-spreadsheet-tab-container"><ol class="treb-spreadsheet-tabs" role="tablist"></ol></div><button class="treb-add-tab" data-command="add-tab" data-conditional="add-tab" data-title="add_sheet">+</button><div class="treb-stats-panel"></div><div class="treb-scale-control" data-conditional="scale-control"></div></div><div class="treb-layout-resize-handle" data-conditional="resize"></div><div class="treb-revert-indicator" data-command="revert-indicator" data-title="document_modified"></div></div></template></div><div class="treb-layout-sidebar treb-animate"><button data-command="recalculate" data-title="recalculate"></button> <button data-command="toggle-toolbar" data-conditional="toolbar" data-title="toggle_toolbar"></button> <button data-command="export-xlsx" data-conditional="export" data-title="export"></button> <button data-command="revert" data-conditional="revert" data-title="revert"></button> <button data-command="about" data-title="about"></button></div><button class="treb-toggle-sidebar-button" data-title="toggle_sidebar"></button></div>';var js='<div class="treb-menu" title="File menu" file-menu><button data-icon="file-menu" menu-target></button><div><button data-command="reset">New document</button><div separator></div><button data-command="import-file">Open file...</button> <button data-command="save-json">Save JSON</button><div separator xlsx-support></div><button data-command="export-xlsx" xlsx-support>Export XLSX</button></div></div><div composite narrow><button data-command="justify-left" data-target="justify" title="Left-align text"></button><div class="treb-menu"><button dropdown title="Text justify options"></button><div class="treb-icon-buttons" data-replace="justify"><button data-command="justify-left" title="Left-align text"></button> <button data-command="justify-center" title="Center-align text"></button> <button data-command="justify-right" title="Right-align text"></button></div></div></div><div composite narrow><button data-command="align-top" data-target="align" title="Align to top"></button><div class="treb-menu"><button dropdown title="Text align options"></button><div class="treb-icon-buttons" data-replace="align"><button data-command="align-top" title="Align to top"></button> <button data-command="align-middle" title="Align to middle"></button> <button data-command="align-bottom" title="Align to bottom"></button></div></div></div><div class="group" wide><button data-command="justify-left" title="Left-align text"></button> <button data-command="justify-center" title="Center-align text"></button> <button data-command="justify-right" title="Right-align text"></button></div><div class="group" wide><button data-command="align-top" title="Align to top"></button> <button data-command="align-middle" title="Align to middle"></button> <button data-command="align-bottom" title="Align to bottom"></button></div><div class="group" wide indent-group><button data-command="outdent" title="Decrease indent"></button> <button data-command="indent" title="Incrase indent"></button></div><div class="group"><button data-command="wrap-text" title="Wrap text"></button> <button data-command="merge-cells" data-id="merge" data-inactive-title="Merge cells" data-active-title="Unmerge cells"></button> <button data-command="lock-cells" data-inactive-title="Lock cells" data-active-title="Unlock cells"></button> <button data-command="freeze-panes" data-inactive-title="Freeze panes" data-active-title="Unfreeze panes" freeze-button></button> <button data-command="insert-table" data-icon="table" data-inactive-title="Insert table" data-active-title="Remove table" table-button></button><div class="treb-menu"><button data-icon="comment" data-inactive-title="Comment" data-active-title="Update comment"></button><div class="treb-comment-box"><textarea></textarea><div><button data-command="clear-comment">Clear</button> <button data-command="update-comment">Save</button></div></div></div></div><div composite><button data-command="border-bottom" data-target="border" title="Bottom border"></button><div class="treb-menu"><button dropdown title="Border options"></button><div class="treb-icon-buttons" data-replace="border"><button data-command="border-top" title="Top border"></button> <button data-command="border-left" title="Left border"></button> <button data-command="border-right" title="Right border"></button> <button data-command="border-bottom" title="Bottom border"></button> <button data-command="border-double-bottom" title="Double bottom border"></button> <button data-command="border-outside" title="Outside borders"></button> <button data-command="border-all" title="All borders"></button> <button data-command="border-none" title="Clear borders"></button><div separator></div><div class="treb-menu treb-color-menu treb-submenu" data-color-command="border-color" data-replace-color="border" title="Border color" data-default-color-text="Default border color"><button data-icon="palette" data-color-bar="border" data-color="{}"></button></div></div></div></div><div composite><button data-command="fill-color" data-color-bar="fill" data-color="{}" title="Fill color"></button><div class="treb-menu treb-color-menu" data-color-command="fill-color" data-replace-color="fill" data-default-color-text="No fill"><button dropdown title="Color options"></button><div class="treb-color-chooser"><div class="treb-caption">Theme colors</div><div class="treb-swatches"></div><div class="treb-caption">No color</div><div class="treb-default-swatch"><button class="treb-default-color" data-command="set-color" data-color="{}"></button> <span class="treb-default-color-label" data-command="set-color" data-color="{}">...</span></div><div class="treb-caption">Other colors</div><div class="treb-swatches"></div><div><input placeholder="New color" class="treb-color-input"> <button data-command="set-color" data-color=""><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" viewBox="0 0 16 16"><path d="M13.854 3.646a.5.5 0 0 1 0 .708l-7 7a.5.5 0 0 1-.708 0l-3.5-3.5a.5.5 0 1 1 .708-.708L6.5 10.293l6.646-6.647a.5.5 0 0 1 .708 0z"/></svg></button></div></div></div></div><div composite><button data-command="text-color" data-color-bar="text" data-color="{}" title="Text color"></button><div class="treb-menu treb-color-menu" data-color-command="text-color" data-replace-color="text" data-default-color-text="Default text color"><button dropdown title="Color options"></button></div></div><div composite font-scale><div class="treb-font-scale-icon"></div><input class="treb-font-scale" title="Font scale"><div class="treb-menu"><button dropdown title="Font scale options"></button><div><button data-command="font-scale" data-scale="0.8">0.80</button> <button data-command="font-scale" data-scale="0.9">0.90</button> <button data-command="font-scale" data-scale="1.0">1.00</button> <button data-command="font-scale" data-scale="1.1">1.10</button> <button data-command="font-scale" data-scale="1.25">1.25</button> <button data-command="font-scale" data-scale="1.5">1.50</button> <button data-command="font-scale" data-scale="2.0">2.00</button></div></div></div><div composite font-stack><button class="treb-font-stack" data-command="font-stack" data-font-stack="" title="Font stack"></button><div class="treb-menu"><button dropdown title="Font stack options"></button><div><button data-command="font-stack" data-font-stack="default"></button> <button data-command="font-stack" data-font-stack="transitional"></button> <button data-command="font-stack" data-font-stack="monospace"></button> <button data-command="font-stack" data-font-stack="handwritten"></button> <button data-command="font-stack" data-font-stack="ui"></button></div></div></div><div composite><input class="treb-number-format" title="Number format"><div class="treb-menu"><button dropdown title="Number formats"></button><div class="treb-number-format-menu"></div></div></div><div class="treb-split"><button data-command="decrease-precision" title="Decrease precision"></button> <button data-command="increase-precision" title="Increase precision"></button></div><div class="treb-menu"><button data-icon="layout" title="Rows & columns"></button><div><button data-command="insert-row">Insert row</button> <button data-command="insert-column">Insert column</button> <button data-command="delete-row">Delete row</button> <button data-command="delete-column">Delete column</button><div separator add-remove-sheet></div><button data-command="insert-sheet" add-remove-sheet>Add sheet</button> <button data-command="delete-sheet" add-remove-sheet>Delete sheet</button></div></div><div composite chart-menu><button data-command="insert-column-chart" data-target="annotation" title="Insert column chart"></button><div class="treb-menu"><button dropdown title="Chart options"></button><div class="treb-icon-buttons" data-replace="annotation"><button data-command="insert-column-chart" title="Insert column chart"></button> <button data-command="insert-donut-chart" title="Insert donut chart"></button> <button data-command="insert-bar-chart" title="Insert bar chart"></button> <button data-command="insert-line-chart" title="Insert line chart"></button><div separator></div><button data-command="insert-image" title="Insert image"></button></div></div></div><button data-command="recalculate" title="Recalculate" recalculate-button></button>';var Js={close_dialog:"Close dialog",insert_function:"Insert function...",delete_sheet:"Delete current sheet",add_sheet:"Add sheet",document_modified:"This document has been modified from the original version.",recalculate:"Recalculate",toggle_toolbar:"Toggle toolbar",export:"Export as XLSX",revert:"Revert to original version",about:"What's this?",toggle_sidebar:"Toggle sidebar"},wt=class{root;sheet;border_color;color_bar_elements={};replace_targets={};layout_element;views;revert_button;revert_state=!1;toolbar_controls={};swatch_lists={};DOM;constructor(e){typeof e=="string"&&(e=document.querySelector(e)),this.DOM=Me.GetInstance(e?.ownerDocument),this.DOM.view&&e instanceof this.DOM.view.HTMLElement&&(this.root=e,this.DOM.doc?.head.querySelector("style[treb-stylesheet]")||this.DOM.doc?.head.prepend(this.DOM.Create("style",void 0,void 0,{text:Bs,attrs:{"treb-stylesheet":""}})))}CoerceAttributeValue(e){if(e===null||e.toString().toLowerCase()==="true"||e==="")return!0;if(e.toLowerCase()==="false")return!1;{let t=Number(e);if(!isNaN(t))return t}return e||""}ParseOptionAttributes(){let e={};if(this.root){let t=this.root.getAttributeNames();for(let r of t){switch(r){case"class":case"style":case"id":continue;case"data-options":case"options":{let n=(this.root.getAttribute(r)||"").split(",");for(let o of n){let s=o.split(/=/);s.length===1?e[s[0]]=!0:e[s[0]]=this.CoerceAttributeValue(s[1])}}continue;case"data-treb":continue;case"inline-document":continue;case"src":e.document=this.root.getAttribute("src")||void 0;continue}e[r.replace(/-/g,"_")]=this.CoerceAttributeValue(this.root.getAttribute(r))}}return{...e}}AttachElement(e={}){if(e={...this.ParseOptionAttributes(),...e},this.root){if(!e.headless){let t=this.root.getBoundingClientRect();(!t.width||!t.height)&&this.root.classList.add("treb-default-size")}if(this.root.hasAttribute("inline-document")){let t=this.root.getAttribute("inline-document")||"";for(let r of Array.from(this.root.children))if(this.DOM.view&&r instanceof this.DOM.view.HTMLScriptElement&&r.type==="application/json"){let i=r.getAttribute("name")||"";if(i===t||!i&&t==="true"){let n=r.textContent;if(n)try{e.inline_document=JSON.parse(n)}catch(o){console.error(o)}break}}e.inline_document||console.warn("inline document failed")}this.root.innerHTML=$s,e.container=this.root.querySelector(".treb-layout-spreadsheet")}this.sheet=new ui(e),this.root&&this.CreateLayout(this.sheet,this.root)}CreateLayout(e,t){new ResizeObserver(()=>e.Resize()).observe(t),this.layout_element=t.querySelector(".treb-main");let i=t.querySelector(".treb-toggle-sidebar-button");if(i&&this.layout_element){let c=this.layout_element;i.addEventListener("click",()=>{let d=c.getAttribute("collapsed");typeof d=="string"&&(d===""||d==="true")?c.removeAttribute("collapsed"):c.setAttribute("collapsed","")})}(e.options.toolbar==="show"||e.options.toolbar==="show-narrow")&&this.layout_element?.setAttribute("toolbar",""),e.options.collapsed&&this.layout_element?.setAttribute("collapsed","");let n=t.querySelector("[data-command=revert-indicator]");this.DOM.view&&n instanceof this.DOM.view.HTMLElement&&(e.options.revert_indicator?n.addEventListener("click",()=>{e.HandleToolbarMessage({command:"revert-indicator"})}):n.style.display="none"),t.querySelector(".treb-layout-sidebar")?.addEventListener("click",c=>{let d=c.target;if(d.dataset.command)switch(d.dataset.command){case"toggle-toolbar":this.ToggleToolbar();break;default:e.HandleToolbarMessage({command:d.dataset.command});break}}),e.options.toolbar&&this.AttachToolbar(e,t);let s={"table-button":!!e.options.table_button,revert:!!e.options.revert_button,toolbar:!!e.options.toolbar,export:!!e.options.export,"insert-function":!!e.options.insert_function_button,resize:!!e.options.resizable,"add-tab":!!e.options.add_tab,"delete-tab":!!e.options.delete_tab||!!e.options.add_tab};for(let[c,d]of Object.entries(s))if(!d){let u=this.layout_element.querySelectorAll(`[data-conditional=${c}]`);for(let h of Array.from(u))h.style.display="none"}if(e.options.revert_button&&(this.revert_button=this.layout_element.querySelector("[data-command=revert]")||void 0),e.options.resizable){let c={width:0,height:0},d={x:0,y:0},u={x:0,y:0};this.views=t.querySelector(".treb-views")||void 0;let h,f,m=t.querySelector(".treb-layout-resize-handle"),p=()=>_(),b=(x=>{x.buttons===0?_():(u.x=x.screenX-d.x,u.y=x.screenY-d.y,f&&(f.style.width=c.width+u.x+"px",f.style.height=c.height+u.y+"px"))}),_=()=>{if(u.x||u.y){let x=t.getBoundingClientRect();e.options.constrain_width||(t.style.width=x.width+u.x+"px"),t.style.height=x.height+u.y+"px"}h&&(h.removeEventListener("mouseup",p),h.removeEventListener("mousemove",b),h.parentElement?.removeChild(h),h=void 0),f?.parentElement?.removeChild(f),f=void 0};m.addEventListener("mousedown",x=>{x.stopPropagation(),x.preventDefault();let v=t.querySelector(".treb-main");f=this.DOM.Div("treb-resize-rect",v),h=this.DOM.Div("treb-resize-mask",v,{attrs:{style:"cursor: nw-resize;"},events:{mouseup:p,mousemove:b}}),d.x=x.screenX,d.y=x.screenY,u.x=0,u.y=0;let w=this.views?.querySelectorAll(".treb-spreadsheet-body"),y=Array.from(w||[]).map(C=>C.getBoundingClientRect());if(y.length){let C=JSON.parse(JSON.stringify(y.shift()));for(let k of y)C.top=Math.min(k.top,C.top),C.left=Math.min(k.left,C.left),C.right=Math.max(k.right,C.right),C.bottom=Math.max(k.bottom,C.bottom);let S=C.right-C.left,A=C.bottom-C.top;f.style.top=C.top+"px",f.style.left=C.left+"px",f.style.width=S+"px",f.style.height=A+"px",c.width=S,c.height=A}})}let a=Array.from(this.layout_element.querySelectorAll("[data-title]"));for(let c of a)if(c instanceof HTMLElement){if(c.dataset.activeTitle)continue;c.dataset.title&&Js[c.dataset.title]&&(c.title=Js[c.dataset.title])}setTimeout(()=>this.layout_element?.setAttribute("animate",""),250)}ToggleToolbar(){if(this.layout_element){let e=this.layout_element.getAttribute("toolbar");typeof e=="string"&&(e===""||e==="true")?this.layout_element.removeAttribute("toolbar"):this.layout_element.setAttribute("toolbar","")}}UpdateSelectionStyle(e,t,r){let i=e.selection_state;r.value="";for(let a of Object.values(this.toolbar_controls))a&&(a.removeAttribute("active"),a.dataset.inactiveTitle&&(a.title=a.dataset.inactiveTitle));let n=a=>{a&&(a.setAttribute("active",""),a.dataset.activeTitle&&(a.title=a.dataset.activeTitle))};if(i.comment&&(n(this.toolbar_controls.comment),r.value=i.comment),i.style?.locked&&n(this.toolbar_controls.locked),i.frozen&&n(this.toolbar_controls.freeze),i.style?.wrap&&n(this.toolbar_controls.wrap),this.toolbar_controls.table&&(i.table?(n(this.toolbar_controls.table),this.toolbar_controls.table.dataset.command="remove-table"):this.toolbar_controls.table.dataset.command="insert-table"),this.toolbar_controls.merge&&(i.merge?(n(this.toolbar_controls.merge),this.toolbar_controls.merge.dataset.command="unmerge-cells"):this.toolbar_controls.merge.dataset.command="merge-cells"),this.toolbar_controls.stack)if(i.style?.font_face)if(i.style.font_face.startsWith("stack:")){let a=i.style.font_face.substring(6);this.toolbar_controls.stack.textContent=Yr[a]||"",this.toolbar_controls.stack.dataset.fontStack=a}else this.toolbar_controls.stack.textContent="",this.toolbar_controls.stack.dataset.fontStack="";else this.toolbar_controls.stack.textContent=Yr.default||"",this.toolbar_controls.stack.dataset.fontStack="default";let o=this.toolbar_controls.format;o&&(i.style?.number_format?o.value=me.SymbolicName(i.style.number_format)||i.style.number_format:o.value="General");let s=this.toolbar_controls.scale;switch(s&&(s.value=e.FormatNumber(i.relative_font_size||1,"0.00")),i.style?.horizontal_align){case"left":n(this.toolbar_controls.left);break;case"center":n(this.toolbar_controls.center);break;case"right":n(this.toolbar_controls.right);break}switch(i.style?.vertical_align){case"top":n(this.toolbar_controls.top);break;case"middle":n(this.toolbar_controls.middle);break;case"bottom":n(this.toolbar_controls.bottom);break}}UpdateDocumentStyles(e,t){{let s=this.DOM.Fragment(),a=e.document_styles.theme_colors.length,c=["Background","Text","Background","Text","Accent"];if(a){let f=e.document_styles.theme_colors[0].length;for(let m=0;m<f;m++)for(let p=0;p<a;p++){let b=e.document_styles.theme_colors[p][m],_=`background: ${b.resolved};`,x=c[p]||c[4];Qr(b.color)&&b.color.tint?x+=` (${(b.color.tint>0?"+":"")+b.color.tint*100}%)`:p===0?this.color_bar_elements.fill?.style.setProperty("--treb-default-color",b.resolved):p===1&&(this.color_bar_elements.text?.style.setProperty("--treb-default-color",b.resolved),this.color_bar_elements.border?.style.setProperty("--treb-default-color",b.resolved)),this.DOM.Create("button",void 0,s,{attrs:{style:_,title:x},data:{command:"set-color",color:JSON.stringify(b.color)}})}}this.swatch_lists.theme?.replaceChildren(s),s=this.DOM.Fragment();let d=["Black","White","Gray","Red","Orange","Yellow","Green","Blue","Indigo","Violet"],u=d.map(f=>f.toLowerCase()),h=e.document_styles.colors.filter(f=>!u.includes(f.toLowerCase()));for(let f of[...d,...h]){let m=`background: ${f.toLowerCase()};`;this.DOM.Create("button",void 0,s,{attrs:{style:m,title:f},data:{command:"set-color",color:JSON.stringify({text:f.toLowerCase()})}})}this.swatch_lists.other?.replaceChildren(s)}let r=["General","Number","Integer","Percent","Fraction","Accounting","Currency","Scientific"],i=["Timestamp","Long Date","Short Date"];for(let s of e.document_styles.number_formats){if(me.SymbolicName(me.Translate(s)))continue;me.Get(s).date_format?i.push(s):r.push(s)}let n=s=>this.DOM.Create("button",void 0,void 0,{text:s,data:{format:s,command:"number-format"}}),o=this.DOM.Fragment();o.append(...r.map(s=>n(s))),o.append(this.DOM.Div(void 0,void 0,{attrs:{separator:""}})),o.append(...i.map(s=>n(s))),t.textContent="",t.append(o)}UpdateRevertState(e){let t=e.can_revert;this.revert_state!==t&&(this.revert_state=t,(this.revert_button||e.options.revert_indicator)&&(this.revert_state?this.views?.classList.add("treb-can-revert"):this.views?.classList.remove("treb-can-revert"),this.revert_button&&(this.revert_button.dataset.canRevert=t?"true":"false",t?(this.revert_button.classList.remove("sidebar-disabled"),this.revert_button.title="Revert to original version"):(this.revert_button.classList.add("sidebar-disabled"),this.revert_button.title="This is the original version of the document"))))}ReplaceTemplate(e,t,r=!0){let i=e.querySelector(t);if(i&&i.parentElement){for(let n of Array.from(i.content.children))i.parentElement.insertBefore(n,i);r&&i.parentElement.removeChild(i)}else console.warn("template not found",t)}AttachToolbar(e,t){let r=t.querySelector(".treb-layout-header"),i=t.querySelector(".treb-toolbar");i.innerHTML=js;let n=[];if(e.options.toolbar==="narrow"||e.options.toolbar==="show-narrow"?n.push(...Array.from(i.querySelectorAll("[wide]"))):n.push(...Array.from(i.querySelectorAll("[narrow]"))),e.options.file_menu||n.push(i.querySelector("[file-menu]")),e.options.indent_buttons||n.push(i.querySelector("[indent-group]")),e.options.font_scale||n.push(i.querySelector("[font-scale]")),!e.options.font_stack)n.push(i.querySelector("[font-stack]"));else{let v=i.querySelectorAll("[font-stack] button[data-font-stack]");for(let w of v)if(w.dataset.fontStack){let y=Yr[w.dataset.fontStack];w.textContent=y||""}}e.options.chart_menu||n.push(i.querySelector("[chart-menu]")),e.options.freeze_button||n.push(i.querySelector("[freeze-button]")),e.options.table_button||n.push(i.querySelector("[table-button]")),!e.options.add_tab&&!e.options.delete_tab&&n.push(...Array.from(i.querySelectorAll("[add-remove-sheet]"))),e.options.toolbar_recalculate_button||n.push(i.querySelector("[recalculate-button]"));for(let v of n)v&&v.parentElement?.removeChild(v);let o=i.querySelector(".treb-color-chooser"),s=i.querySelector(".treb-comment-box textarea");for(let[v,w]of Object.entries({top:"[wide] [data-command=align-top]",middle:"[wide] [data-command=align-middle]",bottom:"[wide] [data-command=align-bottom]",left:"[wide] [data-command=justify-left]",right:"[wide] [data-command=justify-right]",center:"[wide] [data-command=justify-center]",wrap:"[data-command=wrap-text]",merge:"[data-id=merge]",comment:"[data-icon=comment]",locked:"[data-command=lock-cells]",freeze:"[data-command=freeze-panes]",table:"[data-icon=table]",format:"input.treb-number-format",scale:"input.treb-font-scale",stack:"button.treb-font-stack"})){let y=i.querySelector(w);y&&(this.toolbar_controls[v]=y)}let a=o.querySelectorAll(".treb-swatches");this.swatch_lists={theme:a[0],other:a[1]};let c=t.querySelector("[data-command=increase-precision");c&&(c.textContent=this.sheet?.FormatNumber(0,"0.00")||""),c=t.querySelector("[data-command=decrease-precision"),c&&(c.textContent=this.sheet?.FormatNumber(0,"0.0")||""),c=i.querySelector("[data-command=update-comment]"),s.addEventListener("keydown",v=>{v.key==="Enter"&&(v.shiftKey||v.ctrlKey)&&c.click()});for(let v of["border","annotation","align","justify"])this.replace_targets[v]=i.querySelector(`[data-target=${v}`);for(let v of["fill","text","border"])this.color_bar_elements[v]=i.querySelector(`[data-color-bar=${v}]`);i.addEventListener("click",v=>{let w=v.target,y={format:w.dataset.format,scale:w.dataset.scale,font_stack:w.dataset.fontStack},C=w?.dataset.command;if(C){let S=w.parentElement?.dataset.replace;if(S){let A=this.replace_targets[S];A&&(A.dataset.command=C,A.title=w.title||"")}switch(/^border-/.test(C)&&(y.color=this.border_color||{}),C){case"text-color":case"fill-color":y.color={};try{y.color=JSON.parse(w.dataset.color||"{}")}catch(A){console.error(A)}break;case"set-color":C=o.dataset.colorCommand||"",y.color={};try{y.color=JSON.parse(w.dataset.color||"{}")}catch(A){console.error(A)}if(C==="border-color"&&(this.border_color=y.color),o.dataset.target){let A=this.color_bar_elements[o.dataset.target];A&&(A.style.setProperty("--treb-color-bar-color",w.style.backgroundColor),A.dataset.color=w.dataset.color||"{}")}break;case"update-comment":y.comment=s.value;break}e.HandleToolbarMessage({command:C,...y})}});let d=(v,w)=>{let y=i.querySelector(v);if(y){let C="";y.addEventListener("focusin",()=>C=y.value),y.addEventListener("keydown",S=>{switch(S.key){case"Escape":y.value=C,e.Focus();break;case"Enter":w(y.value)||(y.value=C,e.Focus());break;default:return}S.stopPropagation(),S.preventDefault()})}};d("input.treb-number-format",v=>v?(e.HandleToolbarMessage({command:"number-format",format:v}),!0):!1),d("input.treb-font-scale",v=>{let w=Number(v);return!w||isNaN(w)?(console.warn("invalid scale value"),!1):(e.HandleToolbarMessage({command:"font-scale",scale:w}),!0)});let u=o.querySelector("input"),h=o.querySelector("input + button");u.addEventListener("input",v=>{if(v instanceof InputEvent&&v.isComposing)return;h.style.background=u.value||"";let w=h.style.backgroundColor||"#fff",y=ti.MeasureColor(w),C=ee.RGBToHSL(y[0],y[1],y[2]);h.style.color=C.l>.5?"#000":"#fff",h.dataset.color=JSON.stringify(h.style.backgroundColor?{text:h.style.backgroundColor}:{})}),u.addEventListener("keydown",v=>{v.key==="Enter"&&(v.stopPropagation(),v.preventDefault(),h.click())}),/firefox/i.test(navigator.userAgent)?r.addEventListener("scroll",()=>{this.DOM.view&&this.DOM.doc?.activeElement instanceof this.DOM.view.HTMLElement&&this.DOM.doc.activeElement?.blur()}):r.addEventListener("scroll",()=>e.Focus());let f=!1,m=v=>{v.key==="Escape"&&(v.stopPropagation(),v.preventDefault(),Promise.resolve().then(()=>e.Focus()))},p=v=>{if(f){if(v.relatedTarget instanceof Node&&i.contains(v.relatedTarget))return;i.removeEventListener("keydown",m),i.removeEventListener("focusout",p),f=!1}},b=v=>{let w=v.target,y=w?.parentElement;if(w?.classList.contains("treb-menu")){y=w;for(let C of Array.from(y.children))if(C.tagName==="BUTTON"){w=C;break}}else if(!y?.classList.contains("treb-menu"))return;if(w&&y){if(f||(i.addEventListener("focusout",p),i.addEventListener("keydown",m),f=!0),y.dataset.colorCommand){o.querySelector(".treb-default-color")?.setAttribute("title",y.dataset.defaultColorText||"Default color");let oe=o.querySelector(".treb-default-color-label");oe&&(oe.textContent=y.dataset.defaultColorText||"Default color"),y.appendChild(o),o.dataset.colorCommand=y.dataset.colorCommand,o.dataset.target=y.dataset.replaceColor||""}let C=y.querySelector("div"),S=r.getBoundingClientRect(),A=w.getBoundingClientRect(),{left:k}=A,R=y.parentElement;R?.hasAttribute("composite")&&(k=R.firstElementChild.getBoundingClientRect().left);let D=C.getBoundingClientRect();y.classList.contains("treb-submenu")?(C.style.top=A.top-D.height/2+"px",k+A.width+6+D.width>S.right?C.style.left=k-6-D.width+"px":C.style.left=k+A.width+6+"px"):(C.style.top=A.bottom+"px",k+D.width>S.right-6?C.style.left=A.right-D.width+"px":C.style.left=k+"px");let q=C.querySelector("textarea");q&&requestAnimationFrame(()=>q.focus())}},_=this.root?.querySelector(".treb-number-format-menu");_&&(this.UpdateDocumentStyles(e,_),this.UpdateSelectionStyle(e,i,s),e.Subscribe(v=>{switch(v.type){case"focus-view":break;case"data":case"document-change":case"load":case"reset":this.UpdateDocumentStyles(e,_),this.UpdateSelectionStyle(e,i,s),this.UpdateRevertState(e);break;case"theme-change":this.UpdateDocumentStyles(e,_),this.UpdateSelectionStyle(e,i,s);break;case"annotation-selection":case"selection":this.UpdateSelectionStyle(e,i,s);break}}));let x=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);if(i.addEventListener("focusin",v=>{b(v)}),x){let v=Array.from(i.querySelectorAll(".treb-menu"));for(let w of v)w.tabIndex=0;i.addEventListener("mousedown",w=>{b(w)})}}};var hi=class{version="32.13.2";CreateSpreadsheet(e){let t=e.container,r=new wt(t);if(r.AttachElement(e),!r.sheet)throw new Error("construction failed");return r.sheet}},gc=new hi;if(typeof HTMLElement<"u"){class l extends HTMLElement{get sheet(){return this.instance.sheet}instance;constructor(){super(),this.instance=new wt(this)}connectedCallback(){this.instance.AttachElement()}}typeof customElements<"u"&&(customElements.get("treb-spreadsheet")?console.info("custom element treb-spreadsheet is already defined."):customElements.define("treb-spreadsheet",l))}export{gc as TREB,hi as TREBGlobal};
|
|
19
|
+
`)}SaveLocalFile(e="treb.json",t={}){this.SaveToDesktop(e,t)}SaveToDesktop(e="treb.json",t={}){let r=this.grid.model.document_name||"document",i,n,o=e.split(/\./).filter(a=>a.trim().length),s=o.length?o[o.length-1].toLowerCase():"treb";if(o.length<=1||e==="treb.json")if(e==="treb.json"&&(s=e),(s==="csv"||s==="tsv")&&this.grid.model.sheets.length>1){let a=this.grid.active_sheet.name;e=(r+"-"+a).toLowerCase().replace(/\W+/g,"-")+"."+s}else e=r.toLowerCase().replace(/\W+/g,"-")+"."+s;switch(s){case"csv":n=this.ExportDelimited({delimiter:","});break;case"tsv":n=this.ExportDelimited({delimiter:" "});break;case"treb":case"json":case"treb.json":i=this.SerializeDocument({...t}),n=JSON.stringify(i,void 0,t.pretty?2:void 0),this.last_save_version=this.file_version;break;default:throw new Error("invalid file type")}if(n&&e){let a=new Blob([n],{type:"text/plain;charset=utf-8"});this.SaveAs(a,e)}}LoadCSV(e,t){if(this.parent_view)return this.parent_view.LoadCSV(e,t);this.grid.FromCSV(e),this.ResetInternal(),this.grid.Update(!0),this.Publish({type:"load",source:t}),this.UpdateDocumentStyles()}ScrollOffset(e){return this.grid.ScrollOffset(e)}LoadDocument(e,t={}){if(this.parent_view)return this.parent_view.LoadDocument(e,t);if(this.initial_load_source||(this.initial_load_source=t.source),t={flush:!0,recalculate:!1,...t},t.override_selection&&e.sheet_data){let r=Array.isArray(e.sheet_data)?e.sheet_data:[e.sheet_data];for(let i of r)if(i.id===t.override_selection.target.sheet_id){i.selection=t.override_selection;break}}if(this.ImportDocumentData(e,t.override_sheet),this.calculator.Reset(),e.rendered_values&&!t.recalculate?(this.calculator.RebuildClean(!0),this.ApplyConditionalFormats(this.grid.active_sheet,!1),this.grid.Update()):this.Recalculate(),this.InflateAnnotations(),t.flush&&this.FlushUndo(),this.Publish({type:"load",source:t.source}),this.UpdateDocumentStyles(),this.loaded=!0,t.scroll){let r=t.scroll;Promise.resolve().then(()=>this.ScrollTo(r))}}SetNote(e,t){if(typeof e=="string"){let r=this.model.ResolveAddress(e,this.grid.active_sheet);e=Ae(r)?r:r.start}this.grid.SetNote(e,t)}SetValidation(e,t,r){if(typeof e=="string"){let i=this.model.ResolveAddress(e,this.grid.active_sheet);e=wn(i)?new Ee(i.start,i.end):new Ee(i)}if(Ae(e)&&(e=new Ee(e)),typeof t>"u"||Array.isArray(t))this.grid.SetValidation(e,t,r);else{let i=this.model.ResolveArea(t,this.grid.active_sheet);this.grid.SetValidation(e,i,r)}}RemoveFunction(e){let t=e.toUpperCase();this.model.macro_functions.delete(t),this.UpdateAC()}DefineFunction(e,t="",r="0"){if(!e.length||/^[^A-Za-z]/.test(e)||/[^\w_.]/.test(e))throw new Error("invalid function name");typeof t=="string"&&(t=t?t.split(this.parser.argument_separator).map(i=>i.trim()):[]);for(let i of t)if(!i.length||/^[^A-Za-z]/.test(i)||/[^\w_.]/.test(i))throw new Error("invalid argument name");this.RemoveFunction(e),this.grid.model.macro_functions.set(e.toUpperCase(),{name:e,function_def:r,argument_names:t,expression:this.parser.Parse(r).expression}),this.UpdateAC()}SerializeDocument(e={}){e={share_resources:!0,shrink:!0,...e};let t=this.Serialize(e),r={app:"@trebco/treb",version:"32.14.0",revision:this.file_version,name:this.grid.model.document_name,user_data:this.grid.model.user_data,decimal_mark:Je.decimal_separator,...t};if(e.share_resources){let i=1,n=new Map,o=Array.isArray(r.sheet_data)?r.sheet_data:[r.sheet_data],s=c=>{let d=n.get(c);return d||(d=(i++).toString(),n.set(c,d)),`resource:${d}`};for(let c of o)if(c){c.background_image&&(c.background_image=s(c.background_image));for(let d of c.annotations||[])d.type==="image"&&d.data?.src&&(d.data.src=s(d.data.src))}let a={};for(let[c,d]of n.entries())a[d]=c;r.shared_resources=a}return e.rendered_values&&(r.rendered_values=!0),r}Recalculate(e){let t;switch(e?.type){case"data":t=e.area;break;case"composite":t=e.data_area;break}this.calculator.Calculate(t),this.calculator.grid_expanded&&this.grid.UpdateLayout(),this.ApplyConditionalFormats(this.grid.active_sheet,!1),this.grid.Update(!0),this.UpdateAnnotations(),this.Publish({type:"data"}),this.grid.UpdateStats()}SaveLocalStorage(e=this.options.local_storage){if(!e){console.warn("not saving, no key");return}let t=JSON.stringify(this.SerializeDocument({rendered_values:!0,expand_arrays:!0}));localStorage.setItem(e,t)}Undo(){if(this.parent_view)return this.parent_view.Undo();if(this.undo_pointer<=1){console.warn("nothing to undo");return}let e=this.undo_stack[--this.undo_pointer-1],t=e.selection?JSON.parse(e.selection):void 0;this.LoadDocument(JSON.parse(e.data),{flush:!1,override_selection:t,source:"undo"})}About(){this.dialog?.ShowDialog({type:"about"})}ScrollIntoView(e,t=!1){if(typeof e=="string"){let r=this.model.ResolveAddress(e,this.grid.active_sheet);e=Ae(r)?r:r.start}this.grid.ScrollIntoView(e,t)}ScrollTo(e,t={}){if(typeof e=="string"){let r=this.model.ResolveAddress(e,this.grid.active_sheet);e=Ae(r)?r:r.start}t={x:!0,y:!0,smooth:!1,...t},this.grid.ScrollTo(e,t.x,t.y,t.smooth)}Resolve(e,t){let r=this.model.ResolveAddress(e,this.grid.active_sheet,t);return Ae(r)?r.sheet_id?r:void 0:r.start.sheet_id?r:void 0}Unresolve(e,t=!0,r=!0){if(typeof e=="string"){let i=this.Resolve(e);if(!i)throw new Error("invalid reference");e=i}return this.calculator.Unresolve(e,this.grid.active_sheet,t,r)}Evaluate(e,t={}){return this.calculator.Evaluate(e,this.grid.active_sheet,t)}GetSelection(e=!0){let t=this.grid.GetSelection();if(t.empty)return"";let r="";if(t.area.count>1?r=Ee.CellAddressToLabel(t.area.start)+":"+Ee.CellAddressToLabel(t.area.end):r=Ee.CellAddressToLabel(t.area.start),!e)return r;let i=t.area.start.sheet_id||this.grid.active_sheet.id,n=this.calculator.ResolveSheetName(i,!0);return n?n+"!"+r:r}ParseNumber(e){return Ds.TryParse(e).value}FormatNumber(e,t="General"){return Yt(e)?ze.FormatPartsAsText(me.Get(t).FormatComplex(e)):me.Get(t).Format(e)}SpreadsheetDate(e){return e instanceof Date&&(e=e.getTime()),oi(e,!0)}JavascriptDate(e){return Un(e).getTime()}ApplyBorders(e,t,r=1){this.grid.ApplyBorders2(e?this.model.ResolveArea(e,this.grid.active_sheet):void 0,t,{},r)}ApplyStyle(e,t={},r=!0){this.grid.ApplyStyle(e?this.model.ResolveArea(e,this.grid.active_sheet):void 0,t,r)}ClearName(e){this.grid.SetName(e)}ListNames(){return this.model.SerializeNames()}DefineName(e,t,r,i=!1){if(typeof t>"u"||t===null)throw new Error("invalid value (null or undefined)");if(typeof r=="string"){let n=this.model.sheets.ID(r);if(typeof n=="number")r=n;else throw new Error("invalid scope; use a sheet name or sheet id")}if(typeof t=="object"&&(Ae(t)||wn(t))){this.grid.SetName(e,this.model.ResolveArea(t,this.grid.active_sheet),void 0,r,i);return}if(typeof t=="string"){let n=this.parser.Parse(t);if(!n.expression)throw new Error("invalid expression");switch(n.expression.type){case"address":case"range":this.grid.SetName(e,this.model.ResolveArea(n.expression,this.grid.active_sheet),void 0,r,i);return}this.grid.SetName(e,void 0,t,r,i)}else this.grid.SetName(e,void 0,t.toString(),r,i)}SetLink(e,t=""){if(typeof e=="string"){let r=this.model.ResolveAddress(e,this.grid.active_sheet);e=Ae(r)?r:r.start}if(!e){let r=this.GetSelectionReference();if(r.empty)return;e=r.target}this.grid.SetLink(e,t)}Select(e){let t;e&&(t=this.model.ResolveArea(e,this.grid.active_sheet),t.start.sheet_id&&t.start.sheet_id!==this.grid.active_sheet.id&&this.grid.ActivateSheetID(t.start.sheet_id)),this.grid.SelectRange(t)}Paste(e,...t){let r=l.clipboard,i={};switch(t.length){case 1:Array.isArray(t[0])?r=t[0]:typeof t[0]=="object"&&(i=t[0]);break;case 2:t[0]&&Array.isArray(t[0])&&(r=t[0]),t[1]&&typeof t[1]=="object"&&(i=t[1]);break}if(!r)throw new Error("no clipboad data");this.grid.PasteArea(this.RangeOrSelection(e,"no range and no selection"),r,i)}Copy(e){let t=this.RangeOrSelection(e),r=t?this.grid.CopyArea(t,"copy"):[];return l.clipboard=structuredClone(r),r}Cut(e){let t=this.RangeOrSelection(e),r=t?this.grid.CopyArea(t,"cut"):[];return l.clipboard=structuredClone(r),r}GetRange(e,t={}){let r=this.RangeOrSelection(e);if(!r)return;let i=t.type;return i||(t.formatted&&(i="formatted"),t.formula&&(i="A1")),i==="formula"&&(i="A1"),this.grid.GetRange(r,i)}GetStyle(e,t=!1){let r=this.RangeOrSelection(e);if(r)return this.grid.GetRangeStyle(r,t)}SetRange(e,t=void 0,r={}){let i=this.RangeOrSelection(e);if(i){if(r.spill&&Array.isArray(t)){let n=t.length,o=Math.max(0,...t.map(a=>a.length)),s={row:i.start.row+n+1,column:i.start.column+o+1};i.ConsumeAddress(s)}return this.grid.SetRange(i,t,r)}}Subscribe(e){return this.events.Subscribe(e)}Cancel(e){this.events.Cancel(e)}RangeOrSelection(e,t){if(!e){let r=this.GetSelectionReference();if(r.empty){if(t)throw t;return}else return r.area.Clone()}return this.model.ResolveArea(e,this.grid.active_sheet)}Serialize(e={}){let t=this.grid.active_sheet;t.selection=JSON.parse(JSON.stringify(this.grid.GetSelection()));let r=this.grid.ScrollOffset();r&&(t.scroll_offset=r);let i=this.model.sheets.list.map(a=>a.toJSON(e)),n;this.model.tables.size>0&&(n=Array.from(this.model.tables.values()));let o;if(this.model.macro_functions.size){o=[];for(let a of this.model.macro_functions.values())o.push({...a,expression:void 0})}let s=this.model.SerializeNames(t);return{sheet_data:i,active_sheet:t.id,named:s.length?s:void 0,macro_functions:o,tables:n}}ApplyConditionalFormats(e,t){let r=[];if(e.conditional_formats.length||e.flush_conditional_formats){for(let i of e.conditional_formats)switch(r.push(i.area),i.type){case"gradient":i.internal||(i.internal={}),i.internal.gradient||(i.internal.gradient=new Zr(i.stops,this.grid.theme,i.color_space));break;case"data-bar":i.internal||(i.internal={});break}e.ApplyConditionalFormats()}t&&this.grid.Update(!0,r)}ResolveTable(e){let t;if(typeof e=="string"){let r=e.toLowerCase();this.model.tables.has(r)&&(t=this.model.tables.get(r))}if(!t){let r=this.model.ResolveAddress(e,this.grid.active_sheet);Ae(r)||(r=r.start),t=this.grid.GetTableReference(r)}return t}SaveAs(e,t){let r=this.DOM.Create("a");r.href=URL.createObjectURL(e),r.download=t,r.click(),URL.revokeObjectURL(r.href)}Publish(e){this.events.Publish(e)}async ImportXLSX(e,t){return this.parent_view?this.parent_view.ImportXLSX(e,t):(this.export_worker||(this.export_worker=await this.LoadWorker()),new Promise((r,i)=>{this.export_worker?(this.dialog?.ShowDialog({message:"Importing XLSX..."}),this.export_worker.onmessage=n=>{if(n.data){if(n.data.status==="error")return i(n.data.error||"unknown error");if(this.parser.decimal_mark!=="."){let o=this.parser.decimal_mark,s=this.parser.argument_separator;this.parser.Save(),this.parser.SetLocaleSettings(".");let a=c=>{let d=this.parser.Parse(c);if(d.expression)return"="+this.parser.Render(d.expression,{missing:"",convert_decimal:o,convert_argument_separator:s})};for(let c of n.data.results)c.expression=a(c.expression);for(let c of n.data.results.sheets||[]){for(let d of c.cells||[])d.type==="formula"&&d.value&&(d.value=a(d.value));if(c.annotations)for(let d of c.annotations)d.formula&&(d.formula=a(d.formula))}this.parser.Restore()}this.grid.FromImportData(n.data.results),this.ResetInternal(),this.grid.Update(),this.UpdateAC(),this.Publish({type:"load",source:t}),this.UpdateDocumentStyles(),this.InflateAnnotations(),this.calculator.UpdateConditionals(),this.ApplyConditionalFormats(this.grid.active_sheet,!1)}else return i("unknown error (missing data)");this.dialog?.HideDialog(),r()},this.export_worker.onerror=n=>{console.error("import worker error"),console.info(n),i(n)},this.export_worker.postMessage({command:"import",data:e})):i("worker failed")}))}ResetInternal(){this.calculator.Reset(),this.FlushUndo(),this.file_version=this.last_save_version=0}HandleCellEvent(e){if(e.data?.type==="hyperlink"){let t="hyperlink invalid target",r=e.data.reference||"";if(typeof r=="string"){if(/^https{0,1}:\/\//i.test(r)){if(!this.options.hyperlinks){console.warn("hyperlinks are disabled");return}let i=this.DOM.Create("a");i.setAttribute("target",this.options.hyperlinks),i.setAttribute("href",r),i.setAttribute("noreferrer","true"),i.setAttribute("nofollow","true"),i.click();return}else{let i=this.parser.Parse(r);if(i.expression){if(i.expression.type==="address"){(i.expression.sheet||i.expression.sheet_id)&&this.ActivateSheet(i.expression.sheet||i.expression.sheet_id),this.Select(r);return}else if(i.expression.type==="range"){(i.expression.start.sheet||i.expression.start.sheet_id)&&this.ActivateSheet(i.expression.start.sheet||i.expression.start.sheet_id),this.Select(r);return}}}console.warn(t,2);return}}}OnSheetChange(e){for(let t of e.activate.annotations)this.InflateAnnotation(t),this.calculator.UpdateAnnotations(t,e.activate);this.UpdateAnnotations(),this.calculator.UpdateConditionals(),this.ApplyConditionalFormats(e.activate,!0)}HandleDrag(e){if(e.dataTransfer&&e.dataTransfer.types){if(e.dataTransfer.types.some&&e.dataTransfer.types.some(t=>t==="Files"))e.preventDefault();else for(let t=0;t<e.dataTransfer.types.length;t++)if(e.dataTransfer.types[t]==="files"){e.preventDefault();return}}}HandleDrop(e){if(e.dataTransfer&&e.dataTransfer.files&&e.dataTransfer.files.length){e.preventDefault();let t=e.dataTransfer.files[0];/^image/.test(t.type)?this.InsertImageInternal(t):this.LoadFileInternal(t,"drag-and-drop").catch(()=>{})}}SelectFile2(e,t){if(!this.file_chooser){let r=this.DOM.Create("input",void 0,void 0,{attrs:{type:"file"},events:{change:()=>{if(r.files&&r.files[0]){let i=r.files[0];switch(r.value="",this.file_chooser_operation){case 2:this.InsertImageInternal(i);break;case 1:this.LoadFileInternal(i,"local-file",!0);break;default:console.warn("file chooser: no operation");break}}}}});this.file_chooser=r}if(!this.file_chooser)throw new Error("could not create file chooser");this.file_chooser_operation=t,this.file_chooser.accept=e||"",this.file_chooser.click()}async InsertImageInternal(e){if(this.options.max_file_size&&e.size>this.options.max_file_size){this.dialog?.ShowDialog({type:"error",message:"This file exceeds the allowed image size. Please try a smaller image.",title:"Error adding image",timeout:3e3,close_box:!0});return}let t=e;await new Promise((r,i)=>{let n=new FileReader;n.onload=async()=>{try{if(n.result){let o;if(typeof n.result=="string")o=n.result;else{o="";let a=new Uint8Array(n.result);for(let c=0;c<a.byteLength;c++)o+=String.fromCharCode(a[c])}let s=this.DOM.Create("img");s.src=o,await Promise.resolve(),this.grid.CreateAnnotation({type:"image",formula:"",data:{scale:"",src:o,original_size:{width:s.width||300,height:s.height||300}}},void 0,void 0,void 0,{top:30,left:30,width:s.width||300,height:s.height||300})}r()}catch(o){i(o)}},n.onabort=()=>{i("Aborted")},n.onerror=()=>{i("File error")},setTimeout(()=>{n.readAsDataURL(t)},100)})}LoadFileInternal(e,t,r=!0){if(!e)return Promise.resolve();let i=new FileReader;return new Promise((n,o)=>{let s=a=>{i.onload=null,i.onabort=null,i.onerror=null,a?(r&&(this.dialog?.ShowDialog({title:"Error reading file",close_box:!0,message:"Please make sure your file is a valid XLSX, CSV or TREB file.",type:"error",timeout:3e3}),console.error(a)),o(a)):n()};i.onload=()=>{try{if(i.result)if(/\.csv$/i.test(e.name))this.LoadCSV(i.result,t);else if(/\.xls[xm]$/i.test(e.name)){typeof i.result=="string"?s("Unsupported file"):this.ImportXLSX(i.result,t).then(()=>s()).catch(a=>s(a));return}else{let a=JSON.parse(i.result);this.LoadDocument(a,{source:t})}s()}catch(a){s(a?.toString())}},i.onabort=()=>{s("Aborted")},i.onerror=()=>{s("File error")},setTimeout(()=>{/\.xls[xm]$/i.test(e.name)?i.readAsArrayBuffer(e):i.readAsText(e)},100)})}UpdateAnnotations(){for(let e of this.grid.active_sheet.annotations){let t=e.temp;if(t.vertex&&t.vertex.state_id!==t.state){t.state=t.vertex.state_id;for(let i of e.view)i&&(i.dirty=!0)}let r=e.view[this.grid.view_index]||{};r.dirty&&(r.dirty=!1,r.update_callback&&r.update_callback(),this.grid.AnnotationUpdated(e))}this.UpdateConnectedElements()}UpdateConnectedElements(){for(let e of this.model.connected_elements.values()){let t=e.internal;if(t?.vertex&&t.vertex.state_id!==t.state){t.state=t.vertex.state_id;let r=e.update;r&&Promise.resolve().then(()=>r.call(0,e))}}}RebuildAllAnnotations(){for(let e of this.grid.active_sheet.annotations){this.InflateAnnotation(e);let t=e.view[this.grid.view_index]||{};t.resize_callback&&t.resize_callback(),t.update_callback&&t.update_callback()}}InflateAnnotations(){for(let e of this.grid.active_sheet.annotations)this.InflateAnnotation(e)}InflateAnnotation(e){if(this.grid.headless)return;let t=e.view[this.grid.view_index]||{};if(t.inflated){e.dirty&&(t.resize_callback&&t.resize_callback(),e.dirty=!1);return}if(t.inflated=!0,e.dirty&&(e.dirty=!1),t.content_node){if(e.data.type==="treb-chart"){let r=this.CreateChart();r.Initialize(t.content_node);let i=()=>{if(e.data.formula){let n=this.parser.Parse(e.data.formula);if(n&&n.expression&&n.expression.type==="call"){this.parser.Walk(n.expression,a=>((a.type==="address"||a.type==="range")&&this.model.ResolveSheetID(a,void 0,this.grid.active_sheet),!0));let o=n.expression.name.toLowerCase(),s=this.calculator.CalculateExpression(n.expression);r.Exec(o,s)}}r.Update()};t.resize_callback=()=>{this.grid.headless||(r.Resize(),r.Update())},t.update_callback=()=>{this.grid.headless||i()},t.node?.parentElement&&(this.grid.headless||i())}else if(e.data.type==="image"){if(typeof e.data.data?.src=="string"){let r=xs(e.data.data.src);if(r){let i=this.DOM.Create("img");i.src=r,e.data.data.scale==="fixed"?(i.style.position="relative",i.style.left="50%",i.style.top="50%",i.style.transform="translate(-50%, -50%)"):(i.style.width="100%",i.style.height="100%"),t.content_node.appendChild(i)}}}else if(e.data.type==="textbox"&&e.data.data){let r,i=document.createElement("div");i.classList.add("treb-annotation-textbox");for(let n of e.data.data.paragraphs){let o=document.createElement("p");n.style&&(n.style.horizontal_align==="right"||n.style.horizontal_align==="center")&&(o.style.textAlign=n.style.horizontal_align);for(let s of n.content){let a=document.createElement("span");if(r||(r=a),e.data.formula||(a.textContent=s.text||""),s.style?.bold&&(a.style.fontWeight="600"),s.style?.italic&&(a.style.fontStyle="italic"),o.appendChild(a),e.data.formula)break}if(i.append(o),e.data.formula)break}if(t.content_node.append(i),e.data.data.style){let n=e.data.data.style,o=()=>{if(n.fill){let s=gt(this.grid.theme,n.fill);i.style.background=s}};t.update_callback=()=>{if(this.grid.headless||o(),r&&e.data.formula){let s=this.parser.Parse(e.data.formula);if(s&&s.expression){this.parser.Walk(s.expression,u=>((u.type==="address"||u.type==="range")&&this.model.ResolveSheetID(u,void 0,this.grid.active_sheet),!0));let a=this.calculator.CalculateExpression(s.expression),c=me.Get("General"),d;switch(s.expression.type){case"address":d=s.expression;break;case"range":d=s.expression.start;break}if(d){let h=(d.sheet_id?this.model.sheets.Find(d.sheet_id):this.grid.active_sheet)?.CellStyleData(d);h?.number_format&&(c=me.Get(h.number_format))}switch(a.type){case 3:case 2:case 8:r.textContent=c.Format(a.value);break;default:r.textContent=a.value?.toString()||""}}}},t.update_callback()}}}}DocumentChange(e){Promise.resolve().then(()=>{this.file_version++,this.file_version>=65536&&(this.file_version=1);let t=JSON.stringify(this.SerializeDocument({optimize:"size",rendered_values:!0,expand_arrays:!0}));this.options.undo&&this.PushUndo(t,e,!1),this.Publish({type:"document-change"})})}ResolveStorageKey(e,t=""){if(e){if(e===!0){let r=0,i=document.location.href;for(let o=0,s=i.length;o<s;o++)r=(r<<5)-r+i.charCodeAt(o),r|=0;let n=Math.abs(r).toString(16);return t?t+"-"+n:n}return e}}PushUndo(e,t,r=!0){let i=t||this.last_selection;this.undo_stack[this.undo_pointer-1]&&(this.undo_stack[this.undo_pointer-1].selection=i),r&&(this.file_version++,this.file_version>=65536&&(this.file_version=1)),e||(e=JSON.stringify(this.SerializeDocument({optimize:"size",rendered_values:!0,expand_arrays:!0}))),this.undo_stack[this.undo_pointer++]={data:e,selection:void 0};let n=this.undo_stack.length;if(n>16){let o=n-16;this.undo_stack=this.undo_stack.slice(o),this.undo_pointer-=o}}FlushUndo(e=!0){this.undo_stack=[],this.undo_pointer=0,this.last_save_version=this.file_version,e&&this.PushUndo(void 0,void 0,!1)}UpdateSelection(e){this.last_selection=JSON.stringify(e),this.Publish({type:"selection"})}UpdateSelectionStyleAnnotation(e){let t={style:JSON.parse(JSON.stringify(e.data.style||{}))};t.style&&(t.style.font_face||(t.style.font_face="stack:ui"),t.style.font_size||(t.style.font_size={unit:"em",value:1})),t.relative_font_size=_t.RelativeFontSize(t.style||{},this.grid.theme.grid_cell||{}),this.selection_state=t}UpdateSelectionStyle(e){let t=this.grid.GetFreeze(),r={frozen:!!t.rows||!!t.columns};if(e||(e=this.grid.GetSelection()),e&&!e.empty){r.selection=e;let i=this.grid.active_sheet.CellData(e.target);r.table=!!i.table,r.merge=!!i.merge_area,r.merge&&i.merge_area&&(i.merge_area.start.row!==e.target.row||i.merge_area.start.column!==e.target.column)&&(i=this.grid.active_sheet.CellData(i.merge_area.start)),r.comment=i.note,r.style=i.style?{...i.style}:void 0,r.relative_font_size=_t.RelativeFontSize(r.style||{},this.grid.theme.grid_cell||{}),r.empty=typeof i.value>"u"&&!i.style?.font_face}this.grid?.edit_state&&(this.grid.edit_state.font_face=r.style?.font_face||void 0),this.selection_state=r}UpdateDocumentStyles(){let e={},t={};for(let i of this.grid.model.sheets.list)i.NumberFormatsAndColors(t,e);this.document_styles.colors=Object.keys(t),this.document_styles.number_formats=Object.keys(e),this.document_styles.theme_colors=[];let r=[.5,.25,0,-.25,-.5];for(let i=0;i<10;i++)this.document_styles.theme_colors.push(r.map(n=>{let o={theme:i,tint:n},s=gt(this.grid.theme,o);return{color:o,resolved:s}}))}ConvertLocale(e){let t=new Tr;t.flags={...this.parser.flags};let r,i;e.decimal_mark==="."?(t.SetLocaleSettings("."),r=",",i=";"):(t.SetLocaleSettings(","),r=".",i=",");let n=o=>{let s=t.Parse(o);if(s.expression)return"="+t.Render(s.expression,{missing:"",convert_decimal:r,convert_argument_separator:i})};if(e.macro_functions)for(let o of e.macro_functions){let s=n(o.function_def);s&&(o.function_def=s)}if(e.named)for(let o of e.named){let s=n(o.expression);s&&(o.expression=s)}if(e.sheet_data){let o=Array.isArray(e.sheet_data)?e.sheet_data:[e.sheet_data];for(let s of o){if(s.annotations){for(let a of s.annotations)if(a.formula){let c=n(a.formula);c&&(a.formula=c)}}if(s.data?.length)for(let a of s.data){let c=Sn(a)?[a]:a.cells;for(let d of c)if(d.value&&typeof d.value=="string"&&d.value[0]==="="){let u=n(d.value.slice(1));u&&(d.value=u)}}}}}CompareVersions(e="",t=""){let r=e.split(".").map(s=>Number(s)||0).concat([0,0,0]),i=t.split(".").map(s=>Number(s)||0).concat([0,0,0]),n=[0,1,2],o={match:0};for(let s=0;s<3;s++)if(r[s]!==i[s]){o.match=r[s]>i[s]?1:-1,o.level=n[s];break}return o}ImportDocumentData(e,t){this.file_version=e.revision||0;let r=[],i=this.CompareVersions(e.version,"32.14.0");if(i.match>0&&(i.level===0||i.level===1)&&console.warn(`The file you are opening was created with a newer version of TREB (${e.version} vs 32.14.0).
|
|
20
|
+
You may encounter compatibility errors.`),e.sheet_data&&(Array.isArray(e.sheet_data)?r=e.sheet_data:r.push(e.sheet_data)),e.shared_resources){let o=e.shared_resources,s=a=>/^resource:/.test(a)?o[a.substring(9)]||"":a;for(let a of r){a.background_image&&(a.background_image=s(a.background_image));for(let c of a.annotations||[])c.type==="image"&&c.data?.src&&(c.data.src=s(c.data.src))}}e.decimal_mark&&e.decimal_mark!==Je.decimal_separator&&this.ConvertLocale(e);let n=this.grid.model;if(n.tables.clear(),e.tables)for(let o of e.tables)n.tables.set(o.name.toLowerCase(),o);this.grid.UpdateSheets(r,void 0,t||e.active_sheet);for(let o of this.model.tables.values())if(o.area.start.sheet_id){let s=n.sheets.Find(o.area.start.sheet_id);if(s)for(let a=o.area.start.row;a<=o.area.end.row;a++)for(let c=o.area.start.column;c<=o.area.end.column;c++){let d=s.cells.GetCell({row:a,column:c},!0);d.table=o}}if(n.document_name=e.name,n.user_data=e.user_data,n.named.Reset(),e.named)this.model.UnserializeNames(e.named,this.grid.active_sheet);else{let o=e.named_ranges;if(!o&&r[0]&&r[0].named_ranges&&(o=r[0].named_ranges),o)for(let[s,a]of Object.entries(o))n.named.SetNamedRange(s,new Ee(a.start,a.end));if(e.named_expressions)for(let s of e.named_expressions)this.model.UnserializeNames([{name:s.name,expression:s.expression}],this.grid.active_sheet)}if(n.macro_functions.clear(),e.macro_functions)for(let o of e.macro_functions)n.macro_functions.set(o.name.toUpperCase(),{...o,expression:this.parser.Parse(o.function_def||"").expression});this.UpdateAC()}async LoadWorker(){try{return await(await import("./treb-export-worker.mjs")).CreateWorker()}catch(e){throw console.error(e),e}}HandleKeyDown(e){e.key==="z"?(Y.is_mac&&e.metaKey||e.ctrlKey)&&(e.stopPropagation(),e.preventDefault(),this.Undo()):e.key==="F9"&&this.options.recalculate_on_f9&&(e.stopPropagation(),e.preventDefault(),this.Recalculate())}};var Bs=`@charset "UTF-8";.treb-main.treb-main .treb-mouse-mask{background:transparent;bottom:0;display:none;left:0;position:fixed;right:0;top:0;z-index:9999}.treb-main.treb-main .treb-mouse-mask.column-resize{cursor:col-resize}.treb-main.treb-main .treb-mouse-mask.row-resize{cursor:row-resize}.treb-main.treb-main .treb-mouse-mask.nub-select{cursor:crosshair}.treb-main.treb-main .treb-mouse-mask.move{cursor:move}.treb-main.treb-main .treb-mouse-mask.nw-resize{cursor:nw-resize}.treb-main.treb-main .treb-note{max-width:15em;min-width:15em}.treb-main.treb-main .treb-hover-title,.treb-main.treb-main .treb-note{background:var(--treb-note-background,#fff);border:1px solid var(--treb-note-border-color,var(--treb-ui-border-color,#ddd));border-radius:2px;box-shadow:0 1px 4px 2px hsla(0,0%,43%,.2);color:var(--treb-note-color,#333);font-family:BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,"sans-serif";font-size:10.5pt;left:100px;line-height:normal;opacity:0;padding:7px 10px;position:fixed;top:100px;transition:opacity .2s;white-space:pre-line;z-index:39}.treb-main.treb-main .treb-hover-title{min-width:10em;pointer-events:none}.treb-main.treb-main .treb-sort-button{background:#fff;border:1px solid #ccc;border-radius:2px;height:1em;left:100px;opacity:0;pointer-events:none;position:absolute;top:100px;transition:opacity .1s ease;width:1em;z-index:39}.treb-main.treb-main .treb-sort-button:after{box-sizing:border-box}.treb-main.treb-main .treb-sort-button.asc:after{border:.4em solid transparent;border-top-color:currentcolor;content:"";height:.8em;left:50%;opacity:.5;position:absolute;top:50%;transform:translate(-50%,-25%);width:.8em}.treb-main.treb-main .treb-sort-button.desc:after{border:.4em solid transparent;border-bottom-color:currentcolor;content:"";height:.8em;left:50%;opacity:.5;position:absolute;top:50%;transform:translate(-50%,-80%);width:.8em}.treb-main.treb-main .treb-tooltip{border-radius:2px;box-shadow:0 1px 4px 2px hsla(0,0%,43%,.2);display:none;line-height:normal;padding:2px 10px;pointer-events:none;position:fixed;z-index:39}.treb-main.treb-main .treb-tooltip.arrow-up:after{border:4px solid transparent;border-bottom-color:inherit;box-sizing:border-box;content:" ";height:8px;left:calc(50% - 4px);overflow:hidden;position:absolute;top:-8px;width:8px}.treb-main.treb-main .treb-tooltip.arrow-left:after{border:4px solid transparent;border-right-color:inherit;box-sizing:border-box;content:" ";height:8px;left:-8px;overflow:hidden;position:absolute;top:calc(50% - 4px);width:8px}.treb-main.treb-main .treb-dropdown-caret{background:var(--treb-dropdown-caret-background,#fff);border:1px solid var(--treb-dropdown-caret-border-color,#ccc);border-radius:2px;box-shadow:0 1px 4px 2px hsla(0,0%,43%,.2);display:none;height:20px;position:absolute;width:20px;z-index:39}.treb-main.treb-main .treb-dropdown-caret path{fill:none;stroke:var(--treb-dropdown-caret-color,#444);stroke-linecap:round;stroke-linejoin:round;stroke-width:2}.treb-main.treb-main .treb-dropdown-list{background:var(--treb-dropdown-background,#fff);border:1px solid var(--treb-dropdown-border-color,unset);box-shadow:0 1px 4px 2px hsla(0,0%,43%,.2);color:var(--treb-dropdown-color,inherit);display:none;font-size:10pt;max-height:10em;outline:none;overflow-y:auto;position:absolute;text-align:left;z-index:39}.treb-main.treb-main .treb-dropdown-list div{cursor:default;padding:2px}.treb-main.treb-main .treb-dropdown-list div.selected{background:var(--treb-dropdown-selected-background,#555);color:var(--treb-dropdown-selected-color,#fff)}.treb-main.treb-main .treb-dropdown-caret.active{background:var(--treb-dropdown-caret-active-background,#eee)}.treb-main.treb-main .treb-dropdown-caret.active+.treb-dropdown-list{display:block}.treb-main.treb-main .treb-error-highlight{background:rgba(255,0,0,.25);opacity:0;pointer-events:none;position:absolute;transition:opacity .15s ease-in-out;z-index:40}.treb-main.treb-main .treb-autocomplete{box-sizing:border-box;font-size:inherit;font-weight:400;line-height:normal;max-height:10em;overflow-y:auto;position:fixed;text-align:left;top:-1000px;z-index:39}.treb-main.treb-main .treb-autocomplete *{box-sizing:border-box}.treb-main.treb-main .treb-autocomplete ul{list-style-type:none}.treb-main.treb-main .treb-autocomplete ul,.treb-main.treb-main .treb-autocomplete ul li{font-size:inherit;font-weight:inherit;margin:0;padding:0}.treb-main.treb-main .treb-autocomplete ul li a{color:inherit;cursor:default;display:inline-block;font-size:inherit;font-weight:inherit;padding:3px 6px;text-decoration:none;width:100%}.treb-main.treb-main .treb-autocomplete-tooltip{position:fixed;top:-1000px;white-space:pre;z-index:39}.treb-main.treb-main .treb-formula-bar{display:flex;flex-direction:row;gap:.5em;grid-area:1/1/2/2;max-width:100%;overflow-x:hidden;padding:0 2px 12px;text-align:left}.treb-main.treb-main .treb-formula-bar[hidden]{display:none}.treb-main.treb-main .treb-formula-bar .treb-address-label{border:1px solid var(--treb-formula-bar-border-color,var(--treb-ui-border-color,#ccc));border-radius:2px;display:flex;flex-direction:column;height:1.75em;justify-content:center;min-height:1.5em;min-width:95px;padding-left:3px;width:95px}.treb-main.treb-main .treb-formula-bar .treb-address-label>div{outline:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.treb-main.treb-main .treb-formula-bar .treb-insert-function-button{background:transparent;border:1px solid var(--treb-formula-bar-border-color,var(--treb-ui-border-color,#ccc));border-radius:2px;height:1.75em;min-height:1.5em}.treb-main.treb-main .treb-formula-bar .treb-insert-function-button[hidden]{display:none}.treb-main.treb-main .treb-formula-bar .expand-button{background:transparent;border:0;border-radius:2px;height:1.75em;margin-left:2px;outline:none;padding:1px}.treb-main.treb-main .treb-formula-bar .expand-button:after{border:5px solid transparent;border-top-color:#999;content:" ";display:inline-block;margin:0;padding:0;position:relative;top:-6px;transition:transform .15s ease}.treb-main.treb-main .treb-formula-bar[expanded] .expand-button:after{transform:rotate(180deg) translateY(6px)}.treb-main.treb-main .treb-formula-bar .treb-editor-container{border:1px solid var(--treb-formula-bar-border-color,var(--treb-ui-border-color,#ccc));border-radius:2px;display:flex;flex-direction:column;flex-grow:1;height:1.75em;justify-content:center;min-width:0}.treb-main.treb-main .treb-formula-bar .treb-editor-container>.treb-editor-shadow{opacity:.4}.treb-main.treb-main .treb-formula-bar[expanded] .treb-editor-container{height:4.5em;transition:height .1s ease-in-out}.treb-main.treb-main .treb-formula-bar[expanded] .treb-editor-container>div{overflow-y:auto}.treb-main.treb-main .treb-formula-bar .treb-editor-container>div{flex-grow:1;line-height:1.35;margin:2px;min-height:1em;outline:none;overflow-x:hidden;overflow-y:hidden;white-space:pre-wrap;width:100%}.treb-main.treb-main .treb-mouse-mask .ghost-tab{position:fixed}.treb-main.treb-main .treb-spreadsheet-footer{align-items:center;grid-area:3/1/4/2}.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tab-container{align-self:flex-start;height:2.2em;overflow:hidden}.treb-main.treb-main .treb-spreadsheet-footer,.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs{color:var(--treb-ui-color,inherit);display:flex;flex-direction:row;height:2.2em;list-style-type:none;max-width:100%;padding-inline-start:0;z-index:2}.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs{height:auto;margin-block-start:0;margin:0;overflow-x:scroll;overflow-y:hidden;scrollbar-width:none}.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs::-webkit-scrollbar{display:none}.treb-main.treb-main .treb-spreadsheet-footer[hidden]{display:none}.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs>li{display:inline-block;margin:0;position:relative}.treb-main.treb-main .treb-spreadsheet-footer .treb-add-tab,.treb-main.treb-main .treb-spreadsheet-footer .treb-delete-tab,.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs>li{align-items:center;border-bottom-left-radius:5px;border-bottom-right-radius:5px;border-top-width:1px;border:1px solid var(--treb-tab-bar-tab-border-color,var(--treb-ui-border-color,#ccc));border-top:0 solid var(--treb-tab-bar-tab-border-color,var(--treb-ui-border-color,#ccc));color:var(--treb-tab-bar-tab-color,var(--treb-ui-color,#fff));cursor:default;display:inline-flex;font-size:inherit;height:100%;justify-content:center;margin-right:-2px;overflow:hidden;padding:0 .75em;z-index:1}.treb-main.treb-main .treb-spreadsheet-footer .treb-add-tab:active,.treb-main.treb-main .treb-spreadsheet-footer .treb-add-tab:focus,.treb-main.treb-main .treb-spreadsheet-footer .treb-delete-tab:active,.treb-main.treb-main .treb-spreadsheet-footer .treb-delete-tab:focus,.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs>li:active,.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs>li:focus{z-index:3}.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs>li{height:2.2em;overflow:visible;overflow-x:visible}.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs>li:last-of-type{margin-right:0}.treb-main.treb-main .treb-spreadsheet-footer .treb-add-tab{margin-left:-1px}.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs>li{white-space:nowrap}.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs>li[selected]{z-index:2}.treb-main.treb-main .treb-spreadsheet-footer .treb-scale-control{align-items:center;display:flex;flex-direction:row;font-size:inherit;height:2.2em;justify-content:center;position:relative;width:5em}.treb-main.treb-main .treb-spreadsheet-footer .treb-scale-control .treb-scale-input{background:transparent;border:1px solid transparent;border-radius:2px;color:inherit;font-family:inherit;font-size:inherit;padding:initial;text-align:center;transition:border-color .25s ease,background-color .25s ease;width:4em}.treb-main.treb-main .treb-spreadsheet-footer .treb-scale-control .treb-slider-container{accent-color:var(--treb-scale-slider-accent-color,undefined);align-items:center;background:var(--treb-scale-slider-background,#fff);border:1px solid var(--treb-scale-slider-border-color,var(--treb-ui-border-color,#ccc));display:flex;flex-direction:row;height:4em;justify-content:center;left:.5em;opacity:0;pointer-events:none;position:absolute;top:0;transform:rotate(-90deg);transform-origin:left top;transition:opacity .25s ease;width:10em;z-index:40}.treb-main.treb-main .treb-spreadsheet-footer .treb-scale-control .treb-scale-input:focus,.treb-main.treb-main .treb-spreadsheet-footer .treb-scale-control:hover .treb-scale-input{border-color:var(--treb-ui-border-color,#ccc)}.treb-main.treb-main .treb-spreadsheet-footer .treb-scale-control .treb-slider-container>input[type=range]{width:8.5em}.treb-main.treb-main .treb-spreadsheet-footer .treb-scale-control .treb-scale-input:focus+.treb-slider-container,.treb-main.treb-main .treb-spreadsheet-footer .treb-scale-control .treb-slider-container:focus-within,.treb-main.treb-main .treb-spreadsheet-footer .treb-scale-control:hover .treb-slider-container{opacity:.85;pointer-events:auto}.treb-main.treb-main .treb-spreadsheet-footer .treb-delete-tab{align-items:center;background:transparent;border:none;border-bottom-left-radius:5px;border-bottom-right-radius:5px;border-top:0;color:currentColor;cursor:default;display:inline-flex;flex-direction:row;font-size:inherit;margin-right:-2px;min-width:2.5em;padding:.25em .75em;z-index:1}.treb-main.treb-main .treb-spreadsheet-footer .treb-delete-tab svg{height:1em;opacity:.75;pointer-events:none;transition:opacity .125s ease-in-out;width:1em}.treb-main.treb-main .treb-spreadsheet-footer .treb-delete-tab:hover svg{opacity:.75}.treb-main.treb-main .treb-spreadsheet-footer .treb-delete-tab path{stroke:currentColor;stroke-width:1.5px;stroke-linecap:round}.treb-main.treb-main .treb-spreadsheet-footer .treb-delete-tab:active,.treb-main.treb-main .treb-spreadsheet-footer .treb-delete-tab:focus{z-index:3}.treb-main.treb-main .treb-spreadsheet-footer .treb-stats-panel{flex:1 1;overflow:hidden;text-align:end;text-overflow:ellipsis;white-space:nowrap}.treb-main.treb-main .treb-spreadsheet-footer .treb-stats-panel>*{margin-left:.5em}.treb-main.treb-main .treb-spreadsheet-footer .treb-stats-panel .treb-stats-value{background:var(--treb-stats-value-background,#f8f8ff);border:1px solid var(--treb-stats-value-border-color,var(--treb-ui-border-color,#ddd));border-radius:3px;padding:0 .3em}.treb-main.treb-main .treb-grid .treb-overlay-container{margin:0;opacity:0;outline:none;padding:0;position:absolute;z-index:24}.treb-main.treb-main .treb-grid .treb-overlay-container.align-right .treb-overlay-inset{padding-right:3px;right:0;text-align:right}.treb-main.treb-main .treb-grid .treb-overlay-container.align-center .treb-overlay-inset{left:50%;text-align:center;transform:translateX(-50%)}.treb-main.treb-main .treb-grid .treb-overlay-inset{display:flex;flex-direction:column;height:100%;justify-content:flex-end;margin:0;min-width:100%;padding:0 4px;position:absolute}.treb-main.treb-main .treb-grid .treb-overlay-editor{outline:none;position:relative;white-space:nowrap;white-space:pre}.treb-main.treb-main .treb-grid .treb-overlay-editor.firefox:before{content:"\u200B"}.treb-main.treb-main .treb-spill-border{pointer-events:none;position:absolute;transform:translateZ(0)}.treb-main.treb-main .treb-spill-border rect{stroke:var(--treb-spill-border-color,#5c5ce0);stroke-dasharray:var(--treb-spill-border-dasharray,0);fill:none;stroke-width:var(--treb-spill-border-width,1px);filter:var(--treb-spill-border-filter,drop-shadow(3px 3px 2px rgba(0,0,0,.5)));z-index:35}.treb-main.treb-main .treb-buffer-canvas{display:none;position:absolute}.treb-main.treb-main .treb-spreadsheet-body{grid-area:2/1/3/2;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:transparent;display:flex;overflow:hidden;position:relative;z-index:1}.treb-main.treb-main .treb-grid{flex-grow:1;order:2;overflow:scroll;position:relative;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:transparent;display:grid;grid-template-columns:100px auto;grid-template-rows:20px auto;outline:none;overscroll-behavior:none}.treb-main.treb-main .treb-grid .tile-cover.grid-cover{grid-area:2/2/3/3}.treb-main.treb-main .treb-grid .tile-cover.column-header-cover{grid-area:1/2/2/3;position:-webkit-sticky;position:sticky;top:0}.treb-main.treb-main .treb-grid .tile-cover.row-header-cover{grid-area:2/1/3/2;left:0;position:-webkit-sticky;position:sticky}.treb-main.treb-main .treb-grid .treb-grid-selection{grid-area:1/1/2/2}.treb-main.treb-main .treb-grid .treb-corner{grid-area:1/1/2/2;position:-webkit-sticky;position:sticky}.treb-main.treb-main .treb-grid .treb-left-header{display:grid;grid-area:2/1/3/2;grid-template-columns:auto;grid-template-rows:auto;position:-webkit-sticky;position:sticky}.treb-main.treb-main .treb-grid .treb-top-header{display:grid;grid-area:1/2/2/3;grid-template-columns:auto;grid-template-rows:auto;position:-webkit-sticky;position:sticky}.treb-main.treb-main .treb-grid .treb-contents{display:grid;grid-area:2/2/3/3;grid-template-columns:auto;grid-template-rows:auto}.treb-main.treb-main .treb-grid.safari::-webkit-scrollbar{-webkit-appearance:none;height:7px;width:7px}.treb-main.treb-main .treb-grid.safari::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.25);border-radius:4px;-webkit-box-shadow:0 0 1px hsla(0,0%,100%,.5)}.treb-main.treb-main .treb-grid canvas{background:transparent;border:0;margin:0;padding:0}.treb-main.treb-main .treb-grid .nub-select{cursor:crosshair}.treb-main.treb-main .treb-grid .link-pointer{cursor:pointer}.treb-main.treb-main .treb-grid .mock-selection-node{background:red;left:-100px;position:fixed;top:-100px}.treb-main.treb-main .treb-grid .tile-cover{background:transparent;position:relative;z-index:14}.treb-main.treb-main .treb-grid .tile-cover.column-header-cover{z-index:22}.treb-main.treb-main .treb-grid .tile-cover.column-header-cover.resize{cursor:col-resize}.treb-main.treb-main .treb-grid .tile-cover.row-header-cover{z-index:22}.treb-main.treb-main .treb-grid .tile-cover.row-header-cover.resize{cursor:row-resize}.treb-main.treb-main .treb-grid .frozen-annotation-container,.treb-main.treb-main .treb-grid .treb-annotation-container{left:0;pointer-events:none;position:absolute;top:0;z-index:16}.treb-main.treb-main .treb-grid .frozen-annotation-container .annotation,.treb-main.treb-main .treb-grid .treb-annotation-container .annotation{background:hsla(0,0%,100%,.5);border:1px solid #999;overflow:hidden;pointer-events:auto;position:absolute;z-index:1}.treb-main.treb-main .treb-grid .frozen-annotation-container .annotation .annotation-content,.treb-main.treb-main .treb-grid .treb-annotation-container .annotation .annotation-content{font-family:inherit;font-size:inherit;height:100%;left:0;position:absolute;top:0;width:100%;z-index:1}.treb-main.treb-main .treb-grid .frozen-annotation-container .annotation .annotation-move-target,.treb-main.treb-main .treb-grid .treb-annotation-container .annotation .annotation-move-target{cursor:move;height:10%;left:0;min-height:14px;position:absolute;top:0;width:100%;z-index:2}.treb-main.treb-main .treb-grid .frozen-annotation-container .annotation .annotation-resize-target,.treb-main.treb-main .treb-grid .treb-annotation-container .annotation .annotation-resize-target{bottom:0;cursor:nwse-resize;height:10%;min-height:14px;min-width:14px;position:absolute;right:0;width:10%;z-index:3}.treb-main.treb-main .treb-grid .frozen-annotation-container .annotation.clone-focus,.treb-main.treb-main .treb-grid .frozen-annotation-container .annotation.retain-focus,.treb-main.treb-main .treb-grid .frozen-annotation-container .annotation:focus,.treb-main.treb-main .treb-grid .treb-annotation-container .annotation.clone-focus,.treb-main.treb-main .treb-grid .treb-annotation-container .annotation.retain-focus,.treb-main.treb-main .treb-grid .treb-annotation-container .annotation:focus{box-shadow:0 0 0 3px rgba(14,165,233,.33)}.treb-main.treb-main .treb-grid .frozen-annotation-container .move-buffer,.treb-main.treb-main .treb-grid .treb-annotation-container .move-buffer{border:1px solid red;cursor:move;height:10%;left:0;position:absolute;top:0;width:100%}.treb-main.treb-main .treb-grid .treb-grid-selection{background:transparent;position:absolute;transform:translateZ(0);-moz-transform:scale(1);z-index:10}.treb-main.treb-main .treb-grid .frozen-selection{overflow:hidden;pointer-events:none;position:absolute;transform:translateZ(0);-moz-transform:scale(1);transition:background .33s;z-index:12}.treb-main.treb-main .treb-grid .frozen-selection.frozen-selection-rows{border-bottom:1px solid transparent}.treb-main.treb-main .treb-grid .frozen-selection.frozen-selection-columns{border-right:1px solid transparent}.treb-main.treb-main .treb-grid .frozen-annotation-container{height:100%;left:0;overflow:hidden;position:absolute;top:0;width:100%}.treb-main.treb-main .treb-grid .treb-corner{left:0;top:0;z-index:20}.treb-main.treb-main .treb-grid .treb-corner canvas{left:0;pointer-events:none;position:absolute;top:0}.treb-main.treb-main .treb-grid .treb-left-header{left:0;pointer-events:none;z-index:18}.treb-main.treb-main .treb-grid .treb-top-header{pointer-events:none;top:0;z-index:18}.treb-main.treb-main .treb-grid .treb-contents{height:2000px;width:2000px}.treb-main.treb-main{--alternate-selection-color-1:#fbb13c;--alternate-selection-color-2:#40c040;--alternate-selection-color-3:#b66d0d;--alternate-selection-color-4:#2176ae;--alternate-selection-color-5:#fe6847;--text-reference-color-1:#e08a00;--text-reference-color-2:#3aad3a;--text-reference-color-3:#b66d0d;--text-reference-color-4:#2176ae;--text-reference-color-5:#fe2f01}.treb-main.treb-main:focus-within .treb-grid-selection .primary-selection,.treb-main.treb-main:focus-within .treb-header-overlay{color:var(--treb-selection-color,#4caaf1)}.treb-main.treb-main .theme-color-1{color:var(--treb-theme-color-1,#e7e6e6)}.treb-main.treb-main .theme-color-2{color:var(--treb-theme-color-2,#44546a)}.treb-main.treb-main .theme-color-3{color:var(--treb-theme-color-3,#4472c4)}.treb-main.treb-main .theme-color-4{color:var(--treb-theme-color-4,#ed7d31)}.treb-main.treb-main .theme-color-5{color:var(--treb-theme-color-5,#a5a5a5)}.treb-main.treb-main .theme-color-6{color:var(--treb-theme-color-6,#ffc000)}.treb-main.treb-main .theme-color-7{color:var(--treb-theme-color-7,#5b9bd5)}.treb-main.treb-main .theme-color-8{color:var(--treb-theme-color-8,#70ad47)}.treb-main.treb-main .theme-color-9{color:var(--treb-theme-color-9,#0563c1)}.treb-main.treb-main .theme-color-10{color:var(--treb-theme-color-10,#954f72)}.treb-main.treb-main .treb-offset-dark{color:#000}.treb-main.treb-main .treb-offset-light{color:#fff}.treb-main.treb-main .note-marker{background:var(--treb-note-marker-color,#6fab20)}.treb-main.treb-main .grid-headers{background:var(--treb-grid-header-background,#eeeef2);color:var(--treb-grid-header-color,var(--treb-grid-default-color,#666));font-family:var(--treb-grid-header-font-family,inherit);font-size:var(--treb-grid-header-font-size,10pt);font-style:var(--treb-grid-header-font-style,normal);font-weight:var(--treb-grid-header-font-weight,normal);stroke:var(--treb-grid-header-grid-color,var(--treb-grid-grid-color,#ccccd4))}.treb-main.treb-main .grid-cells{color:var(--treb-grid-default-color,inherit);font-family:var(--treb-grid-font-family,inherit);font-size:var(--treb-grid-font-size,14px);stroke:var(--treb-grid-grid-color,#ccccd4);background:var(--treb-grid-background,#fff)}.treb-main.treb-main .frozen-selection.highlight-area{background:rgba(87,184,255,.25);border-bottom-color:#2176ae;border-left-color:#2176ae}.treb-main.treb-main .treb-autocomplete-tooltip{background:var(--treb-autocomplete-tooltip-background,#fffbb5);border:1px solid var(--treb-autocomplete-tooltip-border-color,unset);border-radius:2px;color:var(--treb-autocomplete-tooltip-color,inherit);font-size:14px;line-height:normal;margin:4px 0;padding:3px 8px}.treb-main.treb-main .treb-autocomplete-tooltip .active-argument{font-weight:700}.treb-main.treb-main .treb-autocomplete-tooltip .function-description{font-style:italic}.treb-main.treb-main .treb-autocomplete{background:var(--treb-autocomplete-background,#fff);border:1px solid var(--treb-autocomplete-border-color,var(--treb-ui-border-color,#ccc));border-radius:2px;box-shadow:0 1px 4px 2px hsla(0,0%,43%,.2);font-size:14px}.treb-main.treb-main .treb-autocomplete li{color:var(--treb-autocomplete-entry-color,#333)}.treb-main.treb-main .treb-autocomplete li a.selected{background:var(--treb-autocomplete-selected-entry-background,#2e8dd6);color:var(--treb-autocomplete-selected-entry-color,#fff)}.treb-main.treb-main .treb-header-overlay{stroke:none;color:var(--treb-selection-color-unfocused,var(--treb-selection-color,#4caaf1))}.treb-main.treb-main .treb-header-overlay .treb-overlay{fill:#000;stroke:none;opacity:.05}.treb-main.treb-main .treb-header-overlay .treb-highlight{fill:currentColor}.treb-main.treb-main .treb-editor-container>div [data-highlight-index="1"],.treb-main.treb-main .treb-overlay-editor [data-highlight-index="1"]{color:var(--text-reference-color-1)}.treb-main.treb-main .treb-editor-container>div [data-highlight-index="2"],.treb-main.treb-main .treb-overlay-editor [data-highlight-index="2"]{color:var(--text-reference-color-2)}.treb-main.treb-main .treb-editor-container>div [data-highlight-index="3"],.treb-main.treb-main .treb-overlay-editor [data-highlight-index="3"]{color:var(--text-reference-color-3)}.treb-main.treb-main .treb-editor-container>div [data-highlight-index="4"],.treb-main.treb-main .treb-overlay-editor [data-highlight-index="4"]{color:var(--text-reference-color-4)}.treb-main.treb-main .treb-editor-container>div [data-highlight-index="5"],.treb-main.treb-main .treb-overlay-editor [data-highlight-index="5"]{color:var(--text-reference-color-5)}.treb-main.treb-main .treb-editor-container>div span.highlight-1,.treb-main.treb-main .treb-overlay-editor span.highlight-1{color:var(--text-reference-color-1)}.treb-main.treb-main .treb-editor-container>div span.highlight-2,.treb-main.treb-main .treb-overlay-editor span.highlight-2{color:var(--text-reference-color-2)}.treb-main.treb-main .treb-editor-container>div span.highlight-3,.treb-main.treb-main .treb-overlay-editor span.highlight-3{color:var(--text-reference-color-3)}.treb-main.treb-main .treb-editor-container>div span.highlight-4,.treb-main.treb-main .treb-overlay-editor span.highlight-4{color:var(--text-reference-color-4)}.treb-main.treb-main .treb-editor-container>div span.highlight-5,.treb-main.treb-main .treb-overlay-editor span.highlight-5{color:var(--text-reference-color-5)}.treb-main.treb-main .frozen-selection .selection,.treb-main.treb-main .treb-grid-selection .selection{stroke-width:var(--treb-selection-stroke-width,2px)}.treb-main.treb-main .frozen-selection .selection .treb-selection-outline,.treb-main.treb-main .treb-grid-selection .selection .treb-selection-outline{stroke:currentColor;fill:none}.treb-main.treb-main .frozen-selection .selection .treb-selection-fill,.treb-main.treb-main .treb-grid-selection .selection .treb-selection-fill{stroke:none;fill:currentColor;opacity:var(--treb-selection-fill-opacity,.1)}.treb-main.treb-main .frozen-selection .alternate-selection,.treb-main.treb-main .treb-grid-selection .alternate-selection{stroke-dasharray:var(--treb-alternate-selection-dasharray,3 2)}.treb-main.treb-main .frozen-selection .alternate-selection:nth-of-type(1n),.treb-main.treb-main .treb-grid-selection .alternate-selection:nth-of-type(1n){color:var(--alternate-selection-color-1)}.treb-main.treb-main .frozen-selection .alternate-selection:nth-of-type(2n),.treb-main.treb-main .treb-grid-selection .alternate-selection:nth-of-type(2n){color:var(--alternate-selection-color-2)}.treb-main.treb-main .frozen-selection .alternate-selection:nth-of-type(3n),.treb-main.treb-main .treb-grid-selection .alternate-selection:nth-of-type(3n){color:var(--alternate-selection-color-3)}.treb-main.treb-main .frozen-selection .alternate-selection:nth-of-type(4n),.treb-main.treb-main .treb-grid-selection .alternate-selection:nth-of-type(4n){color:var(--alternate-selection-color-4)}.treb-main.treb-main .frozen-selection .alternate-selection:nth-of-type(5n),.treb-main.treb-main .treb-grid-selection .alternate-selection:nth-of-type(5n){color:var(--alternate-selection-color-5)}.treb-main.treb-main .frozen-selection .primary-selection,.treb-main.treb-main .treb-grid-selection .primary-selection{color:var(--treb-selection-color-unfocused,var(--treb-selection-color,#4caaf1))}.treb-main.treb-main .frozen-selection .primary-selection .treb-selection-nub,.treb-main.treb-main .treb-grid-selection .primary-selection .treb-selection-nub{stroke:#fff;fill:currentColor;stroke-width:1px}.treb-main.treb-main .treb-tooltip{background:var(--treb-resize-tooltip-background,rgba(0,0,0,.8));border-color:var(--treb-resize-tooltip-background,rgba(0,0,0,.8));color:var(--treb-resize-tooltip-color,#fff);font-size:11pt}.treb-main.treb-main .treb-spreadsheet-footer .treb-add-tab,.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs>li{background:var(--treb-tab-bar-tab-background,#eeeef2);color:var(--treb-tab-bar-tab-color,var(--treb-ui-color,inherit))}.treb-main.treb-main .treb-spreadsheet-footer .treb-add-tab[selected],.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs>li[selected]{background:var(--treb-tab-bar-active-tab-background,#fff);border-bottom-color:var(--treb-tab-bar-active-tab-border-color,currentColor);color:var(--treb-tab-bar-active-tab-color,var(--treb-ui-color,inherit))}.treb-main.treb-main .treb-formula-bar .treb-address-label,.treb-main.treb-main .treb-formula-bar .treb-editor-container{background:var(--treb-formula-bar-background,transparent);color:var(--treb-formula-bar-color,var(--treb-ui-color,inherit))}.treb-main.treb-main .treb-formula-bar .treb-address-label[locked],.treb-main.treb-main .treb-formula-bar .treb-editor-container[locked]{background:var(--treb-formula-bar-locked-background,#eef4fc);position:relative}.treb-main.treb-main .treb-formula-bar .treb-address-label[locked]:after,.treb-main.treb-main .treb-formula-bar .treb-editor-container[locked]:after{content:"";height:12px;opacity:.4;position:absolute;right:2px;top:2px;width:12px;--icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath fill='currentColor' d='M416 224h-16v-80C400 65 335 0 256 0S112 65 112 144v80H96c-35 0-64 29-64 64v160c0 35 29 64 64 64h320c35 0 64-29 64-64V288c0-35-29-64-64-64m-240-80c0-44 36-80 80-80s80 36 80 80v80H176z'/%3E%3C/svg%3E");background:var(--treb-formula-bar-lock-icon-color,currentColor);mask-image:var(--icon);-webkit-mask-image:var(--icon);mask-position:center;-webkit-mask-position:center;mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat;mask-size:12px 12px;-webkit-mask-size:12px 12px}.treb-main.treb-main .treb-annotation-textbox{background:Canvas;height:100%;left:0;overflow:hidden;padding:.5em;position:relative;top:0;width:100%}.treb-main.treb-main .treb-annotation-textbox p{margin-block-end:0;margin-block-start:0}.treb-dark-theme{--treb-autocomplete-background:#333;--treb-autocomplete-border-color:#fff;--treb-autocomplete-entry-color:#fff;--treb-autocomplete-selected-entry-background:darkred;--treb-autocomplete-tooltip-background:darkred;--treb-autocomplete-tooltip-border-color:#fff;--treb-autocomplete-tooltip-color:#fff;--treb-chart-background:#000;--treb-chart-grid-color:#976;--treb-chart-grid-zero-color:#fdd;--treb-chart-text-color:#fff;--treb-dialog-background:#000;--treb-dialog-color:#fff;--treb-dropdown-background:#000;--treb-dropdown-border-color:#fff;--treb-dropdown-caret-active-background:darkred;--treb-dropdown-caret-background:#444;--treb-dropdown-caret-border-color:#fff;--treb-dropdown-caret-color:#fff;--treb-dropdown-color:#fff;--treb-dropdown-selected-background:darkred;--treb-grid-background:#000;--treb-grid-default-color:#fff;--treb-grid-grid-color:#444;--treb-grid-header-background:#444;--treb-grid-header-grid-color:#000;--treb-note-background:#333;--treb-note-border-color:#aaa;--treb-note-color:#fff;--treb-note-marker-color:pink;--treb-resize-tooltip-background:#fff;--treb-resize-tooltip-color:#000;--treb-scale-slider-accent-color:#fff;--treb-scale-slider-background:#333;--treb-scale-slider-border-color:#aaa;--treb-selection-color:#ff0;--treb-selection-fill-opacity:.2;--treb-sidebar-button-background:#000;--treb-sidebar-button-border-color:#888;--treb-stats-value-background:#223;--treb-tab-bar-tab-background:#000;--treb-tab-bar-tab-color:#fff;--treb-theme-color-1:#222;--treb-theme-color-2:#ddd;--treb-toolbar-active-button-background:#555;--treb-toolbar-button-background:#000;--treb-toolbar-hover-button-background:#444;--treb-ui-color:#fff;--treb-table-header-background:#334;--treb-table-odd-background:#122;--treb-table-header-font-weight:700;--treb-table-header-border-top:#889;--treb-table-header-border-bottom:#889;--treb-table-footer-border-bottom:#889;--treb-table-odd-border-top:#889;--treb-table-odd-border-bottom:#889;--treb-table-even-border-top:#889;--treb-table-even-border-bottom:#889;--treb-table-total-border-top:#889;--treb-table-total-border-bottom:#889;--treb-table-total-background:#334;--treb-table-total-font-weight:700;--treb-color-scheme:dark;--treb-resize-handle-color:#add8e6;--treb-resize-frame-color:#add8e6;--treb-formula-bar-locked-background:#234;--treb-grid-background:#1e1e1e;--treb-grid-header-background:#565656;--treb-grid-header-color:#ddd;--treb-tab-bar-active-tab-background:#444;--treb-tab-bar-tab-background:transparent;--treb-tab-bar-tab-border-color:#444;--treb-ui-border-color:#aaa;--treb-toolbar-button-background:#565656;--treb-toolbar-button-background:#212121;--treb-toolbar-border-color:#434343;--treb-toolbar-color:#ddd;--treb-spill-border-color:pink;--treb-spill-border-filter:drop-shadow(3px 3px 2px hsla(0,0%,100%,.95))}@media (prefers-color-scheme:dark){.treb-light-dark-theme{--treb-autocomplete-background:#333;--treb-autocomplete-border-color:#fff;--treb-autocomplete-entry-color:#fff;--treb-autocomplete-selected-entry-background:darkred;--treb-autocomplete-tooltip-background:darkred;--treb-autocomplete-tooltip-border-color:#fff;--treb-autocomplete-tooltip-color:#fff;--treb-chart-background:#000;--treb-chart-grid-color:#976;--treb-chart-grid-zero-color:#fdd;--treb-chart-text-color:#fff;--treb-dialog-background:#000;--treb-dialog-color:#fff;--treb-dropdown-background:#000;--treb-dropdown-border-color:#fff;--treb-dropdown-caret-active-background:darkred;--treb-dropdown-caret-background:#444;--treb-dropdown-caret-border-color:#fff;--treb-dropdown-caret-color:#fff;--treb-dropdown-color:#fff;--treb-dropdown-selected-background:darkred;--treb-grid-background:#000;--treb-grid-default-color:#fff;--treb-grid-grid-color:#444;--treb-grid-header-background:#444;--treb-grid-header-grid-color:#000;--treb-note-background:#333;--treb-note-border-color:#aaa;--treb-note-color:#fff;--treb-note-marker-color:pink;--treb-resize-tooltip-background:#fff;--treb-resize-tooltip-color:#000;--treb-scale-slider-accent-color:#fff;--treb-scale-slider-background:#333;--treb-scale-slider-border-color:#aaa;--treb-selection-color:#ff0;--treb-selection-fill-opacity:.2;--treb-sidebar-button-background:#000;--treb-sidebar-button-border-color:#888;--treb-stats-value-background:#223;--treb-tab-bar-tab-background:#000;--treb-tab-bar-tab-color:#fff;--treb-theme-color-1:#222;--treb-theme-color-2:#ddd;--treb-toolbar-active-button-background:#555;--treb-toolbar-button-background:#000;--treb-toolbar-hover-button-background:#444;--treb-ui-color:#fff;--treb-table-header-background:#334;--treb-table-odd-background:#122;--treb-table-header-font-weight:700;--treb-table-header-border-top:#889;--treb-table-header-border-bottom:#889;--treb-table-footer-border-bottom:#889;--treb-table-odd-border-top:#889;--treb-table-odd-border-bottom:#889;--treb-table-even-border-top:#889;--treb-table-even-border-bottom:#889;--treb-table-total-border-top:#889;--treb-table-total-border-bottom:#889;--treb-table-total-background:#334;--treb-table-total-font-weight:700;--treb-color-scheme:dark;--treb-resize-handle-color:#add8e6;--treb-resize-frame-color:#add8e6;--treb-formula-bar-locked-background:#234;--treb-grid-background:#1e1e1e;--treb-grid-header-background:#565656;--treb-grid-header-color:#ddd;--treb-tab-bar-active-tab-background:#444;--treb-tab-bar-tab-background:transparent;--treb-tab-bar-tab-border-color:#444;--treb-ui-border-color:#aaa;--treb-toolbar-button-background:#565656;--treb-toolbar-button-background:#212121;--treb-toolbar-border-color:#434343;--treb-toolbar-color:#ddd;--treb-spill-border-color:pink;--treb-spill-border-filter:drop-shadow(3px 3px 2px hsla(0,0%,100%,.95))}}.treb-chart,.treb-main.treb-main .treb-chart{background:var(--treb-chart-background,#fff)}.treb-main.treb-main .treb-inherit-font .treb-chart{font-family:inherit}.treb-chart{--segment-2-offset:-20;--segment-3-offset:10;--segment-4-offset:-10;--segment-5-offset:20;--segment-6-offset:-25}.treb-chart .series-1{color:var(--treb-applied-theme-color-1)}.treb-chart .series-2{color:var(--treb-applied-theme-color-2)}.treb-chart .series-3{color:var(--treb-applied-theme-color-3)}.treb-chart .series-4{color:var(--treb-applied-theme-color-4)}.treb-chart .series-5{color:var(--treb-applied-theme-color-5)}.treb-chart .series-6{color:var(--treb-applied-theme-color-6)}.treb-chart .series-7{color:lch(from var(--treb-applied-theme-color-1) calc(l + var(--segment-2-offset)) c h)}.treb-chart .series-8{color:lch(from var(--treb-applied-theme-color-2) calc(l + var(--segment-2-offset)) c h)}.treb-chart .series-9{color:lch(from var(--treb-applied-theme-color-3) calc(l + var(--segment-2-offset)) c h)}.treb-chart .series-10{color:lch(from var(--treb-applied-theme-color-4) calc(l + var(--segment-2-offset)) c h)}.treb-chart .series-11{color:lch(from var(--treb-applied-theme-color-5) calc(l + var(--segment-2-offset)) c h)}.treb-chart .series-12{color:lch(from var(--treb-applied-theme-color-6) calc(l + var(--segment-2-offset)) c h)}.treb-chart .series-13{color:lch(from var(--treb-applied-theme-color-1) calc(l + var(--segment-3-offset)) c h)}.treb-chart .series-14{color:lch(from var(--treb-applied-theme-color-2) calc(l + var(--segment-3-offset)) c h)}.treb-chart .series-15{color:lch(from var(--treb-applied-theme-color-3) calc(l + var(--segment-3-offset)) c h)}.treb-chart .series-16{color:lch(from var(--treb-applied-theme-color-4) calc(l + var(--segment-3-offset)) c h)}.treb-chart .series-17{color:lch(from var(--treb-applied-theme-color-5) calc(l + var(--segment-3-offset)) c h)}.treb-chart .series-18{color:lch(from var(--treb-applied-theme-color-6) calc(l + var(--segment-3-offset)) c h)}.treb-chart .series-19{color:lch(from var(--treb-applied-theme-color-1) calc(l + var(--segment-4-offset)) c h)}.treb-chart .series-20{color:lch(from var(--treb-applied-theme-color-2) calc(l + var(--segment-4-offset)) c h)}.treb-chart .series-21{color:lch(from var(--treb-applied-theme-color-3) calc(l + var(--segment-4-offset)) c h)}.treb-chart .series-22{color:lch(from var(--treb-applied-theme-color-4) calc(l + var(--segment-4-offset)) c h)}.treb-chart .series-23{color:lch(from var(--treb-applied-theme-color-5) calc(l + var(--segment-4-offset)) c h)}.treb-chart .series-24{color:lch(from var(--treb-applied-theme-color-6) calc(l + var(--segment-4-offset)) c h)}.treb-chart .series-25{color:lch(from var(--treb-applied-theme-color-1) calc(l + var(--segment-5-offset)) c h)}.treb-chart .series-26{color:lch(from var(--treb-applied-theme-color-2) calc(l + var(--segment-5-offset)) c h)}.treb-chart .series-27{color:lch(from var(--treb-applied-theme-color-3) calc(l + var(--segment-5-offset)) c h)}.treb-chart .series-28{color:lch(from var(--treb-applied-theme-color-4) calc(l + var(--segment-5-offset)) c h)}.treb-chart .series-29{color:lch(from var(--treb-applied-theme-color-5) calc(l + var(--segment-5-offset)) c h)}.treb-chart .series-30{color:lch(from var(--treb-applied-theme-color-6) calc(l + var(--segment-5-offset)) c h)}.treb-chart .series-31{color:lch(from var(--treb-applied-theme-color-1) calc(l + var(--segment-6-offset)) c h)}.treb-chart .series-32{color:lch(from var(--treb-applied-theme-color-2) calc(l + var(--segment-6-offset)) c h)}.treb-chart .series-33{color:lch(from var(--treb-applied-theme-color-3) calc(l + var(--segment-6-offset)) c h)}.treb-chart .series-34{color:lch(from var(--treb-applied-theme-color-4) calc(l + var(--segment-6-offset)) c h)}.treb-chart .series-35{color:lch(from var(--treb-applied-theme-color-5) calc(l + var(--segment-6-offset)) c h)}.treb-chart .series-36{color:lch(from var(--treb-applied-theme-color-6) calc(l + var(--segment-6-offset)) c h)}.treb-chart .chart-title{font-size:1.4em}.treb-chart .axis-group{font-size:.9em}.treb-chart .axis-group .series-name{font-size:1.3em}.treb-chart text{fill:var(--treb-chart-text-color,#000);stroke:none}.treb-chart .legend{font-size:1.05em}.treb-chart .legend rect{fill:currentColor}.treb-chart .legend circle{fill:currentColor;fill-opacity:.5;stroke:currentColor;stroke-width:2px;r:.25em}.treb-chart .chart-grid,.treb-chart .chart-ticks{stroke:var(--treb-chart-grid-color,#ddd)}.treb-chart .chart-grid.zero,.treb-chart .chart-ticks.zero{stroke:var(--treb-chart-grid-zero-color,var(--treb-chart-grid-color,#999))}.treb-chart .label-target{stroke:none;fill:transparent}.treb-chart path.label-target{transition:fill .2s}.treb-chart path.label-target:hover{fill:rgba(0,0,0,.15)}.treb-chart .data-label{opacity:0;pointer-events:none;transition:opacity .2s ease-in-out}.treb-chart .data-label text{fill:#fff}.treb-chart .data-label path{fill:#000}.treb-chart .data-label .marker-highlight{fill:currentColor;stroke:none}.treb-chart .label-target:hover+.data-label{opacity:1}.treb-chart .chart-line{stroke:currentColor;fill:none;stroke-width:2}.treb-chart .chart-area .line{stroke:currentColor;stroke-width:2px;fill:none}.treb-chart .chart-area .fill{fill:currentColor;opacity:.5}.treb-chart .box-plot .iqr{fill:none;stroke:CanvasText;stroke-width:1px}.treb-chart .box-plot .median{stroke-width:3px;stroke:CanvasText;fill:none}.treb-chart .box-plot .outlier{r:3}.treb-chart .box-plot .outlier,.treb-chart .box-plot .whisker,.treb-chart .box-plot .whisker-extent{stroke-width:1px;stroke:CanvasText;fill:none}.treb-chart .box-plot .whisker-extent{stroke-dasharray:3 3}.treb-chart .bubble-chart{stroke-width:3;fill:color-mix(in srgb,currentColor 75%,transparent);stroke:currentColor}.treb-chart .bubble-label .label-background{stroke:none;fill:none}.treb-chart .bubble-label .label-text{transform:translate(var(--translate-offset),var(--translate-offset))}.treb-chart .scatter-plot{stroke-width:3;fill:none;stroke:currentColor}.treb-chart .scatter-plot .fill{fill:currentColor;opacity:.5;stroke:none}.treb-chart .scatter-plot .marker{stroke-width:2.5px;fill:#fff;transition:stroke-width .15s ease-in}.treb-chart .scatter-plot .marker:hover{stroke-width:5px}.treb-chart .donut path{fill:currentColor}.treb-chart .donut path.callout{fill:none;stroke:#999;stroke-dasharray:2 2}.treb-chart .donut text.callout-label{font-size:1em}.treb-chart .chart-column{fill:currentColor;stroke:none}.treb-chart .mc-correlation{stroke:currentColor;stroke-width:1}.treb-main.treb-main{--treb-icon-svg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' width='153.073' height='133.742' viewBox='0.673 4.629 153.073 133.742'%3E%3ClinearGradient id='a' x1='.673' x2='153.746' y1='71.5' y2='71.5' gradientUnits='userSpaceOnUse'%3E%3Cstop offset='0' style='stop-color:%235cb5ff'/%3E%3Cstop offset='1' style='stop-color:%230059b9'/%3E%3C/linearGradient%3E%3Cpath fill='url(%23a)' d='M91.656 28.313c-4.989 0-17.266 6.249-21.305 8.504-2.344-2.473-2.603-6.162-3.036-10.933-2.344 2.429-.824 9.806 0 12.496-10.238 7.635-18.83 15.531-27.597 24.471-2.992-4.729-5.031-8.593-5.726-17.183-3.038 6.509.867 15.057 3.121 19.784-9.674 12.193-19.263 25.297-27.03 37.834-35.488-74.973 72.853-119.534 143.663-88.855-43.867 29.199-55.192 121.353-132.248 96.843-5.423 7.809-9.069 18.006-13.538 27.072-3.73.263-6.334-1.646-7.288-3.12 7.506-18.181 17.183-34.192 27.075-49.984 10.718.306 21.346.478 30.198-1.04-7.681-2.038-16.877-.78-26.032-3.123C37.51 70.361 45.667 62.203 53.78 54.004c8.808.782 17.746 3.21 27.074 1.041-8.111-1.431-15.966-1.952-22.909-4.165 7.594-8.378 22.777-17.491 33.711-22.567'/%3E%3C/svg%3E")}.treb-main.treb-main .treb-icon-64{background:no-repeat 50%/100% var(--treb-icon-svg);height:64px;width:64px}.treb-main.treb-main .treb-dialog-mask{align-items:center;display:flex;height:100%;justify-content:center;left:0;opacity:0;pointer-events:none;position:absolute;top:0;transition:opacity .2s;width:100%;z-index:1000}.treb-main.treb-main .treb-embed-dialog{align-items:center;background:var(--treb-dialog-background,#fff);border:1px solid var(--treb-dialog-border-color,var(--treb-ui-border-color,#999));border-radius:3px;border-top:3px solid #999;box-shadow:0 4px 6px -4px rgba(0,0,0,.3);color:var(--treb-dialog-color,#000);display:flex;flex-direction:row;font-size:var(--treb-dialog-font-size,16px);line-height:1.6em;padding:1rem;position:relative;text-align:left}.treb-main.treb-main .treb-embed-dialog>*{display:none}.treb-main.treb-main .treb-embed-dialog>div{position:relative}.treb-main.treb-main .treb-embed-dialog>:nth-child(2){display:block;flex-grow:1;padding:2px 20px 2px 12px}.treb-main.treb-main .treb-embed-dialog>.treb-close-box{background:transparent;border:0;padding:4px;position:absolute;right:0;top:0}.treb-main.treb-main .treb-embed-dialog>.treb-close-box>svg{fill:#73828c;cursor:default;height:20px;width:20px}.treb-main.treb-main .treb-embed-dialog>.treb-close-box>svg:active,.treb-main.treb-main .treb-embed-dialog>.treb-close-box>svg:hover{fill:#049cfb}.treb-main.treb-main .treb-embed-dialog small{display:block;font-size:.9em}.treb-main.treb-main .treb-embed-dialog a{color:inherit;text-decoration:none}.treb-main.treb-main .treb-embed-dialog a:active,.treb-main.treb-main .treb-embed-dialog a:hover{color:#049cfb}.treb-main.treb-main .treb-embed-dialog.dialog-type-success{border-top-color:#44d926;border-top-width:3px}.treb-main.treb-main .treb-embed-dialog.dialog-type-about{border-top-color:#009dff;border-top-width:3px}.treb-main.treb-main .treb-embed-dialog.dialog-type-error{border-top-color:#f92f06;border-top-width:3px}.treb-main.treb-main .treb-embed-dialog.dialog-type-info{border-top-color:#009dff;border-top-width:3px}.treb-main.treb-main .treb-embed-dialog .treb-embed-dialog-message,.treb-main.treb-main .treb-embed-dialog .treb-embed-dialog-title{white-space:pre}.treb-main.treb-main .treb-embed-dialog .treb-embed-progress-container{border:1px solid #ddd;height:6px;margin:1rem auto .5rem;position:relative;width:100%}.treb-main.treb-main .treb-embed-dialog .treb-embed-progress-bar{background:#52880b;height:100%;left:0;position:relative;top:0}.treb-main.treb-main .treb-spinner{align-items:center;background:transparent;display:flex;height:100%;justify-content:center;left:0;opacity:0;position:absolute;top:0;transition:visibility .25s,opacity .25s ease;visibility:collapse;width:100%;z-index:1000}.treb-main.treb-main .treb-spinner.visible{opacity:1;transition:visibility 0s,opacity 1s ease;visibility:visible}.treb-main.treb-main .treb-spinner>div{display:inline-block;height:80px;position:relative;width:80px}.treb-main.treb-main .treb-spinner>div div{animation:treb-spinner 1.2s cubic-bezier(.5,0,.5,1) infinite;border:8px solid #fff;border-color:var(--treb-spinner-color,currentColor) transparent transparent transparent;border-radius:50%;box-sizing:border-box;display:block;height:64px;margin:8px;position:absolute;width:64px}.treb-main.treb-main .treb-spinner>div div:first-child{animation-delay:-.45s}.treb-main.treb-main .treb-spinner>div div:nth-child(2){animation-delay:-.3s}.treb-main.treb-main .treb-spinner>div div:nth-child(3){animation-delay:-.15s}@keyframes treb-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.treb-main.treb-main{--icon-x:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708"/></svg>');--icon-popout:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28"><path fill="currentColor" d="M22 14.5v5c0 2.484-2.016 4.5-4.5 4.5h-13A4.5 4.5 0 0 1 0 19.5v-13C0 4.016 2.016 2 4.5 2h11c.281 0 .5.219.5.5v1c0 .281-.219.5-.5.5h-11A2.507 2.507 0 0 0 2 6.5v13C2 20.875 3.125 22 4.5 22h13c1.375 0 2.5-1.125 2.5-2.5v-5c0-.281.219-.5.5-.5h1c.281 0 .5.219.5.5M28 1v8c0 .547-.453 1-1 1a1 1 0 0 1-.703-.297l-2.75-2.75L13.36 17.14c-.094.094-.234.156-.359.156s-.266-.063-.359-.156l-1.781-1.781c-.094-.094-.156-.234-.156-.359s.063-.266.156-.359L21.048 4.454l-2.75-2.75a1 1 0 0 1-.297-.703c0-.547.453-1 1-1h8c.547 0 1 .453 1 1z"/></svg>');--icon-toolbar:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 28"><path fill="currentColor" d="M5.5 22v2H0v-2zm5.5-2c.547 0 1 .453 1 1v4c0 .547-.453 1-1 1H7c-.547 0-1-.453-1-1v-4c0-.547.453-1 1-1zm2.5-6v2H0v-2zm-10-8v2H0V6zM24 22v2H12.5v-2zM9 4c.547 0 1 .453 1 1v4c0 .547-.453 1-1 1H5c-.547 0-1-.453-1-1V5c0-.547.453-1 1-1zm10 8c.547 0 1 .453 1 1v4c0 .547-.453 1-1 1h-4c-.547 0-1-.453-1-1v-4c0-.547.453-1 1-1zm5 2v2h-3.5v-2zm0-8v2H10.5V6z"/></svg>');--icon-export:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 26 28"><path fill="currentColor" d="M20 21c0-.547-.453-1-1-1s-1 .453-1 1 .453 1 1 1 1-.453 1-1m4 0c0-.547-.453-1-1-1s-1 .453-1 1 .453 1 1 1 1-.453 1-1m2-3.5v5a1.5 1.5 0 0 1-1.5 1.5h-23A1.5 1.5 0 0 1 0 22.5v-5A1.5 1.5 0 0 1 1.5 16h7.266l2.109 2.125c.578.562 1.328.875 2.125.875s1.547-.313 2.125-.875L17.25 16h7.25a1.5 1.5 0 0 1 1.5 1.5m-5.078-8.891a.98.98 0 0 1-.219 1.094l-7 7c-.187.203-.453.297-.703.297s-.516-.094-.703-.297l-7-7a.98.98 0 0 1-.219-1.094C5.234 8.25 5.594 8 6 8h4V1c0-.547.453-1 1-1h4c.547 0 1 .453 1 1v7h4c.406 0 .766.25.922.609"/></svg>');--icon-reset:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 28"><path fill="currentColor" d="M23.609 16.5c0 .031 0 .078-.016.109C22.265 22.14 17.702 26 11.937 26c-3.047 0-6-1.203-8.219-3.313l-2.016 2.016A1 1 0 0 1 .999 25c-.547 0-1-.453-1-1v-7c0-.547.453-1 1-1h7c.547 0 1 .453 1 1a1 1 0 0 1-.297.703l-2.141 2.141A7.99 7.99 0 0 0 11.998 22a7.98 7.98 0 0 0 6.813-3.813c.375-.609.562-1.203.828-1.828.078-.219.234-.359.469-.359h3c.281 0 .5.234.5.5zM24 4v7c0 .547-.453 1-1 1h-7c-.547 0-1-.453-1-1a1 1 0 0 1 .297-.703l2.156-2.156A8.04 8.04 0 0 0 12 6a7.98 7.98 0 0 0-6.813 3.813c-.375.609-.562 1.203-.828 1.828-.078.219-.234.359-.469.359H.781a.503.503 0 0 1-.5-.5v-.109C1.625 5.844 6.234 2 12 2c3.063 0 6.047 1.219 8.266 3.313l2.031-2.016A1 1 0 0 1 23 3c.547 0 1 .453 1 1"/></svg>');--icon-about:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 28"><path fill="currentColor" d="M14 21.5v-3c0-.281-.219-.5-.5-.5h-3c-.281 0-.5.219-.5.5v3c0 .281.219.5.5.5h3c.281 0 .5-.219.5-.5M18 11c0-2.859-3-5-5.688-5-2.547 0-4.453 1.094-5.797 3.328a.49.49 0 0 0 .125.656l2.063 1.563a.48.48 0 0 0 .297.094.5.5 0 0 0 .391-.187c.734-.938 1.047-1.219 1.344-1.437.266-.187.781-.375 1.344-.375 1 0 1.922.641 1.922 1.328 0 .812-.422 1.219-1.375 1.656-1.109.5-2.625 1.797-2.625 3.313v.562c0 .281.219.5.5.5h3c.281 0 .5-.219.5-.5 0-.359.453-1.125 1.188-1.547 1.188-.672 2.812-1.578 2.812-3.953zm6 3c0 6.625-5.375 12-12 12S0 20.625 0 14 5.375 2 12 2s12 5.375 12 12"/></svg>');--icon-chevron-left:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 21 28"><path fill="currentColor" d="M18.297 4.703 10 13l8.297 8.297a.99.99 0 0 1 0 1.406l-2.594 2.594a.99.99 0 0 1-1.406 0L2.703 13.703a.99.99 0 0 1 0-1.406L14.297.703a.99.99 0 0 1 1.406 0l2.594 2.594a.99.99 0 0 1 0 1.406"/></svg>');--icon-chevron-right:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19 28"><path fill="currentColor" d="M17.297 13.703 5.703 25.297a.99.99 0 0 1-1.406 0l-2.594-2.594a.99.99 0 0 1 0-1.406L10 13 1.703 4.703a.99.99 0 0 1 0-1.406L4.297.703a.99.99 0 0 1 1.406 0l11.594 11.594a.99.99 0 0 1 0 1.406"/></svg>');--icon-revert:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 28"><path fill="currentColor" d="M24 14c0 6.609-5.391 12-12 12a11.97 11.97 0 0 1-9.234-4.328.52.52 0 0 1 .031-.672l2.141-2.156a.6.6 0 0 1 .391-.141.5.5 0 0 1 .359.187A7.91 7.91 0 0 0 12 21.999c4.406 0 8-3.594 8-8s-3.594-8-8-8A7.95 7.95 0 0 0 6.563 8.14l2.141 2.156a.96.96 0 0 1 .219 1.078 1 1 0 0 1-.922.625h-7c-.547 0-1-.453-1-1v-7c0-.406.25-.766.625-.922a.96.96 0 0 1 1.078.219l2.031 2.016c2.203-2.078 5.187-3.313 8.266-3.313 6.609 0 12 5.391 12 12zM14 9.5v7c0 .281-.219.5-.5.5h-5a.494.494 0 0 1-.5-.5v-1c0-.281.219-.5.5-.5H12V9.5c0-.281.219-.5.5-.5h1c.281 0 .5.219.5.5"/></svg>');--icon-text-indent:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-text-indent-left" viewBox="0 0 16 16"><path d="M2 3.5a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5m.646 2.146a.5.5 0 0 1 .708 0l2 2a.5.5 0 0 1 0 .708l-2 2a.5.5 0 0 1-.708-.708L4.293 8 2.646 6.354a.5.5 0 0 1 0-.708M7 6.5a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1h-6a.5.5 0 0 1-.5-.5m0 3a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1h-6a.5.5 0 0 1-.5-.5m-5 3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5"/></svg>');--icon-text-outdent:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-text-indent-right" viewBox="0 0 16 16"><path d="M2 3.5a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5m10.646 2.146a.5.5 0 0 1 .708.708L11.707 8l1.647 1.646a.5.5 0 0 1-.708.708l-2-2a.5.5 0 0 1 0-.708zM2 6.5a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1h-6a.5.5 0 0 1-.5-.5m0 3a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1h-6a.5.5 0 0 1-.5-.5m0 3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5"/></svg>');--icon-text-align-left:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M2 12.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5m0-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5m0-3a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5m0-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5"/></svg>');--icon-text-align-center:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M4 12.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5m-2-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5m2-3a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5m-2-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5"/></svg>');--icon-text-align-right:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M6 12.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5m-4-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5m4-3a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5m-4-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5"/></svg>');--icon-text-align-top:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath d='M8 15a.5.5 0 0 0 .5-.5V5.707l3.146 3.146a.5.5 0 0 0 .707-.707l-4-4a.5.5 0 0 0-.706-.001l-.001.001-4 4a.5.5 0 0 0 .708.707L7.5 5.707V14.5a.5.5 0 0 0 .5.5'/%3E%3Cpath fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-miterlimit='10' d='M3 1.5h10'/%3E%3C/svg%3E");--icon-text-align-middle:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M1 8a.5.5 0 0 1 .5-.5h13a.5.5 0 0 1 0 1h-13A.5.5 0 0 1 1 8m7-8a.5.5 0 0 1 .5.5v3.793l1.146-1.147a.5.5 0 0 1 .708.708l-2 2a.5.5 0 0 1-.708 0l-2-2a.5.5 0 1 1 .708-.708L7.5 4.293V.5A.5.5 0 0 1 8 0m-.5 11.707-1.146 1.147a.5.5 0 0 1-.708-.708l2-2a.5.5 0 0 1 .708 0l2 2a.5.5 0 0 1-.708.708L8.5 11.707V15.5a.5.5 0 0 1-1 0z"/></svg>');--icon-text-align-bottom:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath d='M8 1a.5.5 0 0 0-.5.5v8.793L4.354 7.146a.5.5 0 0 0-.707.707l4 4a.5.5 0 0 0 .707.001l.001-.001 4-4a.5.5 0 0 0-.708-.707L8.5 10.293V1.5A.5.5 0 0 0 8 1'/%3E%3Cpath fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-miterlimit='10' d='M13 14.5H3'/%3E%3C/svg%3E");--icon-file-menu:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M.54 3.87.5 3a2 2 0 0 1 2-2h3.672a2 2 0 0 1 1.414.586l.828.828A2 2 0 0 0 9.828 3h3.982a2 2 0 0 1 1.992 2.181l-.637 7A2 2 0 0 1 13.174 14H2.826a2 2 0 0 1-1.991-1.819l-.637-7a2 2 0 0 1 .342-1.31zM2.19 4a1 1 0 0 0-.996 1.09l.637 7a1 1 0 0 0 .995.91h10.348a1 1 0 0 0 .995-.91l.637-7A1 1 0 0 0 13.81 4zm4.69-1.707A1 1 0 0 0 6.172 2H2.5a1 1 0 0 0-1 .981l.006.139q.323-.119.684-.12h5.396z"/></svg>');--icon-wrap-text:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M4 5h8a.5.5 0 0 0 0-1H4a.5.5 0 0 0 0 1M10 8H4a.5.5 0 0 0 0 1h6a1.5 1.5 0 0 1 0 3v-1.203l-2.953 1.707L10 14.203V13a2.5 2.5 0 1 0 0-5M3.75 12.5a.5.5 0 0 0 .5.5H6v-1H4.25a.5.5 0 0 0-.5.5"/></svg>');--icon-unmerge-cells:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M1.5 1a.5.5 0 0 0-.5.5v4a.5.5 0 0 1-1 0v-4A1.5 1.5 0 0 1 1.5 0h4a.5.5 0 0 1 0 1zM10 .5a.5.5 0 0 1 .5-.5h4A1.5 1.5 0 0 1 16 1.5v4a.5.5 0 0 1-1 0v-4a.5.5 0 0 0-.5-.5h-4a.5.5 0 0 1-.5-.5M.5 10a.5.5 0 0 1 .5.5v4a.5.5 0 0 0 .5.5h4a.5.5 0 0 1 0 1h-4A1.5 1.5 0 0 1 0 14.5v-4a.5.5 0 0 1 .5-.5m15 0a.5.5 0 0 1 .5.5v4a1.5 1.5 0 0 1-1.5 1.5h-4a.5.5 0 0 1 0-1h4a.5.5 0 0 0 .5-.5v-4a.5.5 0 0 1 .5-.5"/></svg>');--icon-merge-cells:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M5.5 0a.5.5 0 0 1 .5.5v4A1.5 1.5 0 0 1 4.5 6h-4a.5.5 0 0 1 0-1h4a.5.5 0 0 0 .5-.5v-4a.5.5 0 0 1 .5-.5m5 0a.5.5 0 0 1 .5.5v4a.5.5 0 0 0 .5.5h4a.5.5 0 0 1 0 1h-4A1.5 1.5 0 0 1 10 4.5v-4a.5.5 0 0 1 .5-.5M0 10.5a.5.5 0 0 1 .5-.5h4A1.5 1.5 0 0 1 6 11.5v4a.5.5 0 0 1-1 0v-4a.5.5 0 0 0-.5-.5h-4a.5.5 0 0 1-.5-.5m10 1a1.5 1.5 0 0 1 1.5-1.5h4a.5.5 0 0 1 0 1h-4a.5.5 0 0 0-.5.5v4a.5.5 0 0 1-1 0z"/></svg>');--icon-lock:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M8 1a2 2 0 0 1 2 2v4H6V3a2 2 0 0 1 2-2m3 6V3a3 3 0 0 0-6 0v4a2 2 0 0 0-2 2v5a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2M5 8h6a1 1 0 0 1 1 1v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V9a1 1 0 0 1 1-1"/></svg>');--icon-comment:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M14 1a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1h-2.5a2 2 0 0 0-1.6.8L8 14.333 6.1 11.8a2 2 0 0 0-1.6-.8H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zM2 0a2 2 0 0 0-2 2v8a2 2 0 0 0 2 2h2.5a1 1 0 0 1 .8.4l1.9 2.533a1 1 0 0 0 1.6 0l1.9-2.533a1 1 0 0 1 .8-.4H14a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2z"/></svg>');--icon-fill-color:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M6.192 2.78c-.458-.677-.927-1.248-1.35-1.643a3 3 0 0 0-.71-.515c-.217-.104-.56-.205-.882-.02-.367.213-.427.63-.43.896-.003.304.064.664.173 1.044.196.687.556 1.528 1.035 2.402L.752 8.22c-.277.277-.269.656-.218.918.055.283.187.593.36.903.348.627.92 1.361 1.626 2.068.707.707 1.441 1.278 2.068 1.626.31.173.62.305.903.36.262.05.64.059.918-.218l5.615-5.615c.118.257.092.512.05.939-.03.292-.068.665-.073 1.176v.123h.003a1 1 0 0 0 1.993 0H14v-.057a1 1 0 0 0-.004-.117c-.055-1.25-.7-2.738-1.86-3.494a4 4 0 0 0-.211-.434c-.349-.626-.92-1.36-1.627-2.067S8.857 3.052 8.23 2.704c-.31-.172-.62-.304-.903-.36-.262-.05-.64-.058-.918.219l-.217.216zM4.16 1.867c.381.356.844.922 1.311 1.632l-.704.705c-.382-.727-.66-1.402-.813-1.938a3.3 3.3 0 0 1-.131-.673q.137.09.337.274m.394 3.965c.54.852 1.107 1.567 1.607 2.033a.5.5 0 1 0 .682-.732c-.453-.422-1.017-1.136-1.564-2.027l1.088-1.088q.081.181.183.365c.349.627.92 1.361 1.627 2.068.706.707 1.44 1.278 2.068 1.626q.183.103.365.183l-4.861 4.862a1 1 0 0 1-.068-.01c-.137-.027-.342-.104-.608-.252-.524-.292-1.186-.8-1.846-1.46s-1.168-1.32-1.46-1.846c-.147-.265-.225-.47-.251-.607a1 1 0 0 1-.01-.068zm2.87-1.935a2.4 2.4 0 0 1-.241-.561c.135.033.324.11.562.241.524.292 1.186.8 1.846 1.46.45.45.83.901 1.118 1.31a3.5 3.5 0 0 0-1.066.091 11 11 0 0 1-.76-.694c-.66-.66-1.167-1.322-1.458-1.847z"/></svg>');--icon-text-color:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="16" height="16" viewBox="0 0 16 16"><path d="m12.259 14.001-1.389-3.727H5.465l-1.354 3.727h-1.3L7.609 1.397h1.178l4.772 12.604zM8.418 3.604a6 6 0 0 1-.127-.387 4 4 0 0 1-.11-.501h-.035a5.5 5.5 0 0 1-.247.888L5.86 9.211h4.614z"/></svg>');--icon-border-bottom:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M.969 0H0v.969h.5V1h.469V.969H1V.5H.969zm.937 1h.938V0h-.938zm1.875 0h.938V0H3.78v1zm1.875 0h.938V0h-.938zM7.531.969V1h.938V.969H8.5V.5h-.031V0H7.53v.5H7.5v.469zM9.406 1h.938V0h-.938zm1.875 0h.938V0h-.938zm1.875 0h.938V0h-.938zm1.875 0h.469V.969h.5V0h-.969v.5H15v.469h.031zM1 2.844v-.938H0v.938zm6.5-.938v.938h1v-.938zm7.5 0v.938h1v-.938zM1 4.719V3.78H0v.938h1zm6.5-.938v.938h1V3.78h-1zm7.5 0v.938h1V3.78h-1zM1 6.594v-.938H0v.938zm6.5-.938v.938h1v-.938zm7.5 0v.938h1v-.938zM.5 8.5h.469v-.031H1V7.53H.969V7.5H.5v.031H0v.938h.5zm1.406 0h.938v-1h-.938zm1.875 0h.938v-1H3.78v1zm1.875 0h.938v-1h-.938zm2.813 0v-.031H8.5V7.53h-.031V7.5H7.53v.031H7.5v.938h.031V8.5zm.937 0h.938v-1h-.938zm1.875 0h.938v-1h-.938zm1.875 0h.938v-1h-.938zm1.875 0h.469v-.031h.5V7.53h-.5V7.5h-.469v.031H15v.938h.031zM0 9.406v.938h1v-.938zm7.5 0v.938h1v-.938zm8.5.938v-.938h-1v.938zm-16 .937v.938h1v-.938zm7.5 0v.938h1v-.938zm8.5.938v-.938h-1v.938zm-16 .937v.938h1v-.938zm7.5 0v.938h1v-.938zm8.5.938v-.938h-1v.938zM0 15h16v1H0z"/></svg>');--icon-border-top:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M0 0v1h16V0zm1 2.844v-.938H0v.938zm6.5-.938v.938h1v-.938zm7.5 0v.938h1v-.938zM1 4.719V3.78H0v.938h1zm6.5-.938v.938h1V3.78h-1zm7.5 0v.938h1V3.78h-1zM1 6.594v-.938H0v.938zm6.5-.938v.938h1v-.938zm7.5 0v.938h1v-.938zM.5 8.5h.469v-.031H1V7.53H.969V7.5H.5v.031H0v.938h.5zm1.406 0h.938v-1h-.938zm1.875 0h.938v-1H3.78v1zm1.875 0h.938v-1h-.938zm2.813 0v-.031H8.5V7.53h-.031V7.5H7.53v.031H7.5v.938h.031V8.5zm.937 0h.938v-1h-.938zm1.875 0h.938v-1h-.938zm1.875 0h.938v-1h-.938zm1.875 0h.469v-.031h.5V7.53h-.5V7.5h-.469v.031H15v.938h.031zM0 9.406v.938h1v-.938zm7.5 0v.938h1v-.938zm8.5.938v-.938h-1v.938zm-16 .937v.938h1v-.938zm7.5 0v.938h1v-.938zm8.5.938v-.938h-1v.938zm-16 .937v.938h1v-.938zm7.5 0v.938h1v-.938zm8.5.938v-.938h-1v.938zM0 16h.969v-.5H1v-.469H.969V15H.5v.031H0zm1.906 0h.938v-1h-.938zm1.875 0h.938v-1H3.78v1zm1.875 0h.938v-1h-.938zm1.875-.5v.5h.938v-.5H8.5v-.469h-.031V15H7.53v.031H7.5v.469zm1.875.5h.938v-1h-.938zm1.875 0h.938v-1h-.938zm1.875 0h.938v-1h-.938zm1.875-.5v.5H16v-.969h-.5V15h-.469v.031H15v.469z"/></svg>');--icon-border-left:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M0 0v16h1V0zm1.906 1h.938V0h-.938zm1.875 0h.938V0H3.78v1zm1.875 0h.938V0h-.938zM7.531.969V1h.938V.969H8.5V.5h-.031V0H7.53v.5H7.5v.469zM9.406 1h.938V0h-.938zm1.875 0h.938V0h-.938zm1.875 0h.938V0h-.938zm1.875 0h.469V.969h.5V0h-.969v.5H15v.469h.031zM7.5 1.906v.938h1v-.938zm7.5 0v.938h1v-.938zM7.5 3.781v.938h1V3.78h-1zm7.5 0v.938h1V3.78h-1zM7.5 5.656v.938h1v-.938zm7.5 0v.938h1v-.938zM1.906 8.5h.938v-1h-.938zm1.875 0h.938v-1H3.78v1zm1.875 0h.938v-1h-.938zm2.813 0v-.031H8.5V7.53h-.031V7.5H7.53v.031H7.5v.938h.031V8.5zm.937 0h.938v-1h-.938zm1.875 0h.938v-1h-.938zm1.875 0h.938v-1h-.938zm1.875 0h.469v-.031h.5V7.53h-.5V7.5h-.469v.031H15v.938h.031zM7.5 9.406v.938h1v-.938zm8.5.938v-.938h-1v.938zm-8.5.937v.938h1v-.938zm8.5.938v-.938h-1v.938zm-8.5.937v.938h1v-.938zm8.5.938v-.938h-1v.938zM1.906 16h.938v-1h-.938zm1.875 0h.938v-1H3.78v1zm1.875 0h.938v-1h-.938zm1.875-.5v.5h.938v-.5H8.5v-.469h-.031V15H7.53v.031H7.5v.469zm1.875.5h.938v-1h-.938zm1.875 0h.938v-1h-.938zm1.875 0h.938v-1h-.938zm1.875-.5v.5H16v-.969h-.5V15h-.469v.031H15v.469z"/></svg>');--icon-border-right:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M.969 0H0v.969h.5V1h.469V.969H1V.5H.969zm.937 1h.938V0h-.938zm1.875 0h.938V0H3.78v1zm1.875 0h.938V0h-.938zM7.531.969V1h.938V.969H8.5V.5h-.031V0H7.53v.5H7.5v.469zM9.406 1h.938V0h-.938zm1.875 0h.938V0h-.938zm1.875 0h.938V0h-.938zM16 0h-1v16h1zM1 2.844v-.938H0v.938zm6.5-.938v.938h1v-.938zM1 4.719V3.78H0v.938h1zm6.5-.938v.938h1V3.78h-1zM1 6.594v-.938H0v.938zm6.5-.938v.938h1v-.938zM.5 8.5h.469v-.031H1V7.53H.969V7.5H.5v.031H0v.938h.5zm1.406 0h.938v-1h-.938zm1.875 0h.938v-1H3.78v1zm1.875 0h.938v-1h-.938zm2.813 0v-.031H8.5V7.53h-.031V7.5H7.53v.031H7.5v.938h.031V8.5zm.937 0h.938v-1h-.938zm1.875 0h.938v-1h-.938zm1.875 0h.938v-1h-.938zM0 9.406v.938h1v-.938zm7.5 0v.938h1v-.938zM0 11.281v.938h1v-.938zm7.5 0v.938h1v-.938zM0 13.156v.938h1v-.938zm7.5 0v.938h1v-.938zM0 16h.969v-.5H1v-.469H.969V15H.5v.031H0zm1.906 0h.938v-1h-.938zm1.875 0h.938v-1H3.78v1zm1.875 0h.938v-1h-.938zm1.875-.5v.5h.938v-.5H8.5v-.469h-.031V15H7.53v.031H7.5v.469zm1.875.5h.938v-1h-.938zm1.875 0h.938v-1h-.938zm1.875 0h.938v-1h-.938z"/></svg>');--icon-border-double-bottom:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path d="M.969 0H0v.969h.5V1h.469V.969H1V.5H.969zm.937 1h.938V0h-.938zm1.875 0h.938V0H3.78v1zm1.875 0h.938V0h-.938zM7.531.969V1h.938V.969H8.5V.5h-.031V0H7.53v.5H7.5v.469zM9.406 1h.938V0h-.938zm1.875 0h.938V0h-.938zm1.875 0h.938V0h-.938zm1.875 0h.469V.969h.5V0h-.969v.5H15v.469h.031zM1 2.844v-.938H0v.938zm6.5-.938v.938h1v-.938zm7.5 0v.938h1v-.938zM1 4.719V3.78H0v.938zm6.5-.938v.938h1V3.78h-1zm7.5 0v.938h1V3.78h-1zM1 6.594v-.938H0v.938zm6.5-.938v.938h1v-.938zm7.5 0v.938h1v-.938zM.5 8.5h.469v-.031H1V7.53H.969V7.5H.5v.031H0v.938h.5zm1.406 0h.938v-1h-.938zm1.875 0h.938v-1H3.78v1zm1.875 0h.938v-1h-.938zm2.813 0v-.031H8.5V7.53h-.031V7.5H7.53v.031H7.5v.938h.031V8.5zm.937 0h.938v-1h-.938zm1.875 0h.938v-1h-.938zm1.875 0h.938v-1h-.938zm1.875 0h.469v-.031h.5V7.53h-.5V7.5h-.469v.031H15v.938h.031zM0 9.406v.938h1v-.938zm7.5 0v.938h1v-.938zm8.5.938v-.938h-1v.938zm-16 .937v.938h1v-.938zm7.5 0v.938h1v-.938zm8.5.938v-.938h-1v.938zM0 15h16v1H0zm0-2h16v1H0z"/></svg>');--icon-border-all:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M0 0h16v16H0zm1 1v6.5h6.5V1zm7.5 0v6.5H15V1zM15 8.5H8.5V15H15zM7.5 15V8.5H1V15z"/></svg>');--icon-border-outer:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M7.5 1.906v.938h1v-.938zm0 1.875v.938h1V3.78h-1zm0 1.875v.938h1v-.938zM1.906 8.5h.938v-1h-.938zm1.875 0h.938v-1H3.78v1zm1.875 0h.938v-1h-.938zm2.813 0v-.031H8.5V7.53h-.031V7.5H7.53v.031H7.5v.938h.031V8.5zm.937 0h.938v-1h-.938zm1.875 0h.938v-1h-.938zm1.875 0h.938v-1h-.938zM7.5 9.406v.938h1v-.938zm0 1.875v.938h1v-.938zm0 1.875v.938h1v-.938z"/><path d="M0 0v16h16V0zm1 1h14v14H1z"/></svg>');--icon-border-none:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M0 0h.969v.5H1v.469H.969V1H.5V.969H0zm2.844 1h-.938V0h.938zm1.875 0H3.78V0h.938v1zm1.875 0h-.938V0h.938zm.937 0V.969H7.5V.5h.031V0h.938v.5H8.5v.469h-.031V1zm2.813 0h-.938V0h.938zm1.875 0h-.938V0h.938zm1.875 0h-.938V0h.938zM15.5 1h-.469V.969H15V.5h.031V0H16v.969h-.5zM1 1.906v.938H0v-.938zm6.5.938v-.938h1v.938zm7.5 0v-.938h1v.938zM1 3.78v.938H0V3.78zm6.5.938V3.78h1v.938zm7.5 0V3.78h1v.938zM1 5.656v.938H0v-.938zm6.5.938v-.938h1v.938zm7.5 0v-.938h1v.938zM.969 8.5H.5v-.031H0V7.53h.5V7.5h.469v.031H1v.938H.969zm1.875 0h-.938v-1h.938zm1.875 0H3.78v-1h.938v1zm1.875 0h-.938v-1h.938zm1.875-.031V8.5H7.53v-.031H7.5V7.53h.031V7.5h.938v.031H8.5v.938zm1.875.031h-.938v-1h.938zm1.875 0h-.938v-1h.938zm1.875 0h-.938v-1h.938zm1.406 0h-.469v-.031H15V7.53h.031V7.5h.469v.031h.5v.938h-.5zM0 10.344v-.938h1v.938zm7.5 0v-.938h1v.938zm8.5-.938v.938h-1v-.938zM0 12.22v-.938h1v.938zm7.5 0v-.938h1v.938zm8.5-.938v.938h-1v-.938zM0 14.094v-.938h1v.938zm7.5 0v-.938h1v.938zm8.5-.938v.938h-1v-.938zM.969 16H0v-.969h.5V15h.469v.031H1v.469H.969zm1.875 0h-.938v-1h.938zm1.875 0H3.78v-1h.938v1zm1.875 0h-.938v-1h.938zm.937 0v-.5H7.5v-.469h.031V15h.938v.031H8.5v.469h-.031v.5zm2.813 0h-.938v-1h.938zm1.875 0h-.938v-1h.938zm1.875 0h-.938v-1h.938zm.937 0v-.5H15v-.469h.031V15h.469v.031h.5V16z"/></svg>');--icon-palette:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M0 .5A.5.5 0 0 1 .5 0h5a.5.5 0 0 1 .5.5v5.277l4.147-4.131a.5.5 0 0 1 .707 0l3.535 3.536a.5.5 0 0 1 0 .708L10.261 10H15.5a.5.5 0 0 1 .5.5v5a.5.5 0 0 1-.5.5H3a3 3 0 0 1-2.121-.879A3 3 0 0 1 0 13.044m6-.21 7.328-7.3-2.829-2.828L6 7.188zM4.5 13a1.5 1.5 0 1 0-3 0 1.5 1.5 0 0 0 3 0M15 15v-4H9.258l-4.015 4zM0 .5v12.495zM0 12.995V13z"/></svg>');--icon-layout:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="20" height="20" viewBox="0 0 20 20"><path d="m3 0 17 17.156v-.114z"/><path d="M3 0H0v16h1V1h1.585L19 17.455V19H4v1h16v-2.844z"/><path d="M6.886 3.922 5.343 5.465a.5.5 0 0 0 .708.707l1.539-1.54zM9.702 6.763l-1.53 1.53A.5.5 0 0 0 8.879 9l1.526-1.526zM12.517 9.604 11 11.121a.5.5 0 0 0 .707.707l1.514-1.514zM15.332 12.445l-1.504 1.504a.5.5 0 0 0 .707.707l1.501-1.5zM1 16H0a4 4 0 0 0 4 4v-1c-1.654 0-3-1.346-3-3M5 9v6h6zm1 2.414L8.586 14H6z"/></svg>');--icon-freeze:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M8 16a.5.5 0 0 1-.5-.5v-1.293l-.646.647a.5.5 0 0 1-.707-.708L7.5 12.793V8.866l-3.4 1.963-.496 1.85a.5.5 0 1 1-.966-.26l.237-.882-1.12.646a.5.5 0 0 1-.5-.866l1.12-.646-.884-.237a.5.5 0 1 1 .26-.966l1.848.495L7 8 3.6 6.037l-1.85.495a.5.5 0 0 1-.258-.966l.883-.237-1.12-.646a.5.5 0 1 1 .5-.866l1.12.646-.237-.883a.5.5 0 1 1 .966-.258l.495 1.849L7.5 7.134V3.207L6.147 1.854a.5.5 0 1 1 .707-.708l.646.647V.5a.5.5 0 1 1 1 0v1.293l.647-.647a.5.5 0 1 1 .707.708L8.5 3.207v3.927l3.4-1.963.496-1.85a.5.5 0 1 1 .966.26l-.236.882 1.12-.646a.5.5 0 0 1 .5.866l-1.12.646.883.237a.5.5 0 1 1-.26.966l-1.848-.495L9 8l3.4 1.963 1.849-.495a.5.5 0 0 1 .259.966l-.883.237 1.12.646a.5.5 0 0 1-.5.866l-1.12-.646.236.883a.5.5 0 1 1-.966.258l-.495-1.849-3.4-1.963v3.927l1.353 1.353a.5.5 0 0 1-.707.708l-.647-.647V15.5a.5.5 0 0 1-.5.5z"/></svg>');--icon-column-chart:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="20" height="20" viewBox="0 0 20 20"><path d="M4.5 17.5a.5.5 0 0 1-1 0v-5a.5.5 0 0 1 1 0zM12.5 17.5a.5.5 0 0 1-1 0v-9a.5.5 0 0 1 1 0zM16.5 17.5a.5.5 0 0 1-1 0v-13a.5.5 0 0 1 1 0zM8.5 17.5a.5.5 0 0 1-1 0v-14a.5.5 0 0 1 1 0z"/></svg>');--icon-donut-chart:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="20" height="20" viewBox="0 0 20 20"><path d="M12 1.23v1.548c2.526.701 4.5 2.699 5.203 5.222h1.565A9.01 9.01 0 0 0 12 1.23M2.5 10c0-3.51 2.426-6.456 5.688-7.27V1.183A9 9 0 0 0 1 10c0 1.761.513 3.397 1.387 4.784l1.093-1.093A7.43 7.43 0 0 1 2.5 10M17.221 12c-.878 3.166-3.778 5.5-7.221 5.5a7.45 7.45 0 0 1-3.692-.979l-1.093 1.093A8.96 8.96 0 0 0 10 19c4.282 0 7.859-2.993 8.77-7z"/></svg>');--icon-bar-chart:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="20" height="20" viewBox="0 0 20 20"><path d="M2.5 4.5a.5.5 0 0 1 0-1h5a.5.5 0 0 1 0 1zM2.5 12.5a.5.5 0 0 1 0-1h9a.5.5 0 0 1 0 1zM2.5 16.5a.5.5 0 0 1 0-1h13a.5.5 0 0 1 0 1zM2.5 8.5a.5.5 0 0 1 0-1h14a.5.5 0 0 1 0 1z"/></svg>');--icon-line-chart:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="20" height="20" viewBox="0 0 20 20"><path d="m1 8 3-3 7 5 8-8v2l-8 8-7-5-3 3z"/></svg>');--icon-image:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M6.002 5.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0"/><path d="M2.002 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm12 1a1 1 0 0 1 1 1v6.5l-3.777-1.947a.5.5 0 0 0-.577.093l-3.71 3.71-2.66-1.772a.5.5 0 0 0-.63.062L1.002 12V3a1 1 0 0 1 1-1z"/></svg>');--icon-recalculate:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="20" height="20" viewBox="0 0 20 20"><path d="M9.478 4.022c2.402-.209 4.583 1.047 5.711 3.014l1.083-.095c-1.233-2.528-3.912-4.175-6.881-3.916-2.97.26-5.321 2.347-6.098 5.051l1.083-.095c.768-2.132 2.698-3.748 5.102-3.959M10.523 15.977c-2.403.211-4.585-1.047-5.712-3.013l-1.08.095c1.234 2.527 3.91 4.175 6.879 3.914 2.971-.259 5.32-2.347 6.095-5.05l-1.08.095c-.769 2.132-2.699 3.749-5.102 3.959"/><path d="m2.272 15.616 5.197-3-4.098-1.097zM17.728 4.384l-5.197 3 4.098 1.098z"/></svg>');--icon-check:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M13.854 3.646a.5.5 0 0 1 0 .708l-7 7a.5.5 0 0 1-.708 0l-3.5-3.5a.5.5 0 1 1 .708-.708L6.5 10.293l6.646-6.647a.5.5 0 0 1 .708 0"/></svg>');--icon-table:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm15 2h-4v3h4zm0 4h-4v3h4zm0 4h-4v3h3a1 1 0 0 0 1-1zm-5 3v-3H6v3zm-5 0v-3H1v2a1 1 0 0 0 1 1zm-4-4h4V8H1zm0-4h4V4H1zm5-3v3h4V4zm4 4H6v3h4z"/></svg>')}.treb-main.treb-main .treb-layout-header{overflow:hidden;overflow-x:scroll;position:relative;-ms-overflow-style:none;scrollbar-width:none}.treb-main.treb-main .treb-layout-header::-webkit-scrollbar{display:none}.treb-main.treb-main .treb-toolbar{color:var(--treb-toolbar-color,var(--treb-ui-color,#333));display:flex;flex-direction:row;font-size:var(--treb-toolbar-font-size,inherit);gap:.5rem}.treb-main.treb-main .treb-toolbar>div{display:flex;flex-direction:row}.treb-main.treb-main .treb-toolbar>div>input,.treb-main.treb-main .treb-toolbar>input{background-color:var(--treb-toolbar-button-background,transparent);border:1px solid var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));height:32px;overflow:hidden;padding-left:.5em;padding-right:.5em;text-overflow:ellipsis}.treb-main.treb-main .treb-toolbar>.treb-menu>button{border-radius:3px}.treb-main.treb-main .treb-toolbar>.group>.treb-menu+button,.treb-main.treb-main .treb-toolbar>.group>button+.treb-menu>button,.treb-main.treb-main .treb-toolbar>.group>button+button,.treb-main.treb-main .treb-toolbar>.group>input+.treb-menu>button,.treb-main.treb-main .treb-toolbar>.group>input+button,.treb-main.treb-main .treb-toolbar>[composite]>.treb-menu+button,.treb-main.treb-main .treb-toolbar>[composite]>button+.treb-menu>button,.treb-main.treb-main .treb-toolbar>[composite]>button+button,.treb-main.treb-main .treb-toolbar>[composite]>input+.treb-menu>button,.treb-main.treb-main .treb-toolbar>[composite]>input+button{border-left-width:0}.treb-main.treb-main .treb-toolbar>.group>button:first-child,.treb-main.treb-main .treb-toolbar>.group>input:first-child,.treb-main.treb-main .treb-toolbar>[composite]>button:first-child,.treb-main.treb-main .treb-toolbar>[composite]>input:first-child{border-bottom-left-radius:3px;border-top-left-radius:3px}.treb-main.treb-main .treb-toolbar>.group>.treb-menu:last-child>button,.treb-main.treb-main .treb-toolbar>.group>button:last-child,.treb-main.treb-main .treb-toolbar>[composite]>.treb-menu:last-child>button,.treb-main.treb-main .treb-toolbar>[composite]>button:last-child{border-bottom-right-radius:3px;border-top-right-radius:3px}.treb-main.treb-main .treb-toolbar .treb-icon-buttons>button,.treb-main.treb-main .treb-toolbar .treb-menu>button,.treb-main.treb-main .treb-toolbar button[data-icon],.treb-main.treb-main .treb-toolbar>button,.treb-main.treb-main .treb-toolbar>div>button{align-items:center;background-color:var(--treb-toolbar-button-background,transparent);border:1px solid var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));display:flex;flex-direction:column;height:32px;justify-content:center;position:relative;width:32px}.treb-main.treb-main .treb-toolbar .treb-icon-buttons>button[dropdown],.treb-main.treb-main .treb-toolbar .treb-menu>button[dropdown],.treb-main.treb-main .treb-toolbar button[data-icon][dropdown],.treb-main.treb-main .treb-toolbar>button[dropdown],.treb-main.treb-main .treb-toolbar>div>button[dropdown]{width:16px}.treb-main.treb-main .treb-toolbar .treb-icon-buttons>button[dropdown]:after,.treb-main.treb-main .treb-toolbar .treb-menu>button[dropdown]:after,.treb-main.treb-main .treb-toolbar button[data-icon][dropdown]:after,.treb-main.treb-main .treb-toolbar>button[dropdown]:after,.treb-main.treb-main .treb-toolbar>div>button[dropdown]:after{border:5px solid transparent;border-top-color:currentcolor;box-sizing:content-box;content:"";height:0;left:50%;position:absolute;top:18px;transform:translate(-50%,-50%);width:0}.treb-main.treb-main .treb-toolbar .treb-icon-buttons>button:hover,.treb-main.treb-main .treb-toolbar .treb-icon-buttons>button[active],.treb-main.treb-main .treb-toolbar .treb-menu>button:hover,.treb-main.treb-main .treb-toolbar .treb-menu>button[active],.treb-main.treb-main .treb-toolbar button[data-icon]:hover,.treb-main.treb-main .treb-toolbar button[data-icon][active],.treb-main.treb-main .treb-toolbar>button:hover,.treb-main.treb-main .treb-toolbar>button[active],.treb-main.treb-main .treb-toolbar>div>button:hover,.treb-main.treb-main .treb-toolbar>div>button[active]{background-color:var(--treb-toolbar-hover-button-background,#f3f4f6)}.treb-main.treb-main .treb-toolbar .treb-icon-buttons>button[data-color-bar]:after,.treb-main.treb-main .treb-toolbar .treb-menu>button[data-color-bar]:after,.treb-main.treb-main .treb-toolbar button[data-icon][data-color-bar]:after,.treb-main.treb-main .treb-toolbar>button[data-color-bar]:after,.treb-main.treb-main .treb-toolbar>div>button[data-color-bar]:after{background:var(--treb-color-bar-color,var(--treb-default-color,unset));border:1px solid var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));box-sizing:border-box;content:"";display:block;height:6px;position:relative;width:20px}.treb-main.treb-main .treb-toolbar .treb-icon-buttons>button[data-command]:before,.treb-main.treb-main .treb-toolbar .treb-icon-buttons>button[data-icon]:before,.treb-main.treb-main .treb-toolbar .treb-menu>button[data-command]:before,.treb-main.treb-main .treb-toolbar .treb-menu>button[data-icon]:before,.treb-main.treb-main .treb-toolbar button[data-icon][data-command]:before,.treb-main.treb-main .treb-toolbar button[data-icon][data-icon]:before,.treb-main.treb-main .treb-toolbar>button[data-command]:before,.treb-main.treb-main .treb-toolbar>button[data-icon]:before,.treb-main.treb-main .treb-toolbar>div>button[data-command]:before,.treb-main.treb-main .treb-toolbar>div>button[data-icon]:before{background:currentColor;content:"";display:block;height:20px;mask-image:var(--icon);-webkit-mask-image:var(--icon);mask-position:center;-webkit-mask-position:center;mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat;mask-size:var(--icon-size,16px 16px);-webkit-mask-size:var(--icon-size,16px 16px);position:relative;width:20px}.treb-main.treb-main .treb-toolbar .treb-icon-buttons>button[data-command].treb-font-stack:before,.treb-main.treb-main .treb-toolbar .treb-icon-buttons>button[data-icon].treb-font-stack:before,.treb-main.treb-main .treb-toolbar .treb-menu>button[data-command].treb-font-stack:before,.treb-main.treb-main .treb-toolbar .treb-menu>button[data-icon].treb-font-stack:before,.treb-main.treb-main .treb-toolbar button[data-icon][data-command].treb-font-stack:before,.treb-main.treb-main .treb-toolbar button[data-icon][data-icon].treb-font-stack:before,.treb-main.treb-main .treb-toolbar>button[data-command].treb-font-stack:before,.treb-main.treb-main .treb-toolbar>button[data-icon].treb-font-stack:before,.treb-main.treb-main .treb-toolbar>div>button[data-command].treb-font-stack:before,.treb-main.treb-main .treb-toolbar>div>button[data-icon].treb-font-stack:before{display:none}.treb-main.treb-main .treb-toolbar .treb-split{display:flex;flex-direction:column;gap:0}.treb-main.treb-main .treb-toolbar .treb-split button[data-command]{font-size:10px}.treb-main.treb-main .treb-toolbar .treb-split button[data-command]:before{display:none}.treb-main.treb-main .treb-toolbar .treb-split>button{align-items:center;display:flex;height:16px;justify-content:center}.treb-main.treb-main .treb-toolbar .treb-split>button:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.treb-main.treb-main .treb-toolbar .treb-split>button:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px;border-top:0}.treb-main.treb-main .treb-toolbar .treb-font-stack{align-items:flex-start;overflow:hidden;width:8em}.treb-main.treb-main .treb-toolbar .treb-font-stack:before{display:none}.treb-main.treb-main .treb-toolbar .treb-menu{outline:none}.treb-main.treb-main .treb-toolbar .treb-menu>div{background:var(--treb-toolbar-button-background,#fff);border:1px solid var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));border-radius:3px;box-shadow:0 4px 6px -4px rgba(0,0,0,.4);display:none;flex-direction:column;margin-top:.5rem;position:fixed;top:48px;z-index:20}.treb-main.treb-main .treb-toolbar .treb-menu>div button{background:transparent;border:0;margin:3px 0;padding:.4rem 1rem;text-align:left;transition:background-color .125s ease;white-space:nowrap}.treb-main.treb-main .treb-toolbar .treb-menu>div button:hover{background:var(--treb-toolbar-hover-button-background,#f3f4f6)}.treb-main.treb-main .treb-toolbar .treb-menu>div.treb-icon-buttons>.treb-menu>button,.treb-main.treb-main .treb-toolbar .treb-menu>div.treb-icon-buttons>button{padding:0}.treb-main.treb-main .treb-toolbar .treb-menu>div>[separator]{background:var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));height:1px;margin:2px 0}.treb-main.treb-main .treb-toolbar .treb-menu.visible>div,.treb-main.treb-main .treb-toolbar .treb-menu:focus-within>div{display:flex}.treb-main.treb-main .treb-toolbar [data-icon=file-menu]{--icon:var(--icon-file-menu)}.treb-main.treb-main .treb-toolbar [data-command=justify-left]{--icon:var(--icon-text-align-left)}.treb-main.treb-main .treb-toolbar [data-command=justify-right]{--icon:var(--icon-text-align-right)}.treb-main.treb-main .treb-toolbar [data-command=justify-center]{--icon:var(--icon-text-align-center)}.treb-main.treb-main .treb-toolbar [data-command=indent]{--icon:var(--icon-text-indent)}.treb-main.treb-main .treb-toolbar [data-command=outdent]{--icon:var(--icon-text-outdent)}.treb-main.treb-main .treb-toolbar [data-command=align-top]{--icon:var(--icon-text-align-top)}.treb-main.treb-main .treb-toolbar [data-command=align-middle]{--icon:var(--icon-text-align-middle)}.treb-main.treb-main .treb-toolbar [data-command=align-bottom]{--icon:var(--icon-text-align-bottom)}.treb-main.treb-main .treb-toolbar [data-command=merge-cells]{--icon:var(--icon-merge-cells)}.treb-main.treb-main .treb-toolbar [data-command=unmerge-cells]{--icon:var(--icon-unmerge-cells)}.treb-main.treb-main .treb-toolbar [data-command=fill-color]{--icon:var(--icon-fill-color)}.treb-main.treb-main .treb-toolbar [data-command=text-color]{--icon:var(--icon-text-color)}.treb-main.treb-main .treb-toolbar [data-command=lock-cells]{--icon:var(--icon-lock)}.treb-main.treb-main .treb-toolbar [data-command=wrap-text]{--icon:var(--icon-wrap-text)}.treb-main.treb-main .treb-toolbar [data-icon=comment]{--icon:var(--icon-comment)}.treb-main.treb-main .treb-toolbar [data-icon=table]{--icon:var(--icon-table)}.treb-main.treb-main .treb-toolbar [data-icon=layout]{--icon:var(--icon-layout)}.treb-main.treb-main .treb-toolbar [data-command=freeze-panes]{--icon:var(--icon-freeze)}.treb-main.treb-main .treb-toolbar [data-command=insert-column-chart]{--icon:var(--icon-column-chart)}.treb-main.treb-main .treb-toolbar [data-command=insert-donut-chart]{--icon:var(--icon-donut-chart)}.treb-main.treb-main .treb-toolbar [data-command=insert-bar-chart]{--icon:var(--icon-bar-chart)}.treb-main.treb-main .treb-toolbar [data-command=insert-line-chart]{--icon:var(--icon-line-chart)}.treb-main.treb-main .treb-toolbar [data-command=insert-image]{--icon:var(--icon-image)}.treb-main.treb-main .treb-toolbar [data-command=border-bottom]{--icon:var(--icon-border-bottom)}.treb-main.treb-main .treb-toolbar [data-command=border-left]{--icon:var(--icon-border-left)}.treb-main.treb-main .treb-toolbar [data-command=border-right]{--icon:var(--icon-border-right)}.treb-main.treb-main .treb-toolbar [data-command=border-top]{--icon:var(--icon-border-top)}.treb-main.treb-main .treb-toolbar [data-command=border-outside]{--icon:var(--icon-border-outer)}.treb-main.treb-main .treb-toolbar [data-command=border-all]{--icon:var(--icon-border-all)}.treb-main.treb-main .treb-toolbar [data-command=border-none]{--icon:var(--icon-border-none)}.treb-main.treb-main .treb-toolbar [data-command=border-double-bottom]{--icon:var(--icon-border-double-bottom)}.treb-main.treb-main .treb-toolbar [data-icon=palette]{--icon:var(--icon-palette)}.treb-main.treb-main .treb-toolbar [data-command=recalculate]{--icon:var(--icon-recalculate);--icon-size:20px 20px}.treb-main.treb-main .treb-toolbar .treb-font-scale{width:4em}.treb-main.treb-main .treb-toolbar .treb-number-format{width:8em}.treb-main.treb-main .treb-toolbar .treb-color-chooser button[data-command=set-color]{align-items:center;display:flex;justify-content:center;padding:0;width:32px}.treb-main.treb-main .treb-toolbar .treb-color-chooser button[data-command=set-color]>svg{pointer-events:none}.treb-main.treb-main .treb-toolbar .treb-color-chooser>div{padding:.75rem}.treb-main.treb-main .treb-toolbar .treb-color-chooser>div+div{padding-top:0}.treb-main.treb-main .treb-toolbar .treb-color-chooser>div:last-child{align-items:center;display:flex;flex-direction:row;gap:.5rem}.treb-main.treb-main .treb-toolbar .treb-color-chooser>div:last-child input{flex-grow:1;padding:0 .5rem}.treb-main.treb-main .treb-toolbar .treb-color-chooser>div:last-child button,.treb-main.treb-main .treb-toolbar .treb-color-chooser>div:last-child input{border:1px solid var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));border-radius:3px;height:32px}.treb-main.treb-main .treb-toolbar .treb-color-chooser .treb-default-swatch button,.treb-main.treb-main .treb-toolbar .treb-color-chooser .treb-swatches button{border:1px solid var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));border-radius:2px;height:18px;margin:0;padding:0;width:18px}.treb-main.treb-main .treb-toolbar .treb-color-chooser .treb-default-swatch .treb-default-color:before,.treb-main.treb-main .treb-toolbar .treb-color-chooser .treb-swatches .treb-default-color:before{background:currentColor;content:"";display:block;height:100%;mask-image:var(--icon-x);-webkit-mask-image:var(--icon-x);mask-position:center;-webkit-mask-position:center;mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat;mask-size:24px 24px;-webkit-mask-size:24px 24px;opacity:.7;position:relative;width:100%}.treb-main.treb-main .treb-toolbar .treb-color-chooser .treb-default-swatch{align-items:center;display:grid;gap:.5rem;grid-template-columns:auto 1fr}.treb-main.treb-main .treb-toolbar .treb-color-chooser .treb-swatches{display:grid;gap:.5rem;grid-template-columns:repeat(10,1fr)}.treb-main.treb-main .treb-toolbar .treb-comment-box textarea{border:1px solid var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));font:inherit;height:10rem;line-height:1.5;margin:.5rem;padding:.25rem;resize:both}.treb-main.treb-main .treb-toolbar .treb-comment-box textarea+div{align-items:center;display:flex;flex-direction:row;gap:.5rem;justify-content:center;padding:0 0 .5rem}.treb-main.treb-main .treb-toolbar .treb-comment-box textarea+div button{border:1px solid var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));border-radius:3px}.treb-main.treb-main .treb-toolbar .treb-font-scale{padding-left:2em;text-align:right;width:5em}.treb-main.treb-main .treb-toolbar [composite][font-scale]{position:relative}.treb-main.treb-main .treb-toolbar .treb-font-scale-icon{border-radius:3px;left:.5em;line-height:1;opacity:.9;pointer-events:none;position:absolute;top:50%;transform:translateY(-50%)}.treb-main.treb-main .treb-toolbar .treb-font-scale-icon:after,.treb-main.treb-main .treb-toolbar .treb-font-scale-icon:before{content:"A";position:relative}.treb-main.treb-main .treb-toolbar .treb-font-scale-icon:before{font-size:1.2em}.treb-main.treb-main .treb-toolbar .treb-font-scale-icon:after{font-size:.9em;left:-.125em}.treb-main.treb-main{--treb-font-stack-default-size:14px;--treb-font-stack-calibri-size:16px;--treb-font-stack-tscu-comic-size:16px;--treb-font-stack-helvetica-neue-size:13px;--treb-font-stack-cambria-size:16px;--treb-font-stack-sitka-text-variant:lining-nums tabular-nums}.treb-main.treb-main.treb-ua-osx{--treb-font-stack-system-ui-size:10pt}.treb-main.treb-main .treb-font-stack-default{font-family:calibri,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,"sans-serif"}.treb-main.treb-main .treb-font-stack-transitional{font-family:Charter,Bitstream Charter,Cambria,serif}.treb-main.treb-main .treb-font-stack-old-style{font-family:Iowan Old Style,Palatino Linotype,URW Palladio L,P052,serif}.treb-main.treb-main .treb-font-stack-handwritten{font-family:Segoe Print,Bradley Hand,Chilanka,TSCu_Comic,casual,cursive}.treb-main.treb-main .treb-font-stack-industrial{font-family:Bahnschrift,DIN Alternate,Franklin Gothic Medium,Nimbus Sans Narrow,sans-serif-condensed,sans-serif}.treb-main.treb-main .treb-font-stack-monospace{font-family:ui-monospace,Cascadia Code,Source Code Pro,Menlo,Consolas,DejaVu Sans Mono,monospace}.treb-main.treb-main .treb-font-stack-ui{font-family:system-ui,sans-serif}.treb-main.treb-main{all:revert;box-sizing:border-box;color:inherit;color-scheme:var(--treb-color-scheme,unset);display:grid;font-family:var(--treb-default-font,system-ui,"BlinkMacSystemFont","Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue","sans-serif");font-family:BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,"sans-serif";font-size:14px;font-style:normal;font-weight:400;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:auto minmax(0,1fr);height:100%;line-height:normal;position:relative;text-align:start;width:100%}.treb-main.treb-main a,.treb-main.treb-main button,.treb-main.treb-main div,.treb-main.treb-main input,.treb-main.treb-main li,.treb-main.treb-main ol,.treb-main.treb-main svg,.treb-main.treb-main textarea,.treb-main.treb-main ul{all:revert;box-sizing:border-box;font-family:var(--treb-default-font,system-ui,"BlinkMacSystemFont","Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue","sans-serif")}.treb-main.treb-main button,.treb-main.treb-main input{color:inherit;font:inherit}.treb-main.treb-main *{box-sizing:border-box}.treb-main.treb-main [contenteditable]{-webkit-user-modify:read-write;-moz-user-modify:read-write}.treb-main.treb-main[animate] .treb-layout-header{transition:height var(--treb-sidebar-transition,.2s ease),opacity var(--treb-sidebar-transition,.2s ease)}.treb-main.treb-main .treb-layout-header{grid-column:1/3;grid-row:1;height:1px;opacity:0}.treb-main.treb-main[toolbar] .treb-layout-header{height:42px;opacity:1}.treb-main.treb-main[dialog] .treb-layout-header,.treb-main.treb-main[dialog]>*{opacity:.6}.treb-main.treb-main[dialog] .treb-dialog-mask{opacity:1;pointer-events:auto}.treb-main.treb-main .treb-layout-spreadsheet{display:flex;flex-direction:row;gap:1em;grid-column:1;grid-row:2;position:relative;transition:opacity .2s ease;z-index:5}.treb-main.treb-main .treb-views.treb-can-revert .treb-view .treb-revert-indicator{opacity:1;pointer-events:auto}.treb-main.treb-main .treb-view{display:grid;flex:1 1 0px;grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(0,1fr) auto;position:relative}.treb-main.treb-main .treb-view .treb-spreadsheet-backdrop{box-shadow:0 4px 6px -4px rgba(0,0,0,.4);grid-column:1;grid-row:2;z-index:2}.treb-main.treb-main .treb-view .treb-spreadsheet-body{position:relative;z-index:4}.treb-main.treb-main .treb-view .treb-spreadsheet-footer{position:relative;z-index:5}.treb-main.treb-main .treb-view .treb-layout-resize-handle,.treb-main.treb-main .treb-view .treb-revert-indicator{display:none}.treb-main.treb-main .treb-view:first-of-type .treb-revert-indicator{align-self:start;border-color:orange transparent transparent orange;border-style:solid;border-width:.5em;display:block;grid-area:2/1/3/2;height:1rem;justify-self:start;opacity:0;overflow:hidden;pointer-events:none;position:relative;transition:opacity .125s ease;width:1rem;z-index:20}.treb-main.treb-main .treb-view:last-of-type .treb-layout-resize-handle{align-self:end;border-bottom:.5rem solid var(--treb-resize-handle-color,#0059b9);border-left:.5rem solid transparent;border-right:.5rem solid var(--treb-resize-handle-color,#0059b9);border-top:.5rem solid transparent;cursor:nw-resize;display:block;grid-area:2/1/3/2;height:1rem;justify-self:end;width:1rem;z-index:20}.treb-main.treb-main[animate] .treb-layout-sidebar{transition:width var(--treb-sidebar-transition,.2s ease),opacity var(--treb-sidebar-transition,.2s ease)}.treb-main.treb-main .treb-layout-sidebar{align-items:center;display:flex;flex-direction:column;gap:.75rem;grid-column:2;grid-row:2;justify-content:flex-start;overflow:hidden;padding-top:3rem;width:2.5rem;width:3rem}.treb-main.treb-main[collapsed] .treb-layout-sidebar{opacity:0;width:0}.treb-main.treb-main[collapsed] .treb-toggle-sidebar-button{background:var(--treb-toolbar-button-background,#fff);border-bottom-right-radius:0;border-color:var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));border-right-color:var(--treb-toolbar-button-background,transparent);border-top-right-radius:0;right:0}.treb-main.treb-main[collapsed] .treb-toggle-sidebar-button:after{mask-image:var(--icon-chevron-left);-webkit-mask-image:var(--icon-chevron-left)}.treb-main.treb-main .treb-layout-sidebar>button,.treb-main.treb-main .treb-toggle-sidebar-button{background:transparent;border:0;margin:0;padding:0}.treb-main.treb-main .treb-layout-sidebar>button:after,.treb-main.treb-main .treb-toggle-sidebar-button:after{background:#ccc;content:"";display:block;height:24px;mask-image:var(--icon);-webkit-mask-image:var(--icon);mask-position:center;-webkit-mask-position:center;mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat;transition:background-color .1s ease;width:24px}.treb-main.treb-main .treb-layout-sidebar>button[data-can-revert=false],.treb-main.treb-main .treb-toggle-sidebar-button[data-can-revert=false]{display:none}.treb-main.treb-main .treb-layout-sidebar>button:hover:after,.treb-main.treb-main .treb-toggle-sidebar-button:hover:after{background:#666}.treb-main.treb-main .treb-layout-sidebar>button[data-command=recalculate],.treb-main.treb-main .treb-toggle-sidebar-button[data-command=recalculate]{--icon:var(--icon-reset)}.treb-main.treb-main .treb-layout-sidebar>button[data-command=toggle-toolbar],.treb-main.treb-main .treb-toggle-sidebar-button[data-command=toggle-toolbar]{--icon:var(--icon-toolbar)}.treb-main.treb-main .treb-layout-sidebar>button[data-command=revert],.treb-main.treb-main .treb-toggle-sidebar-button[data-command=revert]{--icon:var(--icon-revert)}.treb-main.treb-main .treb-layout-sidebar>button[data-command=export-xlsx],.treb-main.treb-main .treb-toggle-sidebar-button[data-command=export-xlsx]{--icon:var(--icon-export)}.treb-main.treb-main .treb-layout-sidebar>button[data-command=about],.treb-main.treb-main .treb-toggle-sidebar-button[data-command=about]{--icon:var(--icon-about)}.treb-main.treb-main .treb-toggle-sidebar-button{align-items:center;background:transparent;border:1px solid transparent;border-radius:12px;bottom:6rem;display:flex;height:24px;justify-content:center;margin:0;padding:0;position:absolute;right:.5rem;right:calc(1.5rem - 12px);width:24px;z-index:39}.treb-main.treb-main .treb-toggle-sidebar-button:after{height:12px;mask-image:var(--icon-chevron-right);-webkit-mask-image:var(--icon-chevron-right);width:12px}.treb-main.treb-main .treb-resize-rect{border:1px dotted var(--treb-resize-frame-color,blue);display:block;height:100%;left:0;position:fixed;top:0;width:100%;z-index:9998}.treb-main.treb-main .treb-resize-mask{height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:9999}treb-spreadsheet{display:block;overflow:hidden;position:relative}.treb-default-size{height:550px;width:800px}`;var $s='<div class="treb-main treb-theme"><div class="treb-layout-header treb-animate"><div class="treb-toolbar"></div></div><div class="treb-dialog-mask"><div data-bind="dialog" class="treb-embed-dialog"><div data-bind="left"><a href="https://treb.app" target="_blank"><div class="treb-icon-64"></div></a></div><div data-bind="middle"><div data-bind="title" class="treb-embed-dialog-title"></div><div data-bind="message" class="treb-embed-dialog-message"></div><div data-bind="about" class="treb-embed-dialog-body"></div></div><button type="button" data-title="close_dialog" data-bind="close" class="treb-close-box"><svg viewBox="0 0 16 16"><path d="M11.854 4.146a.5.5 0 0 1 0 .708l-7 7a.5.5 0 0 1-.708-.708l7-7a.5.5 0 0 1 .708 0z"/><path d="M4.146 4.146a.5.5 0 0 0 0 .708l7 7a.5.5 0 0 0 .708-.708l-7-7a.5.5 0 0 0-.708 0z"/></svg></button></div></div><div class="treb-layout-spreadsheet treb-views"><template class="treb-view-template"><div class="treb-view"><div class="treb-formula-bar notranslate" hidden><div class="treb-address-label"><div></div></div><button class="treb-insert-function-button" data-title="insert_function" data-conditional="insert-function">\u{1D453}<small>(x)</small></button><div class="treb-editor-container"><div contenteditable="true"></div></div></div><div class="treb-spreadsheet-backdrop"></div><div class="treb-spreadsheet-body" role="grid"><div class="treb-grid" tabindex="-1"><div class="treb-overlay-container notranslate" translate="no"><div class="treb-overlay-inset"><div class="treb-overlay-editor" contenteditable tabindex="-1" spellcheck="true" role="gridcell"></div></div></div></div></div><div class="treb-spreadsheet-footer" hidden><button class="treb-delete-tab" data-title="delete_sheet" data-command="delete-tab" data-conditional="delete-tab"><svg tabindex="-1" viewbox="0 0 16 16"><path d="M4,4 L12,12 M12,4 L4,12"/></svg></button><div class="treb-spreadsheet-tab-container"><ol class="treb-spreadsheet-tabs" role="tablist"></ol></div><button class="treb-add-tab" data-command="add-tab" data-conditional="add-tab" data-title="add_sheet">+</button><div class="treb-stats-panel"></div><div class="treb-scale-control" data-conditional="scale-control"></div></div><div class="treb-layout-resize-handle" data-conditional="resize"></div><div class="treb-revert-indicator" data-command="revert-indicator" data-title="document_modified"></div></div></template></div><div class="treb-layout-sidebar treb-animate"><button data-command="recalculate" data-title="recalculate"></button> <button data-command="toggle-toolbar" data-conditional="toolbar" data-title="toggle_toolbar"></button> <button data-command="export-xlsx" data-conditional="export" data-title="export"></button> <button data-command="revert" data-conditional="revert" data-title="revert"></button> <button data-command="about" data-title="about"></button></div><button class="treb-toggle-sidebar-button" data-title="toggle_sidebar"></button></div>';var js='<div class="treb-menu" title="File menu" file-menu><button data-icon="file-menu" menu-target></button><div><button data-command="reset">New document</button><div separator></div><button data-command="import-file">Open file...</button> <button data-command="save-json">Save JSON</button><div separator xlsx-support></div><button data-command="export-xlsx" xlsx-support>Export XLSX</button></div></div><div composite narrow><button data-command="justify-left" data-target="justify" title="Left-align text"></button><div class="treb-menu"><button dropdown title="Text justify options"></button><div class="treb-icon-buttons" data-replace="justify"><button data-command="justify-left" title="Left-align text"></button> <button data-command="justify-center" title="Center-align text"></button> <button data-command="justify-right" title="Right-align text"></button></div></div></div><div composite narrow><button data-command="align-top" data-target="align" title="Align to top"></button><div class="treb-menu"><button dropdown title="Text align options"></button><div class="treb-icon-buttons" data-replace="align"><button data-command="align-top" title="Align to top"></button> <button data-command="align-middle" title="Align to middle"></button> <button data-command="align-bottom" title="Align to bottom"></button></div></div></div><div class="group" wide><button data-command="justify-left" title="Left-align text"></button> <button data-command="justify-center" title="Center-align text"></button> <button data-command="justify-right" title="Right-align text"></button></div><div class="group" wide><button data-command="align-top" title="Align to top"></button> <button data-command="align-middle" title="Align to middle"></button> <button data-command="align-bottom" title="Align to bottom"></button></div><div class="group" wide indent-group><button data-command="outdent" title="Decrease indent"></button> <button data-command="indent" title="Incrase indent"></button></div><div class="group"><button data-command="wrap-text" title="Wrap text"></button> <button data-command="merge-cells" data-id="merge" data-inactive-title="Merge cells" data-active-title="Unmerge cells"></button> <button data-command="lock-cells" data-inactive-title="Lock cells" data-active-title="Unlock cells"></button> <button data-command="freeze-panes" data-inactive-title="Freeze panes" data-active-title="Unfreeze panes" freeze-button></button> <button data-command="insert-table" data-icon="table" data-inactive-title="Insert table" data-active-title="Remove table" table-button></button><div class="treb-menu"><button data-icon="comment" data-inactive-title="Comment" data-active-title="Update comment"></button><div class="treb-comment-box"><textarea></textarea><div><button data-command="clear-comment">Clear</button> <button data-command="update-comment">Save</button></div></div></div></div><div composite><button data-command="border-bottom" data-target="border" title="Bottom border"></button><div class="treb-menu"><button dropdown title="Border options"></button><div class="treb-icon-buttons" data-replace="border"><button data-command="border-top" title="Top border"></button> <button data-command="border-left" title="Left border"></button> <button data-command="border-right" title="Right border"></button> <button data-command="border-bottom" title="Bottom border"></button> <button data-command="border-double-bottom" title="Double bottom border"></button> <button data-command="border-outside" title="Outside borders"></button> <button data-command="border-all" title="All borders"></button> <button data-command="border-none" title="Clear borders"></button><div separator></div><div class="treb-menu treb-color-menu treb-submenu" data-color-command="border-color" data-replace-color="border" title="Border color" data-default-color-text="Default border color"><button data-icon="palette" data-color-bar="border" data-color="{}"></button></div></div></div></div><div composite><button data-command="fill-color" data-color-bar="fill" data-color="{}" title="Fill color"></button><div class="treb-menu treb-color-menu" data-color-command="fill-color" data-replace-color="fill" data-default-color-text="No fill"><button dropdown title="Color options"></button><div class="treb-color-chooser"><div class="treb-caption">Theme colors</div><div class="treb-swatches"></div><div class="treb-caption">No color</div><div class="treb-default-swatch"><button class="treb-default-color" data-command="set-color" data-color="{}"></button> <span class="treb-default-color-label" data-command="set-color" data-color="{}">...</span></div><div class="treb-caption">Other colors</div><div class="treb-swatches"></div><div><input placeholder="New color" class="treb-color-input"> <button data-command="set-color" data-color=""><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" viewBox="0 0 16 16"><path d="M13.854 3.646a.5.5 0 0 1 0 .708l-7 7a.5.5 0 0 1-.708 0l-3.5-3.5a.5.5 0 1 1 .708-.708L6.5 10.293l6.646-6.647a.5.5 0 0 1 .708 0z"/></svg></button></div></div></div></div><div composite><button data-command="text-color" data-color-bar="text" data-color="{}" title="Text color"></button><div class="treb-menu treb-color-menu" data-color-command="text-color" data-replace-color="text" data-default-color-text="Default text color"><button dropdown title="Color options"></button></div></div><div composite font-scale><div class="treb-font-scale-icon"></div><input class="treb-font-scale" title="Font scale"><div class="treb-menu"><button dropdown title="Font scale options"></button><div><button data-command="font-scale" data-scale="0.8">0.80</button> <button data-command="font-scale" data-scale="0.9">0.90</button> <button data-command="font-scale" data-scale="1.0">1.00</button> <button data-command="font-scale" data-scale="1.1">1.10</button> <button data-command="font-scale" data-scale="1.25">1.25</button> <button data-command="font-scale" data-scale="1.5">1.50</button> <button data-command="font-scale" data-scale="2.0">2.00</button></div></div></div><div composite font-stack><button class="treb-font-stack" data-command="font-stack" data-font-stack="" title="Font stack"></button><div class="treb-menu"><button dropdown title="Font stack options"></button><div><button data-command="font-stack" data-font-stack="default"></button> <button data-command="font-stack" data-font-stack="transitional"></button> <button data-command="font-stack" data-font-stack="monospace"></button> <button data-command="font-stack" data-font-stack="handwritten"></button> <button data-command="font-stack" data-font-stack="ui"></button></div></div></div><div composite><input class="treb-number-format" title="Number format"><div class="treb-menu"><button dropdown title="Number formats"></button><div class="treb-number-format-menu"></div></div></div><div class="treb-split"><button data-command="decrease-precision" title="Decrease precision"></button> <button data-command="increase-precision" title="Increase precision"></button></div><div class="treb-menu"><button data-icon="layout" title="Rows & columns"></button><div><button data-command="insert-row">Insert row</button> <button data-command="insert-column">Insert column</button> <button data-command="delete-row">Delete row</button> <button data-command="delete-column">Delete column</button><div separator add-remove-sheet></div><button data-command="insert-sheet" add-remove-sheet>Add sheet</button> <button data-command="delete-sheet" add-remove-sheet>Delete sheet</button></div></div><div composite chart-menu><button data-command="insert-column-chart" data-target="annotation" title="Insert column chart"></button><div class="treb-menu"><button dropdown title="Chart options"></button><div class="treb-icon-buttons" data-replace="annotation"><button data-command="insert-column-chart" title="Insert column chart"></button> <button data-command="insert-donut-chart" title="Insert donut chart"></button> <button data-command="insert-bar-chart" title="Insert bar chart"></button> <button data-command="insert-line-chart" title="Insert line chart"></button><div separator></div><button data-command="insert-image" title="Insert image"></button></div></div></div><button data-command="recalculate" title="Recalculate" recalculate-button></button>';var Js={close_dialog:"Close dialog",insert_function:"Insert function...",delete_sheet:"Delete current sheet",add_sheet:"Add sheet",document_modified:"This document has been modified from the original version.",recalculate:"Recalculate",toggle_toolbar:"Toggle toolbar",export:"Export as XLSX",revert:"Revert to original version",about:"What's this?",toggle_sidebar:"Toggle sidebar"},wt=class{root;sheet;border_color;color_bar_elements={};replace_targets={};layout_element;views;revert_button;revert_state=!1;toolbar_controls={};swatch_lists={};DOM;constructor(e){typeof e=="string"&&(e=document.querySelector(e)),this.DOM=Me.GetInstance(e?.ownerDocument),this.DOM.view&&e instanceof this.DOM.view.HTMLElement&&(this.root=e,this.DOM.doc?.head.querySelector("style[treb-stylesheet]")||this.DOM.doc?.head.prepend(this.DOM.Create("style",void 0,void 0,{text:Bs,attrs:{"treb-stylesheet":""}})))}CoerceAttributeValue(e){if(e===null||e.toString().toLowerCase()==="true"||e==="")return!0;if(e.toLowerCase()==="false")return!1;{let t=Number(e);if(!isNaN(t))return t}return e||""}ParseOptionAttributes(){let e={};if(this.root){let t=this.root.getAttributeNames();for(let r of t){switch(r){case"class":case"style":case"id":continue;case"data-options":case"options":{let n=(this.root.getAttribute(r)||"").split(",");for(let o of n){let s=o.split(/=/);s.length===1?e[s[0]]=!0:e[s[0]]=this.CoerceAttributeValue(s[1])}}continue;case"data-treb":continue;case"inline-document":continue;case"src":e.document=this.root.getAttribute("src")||void 0;continue}e[r.replace(/-/g,"_")]=this.CoerceAttributeValue(this.root.getAttribute(r))}}return{...e}}AttachElement(e={}){if(e={...this.ParseOptionAttributes(),...e},this.root){if(!e.headless){let t=this.root.getBoundingClientRect();(!t.width||!t.height)&&this.root.classList.add("treb-default-size")}if(this.root.hasAttribute("inline-document")){let t=this.root.getAttribute("inline-document")||"";for(let r of Array.from(this.root.children))if(this.DOM.view&&r instanceof this.DOM.view.HTMLScriptElement&&r.type==="application/json"){let i=r.getAttribute("name")||"";if(i===t||!i&&t==="true"){let n=r.textContent;if(n)try{e.inline_document=JSON.parse(n)}catch(o){console.error(o)}break}}e.inline_document||console.warn("inline document failed")}this.root.innerHTML=$s,e.container=this.root.querySelector(".treb-layout-spreadsheet")}this.sheet=new ui(e),this.root&&this.CreateLayout(this.sheet,this.root)}CreateLayout(e,t){new ResizeObserver(()=>e.Resize()).observe(t),this.layout_element=t.querySelector(".treb-main");let i=t.querySelector(".treb-toggle-sidebar-button");if(i&&this.layout_element){let c=this.layout_element;i.addEventListener("click",()=>{let d=c.getAttribute("collapsed");typeof d=="string"&&(d===""||d==="true")?c.removeAttribute("collapsed"):c.setAttribute("collapsed","")})}(e.options.toolbar==="show"||e.options.toolbar==="show-narrow")&&this.layout_element?.setAttribute("toolbar",""),e.options.collapsed&&this.layout_element?.setAttribute("collapsed","");let n=t.querySelector("[data-command=revert-indicator]");this.DOM.view&&n instanceof this.DOM.view.HTMLElement&&(e.options.revert_indicator?n.addEventListener("click",()=>{e.HandleToolbarMessage({command:"revert-indicator"})}):n.style.display="none"),t.querySelector(".treb-layout-sidebar")?.addEventListener("click",c=>{let d=c.target;if(d.dataset.command)switch(d.dataset.command){case"toggle-toolbar":this.ToggleToolbar();break;default:e.HandleToolbarMessage({command:d.dataset.command});break}}),e.options.toolbar&&this.AttachToolbar(e,t);let s={"table-button":!!e.options.table_button,revert:!!e.options.revert_button,toolbar:!!e.options.toolbar,export:!!e.options.export,"insert-function":!!e.options.insert_function_button,resize:!!e.options.resizable,"add-tab":!!e.options.add_tab,"delete-tab":!!e.options.delete_tab||!!e.options.add_tab};for(let[c,d]of Object.entries(s))if(!d){let u=this.layout_element.querySelectorAll(`[data-conditional=${c}]`);for(let h of Array.from(u))h.style.display="none"}if(e.options.revert_button&&(this.revert_button=this.layout_element.querySelector("[data-command=revert]")||void 0),e.options.resizable){let c={width:0,height:0},d={x:0,y:0},u={x:0,y:0};this.views=t.querySelector(".treb-views")||void 0;let h,f,m=t.querySelector(".treb-layout-resize-handle"),p=()=>_(),b=(x=>{x.buttons===0?_():(u.x=x.screenX-d.x,u.y=x.screenY-d.y,f&&(f.style.width=c.width+u.x+"px",f.style.height=c.height+u.y+"px"))}),_=()=>{if(u.x||u.y){let x=t.getBoundingClientRect();e.options.constrain_width||(t.style.width=x.width+u.x+"px"),t.style.height=x.height+u.y+"px"}h&&(h.removeEventListener("mouseup",p),h.removeEventListener("mousemove",b),h.parentElement?.removeChild(h),h=void 0),f?.parentElement?.removeChild(f),f=void 0};m.addEventListener("mousedown",x=>{x.stopPropagation(),x.preventDefault();let v=t.querySelector(".treb-main");f=this.DOM.Div("treb-resize-rect",v),h=this.DOM.Div("treb-resize-mask",v,{attrs:{style:"cursor: nw-resize;"},events:{mouseup:p,mousemove:b}}),d.x=x.screenX,d.y=x.screenY,u.x=0,u.y=0;let w=this.views?.querySelectorAll(".treb-spreadsheet-body"),y=Array.from(w||[]).map(C=>C.getBoundingClientRect());if(y.length){let C=JSON.parse(JSON.stringify(y.shift()));for(let k of y)C.top=Math.min(k.top,C.top),C.left=Math.min(k.left,C.left),C.right=Math.max(k.right,C.right),C.bottom=Math.max(k.bottom,C.bottom);let S=C.right-C.left,A=C.bottom-C.top;f.style.top=C.top+"px",f.style.left=C.left+"px",f.style.width=S+"px",f.style.height=A+"px",c.width=S,c.height=A}})}let a=Array.from(this.layout_element.querySelectorAll("[data-title]"));for(let c of a)if(c instanceof HTMLElement){if(c.dataset.activeTitle)continue;c.dataset.title&&Js[c.dataset.title]&&(c.title=Js[c.dataset.title])}setTimeout(()=>this.layout_element?.setAttribute("animate",""),250)}ToggleToolbar(){if(this.layout_element){let e=this.layout_element.getAttribute("toolbar");typeof e=="string"&&(e===""||e==="true")?this.layout_element.removeAttribute("toolbar"):this.layout_element.setAttribute("toolbar","")}}UpdateSelectionStyle(e,t,r){let i=e.selection_state;r.value="";for(let a of Object.values(this.toolbar_controls))a&&(a.removeAttribute("active"),a.dataset.inactiveTitle&&(a.title=a.dataset.inactiveTitle));let n=a=>{a&&(a.setAttribute("active",""),a.dataset.activeTitle&&(a.title=a.dataset.activeTitle))};if(i.comment&&(n(this.toolbar_controls.comment),r.value=i.comment),i.style?.locked&&n(this.toolbar_controls.locked),i.frozen&&n(this.toolbar_controls.freeze),i.style?.wrap&&n(this.toolbar_controls.wrap),this.toolbar_controls.table&&(i.table?(n(this.toolbar_controls.table),this.toolbar_controls.table.dataset.command="remove-table"):this.toolbar_controls.table.dataset.command="insert-table"),this.toolbar_controls.merge&&(i.merge?(n(this.toolbar_controls.merge),this.toolbar_controls.merge.dataset.command="unmerge-cells"):this.toolbar_controls.merge.dataset.command="merge-cells"),this.toolbar_controls.stack)if(i.style?.font_face)if(i.style.font_face.startsWith("stack:")){let a=i.style.font_face.substring(6);this.toolbar_controls.stack.textContent=Yr[a]||"",this.toolbar_controls.stack.dataset.fontStack=a}else this.toolbar_controls.stack.textContent="",this.toolbar_controls.stack.dataset.fontStack="";else this.toolbar_controls.stack.textContent=Yr.default||"",this.toolbar_controls.stack.dataset.fontStack="default";let o=this.toolbar_controls.format;o&&(i.style?.number_format?o.value=me.SymbolicName(i.style.number_format)||i.style.number_format:o.value="General");let s=this.toolbar_controls.scale;switch(s&&(s.value=e.FormatNumber(i.relative_font_size||1,"0.00")),i.style?.horizontal_align){case"left":n(this.toolbar_controls.left);break;case"center":n(this.toolbar_controls.center);break;case"right":n(this.toolbar_controls.right);break}switch(i.style?.vertical_align){case"top":n(this.toolbar_controls.top);break;case"middle":n(this.toolbar_controls.middle);break;case"bottom":n(this.toolbar_controls.bottom);break}}UpdateDocumentStyles(e,t){{let s=this.DOM.Fragment(),a=e.document_styles.theme_colors.length,c=["Background","Text","Background","Text","Accent"];if(a){let f=e.document_styles.theme_colors[0].length;for(let m=0;m<f;m++)for(let p=0;p<a;p++){let b=e.document_styles.theme_colors[p][m],_=`background: ${b.resolved};`,x=c[p]||c[4];Qr(b.color)&&b.color.tint?x+=` (${(b.color.tint>0?"+":"")+b.color.tint*100}%)`:p===0?this.color_bar_elements.fill?.style.setProperty("--treb-default-color",b.resolved):p===1&&(this.color_bar_elements.text?.style.setProperty("--treb-default-color",b.resolved),this.color_bar_elements.border?.style.setProperty("--treb-default-color",b.resolved)),this.DOM.Create("button",void 0,s,{attrs:{style:_,title:x},data:{command:"set-color",color:JSON.stringify(b.color)}})}}this.swatch_lists.theme?.replaceChildren(s),s=this.DOM.Fragment();let d=["Black","White","Gray","Red","Orange","Yellow","Green","Blue","Indigo","Violet"],u=d.map(f=>f.toLowerCase()),h=e.document_styles.colors.filter(f=>!u.includes(f.toLowerCase()));for(let f of[...d,...h]){let m=`background: ${f.toLowerCase()};`;this.DOM.Create("button",void 0,s,{attrs:{style:m,title:f},data:{command:"set-color",color:JSON.stringify({text:f.toLowerCase()})}})}this.swatch_lists.other?.replaceChildren(s)}let r=["General","Number","Integer","Percent","Fraction","Accounting","Currency","Scientific"],i=["Timestamp","Long Date","Short Date"];for(let s of e.document_styles.number_formats){if(me.SymbolicName(me.Translate(s)))continue;me.Get(s).date_format?i.push(s):r.push(s)}let n=s=>this.DOM.Create("button",void 0,void 0,{text:s,data:{format:s,command:"number-format"}}),o=this.DOM.Fragment();o.append(...r.map(s=>n(s))),o.append(this.DOM.Div(void 0,void 0,{attrs:{separator:""}})),o.append(...i.map(s=>n(s))),t.textContent="",t.append(o)}UpdateRevertState(e){let t=e.can_revert;this.revert_state!==t&&(this.revert_state=t,(this.revert_button||e.options.revert_indicator)&&(this.revert_state?this.views?.classList.add("treb-can-revert"):this.views?.classList.remove("treb-can-revert"),this.revert_button&&(this.revert_button.dataset.canRevert=t?"true":"false",t?(this.revert_button.classList.remove("sidebar-disabled"),this.revert_button.title="Revert to original version"):(this.revert_button.classList.add("sidebar-disabled"),this.revert_button.title="This is the original version of the document"))))}ReplaceTemplate(e,t,r=!0){let i=e.querySelector(t);if(i&&i.parentElement){for(let n of Array.from(i.content.children))i.parentElement.insertBefore(n,i);r&&i.parentElement.removeChild(i)}else console.warn("template not found",t)}AttachToolbar(e,t){let r=t.querySelector(".treb-layout-header"),i=t.querySelector(".treb-toolbar");i.innerHTML=js;let n=[];if(e.options.toolbar==="narrow"||e.options.toolbar==="show-narrow"?n.push(...Array.from(i.querySelectorAll("[wide]"))):n.push(...Array.from(i.querySelectorAll("[narrow]"))),e.options.file_menu||n.push(i.querySelector("[file-menu]")),e.options.indent_buttons||n.push(i.querySelector("[indent-group]")),e.options.font_scale||n.push(i.querySelector("[font-scale]")),!e.options.font_stack)n.push(i.querySelector("[font-stack]"));else{let v=i.querySelectorAll("[font-stack] button[data-font-stack]");for(let w of v)if(w.dataset.fontStack){let y=Yr[w.dataset.fontStack];w.textContent=y||""}}e.options.chart_menu||n.push(i.querySelector("[chart-menu]")),e.options.freeze_button||n.push(i.querySelector("[freeze-button]")),e.options.table_button||n.push(i.querySelector("[table-button]")),!e.options.add_tab&&!e.options.delete_tab&&n.push(...Array.from(i.querySelectorAll("[add-remove-sheet]"))),e.options.toolbar_recalculate_button||n.push(i.querySelector("[recalculate-button]"));for(let v of n)v&&v.parentElement?.removeChild(v);let o=i.querySelector(".treb-color-chooser"),s=i.querySelector(".treb-comment-box textarea");for(let[v,w]of Object.entries({top:"[wide] [data-command=align-top]",middle:"[wide] [data-command=align-middle]",bottom:"[wide] [data-command=align-bottom]",left:"[wide] [data-command=justify-left]",right:"[wide] [data-command=justify-right]",center:"[wide] [data-command=justify-center]",wrap:"[data-command=wrap-text]",merge:"[data-id=merge]",comment:"[data-icon=comment]",locked:"[data-command=lock-cells]",freeze:"[data-command=freeze-panes]",table:"[data-icon=table]",format:"input.treb-number-format",scale:"input.treb-font-scale",stack:"button.treb-font-stack"})){let y=i.querySelector(w);y&&(this.toolbar_controls[v]=y)}let a=o.querySelectorAll(".treb-swatches");this.swatch_lists={theme:a[0],other:a[1]};let c=t.querySelector("[data-command=increase-precision");c&&(c.textContent=this.sheet?.FormatNumber(0,"0.00")||""),c=t.querySelector("[data-command=decrease-precision"),c&&(c.textContent=this.sheet?.FormatNumber(0,"0.0")||""),c=i.querySelector("[data-command=update-comment]"),s.addEventListener("keydown",v=>{v.key==="Enter"&&(v.shiftKey||v.ctrlKey)&&c.click()});for(let v of["border","annotation","align","justify"])this.replace_targets[v]=i.querySelector(`[data-target=${v}`);for(let v of["fill","text","border"])this.color_bar_elements[v]=i.querySelector(`[data-color-bar=${v}]`);i.addEventListener("click",v=>{let w=v.target,y={format:w.dataset.format,scale:w.dataset.scale,font_stack:w.dataset.fontStack},C=w?.dataset.command;if(C){let S=w.parentElement?.dataset.replace;if(S){let A=this.replace_targets[S];A&&(A.dataset.command=C,A.title=w.title||"")}switch(/^border-/.test(C)&&(y.color=this.border_color||{}),C){case"text-color":case"fill-color":y.color={};try{y.color=JSON.parse(w.dataset.color||"{}")}catch(A){console.error(A)}break;case"set-color":C=o.dataset.colorCommand||"",y.color={};try{y.color=JSON.parse(w.dataset.color||"{}")}catch(A){console.error(A)}if(C==="border-color"&&(this.border_color=y.color),o.dataset.target){let A=this.color_bar_elements[o.dataset.target];A&&(A.style.setProperty("--treb-color-bar-color",w.style.backgroundColor),A.dataset.color=w.dataset.color||"{}")}break;case"update-comment":y.comment=s.value;break}e.HandleToolbarMessage({command:C,...y})}});let d=(v,w)=>{let y=i.querySelector(v);if(y){let C="";y.addEventListener("focusin",()=>C=y.value),y.addEventListener("keydown",S=>{switch(S.key){case"Escape":y.value=C,e.Focus();break;case"Enter":w(y.value)||(y.value=C,e.Focus());break;default:return}S.stopPropagation(),S.preventDefault()})}};d("input.treb-number-format",v=>v?(e.HandleToolbarMessage({command:"number-format",format:v}),!0):!1),d("input.treb-font-scale",v=>{let w=Number(v);return!w||isNaN(w)?(console.warn("invalid scale value"),!1):(e.HandleToolbarMessage({command:"font-scale",scale:w}),!0)});let u=o.querySelector("input"),h=o.querySelector("input + button");u.addEventListener("input",v=>{if(v instanceof InputEvent&&v.isComposing)return;h.style.background=u.value||"";let w=h.style.backgroundColor||"#fff",y=ti.MeasureColor(w),C=ee.RGBToHSL(y[0],y[1],y[2]);h.style.color=C.l>.5?"#000":"#fff",h.dataset.color=JSON.stringify(h.style.backgroundColor?{text:h.style.backgroundColor}:{})}),u.addEventListener("keydown",v=>{v.key==="Enter"&&(v.stopPropagation(),v.preventDefault(),h.click())}),/firefox/i.test(navigator.userAgent)?r.addEventListener("scroll",()=>{this.DOM.view&&this.DOM.doc?.activeElement instanceof this.DOM.view.HTMLElement&&this.DOM.doc.activeElement?.blur()}):r.addEventListener("scroll",()=>e.Focus());let f=!1,m=v=>{v.key==="Escape"&&(v.stopPropagation(),v.preventDefault(),Promise.resolve().then(()=>e.Focus()))},p=v=>{if(f){if(v.relatedTarget instanceof Node&&i.contains(v.relatedTarget))return;i.removeEventListener("keydown",m),i.removeEventListener("focusout",p),f=!1}},b=v=>{let w=v.target,y=w?.parentElement;if(w?.classList.contains("treb-menu")){y=w;for(let C of Array.from(y.children))if(C.tagName==="BUTTON"){w=C;break}}else if(!y?.classList.contains("treb-menu"))return;if(w&&y){if(f||(i.addEventListener("focusout",p),i.addEventListener("keydown",m),f=!0),y.dataset.colorCommand){o.querySelector(".treb-default-color")?.setAttribute("title",y.dataset.defaultColorText||"Default color");let oe=o.querySelector(".treb-default-color-label");oe&&(oe.textContent=y.dataset.defaultColorText||"Default color"),y.appendChild(o),o.dataset.colorCommand=y.dataset.colorCommand,o.dataset.target=y.dataset.replaceColor||""}let C=y.querySelector("div"),S=r.getBoundingClientRect(),A=w.getBoundingClientRect(),{left:k}=A,R=y.parentElement;R?.hasAttribute("composite")&&(k=R.firstElementChild.getBoundingClientRect().left);let D=C.getBoundingClientRect();y.classList.contains("treb-submenu")?(C.style.top=A.top-D.height/2+"px",k+A.width+6+D.width>S.right?C.style.left=k-6-D.width+"px":C.style.left=k+A.width+6+"px"):(C.style.top=A.bottom+"px",k+D.width>S.right-6?C.style.left=A.right-D.width+"px":C.style.left=k+"px");let q=C.querySelector("textarea");q&&requestAnimationFrame(()=>q.focus())}},_=this.root?.querySelector(".treb-number-format-menu");_&&(this.UpdateDocumentStyles(e,_),this.UpdateSelectionStyle(e,i,s),e.Subscribe(v=>{switch(v.type){case"focus-view":break;case"data":case"document-change":case"load":case"reset":this.UpdateDocumentStyles(e,_),this.UpdateSelectionStyle(e,i,s),this.UpdateRevertState(e);break;case"theme-change":this.UpdateDocumentStyles(e,_),this.UpdateSelectionStyle(e,i,s);break;case"annotation-selection":case"selection":this.UpdateSelectionStyle(e,i,s);break}}));let x=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);if(i.addEventListener("focusin",v=>{b(v)}),x){let v=Array.from(i.querySelectorAll(".treb-menu"));for(let w of v)w.tabIndex=0;i.addEventListener("mousedown",w=>{b(w)})}}};var hi=class{version="32.14.0";CreateSpreadsheet(e){let t=e.container,r=new wt(t);if(r.AttachElement(e),!r.sheet)throw new Error("construction failed");return r.sheet}},gc=new hi;if(typeof HTMLElement<"u"){class l extends HTMLElement{get sheet(){return this.instance.sheet}instance;constructor(){super(),this.instance=new wt(this)}connectedCallback(){this.instance.AttachElement()}}typeof customElements<"u"&&(customElements.get("treb-spreadsheet")?console.info("custom element treb-spreadsheet is already defined."):customElements.define("treb-spreadsheet",l))}export{gc as TREB,hi as TREBGlobal};
|