@trebco/treb 36.1.4 → 37.0.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,11 +0,0 @@
1
- /*! TREB v34.0.2. Copyright 2018-2026 trebco, llc. All rights reserved. LGPL: https://treb.app/license */
2
- var hi=Object.create;var Qe=Object.defineProperty;var di=Object.getOwnPropertyDescriptor;var ui=Object.getOwnPropertyNames;var fi=Object.getPrototypeOf,pi=Object.prototype.hasOwnProperty;var pr=(f,e)=>()=>(e||f((e={exports:{}}).exports,e),e.exports),mi=(f,e)=>{for(var t in e)Qe(f,t,{get:e[t],enumerable:!0})},_i=(f,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of ui(e))!pi.call(f,r)&&r!==t&&Qe(f,r,{get:()=>e[r],enumerable:!(i=di(e,r))||i.enumerable});return f};var mr=(f,e,t)=>(t=f!=null?hi(fi(f)):{},_i(e||!f||!f.__esModule?Qe(t,"default",{value:f,enumerable:!0}):t,f));var Rt={spreadsheet_semantics:!0,dimensioned_quantities:!1,fractions:!0,decimal_mark:".",argument_separator:",",boolean_true:"TRUE",boolean_false:"FALSE"};var ue=/[\s-+=<>!()]/,Lt=/['*\\]/,Xe=34,Ze=39,bi=160,kt=32,yi=9,gi=10,wi=13,te=48,_e=57,Ye=46,et=43,be=45,Et=40,tt=41,ye=44,vi=37,it=95,Te=36,xi=123,Ci=125,ge=91,Dt=93,Si=63,Ai=33,It=59,rt=35,Ti=64,de=65,we=97,Ri=69,ki=101,Re=90,ke=122,Ei=105,st=192,ot=382,nt={"==":6,"!=":6,"<>":6,"=":6,"<":7,">":7,"<=":7,">=":7,"+":9,"-":9,"&":9,"*":10,"/":10,"^":11,":":13},Di={"@":50,"-":100,"+":100},Ii=[...Object.keys(nt),"@"].sort((f,e)=>e.length-f.length),Ee=class{get argument_separator(){return this.flags.argument_separator}get decimal_mark(){return this.flags.decimal_mark}flags={...Rt};r1c1_regex=/[rR]((?:\[[-+]{0,1}\d+\]|\d*))[cC]((?:\[[-+]{0,1}\d+\]|\d*))$/;argument_separator_char=ye;decimal_mark_char=Ye;imaginary_char=Ei;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 i=t(e);if(typeof i=="object")return i;switch(e.type){case"address":case"missing":case"literal":case"complex":case"identifier":case"operator":case"structured-reference":break;case"dimensioned":i&&(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(r=>this.Walk2(r,t)));break;case"implicit-call":t(e)&&(e.call=this.Walk2(e.call,t),e.args=e.args.map(r=>this.Walk2(r,t)));break;case"call":t(e)&&(e.args=e.args.map(r=>this.Walk2(r,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 i of e.elements)this.Walk(i,t);return;case"implicit-call":if(t(e)){this.Walk(e.call,t);for(let i of e.args)this.Walk(i,t)}return;case"call":if(t(e))for(let i of e.args)this.Walk(i,t)}}Transpose(e){let t=e.length,i=[],r=0;for(let s=0;s<t;s++)Array.isArray(e[s])&&(r=Math.max(r,e[s].length));for(let s=0;s<r;s++){i[s]=[];for(let o=0;o<t;o++)i[s][o]=e[o]?e[o][s]:void 0}return i}Render(e,t={}){let i=t.offset||{rows:0,columns:0},r=t.missing??"(missing)",{convert_decimal:s,convert_argument_separator:o,long_structured_references:n,table_name:a}=t,l=this.flags.argument_separator+" ";o===","?l=", ":o===";"&&(l="; ");let c=s===","?",":".",h=this.flags.decimal_mark===","?/,/:/\./,d=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,i);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,i)+":"+this.AddressLabel(e.end,i);case"missing":return r;case"array":return"{"+this.Transpose(e.values).map(u=>u.map(p=>typeof p=="string"?'"'+p+'"':p).join(", ")).join("; ")+"}";case"binary":{let u=e.operator===":"||e.operator==="^"?"":" ";return this.Render(e.left,t)+u+e.operator+u+this.Render(e.right,t)}case"unary":return e.operator+this.Render(e.operand,t);case"complex":if(e.text)return s?e.text.replace(d,c):e.text;{let u=Math.abs(e.imaginary).toString();if((s===","||this.flags.decimal_mark===",")&&(u=u.replace(/\./,",")),e.real){let p=e.real.toString();(s===","||this.flags.decimal_mark===",")&&(p=p.replace(/\./,","));let m=Math.abs(e.imaginary);return`${p}${e.imaginary<0?" - ":" + "}${m===1?"":u}i`}else return e.imaginary===-1?"-i":e.imaginary===1?"i":`${e.imaginary<0?"-":""}${u}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(s&&typeof e.value=="number")if(e.text){let u=e.text;return s===","&&this.flags.decimal_mark==="."&&(u=u.replace(/,/g,"")),u.replace(h,c)}else return e.value.toString().replace(/\./,c);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(u=>this.Render(u,t)).join(l)+")":e.elements.map(u=>this.Render(u,t)).join(l);case"implicit-call":return this.Render(e.call,t)+"("+e.args.map(u=>this.Render(u,t)).join(l)+")";case"call":return e.name+"("+e.args.map(u=>this.Render(u,t)).join(l)+")";case"dimensioned":return this.Render(e.expression)+" "+this.Render(e.unit);case"structured-reference":{let u=e.column;/[^A-Za-z]/.test(u)&&(u="["+u+"]");let p=e.table;switch(!p&&n&&a&&(p=a),e.scope){case"all":return`${p}[[#all],${u}]`;case"row":return n?`${p}[[#this row],${u}]`:`${p}[@${u}]`;case"column":return`${p}[${u}]`}throw new Error("unhandled scope in structured reference")}}return"??"}Parse(e){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===";"?this.argument_separator_char=It:this.argument_separator_char=ye,this.flags.decimal_mark===","?this.decimal_mark_char=ye:this.decimal_mark_char=Ye;for(let r=0;r<this.length;r++)this.data[r]=e.charCodeAt(r);let t=this.ParseGeneric(),i={};for(let r of Object.keys(this.dependencies.addresses))this.address_refcount[r]&&(i[r]=this.dependencies.addresses[r]);return this.dependencies.addresses=i,{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 i=!!t.r1c1_force_relative,r=t.r1c1_base,s="";e.sheet&&(s=(ue.test(e.sheet)?"'"+e.sheet+"'":e.sheet)+"!");let o="",n="";if(i&&t.r1c1_proper_semantics&&r){if(e.absolute_row)o=(e.row+1).toString();else{let a=e.row-r.row;a&&(o=`[${a}]`)}if(e.absolute_column)n=(e.column+1).toString();else{let a=e.column-r.column;a&&(n=`[${a}]`)}}else if(i&&r){let a=e.row-r.row,l=e.column-r.column;a&&(o=`[${a}]`),l&&(n=`[${l}]`)}else o=e.offset_row?`[${e.row}]`:(e.row+1).toString(),n=e.offset_column?`[${e.column}]`:(e.column+1).toString();return s+=`R${o}C${n}`,s}AddressLabel(e,t){let i=e.column;!e.absolute_column&&e.column!==1/0&&(i+=t.columns);let r=e.row;if(!e.absolute_row&&e.row!==1/0&&(r+=t.rows),r<0||i<0||r===1/0&&i===1/0)return"#REF";let s="";return e.sheet&&(s=(ue.test(e.sheet)?"'"+e.sheet+"'":e.sheet)+"!"),r===1/0?s+(e.absolute_column?"$":"")+this.ColumnLabel(i):i===1/0?s+(e.absolute_row?"$":"")+(r+1):s+(e.absolute_column?"$":"")+this.ColumnLabel(i)+(e.absolute_row?"$":"")+(r+1)+(e.spill?"#":"")}ParseGeneric(e=[0],t=!1){let i=[];for(;this.index<this.length;){let r=this.ParseNext(i.length===0);if(typeof r=="number"){if(e.some(s=>r===s))break;if(r===Et){this.index++;let s=this.ParseGeneric([tt],!0);this.index++,i.push({type:"group",id:this.id_counter++,elements:s?[s]:[],explicit:!0})}else{let s=this.ConsumeOperator();s?i.push(s):t&&r===this.argument_separator_char?(i.push({type:"group-separator",position:this.index,id:this.id_counter++}),this.index++):(this.error=`unexpected character [1]: ${String.fromCharCode(r)}, 0x${r.toString(16)}`,this.valid=!1,this.index++)}}else i.push(r)}if(i.length){if(i=this.BinaryToRange2(i),this.flags.fractions){let r=[],s=n=>n.type==="literal"&&typeof n.value=="number"&&n.value%1===0,o=0;for(;o<i.length-3;o++)if(s(i[o])&&s(i[o+1])&&i[o+2].type==="operator"&&i[o+2].operator==="/"&&s(i[o+3])){let n=i[o],a=i[o+1],l=i[o+3],c=(n.value<0?-1:1)*(a.value/l.value);o+=3,r.push({id:i[o].id,type:"literal",text:this.expression.substring(n.position,l.position+1),value:n.value+c,position:n.position})}else r.push(i[o]);for(;o<i.length;o++)r.push(i[o]);i=r}if(i=i.map(r=>r.type==="identifier"&&r.name===this.imaginary_number?{type:"complex",real:0,imaginary:1,position:r.position,text:r.name,id:this.id_counter++}:r),this.flags.dimensioned_quantities){let r=[],s;for(let o=0;o<i.length;o++){let n=i[o];if(!s)s=n;else if(n.type==="identifier"&&(s.type==="literal"||s.type==="group"||s.type==="call")){let a=n;for(;i[o+1]?.type==="identifier";)a.name+=" "+i[++o].name;r.push({type:"dimensioned",expression:s,unit:n,id:this.id_counter++}),s=void 0}else r.push(s),s=n}s&&r.push(s),i=r}}return i.length===0?null:i.length===1?i[0]:this.BinaryToComplex(this.ArrangeUnits(i))}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,i=e.name,r=i.split("!");if(r.length>1&&(t=r.slice(0,r.length-1).join("!"),i=i.substr(t.length+1),t[0]==="'"))if(t.length>1&&t[t.length-1]==="'")t=t.substr(1,t.length-2);else return;let s=i[0]==="$";i=(s?i.substr(1):i).toUpperCase();let o=Number(i);if(isNaN(o)){if(/[A-Z]{1,3}/.test(i)){let n=-1;for(let a=0;a<i.length;a++){let l=i[a].charCodeAt(0);n=26*(1+n)+(l-de)}return{type:"address",position:e.position,absolute_column:s,label:e.name,column:n,id:this.id_counter++,row:1/0,sheet:t}}}else if(o>0&&o!==1/0&&!/\./.test(i))return{type:"address",position:e.position,absolute_row:s,label:e.name,row:o-1,id:this.id_counter++,column:1/0,sheet:t}}}BinaryToRange2(e){let t=[];for(let i=0;i<e.length;i++){let r=e[i],s=e[i+1],o=e[i+2],n,a="",l;if(r&&s&&o&&s.type==="operator"&&s.operator===":"){if(r.type==="address"&&o.type==="address"){let c=r.position+r.label.length,h=o.position;n={type:"range",id:this.id_counter++,position:r.position,start:r,end:o,label:r.label+this.expression.substring(c,h)+o.label},a=n.start.label+":"+n.end.label,this.address_refcount[n.start.label]--,this.address_refcount[n.end.label]--;let d=[r.position,o.position];this.full_reference_list=this.full_reference_list.filter(u=>u.position!==d[0]&&u.position!==d[1])}else if((r.type==="literal"||r.type==="identifier")&&(o.type==="literal"||o.type==="identifier")){let c=this.UnitToAddress(r);if(!c&&r.type==="literal"&&typeof r.value=="number"&&r.value<0){let d={...r,text:(r.text||"").replace(/^-/,""),position:r.position+1,value:-r.value};c=this.UnitToAddress(d),c&&(l={type:"operator",operator:"-",position:r.position,id:this.id_counter++})}let h=this.UnitToAddress(o);c&&h&&(c.column===1/0&&h.column===1/0||c.row===1/0&&h.row===1/0)&&(a=c.label+":"+h.label,n={type:"range",id:this.id_counter++,position:c.position,start:c,end:h,label:a})}}n?(l&&t.push(l),t.push(n),this.dependencies.ranges[a]=n,this.full_reference_list.push(n),i+=2):t.push(r)}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 i=e.right.imaginary;return e.operator==="-"&&(i=-i),{type:"complex",position:e.left.position,text:t,id:this.id_counter++,imaginary:i,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 i=0;i<e.length;i++){let r=e[i];if(r.type!=="group-separator"){if(r.type==="operator")if(t.length===0||t[t.length-1].type==="operator")if(Di[r.operator]){let s=this.BinaryToComplex(this.ArrangeUnits(e.slice(i+1)));if(!this.valid)return{type:"group",id:this.id_counter++,elements:e,explicit:!1};s.type==="binary"?(s.left={type:"unary",id:this.id_counter++,operator:r.operator,operand:s.left,position:r.position},r=s):r={type:"unary",id:this.id_counter++,operator:r.operator,operand:s,position:r.position},i=e.length}else return this.error=`unexpected character [2]: ${r.operator}`,this.error_position=r.position,this.valid=!1,{type:"group",id:this.id_counter++,elements:e,explicit:!1};else{t.push(r);continue}if(t.length<2){if(t.length===1){let s=t[0].type;if(r.type==="group"&&r.explicit&&(s==="address"||s==="call"||s==="identifier"||s==="implicit-call")){let o=r.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(r)}else if(t[t.length-1].type==="operator"){let s=t[t.length-2],o=t[t.length-1],n=o.operator,a={type:"binary",id:this.id_counter++,left:s,operator:n,position:o.position,right:r};s.type==="binary"&&nt[n]>nt[s.operator]&&(a.left=s.left,a.operator=s.operator,a.position=s.position,a.right={type:"binary",id:this.id_counter++,left:s.right,right:r,operator:n,position:o.position}),t.splice(-2,2,a)}else t.push(r)}}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===Xe)return{type:"literal",id:this.id_counter++,position:this.index,value:this.ConsumeString()};if(t>=te&&t<=_e||t===this.decimal_mark_char)return this.ConsumeNumber();if(t===xi)return this.ConsumeArray();if(e&&(t===be||t===et)){let i=this.data[this.index+1];if(i>=te&&i<=_e||i===this.decimal_mark_char)return this.ConsumeNumber()}else if(t>=de&&t<=Re||t>=we&&t<=ke||t===it||t===rt||t===Ze||t===Te||t===ge||t>=st&&t<=ot)return this.ConsumeToken(t);return t}ConsumeArray(){let e={type:"array",id:this.id_counter++,values:[],position:this.index};this.index++;let t=0,i=0;for(;this.index<this.length;){let r=this.ParseNext(),s=this.index;if(typeof r=="number")switch(this.index++,r){case It:i++,t=0;break;case ye:t++;break;case Ci:return e;default:this.valid&&(this.error="invalid character in array literal",this.error_position=s,this.valid=!1);break}else r.type==="literal"?(e.values[t]||(e.values[t]=[]),e.values[t][i]=r.value):this.valid&&(this.error="invalid value in array literal",this.error_position=s,this.valid=!1)}return e}ConsumeOperator(){for(let e of Ii)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 i=this.ParseGeneric([this.argument_separator_char,tt]);i!==null&&t.push(i);let r=this.data[this.index];if(r===this.argument_separator_char){this.index++,e++;for(let s=t.length;s<e;s++)t.push({type:"missing",id:this.id_counter++})}else if(r===tt)return this.index++,t}return t}ConsumeToken(e){let t=[e],i=this.index,r=e===Ze,s=0,o=!1;for(e===ge&&(s=1,o=!0),++this.index;this.index<this.length;this.index++){let h=this.data[this.index];if(h>=de&&h<=Re||h>=we&&h<=ke||h>=st&&h<=ot||h===it||h===Te||h===Ye||h===Ai||r||h>=te&&h<=_e||h===ge||s>0&&h===Dt||h===be&&this.flags.r1c1&&s===1||s>0&&h===Ti&&this.data[this.index-1]===ge||s===1&&(h===ye||h===kt)||s>1||h===Si&&s===0)t.push(h),h===ge&&(s++,o=!0),h===Dt&&s--,h===Ze&&(r=!1);else break}this.data[this.index]===rt&&t.push(this.data[this.index++]);let n=t.map(h=>String.fromCharCode(h)).join("");if(r)return this.error="unbalanced single quote",this.error_position=i,this.valid=!1,{type:"identifier",id:this.id_counter++,name:n,position:i};if(s)return this.error="unbalanced square bracket",this.error_position=i,this.valid=!1,{type:"identifier",id:this.id_counter++,name:n,position:i};if(this.ConsumeWhiteSpace(),this.flags.spreadsheet_semantics){let h=this.ConsumeAddress(n,i);if(h)return h}if(this.data[this.index]===Et){let h=this.ConsumeArguments();return{type:"call",id:this.id_counter++,name:n,args:h,position:i,end:this.index}}if(this.flags.spreadsheet_semantics&&o){let h=this.ConsumeStructuredReference(n,i);if(h)return h}let l=n.toLowerCase();if(l==="true"||this.flags.boolean_true&&l===this.flags.boolean_true.toLowerCase())return{type:"literal",id:this.id_counter++,value:!0,position:i};if(l==="false"||this.flags.boolean_false&&l===this.flags.boolean_false.toLowerCase())return{type:"literal",id:this.id_counter++,value:!1,position:i};let c={type:"identifier",id:this.id_counter++,name:n,position:i};return this.full_reference_list.push(c),c}ConsumeStructuredReference(e,t){let i=e.length,r=e,s="",o=0;for(;o<i;o++){if(e[o]==="["){e=e.substring(o);break}s+=e[o]}if(e[0]!=="["||e[e.length-1]!=="]")return;e=e.substring(1,e.length-1);let n=e.split(",").map(h=>h.trim()),a="column",l="";if(n.length>2)return;n.length===2?(/\[#this row\]/i.test(n[0])?a="row":/\[#all\]/i.test(n[0])&&(a="all"),l=n[1]):(l=n[0],l[0]==="@"&&(a="row",l=l.substring(1,l.length))),l[0]==="["&&l[l.length-1]==="]"&&(l=l.substring(1,l.length-1));let c={type:"structured-reference",id:this.id_counter++,label:r,position:t,scope:a,column:l,table:s};return this.full_reference_list.push(c),c}ConsumeAddress(e,t){let i=t,r=e.length,s,o=e.split("!");if(o.length>1&&(s=o.slice(0,o.length-1).join("!"),t+=s.length+1),this.flags.r1c1){let h=o[o.length-1].match(this.r1c1_regex);if(h){let d={type:"address",id:this.id_counter++,label:e,row:0,column:0,position:i,sheet:s,r1c1:!0};return h[1][0]==="["?(d.offset_row=!0,d.row=Number(h[1].substring(1,h[1].length-1))):h[1]?(d.row=Number(h[1])-1,this.flags.r1c1_proper_semantics&&(d.absolute_row=!0)):(d.offset_row=!0,d.row=0),h[2][0]==="["?(d.offset_column=!0,d.column=Number(h[2].substring(1,h[2].length-1))):h[2]?(d.column=Number(h[2])-1,this.flags.r1c1_proper_semantics&&(d.absolute_column=!0)):(d.offset_column=!0,d.column=0),d}}let n=this.ConsumeAddressColumn(t);if(!n)return null;t=n.position;let a=this.ConsumeAddressRow(t);if(!a||(t=a.position,n.column===8508&&a.row===9))return null;let l=s?s+e.substr(s.length,t-i).toUpperCase():e.substr(0,t-i).toUpperCase();s&&s[0]==="'"&&(s=s.substr(1,s.length-2));let c={type:"address",id:this.id_counter++,label:l,row:a.row,column:n.column,absolute_row:a.absolute,absolute_column:n.absolute,position:i,sheet:s,spill:a.spill};return r!==t-i?null:(this.dependencies.addresses[c.label]=c,this.address_refcount[c.label]=(this.address_refcount[c.label]||0)+1,this.full_reference_list.push(c),c)}ConsumeAddressRow(e){let t=this.data[e]===Te;t&&e++;let i=e,r=0;for(;;e++){let o=this.data[e];if(o>=te&&o<=_e)r*=10,r+=o-te;else break}if(i===e||r===0)return!1;let s=!1;return this.data[e]===rt&&(e++,s=!0),{absolute:t,row:r-1,position:e,spill:s}}ConsumeAddressColumn(e){let t=-1,i=0,r=this.data[e]===Te;for(r&&e++;;e++,i++){if(i>=4)return!1;let s=this.data[e];if(s>=de&&s<=Re)t=26*(1+t)+(s-de);else if(s>=we&&s<=ke)t=26*(1+t)+(s-we);else break}return t<0?!1:{absolute:r,column:t,position:e}}ConsumeNumber(){let e=this.index,t=0,i=!1,r=!1,s=0,o=0,n=0,a="integer",l=0,c=!1,h=this.index;for(;this.index<this.length;this.index++,l++){let u=this.data[this.index];if(u===this.decimal_mark_char)if(a==="integer")a="fraction";else break;else if(u===vi){s/=100,n/=100,this.index++;break}else if(u===et||u===be)if(l===0)u===be&&(r=!0);else break;else if(u===Ri||u===ki)if(a==="integer"||a==="fraction")a="exponent",this.index<this.length-1&&(this.data[this.index+1]===et?this.index++:this.data[this.index+1]===be&&(this.index++,i=!0));else break;else if(u===this.imaginary_char){let p=this.data[this.index+1];if(p>=de&&p<=Re||p>=we&&p<=ke||p>=st&&p<=ot||p===it)break;if(a==="integer"||a==="fraction"){this.index++,c=!0;break}}else if(u>=te&&u<=_e)switch(a){case"integer":s=s*10+(u-te);break;case"fraction":n=n*10+(u-te),o++;break;case"exponent":t=t*10+(u-te);break}else break}let d=s+n/Math.pow(10,o);return a==="exponent"&&(d=d*Math.pow(10,(i?-1:1)*t)),c?{type:"complex",id:this.id_counter++,position:e,imaginary:r?-d:d,real:0,text:this.expression.substring(h,this.index)||""}:{type:"literal",id:this.id_counter++,position:e,value:r?-d:d,text:this.expression.substring(h,this.index)||""}}ConsumeString(){this.index++;let e=[];for(;this.index<this.length;this.index++){let t=this.data[this.index];if(t===Xe&&(this.index++,this.index>=this.length||this.data[this.index]!==Xe))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===kt||e===yi||e===gi||e===wi||e===bi)this.index++;else return}}};var Ut=(f,e=",")=>{let t=0,i=[],r="",s=[],o=f.length;if(/[\r\n"]/.test(e))throw new Error("invalid delimiter");for(let n=0;n<o;n++){let a=f[n];if(!(n===0&&a.charCodeAt(0)===65279))if(t===0)switch(a){case e:i.push(r),r="";break;case"\r":break;case`
3
- `:i.push(r),r="",s.push(i),i=[];break;case'"':r.length===0?t=1:r+=a;break;default:r+=a;break}else a==='"'?n+1<o&&f[n+1]==='"'?(r+='"',n++):t=0:r+=a}return(i.length||r.length)&&(i.push(r),s.push(i)),s};var re=class f{static _instance=new f;constructor(){}static get instance(){return this._instance}HTML(e,t={}){t={br:!0,...t};let i=[];for(let r of e){let s=[];for(let o of r)o.pre&&s.push("<pre>"),o.emphasis&&s.push("<em>"),o.strong&&s.push("<strong>"),o.strike&&s.push("<strike>"),s.push(o.text),o.strike&&s.push("</strike>"),o.strong&&s.push("</strong>"),o.emphasis&&s.push("</em>"),o.pre&&s.push("</pre>");i.push(s.join(""))}return i.join(t.br?`<br/>
4
- `:`
5
- `)}Dummy(e=""){return e.split(/\n/).map(t=>[{text:t}])}Parse(e=""){let t=this.Tokenize(e);for(let i=0;i<t.length;i++){let r=t[i];if(r.type==="delimeter"){let s=t[i-1],o=t[i+1],n=!s||s.type==="whitespace"||s.type==="newline",a=s&&s.type==="text"&&/[^\w\d]$/.test(s.text),l=!o||o.type==="whitespace"||o.type==="newline",c=o&&o.type==="text"&&/^[^\w\d]/.test(o.text);r.left_flanking=!l&&(!c||n),r.right_flanking=!n&&(!a||l||c)}}return this.ApplyFormatting(t),this.Consolidate(t)}IsWhitespace(e){return e===" "||e===" "}IsNewline(e){return e==="\r"||e===`
6
- `}IsDelimeter(e){return e==="*"||e==="_"||e==="~"}Consolidate(e){let t=[],i={},r=[],s={type:"text",text:""};for(let o of e)if(o.type==="newline")s.text.length&&r.push(s),s={...i,text:"",type:"text"},t.push(r),r=[];else switch((!!i.strong!=!!o.strong||!!i.emphasis!=!!o.emphasis||!!i.strike!=!!o.strike)&&(i.strong=!!o.strong,i.emphasis=!!o.emphasis,i.strike=!!o.strike,s.text.length&&r.push(s),s={...i,text:"",type:"text"}),o.type){case"text":case"whitespace":s.text+=o.text;break;case"delimeter":for(let n=0;n<o.length;n++)s.text+=o.char;break}return s.text.length&&r.push(s),r.length&&t.push(r),t}ApplyFormatting(e,t){let i=0,r=e.length;for(i=0;i<r;i++){let s=e[i];if(s.type==="delimeter"){if(t&&s.right_flanking&&t.char===s.char&&s.length>0)return{index:i,token:s};if(s.left_flanking){let o=this.ApplyFormatting(e.slice(i+1),s);if(o.token){let n=Math.min(o.token.length,s.length),a=s.char==="~",l=!a&&!!(n%2),c=!a&&n>=2;for(let h=i+1;h<=i+o.index;h++)e[h].strong=!!e[h].strong||c,e[h].emphasis=!!e[h].emphasis||l,e[h].strike=!!e[h].strike||a;o.token.length-=n,s.length-=n,s.length>0?i--:i+=o.index}}}}return{index:i}}Tokenize(e=""){let t=[],i=e.length,r=0,s=!1,o="";for(r=0;r<i;r++){let n=e[r];if(this.IsWhitespace(n)){o&&t.push({type:"text",text:o});let a=n;for(;;){let l=e[r+1];if(this.IsWhitespace(l))a+=l,r++;else break}t.push({type:"whitespace",text:a}),s=!1,o=""}else if(this.IsNewline(n)){o&&t.push({type:"text",text:o}),t.push({type:"newline",text:n});let a="";for(;;){let l=e[r+1];if(this.IsNewline(l))a+=l,r++;else break}a.length&&t.push({type:"newline",text:a}),s=!1,o=""}else if(s)o+=n,s=!1;else if(this.IsDelimeter(n)){o&&t.push({type:"text",text:o});let a=n;for(;;){let l=e[r+1];if(l===n)a+=l,r++;else break}t.push({type:"delimeter",text:a,char:n,length:a.length}),s=!1,o=""}else n==="\\"?s=!0:o+=n}return o&&t.push({type:"text",text:o}),t}};var L=f=>f!==null&&typeof f=="object"&&"row"in f&&"column"in f,Ft=f=>f!==null&&typeof f=="object"&&"start"in f&&L(f.start)&&"end"in f&&L(f.end),_=class f{start_;end_;constructor(e,t=e,i=!1){this.end_=this.PatchNull(t),this.start_=this.PatchNull(e),i&&this.Normalize()}static FromColumn(e){return new f({row:1/0,column:e})}static FromRow(e){return new f({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 i=t?`${e.sheet_id||0}!`:"";return e.row===1/0?i+(e.absolute_column?"$":"")+this.ColumnToLabel(e.column):e.column===1/0?i+(e.absolute_row?"$":"")+(e.row+1):i+(e.absolute_column?"$":"")+this.ColumnToLabel(e.column)+(e.absolute_row?"$":"")+(e.row+1)+(e.spill?"#":"")}static Join(e,...t){let i=new f(e.start,e.end);for(let r of t)r&&(i.ConsumeAddress(r.start),i.ConsumeAddress(r.end));return i}static Bleed(e,t=1){return new f({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:i,column_count:r,before_row:s,row_count:o}=t,n=new f(e.start,e.end),a=e.start.sheet_id;if(r&&i<=n.end.column){if(r>0)i<=n.start.column?n.Shift(0,r):i>n.start.column&&i<=n.end.column?n.ConsumeAddress({row:n.end.row,column:n.end.column+r}):console.warn("AA X case 1",i,r,JSON.stringify(n));else if(r<0)if(i-r<=n.start.column)n.Shift(0,r);else{if(i<=n.start.column&&i-r>n.end.column)return!1;if(i<=n.start.column){let l=i-r-1;n=new f({row:n.start.row,column:l+1+r,sheet_id:a},{row:n.end.row,column:n.end.column+r})}else i<=n.end.column?i-r-1>=n.end.column?n=new f({row:n.start.row,column:n.start.column,sheet_id:a},{row:n.end.row,column:i-1}):n=new f({row:n.start.row,column:n.start.column,sheet_id:a},{row:n.end.row,column:n.start.column+n.columns+r-1}):console.warn("AA X case 2",i,r,JSON.stringify(n))}}if(o&&s<=n.end.row){if(o>0)s<=n.start.row?n.Shift(o,0):s>n.start.row&&s<=n.end.row?n.ConsumeAddress({row:n.end.row+o,column:n.end.column}):console.warn("AA X case 3",s,o,JSON.stringify(n));else if(o<0)if(s-o<=n.start.row)n.Shift(o,0);else{if(s<=n.start.row&&s-o>n.end.row)return!1;if(s<=n.start.row){let l=s-o-1;n=new f({column:n.start.column,row:l+1+o,sheet_id:a},{column:n.end.column,row:n.end.row+o})}else s<=n.end.row?s-o-1>=n.end.row?n=new f({column:n.start.column,row:n.start.row,sheet_id:a},{column:n.end.column,row:s-1}):n=new f({column:n.start.column,row:n.start.row,sheet_id:a},{column:n.end.column,row:n.start.row+n.rows+o-1}):console.warn("AA X case 4",s,o,JSON.stringify(n))}}return n}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 f(this.start,this.end)}get left(){let e=new f(this.start_,this.end_);return e.end_.column=e.start_.column,e}get right(){let e=new f(this.start_,this.end_);return e.start_.column=e.end_.column,e}get top(){let e=new f(this.start_,this.end_);return e.end_.row=e.start_.row,e}get bottom(){let e=new f(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 i={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:i})}}}get spreadsheet_label(){let e;return this.entire_sheet?"":this.entire_column?(e=f.ColumnToLabel(this.start_.column),e+=":"+f.ColumnToLabel(this.end_.column),e):this.entire_row?(e=String(this.start_.row+1),e+=":"+(this.end_.row+1),e):(e=f.CellAddressToLabel(this.start_),this.columns>1||this.rows>1?e+":"+f.CellAddressToLabel(this.end_):e)}toJSON(){return{start:{...this.start_},end:{...this.end_}}}};var lt=f=>typeof f=="object"&&!!f&&typeof f.real=="number"&&typeof f.imaginary=="number",ct=f=>f.real?f.imaginary?f.imaginary>0?`${f.real} + ${f.imaginary}i`:`${f.real} - ${Math.abs(f.imaginary)}i`:f.real.toString():f.imaginary?f.imaginary+"i":"0",ht=f=>typeof f=="object"&&!!f&&typeof f.value=="number"&&typeof f.unit=="string",Mi=f=>typeof f=="object"&&f.type==="function",dt=["undefined","formula","string","number","boolean","object","function","error","complex","array","dimensioned_quantity"];var se=f=>{switch(typeof f){case"undefined":return 0;case"number":return 3;case"boolean":return 4;case"object":return f===null?0:Mi(f)?6:lt(f)?8:ht(f)?10:5;case"string":return f[0]==="="?1:2;default:return 7}};var $=class{static StringToColumn(e){let t=0;e=e.toUpperCase();for(let i=0;i<e.length;i++)t*=26,t+=e.charCodeAt(i)-64;return t-1}value;type=0;calculated;calculated_type;formatted;rendered_type;style;area;spill;merge_area;table;renderer_data;render_clean=[];note;hyperlink;editing;render_function;click_function;constructor(e,t){typeof e<"u"&&this.Set(e,t)}ValueIsNumber(){return this.type===3}ValueIsFormula(){return this.type===1}ValueIsBoolean(){return this.type===4}ValueIsComplex(){return this.type===8}FlushStyle(){this.formatted=this.rendered_type=this.style=void 0,this.render_clean=[]}FlushArray(){this.area=void 0}FlushCache(){this.calculated=this.calculated_type=this.formatted=this.rendered_type=this.render_function=this.click_function=void 0,this.render_clean=[]}Reset(){this.type=0,this.value=this.spill=this.note=this.hyperlink=this.formatted=this.rendered_type=this.style=this.calculated=this.calculated_type=this.area=this.renderer_data=this.render_function=this.click_function=void 0,this.render_clean=[]}Set(e,t=se(e)){this.value=e,this.type=t,this.spill=this.formatted=this.rendered_type=this.style=this.calculated=this.calculated_type=this.render_function=this.click_function=this.area=void 0,this.render_clean=[]}SetCalculatedValue(e,t=se(e)){e===void 0&&(e=0,t=3),this.calculated!==e&&(this.calculated=e,this.calculated_type=t,this.formatted=this.rendered_type=void 0,this.render_clean=[])}GetValue(){return this.calculated_type?this.calculated:typeof this.value=="string"&&this.value[0]==="'"?this.value.slice(1):this.value}GetValue4(){return this.calculated_type?{type:this.calculated_type,value:this.calculated}:this.type===1?{type:3,value:0}:{type:this.type,value:typeof this.value=="string"&&this.value[0]==="'"?this.value.slice(1):this.value}}SetNote(e){this.note=e,this.render_clean=[]}SetCalculationError(e="ERR"){this.SetCalculatedValue(e,7)}SetArray(e){this.type=0,this.value=this.formatted=this.rendered_type=this.style=this.hyperlink=this.calculated=this.calculated_type=void 0,this.area=e,this.render_clean=[]}SetArrayHead(e,t){this.type=se(t),this.value=t,this.formatted=this.rendered_type=this.style=this.calculated=this.calculated_type=void 0,this.area=e,this.render_clean=[]}};var Li=f=>!f.cells,ut=f=>!!f[0]&&Li(f[0]),ft=f=>!!f[0]&&f[0].row!==void 0,Ui=dt.map((f,e)=>({[f]:e})).reduce((f,e)=>({...f,...e}),{}),De=class{data=[];rows_=0;columns_=0;get rows(){return this.rows_}get columns(){return this.columns_}EnsureRow(e){this.rows_=Math.max(e+1,this.rows_)}EnsureColumn(e){this.columns_=Math.max(e+1,this.columns_)}InsertColumns(e=0,t=1){this.data=this.data.map(i=>{if(i.length>=e){let r=i.slice(0,e),s=e+t,o=i.slice(e);for(let n=0;n<o.length;n++)r[s++]=o[n];return r}return i}),this.columns_+=t}DeleteColumns(e,t=1){this.data.forEach(i=>i.splice(e,t)),this.columns_-=t}DeleteRows(e,t=1){this.data.splice(e,t),this.rows_-=t}InsertRows(e=0,t=1){let i=[e,0,[]];for(let r=1;r<t;r++)i.push([]);Array.prototype.splice.apply(this.data,i),this.rows_+=t}GetCell(e,t){let{row:i,column:r}=e;if(!this.data[i])if(t)this.data[i]=[],this.rows_=Math.max(this.rows_,i+1);else return;return this.data[i][r]||t&&(this.data[i][r]=new $,this.columns_=Math.max(this.columns_,r+1)),this.data[i][r]}EnsureCell(e){let{row:t,column:i}=e,r=this.data[t];r||(this.data[t]=r=[],this.rows_=Math.max(this.rows_,t+1));let s=r[i];return s||(s=r[i]=new $,this.columns_=Math.max(this.columns_,i+1)),s}FromArray(e=[],t=!1){this.data=[];let i=0,r=0;if(t){r=e.length;for(let s=0;s<r;s++){let o=e[s];i=Math.max(i,o.length);for(let n=0;n<o.length;n++)this.data[n]||(this.data[n]=[]),this.data[n][s]=new $(o[n])}}else{i=e.length;for(let s=0;s<i;s++){let o=[],n=e[s];r=Math.max(r,n.length);for(let a=0;a<n.length;a++)o[a]=new $(n[a]);this.data[s]=o}}this.rows_=i,this.columns_=r}SerializedTypeToValueType(e){if(e)return typeof e=="number"?e:Ui[e]||void 0}ValueTypeToSerializedType(e){return e?dt[e]:void 0}FromJSON(e=[],t){if(this.data=[],!ut(e)){let r=[];if(ft(e))for(let s of e)for(let o of s.cells)r.push({...o,row:s.row});else for(let s of e)for(let o of s.cells)r.push({...o,column:s.column});e=r}let i=[];for(let r of e){this.data[r.row]||(this.data[r.row]=[]);let s=new $(r.value);if(typeof r.calculated<"u"&&(s.SetCalculatedValue(r.calculated,this.SerializedTypeToValueType(r.calculated_type)),r.spill&&(s.spill=new _(r.spill.start,r.spill.end))),t&&typeof r.style_ref<"u"&&(s.style=t[r.style_ref]),typeof r.note<"u"&&(s.note=r.note),typeof r.hyperlink<"u"&&(s.hyperlink=r.hyperlink),this.data[r.row][r.column]&&this.data[r.row][r.column].area&&(s.area=this.data[r.row][r.column].area),this.data[r.row][r.column]=s,r.area){let o=new _(r.area.start,r.area.end);for(let n=o.start.row;n<=o.end.row;n++)for(let a=o.start.column;a<=o.end.column;a++)this.data[n]||(this.data[n]=[]),this.data[n][a]||(this.data[n][a]=new $),this.data[n][a].area=o}if(r.table&&i.push({...r.table}),r.merge_area){let o=new _(r.merge_area.start,r.merge_area.end);for(let n=o.start.row;n<=o.end.row;n++)for(let a=o.start.column;a<=o.end.column;a++)this.data[n]||(this.data[n]=[]),this.data[n][a]||(this.data[n][a]=new $),this.data[n][a].merge_area=o}}for(let r of i)for(let s=r.area.start.row;s<=r.area.end.row;s++)for(let o=r.area.start.column;o<=r.area.end.column;o++)this.data[s]||(this.data[s]=[]),this.data[s][o]||(this.data[s][o]=new $),this.data[s][o].table=r;this.rows_=this.data.length,this.columns_=this.data.reduce((r,s)=>Math.max(r,s.length),0)}toJSON(e={}){let t=0,i=0,r=this.data.length-1,s;e.subset&&(t=e.subset.start.column,i=e.subset.start.row,r=e.subset.end.row);let o=[],n=-1,a=-1,l={},c={};for(let h=i;h<=r;h++)if(this.data[h]){let d=this.data[h];s=d.length-1,e.subset&&(s=e.subset.end.column);for(let u=t;u<=s;u++){let p=d[u],m=p&&p.merge_area&&p.merge_area.start.row===h&&p.merge_area.start.column===u,b=p&&p.area&&p.area.start.row===h&&p.area.start.column===u,y=p&&p.table&&p.table.area.start.row===h&&p.table.area.start.column===u,x=p?p.type===2&&!p.value:!0;if(p&&(!x||e.preserve_empty_strings)&&(m||p.type||p.calculated_type&&e.expand_arrays||p.calculated_type&&e.calculated_value||p.note||e.decorated_cells&&p.style&&(p.style.fill||p.style.border_bottom||p.style.border_top||p.style.border_left||p.style.border_right))){let k={row:h,column:u,value:p.value};p.note&&(k.note=p.note),p.hyperlink&&(k.hyperlink=p.hyperlink),e.preserve_type&&(k.type=this.ValueTypeToSerializedType(p.type)),e.sheet_id&&(k.sheet_id=e.sheet_id),e.calculated_value&&typeof p.calculated<"u"&&(k.calculated=p.calculated,p.spill&&(k.spill=p.spill.toJSON()),(e.preserve_type||p.calculated_type===7)&&(k.calculated_type=this.ValueTypeToSerializedType(p.calculated_type))),p.table&&y&&e.tables&&(k.table=JSON.parse(JSON.stringify(p.table))),p.area&&b&&(k.area=p.area.toJSON()),p.merge_area&&(k.merge_area=p.merge_area.toJSON()),e.cell_style_refs&&e.cell_style_refs[u]&&e.cell_style_refs[u][h]&&(k.style_ref=e.cell_style_refs[u][h],e.cell_style_refs[u][h]=0),l[h]=h,c[u]=u,n=Math.max(h,n),a=Math.max(u,a),o.push(k)}}}if(e.nested){let h=Object.keys(l),d=Object.keys(c);if(h.length<=d.length&&h.length){let u={},p=[];for(let m of o){let{row:b,...y}=m;u[m.row]||(u[m.row]=[]),u[m.row].push(y)}for(let m of h){let b=Number(m);p.push({row:b,cells:u[b]})}return{data:p,rows:n,columns:a+1}}else if(d.length){let u={},p=[];for(let m of o){let{column:b,...y}=m;u[m.column]||(u[m.column]=[]),u[m.column].push(y)}for(let m of d){let b=Number(m);p.push({column:b,cells:u[b]})}return{data:p,rows:n,columns:a+1}}}return{data:o,rows:n+1,columns:a+1}}GetAll(e=!1){return this.GetRange({row:0,column:0},{row:this.rows_-1,column:this.columns_-1},e)}Normalize(e,t){return e={...e,row:e.row==1/0?0:e.row,column:e.column==1/0?0:e.column},t&&(t={...t,row:t.row==1/0?this.rows_-1:t.row,column:t.column==1/0?this.columns_-1:t.column}),{from:e,to:t}}RawValue(e,t=e){if({from:e,to:t}=this.Normalize(e,t),e.row===t.row&&e.column===t.column)return this.data[e.row]&&this.data[e.row][e.column]?this.data[e.row][e.column].value:void 0;let i=[],r=this.data.slice(e.row,t.row+1),s=e.column,o=t.column+1;for(let n of r){let a=[];for(let l=s,c=0;l<o;l++,c++){let h=n[l];a.push(h?h.value:void 0)}i.push(a)}return i}GetRange(e,t,i=!1){if({from:e,to:t}=this.Normalize(e,t),!t||e===t||e.column===t.column&&e.row===t.row)return this.data[e.row]&&this.data[e.row][e.column]?this.data[e.row][e.column].GetValue():void 0;let r=[];if(i)for(let s=e.column;s<=t.column;s++){let o=[];for(let n=e.row;n<=t.row;n++)this.data[n]&&this.data[n][s]?o.push(this.data[n][s].GetValue()):o.push(void 0);r.push(o)}else for(let s=e.row;s<=t.row;s++){let o=[];for(let n=e.column;n<=t.column;n++)this.data[s]&&this.data[s][n]?o.push(this.data[s][n].GetValue()):o.push(void 0);r.push(o)}return r}GetRange4(e,t=e,i=!1){if({from:e,to:t}=this.Normalize(e,t),e.row===t.row&&e.column===t.column)return this.data[e.row]&&this.data[e.row][e.column]?this.data[e.row][e.column].GetValue4():{value:void 0,type:0};let r=[];if(i)for(let s=e.column;s<=t.column;s++){let o=[];for(let n=e.row;n<=t.row;n++)this.data[n]&&this.data[n][s]?o.push(this.data[n][s].GetValue4()):o.push({type:0});r.push(o)}else for(let s=e.row;s<=t.row;s++){let o=[];for(let n=e.column;n<=t.column;n++)this.data[s]&&this.data[s][n]?o.push(this.data[s][n].GetValue4()):o.push({type:0});r.push(o)}return{type:9,value:r}}SetArea(e,t){if(ArrayBuffer.isView(t))throw new Error("ABIV");if(Array.isArray(t))for(let i=e.start.row,r=0;i<=e.end.row;i++,r++){this.data[i]||(this.data[i]=[]);let s=this.data[i];if(t[r])for(let o=e.start.column,n=0;o<=e.end.column;o++,n++)s[o]||(s[o]=new $),s[o].Set(t[r][n])}else{let i=se(t);for(let r=e.start.row;r<=e.end.row;r++){this.data[r]||(this.data[r]=[]);let s=this.data[r];for(let o=e.start.column;o<=e.end.column;o++)s[o]||(s[o]=new $),s[o].Set(t,i)}}this.rows_=Math.max(this.rows_,e.end.row+1),this.columns_=Math.max(this.columns_,e.end.column+1)}*IterateRC(e,t=!1){if(!e&&t&&(e=new _({row:0,column:0},{row:this.rows_-1,column:this.columns-1})),e)if(t)for(let i=e.start.row;i<=e.end.row;i++){this.data[i]||(this.data[i]=[]);let r=this.data[i];for(let s=e.start.column;s<=e.end.column;s++)r[s]||(r[s]=new $),yield{cell:r[s],row:i,column:s}}else for(let i=e.start.row;i<=e.end.row;i++){let r=this.data[i];if(r)for(let s=e.start.column;s<=e.end.column;s++){let o=r[s];o&&(yield{cell:o,row:i,column:s})}}else for(let[i,r]of this.data.entries())if(r)for(let[s,o]of r.entries())o&&(yield{cell:o,row:i,column:s})}*Iterate(e,t=!1){if(!e&&t&&(e=new _({row:0,column:0},{row:this.rows_-1,column:this.columns-1})),e){L(e)&&(e=new _(e)),(e.entire_column||e.entire_row)&&(e=new _(e.start,e.end),e.start.column===1/0&&(e.start.column=0,e.end.column=this.columns_-1),e.start.row===1/0&&(e.start.row=0,e.end.row=this.rows_-1));let i=e.start,r=e.end;if(t)for(let s=i.row;s<=r.row;s++){this.data[s]||(this.data[s]=[]);let o=this.data[s];for(let n=i.column;n<=r.column;n++)o[n]||(o[n]=new $),yield o[n]}else for(let s=i.row;s<=r.row;s++)if(this.data[s]){let o=this.data[s];for(let n=i.column;n<=r.column;n++)o[n]&&(yield o[n])}}else for(let i of this.data)if(i)for(let r of i)r&&(yield r)}FlushCellStyles(){for(let e of this.data)if(e)for(let t of e)t&&t.FlushStyle()}FlushCachedValues(){for(let e of this.data)if(e)for(let t of e)t&&t.FlushCache()}};var Fi=JSON.stringify({}),zi={Background:0,Text:1,Background2:2,Text2:3,Accent:4,Accent2:5,Accent3:6,Accent4:7,Accent5:8,Accent6:9},pt=f=>typeof f.theme=="number"?f.theme:zi[f.theme]||0,H=f=>!!f&&typeof f.text=="string",Ie=f=>!!f&&typeof f.theme<"u",zt=f=>!!f&&(typeof f.text=="string"||typeof f.theme<"u"),D={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:f=>({top:{width:f.border_top||0,color:f.border_top_fill||{}},left:{width:f.border_left||0,color:f.border_left_fill||{}},right:{width:f.border_right||0,color:f.border_right_fill||{}},bottom:{width:f.border_bottom||0,color:f.border_bottom_fill||{}}}),Serialize:f=>{let e=JSON.parse(JSON.stringify(f));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:(f,e,t=!0)=>{let i=t?{...f,...e}:{...e};return JSON.parse(JSON.stringify(i))},Composite:f=>JSON.parse(JSON.stringify(f.reduce((e,t)=>({...e,...t}),{}))),Empty:f=>JSON.stringify(f)===Fi,ParseFontSize:(f="",e="em")=>{let t=f.match(/(-*[\d.]+)\s*(\S*)/);if(t){let i=Number(t[1]);if(!i||isNaN(i)||i<0)return{};let r=t[2].toLowerCase()||e;if(r==="pt"||r==="em"||r==="%"||r==="px")return{font_size:{unit:r,value:i}}}return{}},RelativeFontSize:(f,e)=>{let t=12,i=12;switch(f.font_size?.unit){case"pt":if(!f.font_size.value)return 1;i=f.font_size.value;break;case"px":if(!f.font_size.value)return 1;i=Math.round(f.font_size.value*300/4)/100;break;case"em":return f.font_size.value||1;case"%":return(f.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 i/t},FontSize:(f,e=!0)=>{let t=f.font_size?.value;switch(f.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:(f,e,t=1,i=!1)=>{let r={...f};return e.unit==="pt"||e.unit==="px"?r={...e}:(r.value=e.value*f.value,e.unit==="%"&&(r.value/=100)),r.unit==="px"&&i&&(r.value=Math.round((r.value||16)*300/4)/100),r.value*=t,r},CompositeFont:(f,e,t,i)=>{let r,s,o,n=[];e.bold&&n.push("bold"),e.italic&&n.push("italic");let a=e.font_face||"stack:default";if(a.startsWith("stack:")){let l=i.font_stacks[a.substring(6)||"default"];l||(l=i.font_stacks.default),l&&(s=e.font_size,o=D.CompositeFontSize(l.size,e.font_size||{unit:"pt",value:10},t),n.push(o.value.toFixed(2)+o.unit),n.push(l.font||""),r=l.variants)}else o=D.CompositeFontSize(f,e.font_size||{unit:"pt",value:10},t),n.push(o.value.toFixed(2)+o.unit),n.push(a||"");return{font:n.join(" "),variants:r,base:f,size:e.font_size,scale:t,stack_size:s,font_size:o}}};var M=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 r=self?.document?.location;if(r&&r.search&&/locale=([^?&]+?)(?:\?|$|&)/.test(r.search)){let s=r.search.match(/locale=(.*?)(?:\?|$|&)/);s&&(this.locale=s[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 i=new Date(2e3,0,2,12,0,0,0);this.UpdateDateComponent(0,0,i),i=new Date(2e3,1,7,12,0,0,0),this.UpdateDateComponent(1,1,i),i=new Date(2e3,2,7,12,0,0,0),this.UpdateDateComponent(2,2,i),i=new Date(2e3,3,5,12,0,0,0),this.UpdateDateComponent(3,3,i),i=new Date(2e3,4,4,12,0,0,0),this.UpdateDateComponent(4,4,i),i=new Date(2e3,5,2,12,0,0,0),this.UpdateDateComponent(5,5,i),i=new Date(2e3,6,1,12,0,0,0),this.UpdateDateComponent(6,6,i),i=new Date(2e3,7,1,12,0,0,0),this.UpdateDateComponent(7,-1,i),i=new Date(2e3,8,1,12,0,0,0),this.UpdateDateComponent(8,-1,i),i=new Date(2e3,9,1,12,0,0,0),this.UpdateDateComponent(9,-1,i),i=new Date(2e3,10,1,12,0,0,0),this.UpdateDateComponent(10,-1,i),i=new Date(2e3,11,1,12,0,0,0),this.UpdateDateComponent(11,-1,i)}static UpdateDateComponent(e,t,i){t>=0&&(this.date_components.short_days[t]=i.toLocaleString(this.locale,{weekday:"short"}),this.date_components.long_days[t]=i.toLocaleString(this.locale,{weekday:"long"})),e>=0&&(this.date_components.short_months[e]=i.toLocaleString(this.locale,{month:"short"}),this.date_components.long_months[e]=i.toLocaleString(this.locale,{month:"long"}))}};M.UpdateLocale();var U=class f{constructor(e=0,t=0,i=0,r=0){this.left=e;this.top=t;this.width=i;this.height=r}get right(){return this.left+this.width}get bottom(){return this.top+this.height}static Create(e){return new f(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 f(this.left+e,this.top+t,this.width,this.height)}Scale(e=1,t=e){return new f(this.left*e,this.top*t,this.width*e,this.height*t)}Expand(e=0,t=0){return new f(this.left,this.top,this.width+e,this.height+t)}Combine(e){return new f(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,i=0){return e>=this.left-i&&e<=this.left+this.width+i&&t>=this.top-i&&t<=this.top+this.height+i}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 Me=f=>!!f&&Array.isArray(f)&&Array.isArray(f[0]),Vr=(f,e)=>(typeof e>"u"&&(e=se(f)),{value:f,type:e}),Gr=f=>f.imaginary?{type:8,value:f}:{type:3,value:f.real};var N={Darken:(f,e,t,i,r=!1)=>{let{h:s,s:o,l:n}=N.RGBToHSL(f,e,t);return r?n-=n*i/100:n-=i/100,n=Math.max(0,Math.min(1,n)),N.HSLToRGB(s,o,n)},Lighten:(f,e,t,i,r=!1)=>{let{h:s,s:o,l:n}=N.RGBToHSL(f,e,t);return r?n+=n*i/100:n+=i/100,n=Math.max(0,Math.min(1,n)),N.HSLToRGB(s,o,n)},RGBToHSL:(f,e,t)=>{f/=255,e/=255,t/=255;let i=Math.max(f,e,t),r=Math.min(f,e,t),s=0,o=0,n=(i+r)/2;if(i===r)s=o=0;else{let a=i-r;switch(o=n>.5?a/(2-i-r):a/(i+r),i){case f:s=(e-t)/a+(e<t?6:0);break;case e:s=(t-f)/a+2;break;case t:s=(f-e)/a+4;break}s/=6}return{h:s*360,s:o,l:n}},HSLToRGB:(f,e,t)=>{let i,r,s;if(e===0)i=r=s=t;else{f=f/360;let o=t<.5?t*(1+e):t+e-t*e,n=2*t-o;i=N.HueToRGB(n,o,f+.3333333333333333),r=N.HueToRGB(n,o,f),s=N.HueToRGB(n,o,f-.3333333333333333)}return{r:Math.round(i*255),g:Math.round(r*255),b:Math.round(s*255)}},HueToRGB:(f,e,t)=>(t<0&&(t+=1),t>1&&(t-=1),t<.16666666666666666?f+(e-f)*6*t:t<.5?e:t<.6666666666666666?f+(e-f)*(.6666666666666666-t)*6:f),GetLuminance:([f,e,t])=>{let i=[f,e,t].map(r=>(r/=255,r<=.03928?r/12.92:Math.pow((r+.055)/1.055,2.4)));return .2126*i[0]+.7152*i[1]+.0722*i[2]},WeightedLuminance:([f,e,t],i=[1,1,1])=>{let r=[f,e,t].map(s=>(s/=255,s<=.03928?s/12.92:Math.pow((s+.055)/1.055,2.4)));return .2126*r[0]*i[0]+.7152*r[1]*i[1]+.0722*r[2]*i[2]},GetContrastRatio:f=>(f.sort((e,t)=>t-e),(f[0]+.05)/(f[1]+.05)),GetTextColor:(f,e,t)=>{let i=[.4,.3,.3],r=N.WeightedLuminance(f,i),s=N.WeightedLuminance(e,i),o=N.WeightedLuminance(t,i),n=N.GetContrastRatio([s,r]),a=N.GetContrastRatio([o,r]);return n>a?e:t}};var Ni="http://www.w3.org/2000/svg",z=class f{static instances=[];static GetInstance(e){for(let i of this.instances)if(i.doc===e)return i;let t=new f(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,i){return this.Create("div",e,t,i)}ClassNames(e,t){e.classList.add(...(Array.isArray(t)?t:[t]).reduce((i,r)=>[...i,...r.split(/\s+/g)],[]))}SVG(e,t,i){let r=this.doc.createElementNS(Ni,e);return t&&this.ClassNames(r,t),i&&i.appendChild(r),r}Text(e){return this.doc.createTextNode(e)}Fragment(){return this.doc.createDocumentFragment()}Create(e,t,i,r){let s=this.doc.createElement(e);if(t&&this.ClassNames(s,t),r){if(r.attrs)for(let[o,n]of Object.entries(r.attrs))s.setAttribute(o,n);if(r.data)for(let[o,n]of Object.entries(r.data))s.dataset[o]=n;if(r.text&&(s.textContent=r.text),r.html&&(s.innerHTML=r.html),r.events)for(let[o,n]of Object.entries(r.events))s.addEventListener(o,n);if(r.style)for(let[o,n]of Object.entries(r.style))s.style[o]=n}return i&&i.appendChild(s),s}};var Pi=1e3,X=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 i of t)for(let r of this.subscribers)r.subscriber(i)}))}Subscribe(e){let t=Pi++;return this.subscribers.push({subscriber:e,token:t}),t}Cancel(e){this.subscribers=this.subscribers.filter(t=>t.token!==e)}CancelAll(){this.subscribers=[]}};var W=class{static color_measurement_canvas;static text_measurement_node;static color_cache={};static MeasureColorARGB(e){let t=this.MeasureColor(e),i="FF";for(let r=0;r<3;r++){let s=t[r].toString(16);s.length===0?i+="00":s.length===1?i+=`0${s}`:i+=s}return i.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 i=this.color_measurement_canvas.getContext("2d",{willReadFrequently:!0});return i?(i.fillStyle="#fff",i.fillRect(0,0,1,1),i.fillStyle=e,i.fillRect(0,0,1,1),t=new Uint8ClampedArray(i.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,i=400){let r=`${t?"italic":""} ${i} 20pt ${e}`,s=this.MeasureText(`${r}, sans-serif`,"check font"),o=this.MeasureText(`${r}, serif`,"check font"),n=this.MeasureText(`${r}, monospace`,"check font");return s.width===o.width&&o.width===n.width}static MeasureText(e,t,i=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",i?this.text_measurement_node.style.transform=`rotate(${i}deg)`:this.text_measurement_node.style.transform="";let r=this.text_measurement_node.getBoundingClientRect();return{width:r.width,height:r.height}}};var mt,Nt=f=>{let e=new Map;for(let t=0;t<f.length;t++){let i=f[t];e.set(i,f.getPropertyValue(i))}return e},Oi=(f,e,t)=>{let i=new Map,r=Nt(e);for(let[o,n]of r.entries())n!==t.get(o)&&i.set(o,n);return(Array.from(i.entries()).map(([o,n])=>`${o}: ${n}`).join("; ")+"; "+(f.getAttribute("style")||"")).trim().replace(/"/g,"'")},Pt=(f,e)=>{let t=f.cloneNode(!1),i=getComputedStyle(f),r=Oi(f,i,e);t.removeAttribute("class"),t.setAttribute("style",r);let s;return Array.prototype.forEach.call(f.childNodes,o=>{switch(o.nodeType){case Node.ELEMENT_NODE:s||(s=Nt(i)),t.appendChild(Pt(o,s));break;case Node.TEXT_NODE:f.textContent&&t.appendChild(document.createTextNode(f.textContent));break;case Node.COMMENT_NODE:break;default:console.warn("unhandled node type in serialize",o)}}),t},Ot=f=>{if(!mt){let t=new Map,i=document.createElement("iframe");i.style.width="10px",i.style.height="10px",i.style.position="absolute",i.style.left="-100px",document.body.appendChild(i);let r=i.contentDocument;if(r){let s=r.createElement("div");r.body.appendChild(s);let o=getComputedStyle(s);Array.prototype.forEach.call(o,n=>t.set(n,o[n]))}document.body.removeChild(i),mt=t}let e=Pt(f,mt);return e instanceof Element&&e.tagName==="svg"&&(e.hasAttribute("version")||e.setAttribute("version","1.1"),e.hasAttribute("xmlns")||e.setAttribute("xmlns","http://www.w3.org/2000/svg"),e.hasAttribute("xmlns:xlink")||e.setAttribute("xmlns:xlink","http://www.w3.org/1999/xlink")),e};var Vi={data:!0,same_origin:!0,remote:!1},Vt=(f,e={})=>{let t={...Vi,...e};try{let i=new URL(f,document.location.href);return i.protocol==="data:"?t.data?i.href:void 0:i.origin===document.location.origin?t.same_origin?i.href:void 0:t.remote?i.hash:void 0}catch(i){console.error(i)}};var Kr=(f,e,t=6.5,i=!1,r=!1)=>{if(e===f)e++,f&&f--;else{let h=Math.round(e*1e5)/1e5;Math.abs(h-e)/(e-f)<1e-5&&(e=h)}let s=e-f,o=Math.log(s)/Math.log(10),n=Math.floor(Math.abs(o))*(o<0?-1:1)-1;r&&(n=Math.max(0,n));let a=r?[1,2,5,10,15,20,25,50,100]:[.1,.25,.5,1,2.5,5,10,25,50,100],l=-1,c=0;for(let h of a){let d=h*Math.pow(10,n),u=Math.floor(f/d)*d,m=(Math.ceil(e/d)*d-u)/d,b=Math.abs(m-t);(l<0||b<c)&&(!i||m<=t)&&(c=b,l=d)}return f=Math.floor(f/l)*l,e=Math.ceil(e/l)*l,t=Math.round((e-f)/l),{scale:n,step:l,count:t,min:f,max:e}};var ie=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 Gt=42,Ht=95,_t=63,Le=48,Bt=46,bt=44,$t=37,yt=34,ve=35,Jt=59,Ue=92,Wt=64,Gi=91,Hi=93,jt=69,qt=101,Bi=72,$i=104,Ji=77,Wi=109,ji=83,qi=115,Ki=68,Qi=100,Xi=89,Zi=121,Yi=65,er=97;var Fe=class{static date_pattern=!1;static pattern="";static char_index=0;static characters=[];static sections=[];static current_section=new ie;static preserve_formatting_characters=!1;static decimal_mark=Bt;static group_separator=bt;static Parse(e){if(this.pattern=e,this.characters=e.split("").map(t=>t.charCodeAt(0)),this.char_index=0,this.current_section=new ie,this.sections=[this.current_section],this.ParseDatePattern())return this.sections;for(this.char_index=0,this.current_section=new ie,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 Ue: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 yt: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 Ue:throw new Error("invalid escape character in formatting block");case Hi: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])/,i=this.pattern.substr(this.char_index).match(e);if(!i)return!1;let r=(i[1]||"").length+i[2].length+i[3].length+1;this.current_section.fraction_format=!0,this.current_section.fraction_integer=!!i[1];let s=Number(i[3]);return isNaN(s)||(this.current_section.fraction_denominator=s),this.current_section.decimal_max_digits=this.current_section.fraction_denominator_digits=i[3].length,this.char_index+=r,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 i=!1;for(let r=this.char_index+1;!i&&r<this.characters.length;r++){let s=this.characters[r];if(s===this.decimal_mark||s===ve||s===Le)i=!0;else if(s!==bt)break}if(i){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 ve:e===1?this.current_section.decimal_max_digits++:this.current_section.integer_min_digits&&this.current_section.integer_min_digits++;break;case Le: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===_t||e===ve)&&!this.current_section.has_number_format&&!this.current_section.string_format&&this.ScanFractionFormat()))switch(e){case Jt:this.char_index++,this.current_section=new ie,this.sections.length===3&&(this.current_section.string_format=!0),this.sections.push(this.current_section);break;case Wt:this.char_index++,this.AppendTextPart({text:"@",flag:5}),this.current_section.string_format=!0;break;case Le:case ve:case Bt:case bt:!this.current_section.has_number_format&&!this.current_section.string_format?(this.ConsumeNumberFormat(),this.current_section.has_number_format=!0):this.AppendCharAsText();break;case Gi:this.AppendTextPart({text:this.ConsumeFormatting(),flag:6});break;case yt:this.AppendString(this.ConsumeString());break;case _t:this.preserve_formatting_characters?this.AppendCharAsText():(this.AppendTextPart({text:"0",flag:1}),this.char_index++);break;case Ht: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 Gt: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 qt:case jt: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 $t:!this.current_section.exponential&&!this.current_section.string_format&&(this.current_section.percent=!0),this.AppendCharAsText();break;case Ue: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 i=t-1;i;i--){let r=this.sections[0].prefix[i];if(r.flag===3){/h/i.test(r.text)&&(e.flag=4,e.text=e.text.toLowerCase());break}}if(t<this.sections[0].prefix.length-1)for(let i=t+1;i<this.sections[0].prefix.length;i++){let r=this.sections[0].prefix[i];if(r.flag===3){/s/i.test(r.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(),i={text:e,flag:3};for(;this.pattern[this.char_index]&&this.pattern[this.char_index].toLowerCase()===t;)i.text+=this.pattern[this.char_index++];if(t==="s"&&this.pattern[this.char_index]===".")for(i.text+=this.pattern[this.char_index++];this.pattern[this.char_index]==="0";)i.text+=this.pattern[this.char_index++];return i}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 Jt:this.char_index=this.characters.length;break;case Le:case ve:case qt:case jt:case $t:case Wt:this.date_pattern=!1;break;case Bi:case $i:case Ji:case Wi:case ji:case qi:case Ki:case Qi:case Xi:case Zi:this.AppendTextPart(this.ConsumeDatePart());break;case Yi:case er:{let t=this.ConsumeAMPM();t?this.AppendTextPart(t):this.AppendCharAsText()}break;case yt:this.AppendString(this.ConsumeString());break;case _t:this.preserve_formatting_characters?this.AppendCharAsText():(this.AppendTextPart({text:"0",flag:1}),this.char_index++);break;case Ht: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 Gt: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 Ue: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 wt=f=>(f>=60&&f--,new Date(-22090752e5+864e5*f)),Kt=(f,e=!0)=>{if(e){let t=new Date(f);f=new Date(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()).getTime()}return f=(f+22090752e5)/864e5,f>=60&&f++,f},Z=class f{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=Fe.Parse(e),this.sections.length||(this.sections=[]),this.sections[0]||(this.sections[0]=new ie),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 i=-1,r=e.map((s,o)=>{switch(s.flag){case 2:return i=o,s.text;case 1:return s.text.replace(/./g," ");case 6:return"";default:return s.text}});if(i>=0&&t){let s=r.reduce((n,a,l)=>l===i?n:n+a.length,0),o="";for(let n=0;n<t-s;n++)o+=r[i];r[i]=o}return r.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="",i=0;if(e.fraction_format){e.fraction_integer&&(t+="? ");let r="";for(let s=0;s<e.fraction_denominator_digits;s++)r+="#";t+=r,t+="/",e.fraction_denominator?t+=e.fraction_denominator:t+=r}else if(e.has_number_format){for(i=0;i<e.integer_min_digits;i++)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+=".",i=0;i<e.decimal_min_digits;i++)t+="0";for(;i<e.decimal_max_digits;i++)t+="#"}if(e.scaling){let r=Math.log10(e.scaling)/3;for(i=0;i<r;i++)t+=","}e.exponential&&(t+="e")}return e.prefix.map(r=>r.flag===1?r.text==="0"?"?":"_"+r.text:r.flag===2?"*"+r.text:r.flag===6?"["+r.text+"]":r.text).join("")+t+e.suffix.map(r=>r.flag===1?r.text==="0"?"?":"_"+r.text:r.flag===2?"*"+r.text:r.text).join("")}).join(";")}FormatDimensionedQuantity(e){if(this.transform_value){let i=this.transform_value(e);if(ht(i))e=i;else return typeof i=="string"?i:this.FormatParts(i)}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=[],i=[],r=!1,s=!!e.imaginary;s&&(t=this.FormatParts(e.imaginary),s=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="",r=!0):t.length===1&&this.sections[1].integer_min_digits<=1&&t[0].text==="-1"&&(t[0].text="-",r=!0));let o=!!e.real;o&&(i=this.FormatParts(e.real),o=i.some(a=>/[1-9]/.test(a.text)));let n=[];if(o||!o&&!s){if(n.push(...i),s){n.push({text:e.imaginary<0?` ${f.minus_character} `:" + "});let a=r?[]:this.FormatParts(Math.abs(e.imaginary));n.push(...a,{text:f.imaginary_character})}}else s&&n.push(...t,{text:f.imaginary_character});return n}FormatParts(e){if(typeof e!="number"&&!this.sections[3])return[{text:(e??"").toString()}];let{parts:t,section:i}=this.BaseFormat(e),r=[];if(i.date_format||i.string_format)for(let s of t)typeof s=="string"?r.push({text:s}):r.push(s);else this.magic_decimal&&t[1]===""&&t.splice(1,1),r=[...i.prefix.map(s=>({...s})),{text:i.has_number_format?t.join(M.decimal_separator):""},...i.suffix.map(s=>({...s}))];for(let s=1;s<r.length;s++)r[s].flag===r[s-1].flag&&(r[s].text=r[s-1].text+r[s].text,r[s-1].text="");return r.filter(s=>s.text)}Format(e,t=0){return f.FormatPartsAsText(this.FormatParts(e),t)}ZeroPad(e,t){for(;e.length<t;)e="0"+e;return e}DateFormat(e){let t=wt(e),i=this.sections[0],r=t.getUTCHours();return i.twelve_hour&&(r>12&&(r-=12),r===0&&(r=12)),{parts:i.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:M.date_components.long_months[t.getUTCMonth()][0]};case"mmmm":return o.text==="MMMM"?{text:M.date_components.long_months[t.getUTCMonth()].toUpperCase()}:{text:M.date_components.long_months[t.getUTCMonth()]};case"mmm":return o.text==="MMM"?{text:M.date_components.short_months[t.getUTCMonth()].toUpperCase()}:{text:M.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:M.date_components.long_days[t.getUTCDay()].toUpperCase()}:{text:M.date_components.long_days[t.getUTCDay()]};case"ddd":return o.text==="DDD"?{text:M.date_components.short_days[t.getUTCDay()].toUpperCase()}:{text:M.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(r.toString(),2)};case"h":return{text:this.ZeroPad(r.toString(),1)};case"ss":return{text:this.ZeroPad(t.getUTCSeconds().toString(),2)};case"s":return{text:this.ZeroPad(t.getUTCSeconds().toString(),1)}}let n=o.text.match(/^(s+)\.(0+)$/);if(n)return{text:this.ZeroPad(t.getUTCSeconds().toString(),n[1].length)+M.decimal_separator+(t.getUTCMilliseconds()/1e3).toFixed(n[2].length).substr(2)}}return{...o}}),section:i}}StringFormat(e,t){let i=[];for(let r of t.prefix)r.flag===5?i.push({text:e}):i.push({...r});return{parts:i,section:t}}Round2(e,t){let i=Math.pow(10,t);return Math.round(i*e)/i}FormatFraction(e,t){t.percent&&(e*=100);let i={denominator:1,numerator:Math.round(e),error:Math.abs(Math.round(e)-e)};if(t.fraction_denominator)i.denominator=t.fraction_denominator,i.numerator=Math.round(e*i.denominator);else if(i.error){let s=f.fraction_limits[t.fraction_denominator_digits-1]||f.fraction_limits[0];for(let o=2;o<=s;o++){let n=Math.round(e*o),a=Math.abs(n/o-e);if(a<i.error&&(i={numerator:n,denominator:o,error:a},!a))break}}let r=[];if(t.fraction_integer){let s=Math.floor(i.numerator/i.denominator);i.numerator%=i.denominator,(s||!i.numerator)&&(r.push(s.toString()),i.numerator&&r.push(" "))}else i.numerator||r.push("0");return i.numerator&&(r.push(i.numerator.toString()),r.push("/"),r.push(i.denominator.toString())),r.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],i=this.decimal_zero_regexp[0];e<0&&(t=this.sections[1]);let r=t.percent?t.decimal_max_digits+2:t.decimal_max_digits,s=Math.pow(10,-r)/2,o=Math.abs(e);if(o<s&&(t=this.sections[2],i=this.decimal_zero_regexp[2]),t.scaling&&(o/=t.scaling,o<s&&(t=this.sections[2],i=this.decimal_zero_regexp[2])),t.string_format)return this.StringFormat(e.toString(),t);let n="";if(t.fraction_format)return{parts:[this.FormatFraction(o,t)],section:t};t.exponential?n=o.toExponential(t.decimal_max_digits):(t.percent&&(o*=100),n=this.Round2(o,t.decimal_max_digits).toFixed(t.decimal_max_digits)),i&&(n=n.replace(i,""));let a=n.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(f.grouping_regexp,"$&"+M.grouping_separator)),{parts:a,section:t}}};var P=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 i=this.symbolc_name_map[e.toLowerCase()],r=this.cache[i||e];return r||(r=new Z(e),this.cache[e]=r),r}static Equals(e,t){if(e===t)return!0;let i=this.Get(e),r=this.Get(t);return i.pattern===r.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 Z(this.base_formats[e]),this.symbolc_name_map[e.toLowerCase()]=e;this.cache.General.magic_decimal=!0,this.complex_general=new Z("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}};P.InitCache();var Qt=new Date().getUTCFullYear(),vt=class{compare_day;compare_month;TestDate(e){let t=Date.parse(e);if(isNaN(t))return!1;let i=new Date(t),s=e.replace(/[\d\-\\/,.\s]+/g," ").toLocaleLowerCase().split(/\s+/).map(a=>a.trim()).filter(a=>!!a);if(!s.length)return t;if(!this.compare_month){this.compare_month={};for(let a=0;a<12;a++)this.compare_month[M.date_components.long_months[a].toLocaleLowerCase().replace(/\./,"")]=a,this.compare_month[M.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[M.date_components.long_days[a].toLocaleLowerCase().replace(/\./,"")]=a,this.compare_day[M.date_components.short_days[a].toLocaleLowerCase().replace(/\./,"")]=a}let o=!1,n=!1;for(let a of s){let l=!1;for(let[c,h]of Object.entries(this.compare_month))if(a===c){if(o||i.getUTCMonth()!==h)return!1;l=!0,o=!0}if(!l){for(let[c,h]of Object.entries(this.compare_day))if(a===c){if(n||i.getUTCDay()!==h)return!1;l=!0,n=!0}}if(!l)return!1}return n&&!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 i=e.trim(),r=i.match(/^[$](.*?)$/);r&&(i=r[1],t.Currency=!0);let s=i.match(/^\((.*?)\)$/);s&&(i=s[1],t.Parens=!0);let o=i.match(/^(.*?)%\s*$/);o&&(i=o[1],t.Percent=!0),M.decimal_separator==="."?/,/.test(i)&&(i=i.replace(/,/g,""),t.Grouping=!0):(i=i.replace(/(\d)\s+/g,"$1"),i=i.replace(/\./g,""),i=i.replace(/,/,"."));let n=Number(i);if(n===null||isNaN(n)){let a=e.toLowerCase();if(a==="false")return{value:!1,type:4};if(a==="true")return{value:!0,type:4};let l=this.TestDate(e);if(l!==!1&&!isNaN(l)){let c=new Date(l),h=c.getUTCFullYear();if(h>=Qt-200&&h<=Qt+200)return t={Date:!0},(c.getHours()||c.getMinutes()||c.getSeconds())&&(t.Time=!0),{value:Kt(l,!0),type:3,hints:t}}return{value:e,type:2}}if(s&&(n=-n),o){let a=n<0?-1:1,l=(a*n).toString().split(".");l[0]=("00"+l[0]).replace(/(\d\d)$/,".$1"),n=Number(l.join(""))*a}return/e/.test(e)&&(t.Exponential=!0),{value:n,type:3,hints:t}}},le=new vt;var ze=class{constructor(e,t,i={x:0,y:0},r){this.theme=t;this.offset=i;let s=z.GetInstance(r.ownerDocument);this.g=s.SVG("g"),this.g.setAttribute("transform",`translate(${i.x}, ${i.y})`),this.outline=s.SVG("rect","treb-selection-outline"),e?(this.g.setAttribute("class","selection primary-selection"),this.fill=s.SVG("path","treb-selection-fill"),this.nub=s.SVG("rect","treb-selection-nub"),this.g.appendChild(this.fill),this.g.appendChild(this.outline),this.g.appendChild(this.nub)):(this.g.setAttribute("class","selection alternate-selection"),this.fill=s.SVG("rect","treb-selection-fill"),this.g.appendChild(this.fill),this.g.appendChild(this.outline))}g;outline;fill;nub;Offset(e){this.g.setAttribute("transform",`translate(${e.x}, ${e.y})`)}Show(e=!0){this.g.style.display=e?"block":"none"}SetOutline(e,t=!1){this.outline.setAttribute("x",(e.left-1).toString()),this.outline.setAttribute("y",(e.top-1).toString()),this.outline.setAttribute("width",(e.width+1).toString()),this.outline.setAttribute("height",(e.height+1).toString()),t&&this.fill&&(this.fill.setAttribute("x",e.left.toString()),this.fill.setAttribute("y",e.top.toString()),this.fill.setAttribute("width",e.width.toString()),this.fill.setAttribute("height",e.height.toString()))}SetFill(e,t){if(!this.fill)return;let i=[];i.push("M"+e.left+" "+e.top),i.push("L"+e.left+" "+e.bottom),i.push("L"+e.right+" "+e.bottom),i.push("L"+e.right+" "+e.top),i.push("Z"),i.push("M"+t.left+" "+t.top),i.push("L"+t.right+" "+t.top),i.push("L"+t.right+" "+t.bottom),i.push("L"+t.left+" "+t.bottom),i.push("Z"),this.fill.setAttribute("d",i.join(" "))}SetNub(e){this.nub&&(this.nub.setAttribute("x",(e.left+e.width-4).toString()),this.nub.setAttribute("y",(e.top+e.height-4).toString()),this.nub.setAttribute("width","7"),this.nub.setAttribute("height","7"))}};var ce=class{constructor(e,t,i){this.theme=e;this.container=t;this.orientation=i;let r=z.GetInstance(t.ownerDocument);this.g=r.SVG("g","treb-header-overlay"),this.overlay=r.SVG("rect","treb-overlay"),this.highlight=r.SVG("rect","treb-highlight"),this.g.style.display="none",this.g.appendChild(this.highlight),this.g.appendChild(this.overlay),t.appendChild(this.g)}g;overlay;highlight;Remove(){this.container.removeChild(this.g)}Hide(){this.g.style.display="none"}Show(e,t,i,r){this.overlay.setAttribute("x",e.toString()),this.overlay.setAttribute("y",t.toString()),this.overlay.setAttribute("width",i.toString()),this.overlay.setAttribute("height",r.toString()),this.orientation===0?(this.highlight.setAttribute("x",e.toString()),this.highlight.setAttribute("y",(t+r-2).toString()),this.highlight.setAttribute("width",i.toString()),this.highlight.setAttribute("height","2")):(this.highlight.setAttribute("x",(e+i-2).toString()),this.highlight.setAttribute("y",t.toString()),this.highlight.setAttribute("width","2"),this.highlight.setAttribute("height",r.toString())),this.g.style.display="block"}};var Ne=class{constructor(e,t,i,r,s,o){this.theme=e;this.layout=t;this.model=i;this.view=r;this.primary_selection=s;this.additional_selections=o}nub_rectangle=new U(-1,-1,0,0);cached_additional_selections="";grid_selections=[];row_header_selections=[];column_header_selections=[];corner_selections=[];row_overlay;column_overlay;corner_row_overlay;corner_column_overlay;Initialize(){this.row_overlay=new ce(this.theme,this.layout.row_header_selection,0),this.column_overlay=new ce(this.theme,this.layout.column_header_selection,1),this.corner_row_overlay=new ce(this.theme,this.layout.corner_selection,0),this.corner_column_overlay=new ce(this.theme,this.layout.corner_selection,1)}RenderSelections(e=!0,t=!0){let i=this.primary_selection.empty;e||(this.primary_selection.empty=!0);let r=[this.primary_selection].concat(this.additional_selections);this.RenderSelectionGroup(r,this.layout.grid_selection,void 0,void 0,this.grid_selections,void 0,t);let s=new U(-1,-1,0,0);if(!this.primary_selection.empty){let a=this.view.active_sheet.RealArea(this.primary_selection.area);s=this.layout.CellAddressToRectangle(a.start).Combine(this.layout.CellAddressToRectangle(a.end))}if(!this.primary_selection.empty&&this.layout.header_offset.y>2?(this.row_overlay.Show(s.left,0,s.width,this.layout.header_offset.y),this.corner_row_overlay.Show(s.left+this.layout.header_offset.x,0,s.width,this.layout.header_offset.y)):(this.row_overlay.Hide(),this.corner_row_overlay.Hide()),!this.primary_selection.empty&&this.layout.header_offset.x>2?(this.column_overlay.Show(0,s.top,this.layout.header_offset.x,s.height),this.corner_column_overlay.Show(0,s.top+this.layout.header_offset.y,this.layout.header_offset.x,s.height)):(this.column_overlay.Hide(),this.corner_column_overlay.Hide()),!this.view.active_sheet.freeze.columns&&!this.view.active_sheet.freeze.rows){this.primary_selection.empty=i;return}let o=[],n=[];if(this.primary_selection.empty)o.push(!1),n.push(!1);else{let a=this.primary_selection.area.start;o.push(a.row<=this.view.active_sheet.freeze.rows||a.row===1/0),n.push(a.column<=this.view.active_sheet.freeze.columns||a.column===1/0)}for(let{area:a}of this.additional_selections)o.push(a.start.row<=this.view.active_sheet.freeze.rows||a.start.row===1/0),n.push(a.start.column<=this.view.active_sheet.freeze.columns||a.start.column===1/0);this.view.active_sheet.freeze.rows&&this.RenderSelectionGroup(r,this.layout.row_header_selection,o,void 0,this.row_header_selections,{x:0,y:this.layout.header_offset.y}),this.view.active_sheet.freeze.columns&&this.RenderSelectionGroup(r,this.layout.column_header_selection,n,void 0,this.column_header_selections,{x:this.layout.header_offset.x,y:0}),this.view.active_sheet.freeze.rows&&this.view.active_sheet.freeze.columns&&this.RenderSelectionGroup(r,this.layout.corner_selection,n,o,this.corner_selections,{...this.layout.header_offset}),this.primary_selection.empty=i}RenderSelectionGroup(e,t,i,r,s,o,n=!0){for(let a=0;a<e.length;a++)if((!e[a].area.start.sheet_id||e[a].area.start.sheet_id===this.view.active_sheet.id)&&!e[a].empty&&(!i||i[a])&&(!r||r[a])){if(n||!e[a].rendered){let c=this.EnsureGridSelectionBlock(t,s,a,o);this.RenderSVGSelection(e[a],c,a)}}else s[a]&&s[a].Show(!1);for(let a=e.length;a<s.length;a++)s[a]&&s[a].Show(!1)}EnsureGridSelectionBlock(e,t,i,r){let s=t[i];if(!s)if(s=new ze(!i,this.theme,void 0,e),t[i]=s,i){let o=e.querySelector(".alternate-selections");o||(o=this.layout.DOM.SVG("g","alternate-selections"),e.appendChild(o)),o?.appendChild(s.g)}else e.appendChild(s.g);return r&&s.Offset(r),s}ClampEnd(e){return{row:Math.min(e.row,this.view.active_sheet.rows-1),column:Math.min(e.column,this.view.active_sheet.columns-1)}}RenderSVGSelection(e,t,i=0){let r=this.view.active_sheet.RealArea(e.area,!0),s=this.layout.CellAddressToRectangle(r.start);if(r.count>1)s=s.Combine(this.layout.CellAddressToRectangle(r.end));else if(i){let o=this.view.active_sheet.CellData(e.target);o.merge_area&&(s=this.layout.CellAddressToRectangle(o.merge_area.start),s=s.Combine(this.layout.CellAddressToRectangle(o.merge_area.end)))}if(i||(this.nub_rectangle=new U(s.left+s.width-6,s.top+s.height-6,11,11)),s.top===0&&this.layout.header_offset.y<=1&&(s.top=1,s.height-=1),s.left===0&&this.layout.header_offset.x<=1&&(s.left=1,s.width-=1),s.height<=0||s.height<=0){t.Show(!1);return}if(t.SetOutline(s,!!i),i)e.rendered=!0;else{let o=this.layout.CellAddressToRectangle(e.target),n=this.view.active_sheet.CellData(e.target);n.merge_area&&(o=this.layout.CellAddressToRectangle(n.merge_area.start),o=o.Combine(this.layout.CellAddressToRectangle(n.merge_area.end))),t.SetFill(o,s),t.SetNub(s)}t.Show()}};function Y(f,e=[],t,i){typeof e=="string"&&(e=[e]);let r,s=n=>{n.stopPropagation(),n.preventDefault(),r(),i&&i(n)},o=n=>{if(n.stopPropagation(),n.preventDefault(),!n.buttons){r(),i&&i(n);return}t&&t(n)};r=()=>{f.style.display="none",f.removeEventListener("mousemove",o),f.removeEventListener("mouseup",s);for(let n of e)f.classList.remove(n)};for(let n of e)f.classList.add(n);f.style.display="block",t&&f.addEventListener("mousemove",o),i&&f.addEventListener("mouseup",s)}var Pe=class extends X{constructor(t){super();this.container=t;this.format=P.Get("0.0");let i=z.GetInstance(t.ownerDocument);this.input=i.Create("input","treb-scale-input",t,{events:{keypress:s=>{switch(s.key){case"ArrowUp":case"ArrowDown":s.stopPropagation(),s.preventDefault(),console.info("mark?");break}},keydown:s=>{switch(s.key){case"Enter":this.input.blur();break;case"ArrowUp":this.Tick(-1);break;case"ArrowDown":this.Tick(1);break;case"Escape":this.input.value=this.format.Format(this.scale)+"%",this.input.blur();break;default:return}s.stopPropagation(),s.preventDefault()},focusin:()=>this.input.select(),change:()=>{let s=this.input.value;s=s.replace(/%/g,"");let o=le.TryParse(s);o.type===3?this.UpdateScale(Number(o.value),!0):this.input.value=this.format.Format(this.scale)+"%"}}});let r=i.Div("treb-slider-container",t);this.slider=i.Create("input",void 0,r,{attrs:{type:"range",min:"50",max:"200",value:"100",step:"2.5"},events:{input:()=>this.UpdateScale(Number(this.slider.value),!0)}}),t.addEventListener("wheel",s=>{s.stopPropagation(),s.preventDefault(),this.Tick(s.deltaY)},{passive:!1})}input;slider;scale=0;format;timeout=0;Tick(t){let i=Math.round(this.scale/2.5)*2.5;t>0?this.UpdateScale(i-2.5,!0,!0):t<0&&this.UpdateScale(i+2.5,!0,!0)}UpdateScale(t,i=!1,r=!1){t=Math.max(50,Math.min(200,t)),t!==this.scale&&(this.scale=t,this.input.value=this.format.Format(t)+"%",this.slider.value=t.toFixed(1),i&&(this.timeout||(this.timeout=requestAnimationFrame(()=>{this.timeout=0,this.Publish({type:"scale",value:this.scale/100,keep_focus:r})}))))}};var Oe=class extends X{constructor(t,i,r,s,o,n){super();this.layout=t;this.model=i;this.view=r;this.options=s;this.theme=o;if(this.DOM=z.GetInstance(n.ownerDocument),this.container=n.querySelector(".treb-spreadsheet-footer"),!this.container)throw new Error("missing container for tab bar");if(s.tab_bar!=="auto"&&this.container.removeAttribute("hidden"),this.tab_container=this.container.querySelector(".treb-spreadsheet-tabs"),this.container.addEventListener("click",a=>{let l=a.target?.dataset.command;if(l)switch(a.stopPropagation(),a.preventDefault(),l){case"add-tab":this.Publish({type:"add-sheet"});break;case"delete-tab":this.Publish({type:"delete-sheet"});break;default:console.info("unhandled command",l)}}),this.options.stats&&(this.stats_panel=this.container.querySelector(".treb-stats-panel")),this.options.scale_control){let a=this.container.querySelector(".treb-scale-control");this.scale_control=new Pe(a),this.scale_control.Subscribe(l=>{this.Publish(l)}),this.UpdateScale(this.options.initial_scale||1)}}tab_container;scale_control;stats_panel;dragging=!1;double_click_data={};tab_color_cache=new Map;_visible=!1;get visible(){return this._visible}set stats_data(t){if(this.stats_panel){this.stats_panel.innerText="";for(let i of t)this.DOM.Create("span","treb-stats-label",this.stats_panel,{text:i.label}),this.DOM.Create("span","treb-stats-value",this.stats_panel,{text:i.value})}}container;DOM;IsDoubleClick(t,i=300){return this.double_click_data.index===t?(clearTimeout(this.double_click_data.timeout),this.double_click_data.index=void 0,this.double_click_data.timeout=void 0,!0):(this.double_click_data.timeout&&clearTimeout(this.double_click_data.timeout),this.double_click_data.index=t,this.double_click_data.timeout=window.setTimeout(()=>{this.double_click_data.index=void 0,this.double_click_data.timeout=void 0},i),!1)}Hide(){this.Show(!1)}Show(t=!0){this.container&&(this._visible=t,t?this.container.removeAttribute("hidden"):this.container.setAttribute("hidden",""))}SetActive(t,i,r=!1){i?(t.setAttribute("selected",""),t.dataset.background_color&&(t.style.backgroundColor=`color-mix(in srgb, ${t.dataset.background_color} 20%, var(--treb-tab-bar-active-tab-background, #fff))`,t.style.color=""),requestAnimationFrame(()=>{if(r)t.scrollIntoView({behavior:"smooth",block:"nearest",inline:"nearest"});else if(t.parentElement){let s=t.offsetLeft,o=t.offsetWidth,n=t.parentElement.clientWidth||0,a=t.parentElement.scrollLeft||0;s>n?t.parentElement.scrollLeft=s-o:a>s&&(t.parentElement.scrollLeft=s)}})):(t.removeAttribute("selected"),t.dataset.background_color&&(t.style.backgroundColor=t.dataset.background_color),t.dataset.foreground_color&&(t.style.color=t.dataset.foreground_color))}UpdateScale(t){this.scale_control?.UpdateScale(t*100)}DoubleClickTab(t,i,r){if(i.contentEditable="true",this.DOM.doc){let s=this.DOM.GetSelection();if(s){s.removeAllRanges();let o=this.DOM.doc.createRange();o.selectNodeContents(i),s.addRange(o)}}i.addEventListener("keydown",s=>{switch(s.key){case"Enter":this.Publish({type:"rename-sheet",name:i.innerText.trim(),sheet:r});break;case"Escape":i.innerText=r.name,this.Publish({type:"cancel"}),this.Update(!0);break;default:return}s.stopPropagation(),s.preventDefault()}),i.addEventListener("focusout",()=>{let s=i.innerText.trim();s!==r.name?this.Publish({type:"rename-sheet",name:s,sheet:r}):this.Update(!0)}),i.focus()}MouseDownTab(t,i,r,s,o){if(t.stopPropagation(),t.preventDefault(),this.IsDoubleClick(s))return;this.Publish({type:"activate-sheet",sheet:r});let n=o.map(m=>m.getBoundingClientRect()),a=s*2-1,l=n[0].left,c=n[n.length-1].right,h=n[0].top,d=n[0].bottom,u=-1,p=(n.length-1)*2+1;for(let m of o)this.SetActive(m,m===i,!0);this.dragging=!0,Y(this.layout.mask,[],m=>{let[b,y]=[m.clientX,m.clientY];if(y>h&&y<d){let x=a;if(b<l)x=u;else if(b>c)x=p;else for(let k=0;k<n.length;k++){let g=n[k];if(b>=g.left&&b<=g.right){k!==s&&(b>=g.left+g.width/2?x=k*2+1:x=k*2-1);break}}x!==a&&(a=x,i.style.order=a.toString(),n=o.map(k=>k.getBoundingClientRect()))}},()=>{let m=s,b=(a+1)/2;this.dragging=!1;for(let y=0;y<this.model.sheets.length;y++)this.model.sheets.list[y].visible||(m>=y&&m++,b>=y&&b++);m===b||m===0&&b<=0||m===o.length-1&&b>=o.length-1||this.Publish({type:"reorder-sheet",index:m,move_before:b})})}UpdateTheme(){this.tab_color_cache.clear(),this.Update()}Update(t=!1){if(this.tab_color_cache.clear(),this.dragging)return;if(this.options.tab_bar==="auto"){if(this.model.sheets.list.reduce((s,o)=>o.visible?s+1:s,0)<=1){this.Show(!1);return}this.Show(!0)}if(!this.tab_container)return;this.tab_container.innerText="";let i=[];for(let r of this.model.sheets.list){if(!r.visible)continue;let s=i.length,o=this.DOM.Create("li");if(o.setAttribute("tabindex","0"),r.tab_color){let l=r.id;if(!this.tab_color_cache.has(l)){let h=T(this.theme,r.tab_color),d=T(this.theme,{offset:r.tab_color});h&&d&&this.tab_color_cache.set(l,{background:h,foreground:d})}let c=this.tab_color_cache.get(l);c&&(o.style.backgroundColor=c.background,o.style.color=c.foreground,o.dataset.background_color=c.background,o.dataset.foreground_color=c.foreground)}o.style.order=(s*2).toString(),o.role="tab",this.SetActive(o,r===this.view.active_sheet,t);let n=l=>this.MouseDownTab(l,o,r,s,i),a=l=>{o.removeEventListener("mousedown",n),o.removeEventListener("dblclick",a),this.DoubleClickTab(l,o,r)};o.textContent=r.name,o.addEventListener("dblclick",a),o.addEventListener("mousedown",n),this.tab_container.appendChild(o),i.push(o)}}};var fe=class{constructor(e,t,i=!1,r=z.GetInstance()){this.model=e;this.view=t;this.DOM=r;if(i)return;if(!r)throw new Error("missing DOM context");this.dpr=Math.max(1,self.devicePixelRatio||1),this.mask=r.Div("treb-mouse-mask"),this.tooltip=r.Div("treb-tooltip"),this.spill_border=r.SVG("svg","treb-spill-border"),this.spill_border.tabIndex=-1,this.dropdown_caret=r.SVG("svg","treb-dropdown-caret"),this.dropdown_caret.setAttribute("viewBox","0 0 24 24"),this.dropdown_caret.tabIndex=-1;let s=r.SVG("path");s.setAttribute("d","M5,7 L12,17 L19,7"),this.dropdown_caret.appendChild(s),this.dropdown_caret.addEventListener("click",o=>{o.stopPropagation(),o.preventDefault(),this.grid_cover.classList.remove("nub-select");let n=this.dropdown_caret.getAttribute("class")||"";/active/i.test(n)?this.dropdown_caret.setAttribute("class","treb-dropdown-caret"):(this.dropdown_caret.setAttribute("class","treb-dropdown-caret active"),this.dropdown_list.focus())}),this.dropdown_list=r.Div("treb-dropdown-list",void 0,{attrs:{tabindex:"-1"}}),this.dropdown_list.addEventListener("keydown",o=>{let n=0;switch(o.key){case"ArrowDown":n=1;break;case"ArrowUp":n=-1;break;case"Escape":break;case"Enter":break;default:console.info(o.key);return}if(o.stopPropagation(),o.preventDefault(),o.key==="Escape"||o.key==="Enter"){if(this.container?.focus(),this.dropdown_caret.setAttribute("class","treb-dropdown-caret"),o.key==="Enter"&&this.dropdown_callback&&this.dropdown_selected){let a=this.dropdown_selected.dataset.dropdown_value;this.dropdown_callback.call(0,a?JSON.parse(a):void 0)}}else if(n&&this.dropdown_selected)if(n>0&&this.dropdown_selected.nextSibling){this.dropdown_selected.nextSibling.classList.add("selected"),this.dropdown_selected.classList.remove("selected"),this.dropdown_selected=this.dropdown_selected.nextSibling;let a=this.dropdown_selected.offsetTop+this.dropdown_selected.offsetHeight;a>this.dropdown_list.offsetHeight+this.dropdown_list.scrollTop&&(this.dropdown_list.scrollTop=a-this.dropdown_list.offsetHeight)}else n<0&&this.dropdown_selected.previousSibling&&(this.dropdown_selected.previousSibling.classList.add("selected"),this.dropdown_selected.classList.remove("selected"),this.dropdown_selected=this.dropdown_selected.previousSibling,this.dropdown_selected.offsetTop<this.dropdown_list.scrollTop&&(this.dropdown_list.scrollTop=this.dropdown_selected.offsetTop))}),this.dropdown_list.addEventListener("mousedown",o=>{let n=o.target;if(o.target!==this.dropdown_list&&(o.stopPropagation(),o.preventDefault(),this.container?.focus(),this.dropdown_caret.setAttribute("class","treb-dropdown-caret"),this.dropdown_callback)){let a=n.dataset.dropdown_value;this.dropdown_callback.call(0,a?JSON.parse(a):void 0)}}),this.dropdown_list.addEventListener("mousemove",o=>{let n=o.target;n!==this.dropdown_selected&&(this.grid_cover.classList.remove("nub-select"),this.dropdown_selected&&this.dropdown_selected.classList.remove("selected"),n.classList.add("selected"),this.dropdown_selected=n)}),this.mock_selection=r.Div("mock-selection-node",void 0,{html:"&nbsp;"}),this.note_node=r.Div("treb-note"),this.title_node=r.Div("treb-hover-title"),this.sort_button=r.Create("button","treb-sort-button",void 0,{attrs:{title:"Sort table",tabindex:"-1"}}),this.HideNote()}column_header;row_header;contents;buffer_canvas;corner;corner_canvas;grid_selection;grid_cover;column_header_cover;row_header_cover;annotation_container;mask;mock_selection;container;grid_tiles=[];column_header_tiles=[];row_header_tiles=[];corner_selection;row_header_selection;column_header_selection;corner_annotations;row_header_annotations;column_header_annotations;frozen_row_tiles=[];frozen_column_tiles=[];header_size={width:0,height:0};applied_theme_colors=[];last_column=0;total_height=0;total_width=0;default_row_height=0;default_column_width=0;header_offset={x:0,y:0};dpr=1;scale=1;scroll_reference_node;get scroll_offset(){return this.scroll_reference_node?{x:this.scroll_reference_node.scrollLeft,y:this.scroll_reference_node.scrollTop}:{x:0,y:0}}set scroll_offset(e){this.scroll_reference_node&&(this.scroll_reference_node.scrollLeft=e.x,this.scroll_reference_node.scrollTop=e.y)}dropdown_caret;spill_border;trident=typeof navigator<"u"&&navigator.userAgent&&/trident/i.test(navigator.userAgent);default_tile_size={width:1200,height:800};tooltip_state;tooltip;dropdown_list;dropdown_caret_visible=!1;dropdown_callback;dropdown_selected;note_node;sort_button;title_node;row_cache=[];column_cache=[];initialized=!1;FocusInLayout(e){return!1}UpdateDPR(){let e=Math.max(1,self.devicePixelRatio||1);return e===this.dpr?!1:(this.dpr=e,!0)}ColumnWidth(e){return Math.round(this.view.active_sheet.GetColumnWidth(e)*this.scale)}RowHeight(e){return Math.round(this.view.active_sheet.GetRowHeight(e)*this.scale)}SetRowHeight(e,t){this.view.active_sheet.SetRowHeight(e,Math.round(t/this.scale))}SetColumnWidth(e,t){this.view.active_sheet.SetColumnWidth(e,Math.round(t/this.scale))}ShowSelections(e=!0){this.grid_selection.style.display=e?"block":"none"}HideTitle(){this.title_node.style.opacity="0"}ShowTitle(e,t){if(this.title_node.textContent=e,!this.title_node.parentElement)return;let i=this.title_node.parentElement.getBoundingClientRect(),r=this.OffsetCellAddressToRectangle(t).Shift(this.header_size.width,this.header_size.height);this.title_node.style.left=i.left+r.left-this.scroll_reference_node.scrollLeft+0+"px",this.title_node.style.top=i.top+r.bottom-this.scroll_reference_node.scrollTop+8+"px",this.title_node.style.opacity="1"}HideNote(){this.note_node.style.opacity="0",this.note_node.style.pointerEvents="none"}HideTableSortButton(){this.sort_button.style.opacity="0",this.sort_button.style.pointerEvents="none",this.sort_button.setAttribute("tabindex","-1")}ShowTableSortButton(e,t,i){if(!this.sort_button.parentElement)return;let r=!0,s=!1;e.sort&&e.sort.column===t&&(r=!e.sort.asc,s=!0),this.sort_button.setAttribute("tabindex","0 "),this.sort_button.style.opacity="1",this.sort_button.style.pointerEvents="initial",this.sort_button.classList.remove("asc","desc"),s&&this.sort_button.classList.add(r?"asc":"desc"),this.sort_button.dataset.asc=r.toString(),this.sort_button.dataset.table=e.name,this.sort_button.dataset.column=t.toString();let o=this.OffsetCellAddressToRectangle(i).Shift(this.header_size.width,this.header_size.height),n=this.sort_button.getBoundingClientRect();this.sort_button.style.left=o.right-n.width-n.width/2+"px",this.sort_button.style.top=o.top+(o.height-n.height)/2+"px"}ShowNote(e,t,i,r){if(r?this.note_node.innerHTML=r:this.note_node.textContent=e,!this.note_node.parentElement)return;let s=this.note_node.getBoundingClientRect(),o=this.note_node.parentElement.getBoundingClientRect(),n={x:8,y:2},a=this.OffsetCellAddressToRectangle(t).Shift(this.header_size.width,this.header_size.height);this.note_node.style.left=o.left+a.right-this.scroll_reference_node.scrollLeft+n.x+"px",this.note_node.style.top=o.top+a.top-this.scroll_reference_node.scrollTop-s.height/5-n.y+"px",this.note_node.style.opacity="1",this.note_node.style.pointerEvents="auto"}AnnotationLayoutOrder(e,t){let i=-1;for(let s=0;s<this.view.active_sheet.annotations.length;s++)if(this.view.active_sheet.annotations[s]===e){i=s;break}if(i<0)return!1;let r=Math.min(Math.max(0,i+t),this.view.active_sheet.annotations.length-1);if(r===i)return!1;this.view.active_sheet.annotations.splice(i,1),this.view.active_sheet.annotations.splice(r,0,e);for(let s=0;s<this.view.active_sheet.annotations.length;s++){let o=this.view.active_sheet.annotations[s].key,n=this.container?.querySelectorAll(`.annotation[data-key="${o}"]`);if(n)for(let a=0;a<n?.length;a++)n[a].style.zIndex=(s+1).toString()}return!0}PointToAnnotationCorner(e){let t=this.PointToAddress_Grid(e,!1),i=this.CellAddressToRectangle(t);return{address:t,offset:{x:(e.x-i.left)/i.width,y:(e.y-i.top)/i.height}}}RectToAnnotationLayout(e){return{tl:this.PointToAnnotationCorner({x:(e.left||0)+1,y:(e.top||0)+1}),br:this.PointToAnnotationCorner({x:e.right||e.left||100,y:e.bottom||e.top||100})}}AddressToAnnotationLayout(e,t){let i={tl:this.CellAddressToRectangle(e),br:this.CellAddressToRectangle(t)};return{tl:this.PointToAnnotationCorner({x:i.tl.left||0,y:i.tl.top||0}),br:this.PointToAnnotationCorner({x:i.br.right||i.tl.left||100,y:i.br.bottom||i.tl.left||100})}}AnnotationLayoutToRect(e){let t=this.CellAddressToRectangle(e.tl.address),i=this.CellAddressToRectangle(e.br.address),r=t.left+t.width*e.tl.offset.x-1,s=t.top+t.height*e.tl.offset.y-1;return new U(r,s,i.left+i.width*e.br.offset.x-r,i.top+i.height*e.br.offset.y-s)}UpdateAnnotation(e,t){Array.isArray(e)||(e=[e]);for(let i of e){let r=i.view[this.view.view_index]||{};if(r.node){let s=10*this.scale;if(i.data.style?.font_size?.unit==="em"&&(s*=i.data.style.font_size.value),r.node.dataset.scale=this.scale.toString(),i.data.style?.font_face&&i.data.style.font_face.startsWith("stack:")){let o=i.data.style.font_face.substring(6),n=t.font_stacks[o];n?(r.node.classList.add("treb-inherit-font"),r.node.style.fontFamily=n.font||"",n.variants&&(r.node.style.fontVariant=n.variants)):(r.node.classList.remove("treb-inherit-font"),r.node.style.fontFamily="",r.node.style.fontVariant="")}else r.node.classList.remove("treb-inherit-font"),r.node.style.fontFamily="",r.node.style.fontVariant="";if(i.data.style?.bold?r.node.style.fontWeight="600":r.node.style.fontWeight="400",i.data.style?.italic?r.node.style.fontStyle="italic":r.node.style.fontStyle="",i.data.style?.underline?r.node.style.textDecoration="underline":r.node.style.textDecoration="",r.node.style.fontSize=`${s}pt`,i.rect&&!i.data.layout&&(i.scaled_rect=i.rect.Scale(this.scale),i.data.layout=this.RectToAnnotationLayout(i.scaled_rect)),i.data.layout){let o=this.AnnotationLayoutToRect(i.data.layout);o.ApplyStyle(r.node),i.scaled_rect=o}r.node.dataset.key=i.key.toString(),(this.view.active_sheet.freeze.rows||this.view.active_sheet.freeze.columns)&&this.CloneFrozenAnnotation(i)}}}GetFrozenAnnotations(e){return[this.row_header_annotations,this.column_header_annotations,this.corner_annotations].map(i=>i.querySelector(`.annotation[data-key="${e.key}"]`)).filter(i=>i!==null)}CloneFrozenAnnotations(){for(let e of this.view.active_sheet.annotations)e.view[this.view.view_index]?.node&&e.key&&this.CloneFrozenAnnotation(e)}ClearFrozenAnnotations(){for(let e of[this.row_header_annotations,this.column_header_annotations,this.corner_annotations]){let t=e.querySelectorAll(".annotation");for(let i=0;i<t.length;i++)t[i].parentElement?.removeChild(t[i])}}RemoveFrozenAnnotation(e){for(let t of[this.row_header_annotations,this.column_header_annotations,this.corner_annotations]){let i=t.querySelector(`.annotation[data-key="${e.key}"]`);i&&i.parentElement?.removeChild(i)}}CloneFrozenAnnotation(e){for(let t of[this.row_header_annotations,this.column_header_annotations,this.corner_annotations]){let i=t.querySelector(`.annotation[data-key="${e.key}"]`);i&&i.parentElement?.removeChild(i);let r=e.view[this.view.view_index];if(i=r?.node?.cloneNode(!0),i){let s=i.querySelector(".annotation-move-target"),o=i.querySelector(".annotation-resize-target");i.addEventListener("mousedown",n=>{let a=r.node;requestAnimationFrame(()=>{a?.focus()}),this.AnnotationMouseDown(e,r.node,n,s,o)}),t.appendChild(i)}}}RemoveAnnotation(e){let t=e.view[this.view.view_index]||{};t.node&&t.node.parentElement?.removeChild(t.node),this.RemoveFrozenAnnotation(e)}RemoveAnnotationNodes(){let e=Array.prototype.map.call(this.annotation_container.children,t=>t);for(let t of e)this.annotation_container.removeChild(t);(this.view.active_sheet.freeze.rows||this.view.active_sheet.freeze.columns)&&this.ClearFrozenAnnotations()}AddAnnotation(e,t){let i=e.view[this.view.view_index]||{};if(!i.node)throw new Error("annotation view/node missing");this.annotation_container.appendChild(i.node),this.UpdateAnnotation(e,t)}AnnotationMouseDown(e,t,i,r,s){let o=e.scaled_rect;return o?new Promise(n=>{let a={left:o.left,top:o.top,width:o.width,height:o.height},l=this.scroll_reference_node,c=l.getBoundingClientRect(),h=t.getBoundingClientRect();if(i.target===r||i.target!==s&&i.altKey){i.stopPropagation(),i.preventDefault(),t.focus();let d={x:h.left+i.offsetX-o.left,y:h.top+i.offsetY-o.top},u=[t,...this.GetFrozenAnnotations(e)],p=25,m=this.CellAddressToRectangle({row:0,column:0}).Combine(this.CellAddressToRectangle({row:this.view.active_sheet.rows-1,column:this.view.active_sheet.columns-1})).Expand(-1,-1);Y(this.mask,"move",b=>{if(b.offsetY-c.top<this.header_offset.y){let y=Math.min(p,l.scrollTop);l.scrollTop-=y,d.y+=y}else if(b.offsetY-c.top>=c.height&&l.scrollTop+c.height<m.height){let y=p;l.scrollTop+=y,d.y-=y}if(b.offsetX-c.left<this.header_offset.x){let y=Math.min(p,l.scrollLeft);l.scrollLeft-=y,d.x+=y}else if(b.offsetX-c.left>=c.width&&l.scrollLeft+c.width<m.width){let y=p;l.scrollLeft+=y,d.x-=y}if(o.top=b.offsetY-d.y,o.left=b.offsetX-d.x,b.shiftKey){let y=Math.abs(o.left-a.left),x=Math.abs(o.top-a.top);y<=x?o.left=a.left:o.top=a.top}if(b.ctrlKey){let y=this.ClampToGrid({x:o.left,y:o.top});o.left=y.x,o.top=y.y}for(let y of u)y.style.top=o.top+"px",y.style.left=o.left+"px"},()=>{e.data.extent=void 0,e.data.layout=this.RectToAnnotationLayout(o),n({type:"annotation",annotation:e,event:"move"})});return}else if(i.target===s){i.stopPropagation(),i.preventDefault(),t.focus();let d=0;e.data.type==="image"&&e.data.data&&e.data.data.original_size&&e.data.data.original_size.width&&e.data.data.original_size.height&&(d=e.data.data.original_size.width/e.data.data.original_size.height);let u=t.getBoundingClientRect(),p={x:u.left+i.offsetX-o.width+s.offsetLeft,y:u.top+i.offsetY-o.height+s.offsetTop};Y(this.mask,"nw-resize",m=>{let b=[t,...this.GetFrozenAnnotations(e)];if(o.height=m.offsetY-p.y,o.width=m.offsetX-p.x,m.shiftKey&&m.ctrlKey){if(d){let y=Math.abs(o.width-a.width),x=Math.abs(o.height-a.height);y<x?o.width=d*o.height:o.height=o.width/d}}else if(m.shiftKey){let y=Math.abs(o.height-a.height),x=Math.abs(o.width-a.width);y>x?o.width=a.width:o.height=a.height}else if(m.ctrlKey){let y=this.ClampToGrid({x:o.right,y:o.bottom});o.width=y.x-o.left+1,o.height=y.y-o.top+1}for(let y of b)y.style.height=o.height+"px",y.style.width=o.width+"px"},()=>{e.data.extent=void 0,e.data.layout=this.RectToAnnotationLayout(o),n({type:"annotation",annotation:e,event:"resize"})});return}else n()}):(console.info("missing scaled rect!"),Promise.reject())}Initialize(e,t,i=!0){this.mask.parentElement||e.parentElement?.parentElement?.appendChild(this.mask),this.tooltip.parentElement||e.appendChild(this.tooltip),this.spill_border.parentElement||e.appendChild(this.spill_border),this.dropdown_caret.parentElement||e.appendChild(this.dropdown_caret),this.dropdown_list.parentElement||e.appendChild(this.dropdown_list),this.note_node.parentElement||e.appendChild(this.note_node),this.sort_button.parentElement||(e.appendChild(this.sort_button),this.sort_button.addEventListener("click",()=>{t.sort(this.sort_button.dataset.table||"",Number(this.sort_button.dataset.column||"0")||0,/true/i.test(this.sort_button.dataset.asc||"")),this.sort_button.classList.remove("asc","desc"),this.sort_button.dataset.asc==="true"?(this.sort_button.dataset.asc="false",this.sort_button.classList.add("desc")):(this.sort_button.dataset.asc="true",this.sort_button.classList.add("asc")),t.focus()})),this.title_node.parentElement||e.appendChild(this.title_node),this.InitializeInternal(e,t.scroll),!i&&this.scroll_reference_node&&(this.scroll_reference_node.style.overflow="hidden"),this.dropdown_callback=t.dropdown,this.initialized=!0}MockSelection(){if(this.container&&!this.trident&&this.DOM.doc){let e=this.DOM.GetSelection();if(e){let t=this.DOM.doc.createRange();t.selectNodeContents(this.mock_selection),e.removeAllRanges(),e.addRange(t)}}}CreateTile(e,t,i,r,s,o,n,a=!0){let l=this.DOM.Create("canvas");return l.setAttribute("class",e),l.logical_size=t,l.width=t.width*this.dpr,l.height=t.height*this.dpr,l.style.width=`${t.width}px`,l.style.height=`${t.height}px`,l.tile_position=i,l.first_cell=r,this.UpdateTileGridPosition(l),l.last_cell={row:r.row+s.rows-1,column:r.column+s.columns-1},l.pixel_start=o,l.pixel_end={x:o.x+t.width,y:o.y+t.height},l.dirty=!!a,l.needs_full_repaint=!0,n.appendChild(l),l}ApplyThemeColors(){if(this.container)for(let[e,t]of this.applied_theme_colors.entries())this.container.style.setProperty(`--treb-applied-theme-color-${e+1}`,t)}ApplyTheme(e){this.row_header.style.backgroundColor=this.column_header.style.backgroundColor=this.corner.style.backgroundColor=e.headers?.fill?T(e,e.headers.fill,0):"",this.corner.style.borderColor=e.grid_color||"";for(let t of this.grid_tiles)for(let i of t)i.style.backgroundColor=T(e,e.grid_cell?.fill,0)||"#fff";this.dropdown_list.style.font=D.CompositeFont(e.grid_cell_font_size,{font_face:"stack:default"},this.scale,e).font,this.applied_theme_colors=e.theme_colors?.slice(4,10)||[],this.container&&this.ApplyThemeColors()}UpdateTotalSize(){this.total_height=0;let e=this.view.active_sheet.rows;for(let i=0;i<e;i++)this.total_height+=this.RowHeight(i);this.total_width=0;let t=this.view.active_sheet.columns;for(let i=0;i<t;i++)this.total_width+=this.ColumnWidth(i)}UpdateContentsSize(){let e=this.row_header_tiles.reduce((i,r)=>i+r.logical_size.height,0),t=this.column_header_tiles.reduce((i,r)=>i+r.logical_size.width,0);this.column_header.style.width=this.contents.style.width=`${t}px`,this.row_header.style.height=this.contents.style.height=`${e}px`}HideTooltip(){this.tooltip.style.display="none",this.tooltip_state=void 0,this.tooltip.classList.remove("arrow-up"),this.tooltip.classList.remove("arrow-left")}ShowTooltip(e={}){e.up?(this.tooltip.classList.add("arrow-up"),this.tooltip_state="up"):e.left&&(this.tooltip.classList.add("arrow-left"),this.tooltip_state="left"),this.tooltip.style.display="block",this.UpdateTooltip(e)}ShowDropdownCaret(e,t,i){let r=this.OffsetCellAddressToRectangle(e.start);e.count>1&&(r=r.Combine(this.OffsetCellAddressToRectangle(e.end))),r=r.Shift(this.header_size.width,this.header_size.height);let s=Math.round(this.scale*Math.max(8,Math.min(20,r.height)));this.dropdown_caret.style.height=`${s}px`,this.dropdown_caret.style.width=`${s}px`,this.dropdown_caret.style.left=`${r.right+1}px`,this.dropdown_caret.style.top=`${r.bottom-s}px`,this.dropdown_list.style.top=`${r.bottom+2}px`,this.dropdown_list.style.left=`${r.left+2}px`,this.dropdown_list.style.minWidth=`${r.width}px`,this.dropdown_list.style.fontSize=this.scale.toFixed(2)+"em",this.dropdown_list.textContent="";for(let o of t){let n=this.DOM.Div(void 0,this.dropdown_list);i===o&&(this.dropdown_selected=n,n.classList.add("selected")),n.dataset.dropdown_value=JSON.stringify(o),n.textContent=o?.toString()||""}this.dropdown_caret.setAttribute("class","treb-dropdown-caret"),this.dropdown_caret.style.display="block",this.dropdown_caret_visible=!0}ShowSpillBorder(e){if(this.spill_border.textContent="",e){let t=new _(e.start,e.end),i=this.OffsetCellAddressToRectangle(t.start);t.count>1&&(i=i.Combine(this.OffsetCellAddressToRectangle(t.end))),i=i.Shift(this.header_size.width,this.header_size.height),this.spill_border.style.display="block",this.spill_border.style.top=(i.top-5).toString()+"px",this.spill_border.style.left=(i.left-5).toString()+"px",this.spill_border.style.width=(i.width+10).toString()+"px",this.spill_border.style.height=(i.height+10).toString()+"px";let r=this.DOM.SVG("rect",void 0,this.spill_border);r.setAttribute("x","4.5"),r.setAttribute("y","4.5"),r.setAttribute("width",(i.width+1).toString()),r.setAttribute("height",(i.height+1).toString())}else this.spill_border.style.display="none"}HideDropdownCaret(){this.dropdown_caret_visible&&(this.dropdown_caret.setAttribute("class","treb-dropdown-caret"),this.dropdown_caret_visible=!1,this.dropdown_caret.style.display="none")}GetScrollOffset(){return{x:this.scroll_reference_node.scrollLeft+this.header_offset.x,y:this.scroll_reference_node.scrollTop+this.header_offset.y}}ScrollTo(e,t=!0,i=!0,r=!1){let s=this.CellAddressToRectangle(e);if(r&&this.scroll_reference_node.scrollTo){let o={left:this.scroll_reference_node.scrollLeft,top:this.scroll_reference_node.scrollTop},n={left:t?s.left:o.left,top:i?s.top:o.top,behavior:"smooth"};this.scroll_reference_node.scrollTo(n)}else i&&(this.scroll_reference_node.scrollTop=s.top),t&&(this.scroll_reference_node.scrollLeft=s.left)}ScrollIntoView(e,t=!1){let i=this.CellAddressToRectangle(e),r=this.scroll_reference_node.clientWidth-this.row_header.offsetWidth,s=this.scroll_reference_node.clientHeight-this.column_header.offsetHeight,o={x:0,y:0},n={x:!1,y:!1},a=new U(this.scroll_reference_node.scrollLeft,this.scroll_reference_node.scrollTop,r,s);(this.view.active_sheet.freeze.rows||this.view.active_sheet.freeze.columns)&&(this.view.active_sheet.freeze.rows&&e.row>=this.view.active_sheet.freeze.rows?o.y=this.frozen_row_tiles[0].logical_size.height:this.view.active_sheet.freeze.rows&&(n.y=!0),this.view.active_sheet.freeze.columns&&e.column>=this.view.active_sheet.freeze.columns?o.x=this.frozen_column_tiles[0].logical_size.width:this.view.active_sheet.freeze.columns&&(n.x=!0));let l={behavior:t?"smooth":"auto"};e.row!==1/0&&(i.top<a.top+o.y&&!n.y?l.top=i.top-o.y:i.bottom>a.bottom&&(l.top=i.bottom-s)),e.column!==1/0&&(i.left<a.left+o.x&&!n.x?l.left=i.left-o.x:i.right>a.right&&(l.left=i.right-r)),this.scroll_reference_node.scrollTo(l)}UpdateTooltip(e={}){if(typeof e.text<"u"&&(this.tooltip.textContent=e.text),typeof e.x<"u"){let t=e.x||0;this.tooltip_state==="up"&&(t-=this.tooltip.offsetWidth/2),this.tooltip.style.left=Math.round(t)+"px"}if(typeof e.y<"u"){let t=e.y||0;this.tooltip_state==="left"&&(t-=this.tooltip.offsetHeight/2),this.tooltip.style.top=Math.round(t)+"px"}}CoordinateToRowHeader(e){let t={column:1/0,row:0};if(this.view.active_sheet.freeze.rows&&this.frozen_row_tiles[0].pixel_end.y>=e-this.scroll_reference_node.scrollTop){let i=0;e-=this.scroll_reference_node.scrollTop;for(let r=0;r<this.view.active_sheet.freeze.rows;r++)if(i+=this.RowHeight(r),i>=e)return t.row=r,t}for(let i of this.row_header_tiles)if(i.pixel_end.y>=e){let r=e-i.pixel_start.y,s=0;for(t.row=i.first_cell.row;t.row<=i.last_cell.row;t.row++,r-=s)if(s=this.RowHeight(t.row),s>r)return t;return t}return t}CoordinateToColumnHeader(e){let t={row:1/0,column:0};if(this.view.active_sheet.freeze.columns&&this.frozen_column_tiles[0].pixel_end.x>=e-this.scroll_reference_node.scrollLeft){let i=0;e-=this.scroll_reference_node.scrollLeft;for(let r=0;r<this.view.active_sheet.freeze.columns;r++)if(i+=this.ColumnWidth(r),i>=e)return t.column=r,t}for(let i of this.column_header_tiles)if(i.pixel_end.x>=e){let r=e-i.pixel_start.x,s=0;for(t.column=i.first_cell.column;t.column<=i.last_cell.column;t.column++,r-=s)if(s=this.ColumnWidth(t.column),s>r)return t;return t}return t}PointToAddress_Grid(e,t=!0){if(t){if(this.view.active_sheet.freeze.rows){let o=this.frozen_row_tiles[0].logical_size.height;e.y-this.scroll_reference_node.scrollTop<o&&(e.y-=this.scroll_reference_node.scrollTop)}if(this.view.active_sheet.freeze.columns){let o=this.frozen_column_tiles[0].logical_size.width;e.x-this.scroll_reference_node.scrollLeft<o&&(e.x-=this.scroll_reference_node.scrollLeft)}}let i={row:0,column:0},r=this.grid_tiles[this.grid_tiles.length-1],s=r[r.length-1];if(e.y>s.pixel_end.y){let o=e.y-s.pixel_end.y;for(i.row=s.last_cell.row;o>0;)i.row++,o-=this.default_row_height}else for(let o of r)if(o.pixel_start.y<=e.y&&o.pixel_end.y>=e.y){let n=e.y-o.pixel_start.y,a=0;for(i.row=o.first_cell.row;i.row<=o.last_cell.row&&(a=this.RowHeight(i.row),!(a>n));i.row++,n-=a);break}if(e.x>s.pixel_end.x){let o=e.x-s.pixel_end.x;for(i.column=s.last_cell.column;o>0;)i.column++,o-=this.default_column_width}else for(let o of this.grid_tiles)if(o[0].pixel_start.x<=e.x&&o[0].pixel_end.x>=e.x){let n=o[0],a=e.x-n.pixel_start.x,l=0;for(i.column=n.first_cell.column;i.column<=n.last_cell.column&&(l=this.ColumnWidth(i.column),!(l>a));i.column++,a-=l);break}return i}AdjacentTile(e,t=0,i=0){if(!t&&!i)return e;let r=e.tile_position,s=e.tile_position.row+t,o=e.tile_position.column+i;if(!(s<0||o<0)){if(this.grid_tiles[r.column]&&this.grid_tiles[r.column][r.row]===e&&this.grid_tiles[o])return this.grid_tiles[o][s];if(!r.column&&this.frozen_column_tiles[r.row]===e)return this.frozen_column_tiles[s];if(!r.row&&this.frozen_row_tiles[r.column]===e)return this.frozen_row_tiles[o]}}UpdateTiles(){if(!this.container)throw new Error("invalid container");this.grid_tiles.forEach(g=>{g.forEach(R=>{R.parentElement&&R.parentElement.removeChild(R)})});for(let g of[this.column_header_tiles,this.row_header_tiles,this.frozen_row_tiles,this.frozen_column_tiles])for(let R of g)R.parentElement&&R.parentElement.removeChild(R);this.frozen_row_tiles=[],this.frozen_column_tiles=[],this.row_header_tiles=[],this.column_header_tiles=[],this.grid_tiles=[];let e=this.view.active_sheet;this.default_row_height=Math.round(e.default_row_height*this.scale),this.default_column_width=Math.round(e.default_column_width*this.scale),this.header_offset={x:Math.round(e.header_offset.x*this.scale),y:Math.round(e.header_offset.y*this.scale)},this.UpdateContainingGrid();let t=this.view.active_sheet.rows,i=this.view.active_sheet.columns;t||(t=100),i||(i=40);let r=0,s=0;for(let g=0;g<t;g++)r+=this.RowHeight(g);for(let g=0;g<i;g++)s+=this.ColumnWidth(g);if(!s||!r)throw"unexpected missing total size";if(r||(r=this.default_row_height*t),s||(s=this.default_column_width*i),this.container.clientWidth>s+this.header_size.width){let g=Math.ceil((this.container.offsetWidth-s)/this.default_column_width);s+=g*this.default_column_width,i+=g}if(this.last_column=i,this.container.clientHeight>r+this.header_size.height){let g=Math.ceil((this.container.offsetHeight-r)/this.default_row_height);r+=g*this.default_row_height,t+=g}this.column_header.style.width=this.contents.style.width=`${s}px`,this.row_header.style.height=this.contents.style.height=`${r}px`;let o=[],n=[],a=0,l=0;for(let g=0;g<i;g++){let R=this.ColumnWidth(g);a&&a+R>this.default_tile_size.width&&(o.push(a),n.push(l),l=g,a=0),a+=R}o.push(a),n.push(l);let c=[],h=[],d=0,u=0;for(let g=0;g<t;g++){let R=this.RowHeight(g);d&&d+R>this.default_tile_size.height&&(c.push(d),h.push(u),d=0,u=g),d+=R}c.push(d),h.push(u);let p=o.length,m=c.length,b=0,y=0,x=0,k=0;for(let g=0;g<this.view.active_sheet.freeze.rows;g++)x+=this.RowHeight(g);for(let g=0;g<this.view.active_sheet.freeze.columns;g++)k+=this.ColumnWidth(g);for(let g=0;g<p;g++){let R=[];b=0;let E=g===p-1?i-n[g]:n[g+1]-n[g];this.column_header_tiles.push(this.CreateTile("column-header-tile",{height:this.header_offset.y,width:o[g]},{row:0,column:g},{row:0,column:n[g]},{rows:0,columns:E},{x:y,y:0},this.column_header)),this.view.active_sheet.freeze.rows&&this.frozen_row_tiles.push(this.CreateTile("frozen-row-tile",{height:x,width:o[g]},{row:1,column:g},{row:0,column:n[g]},{rows:0,columns:E},{x:y,y:0},this.column_header));for(let v=0;v<m;v++){let A=v===m-1?t-h[v]:h[v+1]-h[v];g||(this.row_header_tiles.push(this.CreateTile("row-header-tile",{height:c[v],width:this.header_offset.x},{row:v,column:0},{row:h[v],column:0},{rows:A,columns:1},{x:0,y:b},this.row_header)),this.view.active_sheet.freeze.columns&&this.frozen_column_tiles.push(this.CreateTile("frozen-column-tile",{height:c[v],width:k},{row:v,column:1},{row:h[v],column:0},{rows:A,columns:1},{x:0,y:b},this.row_header))),R.push(this.CreateTile("grid-tile",{height:c[v],width:o[g]},{row:v,column:g},{row:h[v],column:n[g]},{rows:A,columns:E},{x:y,y:b},this.contents)),b+=c[v]}this.grid_tiles.push(R),y+=o[g]}this.total_height=r,this.total_width=s,this.ClearLayoutCaches(),this.UpdateGridTemplates(!0,!0)}ClearLayoutCaches(){this.row_cache=[],this.column_cache=[]}TileIndexForColumn(e){for(let t of this.column_header_tiles)if(t.first_cell.column<=e&&t.last_cell.column>=e)return t.tile_position.column;return-1}TileIndexForRow(e){for(let t of this.row_header_tiles)if(t.first_cell.row<=e&&t.last_cell.row>=e)return t.tile_position.row;return-1}DirtyHeaders(e){if(e){for(let t of this.column_header_tiles){if(t.dirty)continue;let i=new _({row:e.start.row,column:t.first_cell.column},{row:e.start.row,column:t.last_cell.column});(e.entire_row||i.Intersects(e))&&(t.dirty=!0)}for(let t of this.row_header_tiles){if(t.dirty)continue;let i=new _({column:e.start.column,row:t.first_cell.row},{column:e.start.column,row:t.last_cell.row});(e.entire_column||i.Intersects(e))&&(t.dirty=!0)}}}DirtyAll(){for(let e of this.grid_tiles)for(let t of e)t.dirty=!0}DirtyArea(e){if(this.initialized){Array.isArray(e)||(e=[e]);for(let t of e){let i={row:0,column:0},r={row:this.grid_tiles[0].length-1,column:this.grid_tiles.length-1};t.start.column!==1/0&&(i.column=r.column=this.TileIndexForColumn(t.start.column),t.end.column!==t.start.column&&(r.column=this.TileIndexForColumn(t.end.column))),t.start.row!==1/0&&(i.row=r.row=this.TileIndexForRow(t.start.row),t.end.row!==t.start.row&&(r.row=this.TileIndexForRow(t.end.row)));for(let s=i.column;s<=r.column;s++)for(let o=i.row;o<=r.row;o++)this.grid_tiles[s][o].dirty=!0}}}VisibleTiles(){let e=[{row:0,column:0},{row:0,column:0}];if(!this.container||!this.grid_tiles.length||!this.grid_tiles[0].length)return new _(e[0],e[1]);let t=this.scroll_reference_node.scrollLeft,i=t+this.scroll_reference_node.offsetWidth,r=this.scroll_reference_node.scrollTop,s=r+this.scroll_reference_node.offsetHeight;for(let o of this.grid_tiles){let n=o[0];if(n.pixel_start.x<=t&&n.pixel_end.x>=t){for(n of o)if(n.pixel_start.y<=r&&n.pixel_end.y>=r){e[0]=n.tile_position;break}}if(o===this.grid_tiles[this.grid_tiles.length-1]||n.pixel_start.x<=i&&n.pixel_end.x>=i){for(n of o)if(n===o[o.length-1]||n.pixel_start.y<=s&&n.pixel_end.y>=s)return e[1]=n.tile_position,new _(e[0],e[1])}}return new _(e[0],e[1])}UpdateTileHeights(e=!0,t=-1){let i=0;for(let r=0;r<this.row_header_tiles.length;r++){let s=this.row_header_tiles[r];if(t>s.last_cell.row){i+=s.logical_size.height;continue}let o=0;for(let a=s.first_cell.row;a<=s.last_cell.row;a++)o+=this.RowHeight(a);let n=s.logical_size.height===o;if(s.pixel_start.y=i,i+=o,s.pixel_end.y=i,!n){if(s.logical_size.height=o,s.style.height=`${o}px`,s.height=this.dpr*o,this.view.active_sheet.freeze.columns){let a=this.frozen_column_tiles[r];a.logical_size.height=o,a.style.height=`${o}px`,a.height=this.dpr*o}e&&(s.dirty=!0,s.needs_full_repaint=!0)}for(let a of this.grid_tiles){let l=a[r];l.pixel_start.y=s.pixel_start.y,l.pixel_end.y=s.pixel_end.y,n||(l.logical_size.height=o,l.style.height=`${o}px`,l.height=this.dpr*o,e&&(l.dirty=!0,l.needs_full_repaint=!0))}}if(this.view.active_sheet.freeze.rows){let r=0;for(let s=0;s<this.view.active_sheet.freeze.rows;s++)r+=this.RowHeight(s);for(let s of this.frozen_row_tiles)s.style.height=`${r}px`,s.height=r*this.dpr;r+=this.header_offset.y,this.corner_canvas.style.height=`${r}px`,this.corner_canvas.height=r*this.dpr;for(let s of this.grid_tiles)s[0].dirty=!0}this.UpdateGridTemplates(!1,!0),this.row_header.style.height=this.contents.style.height=`${i}px`,this.ClearLayoutCaches()}UpdateTileWidths(e=!0,t=-1){let i=0;for(let r=0;r<this.column_header_tiles.length;r++){let s=this.column_header_tiles[r],o=this.grid_tiles[r];if(t>s.last_cell.column){i+=s.logical_size.width;continue}let n=0;for(let l=s.first_cell.column;l<=s.last_cell.column;l++)n+=this.ColumnWidth(l);let a=s.logical_size.width===n;if(s.pixel_start.x=i,i+=n,s.pixel_end.x=i,!a){if(s.logical_size.width=n,s.style.width=`${n}px`,s.width=this.dpr*n,this.view.active_sheet.freeze.rows){let l=this.frozen_row_tiles[r];l.logical_size.width=n,l.style.width=`${n}px`,l.width=this.dpr*n}e&&(s.dirty=!0,s.needs_full_repaint=!0)}for(let l of o)l.pixel_start.x=s.pixel_start.x,l.pixel_end.x=s.pixel_end.x,a||(l.logical_size.width=n,l.style.width=`${n}px`,l.width=this.dpr*n,e&&(l.dirty=!0,l.needs_full_repaint=!0))}if(this.view.active_sheet.freeze.columns){let r=0;for(let s=0;s<this.view.active_sheet.freeze.columns;s++)r+=this.ColumnWidth(s);for(let s of this.frozen_column_tiles)s.style.width=`${r}px`,s.width=r*this.dpr;r+=this.header_offset.x,this.corner_canvas.style.width=`${r}px`,this.corner_canvas.width=r*this.dpr;for(let s of this.grid_tiles[0])s.dirty=!0}this.UpdateGridTemplates(!0,!1),this.column_header.style.width=this.contents.style.width=`${i}px`,this.ClearLayoutCaches()}ClampToGrid(e){let t=this.PointToAddress_Grid(e),i=this.OffsetCellAddressToRectangle(t);return e.x>i.left+i.width/2?e.x=i.left+i.width-1:e.x=i.left-1,e.y>i.top+i.height/2?e.y=i.top+i.height-1:e.y=i.top-1,e}OffsetCellAddressToRectangle(e){let t=this.CellAddressToRectangle(e);return e.column>=0&&e.column<this.view.active_sheet.freeze.columns&&(t=t.Shift(this.scroll_reference_node.scrollLeft,0)),e.row>=0&&e.row<this.view.active_sheet.freeze.rows&&(t=t.Shift(0,this.scroll_reference_node.scrollTop)),t}CellAddressToRectangle(e){let t=e.row===1/0||e.row<0?0:e.row,i=e.column===1/0||e.column<0?0:e.column;if(this.column_cache.length<=i+1){this.column_cache.length||(this.column_cache[0]=0);for(let o=this.column_cache.length-1;o<=i;o++)this.column_cache[o+1]=this.column_cache[o]+this.ColumnWidth(o)}if(this.row_cache.length<=t+1){this.row_cache.length||(this.row_cache[0]=0);for(let o=this.row_cache.length-1;o<=t;o++)this.row_cache[o+1]=this.row_cache[o]+this.RowHeight(o)}let r=this.column_cache[i],s=this.row_cache[t];return new U(r,s,this.column_cache[i+1]-r,this.row_cache[t+1]-s)}ResizeTileWidth(e,t,i=!0){let r=this.column_header_tiles[e],s=t-r.logical_size.width;r.logical_size.width=t,r.style.width=`${t}px`,r.width=this.dpr*t,r.pixel_end.x+=s,i&&(r.dirty=!0,r.needs_full_repaint=!0);for(let n=e+1;n<this.column_header_tiles.length;n++){this.column_header_tiles[n].pixel_start.x+=s,this.column_header_tiles[n].pixel_end.x+=s;for(let a of this.grid_tiles[n])a.pixel_start.x+=s,a.pixel_end.x+=s}let o=this.grid_tiles[e];for(r of o)r.logical_size.width=t,r.style.width=`${t}px`,r.width=this.dpr*t,r.pixel_end.x+=s,i&&(r.dirty=!0,r.needs_full_repaint=!0);this.UpdateTotalSize(),this.UpdateGridTemplates(!0,!1),this.UpdateContentsSize()}ResizeTileHeight(e,t,i=!0){let r=this.row_header_tiles[e],s=t-r.logical_size.height;r.logical_size.height=t,r.style.height=`${t}px`,r.height=this.dpr*t,r.pixel_end.y+=s,i&&(r.dirty=!0,r.needs_full_repaint=!0);for(let o=e+1;o<this.row_header_tiles.length;o++)r=this.row_header_tiles[o],r.pixel_start.y+=s,r.pixel_end.y+=s;for(let o of this.grid_tiles){r=o[e],r.logical_size.height=t,r.style.height=`${t}px`,r.height=this.dpr*t,r.pixel_end.y+=s,i&&(r.dirty=!0,r.needs_full_repaint=!0);for(let n=e+1;n<o.length;n++)o[n].pixel_start.y+=s,o[n].pixel_end.y+=s}this.UpdateTotalSize(),this.UpdateGridTemplates(!1,!0),this.UpdateContentsSize()}};var Ve=class extends fe{constructor(e,t){super(e,t,!0)}InitializeInternal(){}UpdateGridTemplates(){}UpdateTileGridPosition(){}UpdateContainingGrid(){}ResizeCursor(){}};var Ge=class extends fe{constructor(e,t,i){super(e,t,!1,i),this.column_header=i.Div("treb-top-header"),this.row_header=i.Div("treb-left-header"),this.corner=i.Div("treb-corner"),this.corner_canvas=i.Create("canvas"),this.corner.appendChild(this.corner_canvas),this.contents=i.Div("treb-contents"),this.buffer_canvas=i.Create("canvas","treb-buffer-canvas",this.contents),this.grid_selection=i.SVG("svg","treb-grid-selection",this.contents),this.row_header_selection=i.SVG("svg",["frozen-selection","frozen-selection-rows"],this.column_header),this.row_header_annotations=i.Div("frozen-annotation-container frozen-annotation-container-rows",this.column_header),this.column_header_selection=i.SVG("svg",["frozen-selection","frozen-selection-columns"],this.row_header),this.column_header_annotations=i.Div("frozen-annotation-container frozen-annotation-container-columns",this.row_header),this.corner_selection=i.SVG("svg","frozen-selection",this.corner),this.corner_annotations=i.Div("frozen-annotation-container frozen-annotation-container-corner",this.corner),this.annotation_container=i.Div("treb-annotation-container"),this.grid_cover=i.Div("tile-cover grid-cover"),this.column_header_cover=i.Div("tile-cover column-header-cover"),this.row_header_cover=i.Div("tile-cover row-header-cover")}InitializeInternal(e,t){this.container=e,this.scroll_reference_node=this.container,e.appendChild(this.column_header),e.appendChild(this.row_header),e.appendChild(this.corner),e.appendChild(this.contents),e.appendChild(this.annotation_container),e.appendChild(this.grid_cover),e.appendChild(this.column_header_cover),e.appendChild(this.row_header_cover),e.appendChild(this.mock_selection),this.container.addEventListener("scroll",()=>t()),this.ApplyThemeColors()}FocusInLayout(e){return!!(e&&e instanceof Element&&this.container?.contains(e))}ResizeCursor(e){switch(e){case"row":this.row_header_cover.classList.add("resize");break;case"column":this.column_header_cover.classList.add("resize");break;default:this.row_header_cover.classList.remove("resize"),this.column_header_cover.classList.remove("resize");break}}UpdateTileGridPosition(e){e.style.gridColumn=`${e.tile_position.column+1} / ${e.tile_position.column+2}`,e.style.gridRow=`${e.tile_position.row+1} / ${e.tile_position.row+2}`}UpdateContainingGrid(){if(!this.container)throw new Error("missing container");this.header_size.width=this.header_offset.x,this.header_size.height=this.header_offset.y;let e=this.header_offset.x,t=this.header_offset.y;if(this.view.active_sheet.freeze.columns)for(let i=0;i<this.view.active_sheet.freeze.columns;i++)e+=this.ColumnWidth(i);if(this.view.active_sheet.freeze.rows)for(let i=0;i<this.view.active_sheet.freeze.rows;i++)t+=this.RowHeight(i);this.container.style.gridTemplateColumns=`${this.header_offset.x}px auto`,this.container.style.gridTemplateRows=`${this.header_offset.y}px auto`,this.corner_canvas.setAttribute("width",`${this.dpr*e}`),this.corner_canvas.setAttribute("height",`${this.dpr*t}`),this.column_header.style.height=`${t}px`,this.corner_canvas.style.width=`${e}px`,this.corner_canvas.style.height=`${t}px`}UpdateGridTemplates(){let e=0,t=0;this.column_header.style.gridTemplateColumns=this.contents.style.gridTemplateColumns=this.column_header_tiles.map(n=>(e+=n.logical_size.width,`${n.logical_size.width}px`)).join(" "),this.column_header.style.gridTemplateRows=`${this.header_offset.y}px auto`,this.row_header.style.gridTemplateRows=this.contents.style.gridTemplateRows=this.row_header_tiles.map(n=>(t+=n.logical_size.height,`${n.logical_size.height}px`)).join(" ");let i=this.header_offset.y;if(this.view.active_sheet.freeze.rows)for(let n=0;n<this.view.active_sheet.freeze.rows;n++)i+=this.RowHeight(n);this.column_header.style.height=`${i}px`,this.row_header_selection.style.display="block",this.row_header_selection.style.width=`${e}px`,this.corner_selection.style.height=this.row_header_selection.style.height=`${i}px`,this.corner_selection.style.top=this.row_header_selection.style.top="0px",this.row_header_selection.style.left="0px";let r=this.header_offset.x;if(this.view.active_sheet.freeze.columns)for(let n=0;n<this.view.active_sheet.freeze.columns;n++)r+=this.ColumnWidth(n);this.column_header_selection.style.display="block",this.corner_selection.style.width=this.column_header_selection.style.width=`${r}px`,this.column_header_selection.style.height=`${t}px`,this.column_header_selection.style.top="0px",this.corner_selection.style.left=this.column_header_selection.style.left="0px";let s={x:this.view.active_sheet.header_offset.x*this.scale,y:this.view.active_sheet.header_offset.y*this.scale},o=this.view.active_sheet.freeze;o.rows&&o.columns?(this.row_header_annotations.style.display="block",this.column_header_annotations.style.display="block",this.corner_annotations.style.display="block"):o.rows?(this.row_header_annotations.style.display="block",this.column_header_annotations.style.display="none",this.corner_annotations.style.display="none"):o.columns?(this.row_header_annotations.style.display="none",this.column_header_annotations.style.display="block",this.corner_annotations.style.display="none"):(this.row_header_annotations.style.display="none",this.column_header_annotations.style.display="none",this.corner_annotations.style.display="none"),this.row_header_annotations.style.width=`${e}px`,this.corner_annotations.style.height=this.row_header_annotations.style.height=`${i-s.y}px`,this.corner_annotations.style.top=this.row_header_annotations.style.top=`${s.y}px`,this.column_header_annotations.style.width=this.corner_annotations.style.width=`${r-s.x}px`,this.column_header_annotations.style.height=`${t}px`,this.corner_annotations.style.left=this.column_header_annotations.style.left=`${s.x}px`,this.corner_selection.style.display="block",this.grid_selection.style.width=`${e}px`,this.grid_selection.style.height=`${t}px`,this.grid_selection.style.top=`${this.header_offset.y}px`,this.grid_selection.style.left=`${this.header_offset.x}px`,this.annotation_container.style.width=`${e}px`,this.annotation_container.style.height=`${t}px`,this.annotation_container.style.top=`${this.header_offset.y}px`,this.annotation_container.style.left=`${this.header_offset.x}px`}};var ne=class f extends X{constructor(t,i,r){super();this.model=t;this.view=i;this.autocomplete=r;this.parser=t.parser}static FormulaChars=("$^&*(-+={[<>/~%@"+M.argument_separator).split("");active_cell;autocomplete_matcher;container_node;active_editor;nodes=[];target_address;assume_formula=!1;text_formula=!1;get selecting(){if(this.assume_formula)return!0;if(!this.text_formula)return!1;if(this.active_editor&&this.active_editor.node===this.active_editor.node.ownerDocument.activeElement){let t=this.active_editor.node.ownerDocument.defaultView,i=t.getSelection();if(i?.rangeCount){let o=i?.getRangeAt(0);if((o?.endContainer instanceof t.HTMLElement?o.endContainer:o.endContainer?.parentElement)?.dataset.reference!==void 0)return!0;if(o?.startContainer instanceof t.Text){let a=(o.startContainer.textContent?.substring(0,o.startOffset)||"").trim();if(a.length&&f.FormulaChars.includes(a[a.length-1]))return!0}else console.info("mark 21",o)}let s=this.SubstringToCaret2(this.active_editor.node)[1].trim();if(s.length){let o=s[s.length-1];return f.FormulaChars.includes(o)}}return!1}composite_dependencies=[];get dependencies(){return this.composite_dependencies}parser;FocusEditor(){this.active_editor&&this.active_editor.node.focus()}RegisterListener(t,i,r){t.node.addEventListener(i,r),t.listeners||(t.listeners=new Map),t.listeners.set(i,r)}SelectAll(t){let r=t.ownerDocument.defaultView.getSelection(),s=t.ownerDocument.createRange();s.selectNode(t),r?.removeAllRanges(),r?.addRange(s)}SetCaret(t,i){let r=t.node.ownerDocument,s=r?.defaultView,o=s.getSelection(),n=r?.createRange(),a=c=>{let h=c;for(;h&&!(h instanceof s.Text)&&h.firstChild;)h=h.firstChild;return h},l=a(t.node);if(i){let c=a(i.node);o&&n&&(n.setStart(l,t.offset),n.setEnd(c,i.offset),o.removeAllRanges(),o.addRange(n))}else o&&n&&(n.setStart(l,t.offset),n.setEnd(l,t.offset),n.collapse(!0),o.removeAllRanges(),o.addRange(n))}InsertReference(t,i=!1,r=[]){if(!this.active_editor)return;let s=this.active_editor.node.ownerDocument.defaultView,o=s.getSelection();if(!o)throw new Error("error getting selection");if(o.rangeCount===0)return"";let n=o.getRangeAt(0),a=this.active_editor.node.textContent||"";if(n.startContainer instanceof s.Text)if(!n.collapsed&&n.startOffset<n.endOffset){let l=this.SubstringToCaret2(this.active_editor.node);this.active_editor.node.textContent=l[0]+t+a.substring(l[1].length),this.SetCaret({node:this.active_editor.node,offset:l[0].length},{node:this.active_editor.node,offset:l[0].length+t.length})}else{let l=n.startContainer.parentElement;if(l instanceof s.HTMLElement&&l.dataset.reference){if(i&&r.length){for(let[c,h]of r.entries())if(h===l.textContent){t=r[c+1]||r[0];break}}l.textContent=t,this.SetCaret({node:l,offset:t.length})}else{let c=this.SubstringToCaret2(this.active_editor.node)[1],h="",d=c.trim();if(d.length){let u=d[d.length-1];f.FormulaChars.includes(u)||(c.length===d.length?h=" +":h="+")}this.active_editor.node.textContent=c+h+t+a.substring(c.length),this.SetCaret({node:this.active_editor.node,offset:c.length+t.length+h.length})}}else n.startContainer instanceof s.HTMLElement?(n.startContainer.textContent=t,this.SetCaret({node:n.startContainer,offset:t.length})):console.warn("unexpected range start container",n.startContainer);this.UpdateText(this.active_editor),this.UpdateColors(),this.active_editor.node.dispatchEvent(new Event("input",{bubbles:!0,cancelable:!0}))}UpdateColors(t=!1,i=!1){let r=new Map,s=new Map;for(let n of this.nodes)for(let a of n.references||[]){let l=this.model.AddressToLabel(a);r.has(l)||(r.set(l,a),s.set(l,s.size))}for(let n of this.nodes){for(let a of Array.from(n.node.childNodes)){let l=a.ownerDocument?.defaultView;if(l&&a instanceof l.HTMLElement&&a.dataset.reference){let c=s.get(a.dataset.reference);a.dataset.highlightIndex=typeof c=="number"?(c%5+1).toString():"?"}}n.check=n.node.innerHTML.length}let o=Array.from(r.values());!t&&JSON.stringify(this.composite_dependencies)===JSON.stringify(o)||(this.composite_dependencies=o,i||this.Publish({type:"update",dependencies:this.composite_dependencies}))}UpdateDependencies(t,i){let r=[];for(let a of i.full_reference_list||[])switch(a.type){case"address":case"range":{let l=a.type==="range"?a.start:a;l.sheet_id||(l.sheet?l.sheet_id=this.model.sheets.Find(l.sheet)?.id||0:l.sheet_id=this.view.active_sheet.id),r.push(a);break}case"structured-reference":if(this.target_address){let l=this.model.ResolveStructuredReference(a,this.target_address);l&&r.push(l)}else console.info("target address not set");break;case"identifier":{let l=this.model.GetName(a.name,this.view.active_sheet.id);l?.type==="range"&&(l.area.count===1?r.push({type:"address",...l.area.start,label:a.name,position:a.position,id:a.id}):r.push({type:"range",start:{type:"address",position:a.position,id:a.id,label:a.name,...l.area.start},end:{type:"address",position:a.position,label:a.name,id:a.id,...l.area.end},label:a.name,position:a.position,id:a.id}));break}}r.sort((a,l)=>a.position-l.position);let s=[],o=new Set,n=new Map;for(let a of r){let l=this.model.AddressToLabel(a),c=L(a)?new _(a):new _(a.start,a.end);o.has(l)||(s.push(c),o.add(l)),n.set(a.label,l)}return this.UpdateReferences(t,s),n}UpdateReferences(t,i=[]){t.node.dataset.references=JSON.stringify(i.map(r=>this.model.AddressToLabel(r))),t.references=i}UpdateText(t,i={}){let r=t.node,s=r.textContent||"",o=z.GetInstance(r.ownerDocument);if(this.text_formula=s[0]==="=",this.active_editor&&!this.assume_formula&&(this.active_editor.node.spellcheck=!this.text_formula,!this.text_formula)||s===t.formatted_text)return;let[n,a]=this.SubstringToCaret2(r),l=n.length,c=a.length;if(l===0&&c===0&&(c=s.length),!s)this.UpdateReferences(t);else{let d=this.parser.Parse(s);if(d.expression){let u=this.UpdateDependencies(t,d),p=s[0]==="="?1:0,m=0,b,y,x=0,k,g=o.Fragment(),R=(E,v="text",A="",C=!1)=>{let I=o.Text(E);if((C||(l>x||l===0&&x===0)&&l<=x+E.length)&&(b={offset:l-x,node:I}),c>x&&c<=x+E.length&&(y={offset:c-x,node:I}),v!=="text"){let G=o.Create("span",v);A&&(G.dataset.reference=A),G.appendChild(I),g.appendChild(G)}else g.appendChild(I);k=I,x+=E.length};this.parser.Walk(d.expression,E=>{if(E.type==="missing"||E.type==="group"||E.type==="dimensioned")return!0;let v=E.position+p,A=s.substring(m,v),C="",I=E.type,G="";switch(E.type){case"identifier":C=s.substring(v,v+E.name.length),G=u.get(E.name)||"";break;case"call":C=s.substring(v,v+E.name.length);break;case"literal":if(typeof E.value=="string")C=s.substring(v,v+E.value.length+2),I="string";else return!1;break;case"address":case"range":case"structured-reference":G=u.get(E.label)||"???",C=i.rewrite_addresses?E.label:s.substring(v,v+E.label.length);break;default:return!0}return R(A),R(C,I,G),m=v+C.length,E.type!=="range"}),m<s.length&&R(s.substring(m)),b||(k?b={node:k,offset:(k.data||"").length}:R("",void 0,"",!0)),r.textContent="",r.appendChild(g),b&&!i.format_only&&r===this.active_editor?.node&&this.SetCaret(b,y)}}t.formatted_text=s;let h=this.autocomplete_matcher;h&&Promise.resolve().then(()=>{let d=h.Exec({text:s,cursor:a.length});this.selecting&&d.completions?.length&&(d.completions=void 0);let u=this.NodeAtIndex(d.completions?.length?d.position||0:d.function_position||0);this.Autocomplete(d,u)})}NodeAtIndex(t){let i=this.active_editor?.node.childNodes||[];for(let r=0;r<i.length;r++){let s=i[r].textContent?.length||0;if(s>t)return i[r];t-=s}}AcceptAutocomplete(t){if(!this.active_editor)return;let i;if(t.data&&t.data.completions){for(let c of t.data.completions)if(c.name.toLowerCase()===t.value?.toLowerCase()){i=c.type;break}}let r=t.data?.position||0,s=r+(t.data?.token?.length||0),o=i==="token"?t.value:t.value+"(",n=this.active_editor.node.textContent||"",a=n.substring(0,r)+o,l=a.length;a+=n.substring(s),this.active_editor.node.textContent=a,this.SetCaret({node:this.active_editor.node,offset:l}),this.autocomplete?.Hide(),this.UpdateText(this.active_editor),this.UpdateColors()}Autocomplete(t,i){if(!this.container_node||!this.autocomplete)return;let r;i?.nodeType===Node.ELEMENT_NODE?r=i.getBoundingClientRect():r=this.container_node.getBoundingClientRect();let s=new U(Math.round(r.left),Math.round(r.top),r.width,r.height);this.autocomplete.Show(this.AcceptAutocomplete.bind(this),t,s)}SubstringToCaret2(t,i=!1){let r=["",""];if(!i&&t!==t.ownerDocument.activeElement||t!==this.active_editor?.node)return r;let o=t.ownerDocument.defaultView,n=[!1,!1],a=(c,h)=>{if(c===h.startContainer&&c===h.endContainer&&!(c instanceof o.Text)){n[0]=n[1]=!0,r[0]+=c.textContent,r[1]+=c.textContent;return}if(c===h.startContainer&&(r[0]+=(c.textContent||"").substring(0,h.startOffset),n[0]=!0),c===h.endContainer&&(r[1]+=(c.textContent||"").substring(0,h.endOffset),n[1]=!0),!(n[0]&&n[1])){if(c instanceof o.Text){let d=c.textContent||"";n[0]||(r[0]+=d),n[1]||(r[1]+=d)}else if(c.hasChildNodes()){for(let d of Array.from(c.childNodes))if(a(d,h),n[0]&&n[1])return}}},l=o.getSelection();if(l?.rangeCount??!1){let c=l?.getRangeAt(0);c&&a(t,c)}return r}};var tr=typeof navigator>"u"?"":navigator.appVersion,ee=typeof navigator>"u"?"":navigator.userAgent,xt=class{is_edge=/Edge/.test(tr);is_ipad=/iPad|iPhone/.test(ee);is_iphone=/iPhone/.test(ee);is_android=/android|samsung/i.test(ee);is_mobile=this.is_ipad||this.is_android;is_firefox=/firefox/i.test(ee);is_safari=/safari/i.test(ee)&&!/edg/i.test(ee);is_mac=/macintosh/i.test(ee);is_chrome=/Chrome/i.test(ee);is_windows=/win64|win32|windows\s+nt/i.test(ee);is_modern=!this.is_edge&&!(this.is_firefox&&this.is_android)&&/webkit|firefox/i.test(ee)},ir={is_edge:!1,is_ipad:!1,is_iphone:!1,is_android:!1,is_firefox:!1,is_safari:!1,is_mac:!1,is_chrome:!1,is_windows:!1,is_modern:!0,is_mobile:!1},V=typeof navigator>"u"?ir:new xt;var He=class extends ne{constructor(t,i,r,s,o){super(r,s,o);this.container=t;this.theme=i;this.container_node=t.querySelector(".treb-overlay-container"),this.edit_node=this.container_node.querySelector(".treb-overlay-editor"),V.is_firefox&&this.edit_node.classList.add("firefox"),this.edit_node.inputMode="none";let n={node:this.edit_node};this.nodes=[n],this.active_editor=n,this.RegisterListener(n,"input",a=>{if(a instanceof InputEvent&&a.isComposing)return;if(!a.isTrusted){this.reset_selection=!0;return}this.reset_selection&&this.Publish({type:"reset-selection"});let l=this.edit_node.firstChild;l&&l.tagName==="BR"&&this.edit_node.removeChild(l),this.editing&&(this.UpdateText(n),this.UpdateColors())}),this.RegisterListener(n,"keyup",a=>{a.isComposing||!this.editing||this.autocomplete&&this.autocomplete.HandleKey("keyup",a).handled}),this.edit_inset=this.container_node.querySelector(".treb-overlay-inset"),this.ClearContents()}internal_selection={target:{row:0,column:0},area:new _({row:0,column:0})};get selection(){return this.internal_selection}set selection(t){if(t){let i=t.target||t.area.start;this.internal_selection={target:{row:i.row,column:i.column},area:new _(t.area.start,t.area.end)}}else{let i={row:0,column:0};this.internal_selection={target:i,area:new _(i)}}}edit_style;reset_selection=!1;edit_node;container_node;edit_inset;scale=1;internal_editing=!1;get editing(){return this.internal_editing}set editing(t){this.internal_editing!==t&&(this.internal_editing=t,t?(this.container_node.style.opacity="1",this.container_node.style.pointerEvents="initial"):(this.container_node.style.opacity="0",this.container_node.style.pointerEvents="none"))}UpdateCaption(t=""){this.edit_node.setAttribute("aria-label",t)}Focus(t=""){this.edit_node!==this.edit_node.ownerDocument.activeElement&&(this.container_node.style.top=`${this.container.scrollTop+this.view.active_sheet.header_offset.y}px`,this.container_node.style.left=`${this.container.scrollLeft+this.view.active_sheet.header_offset.x}px`),this.edit_node.focus(),this.UpdateCaption(t)}CloseEditor(){this.editing=!1,this.reset_selection=!1,this.ClearContents(),this.edit_node.spellcheck=!0,this.autocomplete?.Hide(),this.active_cell=void 0}ClearContents(){V.is_firefox?this.edit_node.innerHTML="<span></span>":this.edit_node.textContent=""}Edit(t,i,r,s,o,n){this.Publish({type:"start-editing",editor:"ice"}),this.active_cell=r,this.target_address={...t.target},this.reset_selection=!1;let a=JSON.parse(JSON.stringify(r.style||{}));this.edit_style=n,n?.font_face&&(a.font_face=n.font_face);let l=D.CompositeFont(this.theme.grid_cell_font_size,a,this.scale,this.theme);switch(this.edit_node.style.font=l.font,l.variants?this.edit_node.style.fontVariant=l.variants:this.edit_node.style.fontVariant="",this.edit_node.style.color=T(this.theme,a.text,1),this.edit_inset.style.backgroundColor=T(this.theme,a.fill,0),a.horizontal_align){case"right":this.container_node.classList.remove("align-center","align-left"),this.container_node.classList.add("align-right");break;case"center":this.container_node.classList.remove("align-right","align-left"),this.container_node.classList.add("align-center");break;default:this.container_node.classList.remove("align-right","align-center"),this.container_node.classList.add("align-left");break}this.edit_node.style.paddingBottom=`${Math.max(0,(self.devicePixelRatio||1)-1)}px`;let c=s?.toString()||"";c&&c[0]==="="&&(this.edit_node.spellcheck=!1),i.ApplyStyle(this.container_node);let h=V.is_mac?0:.5;if(this.edit_node.style.bottom=h.toFixed(2)+"px",this.autocomplete?.ResetBlock(),this.selection=t,typeof s<"u"){let d=c[0]!=="="&&c[c.length-1]==="%",u=c.length;this.edit_node.textContent=c,this.SetCaret({node:this.edit_node,offset:u-(d?1:0)})}this.editing=!0,Promise.resolve().then(()=>{this.active_editor&&(this.active_editor.formatted_text=void 0,this.UpdateText(this.active_editor),this.UpdateColors()),!o&&s!==void 0&&this.Publish({type:"update",text:s.toString(),dependencies:this.composite_dependencies})})}GetEditState(){let t=this.active_editor?.node?.textContent||"",i="";return this.active_editor?.node&&(i=this.SubstringToCaret2(this.active_editor.node,!0)[0]),{text:t,substring:i}}HandleKeyDown(t){if(this.editing){if(this.autocomplete){let i=this.autocomplete.HandleKey("keydown",t);if(i.accept&&this.AcceptAutocomplete(i),i.handled)return"handled"}switch(t.key){case"F4":return;case"Enter":case"Tab":return"commit";case"Escape":case"Esc":return"discard";case"ArrowUp":case"ArrowDown":case"ArrowLeft":case"ArrowRight":case"Up":case"Down":case"Left":case"Right":return this.selecting?void 0:"commit"}return"handled"}}UpdateScale(t){this.scale=t}};var Xt=new Map,pe,he=(f,e)=>{let t=f,i=Xt.get(t);return i||(i=rr(f,e),Xt.set(t,i),i)};var rr=(f,e)=>{pe||typeof document<"u"&&(pe=document.createElement("canvas")),pe&&(e?pe.style.fontVariant=e:pe.style.fontVariant="");let t=pe?.getContext("2d",{alpha:!1});if(!t)throw new Error("invalid context");t.textBaseline="alphabetic",t.textAlign="center",t.font=f;let i=t.measureText("("),r=i.actualBoundingBoxRight+i.actualBoundingBoxLeft;i=t.measureText("#");let s=i.actualBoundingBoxRight+i.actualBoundingBoxLeft;return i=t.measureText("Mljy!"),{paren:r,hash:s,ascent:i.fontBoundingBoxAscent,descent:i.fontBoundingBoxDescent,height:i.fontBoundingBoxAscent+i.fontBoundingBoxDescent}};var sr=" ",Be=class{constructor(e,t,i,r,s){this.theme=e;this.layout=t;this.model=i;this.view=r;this.options=s;this.buffer_canvas=t.buffer_canvas,this.buffer_canvas.width=this.buffer_canvas_size.width,this.buffer_canvas.height=this.buffer_canvas_size.height;let o=this.buffer_canvas.getContext("2d",{alpha:!1});if(o){let n=this.layout.dpr;this.buffer_context=o,this.buffer_context.setTransform(n,0,0,n,0,0),this.buffer_context.textAlign="left",this.buffer_context.textBaseline="alphabetic"}}cell_edge_buffer=4;overflow_areas=[];buffer_canvas;buffer_context;buffer_canvas_size={width:256,height:256};FlushOverflows(){let e=this.view.active_sheet.cells;for(let t of e.Iterate())t.renderer_data?.overflowed&&(t.renderer_data=void 0,t.render_clean[this.view.view_index]=!1);for(let t of this.overflow_areas)t.tile.dirty=!0;this.overflow_areas=[]}MeasureText(e,t,i){let r=this.layout.grid_tiles[0][0],s=i??this.layout.scale,o=e.style||{},n=D.CompositeFont(this.theme.grid_cell_font_size,o,s,this.theme),a=he(n.font,n.variants),l={base:n.font,strong:D.CompositeFont(this.theme.grid_cell_font_size,{...o,bold:!0},s,this.theme).font,emphasis:D.CompositeFont(this.theme.grid_cell_font_size,{...o,italic:!0},s,this.theme).font,strong_emphasis:D.CompositeFont(this.theme.grid_cell_font_size,{...o,bold:!0,italic:!0},s,this.theme).font};n.variants?r.style.fontVariant=n.variants:r.style.fontVariant="";let c=r.getContext("2d",{alpha:!1});if(!c)throw new Error("context failed");let h=this.PrepText(c,l,e,t),d=h.width,u=a.height*h.strings.length;return{width:d,height:u}}EnsureBuffer(e=0,t=0,i=0){let r=this.layout.dpr;if(e=e*r,t=t*r,i=i*r,e>this.buffer_canvas_size.width||t>this.buffer_canvas_size.height){this.buffer_canvas_size.width=Math.max(Math.ceil(e/256)*256,this.buffer_canvas_size.width),this.buffer_canvas_size.height=Math.max(Math.ceil(t/256)*256,this.buffer_canvas_size.height),this.buffer_canvas.width=this.buffer_canvas_size.width,this.buffer_canvas.height=this.buffer_canvas_size.height;let s=this.buffer_canvas.getContext("2d",{alpha:!1});s&&(this.buffer_context=s,this.buffer_context.textAlign="left",this.buffer_context.textBaseline="alphabetic")}this.buffer_context.setTransform(r,0,0,r,i,0)}OverflowDirty(e=!1){let t=[];for(let i of this.overflow_areas){let r=i.area.start.row,s=e;if(!s)for(let o=i.area.start.column;!s&&o<=i.area.end.column;o++){let n=this.view.active_sheet.cells.GetCell({row:r,column:o},!1);s=!!(n&&!n.render_clean[this.view.view_index])}if(s){for(let o=i.area.start.column;o<=i.area.end.column;o++){let n=this.view.active_sheet.cells.GetCell({row:r,column:o},!1);n&&(n.render_clean[this.view.view_index]=!1,n.renderer_data&&n.renderer_data.overflowed&&(n.renderer_data=void 0))}i.tile.dirty=!0}else t.push(i)}this.overflow_areas=t}RenderCorner(){let t=this.layout.corner_canvas.getContext("2d",{alpha:!1});if(!t)throw new Error("invalid context");let i=D.CompositeFont(this.theme.grid_cell_font_size,this.theme.headers||{},this.layout.scale,this.theme),r=he(i.font,i.variants),s=this.layout.dpr,o=this.layout.header_offset,n=o.x;for(let l=0;l<this.view.active_sheet.freeze.columns;l++)n+=this.layout.ColumnWidth(l);let a=o.y;for(let l=0;l<this.view.active_sheet.freeze.rows;l++)a+=this.layout.RowHeight(l);t.setTransform(s,0,0,s,0,0),t.fillStyle=this.theme.headers?.fill?T(this.theme,this.theme.headers.fill):"",t.fillRect(0,0,n,o.y),t.fillRect(0,0,o.x,a),t.strokeStyle=this.theme.headers_grid_color||"",t.beginPath(),t.moveTo(o.x-.5,0),t.lineTo(o.x-.5,o.y),t.moveTo(0,o.y-.5),t.lineTo(o.x,o.y-.5),t.stroke(),!(!this.view.active_sheet.freeze.columns&&!this.view.active_sheet.freeze.rows)&&(t.strokeStyle=this.theme.grid_color||"",t.beginPath(),a!==o.y&&(t.moveTo(o.x-.5,o.y),t.lineTo(o.x-.5,a)),n!==o.x&&(t.moveTo(o.x,o.y-.5),t.lineTo(n,o.y-.5)),t.stroke(),t.strokeStyle=this.theme.headers_grid_color||"",t.textAlign="center",t.textBaseline="middle",t.font=i.font,t.fillStyle=T(this.theme,this.theme.headers?.text),this.view.active_sheet.freeze.rows&&this.layout.header_offset.x>1&&(t.setTransform(s,0,0,s,0,0),t.translate(0,o.y),t.beginPath(),t.moveTo(0,0-.5),t.lineTo(o.x,0-.5),t.stroke(),this.RenderRowLabels(t,0,this.view.active_sheet.freeze.rows-1,r.height)),this.view.active_sheet.freeze.columns&&this.layout.header_offset.y>1&&(t.setTransform(s,0,0,s,0,0),t.translate(o.x,0),t.beginPath(),t.moveTo(0-.5,0),t.lineTo(0-.5,o.y),t.stroke(),this.RenderColumnLabels(t,0,this.view.active_sheet.freeze.columns-1)))}RenderColumnLabels(e,t,i){let r=this.layout.header_offset.y;if(!(r<=1)){for(e.fillStyle=T(this.theme,this.theme.headers?.text,0),e.beginPath();t<=i;t++){let s=this.layout.ColumnWidth(t),o=_.ColumnToLabel(t),n=e.measureText(o);s>n.width&&e.fillText(o,s/2,r/2+1),e.moveTo(s-.5,0),e.lineTo(s-.5,r),e.translate(s,0)}e.stroke()}}RenderRowLabels(e,t,i,r){let s=this.layout.header_offset.x;if(!(s<=1)){for(e.fillStyle=T(this.theme,this.theme.headers?.text,0),e.beginPath();t<=i;t++){let o=this.layout.RowHeight(t);o>=r*1.2&&e.fillText(`${t+1}`,s/2,o/2+1),e.moveTo(0,o-.5),e.lineTo(s,o-.5),e.translate(0,o)}e.stroke()}}RenderHeaders(e,t=!1){let i=this.layout.dpr,r=this.layout.header_offset,s=D.CompositeFont(this.theme.grid_cell_font_size,this.theme.headers||{},this.layout.scale,this.theme),o=he(s.font,s.variants);for(let n=e.start.column;n<=e.end.column;n++){let a=this.layout.column_header_tiles[n];if(a.dirty||t){let l=a.getContext("2d",{alpha:!1});if(!l)continue;l.setTransform(i,0,0,i,0,0),l.textAlign="center",l.textBaseline="middle",l.font=s.font,s.variants?a.style.fontVariant=s.variants:a.style.fontVariant="",l.fillStyle=this.theme.headers?.fill?T(this.theme,this.theme.headers.fill):"",l.fillRect(0,0,a.logical_size.width,this.layout.header_offset.y),l.strokeStyle=this.theme.headers_grid_color||"",l.beginPath(),l.moveTo(0,r.y-.5),l.lineTo(a.logical_size.width,r.y-.5),l.stroke(),l.strokeStyle=this.theme.headers_grid_color||"",this.RenderColumnLabels(l,a.first_cell.column,a.last_cell.column),a.dirty=!1}}for(let n=e.start.row;n<=e.end.row;n++){let a=this.layout.row_header_tiles[n];if(a.dirty||t){let l=a.getContext("2d",{alpha:!1});if(!l)continue;l.fillStyle=this.theme.headers?.fill?T(this.theme,this.theme.headers.fill):"",l.setTransform(i,0,0,i,0,0),l.textAlign="center",l.textBaseline="middle",l.font=s.font,s.variants?a.style.fontVariant=s.variants:a.style.fontVariant="",l.fillRect(0,0,this.layout.header_offset.x,a.logical_size.height),l.strokeStyle=this.theme.headers_grid_color||"",l.beginPath(),l.moveTo(r.x-.5,0),l.lineTo(r.x-.5,a.logical_size.height),l.stroke(),l.strokeStyle=this.theme.headers_grid_color||"",this.RenderRowLabels(l,a.first_cell.row,a.last_cell.row,o.height),a.dirty=!1}}(this.view.active_sheet.freeze.rows||this.view.active_sheet.freeze.columns)&&this.RenderCorner()}CopyToAdjacent(e,t,i,r,s,o,n){let a=this.layout.AdjacentTile(e,r,i);if(!a)return;let l=s,c=o;i>0?l=s-(e.pixel_end.x-e.pixel_start.x)*t:i<0&&(l=s+(a.pixel_end.x-a.pixel_start.x)*t),r>0&&(c=o-(e.pixel_end.y-e.pixel_start.y)*t);let h=a.getContext("2d",{alpha:!1});h&&(h.setTransform(t,0,0,t,l,c),h.drawImage(this.buffer_canvas,0,0,(n.width||0)*t,(n.height||0)*t,n.left||0,0,n.width||0,n.height||0))}Render(e){let t=e.getContext("2d",{alpha:!1});if(!t)return;t.textBaseline="alphabetic";let i=this.layout.dpr;t.setTransform(i,0,0,i,0,0);let r=0,s=0;for(let a=e.first_cell.column;a<=e.last_cell.column;a++){let l=this.layout.ColumnWidth(a);if(l){s=0;for(let c=e.first_cell.row;c<=e.last_cell.row;c++){let h=this.layout.RowHeight(c);if(h){t.setTransform(i,0,0,i,r,s);let d=this.view.active_sheet.CellData({row:c,column:a});if(e.needs_full_repaint||!d.render_clean[this.view.view_index]){let u=this.RenderCell(e,d,t,{row:c,column:a},l,h,e.pixel_start.x+r,e.pixel_start.y+s);u.tile_overflow_right&&this.CopyToAdjacent(e,i,1,0,r,s,u),u.tile_overflow_left&&this.CopyToAdjacent(e,i,-1,0,r,s,u),u.tile_overflow_bottom&&this.CopyToAdjacent(e,i,0,1,r,s,u)}}s+=h*i}r+=l*i}}if(!this.view.active_sheet.freeze.rows&&!this.view.active_sheet.freeze.columns)return;let o=0,n=0;if(e.first_cell.row<=this.view.active_sheet.freeze.rows-1)for(let a=e.first_cell.row;a<this.view.active_sheet.freeze.rows&&a<=e.last_cell.row;a++)o+=this.layout.RowHeight(a);if(e.first_cell.column<=this.view.active_sheet.freeze.columns-1)for(let a=e.first_cell.column;a<this.view.active_sheet.freeze.columns&&a<=e.last_cell.column;a++)n+=this.layout.ColumnWidth(a);if(o){let a=this.layout.frozen_row_tiles[e.tile_position.column];if(!a)throw new Error("can't find matching header tile");let l=a.getContext("2d",{alpha:!0});if(!l)throw new Error("header context failed");l.setTransform(i,0,0,i,0,0),l.drawImage(e,0,0,e.logical_size.width*i,o*i,0,0,e.logical_size.width,o)}if(n){let a=this.layout.frozen_column_tiles[e.tile_position.row];if(!a)throw new Error("can't find matching header tile");let l=a.getContext("2d",{alpha:!0});if(!l)throw new Error("header context failed");l.setTransform(i,0,0,i,0,0),l.drawImage(e,0,0,n*i,e.logical_size.height*i,0,0,n,e.logical_size.height)}if(n&&o){let a=this.layout.corner_canvas.getContext("2d",{alpha:"false"});if(!a)throw new Error("corner context failed");a.setTransform(i,0,0,i,this.layout.header_offset.x*i,this.layout.header_offset.y*i),a.drawImage(e,0,0,n*i,o*i,0,0,n,o)}}PrepText(e,t,i,r){let s=[],o=i.style||{},n,a=0;if(i.rendered_type===4){let u=i.calculated_type?i.calculated:i.value;i.formatted=u?this.model.language_model?.boolean_true||"TRUE":this.model.language_model?.boolean_false||"FALSE"}let l,c=i.editing?"":i.formatted;Array.isArray(c)&&(c=c.filter(u=>u.flag!==8));let h="",d;if(o.indent){for(let u=0;u<o.indent;u++)h+=sr;d=o.horizontal_align,d||(d=i.type===3||i.calculated_type===3||i.type===8||i.calculated_type===8?"right":"left")}if(Array.isArray(c)){h&&(d==="right"?c.push({text:h,flag:8}):(d==="left"||typeof d>"u")&&c.unshift({text:h,flag:8}));for(let u of c){if(u.flag===6){l=u.text;continue}let p=e.measureText(u.text).width,m={width:p,text:u.text,hidden:u.flag===1};s.push(m),u.flag===2?n=m:a+=p}if(n){let u=n.text,p=n.width,m=r-a-2*this.cell_edge_buffer;if(n.width=Math.max(0,m),m>0){let b=Math.floor(m/p);for(let y=1;y<b;y++)n.text+=u;a=r-2*this.cell_edge_buffer}else n.text=""}return{strings:[s],format:l,width:a}}else if(c){i.type===2&&c[0]==="'"&&(c=c.slice(1));let u;this.options.markdown?u=re.instance.Parse(c):(u=re.instance.Dummy(c),e.font=t.base);let p=0,m=r-2*this.cell_edge_buffer,b=[];if(o.wrap){let y=h&&o.horizontal_align!=="center"?e.measureText(h).width:0;m-=y;for(let x of u){for(let g=1;g<x.length;g++){let R=x[g].text.match(/^(\s+)/);R&&(x[g-1].text+=R[1],x[g].text=x[g].text.replace(/^\s+/,""))}let k=[];for(let g of x){this.options.markdown&&(g.strong&&g.emphasis?e.font=t.strong_emphasis:g.strong?e.font=t.strong:g.emphasis?e.font=t.emphasis:e.font=t.base);let R=g.text.match(/\S+\s*/g);if(R&&R.length)for(let E of R){let v=e.measureText(E.trim()).width,A=e.measureText(E).width;k.push({part:g,text:E,trimmed:v,width:A})}}for(;k.length;){let g=k.shift(),R=[g],E=g.trimmed;for(;E<m&&k.length;){let A=k[0],C=E-g.trimmed+g.width+A.trimmed;if(C>=m)break;g=A,R.push(A),E=C,k.shift(),p=Math.max(p,E)}g.text=g.text.trim(),g.width=g.trimmed,p=Math.max(p,g.width);let v=R.map(A=>({...A.part,hidden:!1,width:A.width,text:A.text}));o.indent&&(d==="right"?v.push({text:h,hidden:!1,width:y}):d==="left"&&v.unshift({text:h,hidden:!1,width:y})),b.push(v)}}}else for(let y of u){let x=[];o.indent&&(d==="right"?y.push({text:h}):d==="left"&&y.unshift({text:h}));let k=0;for(let g of y){this.options.markdown&&(g.strong&&g.emphasis?e.font=t.strong_emphasis:g.strong?e.font=t.strong:g.emphasis?e.font=t.emphasis:e.font=t.base);let R=e.measureText(g.text).width;k+=R,x.push({...g,hidden:!1,width:R})}p=Math.max(p,k),b.push(x)}return{strings:b,width:p}}return{strings:[[{text:"",hidden:!1,width:0}]],width:0}}ResolveColors(e){let t={...e};return t.text={text:T(this.theme,e.text,1)},t}RenderCellBorders(e,t,i,r=0,s=0,o=0,n=0){let a=this.view.active_sheet.SurroundingStyle(e,this.theme.table),l=T(this.theme,a[8].fill);l&&(t.fillStyle=l,t.fillRect(r+0,s-1,o,1)),l=T(this.theme,a[4].fill),l&&(t.fillStyle=l,t.fillRect(r-1,s,1,n)),l=T(this.theme,i.fill),l&&(t.fillStyle=l,t.fillRect(r-1,s-1,o+1,n+1)),l=T(this.theme,a[6].fill),l&&(t.fillStyle=l,t.fillRect(r+o-1,s-1,1,n+1)),l=T(this.theme,a[2].fill),l&&(t.fillStyle=l,t.fillRect(r-1,s+n-1,o+1,1)),a[6].border_top&&!a[6].border_left&&(t.fillStyle=T(this.theme,a[6].border_top_fill,1),t.fillRect(r+o-1,s-2+a[6].border_top,1,1)),a[9].border_left&&(t.fillStyle=T(this.theme,a[9].border_left_fill,1),t.fillRect(r+o-1,s-1,1,1)),a[9].border_bottom&&(t.fillStyle=T(this.theme,a[9].border_bottom_fill,1),t.fillRect(r+o-1,s-2+a[9].border_bottom,1,1)),a[4].border_top&&!a[4].border_right&&(t.fillStyle=T(this.theme,a[4].border_right_fill,1),t.fillRect(r-1,s-2+a[4].border_top,1,1)),a[7].border_right&&(t.fillStyle=T(this.theme,a[7].border_right_fill,1),t.fillRect(r-1,s-1,1,1)),a[7].border_bottom&&(t.fillStyle=T(this.theme,a[7].border_bottom_fill,1),t.fillRect(r-1,s-2+a[7].border_bottom,1,1)),a[6].border_bottom&&!a[6].border_left&&(t.fillStyle=T(this.theme,a[6].border_bottom_fill,1),t.fillRect(r+o-1,s+n-a[6].border_bottom,1,1)),a[3].border_left&&(t.fillStyle=T(this.theme,a[3].border_left_fill,1),t.fillRect(r+o-1,s+n-1,1,1)),a[3].border_top&&(t.fillStyle=T(this.theme,a[3].border_top_fill,1),t.fillRect(r+o-1,s+n-a[3].border_top,1,1)),a[4].border_bottom&&!a[4].border_right&&(t.fillStyle=T(this.theme,a[4].border_bottom_fill,1),t.fillRect(r-1,s+n-a[4].border_bottom,1,1)),a[1].border_right&&(t.fillStyle=T(this.theme,a[1].border_right_fill,1),t.fillRect(r-1,s+n-1,1,1)),a[1].border_top&&(t.fillStyle=T(this.theme,a[1].border_top_fill,1),t.fillRect(r-1,s+n-a[1].border_top,1,1)),a[8].border_bottom&&(t.fillStyle=T(this.theme,a[8].border_bottom_fill,1),a[8].border_bottom===2&&(t.fillRect(r-1,s-2,o+1,1),t.fillRect(r-1,s-0,o+1,1),t.fillStyle=T(this.theme,a[8].fill)||T(this.theme,this.theme.grid_cell?.fill,0)||"#fff"),t.fillRect(r-1,s-1,o+1,1)),a[4].border_right&&(t.fillStyle=T(this.theme,a[4].border_right_fill,1),t.fillRect(r-1,s-1,1,n+1)),a[6].border_left&&(t.fillStyle=T(this.theme,a[6].border_left_fill,1),t.fillRect(r+o-1,s-1,1,n+1)),a[2].border_top&&(t.fillStyle=T(this.theme,a[2].border_top_fill,1),a[2].border_top===2&&(t.fillRect(r-1,s+n-2,o+1,1),t.fillRect(r-1,s+n-0,o+1,1),t.fillStyle=T(this.theme,a[2].fill)||T(this.theme,this.theme.grid_cell?.fill,0)||"#fff"),t.fillRect(r-1,s+n-1,o+1,1)),i.border_top&&(t.fillStyle=T(this.theme,i.border_top_fill,1),i.border_top===2&&(t.fillRect(r-1,s-2,o+1,1),t.fillRect(r-1,s+0,o+1,1),t.fillStyle=T(this.theme,i.fill)||T(this.theme,this.theme.grid_cell?.fill,0)||"#fff"),t.fillRect(r-1,s-1,o+1,1)),i.border_left&&(t.fillStyle=T(this.theme,i.border_left_fill,1),t.fillRect(r-1,s-1,1,n+1)),i.border_right&&(t.fillStyle=T(this.theme,i.border_right_fill,1),t.fillRect(r+o-1,s-1,1,n+1)),i.border_bottom&&(t.fillStyle=T(this.theme,i.border_bottom_fill,1),i.border_bottom===2&&(t.fillRect(r-1,s+n-2,o+1,1),t.fillRect(r-1,s+n+0,o+1,1),t.fillStyle=T(this.theme,i.fill)||T(this.theme,this.theme.grid_cell?.fill,0)||"#fff"),t.fillRect(r-1,s+n-1,o+1,1))}PaintBackgroundImage(e,t,i,r,s,o,n=0,a=0,l=0){if(!t.width||!t.height)return;let c=(this.layout.scale||1)*this.layout.dpr,h=i/c%t.width,d=r/c%t.height,u=s/c,p=o/c,m=h+u>t.width,b=d+p>t.height;m&&e.drawImage(t,h-t.width,d,u,p,n,a,s-l,o-l),b&&e.drawImage(t,h,d-t.height,u,p,n,a,s-l,o-l),m&&b&&e.drawImage(t,h-t.width,d-t.height,u,p,n,a,s-l,o-l),e.drawImage(t,h,d,u,p,n,a,s-l,o-l)}RenderCellBackground(e,t,i,r,s,o,n=0,a=0){if(i.fillStyle=this.theme.grid_color,i.fillRect(0,0,s,o),this.view.active_sheet.image)this.PaintBackgroundImage(i,this.view.active_sheet.image,n,a,s,o,0,0,1);else{let l=T(this.theme,r.fill);l?(i.fillStyle=l,i.fillRect(0,0,s-1,o-1)):(i.fillStyle=T(this.theme,this.theme.grid_cell?.fill,0)||"#fff",i.fillRect(0,0,s-1,o-1))}this.RenderCellBorders(t,i,r,0,0,s,o),e&&(i.fillStyle=this.theme.note_marker_color,i.beginPath(),i.moveTo(s-2,1),i.lineTo(s-2-8,1),i.lineTo(s-2,9),i.lineTo(s-2,1),i.fill())}RenderCell(e,t,i,r,s,o,n=0,a=0){let l={},c=!t.render_clean[this.view.view_index];if(t.render_clean[this.view.view_index]=!0,e.needs_full_repaint&&t.renderer_data?.overflowed)return{};let h=t.style?{...t.style}:{};if(t.table&&(h=this.view.active_sheet.CellStyleData(r,t.table.theme||this.theme.table)||{}),t.merge_area)if(r.row===t.merge_area.start.row&&r.column===t.merge_area.start.column){for(let S=t.merge_area.start.column+1;S<=t.merge_area.end.column;S++)s+=this.layout.ColumnWidth(S);for(let S=t.merge_area.start.row+1;S<=t.merge_area.end.row;S++)o+=this.layout.RowHeight(S);if(t.merge_area.count>1){let S=this.view.active_sheet.CellStyleData(t.merge_area.end);S&&(h.border_bottom=S.border_bottom,h.border_right=S.border_right,h.border_bottom_fill=S.border_bottom_fill,h.border_right_fill=S.border_right_fill)}t.merge_area.end.column>e.last_cell.column&&(l.tile_overflow_right=!0),t.merge_area.end.row>e.last_cell.row&&(l.tile_overflow_bottom=!0),(l.tile_overflow_bottom||l.tile_overflow_right)&&this.overflow_areas.push({tile:e,head:{...r},area:new _(t.merge_area.start,t.merge_area.end)})}else return{};let d=!!t.hyperlink;if(t.render_function){this.RenderCellBackground(!!t.note,r,i,h,s,o),i.strokeStyle=i.fillStyle=T(this.theme,h.text,1);let S=this.ResolveColors(h);if(t.render_function.call(void 0,{width:s,height:o,context:i,cell:t,style:S,scale:this.layout.scale||1}).handled)return l}let u=D.CompositeFont(this.theme.grid_cell_font_size,h,this.layout.scale,this.theme),p={base:u.font,strong:D.CompositeFont(this.theme.grid_cell_font_size,{...h,bold:!0},this.layout.scale,this.theme).font,emphasis:D.CompositeFont(this.theme.grid_cell_font_size,{...h,italic:!0},this.layout.scale,this.theme).font,strong_emphasis:D.CompositeFont(this.theme.grid_cell_font_size,{...h,bold:!0,italic:!0},this.layout.scale,this.theme).font};if(u.variants?e.style.fontVariant=u.variants:e.style.fontVariant="",i.font=p.base,c||!t.renderer_data||t.renderer_data.width!==s||t.renderer_data.height!==o){let S=this.PrepText(i,p,t,s);t.renderer_data={text_data:S,width:s,height:o}}let m=t.renderer_data.text_data,b=m.width>s-2*this.cell_edge_buffer,y=s,x=0,k=!1,g=t.type===3||t.calculated_type===3||t.type===8||t.calculated_type===8||t.type===10||t.calculated_type===10,R=h.horizontal_align;R||(R=g?"right":"left");let E=[];if(b)if(t.type!==3&&t.calculated_type!==3&&!h.wrap&&!t.merge_area){let O=m.width-s+this.cell_edge_buffer,j=0,q=0;R==="center"?j=q=O/2:R==="right"?j=O:q=O;let J=r.column,w=r.column;for(;q>0&&J<this.layout.last_column;){J++;let F={row:r.row,column:J},K=this.view.active_sheet.CellData(F),Q=this.layout.ColumnWidth(J);if(q-=Q,K&&!K.type&&!K.calculated_type)E.push({address:F,cell:K,grid:new U(y,0,Q,o),background:new U(y-1,0,Q,o-1),border:new U(y,0,Q,o)}),y+=Q,K.render_clean[this.view.view_index]=!0,K.renderer_data={overflowed:!0};else{k=!0;break}}for(J>e.last_cell.column&&(l.tile_overflow_right=!0);j>0&&w>=1;){w--;let F={row:r.row,column:w},K=this.view.active_sheet.CellData(F),Q=this.layout.ColumnWidth(w);if(j-=Q,K&&!K.type&&!K.calculated_type)x-=Q,E.push({address:F,cell:K,grid:new U(x,0,Q,o),background:new U(x,0,Q,o-1),border:new U(x,0,Q,o)});else{k=!0;break}}w<e.first_cell.column&&(l.tile_overflow_left=!0),this.overflow_areas.push({head:{...r},tile:e,area:new _({row:r.row,column:w},{row:r.row,column:J})})}else k=!g;let v=!1,A=i;(l.tile_overflow_bottom||l.tile_overflow_left||l.tile_overflow_right)&&(v=!0,l.width=y-x,l.height=o,l.left=x,this.EnsureBuffer(l.width+1,o+1,-x),i=this.buffer_context,i.font=p.base),this.RenderCellBackground(!!t.note,r,i,h,s,o,n,a);for(let S of E)S.cell.style?.fill&&zt(S.cell.style.fill)&&!this.options.grid_over_background?(i.fillStyle=T(this.theme,S.cell.style.fill,0),i.fillRect(S.grid.left,S.grid.top,S.grid.width,S.grid.height)):(i.fillStyle=this.theme.grid_color||"",i.fillRect(S.grid.left,S.grid.top,S.grid.width,S.grid.height),this.view.active_sheet.image?this.PaintBackgroundImage(i,this.view.active_sheet.image,n+S.background.left,a+S.background.top,S.background.width,S.background.height,S.background.left,S.background.top,0):(i.fillStyle=this.theme.grid_cell?.fill?T(this.theme,this.theme.grid_cell.fill,0):"",i.fillRect(S.background.left,S.background.top,S.background.width,S.background.height))),S.cell.style&&this.RenderCellBorders(S.address,i,S.cell.style,S.border.left,S.border.top,S.border.width,S.border.height);if(h.databar&&o>7&&s>9){let S=h.databar;if(S){let O={x:4,y:3};i.fillStyle=T(this.theme,S.fill);let j=O.y,q=o-(O.y*2+1),J=O.x,w=0;S.zero>0?(J=J+S.zero*(s-(O.x*2+1)),S.value>S.zero?w=(s-(O.x*2+1))*(S.value-S.zero):(S.negative&&(i.fillStyle=T(this.theme,S.negative)),w=(s-(O.x*2+1))*(S.zero-S.value),J-=w)):w=(s-(O.x*2+1))*S.value,i.fillRect(J,j,w,q)}}let C=he(p.base,u.variants);i.lineWidth=1,i.strokeStyle=i.fillStyle=m.format?m.format:T(this.theme,h.text,1),i.beginPath();let I=this.cell_edge_buffer,G=1,me=m.strings.length,Tt=me*C.height*G;k=(k||Tt>=o)&&!v,k&&(i.save(),i.beginPath(),i.moveTo(x+1.5,0),i.lineTo(x+1.5,o),i.lineTo(y-1.5,o),i.lineTo(y-1.5,0),i.clip()),i.beginPath();let Ae=Math.round(o-C.descent-2+-G*C.height*(me-1));switch(h.vertical_align){case"top":Ae=Math.round(2+C.ascent);break;case"middle":Ae=Math.round((o-Tt)/2+C.ascent)-1.5;break}if(!h.databar?.hide_values)if((t.type===3||t.calculated_type===3||t.type===8||t.calculated_type===8)&&b){let S=Math.floor((s-2*this.cell_edge_buffer)/C.hash),O="";for(let q=0;q<S;q++)O+="#";let j=i.measureText(O).width;R==="center"?I=Math.round((s-j)/2):R==="right"&&(I=s-this.cell_edge_buffer-j),i.fillText(O,I,Ae)}else{let S=Ae;for(let O of m.strings){let j=0;for(let F of O)j+=F.width;R==="center"?I=Math.round((s-j)/2):R==="right"&&(I=s-this.cell_edge_buffer-j);let q=S+2.5,J=Math.floor(S-C.ascent*1/3)+.5,w=I;for(let F of O)F.strong&&F.emphasis?i.font=p.strong_emphasis:F.strong?i.font=p.strong:F.emphasis?i.font=p.emphasis:i.font=p.base,F.hidden||(F.text&&i.fillText(F.text,w,S),h.underline&&(i.moveTo(w,q),i.lineTo(w+F.width,q)),(h.strike||F.strike)&&(i.moveTo(w,J),i.lineTo(w+F.width,J)),d&&(F.left=w,F.top=S-C.ascent,F.height=C.height)),w+=F.width;S+=G*C.height}}if(i.stroke(),k)i.restore();else if(v){let S=this.layout.dpr;A.drawImage(this.buffer_canvas,0,0,(l.width||0)*S,o*S,x,0,l.width||0,o)}return l}};var $e=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,...i){this.sheets_.splice(e,t,...i),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 Je=class{constructor(e){this.parser=e}named=new Map;get list(){return this.named.values()}SetNamedExpression(e,t,i){return this.SetName({type:"expression",name:e,expression:t,scope:i})}SetNamedRange(e,t,i){return this.SetName({type:"range",name:e,area:new _(t.start,t.end),scope:i})}SetName(e){let t=e.name;return this.ValidateNamed(t)?(this.named.set(this.ScopedName(t,e.scope),e),!0):(console.warn("invalid name",{name:t}),!1)}ScopedName(e,t){return typeof t=="number"?t+":"+e.toLowerCase():e.toLowerCase()}ClearName(e,t){typeof t=="number"?this.named.delete(this.ScopedName(e,t)):this.named.delete(e.toLowerCase())}RemoveRangesForSheet(e){let t=[];for(let[i,r]of this.named)(r.type==="range"&&r.area.start.sheet_id===e||r.scope===e)&&t.push(i);for(let i of t)this.named.delete(i)}Reset(){this.named.clear()}Get_(e,t,i=!1){return i?this.named.get(this.ScopedName(e,t)):this.named.get(this.ScopedName(e,t))??this.named.get(e.toLowerCase())}ValidateNamed(e){return e=e.trim().toUpperCase(),!e.length||/[^A-Z\d_.?]/.test(e)||/^[^A-Z_]/.test(e)||e==="R"||e==="C"||/^[A-Z]{1,3}[1-9]\d*$/.test(e)||/^R[[\]\d]+C/.test(e)?!1:e}MatchSelection(e,t){if(!e.start.sheet_id)throw new Error("match selection without sheet id");let i;for(let r of this.named.values())if(r.type==="range"&&r.area.start.sheet_id===e.start.sheet_id&&(e.Equals(r.area)&&(i=r.name),t?.Equals(r.area)))return r.name;return i}PatchNamedRanges(e,t,i,r,s){let o=[...this.list];for(let n of o){if(n.type==="expression")continue;let a=n.name,l=n.area;if(l.start.sheet_id!==e){console.info("skipping name",a);continue}if(i&&t<=l.end.column){if(i>0)t<=l.start.column?l.Shift(0,i):t>l.start.column&&t<=l.end.column?l.ConsumeAddress({row:l.end.row,column:l.end.column+i}):console.warn("PNR X case 1",t,i,JSON.stringify(l));else if(i<0)if(t-i<=l.start.column)l.Shift(0,i);else if(t<=l.start.column&&t-i>l.end.column)this.ClearName(a);else if(t<=l.start.column){let c=t-i-1;this.SetName({type:"range",area:new _({row:l.start.row,column:c+1+i,sheet_id:e},{row:l.end.row,column:l.end.column+i}),name:a})}else t<=l.end.column?t-i-1>=l.end.column?this.SetName({type:"range",area:new _({row:l.start.row,column:l.start.column,sheet_id:e},{row:l.end.row,column:t-1}),name:a}):this.SetName({type:"range",name:a,area:new _({row:l.start.row,column:l.start.column,sheet_id:e},{row:l.end.row,column:l.start.column+l.columns+i-1})}):console.warn("PNR X case 2",t,i,JSON.stringify(l))}if(s&&r<=l.end.row){if(s>0)r<=l.start.row?l.Shift(s,0):r>l.start.row&&r<=l.end.row?l.ConsumeAddress({row:l.end.row+s,column:l.end.column}):console.warn("PNR X case 3",r,s,JSON.stringify(l));else if(s<0)if(r-s<=l.start.row)l.Shift(s,0);else if(r<=l.start.row&&r-s>l.end.row)this.ClearName(a);else if(r<=l.start.row){let c=r-s-1;this.SetNamedRange(a,new _({column:l.start.column,row:c+1+s,sheet_id:e},{column:l.end.column,row:l.end.row+s}))}else r<=l.end.row?r-s-1>=l.end.row?this.SetNamedRange(a,new _({column:l.start.column,row:l.start.row,sheet_id:e},{column:l.end.column,row:r-1})):this.SetNamedRange(a,new _({column:l.start.column,row:l.start.row,sheet_id:e},{column:l.end.column,row:l.start.row+l.rows+s-1})):console.warn("PNR X case 4",r,s,JSON.stringify(l))}}}};var Ct=class{parser=new Ee;language_model;document_name;user_data;sheets=new $e;named=new Je(this.parser);macro_functions=new Map;view_count=0;theme_style_properties=JSON.parse(JSON.stringify(D.DefaultProperties));tables=new Map;GetName(e,t){let i=e.split(/!/);if(i.length===1)return this.named.Get_(e,t);let r=i[0];/^'.*?'$/.test(r)&&(r=r.substring(1,r.length-1));let s=this.sheets.ID(r);return this.named.Get_(i[1],s||0,!1)}UnserializeNames(e,t,i=!1){this.parser.Save(),i&&this.parser.SetLocaleSettings(".",",");for(let r of e){if(!r.expression)continue;let s=this.parser.Parse(r.expression);if(s.expression){let o=typeof r.scope=="string"?this.sheets.ID(r.scope):void 0;if(s.expression.type==="address"||s.expression.type==="range"){let[n,a]=s.expression.type==="range"?[s.expression.start,s.expression.end]:[s.expression,s.expression];if(n.sheet)if(/^\[\d+\]/.test(n.sheet))console.warn("named range refers to an external file");else{let l=new _({...n,sheet_id:this.sheets.ID(n.sheet)},a);l.start.sheet_id?this.named.SetNamedRange(r.name,l,o):console.warn("missing sheet ID?",n)}else console.warn("missing sheet name?",n)}else this.parser.Walk(s.expression,n=>n.type==="address"||n.type==="range"?(n.type==="range"&&(n=n.start),n.sheet_id||n.sheet&&(n.sheet_id=this.sheets.ID(n.sheet)),n.sheet_id||(n.sheet_id=t?.id),!1):!0),this.named.SetNamedExpression(r.name,s.expression,o)}}this.parser.Restore()}SerializeNames(e){let t=[];for(let i of this.named.list){let r={name:i.name,expression:"",type:i.type};if(i.scope&&(r.scope=this.sheets.Name(i.scope)),i.type==="expression")this.parser.Walk(i.expression,s=>{if(s.type==="address"||s.type==="range"){let o=s.type==="range"?s.start:s;return o.absolute_column=o.absolute_row=!0,o.sheet||(o.sheet_id&&(o.sheet=this.sheets.Name(o.sheet_id)),o.sheet||(o.sheet=e?.name)),s.type==="range"&&(s.end.absolute_column=s.end.absolute_row=!0),!1}return!0}),r.expression=this.parser.Render(i.expression,{missing:""});else{let s={start:{...i.area.start,absolute_column:!0,absolute_row:!0},end:{...i.area.end,absolute_column:!0,absolute_row:!0}};r.expression=this.AddressToLabel(s)}t.push(r)}return t}ResolveStructuredReference(e,t){let i;if(e.table?i=this.tables.get(e.table.toLowerCase()):t.sheet_id&&(i=this.sheets.Find(t.sheet_id)?.CellData(t)?.table),!i)return;let r=e.column.toLowerCase(),s=-1;if(i.columns){for(let o=0;o<i.columns.length;o++)if(r===i.columns[o]){s=i.area.start.column+o;break}}if(!(s<0))if(e.scope==="row"){let o=t.row;return o<i.area.start.row||o>i.area.end.row?void 0:{label:e.label,type:"address",row:o,column:s,sheet_id:i.area.start.sheet_id,id:e.id,position:e.position}}else{let o=i.area.start.row,n=i.area.end.row;return e.scope==="column"&&(o++,i.totals_row&&n--),{label:e.label,type:"range",position:e.position,id:e.id,start:{type:"address",row:o,column:s,sheet_id:i.area.start.sheet_id,label:e.label,position:e.position,id:0},end:{type:"address",row:n,column:s,label:e.label,position:e.position,id:0}}}}AddressToLabel(e){let t=L(e)?e:e.start,i=L(e)?[_.CellAddressToLabel(e)]:[_.CellAddressToLabel(e.start),_.CellAddressToLabel(e.end)],r=this.sheets.Find(t.sheet_id||0),s=r?.name?ue.test(r.name)?`'${r.name}'`:r.name:"";return s+(s?"!":"")+(i[0]===i[1]?i[0]:i.join(":"))}ResolveSheetID(e,t,i){let r=e.type==="address"?e:e.start;if(r.sheet_id)return!0;if(r.sheet){let s=this.sheets.Find(r.sheet);if(s)return r.sheet_id=s.id,!0}else{if(t?.sheet_id)return r.sheet_id=t.sheet_id,!0;if(i?.id)return r.sheet_id=i.id,!0}return!1}ResolveArea(e,t,i){let r=this.ResolveAddress(e,t,i);return L(r)?new _(r):new _(r.start,r.end)}ResolveAddress(e,t,i){if(typeof e=="string"){i?.r1c1&&(this.parser.Save(),this.parser.flags.r1c1=!0);let r=this.parser.Parse(e);if(i?.r1c1&&this.parser.Restore(),r.expression&&r.expression.type==="address")return this.ResolveSheetID(r.expression,void 0,t),{row:r.expression.row,column:r.expression.column,sheet_id:r.expression.sheet_id};if(r.expression&&r.expression.type==="range")return this.ResolveSheetID(r.expression,void 0,t),{start:{row:r.expression.start.row,column:r.expression.start.column,sheet_id:r.expression.start.sheet_id},end:{row:r.expression.end.row,column:r.expression.end.column}};if(r.expression&&r.expression.type==="identifier"){let s=this.GetName(r.expression.name,t.id);if(s?.type==="range")return s.area}return{row:0,column:0}}return e}AddConnectedElement(e){let t=this.connected_element_id++;return this.connected_elements.set(t,e),t}RemoveConnectedElement(e){let t=this.connected_elements.get(e);return this.connected_elements.delete(e),t}connected_element_id=100;connected_elements=new Map;language_map;reverse_language_map;SetLanguageMap(e){if(!e)this.language_map=this.reverse_language_map=void 0;else{let t=Object.keys(e);this.language_map={};for(let i of t)this.language_map[i.toUpperCase()]=e[i];this.reverse_language_map={};for(let i of t){let r=e[i];this.reverse_language_map[r.toUpperCase()]=i}}}TranslateFunction(e,t){return this.language_map?this.TranslateInternal(e,this.language_map,this.language_model?.boolean_true,this.language_model?.boolean_false,t):e}UntranslateFunction(e,t){return this.reverse_language_map?this.TranslateInternal(e,this.reverse_language_map,"TRUE","FALSE",t):e}UntranslateData(e,t){return Array.isArray(e)?Me(e)?e.map(i=>i.map(r=>r&&typeof r=="string"&&r[0]==="="?this.UntranslateFunction(r,t):r)):e.map(i=>i&&typeof i=="string"&&i[0]==="="?this.UntranslateFunction(i,t):i):(e&&typeof e=="string"&&e[0]==="="&&(e=this.UntranslateFunction(e,t)),e)}TranslateInternal(e,t,i,r,s){this.parser.Save(),this.parser.flags.r1c1=s?.r1c1;let o=this.parser.Parse(e);if(o.expression){let n=!1;if(this.parser.Walk(o.expression,a=>{if(a.type==="call"){let l=t[a.name.toUpperCase()];l&&(n=!0,a.name=l)}else a.type==="literal"&&typeof a.value=="boolean"&&(n=!0);return!0}),n)return"="+this.parser.Render(o.expression,{missing:"",boolean_true:i,boolean_false:r,r1c1:s?.r1c1})}return this.parser.Restore(),e}SetLanguage(e){if(this.language_model=e,!e)this.SetLanguageMap(),this.parser.flags.boolean_true="TRUE",this.parser.flags.boolean_false="FALSE";else{let t={};if(e.functions)for(let i of e.functions||[])t[i.base.toUpperCase()]=i.name;this.SetLanguageMap(t),e.boolean_false||(e.boolean_false=t.FALSE),e.boolean_true||(e.boolean_true=t.TRUE),this.parser.flags.boolean_true=e.boolean_true||"TRUE",this.parser.flags.boolean_false=e.boolean_false||"FALSE"}for(let t of this.sheets.list)t.FlushCellStyles()}};var Zt=()=>({target:{row:0,column:0},area:new _({row:0,column:0}),empty:!0});var or=100,Yt={move_with_cells:!0,resize_with_cells:!0,movable:!0,resizable:!0,removable:!0,selectable:!0},ae=class{data={...Yt};get key(){return this.key_}rect;scaled_rect;temp={};view=[];dirty;key_=or++;constructor(e={}){this.data={...Yt,...JSON.parse(JSON.stringify(e))},e.rect&&(this.rect=U.Create(e.rect))}toJSON(){return{...this.data,rect:this.rect}}};var nr=100,ei=60,B=class f{static base_id=100;static default_sheet_name="Sheet1";default_style_properties;annotations=[];freeze={rows:0,columns:0};visible=!0;default_column_width=100;default_row_height=25;cells=new De;selection=Zt();scroll_offset={x:0,y:0};name=f.default_sheet_name;tab_color;background_image;_image=void 0;flush_conditional_formats=!1;get image(){return this._image}conditional_formats=[];data_validation=[];outline;id_;row_height_map=new Map;column_width_=[];row_headers=[];column_headers=[];row_header_width=100;column_header_height=25;style_map=[];style_json_map=[];sheet_style={};row_styles={};column_styles={};row_pattern=[];cell_style=[];conditional_format_cache=[];conditional_format_checklist=[];get header_offset(){return{x:this.row_header_width,y:this.column_header_height}}get rows(){return this.cells.rows}get columns(){return this.cells.columns}get id(){return this.id_}set id(e){this.id_=e,this.id>=f.base_id&&(f.base_id=this.id+1)}constructor(e){this.default_style_properties=e,this.default_column_width=nr,this.row_header_width=ei,this.id_=f.base_id++}static Reset(){this.base_id=100}static Blank(e,t,i=30,r=20,s){let o=new f(e);return s&&o.UpdateDefaultRowHeight(s),t&&(o.name=t),i=Math.max(i,1),r=Math.max(r,1),o.cells.EnsureCell({row:i-1,column:r-1}),o}static UpdateStyle(e){if(typeof e.horizontal_align=="number"){let t=["","left","center","right"];e.horizontal_align=t[e.horizontal_align]||void 0}if(typeof e.vertical_align=="number"){let t=["","top","bottom","middle"];e.vertical_align=t[e.vertical_align]||void 0}}static FromJSON(e,t,i){let r=typeof e=="string"?JSON.parse(e):e,s=(l,c)=>{Object.keys(c).forEach(h=>{let d=Number(h)||0;l[d]=c[h]})};i||(i=new f(t)),r.default_column_width&&(i.default_column_width=r.default_column_width),r.default_row_height&&(i.default_row_height=r.default_row_height),r.conditional_formats&&(i.conditional_formats=r.conditional_formats),i.data_validation=(r.data_validations||[]).map(l=>({...l,target:(l.target||[]).map(c=>new _(c.start,c.end))})),r.id&&(i.id=r.id),r.name&&(i.name=r.name),r.tab_color&&(i.tab_color=r.tab_color),r.background_image&&(i.background_image=r.background_image);let o=l=>{let c=l;this.UpdateStyle(c),(c.font_size_value||c.font_size_unit)&&(c.font_size={unit:c.font_size_unit||"pt",value:c.font_size_value||10},c.font_size_unit=void 0,c.font_size_value=void 0),c.font_bold&&(c.bold=!0,c.font_bold=void 0),c.font_italic&&(c.italic=!0,c.font_italic=void 0),c.font_underline&&(c.underline=!0,c.font_underline=void 0),c.font_strike&&(c.strike=!0,c.font_strike=void 0),c.text_color&&(c.text_color!=="none"&&(c.text={text:c.text_color}),c.text_color=void 0),c.background&&(c.background!=="none"&&(c.fill={text:c.background}),c.background=void 0),c.border_top_color&&(c.border_top_color!=="none"&&(c.border_top_fill={text:c.border_top_color}),c.border_top_color=void 0),c.border_left_color&&(c.border_left_color!=="none"&&(c.border_left_fill={text:c.border_left_color}),c.border_left_color=void 0),c.border_bottom_color&&(c.border_bottom_color!=="none"&&(c.border_bottom_fill={text:c.border_bottom_color}),c.border_bottom_color=void 0),c.border_right_color&&(c.border_right_color!=="none"&&(c.border_right_fill={text:c.border_right_color}),c.border_right_color=void 0)},n=r.styles||r.cell_style_refs||[];for(let l of n)o(l);if(i.cell_style=[],n&&(r.cell_styles||[]).forEach(l=>{typeof l.ref=="number"&&(l.style=JSON.parse(JSON.stringify(n[l.ref])))}),i.cells.FromJSON(r.data),r.rows&&i.cells.EnsureRow(r.rows-1),r.columns&&i.cells.EnsureColumn(r.columns-1),r.data)if(ut(r.data))for(let l of r.data)l.style_ref&&(i.cell_style[l.column]||(i.cell_style[l.column]=[]),i.cell_style[l.column][l.row]=JSON.parse(JSON.stringify(n[l.style_ref])));else if(ft(r.data))for(let l of r.data){let c=l.row;for(let h of l.cells){let d=h.column;h.style_ref&&(i.cell_style[d]||(i.cell_style[d]=[]),i.cell_style[d][c]=JSON.parse(JSON.stringify(n[h.style_ref])))}}else for(let l of r.data){let c=l.column;for(let h of l.cells){let d=h.row;h.style_ref&&(i.cell_style[c]||(i.cell_style[c]=[]),i.cell_style[c][d]=JSON.parse(JSON.stringify(n[h.style_ref])))}}i.freeze.rows=0,i.freeze.columns=0,r.freeze&&(i.freeze.rows=r.freeze.rows||0,i.freeze.columns=r.freeze.columns||0),i.scroll_offset=r.scroll?{...r.scroll}:{x:0,y:0};for(let l of r.cell_styles||[])if(l.style&&(i.cell_style[l.column]||(i.cell_style[l.column]=[]),i.cell_style[l.column][l.row]=l.style,l.rows))for(let c=1;c<l.rows;c++)i.cell_style[l.column][l.row+c]=JSON.parse(JSON.stringify(l.style));i.sheet_style=r.sheet_style||{},i.column_styles={},i.row_styles={};let a=(l,c)=>{for(let h of Object.keys(l)){let d=Number(h),u=l[d];if(typeof u=="number"){let p=n[u];p&&(c[d]=JSON.parse(JSON.stringify(p)),o(c[d]))}else u&&(c[d]=u,o(c[d]))}};a(r.row_style,i.row_styles),a(r.column_style,i.column_styles),i.row_pattern=r.row_pattern||[],o(i.sheet_style||{});for(let l of i.row_pattern)o(l);if(i.row_height_map=new Map,r.row_height)for(let[l,c]of Object.entries(r.row_height))i.row_height_map.set(Number(l),c);if(i.row_height_map.size>0){let l=Math.max(...i.row_height_map.keys());i.cells.EnsureRow(l)}return i.column_width_=[],s(i.column_width_,r.column_width||{}),i.column_width_.length&&i.cells.EnsureColumn(i.column_width_.length-1),i.annotations=(r.annotations||[]).map(l=>new ae(l)),r.selection&&(i.selection=JSON.parse(JSON.stringify(r.selection))),i.visible=!0,typeof r.visible<"u"&&(i.visible=!!r.visible),i}AddValidation(e){this.data_validation.push({...e,target:(e.target||[]).map(t=>new _(t.start,t.end))})}RemoveValidations(e){let t=new _(e.start,e.end);this.data_validation=this.data_validation.filter(i=>(i.target=i.target.filter(r=>!t.Equals2(r)),i.target.length>0))}GetValidation(e){let t=[];for(let i of this.data_validation)for(let r of i.target)if(r.Contains(e)){t.push(i);break}return t}Activate(e){if(this.background_image){let t=Vt(this.background_image);t&&(this._image=e.Create("img"),this._image.src=t)}}MergeCells(e){e=e.Clone();let t=[...this.cells.Iterate(e,!0)];for(let[i,r]of t.entries())r.merge_area=e,r.render_clean=[],i&&r.Reset()}UnmergeCells(e){for(let t of this.cells.Iterate(e,!1))if(!t.merge_area||!e.Equals(t.merge_area)){console.warn("area mismatch");return}for(let t of this.cells.Iterate(e,!1))t.merge_area=void 0,t.render_clean=[]}UpdateDefaultRowHeight(e,t=1){if(typeof window<"u"){let i=D.Composite([this.default_style_properties,this.sheet_style]),r=D.CompositeFont(e.grid_cell_font_size,i,t,e),o=he(r.font,r.variants).height*1.25;this.default_row_height<o&&(this.default_row_height=o)}}SetRowHeaders(e){this.row_headers=e.map(t=>t===void 0?"":t.toString()),this.row_headers&&this.cells.EnsureRow(this.row_headers.length-1)}SetColumnHeaders(e){this.column_headers=e.map(t=>t===void 0?"":t.toString()),e&&this.cells.EnsureColumn(e.length-1)}RowHeader(e){return this.row_headers?this.row_headers.length>e?this.row_headers[e]:"":e+1}ColumnHeader(e){let t="";if(this.column_headers)return this.column_headers.length>e?this.column_headers[e]:"";for(;;){let i=e%26;if(t=String.fromCharCode(65+i)+t,e=Math.floor(e/26),e)e--;else break}return t}GetRowHeight(e){let t=this.row_height_map.get(e);return typeof t>"u"?this.default_row_height:t}SetRowHeight(e,t){return this.row_height_map.set(e,t),this.cells.EnsureRow(e),t}GetColumnWidth(e){let t=this.column_width_[e];return typeof t>"u"?this.default_column_width:t}SetColumnWidth(e,t){return this.column_width_[e]=t,this.cells.EnsureColumn(e),t}Delta(e,t){let i={},r=[...Object.keys(e),...Object.keys(t)];for(let s of r){let o=e[s],n=t[s];typeof o=="object"&&typeof n=="object"?JSON.stringify(o)!==JSON.stringify(n)&&(i[s]=n):o!==n&&(i[s]=n)}return i}UpdateCellStyle(e,t,i=!0){let{row:r,column:s}=e;this.cell_style[s]||(this.cell_style[s]=[]);let o=this.CompositeStyleForCell(e,!1,!1,void 0,!1),n=D.Composite([this.default_style_properties,o,D.Merge(this.cell_style[s][r]||{},t,i)]),a=this.Delta(o,n);this.cell_style[s][r]=a,this.BleedFlush({start:e,end:e})}Invalidate(e){for(let t of this.cells.Iterate(this.RealArea(e),!1))t.render_clean=[]}UpdateAreaStyle(e,t={},i=!0){if(e)if(e.entire_sheet)this.UpdateSheetStyle(t,i);else if(e.entire_column)for(let r=e.start.column;r<=e.end.column;r++)this.UpdateColumnStyle(r,t,i);else if(e.entire_row)for(let r=e.start.row;r<=e.end.row;r++)this.UpdateRowStyle(r,t,i);else for(let r of e)this.UpdateCellStyle(r,t,i)}HasCellStyle(e){return!!(this.cell_style[e.column]&&this.cell_style[e.column][e.row]||this.row_styles[e.row]||this.column_styles[e.column]||this.row_pattern.length)}NextVisibleColumn(e){for(++e;this.column_width_[e]===0;e++);return e}PreviousVisibleColumn(e){for(--e;e>=0&&this.column_width_[e]===0;e--);return e}NextVisibleRow(e){for(++e;this.GetRowHeight(e)===0;e++);return e}PreviousVisibleRow(e){for(--e;e>=0&&this.GetRowHeight(e)===0;e--);return e}TableRow(e,t){let i={alternate:!1,header:t===e.area.start.row,last:!1,totals:e.totals_row&&t===e.area.end.row};if(i.header||i.totals)return i;if(!(e.totals_row&&this.GetRowHeight(e.area.end.row)>0)){let n=e.area.end.row;for(;n>=e.area.start.row;n--)if(this.GetRowHeight(n)){i.last=n===t;break}}let s=e.area.start.row+1,o=t-s;for(let[n,a]of this.row_height_map.entries())if(!(n<s)){if(n>e.area.end.row)break;a||o--}return i.alternate=o%2===1,i}SurroundingStyle(e,t){let i=[{},{},{},{},{},{},{},{},{},{}],r=e.column+1,s=e.column-1,o=e.row+1,n=e.row-1;for(;this.column_width_[r]===0;r++);for(;this.GetRowHeight(o)===0;o++);for(;s>=0&&this.column_width_[s]===0;s--);for(;n>=0&&this.GetRowHeight(n)===0;n--);return s>=0&&n>=0&&(i[7]=this.CellStyleData({row:n,column:s},t)||{}),s>=0&&(i[4]=this.CellStyleData({row:e.row,column:s},t)||{},i[1]=this.CellStyleData({row:o,column:s},t)||{}),n>=0&&(i[8]=this.CellStyleData({row:n,column:e.column},t)||{},i[9]=this.CellStyleData({row:n,column:r},t)||{}),i[6]=this.CellStyleData({row:e.row,column:r},t)||{},i[2]=this.CellStyleData({row:o,column:e.column},t)||{},i[3]=this.CellStyleData({row:o,column:r},t)||{},i}CellStyleData(e,t){let i=this.cells.GetCell(e);if(i){if(!i.style){let r=this.GetStyleIndex(this.CompositeStyleForCell(e));i.style=this.style_map[r]}if(i.table){let r=i.table.theme||t;if(r){let s=JSON.parse(JSON.stringify(i.style)),o=this.TableRow(i.table,e.row);return o.header?r.header&&(s=D.Composite([s,r.header])):o.totals?r.total&&(s=D.Composite([s,r.total])):o.alternate?r.odd&&(s=D.Composite([s,r.odd])):r.even&&(s=D.Composite([s,r.even])),s}}return i.style}}GetCopyStyle(e){return this.CompositeStyleForCell(e,!0,!1,void 0,!1)}CellData(e){let t=this.cells.EnsureCell(e);if(t.rendered_type)return t;let i,r;if(t.calculated_type?(r=t.calculated,i=t.calculated_type):(r=t.value,i=t.type),!t.style){let s=this.GetStyleIndex(this.CompositeStyleForCell(e));t.style=this.style_map[s]}if(!i||r===null||typeof r>"u")t.formatted="",t.rendered_type=2;else if(i===3)isNaN(r)?t.formatted=typeof t.style.nan>"u"?"NaN":t.style.nan:t.formatted=this.FormatNumber(r,t.style.number_format),t.rendered_type=3;else if(i===7)t.formatted="#"+(r||"ERR?"),t.rendered_type=7;else if(i===4)t.formatted=r.toString().toUpperCase(),t.rendered_type=4;else if(i===1&&t.calculated===void 0)t.formatted="",t.rendered_type=2;else if(i===8){let s=r;if(isNaN(s.real)||isNaN(s.imaginary))t.formatted=typeof t.style.nan>"u"?"NaN":t.style.nan;else{let o=P.Get(t.style.number_format||"",!0);t.formatted=o.FormatComplex(s)}t.rendered_type=8}else if(i===10){if(isNaN(r.value))t.formatted=typeof t.style.nan>"u"?"NaN":t.style.nan,t.formatted+=" "+r.unit;else{let s=P.Get(t.style.number_format||"",!0);t.formatted=s.FormatDimensionedQuantity(r)}t.rendered_type=10}else i===6?(t.formatted="\u{1D453}()",t.rendered_type=2):(t.formatted=this.FormatNumber(r,t.style.number_format),t.rendered_type=2);return t}FormatNumber(e,t=""){let i=P.Get(t).FormatParts(e);return i.length?i.length===1&&!i[0].flag?i[0].text||"":i:""}SetHeaderSize(e=ei,t=this.default_row_height){this.row_header_width=e,this.column_header_height=t}GetStyle(e){return this.style_map[e]}InsertRows(e=0,t=1){if(e)for(let l=0;l<this.cells.columns;l++){let c=this.cells.GetCell({row:e-1,column:l},!1);if(c&&c.area){let h=this.cells.GetCell({row:e,column:l},!1);if(h&&h.area&&h.area.Equals(c.area))return!1}}t<0?this.cells.DeleteRows(e,-t):this.cells.InsertRows(e,t);let i={},r={};for(let l=e;l<this.cells.rows;l++)for(let c=0;c<this.cells.columns;c++){let h=this.cells.GetCell({row:l,column:c},!1);h&&(h.area&&!r[h.area.spreadsheet_label]&&(r[h.area.spreadsheet_label]=h.area),h.merge_area&&!i[h.merge_area.spreadsheet_label]&&(i[h.merge_area.spreadsheet_label]=h.merge_area))}for(let l of Object.keys(r)){let c=r[l],h=new _({row:c.start.row+t,column:c.start.column},{row:c.end.row+t,column:c.end.column});for(let d of h){let u=this.cells.GetCell(d,!0);u.area=h}}for(let l of Object.keys(i)){let c=i[l],h={row:c.start.row,column:c.start.column};c.start.row>=e&&(h.row+=t);let d=new _(h,{row:c.end.row+t,column:c.end.column});for(let u of d){let p=this.cells.GetCell(u,!0);p.merge_area=d}}let s=Object.keys(this.row_styles),o={};s.forEach(l=>{let c=Number(l);c<e?o[c]=this.row_styles[c]:t<0&&c<e-t||(o[c+t]=this.row_styles[c])}),this.row_styles=o;let n=[];if(t<0)n=[e,-t];else{n=[e,0];for(let l=0;l<t;l++)n.push(void 0)}this.cell_style.forEach(l=>{l&&l.length>=e&&l.splice.apply(l,n)});let a=new Map;if(t>0)for(let[l,c]of this.row_height_map)l>=e?a.set(l+t,c):a.set(l,c);else if(t<0)for(let[l,c]of this.row_height_map)l>=e?l>=e-t&&a.set(l+t,c):a.set(l,c);return this.row_height_map=a,this.FlushCellStyles(),!0}InsertColumns(e=0,t=1){if(e)for(let a=0;a<this.cells.rows;a++){let l=this.cells.GetCell({row:a,column:e-1},!1);if(l&&l.area){let c=this.cells.GetCell({row:a,column:e},!1);if(c&&c.area&&c.area.Equals(l.area))return!1}}t<0?this.cells.DeleteColumns(e,-t):this.cells.InsertColumns(e,t);let i={},r={};for(let a=e;a<this.cells.columns;a++)for(let l=0;l<this.cells.rows;l++){let c=this.cells.GetCell({row:l,column:a},!1);c&&(c.area&&!r[c.area.spreadsheet_label]&&(r[c.area.spreadsheet_label]=c.area),c.merge_area&&!i[c.merge_area.spreadsheet_label]&&(i[c.merge_area.spreadsheet_label]=c.merge_area))}for(let a of Object.keys(r)){let l=r[a],c=new _({row:l.start.row,column:l.start.column+t},{row:l.end.row,column:l.end.column+t});for(let h of c){let d=this.cells.GetCell(h,!0);d.area=c}}for(let a of Object.keys(i)){let l=i[a],c={row:l.start.row,column:l.start.column};l.start.column>=e&&(c.column+=t);let h=new _(c,{row:l.end.row,column:l.end.column+t});for(let d of h){let u=this.cells.GetCell(d,!0);u.merge_area=h}}let s=Object.keys(this.column_styles),o={};s.forEach(a=>{let l=Number(a);l<e?o[l]=this.column_styles[l]:t<0&&l<e-t||(o[l+t]=this.column_styles[l])}),this.column_styles=o;let n=[];if(t<0)n=[e,-t];else{n=[e,0];for(let a=0;a<t;a++)n.push(void 0)}return this.cell_style.splice.apply(this.cell_style,n),this.column_width_.splice.apply(this.column_width_,n),this.FlushCellStyles(),!0}ClearArea(e){for(let t of this.cells.Iterate(this.RealArea(e),!1))t.Reset()}SetAreaValues2(e,t){e=this.RealArea(e),this.cells.SetArea(e,t)}SetArrayValue(e,t){e=this.RealArea(e);for(let r of this.cells.Iterate(e,!0))r.SetArray(e);this.cells.GetCell(e.start,!0).SetArrayHead(e,t)}SetCellValue(e,t){this.cells.GetCell(e,!0).Set(t)}TablesFromArea(e,t=!1){if(L(e)){let r=this.cells.GetCell(e,!1);return r?.table&&(!t||e.row===r.table.area.start.row)?[r.table]:[]}let i=new Set;for(let r=e.start.row;r<=e.end.row;r++)for(let s=e.start.column;s<=e.end.column;s++){let o=this.cells.GetCell({row:r,column:s},!1);o?.table&&!i.has(o.table)&&(!t||r===o.table.area.start.row)&&i.add(o.table)}return Array.from(i.values())}RealArea(e,t=!1){let i=e.start,r=e.end;return e.entire_row&&(i.column=0,i.absolute_column=!1,r.column=this.cells.columns-1,r.absolute_column=!1),e.entire_column&&(i.row=0,i.absolute_row=!1,r.row=this.cells.rows-1,r.absolute_row=!1),t&&(r.row>=this.rows&&(r.row=this.rows-1,r.absolute_row=!1),r.column>=this.columns&&(r.column=this.columns-1,r.absolute_column=!1)),new _(i,r)}GetCellStyle(e,t=!1){if(L(e))return this.CompositeStyleForCell(e,!0,!1,t);if(e.start.row===e.end.row&&e.start.column===e.end.column)return[[this.CompositeStyleForCell(e.start,!0,!1,t)]];let i=[];for(let r=e.start.row;r<=e.end.row;r++){let s=[];for(let o=e.start.column;o<=e.end.column;o++)s.push(this.CompositeStyleForCell({row:r,column:o},!0,!1,t));i.push(s)}return i}FormattedCellValue(e){let t=this.CellData(e);if(t)return typeof t.formatted=="string"?t.formatted:t.formatted?t.formatted.map(i=>{switch(i.flag){case 1:return" ";case 2:return" ";default:return i.text}}).join(""):t.value}GetFormattedRange(e,t=e){if(e.row===t.row&&e.column===t.column)return this.FormattedCellValue(e);let i=[];for(let r=e.row;r<=t.row;r++){let s=[];for(let o=e.column;o<=t.column;o++)s.push(this.FormattedCellValue({row:r,column:o}));i.push(s)}return i}NumberFormatsAndColors(e,t){let i=r=>{r.number_format&&(t[r.number_format]=1),H(r.text)&&(e[r.text.text]=1),H(r.fill)&&(e[r.fill.text]=1),H(r.border_top_fill)&&(e[r.border_top_fill.text]=1),H(r.border_left_fill)&&(e[r.border_left_fill.text]=1),H(r.border_right_fill)&&(e[r.border_right_fill.text]=1),H(r.border_bottom_fill)&&(e[r.border_bottom_fill.text]=1)};i(this.sheet_style);for(let r in this.row_styles)i(this.row_styles[r]);for(let r in this.column_styles)i(this.column_styles[r]);for(let r of this.row_pattern)i(r);for(let r of this.cell_style)if(r)for(let s of r)s&&i(s)}CompressCellStyles(e){let t=[];for(let i=0;i<e.length;i++){let r=e[i];if(r)for(let s=0;s<r.length;s++){let o=r[s];if(o){let n=s+1;for(;n<r.length&&r[n]===o;n++);n>s+1?t.push({row:s,column:i,ref:o,rows:n-s}):t.push({row:s,column:i,ref:o}),s=n-1}}}return t}toJSON(e={}){let t=(v,A)=>{let C={};for(let I=0;I<v.length;I++)typeof v[I]<"u"&&v[I]!==A&&(C[I]=v[I]);if(Object.keys(C).length)return C},i=[{}],r={},s=[],o=JSON.stringify({});for(let v=0;v<this.cell_style.length;v++){let A=this.cell_style[v];if(A){s[v]=[];for(let C=0;C<A.length;C++)if(A[C]){let I=D.Serialize(A[C]);if(I!==o){let G=r[I];typeof G!="number"&&(r[I]=G=i.length,i.push(A[C])),s[v][C]=G}}}}let n=v=>{let A=D.Serialize(v);if(A===o)return 0;let C=r[A];return typeof C!="number"&&(r[A]=C=i.length,i.push(v)),C};i=JSON.parse(JSON.stringify(i));let a=JSON.parse(JSON.stringify(this.sheet_style)),l=JSON.parse(JSON.stringify(this.row_pattern)),c={},h={};for(let v of Object.keys(this.column_styles)){let A=Number(v),C=this.column_styles[A];if(C){let I=n(C);I&&(c[A]=I)}}if(this.row_pattern&&this.row_pattern.length&&e.apply_row_pattern){let v=this.rows+1;for(let A of Object.keys(this.row_styles)){let C=Number(A);!isNaN(C)&&C>=v&&(v=C+1)}for(let A=0;A<v;A++){let C=this.row_pattern[A%this.row_pattern.length],I=this.row_styles[A]||{},G=D.Composite([C,I]),me=n(G);me&&(h[A]=me)}}else for(let v of Object.keys(this.row_styles)){let A=Number(v),C=this.row_styles[A];if(C){let I=n(C);I&&(h[A]=I)}}let d=(v={},A={})=>{let C={...A,...v};if(H(C))return C.text=W.MeasureColorARGB(C.text),C;if(Ie(C))return C};if(e.export_colors){let v=[];for(let A of[i,[a],l])if(Array.isArray(A))for(let C of A)v.push(C);else for(let C of Object.keys(A))v.push(A[C]);for(let A of v){let C=d(A.border_top_fill,D.DefaultProperties.border_top_fill);C!==void 0&&(A.border_top_fill=C),C=d(A.border_left_fill,D.DefaultProperties.border_left_fill),C!==void 0&&(A.border_left_fill=C),C=d(A.border_right_fill,D.DefaultProperties.border_right_fill),C!==void 0&&(A.border_right_fill=C),C=d(A.border_bottom_fill,D.DefaultProperties.border_bottom_fill),C!==void 0&&(A.border_bottom_fill=C),H(A.fill)&&(A.fill.text=W.MeasureColorARGB(A.fill.text)),H(A.text)&&(A.text.text=W.MeasureColorARGB(A.text.text))}}let u={calculated_value:!!e.rendered_values,preserve_type:!!e.preserve_type,expand_arrays:!!e.expand_arrays,decorated_cells:!!e.decorated_cells,nested:!0,cell_style_refs:s,tables:!!e.tables},p=this.cells.toJSON(u),m=p.data,{rows:b,columns:y}=p;e.shrink?(b+=2,y+=1):(b=this.rows,y=this.columns);for(let v of this.annotations)v.data.extent||this.CalculateAnnotationExtent(v),v.data.extent&&(b=Math.max(b,v.data.extent.row+1),y=Math.max(y,v.data.extent.column+1));let x=this.CompressCellStyles(s),k=this.conditional_formats.length?JSON.parse(JSON.stringify(this.conditional_formats.map(v=>({...v,internal:void 0})))):void 0,g=this.data_validation.length?JSON.parse(JSON.stringify(this.data_validation)):void 0,R={};for(let[v,A]of this.row_height_map.entries())R[v]=A;let E={id:this.id,name:this.name,tab_color:this.tab_color,data:m,sheet_style:a,rows:b,columns:y,cell_styles:x,styles:i,row_style:h,column_style:c,conditional_formats:k,data_validations:g,row_pattern:l.length?l:void 0,default_row_height:this.default_row_height,default_column_width:this.default_column_width,row_height:R,column_width:t(this.column_width_,this.default_column_width),selection:JSON.parse(JSON.stringify(this.selection)),annotations:JSON.parse(JSON.stringify(this.annotations))};return this.visible||(E.visible=this.visible),(this.scroll_offset.x||this.scroll_offset.y)&&(E.scroll=this.scroll_offset),this.background_image&&(E.background_image=this.background_image),(this.freeze.rows||this.freeze.columns)&&(E.freeze=this.freeze),E}FlushCellStyles(){this.style_map=[],this.style_json_map=[],this.cells.FlushCellStyles()}ImportData(e){let t=e.styles;e.outline&&(this.outline=e.outline);let i=e.sheet_style;i&&this.UpdateAreaStyle(new _({row:1/0,column:1/0},{row:1/0,column:1/0}),t[i]);let r=e.column_styles;if(r)for(let o=0;o<r.length;o++)r[o]&&this.UpdateAreaStyle(new _({row:1/0,column:o},{row:1/0,column:o}),t[r[o]]);if(e.row_styles)for(let[o,n]of e.row_styles.entries())n&&this.UpdateAreaStyle(new _({row:o,column:1/0}),t[n]);this.cells.FromJSON(e.cells),e.name&&(this.name=e.name||"");for(let o of this.cells.Iterate())o.spill&&(o.spill.start.sheet_id||o.spill.SetSheetID(this.id));e.tab_color&&(this.tab_color=e.tab_color);let s=this.cell_style;for(let o of e.cells)o.style_ref&&(s[o.column]||(s[o.column]=[]),s[o.column][o.row]=t[o.style_ref]);for(let o=0;o<e.column_widths.length;o++)typeof e.column_widths[o]<"u"&&this.SetColumnWidth(o,e.column_widths[o]);for(let o=0;o<e.row_heights.length;o++)typeof e.row_heights[o]<"u"&&this.SetRowHeight(o,e.row_heights[o]);for(let o of e.annotations||[])this.annotations.push(new ae(o));for(let o of e.conditional_formats||[])this.conditional_formats.push(o);for(let o of e.data_validations||[])this.AddValidation(o);e.hidden&&(this.visible=!1)}CalculateAnnotationExtent(e){if(e.data.layout){e.data.extent={...e.data.layout.br.address};return}let t=1e3;e.data.extent={row:0,column:0};let i=e.rect?.right;if(i&&this.default_column_width){for(let s=0;i>=0&&s<t;s++)if(i-=this.GetColumnWidth(s),i<0){e.data.extent.column=s;break}}let r=e.rect?.bottom;if(r&&this.default_row_height){for(let s=0;r>=0&&s<t;s++)if(r-=this.GetRowHeight(s),r<0){e.data.extent.row=s;break}}}UpdateSheetStyle(e,t=!0){this.sheet_style=D.Merge(this.sheet_style,e,t);let i=Object.keys(e);for(let r of this.cell_style)if(r)for(let s of r)s&&i.forEach(o=>delete s[o]);for(let r of Object.keys(this.row_styles))i.forEach(s=>delete this.row_styles[r][s]);for(let r of Object.keys(this.column_styles))i.forEach(s=>delete this.column_styles[r][s]);this.FlushCellStyles()}UpdateRowStyle(e,t,i=!0){this.row_styles[e]=D.Merge(this.row_styles[e]||{},t,i);let r=Object.keys(t);for(let s of this.cell_style)s&&s[e]&&r.forEach(o=>delete s[e][o]);for(let s=0;s<this.cells.columns;s++)if(this.column_styles[s]){let o=this.column_styles[s],n=this.cell_style[s]?this.cell_style[s][e]||{}:{};for(let a of r)typeof o[a]<"u"&&(n[a]=t[a]);Object.keys(n).length&&(this.cell_style[s]||(this.cell_style[s]=[]),this.cell_style[s][e]=JSON.parse(JSON.stringify(n)))}for(let s of this.cells.Iterate(this.RealArea(_.FromRow(e))))s.FlushStyle()}UpdateColumnStyle(e,t,i=!0){this.column_styles[e]=D.Merge(this.column_styles[e]||{},t,i);let r=Object.keys(t);if(this.cell_style[e])for(let s of this.cell_style[e])s&&r.forEach(o=>delete s[o]);for(let s of this.cells.Iterate(this.RealArea(_.FromColumn(e))))s.FlushStyle()}BleedFlush(e){let t=[Math.max(0,e.start.row-1),e.end.row+1],i=[Math.max(0,e.start.column-1),e.end.column+1];for(let r=t[0];r<=t[1];r++)for(let s=i[0];s<=i[1];s++)this.cells.GetCell({row:r,column:s},!1)?.FlushStyle()}FlushConditionalFormats(){this.flush_conditional_formats=!0}ApplyConditionalFormats(){let e=this.flush_conditional_formats;for(let r of this.conditional_formats)if(r.internal?.vertex?.updated){e=!0;break}if(!e)return;this.flush_conditional_formats=!1;let t=[],i=[...this.conditional_format_checklist];this.conditional_format_checklist=[];for(let r of this.conditional_formats){r.internal?.vertex?.updated&&(r.internal.vertex.updated=!1);let s=JSON.parse(JSON.stringify(r.area));(s.start.row===null||s.end.row===null)&&(s.start.row=0,s.end.row=this.cells.rows-1),(s.start.column===null||s.end.column===null)&&(s.start.column=0,s.end.column=this.cells.columns-1);let o=r.internal?.vertex?.result;if(r.type==="gradient"){if(o&&r.internal?.gradient){let n=r.property??"fill";if(o.type===9)for(let a=s.start.row;a<=s.end.row;a++)for(let l=s.start.column;l<=s.end.column;l++){let c=o.value[l-s.start.column][a-s.start.row];if(c.type===3){t[a]||(t[a]=[]),t[a][l]||(t[a][l]=[]);let h=r.internal.gradient.Interpolate(c.value);t[a][l].push({[n]:h})}}else if(o.type===3){let a=r.internal.gradient.Interpolate(o.value);for(let l=s.start.row;l<=s.end.row;l++){t[l]||(t[l]=[]);for(let c=s.start.column;c<=s.end.column;c++)t[l][c]||(t[l][c]=[]),t[l][c].push({[n]:a})}}i.push(s),this.conditional_format_checklist.push(s)}}else if(r.type==="data-bar"){if(o){if(o.type===9)for(let n=s.start.row;n<=s.end.row;n++)for(let a=s.start.column;a<=s.end.column;a++){let l=o.value[a-s.start.column][n-s.start.row];if(l.type===9){let[c,h]=l.value[0];c.type===3&&h.type===3&&(t[n]||(t[n]=[]),t[n][a]||(t[n][a]=[]),t[n][a].push({databar:{value:c.value,zero:h.value,fill:r.fill,negative:r.negative,hide_values:r.hide_values}}))}}i.push(s),this.conditional_format_checklist.push(s)}}else if(o){if(o.type===9)for(let n=s.start.row;n<=s.end.row;n++)for(let a=s.start.column;a<=s.end.column;a++){let l=o.value[a-s.start.column][n-s.start.row];l&&(l.type===4||l.type===3)&&l.value&&(t[n]||(t[n]=[]),t[n][a]||(t[n][a]=[]),t[n][a].push(r.style))}else if((o.type===4||o.type===3)&&o.value)for(let n=s.start.row;n<=s.end.row;n++){t[n]||(t[n]=[]);for(let a=s.start.column;a<=s.end.column;a++)t[n][a]||(t[n][a]=[]),t[n][a].push(r.style)}i.push(s),this.conditional_format_checklist.push(s)}}for(let r of i)this.BleedFlush(r);this.conditional_format_cache=t}ConditionalFormatForCell(e){return this.conditional_format_cache[e.row]?this.conditional_format_cache[e.row][e.column]||[]:[]}CompositeStyleForCell(e,t=!0,i=!0,r=!0,s=!0){let{row:o,column:n}=e,a=[];return r&&a.push(this.default_style_properties),a.push(this.sheet_style),i&&this.row_pattern.length&&a.push(this.row_pattern[o%this.row_pattern.length]),this.row_styles[o]&&a.push(this.row_styles[o]),this.column_styles[n]&&a.push(this.column_styles[n]),t&&this.cell_style[n]&&this.cell_style[n][o]&&a.push(this.cell_style[n][o]),s&&a.push(...this.ConditionalFormatForCell(e)),D.Composite(a)}GetStyleIndex(e){let t=JSON.stringify(e);for(let r=0;r<this.style_json_map.length;r++)if(t===this.style_json_map[r])return r;let i=this.style_map.length;return this.style_map.push(JSON.parse(t)),this.style_json_map.push(t),i}};var No={"red-green":{color_space:"RGB",stops:[{value:0,color:{theme:5,tint:.5}},{value:1,color:{theme:9,tint:.5}}]},"red-yellow-green":{color_space:"RGB",stops:[{value:0,color:{theme:5,tint:.5}},{value:.5,color:{theme:7,tint:.5}},{value:1,color:{theme:9,tint:.5}}]},"green-red":{color_space:"RGB",stops:[{value:0,color:{theme:9,tint:.5}},{value:1,color:{theme:5,tint:.5}}]},"green-yellow-red":{color_space:"RGB",stops:[{value:0,color:{theme:9,tint:.5}},{value:.5,color:{theme:7,tint:.5}},{value:1,color:{theme:5,tint:.5}}]}};var We=class extends ne{constructor(t,i,r,s,o){super(i,r,o);this.options=s;let n=z.GetInstance(t.ownerDocument),a=t.querySelector(".treb-formula-bar");a.removeAttribute("hidden"),this.address_label_container=a.querySelector(".treb-address-label"),this.address_label=this.address_label_container.firstElementChild,this.InitAddressLabel(),this.container_node=t.querySelector(".treb-editor-container");let l=this.container_node.firstElementChild,c={node:l};if(this.active_editor=c,this.nodes=[c],l&&this.RegisterListener(c,"input",h=>{h.isTrusted&&(this.UpdateText(c),this.UpdateColors())}),this.active_editor.node.spellcheck=!1,this.RegisterListener(c,"focusin",()=>{let h=this.tolled!==void 0;if(this.tolled=void 0,!this.active_editor)return;let d=this.active_editor.node.textContent||"";if(this.shadow&&(this.shadow=!1,d="",this.active_editor.node.textContent=d,this.active_editor.formatted_text=void 0),d[0]==="{"&&d[d.length-1]==="}"&&(d=d.substring(1,d.length-1),this.active_editor.node.textContent=d,this.active_editor.formatted_text=void 0),this.autocomplete?.ResetBlock(),this.UpdateText(this.active_editor),this.UpdateColors(void 0,!0),h){let u=this.NodeAtIndex(d.length-1);u&&this.SetCaret({node:u,offset:(u.textContent||"").length})}this.committed=!1,this.Publish([{type:"start-editing",editor:"formula-bar"},{type:"update",text:d,cell:this.active_cell,dependencies:this.composite_dependencies}]),this.focused_=!0}),this.RegisterListener(c,"focusout",h=>{let d=h.relatedTarget instanceof HTMLElement&&h.relatedTarget.dataset.tollEditor;this.selecting&&console.info("focusout, but selecting..."),this.autocomplete?.Hide();let u=(this.active_editor?this.GetTextContent(this.active_editor.node).join(""):"").trim();if(d){let p=u;this.active_editor?.node&&(p=this.SubstringToCaret2(this.active_editor.node,!0)[0]),this.committed=!0,this.tolled={text:u,substring:p},this.Publish({type:"toll",value:u})}else this.committed?this.Publish([{type:"stop-editing"}]):(this.committed=!0,this.Publish({type:"commit",value:u}));this.Publish([{type:"stop-editing"}]),this.focused_=!1,this.active_editor&&(this.active_editor.node.spellcheck=!1)}),this.RegisterListener(c,"keydown",this.FormulaKeyDown.bind(this)),this.RegisterListener(c,"keyup",this.FormulaKeyUp.bind(this)),this.options.expand_formula_button){let h;this.expand_button=n.Create("button","expand-button",a,{events:{focus:d=>{h=d.relatedTarget instanceof HTMLElement?d.relatedTarget:void 0},click:d=>{d.stopPropagation(),d.preventDefault(),this.active_editor&&(this.active_editor.node.scrollTop=0),a.hasAttribute("expanded")?a.removeAttribute("expanded"):a.setAttribute("expanded",""),h&&h.focus()}}})}}committed=!1;tolled;shadow_=!1;get shadow(){return this.shadow_}set shadow(t){this.shadow_=t,this.active_editor?.node&&(t?this.active_editor.node.classList.add("treb-editor-shadow"):this.active_editor.node.classList.remove("treb-editor-shadow"))}focused_=!1;get focused(){return this.focused_}address_label_container;address_label;button;expand_button;label_update_timer=0;get formula(){return this.active_editor&&this.active_editor.node.textContent||""}set formula(t){this.active_editor&&(this.active_editor.node.textContent=t,this.active_editor.formatted_text=void 0)}get label(){return this.address_label?.textContent||""}set label(t){t.trim().length?(this.address_label.textContent=t,this.label_update_timer||(this.label_update_timer=requestAnimationFrame(()=>{this.label_update_timer=0,this.address_label.scrollWidth>this.address_label.offsetWidth?this.address_label.setAttribute("title",t):this.address_label.removeAttribute("title")}))):(this.address_label.innerHTML="&nbsp;",this.address_label.removeAttribute("title"))}set editable(t){!this.active_editor||!this.container_node||(t?(this.active_editor.node.setAttribute("contenteditable","true"),this.container_node.removeAttribute("locked")):(this.active_editor.node.removeAttribute("contenteditable"),this.container_node.setAttribute("locked","")))}Restore(){let t=this.container_node?.firstElementChild;t&&t.focus()}Release(){this.tolled=void 0}IsElement(t){return t===this.active_editor?.node}IsExpandButton(t){return this.expand_button&&t===this.expand_button}InitAddressLabel(){this.address_label.contentEditable="true",this.address_label.spellcheck=!1,this.address_label.addEventListener("focusin",()=>{let t=this.address_label.ownerDocument;requestAnimationFrame(()=>{let i=t.defaultView.getSelection(),r=t.createRange();r.selectNodeContents(this.address_label),i?.removeAllRanges(),i?.addRange(r)})}),this.address_label.addEventListener("keydown",t=>{if(!t.isComposing)switch(t.key){case"Enter":t.stopPropagation(),t.preventDefault(),this.Publish({type:"address-label-event",text:this.address_label.textContent||void 0});break;case"Esc":case"Escape":t.stopPropagation(),t.preventDefault(),this.Publish({type:"address-label-event"});break}})}GetTextContent(t){let i=t.childNodes,r=[];for(let s=0;s<i.length;s++){let o=i[s];switch(o.nodeType){case Node.ELEMENT_NODE:r.push(...this.GetTextContent(o)),o instanceof Element&&o.tagName==="DIV"&&r.push(`
7
- `);break;case Node.TEXT_NODE:o.nodeValue&&r.push(o.nodeValue);break}}return r}FormulaKeyUp(t){t.isComposing||this.autocomplete&&this.autocomplete.HandleKey("keyup",t).handled}FormulaKeyDown(t){if(!t.isComposing){if(this.autocomplete){let i=this.autocomplete.HandleKey("keydown",t);if(i.accept&&this.AcceptAutocomplete(i),i.handled)return}switch(t.key){case"F4":this.selecting&&this.Publish({type:"toggle-reference"});break;case"Enter":case"Tab":{let i=t.key==="Enter"&&t.ctrlKey&&t.shiftKey,r=(this.active_editor?this.GetTextContent(this.active_editor.node).join(""):"").trim();this.committed=!0,this.Publish({type:"commit",value:r,event:t,array:i})}break;case"Escape":case"Esc":this.committed=!0,this.Publish({type:"discard"});break;default:return}t.stopPropagation(),t.preventDefault()}}};var xe=class{constructor(e={}){this.options=e;if(this.DOM=z.GetInstance(e.container?.ownerDocument),!this.DOM.doc)throw new Error("invalid context");this.completion_list=this.DOM.Div("treb-cell-editor-ac-list treb-autocomplete",e.container||this.DOM.doc.body,{events:{mousedown:t=>this.ListMouseDown(t),mousemove:t=>this.ListMouseMove(t)}}),this.tooltip=this.DOM.Div("treb-cell-editor-ac-tooltip treb-autocomplete-tooltip",e.container||this.DOM.doc.body)}completion_list_visible=!1;tooltip_visible=!1;last_completion;completion_list;tooltip;selected_index=0;block=!1;autocomplete_data={};callback;active_element;DOM;Hide(){this.tooltip.style.top="-1000px",this.completion_list.style.top="-1000px",this.completion_list_visible=!1,this.tooltip_visible=!1,this.active_element=void 0}SetBlock(){this.block=!0}ResetBlock(){this.block=!1}ListMouseMove(e){let t=e.target;t.tagName==="A"&&t!==this.active_element&&this.active_element&&(this.active_element.classList.remove("selected"),this.active_element=t,this.active_element.classList.add("selected"),this.selected_index=Number(t.dataset.index||"0"),this.last_completion=t.textContent||"")}ListMouseDown(e){e.stopPropagation(),e.preventDefault();let t=e.target;for(;t;){if(t===this.completion_list)return;if(t.tagName==="A")break;t=t.parentElement}t&&(console.info(t),this.callback&&this.callback({handled:!0,accept:!0,value:t.textContent?t.textContent:void 0,data:this.autocomplete_data,click:!0}))}HandleKey(e,t){if(!this.completion_list_visible)return{handled:!1};let i=0,r=!1,s=!1;switch(t.key){case"Up":case"ArrowUp":i=-1;break;case"Down":case"ArrowDown":i=1;break;case"Tab":s=!0;break;case"Escape":case"Esc":r=!0;break;default:return{handled:!1}}if(t.stopPropagation(),t.preventDefault(),e==="keyup")return{handled:!0};if(i){let o=this.completion_list.getBoundingClientRect();this.selected_index+=i,this.selected_index=Math.max(0,this.selected_index);let n=this.completion_list.querySelectorAll("a");this.selected_index=Math.min(this.selected_index,n.length-1);for(let a=0;a<n.length;a++){let l=n[a];if(a===this.selected_index){l.classList.add("selected"),this.active_element=l;let c=l.getBoundingClientRect();c.top<o.top?this.completion_list.scrollBy(0,-c.height):c.bottom>o.bottom&&this.completion_list.scrollBy(0,c.height),this.last_completion=l.textContent||void 0}else l.classList.remove("selected")}return{handled:!0}}else{if(r)return this.block=!0,this.Hide(),{handled:!0};if(s)return{handled:!0,accept:!0,value:this.last_completion,data:this.autocomplete_data}}return{handled:!1}}Show(e,t={},i){if(this.completion_list_visible=!1,this.tooltip_visible=!1,this.autocomplete_data=t,this.callback=e,!this.block)if(t.tooltip?(this.tooltip.innerHTML=t.tooltip+t.arguments+(t.description?`
8
- `+t.description:""),this.tooltip.style.left=i.left+"px",this.options.tooltip_prefer_top?this.tooltip.style.top=i.top-this.tooltip.offsetHeight-5+"px":this.tooltip.style.top=i.bottom+5+"px",this.tooltip_visible=!0):this.tooltip.style.top="-1000px",t.completions&&t.completions.length){this.tooltip.style.top="-1000px",this.selected_index=0,this.completion_list.innerHTML='<ul class="notranslate">'+t.completions.map((n,a)=>(n.name===this.last_completion&&(this.selected_index=a),`<li><a data-index="${a}">${n.name}</a></li>`)).join(`
9
- `)+"<ul>";let r=this.completion_list.offsetHeight,s=!1;this.options.autocomplete_prefer_top?s=i.top>=200:this.DOM.doc?.documentElement&&Math.max(this.DOM.doc.documentElement.clientHeight,this.DOM.view?.innerHeight||0)-i.bottom<200&&(s=!0),s?this.completion_list.style.top=i.top-r-5+"px":this.completion_list.style.top=i.bottom+5+"px",this.completion_list.style.left=i.left+"px";let o=this.completion_list.querySelectorAll("a");this.active_element=o[this.selected_index],o[this.selected_index].classList.add("selected"),this.last_completion=o[this.selected_index].textContent||void 0,this.completion_list.scrollTop=this.active_element.offsetTop,this.completion_list_visible=!0}else this.completion_list.style.top="-1000px"}};var Ce=(w=>(w[w.Null=0]="Null",w[w.InsertRows=1]="InsertRows",w[w.InsertColumns=2]="InsertColumns",w[w.ResizeRows=3]="ResizeRows",w[w.ResizeColumns=4]="ResizeColumns",w[w.Select=5]="Select",w[w.SetRange=6]="SetRange",w[w.UpdateStyle=7]="UpdateStyle",w[w.UpdateBorders=8]="UpdateBorders",w[w.Indent=9]="Indent",w[w.MergeCells=10]="MergeCells",w[w.UnmergeCells=11]="UnmergeCells",w[w.Clear=12]="Clear",w[w.UpdateTheme=13]="UpdateTheme",w[w.SetNote=14]="SetNote",w[w.SetLink=15]="SetLink",w[w.Freeze=16]="Freeze",w[w.SetName=17]="SetName",w[w.ShowHeaders=18]="ShowHeaders",w[w.AddSheet=19]="AddSheet",w[w.DuplicateSheet=20]="DuplicateSheet",w[w.DeleteSheet=21]="DeleteSheet",w[w.ActivateSheet=22]="ActivateSheet",w[w.RenameSheet=23]="RenameSheet",w[w.ReorderSheet=24]="ReorderSheet",w[w.ShowSheet=25]="ShowSheet",w[w.DataValidation=26]="DataValidation",w[w.Reset=27]="Reset",w[w.SortTable=28]="SortTable",w[w.InsertTable=29]="InsertTable",w[w.RemoveTable=30]="RemoveTable",w[w.AddConditionalFormat=31]="AddConditionalFormat",w[w.RemoveConditionalFormat=32]="RemoveConditionalFormat",w[w.TabColor=33]="TabColor",w[w.CreateAnnotation=34]="CreateAnnotation",w[w.RemoveAnnotation=35]="RemoveAnnotation",w))(Ce||{});var je=class{function_names=[];argument_separator=M.argument_separator.charCodeAt(0);function_map=new Map;RemoveFunctions(e){Array.isArray(e)||(e=[e]);for(let t of e)this.function_map.delete(t.name.toLowerCase());this.UpdateNameList()}AddFunctions(e){Array.isArray(e)||(e=[e]);for(let t of e)this.function_map.set(t.name.toLowerCase(),t);this.UpdateNameList()}SetFunctions(e){this.function_map.clear();for(let t of e)this.function_map.set(t.name.toLowerCase(),t);this.UpdateNameList()}NormalizeIdentifier(e){return this.function_map.get(e.toLowerCase())?.name}Get(e){return this.function_map.get(e.toLowerCase())}Exec(e){if(e.text[0]!=="=")return{};let t,i={};if(e.cursor===e.text.length&&(t=e.text.match(/(?:^|[^a-zA-Z\u00C0-\u024F_\d])([a-zA-Z\u00C0-\u024F_][\w\d\u00C0-\u024F_.]*)\s*$/),t)){let s=t[1],o=new RegExp("^"+s.replace(".","\\."),"i");i={completions:this.function_names.filter(a=>o.test(a)).map(a=>this.function_map.get(a.toLowerCase())).filter(a=>!!a),token:s,position:e.cursor-s.length}}let r=this.ParseTooltip(e.text.substr(0,e.cursor));if(r.function){let s=this.function_map.get(r.function.toLowerCase());s&&(i.tooltip='<span class="notranslate">'+s.name+"</span>",i.arguments="("+(s.arguments||[]).map((o,n)=>{let a=o.name||"argument";return n===r.argument?`<span class="active-argument">${a}</span>`:a}).join(M.argument_separator+" ")+")",i.description=s.description?`<span class="function-description">${s.description}</span>`:"",i.function_position=r.position||0)}return i}ParseTooltip(e){let t=[],i=0,r="",s=!1,o=0;for(let a of e){let l=a.charCodeAt(0);if(s)l===34&&(s=!1);else switch(l){case 40:t.push({buffer:r.trim(),argument:i,position:o-r.length}),r="",i=0;break;case this.argument_separator:i++;break;case 41:i=t.pop()?.argument||0;break;case 34:r="",s=!0;break;default:l>=97&&l<=122||l>=65&&l<=90||l>=48&&l<=57||l>=192&&l<=591||l===95||l===46?r+=a:r=""}o++}let n=t.pop();return{function:n?.buffer||void 0,position:n?.position||0,argument:i}}UpdateNameList(){this.function_names=[...this.function_map.keys()].sort((e,t)=>e.toLowerCase().localeCompare(t.toLowerCase()))}};var ti={scrollbars:!0,in_cell_editor:!0,formula_bar:!0,add_tab:!1,tab_bar:"auto",expand_formula_button:!1,expand:!0,comment_markdown:!0,repaint_on_cell_change:!0,grid_over_background:!1};var lr=f=>{console.error("invalid case")},Se=class{grid_events=new X;command_log=new X;model;view;get active_sheet(){return this.view.active_sheet}set active_sheet(e){this.view.active_sheet=e}get view_index(){return this.view.view_index}batch=0;batch_paint=!1;batch_events=[];autocomplete_matcher=new je;flags={};options;parser;constructor(e={},t){this.model=t,this.view={active_sheet:this.model.sheets.list[0],view_index:this.model.view_count++},this.parser=t.parser,this.options={...ti,...e}}RemoveConditionalFormat(e){this.ExecCommand({key:32,...e})}AddConditionalFormat(e){this.ExecCommand({key:31,format:e})}RemoveTable(e){this.ExecCommand({key:30,table:e})}InsertTable(e,t=!0,i=void 0,r){e.start.sheet_id||(e.start.sheet_id=this.active_sheet.id);let s=this.FindSheet(e);for(let o=e.start.row;o<=e.end.row;o++)for(let n=e.start.column;n<=e.end.column;n++){let a=s.cells.GetCell({row:o,column:n},!1);if(a&&(a.area||a.merge_area||a.table)){this.Error(4);return}}this.ExecCommand({key:29,area:JSON.parse(JSON.stringify(e)),totals:t,sortable:i,theme:r})}ActivateSheet(e,t){let i=typeof e=="number"?e:void 0,r=typeof e=="string"?e:void 0;this.ExecCommand({key:22,index:i,name:r,user:t})}ActivateSheetID(e){this.ExecCommand({key:22,id:e})}DuplicateSheet(e,t,i){let r={key:20,new_name:t,insert_before:i};typeof e>"u"?r.id=this.active_sheet.id:r.index=e,this.ExecCommand(r)}AddSheet(e){this.ExecCommand({key:19,name:e,show:!0})}DeleteSheet(e){if(typeof e>"u"&&!this.model.sheets.list.some((t,i)=>t===this.active_sheet?(e=i,!0):!1))throw new Error("invalid index");this.ExecCommand({key:21,index:e})}InsertSheet(e,t){if(typeof e>"u"&&!this.model.sheets.list.some((i,r)=>i===this.active_sheet?(e=r+1,!0):!1))throw new Error("invalid index");this.ExecCommand({key:19,insert_index:e,name:t,show:!0})}DeleteSheetID(e){this.ExecCommand({key:21,id:e})}Reset(){this.ExecCommand({key:27})}SetLink(e,t){this.ExecCommand({key:15,area:e,reference:t})}ShowAll(){let e=[];for(let t=0;t<this.model.sheets.length;t++)e.push({key:25,index:t,show:!0});this.ExecCommand(e)}ShowSheet(e=0,t=!0){let i={key:25,show:t};typeof e=="string"?i.name=e:i.index=e,this.ExecCommand(i)}SortTable(e,t={}){this.ExecCommand({key:28,table:JSON.parse(JSON.stringify(e)),...ri,...t})}GetFreeze(){return{...this.active_sheet.freeze}}InsertRows(e=0,t=1){this.ExecCommand({key:1,before_row:e,count:t})}GetTableReference(e){return this.model.sheets.Find(e.sheet_id||this.active_sheet.id)?.CellData(e).table||void 0}FromCSV(e){this.parser.Save(),this.parser.SetLocaleSettings(".");let i=Ut(e).map(s=>s.map(o=>{if(o){let n=this.parser.Parse(o);if(n.expression?.type==="complex")return n.expression}return le.TryParse(o).value}));this.parser.Restore();let r={row:Math.max(0,i.length-1),column:i.reduce((s,o)=>Math.max(s,Math.max(0,o.length-1)),0)};this.ExecCommand([{key:27},{key:6,area:{start:{row:0,column:0},end:r},value:i}])}InsertColumns(e=0,t=1){this.ExecCommand({key:2,before_column:e,count:t})}ReorderSheet(e,t){this.ExecCommand({key:24,index:e,move_before:t})}RenameSheet(e,t){this.ExecCommand({key:23,new_name:t,id:e.id})}Freeze(e=0,t=0,i=!0){this.ExecCommand({key:16,rows:e,columns:t,highlight_transition:i})}SetRowHeight(e,t,i=!0){this.ExecCommand({key:3,row:e,height:t,shrink:i})}SetColumnWidth(e,t){this.ExecCommand({key:4,column:e,width:t})}FilterTable(e,t,i){let r=[];if(!e.area.start.sheet_id)throw new Error("invalid table area");let s=this.model.sheets.Find(e.area.start.sheet_id);if(!s)throw new Error("invalid table sheet");let o=[],n=[],a=e.totals_row?e.area.end.row-1:e.area.end.row;t+=e.area.start.column;for(let l=e.area.start.row+1;l<=a;l++){let c=s.CellData({row:l,column:t}),h=i(c),d=s.GetRowHeight(l);h&&!d?o.push(l):!h&&d&&n.push(l)}o&&r.push({key:3,sheet_id:s.id,row:o,height:s.default_row_height}),n&&r.push({key:3,sheet_id:s.id,row:n,height:0}),r.length&&this.ExecCommand(r)}UpdateSheets(e,t=!1,i){B.Reset();let r=e.map(s=>B.FromJSON(s,this.model.theme_style_properties));if(r.length===0&&r.push(B.Blank(this.model.theme_style_properties)),this.model.sheets.Assign(r),this.ResetMetadata(),this.active_sheet=r[0],i){let s=this.model.sheets.Find(i);s&&(this.active_sheet=s)}}SetAutocompleteFunctions(e){let t=[];for(let r of this.model.named.list)t.push({name:r.name,named:!0,type:"token"});let i=e.slice(0).concat(t);this.autocomplete_matcher.SetFunctions(i)}ResetMetadata(){this.model.document_name=void 0,this.model.user_data=void 0}ResizeColumnsInternal(e){let t=e.sheet_id?this.FindSheet(e.sheet_id):this.active_sheet,i=e.column;if(typeof i>"u"){i=[];for(let r=0;r<t.columns;r++)i.push(r)}if(typeof i=="number"&&(i=[i]),e.width)for(let r of i)t.SetColumnWidth(r,e.width);else console.error("auto size not supported")}RemoveAnnotationInternal(e){for(let t=0;t<e.sheet.annotations.length;t++)if(e.annotation===e.sheet.annotations[t]){e.sheet.annotations.splice(t,1),this.grid_events.Publish({type:"annotation",annotation:e.annotation,event:"delete"});return}}CreateAnnotationInternal(e){}ResizeRowsInternal(e){let t=e.sheet_id?this.FindSheet(e.sheet_id):this.active_sheet,i=e.row;if(typeof i>"u"){i=[];for(let r=0;r<t.rows;r++)i.push(r)}if(typeof i=="number"&&(i=[i]),e.height)for(let r of i)t.SetRowHeight(r,e.height);else console.error("auto size not supported")}ResetInternal(){B.Reset(),this.UpdateSheets([],!0),this.model.named.Reset(),this.model.macro_functions.clear(),this.model.tables.clear()}ValidatePasteAreas(e){for(let t of e){let i=this.active_sheet;if(t.start.sheet_id&&t.start.sheet_id!==i.id&&(i=this.model.sheets.Find(t.start.sheet_id)),!i)return!1;for(let r of i.cells.Iterate(t)){if(r.style?.locked)return console.info("invalid: locked cells"),!1;if(r.merge_area&&(!t.Contains(r.merge_area.start)||!t.Contains(r.merge_area.end)))return console.info("invalid: merge area"),!1;if(r.area&&(!t.Contains(r.area.start)||!t.Contains(r.area.end)))return console.info("invalid: array"),!1}}return!0}SetValidationInternal(e){let t=this.FindSheet(e.area);if(!t)throw new Error("invalid sheet in set validation");let i={start:e.area.start,end:e.area.end};e.range?t.AddValidation({type:"range",error:!!e.error,area:e.range,target:[i]}):e.list?t.AddValidation({type:"list",error:!!e.error,list:JSON.parse(JSON.stringify(e.list)),target:[i]}):t.RemoveValidations(i)}GetValidationRange(e){let t,i=this.FindSheet(e);if(i){t=[],e=i.RealArea(new _(e.start,e.end),!0);for(let r=e.start.row;r<=e.end.row;r++)for(let s=e.start.column;s<=e.end.column;s++){let o=i.CellData({row:r,column:s});o&&o.formatted&&(typeof o.formatted=="string"?t.push(o.formatted):t.push(Z.FormatPartsAsText(o.formatted)))}}return t}DeleteSheetInternal(e){let t=!1,i=-1,r="",s=!1,o=e.name?e.name.toLowerCase():"",n=this.model.sheets.list.filter((a,l)=>l===e.index||a.id===e.id||a.name.toLowerCase()===o?(t=a===this.active_sheet,this.model.named.RemoveRangesForSheet(a.id),r=a.name,i=l,!1):!0);if(r&&this.RenameSheetReferences(n,r,"#REF")>0&&(s=!0),!n.length)n.push(B.Blank(this.model.theme_style_properties)),i=0;else if(n.every(a=>!a.visible))n.unshift(B.Blank(this.model.theme_style_properties)),i=0;else for(i>=n.length&&(i=0);!n[i].visible;)i++;return this.model.sheets.Assign(n),t&&this.ActivateSheetInternal({key:22,index:i}),s}RenameSheetInternal(e,t){if(!t||Lt.test(t))throw new Error("invalid sheet name");let i=t.toLowerCase();for(let s of this.model.sheets.list)if(s!==e&&s.name.toLowerCase()===i)throw new Error("sheet name already exists");let r=e.name;e.name=t,this.model.sheets.Assign(this.model.sheets.list),this.RenameSheetReferences(this.model.sheets.list,r,t)}SortTableInternal(e){if(!e.table.area.start.sheet_id)throw new Error("table has invalid area");let t=this.model.sheets.Find(e.table.area.start.sheet_id);if(!t)throw new Error("invalid sheet in table area");let i=[],r=[],s=e.table.area.end.row;e.table.totals_row&&s--;let o=0,n=0;for(let d=e.table.area.start.row+1;d<=s;d++){if(t.GetRowHeight(d))r.push(d);else continue;let p={row:d,number:0,text:"",type:0,data:[]};for(let m=e.table.area.start.column;m<=e.table.area.end.column;m++){let b=t.CellData({row:d,column:m});if(m===e.column+e.table.area.start.column){let y=b.calculated_type||b.type;y===2?o++:y===3&&n++;let x=b.calculated_type?b.calculated:b.value;p.text=x?.toString()||"",p.number=Number(x)||0,p.type=b.calculated_type||b.type}p.data.push({address:{row:d,column:m},data:b.value,type:b.type,style:b.style})}i.push(p)}let a=e.type;a==="auto"&&(n>o?a="numeric":a="text");let l=e.asc?1:-1;a==="numeric"?i.sort((d,u)=>d.type===0?u.type===0?0:1:u.type===0?-1:(d.number-u.number)*l):i.sort((d,u)=>d.type===0?u.type===0?0:1:u.type===0?-1:d.text.localeCompare(u.text)*l);let c={row:e.table.area.start.row+1,column:e.table.area.start.column};for(let d=0;d<r.length;d++){c.row=r[d];let u=i[d];c.column=e.table.area.start.column;for(let p of u.data){if(p.type===1){let m=p.data,b={columns:0,rows:c.row-u.row},y=this.parser.Parse(m);y.expression&&(m="="+this.parser.Render(y.expression,{offset:b,missing:""})),t.SetCellValue(c,m)}else t.SetCellValue(c,p.data);t.UpdateCellStyle(c,p.style||{},!1),c.column++}}let h=this.model.tables.get(e.table.name.toLowerCase());h&&(h.sort={type:e.type,asc:!!e.asc,column:e.column});{let d=e.table.area.start.row;for(let u=e.table.area.start.column;u<=e.table.area.end.column;u++)t.cells.data[d][u]?.FlushStyle();if(e.table.totals_row){d=e.table.area.end.row;for(let u=e.table.area.start.column;u<=e.table.area.end.column;u++)t.cells.data[d][u]?.FlushStyle()}}return new _(e.table.area.start,e.table.area.end)}UpdateTableColumns(e){if(!e.area.start.sheet_id)throw new Error("invalid area in table");let t=this.model.sheets.Find(e.area.start.sheet_id);if(!t)throw new Error("invalid sheet in table");let i=e.columns?.slice(0)||void 0,r=[],s=e.area.start.row,o=e.area.end.column-e.area.start.column+1,n=e.area.start.column;for(let a=0;a<o;a++,n++){let l=t.CellData({row:s,column:n}),c="";l.type!==2?(typeof l.formatted<"u"?c=l.formatted.toString():typeof l.calculated<"u"?c=l.calculated.toString():typeof l.value<"u"&&(c=l.value.toString()),l.Set(c,2)):c=l.value||"",c||(c=`Column${a+1}`);let h=c,d=!1,u=1;for(;!d;){d=!0;e:for(let p of r)if(p.toLowerCase()===h.toLowerCase()){d=!1,h=`${c}${++u}`;break e}}l.Set(h,2),r.push(h.toLowerCase())}if(i&&i.length===r.length){let a=new Map;for(let l=0;l<i.length;l++){let c=i[l].toLowerCase();c!==r[l]&&a.set(c,r[l])}if(a.size){let l=e.name.toLowerCase();for(let c of this.model.sheets.list)for(let h of c.cells.Iterate())if(h.ValueIsFormula()){let d=!1,u=this.parser.Parse(h.value);u.expression&&(this.parser.Walk(u.expression,p=>{if(p.type==="structured-reference"&&(p.table.toLowerCase()===l||!p.table&&h.table===e))for(let[m,b]of a.entries())p.column.toLowerCase()===m&&(p.column=b,d=!0);return!0}),d&&(console.info("updating value"),h.value="="+this.parser.Render(u.expression,{missing:""})))}}}return e.columns=r,{start:{...e.area.start},end:{row:e.area.start.row,column:e.area.end.column}}}SetRangeInternal(e,t={}){let i=L(e.area)?new _(e.area):new _(e.area.start,e.area.end),r=this.FindSheet(i);if(i.start.sheet_id||(i.start.sheet_id=r.id),!i.entire_row&&!i.entire_column&&(i.end.row>=r.rows||i.end.column>=r.columns)&&(r.cells.EnsureCell(i.end),r===this.active_sheet&&(t.layout=!0)),L(e.area)){let s=r.CellData(e.area);if(s.area&&(s.area.rows>1||s.area.columns>1)){this.Error(2);return}let o=Array.isArray(e.value)?Array.isArray(e.value[0])?e.value[0][0]:e.value[0]:e.value;return e.r1c1&&(o=this.TranslateR1C1(e.area,o)),e.array?r.SetArrayValue(i,o):r.SetCellValue(e.area,o),i}else{if(e.array){let s=Array.isArray(e.value)?Array.isArray(e.value[0])?e.value[0][0]:e.value[0]:e.value;e.r1c1&&(s=this.TranslateR1C1(i.start,s)),r.SetArrayValue(i,s)}else{if(e.r1c1){if(Array.isArray(e.value))for(let s=0;s<e.value.length&&s<i.rows;s++){e.value[s]||(e.value[s]=[]);let o=e.value[s];for(let n=0;n<o.length&&n<i.columns;n++){let a={...i.start,row:i.start.row+s,column:i.start.column+n};o[n]=this.TranslateR1C1(a,o[n])}}else if(typeof e.value=="string"&&e.value[0]==="="){let s=[];for(let o=0;o<i.rows;o++){let n=[];for(let a=0;a<i.columns;a++){let l={...i.start,row:i.start.row+o,column:i.start.column+a};n.push(this.TranslateR1C1(l,e.value))}s.push(n)}e.value=s}}r.SetAreaValues2(i,e.value)}return i}}ActivateSheetInternal(e){let t=this.ResolveSheet(e)||this.model.sheets.list[0];if(this.active_sheet===t&&!e.force)return;if(!t.visible)throw new Error("cannot activate hidden sheet");let i=this.active_sheet;this.active_sheet=t,this.grid_events.Publish({type:"sheet-change",deactivate:i,activate:this.active_sheet})}ShowSheetInternal(e){let t=this.ResolveSheet(e);if(t&&t.visible!==e.show){if(!e.show){let i=0;for(let r of this.model.sheets.list)(!t.visible||r===t)&&i++;if(i>=this.model.sheets.length)throw new Error("can't hide all sheets")}if(t.visible=e.show,t===this.active_sheet){let i=this.model.sheets.list;for(let r=0;r<i.length;r++)if(i[r]===this.active_sheet){for(let s=r+1;s<i.length;s++)if(i[s].visible){this.ActivateSheetInternal({key:22,index:s});return}for(let s=0;s<i.length;s++)if(i[s].visible){this.ActivateSheetInternal({key:22,index:s});return}throw new Error("no visible sheet")}}}}NormalizeCommands(e){Array.isArray(e)||(e=[e]);let t=this.active_sheet.id;for(let i of e)switch(i.key){case 0:case 33:case 18:case 25:case 19:case 20:case 21:case 22:case 23:case 24:case 27:case 34:case 35:break;case 28:case 30:i.table.area.start.sheet_id||(i.table.area.start.sheet_id=t);break;case 31:i.format.area.start.sheet_id||(i.format.area.start.sheet_id=t);break;case 3:case 4:case 2:case 1:case 16:i.sheet_id||(i.sheet_id=t);break;case 12:case 14:case 15:case 9:case 8:case 10:case 11:case 26:case 6:case 7:case 17:case 5:case 29:case 32:i.area&&(L(i.area)?i.area.sheet_id||(i.area.sheet_id=t):i.area.start.sheet_id||(i.area.start.sheet_id=t));break;default:lr(i)}return e}TabColor(e,t){this.ExecCommand({key:33,sheet:e,color:t})}AddSheetInternal(e=B.default_sheet_name,t=-1){if(!this.options.add_tab){console.warn("add tab option not set or false");return}for(;this.model.sheets.list.some(r=>r.name===e);){let r=e.match(/^(.*?)(\d+)$/);r?e=r[1]+(Number(r[2])+1):e=e+"2"}let i=B.Blank(this.model.theme_style_properties,e);return t>=0?this.model.sheets.Splice(t,0,i):this.model.sheets.Add(i),i.id}ResolveSheet(e){if(typeof e.index<"u")return this.model.sheets.list[e.index];if(typeof e.name<"u")return this.model.sheets.Find(e.name);if(e.id)return this.model.sheets.Find(e.id)}FindSheet(e){if(e===void 0)return this.active_sheet;let t=typeof e=="number"?e:L(e)?e.sheet_id:e.start.sheet_id;if(!t||t===this.active_sheet.id)return this.active_sheet;let i=this.model.sheets.Find(t);return i||this.active_sheet}PatchFormulasInternal(e,t,i,r,s,o,n){let a=this.parser.Parse(e||""),l=!1;if(a.expression&&(this.parser.Walk(a.expression,c=>{if(c.type==="range"||c.type==="address"){let h=[];c.type==="range"?(c.start.sheet&&c.start.sheet.toLowerCase()===o||!c.start.sheet&&n)&&h.push(c.start,c.end):c.type==="address"&&(c.sheet&&c.sheet.toLowerCase()===o||!c.sheet&&n)&&h.push(c);for(let d of h)i&&d.row>=t&&(i<0&&d.row+i<t?d.column=d.row=-1:d.row+=i,l=!0),s&&d.column>=r&&(s<0&&d.column+s<r?d.column=d.row=-1:d.column+=s,l=!0);return!1}return!0}),l))return"="+this.parser.Render(a.expression,{missing:""})}PatchExpressionSheetName(e,t,i){let r=!1,s=this.parser.Parse(e||"");if(s.expression&&(this.parser.Walk(s.expression,o=>(o.type==="address"&&o.sheet&&o.sheet.toLowerCase()===t&&(o.sheet=i,r=!0),!0)),r))return"="+this.parser.Render(s.expression,{missing:""})}RenameSheetReferences(e,t,i){let r=0;t=t.toLowerCase();for(let s of e){for(let o of s.cells.Iterate())if(o.ValueIsFormula()){let n=this.PatchExpressionSheetName(o.value||"",t,i);n&&(o.value=n,r++)}if(s.conditional_formats?.length)for(let o of s.conditional_formats)switch(o.type){case"cell-match":case"expression":{let n=this.PatchExpressionSheetName(o.expression,t,i);n&&(o.expression=n,r++)}break}for(let o of s.annotations)if(o.data.formula){let n=this.PatchExpressionSheetName(o.data.formula,t,i);n&&(o.data.formula=n,r++)}}for(let s of this.model.connected_elements.values())if(s.formula){let o=this.PatchExpressionSheetName(s.formula,t,i);o&&(s.formula=o,r++)}return r}ApplyBordersInternal(e){let t=e.borders,i=e.borders==="none"?0:e.width,r=new _(e.area.start,e.area.end),s=this.FindSheet(r);r.start.sheet_id=s.id;let o={border_top:i},n={border_bottom:i},a={border_left:i},l={border_right:i},c={border_top:0,border_top_fill:{}},h={border_bottom:0,border_bottom_fill:{}},d={border_left:0,border_left_fill:{}},u={border_right:0,border_right_fill:{}};return e.color?(o.border_top_fill={...e.color},n.border_bottom_fill={...e.color},a.border_left_fill={...e.color},l.border_right_fill={...e.color}):(o.border_top_fill={},n.border_bottom_fill={},a.border_left_fill={},l.border_right_fill={}),(t==="none"||t==="all")&&s.UpdateAreaStyle(r,{...o,...n,...a,...l},!0),(t==="top"||t==="outside")&&(r.entire_column||s.UpdateAreaStyle(r.top,{...o},!0)),(t==="none"||t==="all"||t==="outside"||t==="top")&&(r.entire_column||r.start.row&&s.UpdateAreaStyle(new _({row:r.start.row-1,column:r.start.column},{row:r.start.row-1,column:r.end.column}),{...h},!0)),(t==="bottom"||t==="outside")&&(r.entire_column||s.UpdateAreaStyle(r.bottom,{...n},!0)),(t==="none"||t==="all"||t==="outside"||t==="bottom")&&(r.entire_column||s.UpdateAreaStyle(new _({row:r.end.row+1,column:r.start.column},{row:r.end.row+1,column:r.end.column}),{...c},!0)),(t==="left"||t==="outside")&&(r.entire_row||s.UpdateAreaStyle(r.left,{...a},!0)),(t==="none"||t==="all"||t==="outside"||t==="left")&&(r.entire_row||r.start.column&&s.UpdateAreaStyle(new _({row:r.start.row,column:r.start.column-1},{row:r.end.row,column:r.start.column-1}),{...u},!0)),(t==="right"||t==="outside")&&(r.entire_row||s.UpdateAreaStyle(r.right,{...l},!0)),(t==="none"||t==="all"||t==="outside"||t==="right")&&(r.entire_row||s.UpdateAreaStyle(new _({row:r.start.row,column:r.end.column+1},{row:r.end.row,column:r.end.column+1}),{...d},!0)),_.Bleed(r)}TranslateR1C1(e,t){let i=!1,r=this.parser.flags.r1c1;if(this.parser.flags.r1c1=!0,typeof t=="string"&&t[0]==="="){let s=this.parser.Parse(t);s.expression&&(this.parser.Walk(s.expression,o=>(o.type==="address"&&o.r1c1&&(i=!0,o.offset_column?(o.absolute_column=!1,o.column=o.column+e.column):o.absolute_column=!0,o.offset_row?(o.absolute_row=!1,o.row=o.row+e.row):o.absolute_row=!0),!0)),i&&(t="="+this.parser.Render(s.expression,{missing:""})))}return this.parser.flags.r1c1=r,t}ClearAreaInternal(e){let t;if(e.start.sheet_id?t=this.model.sheets.Find(e.start.sheet_id):t=this.active_sheet,!t){console.warn("can't resolve sheet in ClearAreaInternal");return}e=t.RealArea(e);for(let r of t.cells.Iterate(e))if(r.area&&!e.ContainsArea(r.area)){this.Error(2);return}let i=this.model.tables.keys();for(let r of i){let s=this.model.tables.get(r);if(s&&s.area.start.sheet_id===t.id){let o=new _(s.area.start,s.area.end);if(e.ContainsArea(o)){for(let n=o.start.row;n<=o.end.row;n++)for(let a=o.start.column;a<=s.area.end.column;a++){let l=t.cells.GetCell({row:n,column:a},!1);l&&(l.table=void 0)}this.model.tables.delete(r)}}}t.ClearArea(e)}Error(e){this.grid_events.Publish({type:"error",code:e})}DuplicateSheetInternal(e){if(!this.options.add_tab){console.warn("add tab option not set or false");return}let t=this.ResolveSheet(e),i=this.model.sheets.list.reduce((a,l)=>Math.max(a,l.id),0)+1,r=-1;for(let a=0;a<this.model.sheets.length;a++)this.model.sheets.list[a]===t&&(r=a+1);if(!t||r<0)throw new Error("source sheet not found");if(typeof e.insert_before=="number")r=e.insert_before;else if(typeof e.insert_before=="string"){let a=e.insert_before.toLowerCase();for(let l=0;l<this.model.sheets.length;l++)if(this.model.sheets.list[l].name.toLowerCase()===a){r=l;break}}let s={rendered_values:!0},o=B.FromJSON(t.toJSON(s),this.model.theme_style_properties),n=e.new_name||t.name;for(;this.model.sheets.list.some(a=>a.name===n);){let a=n.match(/^(.*?)(\d+)$/);a?n=a[1]+(Number(a[2])+1):n=n+"2"}return o.name=n,o.id=i,this.model.sheets.Splice(r,0,o),o.id}SelectInternal(e){}FreezeInternal(e){let t=this.FindSheet(e.sheet_id||this.active_sheet.id);t.freeze.rows=e.rows,t.freeze.columns=e.columns}PatchExpression(e,t){let i=0,r=this.parser.Parse(e);if(r.expression&&(this.parser.Walk(r.expression,s=>{if(s.type==="range"){if(!s.start.sheet||s.start.sheet.toLowerCase()===t.sheet.name.toLowerCase()){let o=_.PatchArea(s,t);o?(s.start.row=o.start.row,s.start.column=o.start.column,s.end.row=o.end.row,s.end.column=o.end.column):s.start.row=s.end.row=s.start.column=s.end.column=-1}return i++,!1}else if(s.type==="address"){let o=_.PatchArea({start:s,end:s},t);return o?(s.row=o.start.row,s.column=o.start.column):s.row=s.column=-1,i++,!1}return!0}),i))return this.parser.Render(r.expression,{missing:""})}PatchConditionalsAndValidations(e){if(e.sheet.data_validation.length){let t=new Set;for(let i of e.sheet.data_validation){let r=[];for(let s of i.target){let o=_.PatchArea(s,e);o&&r.push(o)}if(r.length>0){if(i.target=r,i.type==="range"&&i.area.start.sheet_id===e.sheet.id){let s=_.PatchArea(i.area,e);s?i.area=s:t.add(i)}}else t.add(i)}t.size&&(e.sheet.data_validation=e.sheet.data_validation.filter(i=>!t.has(i)))}if(e.sheet.conditional_formats?.length){let t=new Set;for(let i of e.sheet.conditional_formats){let r=_.PatchArea(i.area,e);if(r)i.area=JSON.parse(JSON.stringify(r));else{t.add(i);continue}switch(i.type){case"expression":case"cell-match":{let s=this.PatchExpression(i.expression,e);s&&(i.expression=s)}break}}t.size&&(e.sheet.conditional_formats=e.sheet.conditional_formats.filter(i=>!t.has(i)))}}InsertRowsInternal(e){let t=this.FindSheet(e.sheet_id);if(e.count===1/0?e.count=1:e.count===-1/0&&(e.count=-t.rows),!t.InsertRows(e.before_row,e.count))return this.Error(2),{error:!0};this.PatchConditionalsAndValidations({sheet:t,before_column:0,column_count:0,before_row:e.before_row,row_count:e.count});for(let a of this.model.connected_elements.values())if(a.formula){let l=this.PatchFormulasInternal(a.formula,e.before_row,e.count,0,0,t.name.toLowerCase(),!1);l&&(a.formula=l)}let i=Array.from(this.model.tables.values());for(let a of i)if(a.area.start.sheet_id===e.sheet_id)if(e.count>0){if(e.before_row<=a.area.start.row)a.area.start.row+=e.count,a.area.end.row+=e.count;else if(e.before_row<=a.area.end.row){a.area.end.row+=e.count;for(let l=a.area.start.row;l<=a.area.end.row;l++)for(let c=a.area.start.column;c<=a.area.end.column;c++){let h=t.CellData({row:l,column:c});h.table=a}}}else if(e.before_row<=a.area.start.row)if(e.before_row-e.count<=a.area.start.row)a.area.start.row+=e.count,a.area.end.row+=e.count;else if(e.before_row-e.count>=a.area.end.row)this.model.tables.delete(a.name.toLowerCase());else{this.model.tables.delete(a.name.toLowerCase());for(let l=e.before_row;l<=a.area.end.row;l++)for(let c=a.area.start.column;c<=a.area.end.column;c++){let h=t.CellData({row:l,column:c});h.table===a&&(h.table=void 0)}}else e.before_row<=a.area.end.row&&(e.before_row-e.count>a.area.end.row&&(a.totals_row=!1),a.area.end.row=Math.max(0,a.area.end.row+e.count,e.before_row-1));this.model.named.PatchNamedRanges(t.id,0,0,e.before_row,e.count);let r=t.name.toLowerCase();for(let a of this.model.sheets.list){let l=a===t;for(let c of a.cells.Iterate())if(c.ValueIsFormula()){let h=this.PatchFormulasInternal(c.value||"",e.before_row,e.count,0,0,r,l);h&&(c.value=h)}for(let c of a.annotations)if(c.data.formula){let h=this.PatchFormulasInternal(c.data.formula||"",e.before_row,e.count,0,0,r,l);h&&(c.data.formula=h)}}let s=[],o=[],n=[];if(e.count>0){let a=e.before_row;for(let l of t.annotations)if(l.data.layout){let[c,h,d]=[l.data.layout.tl.address.row,l.data.layout.br.address.row,l.data.layout.br.offset.y];if(a<=c)l.data.layout.tl.address.row+=e.count,l.data.layout.br.address.row+=e.count;else if(a<h||a===h&&d>0)l.data.layout.br.address.row+=e.count,o.push(l);else continue;s.push(l)}}else if(e.count<0){let a=e.before_row,l=e.before_row-e.count-1;for(let c of t.annotations)if(c.data.layout){let[h,d,u]=[c.data.layout.tl.address.row,c.data.layout.br.address.row,c.data.layout.br.offset.y];if(a<=h)if(l<h)c.data.layout.tl.address.row+=e.count,c.data.layout.br.address.row+=e.count;else if(l<d-1||l===d-1&&u>0)c.data.layout.tl.address.row=a,c.data.layout.tl.offset.y=0,c.data.layout.br.address.row+=e.count,o.push(c);else{n.push(c);continue}else if(a<d||a===d&&u>0)l<d-1||l===d-1&&u>0?(c.data.layout.br.address.row+=e.count,o.push(c)):(c.data.layout.br.address.row=a,c.data.layout.br.offset.y=0,o.push(c));else continue;s.push(c)}}for(let a of n)t.annotations=t.annotations.filter(l=>l!==a);return{update_annotations_list:s,resize_annotations_list:o,delete_annotations_list:n}}InsertColumnsInternal(e){let t=this.FindSheet(e.sheet_id);if(e.count===1/0?e.count=1:e.count===-1/0&&(e.count=-t.columns),!t.InsertColumns(e.before_column,e.count))return this.Error(2),{error:!0};this.PatchConditionalsAndValidations({sheet:t,before_column:e.before_column,column_count:e.count,before_row:0,row_count:0});for(let a of this.model.connected_elements.values())if(a.formula){let l=this.PatchFormulasInternal(a.formula,0,0,e.before_column,e.count,t.name.toLowerCase(),!1);l&&(a.formula=l)}let i=Array.from(this.model.tables.values());for(let a of i)if(a.area.start.sheet_id===e.sheet_id)if(e.count>0){if(e.before_column<=a.area.start.column)a.area.start.column+=e.count,a.area.end.column+=e.count;else if(e.before_column<=a.area.end.column){a.area.end.column+=e.count;for(let l=a.area.start.row;l<=a.area.end.row;l++)for(let c=a.area.start.column;c<=a.area.end.column;c++){let h=t.CellData({row:l,column:c});h.table=a}this.UpdateTableColumns(a)}}else e.before_column<=a.area.start.column?e.before_column-e.count<=a.area.start.column?(a.area.start.column+=e.count,a.area.end.column+=e.count):e.before_column-e.count>=a.area.end.column?this.model.tables.delete(a.name.toLowerCase()):(a.area.start.column=e.before_column,a.area.end.column+=e.count,this.UpdateTableColumns(a)):e.before_column<=a.area.end.column&&(a.area.end.column=Math.max(0,a.area.end.column+e.count,e.before_column-1),this.UpdateTableColumns(a));this.model.named.PatchNamedRanges(t.id,e.before_column,e.count,0,0);let r=t.name.toLowerCase();for(let a of this.model.sheets.list){let l=a===t;for(let c of a.cells.Iterate())if(c.ValueIsFormula()){let h=this.PatchFormulasInternal(c.value||"",0,0,e.before_column,e.count,r,l);h&&(c.value=h)}for(let c of a.annotations)if(c.data.formula){let h=this.PatchFormulasInternal(c.data.formula,0,0,e.before_column,e.count,r,l);h&&(c.data.formula=h)}}let s=[],o=[],n=[];if(e.count>0){let a=e.before_column;for(let l of t.annotations)if(l.data.layout){let[c,h,d]=[l.data.layout.tl.address.column,l.data.layout.br.address.column,l.data.layout.br.offset.x];if(a<=c)l.data.layout.tl.address.column+=e.count,l.data.layout.br.address.column+=e.count;else if(a<h||a===h&&d>0)l.data.layout.br.address.column+=e.count,o.push(l);else continue;s.push(l)}}else if(e.count<0){let a=e.before_column,l=e.before_column-e.count-1;for(let c of t.annotations)if(c.data.layout){let[h,d,u]=[c.data.layout.tl.address.column,c.data.layout.br.address.column,c.data.layout.br.offset.x];if(a<=h)if(l<h)c.data.layout.tl.address.column+=e.count,c.data.layout.br.address.column+=e.count;else if(l<d-1||l===d-1&&u>0)c.data.layout.tl.address.column=a,c.data.layout.tl.offset.x=0,c.data.layout.br.address.column+=e.count,o.push(c);else{n.push(c);continue}else if(a<d||a===d&&u>0)l<d-1||l===d-1&&u>0?(c.data.layout.br.address.column+=e.count,o.push(c)):(c.data.layout.br.address.column=a,c.data.layout.br.offset.x=0,o.push(c));else continue;s.push(c)}}for(let a of n)t.annotations=t.annotations.filter(l=>l!==a);return{update_annotations_list:s,resize_annotations_list:o,delete_annotations_list:n}}ExecCommand(e,t=!0){let i={pending:[]},r=[];e=this.NormalizeCommands(e),t&&this.command_log.Publish({command:e,timestamp:new Date().getTime()});for(let n of e)switch(n.key){case 27:this.ResetInternal();break;case 12:if(n.area){let a=new _(n.area.start,n.area.end);this.ClearAreaInternal(a),i.data_area=_.Join(a,i.data_area),i.formula=!0}break;case 5:this.SelectInternal(n);break;case 16:this.FreezeInternal(n),i.structure_event=!0;break;case 31:{let a=this.FindSheet(n.format.area);a.conditional_formats.push(n.format),a.Invalidate(new _(n.format.area.start,n.format.area.end)),a===this.active_sheet&&(i.render_area=_.Join(n.format.area,i.render_area)),i.structure_event=!0,i.conditional_formatting_event=!0}break;case 32:{let a,l=0;if(n.format){let c=JSON.stringify(n.format);a=this.FindSheet(n.format.area),a.conditional_formats=a.conditional_formats.filter(h=>JSON.stringify(h)===c?(l++,i.render_area=_.Join(h.area,i.render_area),!1):!0)}else if(n.area){let c=new _(n.area.start,n.area.end);a=this.FindSheet(n.area),a.conditional_formats=a.conditional_formats.filter(h=>{let d=new _(h.area.start,h.area.end);return d.Intersects(c)?(l++,i.render_area=_.Join(d,i.render_area),!1):!0})}a&&l&&(a.FlushConditionalFormats(),i.structure_event=!0,i.conditional_formatting_event=!0)}break;case 29:{let a=this.FindSheet(n.area),l=new _(n.area.start,n.area.end),c=!0;e:for(let h=l.start.row;h<=l.end.row;h++)for(let d=l.start.column;d<=l.end.column;d++){let u=a.cells.GetCell({row:h,column:d},!1);if(u&&(u.area||u.merge_area||u.table)){c=!1;break e}}if(c){let h=this.model.tables.size+1,d="";for(;d=`Table${h++}`,!!this.model.tables.has(d.toLowerCase()););let u={area:n.area,name:d,sortable:n.sortable,theme:n.theme};n.totals&&(u.totals_row=!0),this.model.tables.set(d.toLowerCase(),u);for(let p=l.start.row;p<=l.end.row;p++)for(let m=l.start.column;m<=l.end.column;m++){let b=a.cells.GetCell({row:p,column:m},!0);b.table=u}this.UpdateTableColumns(u),a.Invalidate(new _(u.area.start,u.area.end)),a===this.active_sheet?(i.style_area=_.Join(l,i.style_area),i.render_area=_.Join(l,i.render_area)):i.style_event=!0}}break;case 30:{let a=this.FindSheet(n.table.area),l=new _(n.table.area.start,n.table.area.end);for(let h=l.start.row;h<=l.end.row;h++)for(let d=l.start.column;d<=l.end.column;d++){let u=a.cells.GetCell({row:h,column:d},!1);u&&(u.table=void 0)}this.model.tables.delete(n.table.name.toLowerCase());let c=a.RealArea(l.Clone().Shift(-1,-1).Resize(l.rows+2,l.columns+2));a.Invalidate(c),a===this.active_sheet?(i.style_area=_.Join(l,i.style_area),i.render_area=_.Join(l,i.render_area)):i.style_event=!0}break;case 10:{let a=this.FindSheet(n.area);a.MergeCells(new _(n.area.start,n.area.end)),i.structure_event=!0,i.structure_rebuild_required=!0,a===this.active_sheet?(i.data_area=_.Join(n.area,i.data_area),i.render_area=_.Join(n.area,i.render_area)):(i.data_event=!0,i.pending||(i.pending=[]),i.pending.push(a.id))}break;case 11:{let a=this.FindSheet(n.area),l={},c=new _(n.area.start,n.area.end);for(let d of a.cells.Iterate(c,!1))if(d.merge_area){let u=_.CellAddressToLabel(d.merge_area.start)+":"+_.CellAddressToLabel(d.merge_area.end);l[u]=d.merge_area}let h=Object.keys(l);for(let d=0;d<h.length;d++)a.UnmergeCells(l[h[d]]);a===this.active_sheet?(i.render_area=_.Join(n.area,i.render_area),i.data_area=_.Join(n.area,i.data_area)):(i.data_event=!0,i.pending||(i.pending=[]),i.pending.push(a.id)),i.structure_event=!0,i.structure_rebuild_required=!0}break;case 9:{let a,l=this.FindSheet(n.area);if(L(n.area)){a=new _(n.area);let c=l.GetCellStyle(n.area,!0);l.UpdateCellStyle(n.area,{indent:Math.max(0,(c.indent||0)+n.delta)},!0)}else{a=new _(n.area.start,n.area.end);for(let c of a){let h=l.GetCellStyle(c,!0);l.UpdateCellStyle(c,{indent:Math.max(0,(h.indent||0)+n.delta)},!0)}}l===this.active_sheet?(i.style_area=_.Join(a,i.style_area),i.render_area=_.Join(a,i.render_area)):i.style_event=!0}break;case 7:{let a,l=this.FindSheet(n.area);L(n.area)?(a=new _(n.area),l.UpdateCellStyle(n.area,n.style,!!n.delta)):(a=new _(n.area.start,n.area.end),l.UpdateAreaStyle(a,n.style,!!n.delta)),l===this.active_sheet?(i.style_area=_.Join(a,i.style_area),(!n.delta||n.style.fill||n.style.border_top||n.style.border_left||n.style.border_right||n.style.border_bottom)&&(a=_.Bleed(a),this.active_sheet.Invalidate(a)),i.render_area=_.Join(a,i.render_area)):i.style_event=!0}break;case 26:this.SetValidationInternal(n),(!n.area.start.sheet_id||n.area.start.sheet_id===this.active_sheet.id)&&(i.render_area=_.Join(new _(n.area.start,n.area.end),i.render_area));break;case 17:{let a={type:"token",named:!0,name:n.name,scope:n.scope};n.area||n.expression?(n.area?this.model.named.SetNamedRange(n.name,new _(n.area.start,n.area.end),n.scope):n.expression&&this.model.named.SetNamedExpression(n.name,n.expression,n.scope),this.autocomplete_matcher.AddFunctions(a)):(this.model.named.ClearName(n.name,n.scope),this.autocomplete_matcher.RemoveFunctions(a)),i.structure_event=!0,i.structure_rebuild_required=!0}break;case 8:{let a=this.ApplyBordersInternal(n);a.start.sheet_id===this.active_sheet.id?(i.render_area=_.Join(a,i.render_area),i.style_area=_.Join(a,i.style_area)):i.style_event=!0}break;case 25:this.ShowSheetInternal(n),i.sheets=!0,i.structure_event=!0;break;case 33:n.sheet.tab_color=n.color,i.sheets=!0,i.structure_event=!0;break;case 24:{let a=[],l=this.model.sheets.list[n.index];for(let c=0;c<this.model.sheets.length;c++)c!==n.index&&(c===n.move_before&&a.push(l),a.push(this.model.sheets.list[c]));n.move_before>=this.model.sheets.length&&a.push(l),this.model.sheets.Assign(a),i.sheets=!0,i.structure_event=!0}break;case 23:{let a=this.ResolveSheet(n);a&&(this.RenameSheetInternal(a,n.new_name),i.sheets=!0,i.structure_event=!0)}break;case 35:this.RemoveAnnotationInternal(n),i.structure_event=!0,i.structure_rebuild_required=!0,i.annotation_event=!0;break;case 34:this.CreateAnnotationInternal(n),i.structure_event=!0,i.structure_rebuild_required=!0,i.annotation_event=!0;break;case 3:{let a=this.ResizeRowsInternal(n);if(a)if(a.start.sheet_id===this.active_sheet.id){let l=this.active_sheet.RealArea(new _(a.start,a.end));i.render_area=_.Join(l,i.render_area),i.data_area=_.Join(l,i.data_area),i.data_event=!0}else i.data_event=!0,i.pending||(i.pending=[]),a.start.sheet_id&&i.pending.push(a.start.sheet_id);i.structure_event=!0}break;case 4:this.ResizeColumnsInternal(n),i.structure_event=!0;break;case 18:this.active_sheet.SetHeaderSize(n.show?void 0:1,n.show?void 0:1),this.flags.layout=!0,this.flags.repaint=!0;break;case 1:this.InsertRowsInternal(n),i.structure_event=!0,i.structure_rebuild_required=!0;break;case 2:this.InsertColumnsInternal(n),i.structure_event=!0,i.structure_rebuild_required=!0;break;case 15:case 14:{let a=this.FindSheet(n.area),l=a.cells.GetCell(n.area,!0);if(l){let c;l.merge_area?(c=new _(l.merge_area.start),l=a.cells.GetCell(l.merge_area.start,!0)):c=new _(n.area),n.key===14?l.SetNote(n.note):(l.hyperlink=n.reference||void 0,l.render_clean=[]),a===this.active_sheet?(i.style_area=_.Join(c,i.style_area),i.render_area=_.Join(c,i.render_area)):i.style_event=!0}}break;case 28:{let a=this.SortTableInternal(n);a&&a.start.sheet_id===this.active_sheet.id?(i.data_area=_.Join(a,i.data_area),this.options.repaint_on_cell_change&&(i.render_area=_.Join(a,i.render_area))):i.data_event=!0}break;case 6:{let a=this.SetRangeInternal(n,i);if(a){let c=this.model.sheets.Find(a.start.sheet_id||this.active_sheet.id)?.TablesFromArea(a,!0)||[];for(let h of c)this.UpdateTableColumns(h)}a&&a.start.sheet_id===this.active_sheet.id?(i.data_area=_.Join(a,i.data_area),this.options.repaint_on_cell_change&&(i.render_area=_.Join(a,i.render_area))):i.data_event=!0}break;case 21:this.DeleteSheetInternal(n),i.sheets=!0,i.structure_event=!0,i.structure_rebuild_required=!0;break;case 20:this.DuplicateSheetInternal(n),i.sheets=!0,i.structure_event=!0,i.structure_rebuild_required=!0;break;case 19:{let a=this.AddSheetInternal(n.name,n.insert_index);typeof a=="number"&&n.show&&this.ActivateSheetInternal({key:22,id:a}),i.structure_event=!0,i.sheets=!0,i.structure=!0}break;case 22:this.ActivateSheetInternal(n);break;default:console.warn(`unhandled command: ${Ce[n.key]} (${n.key})`)}let s,o;return i.data_area?(i.data_area.start.sheet_id||i.data_area.SetSheetID(this.active_sheet.id),s={type:"data",area:i.data_area}):i.data_event&&(s={type:"data"}),i.style_area?(i.style_area.start.sheet_id||i.style_area.SetSheetID(this.active_sheet.id),o={type:"style",area:i.style_area}):i.style_event&&(o={type:"style"}),s&&o?r.push({type:"composite",data_area:s.area,style_area:o.area}):(s&&r.push(s),o&&r.push(o)),i.structure_event&&r.push({type:"structure",rebuild_required:i.structure_rebuild_required,conditional_format:i.conditional_formatting_event,update_annotations:i.annotation_event}),this.batch>0?this.batch_events.push(...r):this.grid_events.Publish(r),i}};var qe=class extends ne{get active(){return this.nodes.length>0}Reset(){this.AttachNodes()}AttachNodes(e=[],t=!0){this.assume_formula=t;let i=[];i=e.map(r=>{for(let s of this.nodes)if(s.node===r)return s;return{node:r}});for(let r of this.nodes)if(r.listeners){for(let[s,o]of r.listeners.entries())r.node.removeEventListener(s,o);r.listeners.clear()}this.nodes=i;for(let r of this.nodes){if(r.formatted_text===r.node.textContent){let s=r.node.innerHTML.length;r.check!==s&&(r.formatted_text=void 0)}r.node.ownerDocument.activeElement===r.node&&(this.active_editor=r),this.UpdateText(r,{toll_events:!0}),this.RegisterListener(r,"focusin",()=>{this.active_editor=r}),this.RegisterListener(r,"focusout",()=>{this.active_editor=void 0}),this.RegisterListener(r,"input",s=>{s.isTrusted&&(this.UpdateText(r),this.UpdateColors())})}this.UpdateColors(!0)}};var St=class extends Se{hide_selection=!1;headless=!1;edit_state={};get scale(){return this.layout.scale}set scale(e){this.layout.scale=e,this.UpdateLayout(),this.UpdateAnnotationLayout(),this.layout.UpdateAnnotation(this.active_sheet.annotations,this.theme),this.layout.ApplyTheme(this.theme),this.overlay_editor?.UpdateScale(e),this.tab_bar?.UpdateScale(e),this.grid_events.Publish({type:"scale",scale:e});for(let t of this.model.sheets.list)for(let i of t.annotations)i.dirty=!0}theme;selected_annotation;hover_data={};editing_state=0;editing_cell={row:-1,column:-1,sheet_id:0};editing_selection;editing_annotation;pending_reset_selection=!1;view_node;container;layout;tile_update_pending=!1;scroll_offset_pending;pending_layout_update=new Set;decimal_separator_code=46;overlay_editor;autocomplete;formula_bar;RESIZE_PIXEL_BUFFER=5;external_editor_config;external_editor;cell_resize={row:-1,column:-1};render_tiles=new _({row:0,column:0});primary_selection={target:{row:0,column:0},area:new _({row:0,column:0}),empty:!0};spill_selection={target:{row:0,column:0},area:new _({row:0,column:0}),empty:!0};active_selection={target:{row:0,column:0},area:new _({row:0,column:0}),empty:!0};nub_select_flag=!1;additional_selections=[];double_click_data={};layout_token=0;render_token=0;tile_renderer;selection_renderer;tab_bar;DOM=z.GetInstance();constructor(e={},t,i=Ke,r=!0,s){if(super(e,t),this.decimal_separator_code=M.decimal_separator.charCodeAt(0),this.theme=JSON.parse(JSON.stringify(i)),!r){this.headless=!0,this.layout=new Ve(this.model,this.view);return}this.DOM=s,this.layout=new Ge(this.model,this.view,s),e.initial_scale&&(typeof e.initial_scale=="string"&&(e.initial_scale=Number(e.initial_scale)),this.layout.scale=e.initial_scale),this.tile_renderer=new Be(this.theme,this.layout,this.model,this.view,this.options),this.selection_renderer=new Ne(this.theme,this.layout,this.model,this.view,this.primary_selection,this.additional_selections)}CopyArea(e,t="copy"){let i=(e.start.sheet_id?this.model.sheets.Find(e.start.sheet_id):this.active_sheet)||this.active_sheet,r=i.GetCellStyle(e,!1),s=t!=="cut",o=[];for(let{cell:n,row:a,column:l}of i.cells.IterateRC(e)){let c=n.value;s&&c&&n.type===1&&(c=this.FormatR1C1(c,{row:a,column:l})[0][0]);let h=a-e.start.row,d=l-e.start.column;o[h]||(o[h]=[]);let u;n.area&&(u={start:{row:n.area.start.row-e.start.row,column:n.area.start.column-e.start.column},end:{row:n.area.end.row-e.start.row,column:n.area.end.column-e.start.column}}),o[h][d]={value:c,calculated:n.calculated,style:r[h][d],area:u}}return t==="cut"&&this.SetRange(e,void 0,{recycle:!0}),o}PasteArea(e,t,i={}){if(!t)throw new Error("no clipboad data");let r=t.length,s=t[0]?.length||0;e.Resize(Math.max(1,Math.floor(e.rows/r))*r,Math.max(1,Math.floor(e.columns/s))*s);let o=(e.start.sheet_id?this.model.sheets.Find(e.start.sheet_id):this.active_sheet)||this.active_sheet,n=[];if(i.values)for(let[c,h]of t.entries()){n[c]=[];for(let d of h)n[c].push(typeof d.calculated>"u"?d.value:d.calculated)}let a=t,l=this.Batch(()=>{if(i.values)this.SetRange(e,n,{r1c1:!0,recycle:!0});else{this.SetRange(e,void 0,{recycle:!0});for(let c of e){let h=(c.row-e.start.row)%r,d=(c.column-e.start.column)%s,u=a[h][d];if(u.area){if(u.area.start.row===h&&u.area.start.column===d){let p=new _(u.area.start,u.area.end);p.Shift(e.start.row,e.start.column),this.SetRange(p,u.value,{r1c1:!0,array:!0})}}else u.value&&this.SetRange(new _(c),u.value,{r1c1:!0})}}if(i.formatting==="number-formats")for(let c of e){let h=(c.row-e.start.row)%r,d=(c.column-e.start.column)%s,u=(a[h][d].style||{}).number_format;o.UpdateCellStyle(c,{number_format:u},!0)}else if(i.formatting!=="target")for(let c of e){let h=(c.row-e.start.row)%r,d=(c.column-e.start.column)%s;o.UpdateCellStyle(c,a[h][d].style||{},!1)}},!0);this.grid_events.Publish(l)}Reselect(){this.primary_selection.empty||this.Select(this.primary_selection,this.primary_selection.area,this.primary_selection.target)}SetNote(e,t){if(!e){if(this.primary_selection.empty)return;e=this.primary_selection.target}this.ExecCommand({key:14,area:e,note:t})}FindAnnotation(e){for(let t of this.active_sheet.annotations)if((t.view[this.view_index]||{}).node===e)return t}CreateAnnotation(e={},t=this.active_sheet,i=!0,r=!1,s,o){this.ExecCommand({key:34,properties:e,add_to_sheet:i,offset:r,target:s,focus:o,sheet:t})}CreateAnnotationInternal(e){let t=new ae(e.properties);if(e.offset)if(!t.data.layout&&t.scaled_rect&&(t.data.layout=this.layout.RectToAnnotationLayout(t.scaled_rect)),!t.data.layout)console.warn("can't offset annotation without layout");else{let i=this.layout.AnnotationLayoutToRect(t.data.layout).Shift(20,20),r=!0;for(;r;){r=!1;for(let s of e.sheet.annotations)if(s!==t&&s.scaled_rect&&s.scaled_rect.top===i.top&&s.scaled_rect.left===i.left){i=i.Shift(20,20),r=!0;break}}t.data.layout=this.layout.RectToAnnotationLayout(i)}if(e.target&&(U.IsRectangle(e.target)?(t.data.layout=void 0,t.rect=U.Create(e.target)):e.target.start&&(t.rect=void 0,t.data.layout=this.layout.AddressToAnnotationLayout(e.target.start,e.target.end||e.target.start))),e.add_to_sheet&&(e.sheet.annotations.some(i=>i===t)||e.sheet.annotations.push(t),this.AddAnnotation(t)),e.focus){let i=t.view[this.view_index];if(i&&i.node){let r=i.node;setTimeout(()=>{r.focus()},1)}}}UpdateAnnotationLayout(){}AddAnnotation(e,t=!1,i=!0){let r=e.view[this.view_index];if(r||(r={},e.view[this.view_index]=r),!r.node){let s=this.DOM.Div("annotation",void 0,{data:{scale:this.layout.scale.toString()},style:{fontSize:`${10*this.layout.scale}pt`},attrs:{tabindex:"-1"},events:{mousedown:a=>{a.button===0&&this.layout.AnnotationMouseDown(e,s,a,o,n).then(l=>{l?this.grid_events.Publish(l):this.selected_annotation!==e&&this.grid_events.Publish({type:"annotation",annotation:e,event:"select"}),e.data.layout&&this.EnsureAddress(e.data.layout.br.address,1)})},focusin:()=>{for(let a of this.layout.GetFrozenAnnotations(e))a.classList.add("clone-focus");this.selected_annotation=e,this.primary_selection.empty=!0,this.primary_selection.target={row:-1,column:-1,sheet_id:this.active_sheet.id},this.HideGridSelection()},focusout:a=>{for(let l of this.layout.GetFrozenAnnotations(e))l.classList.remove("clone-focus");this.formula_bar&&this.formula_bar.IsElement(a.relatedTarget)?(this.primary_selection.empty=!0,this.RenderSelections(),this.editing_annotation=e,this.layout.ShowSelections(!0)):this.formula_bar?.IsExpandButton(a.relatedTarget)||this.layout.FocusInLayout(a.relatedTarget||void 0)&&(this.selected_annotation===e&&(this.selected_annotation=void 0),this.ShowGridSelection())}}});r.node=s,r.content_node=this.DOM.Div("annotation-content",s);let o=this.DOM.Div("annotation-move-target",s),n=this.DOM.Div("annotation-resize-target",s);s.addEventListener("keydown",a=>{let l=e.scaled_rect;if(!l){console.info("missing scaled rect!");return}let c=[s,...this.layout.GetFrozenAnnotations(e)];if(a.ctrlKey||V.is_mac&&a.metaKey){let d=e.data.style?{...e.data.style}:{},u=!0;switch(a.key){case"b":this.ApplyAnnotationStyle({bold:!d.bold});break;case"i":this.ApplyAnnotationStyle({italic:!d.italic});break;case"u":this.ApplyAnnotationStyle({underline:!d.underline});break;default:u=!1}if(u){a.stopPropagation(),a.preventDefault();return}}let h={x:l.left,y:l.top};switch(a.key){case"ArrowUp":case"Up":a.ctrlKey?(this.layout.AnnotationLayoutOrder(e,1)&&this.grid_events.Publish({type:"annotation",event:"move",annotation:e}),s.focus()):h.y--;break;case"ArrowLeft":case"Left":if(a.ctrlKey)return;h.x--;break;case"ArrowRight":case"Right":if(a.ctrlKey)return;h.x++;break;case"ArrowDown":case"Down":a.ctrlKey?(this.layout.AnnotationLayoutOrder(e,-1)&&this.grid_events.Publish({type:"annotation",event:"move",annotation:e}),s.focus()):h.y++;break;case"Escape":case"Esc":this.Focus();break;case"Backspace":a.metaKey&&V.is_mac&&(this.Focus(),this.RemoveAnnotation(e));break;case"Delete":case"Del":this.Focus(),this.RemoveAnnotation(e);break;default:return}if(a.stopPropagation(),a.preventDefault(),h.x=Math.max(h.x,0),h.y=Math.max(h.y,0),l.left!==h.x||l.top!==h.y){l.left=Math.round(h.x),l.top=Math.round(h.y);for(let d of c)d.style.top=l.top+"px",d.style.left=l.left+"px";e.data.extent=void 0,this.grid_events.Publish({type:"annotation",event:"move",annotation:e}),e.data.layout=this.layout.RectToAnnotationLayout(l)}})}i&&(this.layout.AddAnnotation(e,this.theme),e.data.layout&&this.EnsureAddress(e.data.layout.br.address,1,t)),t||this.grid_events.Publish({type:"annotation",annotation:e,event:"create"})}AnnotationUpdated(e){this.layout.CloneFrozenAnnotation(e)}RemoveAnnotation(e,t=this.active_sheet){this.ExecCommand({key:35,annotation:e,sheet:t})}RemoveAnnotationInternal(e){super.RemoveAnnotationInternal(e),this.layout.RemoveAnnotation(e.annotation)}RemoveAnnotationNodes(){this.headless||this.layout.RemoveAnnotationNodes()}ShowHeaders(e=!0){this.ExecCommand({key:18,show:e})}FromImportData(e,t=!1){this.RemoveAnnotationNodes();let i=e.sheets,r=i.map(()=>B.Blank(this.model.theme_style_properties).toJSON()),s;if(typeof e.active_tab=="number")s=r[e.active_tab]?.id;else for(let n=0;n<e.sheets.length;n++)if(!e.sheets[n].hidden){s=r[n].id;break}this.UpdateSheets(r,!0,s);let o={};this.model.macro_functions.clear(),this.ClearSelection(this.primary_selection),this.model.tables.clear();for(let n=0;n<i.length;n++){let a=this.model.sheets.list[n];a.ImportData(i[n]),o[a.name]=a.id;for(let l of i[n].cells)l.table&&(l.table.area.start.sheet_id=a.id,this.model.tables.set(l.table.name.toLowerCase(),l.table));for(let l of this.model.tables.values())this.UpdateTableColumns(l)}this.model.sheets.UpdateIndexes(),this.model.named.Reset(),e.named&&this.model.UnserializeNames(e.named,this.active_sheet,!0);for(let n of this.active_sheet.annotations)this.AddAnnotation(n,!0);this.ActivateSheetTasks(),this.QueueLayoutUpdate(),this.StyleDefaultFromTheme(),t&&this.Repaint(!1,!1),this.tab_bar&&this.tab_bar.Update(!1)}NextSheet(e=1,t=!1){if(this.model.sheets.length===1)return;let i=this.model.sheets.list.map((r,s)=>({sheet:r,index:s})).filter(r=>r.sheet.visible);if(i.length!==1){for(let r=0;r<i.length;r++)if(i[r].sheet===this.active_sheet){let s=(r+e)%i.length;for(;s<0;)s+=i.length;this.ActivateSheet(i[s].index,t);return}}}UpdateSheets(e,t=!1,i){if(super.UpdateSheets(e,t,i),this.RemoveAnnotationNodes(),this.ClearSelection(this.primary_selection),e[0]&&e[0].primary_selection){let r=e[0].primary_selection;r.empty||this.Select(this.primary_selection,new _(r.area.start,r.area.end),r.target)}else if(!this.active_sheet.selection.empty){let r=this.active_sheet.selection;this.Select(this.primary_selection,new _(r.area.start,r.area.end),r.target)}this.layout.ClearLayoutCaches();for(let r of this.model.sheets.list)for(let s of r.annotations)this.AddAnnotation(s,!0,r===this.active_sheet);this.ActivateSheetTasks(),this.QueueLayoutUpdate(JSON.parse(JSON.stringify(this.active_sheet.scroll_offset))),this.StyleDefaultFromTheme(),t&&this.Repaint(!1,!1),this.tab_bar&&this.tab_bar.Update(!1)}UpdateLayout(){this.layout.UpdateTiles(),this.layout.UpdateContentsSize(),this.render_tiles=this.layout.VisibleTiles(),this.Repaint(!0)}UpdateTabBar(){this.tab_bar&&this.tab_bar.Update(!0)}UpdateTheme(e=!1,t){if(!e)for(let r of Object.keys(this.theme))delete this.theme[r];let i=JSON.parse(JSON.stringify(Ke));this.view_node&&(i={...si(this.view_node,this.options.support_font_stacks)}),i={...this.theme,...i,...t},Object.assign(this.theme,i),this.StyleDefaultFromTheme(),this.active_sheet.UpdateDefaultRowHeight(this.theme),this.active_sheet.FlushCellStyles(),this.layout.ApplyTheme(this.theme),this.tab_bar&&this.tab_bar.UpdateTheme(),e||(this.UpdateLayout(),this.overlay_editor?.UpdateScale(this.layout.scale),this.Repaint(!0,!0,!0))}SetScale(e){e=Math.round(e*1e3)/1e3,e=Math.min(2,Math.max(e,.5)),this.options.persist_scale_key&&localStorage.setItem(this.options.persist_scale_key,JSON.stringify({scale:e})),this.scale=e}Initialize(e,t=!1){if(!this.tile_renderer||!this.selection_renderer)return;this.view_node=e,this.UpdateTheme(!0);let r=e.querySelector(".treb-spreadsheet-body").querySelector("div");this.options.formula_bar&&(this.autocomplete||(this.autocomplete=new xe({theme:this.theme,container:r})),this.InitFormulaBar(e,this.autocomplete)),this.options.tab_bar&&(this.tab_bar=new Oe(this.layout,this.model,this.view,this.options,this.theme,e),this.tab_bar.Subscribe(s=>{switch(s.type){case"cancel":break;case"scale":{let o=this.layout.scale;if(o=Math.round(s.value*1e3)/1e3,o=Math.min(2,Math.max(o,.5)),this.options.persist_scale_key&&localStorage.setItem(this.options.persist_scale_key,JSON.stringify({scale:o})),this.scale=o,s.keep_focus)return}break;case"reorder-sheet":this.ReorderSheet(s.index,s.move_before);break;case"delete-sheet":this.DeleteSheet();break;case"add-sheet":this.AddSheet();break;case"rename-sheet":this.RenameSheet(s.sheet,s.name);break;case"activate-sheet":this.ActivateSheetID(s.sheet.id);break}this.SelectingArgument()||this.Focus()})),this.container=r,this.container.classList.add("treb-grid"),V.is_mac&&V.is_safari&&this.container.classList.add("safari"),this.container.setAttribute("tabindex","-1"),this.layout.Initialize(r,{scroll:()=>this.OnScroll(),dropdown:s=>this.OnDropdownSelect(s),sort:(s,o,n)=>{let a=this.model.tables.get(s.toLowerCase());a&&this.SortTable(a,{column:o,asc:n})},focus:()=>this.Focus()},this.options.scrollbars),this.selection_renderer.Initialize(),this.layout.UpdateTiles(),this.autocomplete||(this.autocomplete=new xe({theme:this.theme,container:r})),this.InitOverlayEditor(this.autocomplete),this.AttachListeners(),this.render_tiles=this.layout.VisibleTiles(),t||(this.tab_bar?.Update(!1),this.Repaint(!0))}MergeCells(e){!e&&this.primary_selection.empty||(this.layout.HideDropdownCaret(),this.ExecCommand({key:10,area:e||this.primary_selection.area}))}UnmergeCells(e){!e&&this.primary_selection.empty||(this.layout.HideDropdownCaret(),this.ExecCommand({key:11,area:e||this.primary_selection.area}))}GetAnnotationStyle(){if(this.selected_annotation)return this.selected_annotation.data?.style?JSON.parse(JSON.stringify(this.selected_annotation.data.style)):{}}ApplyAnnotationStyle(e={},t=!0){if(this.selected_annotation){let i=this.selected_annotation;i.data.style=JSON.parse(JSON.stringify(t?D.Composite([i.data.style||{},e]):e));let r=i.view[this.view_index]?.node;this.layout.UpdateAnnotation(i,this.theme),r&&r.focus(),this.grid_events.Publish({type:"annotation",event:"update",annotation:i}),this.DelayedRender()}}AnnotationSelected(){return!!this.selected_annotation}Focus(e="",t=!1){if(this.selected_annotation)if(t)this.editing_annotation===this.selected_annotation?this.pending_reset_selection=!0:(this.selected_annotation=void 0,this.ShowGridSelection());else{this.selected_annotation.view[this.view_index].node?.focus();return}V.is_mobile?this.container?.focus():this.overlay_editor?.Focus(e)}SetValidation(e,t,i){if(!e){if(this.primary_selection.empty)throw new Error("invalid target in set validation");e=this.primary_selection.area}let r=new _(e.start,e.end),s={key:26,area:{start:r.start,end:r.end},error:i};t&&(Array.isArray(t)?s.list=t:typeof t=="object"&&t.start&&t.end&&L(t.start)&&L(t.end)&&(s.range=t)),this.ExecCommand(s),!this.primary_selection.empty&&(!e.start.sheet_id||e.start.sheet_id===this.active_sheet.id)&&r.Contains(this.primary_selection.target)&&requestAnimationFrame(()=>this.Select(this.primary_selection,this.primary_selection.area,this.primary_selection.target))}SetName(e,t,i,r,s=!1){let o=this.model.named.ValidateNamed(e);if(!o)throw new Error("invalid name");if(e=o,this.autocomplete_matcher){let a=this.autocomplete_matcher.Get(e);if(a&&(!a.named||!s)&&(t||i))throw new Error("name already defined")}let n={key:17,name:e,scope:r};if(t)L(t)&&(t=new _(t)),t.start.sheet_id||(t=new _({...t.start,sheet_id:this.active_sheet.id},t.end)),n.area=new _(t.start,t.end);else if(i){let a=this.parser.Parse(i);if(a.valid&&a.expression)this.parser.Walk(a.expression,l=>{if(l.type==="address"||l.type==="range"){if(l.type==="range"&&(l=l.start),!l.sheet_id&&l.sheet){let c=this.model.sheets.Find(l.sheet);c&&(l.sheet_id=c.id)}return l.sheet_id||(l.sheet_id=this.active_sheet.id),!1}return!0}),n.expression=a.expression;else throw console.info({expression:i,parse_result:a}),new Error("invalid expression")}this.ExecCommand(n)}SelectAll(){this.Select(this.primary_selection,new _({row:1/0,column:1/0}),void 0,!0),this.RenderSelections()}ExternalEditor(e){if(this.external_editor_config=e,e){let t=(e.dependencies||[]).filter(i=>!!i).map(i=>L(i)?new _(i):new _(i.start,i.end));if(e.nodes?.length){if(!this.external_editor){let i=new qe(this.model,this.view);this.external_editor=i,i.Subscribe(()=>this.HighlightDependencies(i.dependencies))}this.external_editor.AttachNodes(e.nodes,e.assume_formula??!0)}else this.external_editor&&this.external_editor.Reset();e.dependencies&&this.HighlightDependencies(t)}else this.external_editor&&this.external_editor.Reset(),this.ClearAdditionalSelections(),this.RenderSelections(!0)}SelectRange(e){this.Select(this.primary_selection,e),this.RenderSelections()}GetRangeStyle(e,t=!1){let i=0;if(L(e)?i=e.sheet_id||this.active_sheet.id:i=e.start.sheet_id||this.active_sheet.id,i)return this.model.sheets.Find(i)?.GetCellStyle(e,t)||void 0}FormatR1C1(e,t){Ft(t)&&(t=t.start),Array.isArray(e)||(e=[[e]]);let i={type:"address",label:"",row:t.row,column:t.column,sheet:t.sheet_id?this.model.sheets.Name(t.sheet_id):this.active_sheet.name,position:0,id:0};for(let r=0;r<e.length;r++){let s=e[r];for(let o=0;o<s.length;o++){let n=s[o];if(typeof n=="string"&&n[0]==="="){let a=this.parser.Parse(n);a.expression&&(s[o]="="+this.parser.Render(a.expression,{missing:"",r1c1:!0,r1c1_base:{...i,row:t.row+r,column:t.column+o}}))}}}return e}GetRange(e,t){if(L(e)){let r=this.model.sheets.Find(e.sheet_id||this.active_sheet.id);if(r){if(t==="A1"||t==="R1C1"){let s=r.cells.RawValue(e);return t==="R1C1"?this.FormatR1C1(s,e):s}return t==="formatted"?r.GetFormattedRange(e):r.cells.GetRange(e)}return}let i=this.model.sheets.Find(e.start.sheet_id||this.active_sheet.id);if(i){if(t==="A1"||t==="R1C1"){let r=i.cells.RawValue(e.start,e.end);return t==="R1C1"?this.FormatR1C1(r,e):r}return t==="formatted"?i.GetFormattedRange(e.start,e.end):i.cells.GetRange(e.start,e.end)}}SetRange(e,t,i={}){let{recycle:r,transpose:s,array:o,r1c1:n}=i;if(i.argument_separator){let a={argument_separator:this.parser.argument_separator,decimal_mark:this.parser.decimal_mark};this.parser.Save();let l=!1;if(i.argument_separator===","&&this.parser.argument_separator!==","&&(this.parser.SetLocaleSettings("."),l=!0),i.argument_separator===";"&&this.parser.argument_separator!==";"&&(this.parser.SetLocaleSettings(","),l=!0),l){this.parser.flags.r1c1=n;let c=h=>{if(typeof h=="string"&&h[0]==="="){let d=this.parser.Parse(h);d.expression&&(h="="+this.parser.Render(d.expression,{missing:"",convert_decimal:a.decimal_mark,convert_argument_separator:a.argument_separator,pass_through_addresses:!0}))}return h};Array.isArray(t)?t=t.map(h=>Array.isArray(h)?h.map(d=>c(d)):c(h)):t=c(t)}this.parser.Restore()}if(t=this.model.UntranslateData(t,{r1c1:n}),!Array.isArray(t))r||o?this.ExecCommand({key:6,area:e,value:t,array:o,r1c1:n}):this.ExecCommand({key:6,area:e.start,value:t,array:o,r1c1:n});else{if(Me(t)){if(r){if(e.rows>t.length){let l=Math.floor(e.rows/t.length);if(l>1){let c=[...t];for(let h=0;h<l;h++){let d=JSON.parse(JSON.stringify(c));t.push(...d)}}}let a=0;for(let l of t)a=Math.max(a,l.length);if(e.columns>a){let l=Math.floor(e.columns/a);if(l>1)for(let c of t){for(;c.length<a;)c.push(void 0);let h=[...c];for(let d=0;d<l;d++){let u=JSON.parse(JSON.stringify(h));c.push(...u)}}}}}else if(r){let a=e.entire_column?this.active_sheet.rows:e.rows,l=e.entire_row?this.active_sheet.columns:e.columns,c=a*l;if(c>t.length){let d=t.slice(0),u=Math.ceil(c/d.length);for(let p=1;p<u;p++)d=d.concat(t.slice(0));t=d}let h=[];for(let d=0,u=0;d<l;d++,u+=a)h[d]=t.slice(u,u+a);t=h}else t=[t];s&&(t=this.Transpose(t)),this.ExecCommand({key:6,area:e,value:t,array:o,r1c1:n})}!this.primary_selection.empty&&e.Contains(this.primary_selection.target)&&this.UpdateFormulaBarFormula()}ApplyStyle(e,t={},i=!0){if(!e){if(this.primary_selection.empty)return;e=this.primary_selection.area}B.UpdateStyle(t),this.ExecCommand({key:7,area:e,style:t,delta:i}),this.UpdateFormulaBarFormula()}GetSelection(){return this.primary_selection}Update(e=!1,t){this.DelayedRender(e,t)}UpdateAnnotations(){this.active_sheet.annotations.length&&this.layout.UpdateAnnotation(this.active_sheet.annotations,this.theme)}Indent(e,t=0){if(!e){if(this.primary_selection.empty)return;e=this.active_sheet.RealArea(this.primary_selection.area)}this.ExecCommand({key:9,area:e,delta:t})}ApplyBorders2(e,t="none",i,r=1){if(!e){if(this.primary_selection.empty)return;e=this.primary_selection.area}t==="none"&&(r=0),this.ExecCommand({key:8,color:i,area:e,borders:t,width:r})}Batch(e,t=!0){if(this.batch===0?this.batch_paint=t:this.batch_paint=this.batch_paint||t,this.batch++,e(),this.batch--,this.batch===0){let i=this.batch_events.slice(0);return this.batch_events=[],this.batch_paint&&this.DelayedRender(!1),i}return[]}ScrollTo(e,t=!0,i=!0,r=!1){this.layout.ScrollTo(e,t,i,r)}ScrollIntoView(e,t=!1){this.options.scrollbars&&this.layout.ScrollIntoView(e,t)}GetScrollOffset(){return this.layout.GetScrollOffset()}ScrollOffset(e){if(e)this.layout.scroll_offset=e;else return this.layout.scroll_offset}RenameSheetInternal(e,t){super.RenameSheetInternal(e,t),this.tab_bar?.Update(!1)}StyleDefaultFromTheme(){this.model.theme_style_properties.font_face=this.theme.grid_cell?.font_face||"",this.model.theme_style_properties.font_size=this.theme.grid_cell?.font_size||{unit:"pt",value:10}}AutoSizeRow(e,t,i=!0){if(!this.tile_renderer)return;let r=e.GetRowHeight(t),s=0,o=6;for(let n=0;n<e.cells.columns;n++){let a=e.CellData({row:t,column:n}),{height:l}=this.tile_renderer.MeasureText(a,e.GetColumnWidth(n),1);s=Math.max(s,l+o)}i||(s=Math.max(r,s)),s>o+2&&e.SetRowHeight(t,s)}AutoSizeColumn(e,t,i=!0){if(!this.tile_renderer)return;let r=e.GetColumnWidth(t),s=0,o=14;for(let n=0;n<e.cells.rows;n++){let a=e.CellData({row:n,column:t}),{width:l}=this.tile_renderer.MeasureText(a,r,1);s=Math.max(s,l+o)}i||(s=Math.max(r,s)),s>o+2&&e.SetColumnWidth(t,s)}EnsureActiveSheet(e=!1){for(let t of this.model.sheets.list)if(t===this.active_sheet){e&&this.ActivateSheetInternal({key:22,id:t.id,force:!0});return}this.ActivateSheetInternal({key:22,index:0})}RefreshAnnotations(){this.RemoveAnnotationNodes();for(let e of this.active_sheet.annotations)this.AddAnnotation(e,!0,!0)}ActivateSheetInternal(e){let t=this.SelectingArgument(),i=this.ResolveSheet(e)||this.model.sheets.list[0];if(this.active_sheet===i&&!e.force)return;if(!i.visible)throw new Error("cannot activate hidden sheet");this.HideHoverInfo(),this.active_sheet.selection=JSON.parse(JSON.stringify(this.primary_selection)),this.active_sheet.scroll_offset=this.layout.scroll_offset;let r=this.active_sheet;this.RemoveAnnotationNodes(),this.active_sheet=i,t?this.RenderSelections():(this.ClearSelection(this.primary_selection),i.selection&&!i.selection.empty&&this.Select(this.primary_selection,new _(i.selection.area.start,i.selection.area.end),i.selection.target));let s=this.active_sheet.annotations;for(let o of s)this.AddAnnotation(o,!0);this.ActivateSheetTasks(),this.QueueLayoutUpdate(),this.pending_layout_update.has(this.active_sheet.id)?(this.Repaint(!0,!0),this.pending_layout_update.delete(this.active_sheet.id)):this.Repaint(!1,!1),this.grid_events.Publish({type:"sheet-change",deactivate:r,activate:this.active_sheet}),this.tab_bar&&this.tab_bar.Update(!!e.user),this.layout.scroll_offset=this.active_sheet.scroll_offset,this.formula_bar?.selecting&&requestAnimationFrame(()=>this.formula_bar?.FocusEditor())}ActivateSheetTasks(){if(this.active_sheet.Activate(this.DOM),this.active_sheet.image&&!this.active_sheet.image.complete){let e=this.active_sheet.image,t=0,i=()=>{e.complete?this.UpdateLayout():t++<5&&setTimeout(()=>i(),10)};i()}}HighlightFreezeArea(){for(let e of[this.layout.corner_selection,this.layout.row_header_selection,this.layout.column_header_selection])e.classList.add("highlight-area"),setTimeout(()=>{e.classList.remove("highlight-area")},400)}QueueLayoutUpdate(e){this.tile_update_pending=!0,e&&(this.scroll_offset_pending=e)}HandleAddressLabelEvent(e){if(e){let t=(o="")=>{let n=o.toLowerCase();for(let a of this.model.sheets.list)if(a.name.toLowerCase()===n)return a.id;return this.active_sheet.id},i=o=>{for(let n of this.model.sheets.list)if(n.id===o)return n;return this.active_sheet},r,s=this.parser.Parse(e);if(s.expression)switch(s.expression.type){case"address":s.expression.sheet_id=t(s.expression.sheet),r=new _(s.expression);break;case"range":s.expression.start.sheet_id=t(s.expression.start.sheet),r=new _(s.expression.start,s.expression.end);break;case"identifier":{let o=this.model.GetName(s.expression.name,this.active_sheet.id);o?.type==="range"&&(r=o.area),r||this.primary_selection.empty||this.SetName(s.expression.name.toUpperCase(),this.primary_selection.area)}break;default:break}if(r){let o=i(r.start.sheet_id);if(o.columns>=r.end.column&&o.rows>=r.end.row){this.ExecCommand({key:5,area:r});return}else console.warn("address out of range")}}this.UpdateAddressLabel(),this.Focus()}InitFormulaBar(e,t){this.formula_bar=new We(e,this.model,this.view,this.options,t),this.formula_bar.autocomplete_matcher=this.autocomplete_matcher,this.formula_bar.Subscribe(i=>{switch(i.type){case"address-label-event":this.HandleAddressLabelEvent(i.text);break;case"toggle-reference":this.SelectingArgument()&&!this.active_selection?.empty&&this.UpdateSelectedArgument(this.active_selection,!0);break;case"stop-editing":this.pending_reset_selection&&this.ShowGridSelection(),this.pending_reset_selection=!1,this.editing_state=0;break;case"start-editing":this.editing_state=2,this.editing_cell={...this.primary_selection.target},this.editing_selection={...this.primary_selection};break;case"toll":this.editing_state=0,this.ClearAdditionalSelections(),this.ClearSelection(this.active_selection),this.DelayedRender();break;case"discard":if(this.editing_state=0,this.editing_annotation){this.ClearAdditionalSelections(),this.ClearSelection(this.active_selection);let r=this.editing_annotation.view[this.view_index]?.node;r&&r.focus(),this.editing_annotation=void 0,this.UpdateFormulaBarFormula(),this.DelayedRender();return}this.container&&this.Focus(),this.ClearAdditionalSelections(),this.ClearSelection(this.active_selection),this.UpdateFormulaBarFormula(),this.DelayedRender();break;case"commit":if(this.active_sheet.id!==this.editing_cell.sheet_id&&this.editing_cell.sheet_id&&this.ActivateSheetID(this.editing_cell.sheet_id),this.editing_state=0,this.editing_annotation){let r=this.editing_annotation;if(this.ClearAdditionalSelections(),this.ClearSelection(this.active_selection),r.data.formula=i.value?this.FixFormula(i.value):"",!this.pending_reset_selection){let s=this.editing_annotation.view[this.view_index]?.node;s&&s.focus()}this.grid_events.Publish({type:"annotation",event:"update",annotation:r}),this.editing_annotation=void 0,this.DelayedRender();return}this.container&&this.Focus(),i.event?this.SetInferredType(this.primary_selection,i.value,i.array):this.editing_selection&&this.SetInferredType(this.editing_selection,i.value,i.array),this.ClearAdditionalSelections(),this.ClearSelection(this.active_selection),this.options.repaint_on_cell_change&&this.DelayedRender(!1,this.primary_selection.area),i.event&&this.OverlayKeyDown(i.event);break;case"update":i.dependencies&&this.HighlightDependencies(i.dependencies);break}})}InitOverlayEditor(e){this.container&&(this.overlay_editor=new He(this.container,this.theme,this.model,this.view,e),this.overlay_editor.UpdateScale(this.layout.scale),this.overlay_editor.autocomplete_matcher=this.autocomplete_matcher,this.overlay_editor.Subscribe(t=>{switch(t.type){case"stop-editing":this.editing_state=0;break;case"start-editing":this.editing_state=1,this.editing_cell={...this.primary_selection.target};break;case"update":t.dependencies&&this.HighlightDependencies(t.dependencies);break;case"end-selection":case"reset-selection":this.ClearSelection(this.active_selection),this.overlay_editor?.target_address?.sheet_id&&this.active_sheet.id!==this.overlay_editor.target_address.sheet_id&&this.ActivateSheetID(this.overlay_editor.target_address.sheet_id),this.DelayedRender();break}}))}DelayedRender(e=!1,t,i=!1){!this.tile_update_pending&&t?this.layout.DirtyArea(t):!this.tile_update_pending&&e&&this.layout.DirtyAll(),this.render_token||(this.render_token=1,Promise.resolve().then(()=>{this.render_token=0,this.Repaint(e,i)}))}Repaint(e=!1,t=!1,i=!1){if(this.headless||!this.tile_renderer)return;if(this.tile_update_pending&&(this.tile_update_pending=!1,this.layout.UpdateTiles(),this.scroll_offset_pending&&(this.layout.scroll_offset=this.scroll_offset_pending,this.scroll_offset_pending=void 0),this.render_tiles=this.layout.VisibleTiles(),this.layout.UpdateAnnotation(this.active_sheet.annotations,this.theme)),this.layout_token=0,this.tile_renderer.OverflowDirty(t),e)for(let a of this.layout.grid_tiles)for(let l of a)l.dirty=!0;let r=this.render_tiles.start,s=this.render_tiles.end,o=[];for(let a=r.row;a<=s.row;a++)o.push(a);let n=[];for(let a=r.column;a<=s.column;a++)n.push(a);r.row>0&&this.active_sheet.freeze.rows&&o.push(0),r.column>0&&this.active_sheet.freeze.columns&&n.push(0);for(let a of n)for(let l of o){let c=this.layout.grid_tiles[a][l];(e||c.dirty||c.needs_full_repaint)&&(this.tile_renderer.Render(c),c.dirty=c.needs_full_repaint=!1)}this.tile_renderer.RenderHeaders(this.render_tiles,i),this.tile_renderer.RenderCorner(),this.RenderSelections()}MouseMove_RowHeader(e){let t=this.layout.CoordinateToRowHeader(e.offsetY),i=this.layout.OffsetCellAddressToRectangle({row:t.row,column:0});this.hover_data.address&&(this.hover_data.address.row!==-1||this.hover_data.address.column!==-1)&&this.HoverCell({row:-1,column:-1});let r=-1;e.offsetY-i.top<=this.RESIZE_PIXEL_BUFFER&&t.row>0?r=t.row-1:i.bottom-e.offsetY<=this.RESIZE_PIXEL_BUFFER&&(r=t.row),r>=0?this.layout.ResizeCursor("row"):this.cell_resize.row&&(this.cell_resize.row=-1,this.layout.ResizeCursor()),this.cell_resize.row=r}MouseMove_ColumnHeader(e){let t=this.layout.CoordinateToColumnHeader(e.offsetX),i=this.layout.OffsetCellAddressToRectangle({row:0,column:t.column});this.hover_data.address&&(this.hover_data.address.row!==-1||this.hover_data.address.column!==-1)&&this.HoverCell({row:-1,column:-1});let r=-1;e.offsetX-i.left<=this.RESIZE_PIXEL_BUFFER&&t.column>0?r=t.column-1:i.right-e.offsetX<=this.RESIZE_PIXEL_BUFFER&&(r=t.column),r>=0?this.layout.ResizeCursor("column"):this.cell_resize.column&&(this.cell_resize.column=-1,this.layout.ResizeCursor()),this.cell_resize.column=r}MouseDown_RowHeader(e){if(e.button!==0)return;e.stopPropagation(),e.preventDefault();let t=this.layout.CoordinateToRowHeader(e.offsetY),i=this.layout.row_header_cover.getBoundingClientRect(),r={x:i.left,y:i.top};if(this.cell_resize.row>=0){let s=this.cell_resize.row,o=r.y+e.offsetY;if(this.layout.HideDropdownCaret(),this.IsDoubleClick({row:s,column:-1})){let u=[s];if(!this.primary_selection.empty&&this.primary_selection.area.rows>1&&this.primary_selection.area.start.column===1/0&&this.primary_selection.area.ContainsRow(s)){let p=this.active_sheet.RealArea(this.primary_selection.area);u=[];for(let m=p.start.row;m<=p.end.row;m++)u.push(m)}this.ExecCommand({key:3,row:u});return}let n=this.layout.RowHeight(s),a=n,l=this.layout.OffsetCellAddressToRectangle({row:s,column:0}),c=r.y+l.bottom;this.layout.ShowTooltip({left:!0,text:`${a}px`,x:Math.round(i.right+10),y:c});let h=[],d=[];for(let u of this.active_sheet.annotations){let p=l.bottom-1;if(!u.scaled_rect||u.scaled_rect.bottom<p)continue;let m=[...this.layout.GetFrozenAnnotations(u)],b=u.view[this.view_index]?.node;b&&m.push(b),p<=u.scaled_rect.top&&u.data.move_with_cells?h.push({annotation:u,y:u.scaled_rect.top,nodes:m}):p>u.scaled_rect.top&&u.data.resize_with_cells&&d.push({annotation:u,height:u.scaled_rect.height,nodes:m})}Y(this.layout.mask,"row-resize",u=>{let p=Math.max(-n,Math.round(u.offsetY-o));if(p+n!==a){a=p+n,this.layout.SetRowHeight(s,a),this.layout.UpdateTooltip({text:`${a}px`,y:c+p});for(let{annotation:m,y:b}of h)m.scaled_rect&&(m.scaled_rect.top=b+p);for(let{annotation:m,height:b}of d)m.scaled_rect&&(m.scaled_rect.height=b+p);requestAnimationFrame(()=>{for(let{annotation:m,nodes:b}of d)if(m.scaled_rect)for(let y of b)m.scaled_rect.ApplyStyle(y);for(let{annotation:m,nodes:b}of h)if(m.scaled_rect)for(let y of b)m.scaled_rect.ApplyStyle(y);this.layout.UpdateTileHeights(!0,s),this.Repaint(!1,!0),this.layout.UpdateAnnotation(this.active_sheet.annotations,this.theme)})}},()=>{this.layout.HideTooltip(),requestAnimationFrame(()=>{let u=[s];if(!this.primary_selection.empty&&this.primary_selection.area.rows>1&&this.primary_selection.area.start.column===1/0&&this.primary_selection.area.ContainsRow(s)){let p=this.active_sheet.RealArea(this.primary_selection.area);u=[];for(let m=p.start.row;m<=p.end.row;m++)u.push(m)}this.layout.SetRowHeight(s,n),this.ExecCommand({key:3,row:u,height:a/this.scale});for(let{annotation:p}of h)p.scaled_rect&&(p.data.layout=this.layout.RectToAnnotationLayout(p.scaled_rect));for(let{annotation:p}of d){p.scaled_rect&&(p.data.layout=this.layout.RectToAnnotationLayout(p.scaled_rect));let m=p.view[this.view_index];m&&m.resize_callback&&m.resize_callback.call(void 0)}})})}else{let s=this.SelectingArgument()?this.active_selection:this.primary_selection;if(this.SelectingArgument()||this.Focus(void 0,!0),e.shiftKey&&!s.empty){let o=s.target;this.Select(s,new _(s.target,t,!0),void 0,!0),t=o}else this.Select(s,new _(t),{column:0,row:t.row});this.RenderSelections(),Y(this.layout.mask,[],o=>{let n=this.layout.CoordinateToRowHeader(o.offsetY-r.y),a=new _(n,t,!0);(s.empty||!a.Equals(s.area))&&(this.Select(s,a,void 0,!0),this.RenderSelections())},()=>{})}}MouseDown_ColumnHeader(e){if(e.button!==0)return;e.stopPropagation(),e.preventDefault();let t=this.layout.CoordinateToColumnHeader(e.offsetX),i=this.layout.column_header_cover.getBoundingClientRect(),r={x:i.left,y:i.top};if(this.cell_resize.column>=0){let s=this.cell_resize.column,o=r.x+e.offsetX;if(this.layout.HideDropdownCaret(),this.IsDoubleClick({row:-1,column:s})){let u=[s];if(!this.primary_selection.empty&&this.primary_selection.area.columns>1&&this.primary_selection.area.start.row===1/0&&this.primary_selection.area.ContainsColumn(s)){let p=this.active_sheet.RealArea(this.primary_selection.area);u=[];for(let m=p.start.column;m<=p.end.column;m++)u.push(m)}this.ExecCommand({key:4,column:u});return}let n=this.layout.ColumnWidth(s),a=n,l=this.layout.OffsetCellAddressToRectangle({row:0,column:s}),c=r.x+l.right;this.layout.ShowTooltip({up:!0,text:`${a}px`,x:c,y:Math.round(i.bottom+10)});let h=[],d=[];for(let u of this.active_sheet.annotations){let p=l.right-1;if(!u.scaled_rect||u.scaled_rect.right<p)continue;let m=[...this.layout.GetFrozenAnnotations(u)],b=u.view[this.view_index]?.node;b&&m.push(b),p<=u.scaled_rect.left&&u.data.move_with_cells?h.push({annotation:u,x:u.scaled_rect.left,nodes:m}):p>u.scaled_rect.left&&u.data.resize_with_cells&&d.push({annotation:u,width:u.scaled_rect.width,nodes:m})}Y(this.layout.mask,"column-resize",u=>{let p=Math.max(-n,Math.round(u.offsetX-o));if(p+n!==a){a=p+n,this.layout.UpdateTooltip({text:`${a}px`,x:c+p}),this.layout.SetColumnWidth(s,a);for(let{annotation:m,x:b}of h)m.scaled_rect&&(m.scaled_rect.left=b+p);for(let{annotation:m,width:b}of d)m.scaled_rect&&(m.scaled_rect.width=b+p);requestAnimationFrame(()=>{for(let{annotation:m,nodes:b}of d)if(m.scaled_rect)for(let y of b)m.scaled_rect.ApplyStyle(y);for(let{annotation:m,nodes:b}of h)if(m.scaled_rect)for(let y of b)m.scaled_rect.ApplyStyle(y);this.layout.UpdateTileWidths(!0,s),this.Repaint(!1,!0)})}},()=>{this.layout.HideTooltip(),requestAnimationFrame(()=>{let u=[s];if(!this.primary_selection.empty&&this.primary_selection.area.columns>1&&this.primary_selection.area.start.row===1/0&&this.primary_selection.area.ContainsColumn(s)){let p=this.active_sheet.RealArea(this.primary_selection.area);for(let m=p.start.column;m<=p.end.column;m++)u.push(m)}this.ExecCommand({key:4,column:u,width:a});for(let{annotation:p}of h)p.scaled_rect&&(p.data.layout=this.layout.RectToAnnotationLayout(p.scaled_rect));for(let{annotation:p}of d){p.scaled_rect&&(p.data.layout=this.layout.RectToAnnotationLayout(p.scaled_rect));let m=p.view[this.view_index];m&&m.resize_callback&&m.resize_callback.call(void 0)}})})}else{let s=this.SelectingArgument()?this.active_selection:this.primary_selection;if(this.SelectingArgument()||this.Focus(void 0,!0),e.shiftKey&&!s.empty){let o=s.target;this.Select(s,new _(s.target,t,!0),void 0,!0),t=o}else this.Select(s,new _(t),{row:0,column:t.column});this.RenderSelections(),Y(this.layout.mask,[],o=>{let n=this.layout.CoordinateToColumnHeader(o.offsetX-r.x),a=new _(n,t,!0);(s.empty||!a.Equals(s.area))&&(this.Select(s,a,void 0,!0),this.RenderSelections())})}}HoverCell(e,t){let i=this.active_sheet.cells.GetCell(e,!1);if(i?.table&&i.table.area.start.row===e.row&&i.table.sortable!==!1?(this.hover_data.table_header=!0,this.layout.ShowTableSortButton(i.table,e.column-i.table.area.start.column,e)):(this.hover_data.table_header&&this.layout.HideTableSortButton(),this.hover_data.table_header=!1),i?.merge_area){let r=i.merge_area;e=r.start,i=this.active_sheet.cells.GetCell(e,!1),e={row:r.start.row,column:r.end.column}}if(i?.note){let r=re.instance.Parse(i.note),s=this.options.comment_markdown?re.instance.HTML(r,{br:!1}):void 0;this.layout.ShowNote(i.note,e,t,s),this.hover_data.note=!0}else this.hover_data.note&&(this.layout.HideNote(),this.hover_data.note=!1);i?.hyperlink?(this.layout.ShowTitle("Link: "+i.hyperlink,e),this.hover_data.link=!0,this.hover_data.cell=i):this.hover_data.link&&(this.layout.HideTitle(),this.hover_data.cell=void 0),this.hover_data.address={...e}}HideHoverInfo(){this.layout.HideTitle(),this.layout.HideTooltip(),this.hover_data.note=this.hover_data.link=!1,this.hover_data.cell=void 0,this.hover_data.pointer&&this.layout.grid_cover.classList.remove("link-pointer"),this.hover_data.pointer=!1}MouseMove_Grid(e){if(e.stopPropagation(),e.preventDefault(),!this.selection_renderer)return;(this.cell_resize.row>=0||this.cell_resize.column>=0)&&this.layout.ResizeCursor();let t={x:e.offsetX,y:e.offsetY},i;if(this.overlay_editor?.editing||(i=this.layout.PointToAddress_Grid(t),(!this.hover_data.address||this.hover_data.address.row!==i.row||this.hover_data.address.column!==i.column)&&this.HoverCell(i,e)),this.hover_data.link&&i&&(this.hover_data.point=t,this.hover_data.handler||(this.hover_data.handler=requestAnimationFrame(()=>{let s=this.hover_data.address&&this.hover_data.point&&this.hover_data.cell&&this.PointInTextPart(this.hover_data.address,this.hover_data.point,this.hover_data.cell);s!==!!this.hover_data.pointer&&(this.hover_data.pointer=s,s?this.layout.grid_cover.classList.add("link-pointer"):this.layout.grid_cover.classList.remove("link-pointer")),this.hover_data.handler=void 0}))),this.primary_selection.empty||!this.selection_renderer.nub_rectangle){this.nub_select_flag&&(this.layout.grid_cover.classList.remove("nub-select"),this.nub_select_flag=!1);return}let r=this.selection_renderer.nub_rectangle.Contains(e.offsetX,e.offsetY);r!==this.nub_select_flag&&(r?this.layout.grid_cover.classList.add("nub-select"):this.layout.grid_cover.classList.remove("nub-select"),this.nub_select_flag=r)}ClearDoubleClick(){this.double_click_data.address=void 0}IsDoubleClick(e,t=300){if(this.double_click_data.address&&this.double_click_data.address.row===e.row&&this.double_click_data.address.column===e.column)return clearTimeout(this.double_click_data.timeout),this.double_click_data.address=void 0,this.double_click_data.timeout=void 0,!0;this.double_click_data.timeout&&clearTimeout(this.double_click_data.timeout),this.double_click_data.address={...e},this.double_click_data.timeout=window.setTimeout(()=>{this.double_click_data.address=void 0,this.double_click_data.timeout=void 0},t)}PointInTextPart(e,t,i){let r=this.layout.CellAddressToRectangle(e);i.merge_area&&(r=r.Combine(this.layout.CellAddressToRectangle(i.merge_area.end)));let s=t.x-r.left,o=t.y-r.top,n=i.renderer_data?.text_data?.strings||[];for(let a of n)for(let l of a)if(typeof l.left=="number"&&typeof l.top=="number"&&typeof l.width=="number"&&typeof l.height=="number"&&s>=l.left&&o>=l.top&&s<=l.left+l.width&&o<=l.top+l.height)return!0;return!1}MouseDown_Grid(e){if(e.button!==0)return;e.stopPropagation(),e.preventDefault();let t=this.SelectingArgument();if(!t&&this.additional_selections.length&&this.ClearAdditionalSelections(),(!t||!this.formula_bar?.selecting&&!this.external_editor?.selecting)&&this.Focus(void 0,!0),this.overlay_editor?.editing&&!this.overlay_editor?.selecting){if(this.overlay_editor?.selection){let h=this.overlay_editor?.edit_node.textContent||void 0;this.SetInferredType(this.overlay_editor.selection,h,!1)}this.DismissEditor()}let i={x:e.offsetX,y:e.offsetY},r=this.layout.PointToAddress_Grid(i),s=t?this.active_selection:this.primary_selection;if(!t&&this.IsDoubleClick(r)){V.is_mobile&&this.overlay_editor?.edit_node?.focus(),this.OverlayEditCell({target:r,area:new _(r)},!1);return}let o=this.layout.grid_cover.getBoundingClientRect(),n={x:o.left,y:o.top},a=[],l;if(e.shiftKey&&!s.empty){let h=s.target;this.Select(s,new _(r,s.target,!0),void 0,!0),r=h}else if(this.nub_select_flag)r=s.area.TopLeft(),a.push("nub-select"),l=this.active_sheet.RealArea(s.area);else{let h=r,d=this.active_sheet.CellData(h);if(d.merge_area&&(h=d.merge_area.start,d=this.active_sheet.CellData(d.merge_area.start)),d.hyperlink&&this.PointInTextPart(h,i,d)){let u=d.hyperlink;Promise.resolve().then(()=>{this.grid_events.Publish({type:"cell-event",data:{type:"hyperlink",reference:u}})}),this.ClearDoubleClick();return}if(d.click_function){let u=this.layout.CellAddressToRectangle(h);d.merge_area&&(u=u.Combine(this.layout.CellAddressToRectangle(d.merge_area.end)));let p=d.click_function.call(this,{cell:d,x:i.x-u.left,y:i.y-u.top,width:u.width,height:u.height,scale:this.layout.scale});if(p.value&&this.ExecCommand({key:6,value:p.value,area:h}),p.block_selection){this.ClearDoubleClick(),!this.primary_selection.empty&&this.primary_selection.target.row===h.row&&this.primary_selection.target.column===h.column&&this.UpdateFormulaBarFormula();return}}this.Select(s,new _(r),r)}this.RenderSelections(),t&&this.UpdateSelectedArgument(s);let c=this.layout.CellAddressToRectangle({row:0,column:0}).Combine(this.layout.CellAddressToRectangle({row:this.active_sheet.rows-1,column:this.active_sheet.columns-1})).Expand(-1,-1);Y(this.layout.mask,a,h=>{let d={x:h.offsetX-n.x,y:h.offsetY-n.y},u=c.Clamp(d.x,d.y),p=this.layout.PointToAddress_Grid(u),m=this.layout.scroll_reference_node,b=!1;this.container&&this.options.scrollbars&&(d.x<m.scrollLeft?(m.scrollLeft-=25,b=!0):d.x>m.scrollLeft+this.container.clientWidth&&(m.scrollLeft+=25,b=!0),d.y<m.scrollTop?(m.scrollTop-=25,b=!0):d.y>m.scrollTop+this.container.clientHeight&&(m.scrollTop+=25,b=!0),b&&(o=this.layout.grid_cover.getBoundingClientRect(),n.x=o.left+document.body.scrollLeft,n.y=o.top+document.body.scrollTop));let y=new _(p,r,!0);if(l&&(y=l.Clone(),y.ConsumeAddress(p),y.rows!==l.rows&&y.columns!==l.columns)){let x={rows:p.row>l.end.row?p.row-l.end.row:l.start.row-p.row,columns:p.column>l.end.column?p.column-l.end.column:l.start.column-p.column};x.rows>=x.columns?y=new _({row:y.start.row,column:l.start.column},{row:y.end.row,column:l.end.column}):y=new _({row:l.start.row,column:y.start.column},{row:l.end.row,column:y.end.column})}(s.empty||!y.Equals(s.area))&&(this.Select(s,y,void 0,!0),this.RenderSelections(),t?this.UpdateSelectedArgument(s):this.UpdateAddressLabelArea(s))},()=>{this.UpdateAddressLabel(),t?this.overlay_editor?.editing||(this.external_editor_config?(this.external_editor?.active&&this.external_editor.FocusEditor(),this.external_editor_config.update):this.formula_bar&&this.formula_bar.FocusEditor()):l&&this.RecycleNubArea(s.area,l)})}Transpose(e){let t=[],i=e.length,r=e[0].length;for(let s=0;s<r;s++){t[s]=[];for(let o=0;o<i;o++)t[s][o]=e[o][s]}return t}RecycleNubArea(e,t){if(e.Equals(t))return;let i=[];for(let h=0;h<t.rows;h++){i[h]=[];for(let d=0;d<t.columns;d++){let u={row:t.start.row+h,column:t.start.column+d};i[h][d]=this.active_sheet.CellData(u)}}if(i[0][0].area&&i[0][0].area.Equals(t)){this.ExecCommand({key:6,value:i[0][0].value,array:!0,area:e});return}if(i[0][0].table&&t.Equals(new _(i[0][0].table.area.start,i[0][0].table.area.end))){let h=i[0][0].table,d=h.sortable,u=h.totals_row,p=h.theme;this.ExecCommand([{key:30,table:h},{key:29,area:e,sortable:d,totals:u,theme:p}]);return}let r=[],s=[],o=t.columns,n=e.rows,a=!1,l=!1;e.columns===t.columns?a=e.start.row<t.start.row:(o=t.rows,n=e.columns,a=e.start.column<t.start.column,i=this.Transpose(i),l=!0);for(let h=0;h<n;h++)r[h]=[],s[h]=[];for(let h=0;h<o;h++){let d=0;if(i.length>1){d=1;let u=[],p=[];for(let m=0;m<i.length;m++){let b=i[m][h];b.ValueIsNumber()&&(p.push(m),u.push(b.value))}if(u.length>1){let m=u.slice(1).map((b,y)=>b-u[y]);m.every(b=>b===m[0])&&(d=m[0])}u.length&&(d+=u[u.length-1]-u[0])}for(let u=0;u<i.length;u++){let p,m=i[u][h];if(m.ValueIsFormula()){let R=this.parser.Parse(m.value);R.expression&&R.full_reference_list?.length&&(p=R.expression)}let b=0,y=u,x=i.length,k=0,g=d;a&&(y=n-i.length+u,x=-i.length,g=-d);for(let R=y;R>=0&&R<n;R+=x,b+=x,k+=g){let E={offset:l?{rows:0,columns:b}:{rows:b,columns:0}};if(p)r[R][h]="="+this.parser.Render(p,E);else{let v=i[u][h];v.ValueIsNumber()?r[R][h]=v.value+k:r[R][h]=v.value}s[R][h]=i[u][h].style||{}}}}let c=[{key:6,value:l?this.Transpose(r):r,array:!1,area:e}];l&&(s=this.Transpose(s));for(let h=0;h<s.length;h++)for(let d=0;d<s[h].length;d++)c.push({key:7,area:{row:h+e.start.row,column:d+e.start.column},style:s[h][d],delta:!1});this.ExecCommand(c)}CreateTypedReferences(e,t){let i=[],r=!1;return t&&(r=e.row===t.row&&e.column===t.column),e.row===1/0||e.column===1/0||(!t||r?(e.absolute_column=!1,e.absolute_row=!1,i.push(_.CellAddressToLabel(e)),e.absolute_column=!0,e.absolute_row=!0,i.push(_.CellAddressToLabel(e)),e.absolute_column=!0,e.absolute_row=!1,i.push(_.CellAddressToLabel(e)),e.absolute_column=!1,e.absolute_row=!0,i.push(_.CellAddressToLabel(e))):(e.absolute_column=t.absolute_column=!1,e.absolute_row=t.absolute_row=!1,i.push(_.CellAddressToLabel(e)+":"+_.CellAddressToLabel(t)),e.absolute_column=t.absolute_column=!0,e.absolute_row=t.absolute_row=!0,i.push(_.CellAddressToLabel(e)+":"+_.CellAddressToLabel(t)),e.absolute_column=t.absolute_column=!0,e.absolute_row=t.absolute_row=!1,i.push(_.CellAddressToLabel(e)+":"+_.CellAddressToLabel(t)),e.absolute_column=t.absolute_column=!1,e.absolute_row=t.absolute_row=!0,i.push(_.CellAddressToLabel(e)+":"+_.CellAddressToLabel(t)))),i}UpdateSelectedArgument(e,t=!1){let i=this.active_sheet.CellData(e.area.start),r=new _(i.merge_area?i.merge_area.start:e.target),s=this.model.named.MatchSelection(e.area,r),o=[];if(!s&&(s=e.area.spreadsheet_label,i.merge_area&&i.merge_area.Equals(e.area)?(s=_.CellAddressToLabel(i.merge_area.start),o=this.CreateTypedReferences({...i.merge_area.start})):o=this.CreateTypedReferences({...e.area.start},{...e.area.end}),this.external_editor_config||this.active_sheet.id!==this.editing_cell.sheet_id)){let n=this.active_sheet.name;ue.test(n)&&(n=`'${n}'`),s=n+`!${s}`,o=o.map(a=>n+a)}if(this.overlay_editor?.editing&&this.overlay_editor.selecting)this.overlay_editor.InsertReference(s,t,o);else if(this.formula_bar&&this.formula_bar.selecting)this.formula_bar.InsertReference(s,t,o);else if(this.external_editor_config&&(this.external_editor?.active&&(this.external_editor.FocusEditor(),this.external_editor.InsertReference(s)),this.external_editor_config.update)){let n=this.external_editor_config.update.call(0,s);n&&Array.isArray(n)&&this.HighlightDependencies(n.filter(a=>!!a).map(a=>L(a)?new _(a):new _(a.start,a.end)))}}SelectingArgument(){return this.overlay_editor?.editing&&this.overlay_editor?.selecting||this.formula_bar&&this.formula_bar.selecting||!!this.external_editor_config}ReleaseOverlayEditor(){this.editing_state=0,this.DismissEditor(),this.DelayedRender()}RestoreOverlayEditor(){this.overlay_editor?.FocusEditor()}OverlayKeyDown(e){let t=!1;if(this.overlay_editor&&this.overlay_editor.editing)switch(t=!0,this.overlay_editor.HandleKeyDown(e)){case"handled":return;case"discard":this.editing_state=0,this.DismissEditor(),this.DelayedRender();return;case"commit":if(this.active_sheet.id!==this.editing_cell.sheet_id&&this.editing_cell.sheet_id&&this.ActivateSheetID(this.editing_cell.sheet_id),this.editing_state=0,this.overlay_editor?.selection){let l=this.overlay_editor?.edit_node.textContent||void 0,c=e.key==="Enter"&&(e.ctrlKey||V.is_mac&&e.metaKey)&&e.shiftKey;this.SetInferredType(this.overlay_editor.selection,l,c,void 0,this.overlay_editor.edit_style)}this.DismissEditor(),this.options.repaint_on_cell_change&&this.DelayedRender(!1,this.overlay_editor?.selection.area||void 0);break}let i=this.SelectingArgument();if(this.formula_bar&&this.formula_bar.focused&&!i||this.selected_annotation&&!i)return;let r=i?this.active_selection:this.primary_selection,s={rows:0,columns:0},o=!1,n=!1;if(e.ctrlKey||V.is_mac&&e.metaKey){switch(e.key){case"ArrowDown":case"Down":s.rows++;break;case"ArrowUp":case"Up":s.rows--;break;case"ArrowLeft":case"Left":s.columns--;break;case"ArrowRight":case"Right":s.columns++;break;case"Backspace":e.metaKey&&V.is_mac&&(r.empty||this.DeleteSelection(r));break;case"Delete":case"Del":{e.stopPropagation(),e.preventDefault();for(let a=0;a<this.model.sheets.length;a++)if(this.model.sheets.list[a]===this.active_sheet){this.DeleteSheet(a);break}return}break;case"/":e.stopPropagation(),e.preventDefault(),this.SelectArrayOrTable();break;default:if(e.shiftKey)return}if(s.columns||s.rows)if(e.stopPropagation(),e.preventDefault(),!r.empty&&(s.columns||s.rows)){if(this.BlockSelection(r,!!e.shiftKey,s.columns,s.rows)){e.shiftKey&&!i&&this.UpdateAddressLabelArea(r);return}}else return;else{let a={},l=this.primary_selection.empty?{}:this.active_sheet.CellData(this.primary_selection.target).style||{};switch(e.key.toLowerCase()){case"b":a.bold=!l.bold;break;case"i":a.italic=!l.italic;break;case"u":a.underline=!l.underline;break;case"a":this.SelectAll();break;case"0":if(!e.altKey)return;this.ClearSelection(this.primary_selection),this.RenderSelections();break;default:e.key;return}Object.keys(a).length&&this.ApplyStyle(void 0,a)}}else{if(e.key==="F4"){e.stopPropagation(),e.preventDefault(),i&&!r.empty&&this.UpdateSelectedArgument(r,!0);return}if(/^F\d+$/.test(e.key))return;switch(e.key){case"Tab":e.shiftKey?s.columns--:s.columns++,o=!0;break;case"Enter":e.shiftKey?s.rows--:s.rows++,o=!0;break;case"ArrowDown":case"Down":s.rows++,n=e.shiftKey;break;case"ArrowUp":case"Up":s.rows--,n=e.shiftKey;break;case"ArrowLeft":case"Left":s.columns--,n=e.shiftKey;break;case"ArrowRight":case"Right":s.columns++,n=e.shiftKey;break;case"Delete":case"Del":r.empty||this.DeleteSelection(r);break;case"PageUp":case"PageDown":if(e.shiftKey){this.NextSheet(e.key==="PageUp"?-1:1,!0);break}return;case"Control":case"Shift":case"Alt":return;default:r.empty||e.key!=="Escape"&&this.OverlayEditCell(r,!0,e);return}}e.stopPropagation(),e.preventDefault(),(s.rows||s.columns)&&(this.AdvanceSelection(s,r,o,n,!t),e.shiftKey&&!i&&this.UpdateAddressLabelArea(r))}SelectArrayOrTable(){if(this.primary_selection.empty)return;let e=this.active_sheet.CellData(this.primary_selection.target);if(!(!e||!e.area&&!e.table&&!e.spill)){if(e.area&&this.Select(this.primary_selection,e.area,e.area.start),e.spill&&this.Select(this.primary_selection,e.spill,e.spill.start),e.table){let t=new _(e.table.area.start,e.table.area.end);this.Select(this.primary_selection,t,t.start)}this.RenderSelections()}}RenderSelections(e=!0){let t=this.hide_selection?!1:!this.editing_state||this.editing_cell.sheet_id===this.active_sheet.id,i=this.primary_selection.empty?void 0:this.active_sheet.CellData(this.primary_selection.target);this.layout.ShowSpillBorder(i?.spill),this.selection_renderer?.RenderSelections(t,e)}BlockSelection(e,t,i,r,s=!0){if(e.empty)return!1;let o={...e.target};r>0?o.row=Math.max(o.row,e.area.end.row):r<0&&(o.row=Math.min(o.row,e.area.start.row)),i>0?o.column=Math.max(o.column,e.area.end.column):i<0&&(o.column=Math.min(o.column,e.area.start.column));let n=this.active_sheet.cells,a=n.GetCell(e.target,!1);if(!a||a.type===0&&!a.area&&!a.spill)return!1;let l={...o};for(;;){let c={row:l.row+r,column:l.column+i};if(c.column<0||c.row<0||c.column>=this.active_sheet.columns||c.row>=this.active_sheet.rows)break;let h=!1;if(r)for(let d=e.area.start.column;!h&&d<=e.area.end.column;d++)a=n.GetCell({row:c.row,column:d},!1),h=h||!!a&&(a.type!==0||!!a.area||!!a.spill),!h&&a&&a.merge_area&&(a=n.GetCell(a.merge_area.start,!1),h=h||!!a&&(a.type!==0||!!a.area||!!a.spill));else for(let d=e.area.start.row;!h&&d<=e.area.end.row;d++)a=n.GetCell({row:d,column:c.column},!1),h=h||!!a&&(a.type!==0||!!a.area||!!a.spill),!h&&a&&a.merge_area&&(a=n.GetCell(a.merge_area.start,!1),h=h||!!a&&(a.type!==0||!!a.area||!!a.spill));if(!h)break;l=c}if(t){r?(o.row=e.target.row,o.column=e.area.start.column,l.column=e.area.end.column):(o.column=e.target.column,o.row=e.area.start.row,l.row=e.area.end.row);let c=new _(o,l,!0);this.Select(e,c,e.target,!0)}else this.Select(e,new _(l));return this.ScrollIntoView(l),this.SelectingArgument()&&this.UpdateSelectedArgument(e),s&&this.DelayedRender(),!0}DeleteSelection(e){if(e.empty)return;let t=this.active_sheet.RealArea(e.area);this.ExecCommand({key:12,area:t})}SetInferredType(e,t,i=!1,r=!0,s){let o=e.target||e.area.start,n=this.active_sheet.CellData(o);if(n.area){if(!i&&n.area.count>1||!e.area||!e.area.Equals(n.area)){this.Error(2);return}}else if(i){for(let u of this.active_sheet.cells.Iterate(e.area,!1))if(u.area){this.Error(2);return}}let a=this.active_sheet.GetValidation(o)[0];if(a&&a.error){let u;if(a.type==="list"?u=a.list:a.type==="range"&&(u=this.GetValidationRange(a.area)),u&&u.length){let p=!1;if(t){let m=t.toUpperCase();for(let b of u)if(b&&b.toString().toUpperCase()===m){t=b.toString(),p=!0;break}}if(!p){this.Error(3);return}}}n.merge_area&&(o=n.merge_area.start);let l=[];s&&l.push({key:7,style:s,delta:!0,area:i?e.area:e.target});let c=typeof t=="string"&&t.trim()[0]==="=";if(c&&(t=this.FixFormula(t||""),!this.active_sheet.HasCellStyle(o))){let u=this.parser.Parse(t);if(u){if(u.expression?.type==="call"&&(!n.style||!n.style.number_format||P.Equals(n.style.number_format,"General"))){let p=u.expression.name.toLowerCase(),m;switch(p){case"today":m="Short Date";break;case"now":m="Timestamp";break}m&&l.push({key:7,area:i?e.area:o,style:{number_format:m},delta:!0})}if(u.expression){let p,m=(x,k=this.active_sheet)=>{if(k.HasCellStyle({...x})){let g=k.CellData({...x});if(g.style&&g.style.number_format&&(!p||/%/.test(p))&&(p=P.Translate(g.style.number_format),!/%/.test(p)))return!0}return!1},b=!1,y=this.active_sheet;if(this.parser.Walk(u.expression,x=>{if(b)return!1;switch(x.type){case"address":this.model.ResolveSheetID(x),y=this.model.sheets.Find(x.sheet_id||0),b=b||m(x,y);break;case"range":this.model.ResolveSheetID(x),y=this.model.sheets.Find(x.start.sheet_id||0);for(let k of new _(x.start,x.end))if(b=b||m(k,y),b)break;break}return!b}),p){let x={number_format:P.SymbolicName(p)||p};l.push({key:7,area:i?e.area:o,style:x,delta:!0})}}}}let h=this.parser.Parse(t||"").expression;h?.type==="group"&&h.elements.length===1&&h.elements[0].type==="complex"&&(h=h.elements[0]);let d;if(h?.type==="complex"?d={type:8,value:{real:h.real,imaginary:h.imaginary}}:h?.type==="literal"&&typeof h.value=="boolean"?d={type:4,value:h.value}:d=le.TryParse(t),!c&&d.type===3){let u="",p=d.hints||{};(!n.style||!n.style.number_format||P.Equals(n.style.number_format,"General"))&&(p.Date?u="Short Date":p.Exponential?u="Exponential":p.Percent?u="Percent":p.Currency?u="Currency":(p.Grouping||p.Parens)&&(u="Accounting")),u&&l.push({key:7,area:i?e.area:o,style:{number_format:u},delta:!0})}if(l.push({key:6,area:i?e.area:o,array:i,value:c?this.model.UntranslateFunction(t||""):d.value}),r)this.ExecCommand(l);else return l}FixFormula(e){if(e.trim()[0]!=="=")return e;e=e.replace(/^\s+/,"");let t=!1,i=!1,r=0,s=!1,o=e.length;for(let n=0;n<o;n++){let a=e[n];if(!s)switch(a){case'"':t?e[n+1]==='"'?n++:t=!1:i||(t=!0);break;case"'":i?i=!1:t||(i=!0);break;case"\\":s=!0;break;case"(":!t&&!i&&r++;break;case")":!t&&!i&&r--;break}}for(t?e+='"':i&&(e+="'");r>0;)e+=")",r--;return e=this.NormalizeFormula(e),e}NormalizeFormula(e){let t=this.parser.Parse(e);return t.error&&console.warn(t.error),t&&t.expression&&(this.parser.Walk(t.expression,i=>{switch(i.type){case"call":i.name=this.autocomplete_matcher.NormalizeIdentifier(i.name)||i.name;break;case"identifier":this.model.GetName(i.name,this.active_sheet.id)?.type==="range"&&(i.name=i.name.toUpperCase());break}return!0}),e="="+this.parser.Render(t.expression,{missing:""})),e}DismissEditor(){this.overlay_editor?.active_cell&&(this.overlay_editor.active_cell.editing=!1,this.overlay_editor.active_cell.render_clean=[],this.DelayedRender(void 0,this.overlay_editor.selection.area)),this.editing_state=0,this.Focus(),this.overlay_editor?.CloseEditor(),this.ClearAdditionalSelections(),this.ClearSelection(this.active_selection)}NormalizeCellValue(e){let t=e.value;if(e.ValueIsNumber()&&e.style&&e.style.number_format)if(P.Get(e.style.number_format).date_format){let r=wt(e.value),s=r.getUTCHours()||r.getUTCMinutes()||r.getUTCSeconds()?"Timestamp":"Short Date";t=P.Get(s).Format(t)}else if(/(?:%|percent)/i.test(e.style.number_format)){let r=0,s=e.value.toString().match(/\.(.*?)$/);s&&s[1]&&(r=Math.max(0,s[1].length-2)),t=(e.value*100).toFixed(r)+"%",M.decimal_separator===","&&(t=t.replace(/\./,","))}else t&&M.decimal_separator===","&&(t=e.value.toString().replace(/\./,","));else{if(e.ValueIsBoolean())return e.value?this.model.language_model?.boolean_true||"TRUE":this.model.language_model?.boolean_false||"FALSE";e.ValueIsNumber()?t&&M.decimal_separator===","&&(t=e.value.toString().replace(/\./,",")):e.ValueIsComplex()?(e.value.imaginary?e.value.real?t=`${e.value.real.toString()}${e.value.imaginary<0?" - ":" + "}${e.value.imaginary===1||e.value.imaginary===-1?"":Math.abs(e.value.imaginary).toString()}i`:e.value.imaginary===1?t="i":e.value.imaginary===-1?t="-i":t=e.value.imaginary.toString()+"i":t=e.value.real.toString(),M.decimal_separator===","&&(t=t.replace(/\./,","))):e.ValueIsFormula()&&(t=this.model.TranslateFunction(e.value))}return t}IsNumeric(e){return e>=48&&e<=57||e===this.decimal_separator_code||e===45||e===43}OverlayEditCell(e,t=!0,i){if(!this.options.in_cell_editor)return;let r=e.target||e.area.start,s=this.active_sheet.CellData(r),o;if(this.HideHoverInfo(),s.merge_area?(o=this.layout.OffsetCellAddressToRectangle(s.merge_area.start).Combine(this.layout.OffsetCellAddressToRectangle(s.merge_area.end)),r=s.merge_area.start,s=this.active_sheet.CellData(r)):o=this.layout.OffsetCellAddressToRectangle(r),s.style?.locked){console.info("cell is locked for editing");return}o=o.Shift(this.layout.header_size.width,this.layout.header_size.height);let n=s.value,a;typeof n>"u"&&!s.style?.font_face&&(a=this.edit_state),t?(s.type===3||s.rendered_type===3)&&s.style&&s.style.number_format&&/(?:%|percent)/i.test(s.style.number_format)&&(!i||this.IsNumeric(i.key.charCodeAt(0)))?n="%":n=void 0:n=this.NormalizeCellValue(s),this.overlay_editor?.Edit(e,o.Expand(-1,-1),s,n,i,a),s.editing=!0,s.render_clean=[],this.DelayedRender(!1,e.area)}BoundAddressArea(e,t){e.column>t.end.column?(e.row=this.StepVisibleRows(e.row,1),e.row>t.end.row&&(e.row=t.start.row),e.column=t.start.column):e.column<t.start.column?(e.row=this.StepVisibleRows(e.row,-1),e.row<t.start.row&&(e.row=t.end.row),e.column=t.end.column):e.row>t.end.row?(e.column=this.StepVisibleColumns(e.column,1),e.column>t.end.column&&(e.column=t.start.column),e.row=t.start.row):e.row<t.start.row&&(e.column=this.StepVisibleColumns(e.column,-1),e.column<t.start.column&&(e.column=t.end.column),e.row=t.end.row)}StepVisibleRows(e,t){if(t>0)for(let i=0;i<t;i++)this.layout.RowHeight(++e)||i--;else if(t<0)for(let i=0;i>t;i--)--e>=0&&!this.layout.RowHeight(e)&&i++;return e}StepVisibleColumns(e,t){if(t>0)for(let i=0;i<t;i++)this.layout.ColumnWidth(++e)||i--;else if(t<0)for(let i=0;i>t;i--)--e>=0&&!this.layout.ColumnWidth(e)&&i++;return e}EnsureAddress(e,t=8,i=!1){let r=!1;if(this.options.expand){if(e.row!==1/0&&e.row>=this.active_sheet.rows){let s=this.active_sheet.rows;for(;e.row>=s;)s+=t;this.active_sheet.cells.EnsureRow(s),r=!0}if(e.column!==1/0&&e.column>=this.active_sheet.columns){let s=this.active_sheet.columns;for(;e.column>=s;)s+=t;this.active_sheet.cells.EnsureColumn(s),r=!0}r&&!i&&(this.layout.UpdateTiles(),this.layout.UpdateContentsSize(),this.Repaint(!0,!0))}return r}AdvanceSelection(e,t,i=!1,r=!1,s=!0){let o=this.SelectingArgument();if(t.empty)if(o){let n={row:Math.max(0,this.StepVisibleRows(this.primary_selection.target.row,e.rows)),column:Math.max(0,this.StepVisibleColumns(this.primary_selection.target.column,e.columns))};this.Select(t,new _(n))}else this.Select(t,new _({row:0,column:0}));else{let n=this.active_sheet.CellData(t.target);if(n.merge_area&&i&&(i=!n.merge_area.Equals(t.area)),i&&t.area.count>1){let a=this.active_sheet.RealArea(t.area),l=t.target;for(;;){l.row=this.StepVisibleRows(l.row,e.rows),l.column=this.StepVisibleColumns(l.column,e.columns),this.BoundAddressArea(l,a);let c=this.active_sheet.CellData(l);if(!c.merge_area||c.merge_area.start.row===l.row&&c.merge_area.start.column===l.column)break}this.Select(t,a,l)}else if(r&&t&&t.target){let a=t.area,l=t.target,c=a.start,h=a.end,d={row:1/0,column:1/0};if(e.columns&&(a.columns===1?e.columns>0?(h.column=this.StepVisibleColumns(h.column,1),d.column=h.column):(c.column=this.StepVisibleColumns(c.column,-1),d.column=c.column):a.end.column>l.column?(h.column=this.StepVisibleColumns(h.column,e.columns),d.column=h.column):a.start.column<l.column&&(c.column=this.StepVisibleColumns(c.column,e.columns),d.column=c.column),h.column=Math.max(0,h.column),c.column=Math.max(0,c.column)),e.rows&&(a.rows===1?e.rows>0?(h.row=this.StepVisibleRows(h.row,1),d.row=h.row):(c.row=this.StepVisibleRows(c.row,-1),d.row=c.row):a.end.row>l.row?(h.row=this.StepVisibleRows(h.row,e.rows),d.row=h.row):a.start.row<l.row&&(c.row=this.StepVisibleRows(c.row,e.rows),d.row=c.row),h.row=Math.max(0,h.row),c.row=Math.max(0,c.row)),this.options.expand){for(let u of[c,h,d])u.row!==1/0&&(u.row=Math.max(0,u.row)),u.column!==1/0&&(u.column=Math.max(0,u.column));this.EnsureAddress(h)&&(s=!0),this.ScrollIntoView(d),this.Select(t,new _(c,h),void 0,!0)}else{for(let u of[c,h,d])u.row!==1/0&&(u.row=Math.max(0,Math.min(u.row,this.active_sheet.rows-1))),u.column!==1/0&&(u.column=Math.max(0,Math.min(u.column,this.active_sheet.columns-1)));this.ScrollIntoView(d),this.Select(t,new _(c,h),void 0,!0)}}else{let a=t.target;n.merge_area?(e.columns<0?a.column=this.StepVisibleColumns(n.merge_area.start.column,-1):e.columns>0&&(a.column=this.StepVisibleColumns(n.merge_area.end.column,1)),e.rows<0?a.row=this.StepVisibleRows(n.merge_area.start.row,-1):e.rows>0&&(a.row=this.StepVisibleRows(n.merge_area.end.row,1))):(a.row=this.StepVisibleRows(a.row,e.rows),a.column=this.StepVisibleColumns(a.column,e.columns)),this.EnsureAddress(a)&&(s=!0),this.Select(t,new _({row:Math.min(Math.max(0,a.row),this.active_sheet.rows-1),column:Math.min(Math.max(0,a.column),this.active_sheet.columns-1)})),this.RenderSelections(),this.ScrollIntoView(t.target)}}this.SelectingArgument()&&this.UpdateSelectedArgument(t),s&&this.DelayedRender()}HighlightDependencies(e,t=!0){let i=0;e:for(let r of e)if((r.start.row===1/0||r.start.row<this.active_sheet.rows)&&(r.start.column===1/0||r.start.column<this.active_sheet.columns)){if(r.start.spill&&r.end.row===r.start.row&&r.end.column===r.start.column){let n=this.model.sheets.Find(r.start.sheet_id||-1)?.CellData(r.start);n?.spill&&n.spill.start.row===r.start.row&&n.spill.start.column===r.start.column&&r.ConsumeArea(n.spill)}r=this.active_sheet.RealArea(r);let s=r.spreadsheet_label;if(this.additional_selections[i]&&this.additional_selections[i].area.spreadsheet_label===s)i++;else{for(let o=0;o<i;o++)if(this.additional_selections[o].area.spreadsheet_label===s&&this.additional_selections[o].area.start.sheet_id===r.start.sheet_id)continue e;this.additional_selections[i++]={target:r.start,area:r}}}this.additional_selections.splice(i),t&&this.RenderSelections(!1)}ClearAdditionalSelections(){this.additional_selections.splice(0,this.additional_selections.length)}ClearSelection(e){this.Select(e)}HideGridSelection(){this.UpdateAddressLabel(void 0,"");let e=this.selected_annotation&&this.selected_annotation.data.formula?this.selected_annotation.data.formula:"";this.UpdateFormulaBarFormula(e),this.layout.ShowSelections(!1)}ShowGridSelection(){this.UpdateAddressLabel(),this.UpdateFormulaBarFormula(),this.layout.ShowSelections(!0)}Select(e,t,i,r=!1){if(e.empty||r&&(i=e.target),t){let s=this.active_sheet.RealArea(t);i||(i=s.start);e:for(;;){for(let a of this.active_sheet.cells.Iterate(s,!1))if(a.merge_area&&!s.ContainsArea(a.merge_area)){t.ConsumeArea(a.merge_area),s=this.active_sheet.RealArea(t);continue e}break}e.area=new _({...t.start,sheet_id:this.active_sheet.id},t.end),i&&(e.target={...i,sheet_id:this.active_sheet.id}),e.empty=!1;let o=this.active_sheet.CellData(e.target),n="";o.formatted&&(typeof o.formatted=="string"?n=o.formatted:n=o.formatted.map(a=>a.flag===1||a.flag===6?"":a.text).join("")),this.overlay_editor?.UpdateCaption(n)}else e.empty=!0;e===this.primary_selection&&(V.is_edge&&this.Focus(),this.grid_events.Publish({type:"selection",selection:this.primary_selection}),this.UpdateAddressLabel(),this.UpdateFormulaBarFormula(),this.formula_bar&&(this.formula_bar.target_address={...this.primary_selection.target}),this.options.stats&&this.UpdateStats())}UpdateFormulaBarFormula(e){if(this.layout.HideDropdownCaret(),e){this.formula_bar&&(this.formula_bar.shadow=!1,this.formula_bar.formula=e);return}if(this.primary_selection.empty)this.formula_bar&&(this.formula_bar.shadow=!1,this.formula_bar.formula="");else{let t=this.active_sheet.CellData(this.primary_selection.target),i=t.merge_area||t.area||t.spill,r=!1;i&&(i.start.column!==this.primary_selection.target.column||i.start.row!==this.primary_selection.target.row)&&(t=this.active_sheet.CellData(i.start),t.spill&&(r=!0)),this.formula_bar&&(this.formula_bar.editable=!t.style?.locked);let s=this.NormalizeCellValue(t),o=this.active_sheet.GetValidation(this.primary_selection.target)[0];if(o&&!t.style?.locked){let n;o.type==="list"?n=o.list:o.type==="range"&&(n=this.GetValidationRange(o.area)),n&&n.length&&this.layout.ShowDropdownCaret(t.merge_area||new _(this.primary_selection.target),n,t.value)}this.formula_bar&&(this.formula_bar.shadow=r,t.area?this.formula_bar.formula="{"+(s||"")+"}":this.formula_bar.formula=(s??"").toString())}}RenderStats(e){if(!Array.isArray(e))return[];let t=0,i=0,r={real:0,imaginary:0};for(let o of e)for(let n of o)typeof n=="number"?(r.real+=n,i++):lt(n)&&(r.real+=n.real,r.imaginary+=n.imaginary,i++),typeof n<"u"&&t++;let s=o=>{let n=Math.floor(Math.log10(o));return n<-6||n>10?P.Get("Exponential"):n<=-1?P.Get("General"):P.Get("Number")};if(t>1)if(i>0){let o=P.Get("General");if(r.imaginary){let n={real:r.real/i,imaginary:r.imaginary/i};return[{label:"Count",value:t.toString()},{label:"Sum",value:Z.FormatPartsAsText(o.FormatComplex(r))},{label:"Average",value:Z.FormatPartsAsText(o.FormatComplex(n))}]}else return[{label:"Count",value:t.toString()},{label:"Sum",value:s(r.real).Format(r.real)},{label:"Average",value:s(r.real/i).Format(r.real/i)}]}else return[{label:"Count",value:t.toString()}];return[]}UpdateStats(){if(this.tab_bar){let e=[];typeof this.options.stats=="function"?this.primary_selection.empty||(e=this.options.stats.call(void 0,this.GetRange(this.primary_selection.area))):!this.primary_selection.empty&&this.primary_selection.area.count>1&&(e=this.RenderStats(this.GetRange(this.primary_selection.area))),this.tab_bar.stats_data=e}}UpdateAddressLabelArea(e){!e.empty&&!e.area.entire_sheet&&(e.area.entire_column?this.UpdateAddressLabel(void 0,e.area.columns+"C"):e.area.entire_row?this.UpdateAddressLabel(void 0,e.area.rows+"R"):e.area.count>1?this.UpdateAddressLabel(void 0,e.area.rows+"R x "+e.area.columns+"C"):this.UpdateAddressLabel(e))}UpdateAddressLabel(e=this.primary_selection,t){if(this.formula_bar)if(typeof t<"u")this.formula_bar.label=t;else if(e.empty)this.formula_bar.label="";else{let i=this.active_sheet.CellData(this.primary_selection.target),r=new _(i.merge_area?i.merge_area.start:e.target);this.formula_bar.label=this.model.named.MatchSelection(e.area,r)||_.CellAddressToLabel(r.start)}}OnDropdownSelect(e){if(typeof e<"u"){let r=le.TryParse(e.toString());r.type===3&&(e=r.value)}let t=this.active_sheet.CellData(this.primary_selection.target),i=t.merge_area?t.merge_area.start:this.primary_selection.target;this.ExecCommand({key:6,area:i,value:e}),this.UpdateFormulaBarFormula()}OnScroll(){let e=this.layout.VisibleTiles();e.Equals(this.render_tiles)||(this.render_tiles=e,this.layout_token||(this.layout_token=requestAnimationFrame(()=>this.Repaint())))}AttachListeners(){if(!this.container)throw new Error("invalid container");this.container.addEventListener("copy",this.HandleCopy.bind(this)),this.container.addEventListener("cut",this.HandleCut.bind(this)),this.container.addEventListener("paste",this.HandlePaste.bind(this)),this.layout.grid_cover.addEventListener("mousedown",e=>this.MouseDown_Grid(e)),this.layout.column_header_cover.addEventListener("mousedown",e=>this.MouseDown_ColumnHeader(e)),this.layout.row_header_cover.addEventListener("mousedown",e=>this.MouseDown_RowHeader(e)),this.layout.column_header_cover.addEventListener("mousemove",e=>this.MouseMove_ColumnHeader(e)),this.layout.row_header_cover.addEventListener("mousemove",e=>this.MouseMove_RowHeader(e)),this.layout.grid_cover.addEventListener("mousemove",e=>this.MouseMove_Grid(e)),this.overlay_editor?.edit_node.addEventListener("keydown",e=>this.OverlayKeyDown(e)),this.layout.corner.addEventListener("dblclick",()=>{this.SelectAll()}),window.addEventListener("resize",()=>{this.layout.UpdateDPR()&&(this.QueueLayoutUpdate(),this.Repaint(!0,!0,!0))})}HandleCopy(e){if(e.stopPropagation(),e.preventDefault(),this.primary_selection.empty){if(e.clipboardData&&e.clipboardData.clearData(),this.selected_annotation&&e.clipboardData){let t=JSON.stringify({data:this.selected_annotation,source:this.active_sheet.id});e.clipboardData.setData("text/x-treb-annotation",t);let i=this.selected_annotation.view[this.view_index];if(i&&i.node){let r=i.node.firstChild?.firstChild;if(r){let s=Ot(r).outerHTML;e.clipboardData.setData("text/uri-list","data:image/svg+xml;base64,"+btoa(s)),e.clipboardData.setData("text/html",s),e.clipboardData.setData("text/plain",s)}}}}else{let t=this.active_sheet.RealArea(this.primary_selection.area),i=[],r=[];if(this.primary_selection.area.entire_column)for(let c=t.start.column;c<=t.end.column;c++){let h=this.active_sheet.GetColumnWidth(c);h!==this.active_sheet.default_column_width&&(i[c-t.start.column]=h)}if(this.primary_selection.area.entire_row)for(let c=t.start.row;c<=t.end.row;c++){let h=this.active_sheet.GetRowHeight(c);h!==this.active_sheet.default_row_height&&(r[c-t.start.row]=h)}let s=t.columns,o=t.rows,n=[],a=[];for(let c=0;c<o;c++){let h=[];for(let d=0;d<s;d++){let u={row:t.start.row+c,column:t.start.column+d},p=this.active_sheet.CellData(u),m="";p.calculated!==void 0?p.calculated_type===8?m=ct(p.calculated):m=p.calculated.toString():p.type===8?m=ct(p.value):m=p.value?.toString()||"",h.push(m);let b={address:u,data:p.value,type:p.type,style:this.active_sheet.GetCopyStyle(u)};p.area&&p.area.start.row===u.row&&p.area.start.column===u.column&&(b.array={rows:p.area.rows,columns:p.area.columns}),a.push(JSON.parse(JSON.stringify(b)))}n.push(h)}let l=n.map(c=>c.join(" ")).join(`
10
- `);e.clipboardData&&(e.clipboardData.clearData(),e.clipboardData.setData("text/plain",l),e.clipboardData.setData("text/x-treb",JSON.stringify({source:t,data:a,column_width:i,row_height:r})))}}HandleCut(e){if(e.stopPropagation(),e.preventDefault(),this.HandleCopy(e),this.primary_selection.empty)this.selected_annotation&&this.RemoveAnnotation(this.selected_annotation);else{let t=this.active_sheet.RealArea(this.primary_selection.area);this.ExecCommand({key:12,area:t})}}RecyclePasteAreas(e,t){let i=[];if(e.count===1)for(let r=t.start.row;r<=t.end.row;r++)for(let s=t.start.column;s<=t.end.column;s++)i.push(new _({row:r,column:s}));else if(e.columns===t.columns&&t.rows>=e.rows&&t.rows%e.rows===0)for(let r=t.start.row;r<=t.end.row;r+=e.rows)i.push(new _({row:r,column:t.start.column},{row:r+e.rows-1,column:t.end.column}));else if(e.rows===t.rows&&t.columns>=e.columns&&t.columns%e.columns===0)for(let r=t.start.column;r<=t.end.column;r+=e.columns)i.push(new _({column:r,row:t.start.row},{column:r+e.columns-1,row:t.end.row}));else i.push(t.Clone().Resize(e.rows,e.columns));return i}HandlePaste(e){if(this.overlay_editor?.editing||(e.stopPropagation(),e.preventDefault(),!e.clipboardData))return;let t=e.clipboardData.getData("text/x-treb-annotation");if(t){try{let o=JSON.parse(t);if(o.source&&o.source!==this.active_sheet.id&&o.data&&o.data.formula){let n="",a=this.model.sheets.Find(o.source);if(a&&(n=a.name),n){let l=this.parser.Parse(o.data.formula);l.expression&&(this.parser.Walk(l.expression,c=>c.type==="range"?(!c.start.sheet_id&&!c.start.sheet&&(c.start.sheet=n),!1):(c.type==="address"&&!c.sheet_id&&!c.sheet&&(c.sheet=n),!0)),o.data.formula="="+this.parser.Render(l.expression,{missing:""}))}}this.CreateAnnotation(o.data,void 0,!0,!0,void 0,!0)}catch(o){console.error(o)}return}if(this.primary_selection.empty)return;let i=this.active_sheet.RealArea(this.primary_selection.area),r=[],s=e.clipboardData.getData("text/x-treb");if(s)try{let o=JSON.parse(s),n=new _(o.source.start,o.source.end),a=this.RecyclePasteAreas(n,i);if(a.length===1&&i.Resize(a[0].rows,a[0].columns),!this.ValidatePasteAreas(a)){this.Error(5);return}let l=[];for(let c of a){this.active_sheet.cells.EnsureCell(c.end),r.push({key:12,area:c});let h={rows:c.start.row-n.start.row,columns:c.start.column-n.start.column};if(o.data.forEach(d=>{let u=d.data,p={row:d.address.row-n.start.row+c.start.row,column:d.address.column-n.start.column+c.start.column};if(d.type===1){let m=this.parser.Parse(u);m.expression&&(u="="+this.parser.Render(m.expression,{offset:h,missing:""}))}if(d.array){let m={start:{...p},end:{row:p.row+d.array.rows-1,column:p.column+d.array.columns-1}},b={key:6,value:u,array:!0,area:m};l.push(new _(m.start,m.end)),r.push(b)}else{let m=!1;for(let b of l)if(b.Contains(p)){m=!0;break}m||r.push({key:6,value:u,area:p})}r.push({key:7,style:d.style||{},area:p})}),o.column_width?.length){for(let[d,u]of o.column_width.entries())if(typeof u=="number"){let p=d+c.start.column;r.push({key:4,column:p,width:u})}}if(o.row_height?.length){for(let[d,u]of o.row_height.entries())if(typeof u=="number"){let p=d+c.start.row;r.push({key:3,row:p,height:u})}}}}catch(o){console.error("invalid treb data on clipboard"),console.info(o);return}else{let o=e.clipboardData.getData("text/plain");if(!o)return!0;let a=o.trim().split(`
11
- `).map(c=>c.split(" ").map(h=>h.trim())),l=this.RecyclePasteAreas(new _({row:0,column:0},{row:a.length-1,column:a[0].length-1}),i);if(l.length===1&&(i.Resize(a.length,a[0].length),i.Resize(l[0].rows,l[0].columns)),!this.ValidatePasteAreas(l)){this.Error(5);return}for(let c of l)for(let h=0;h<a.length;h++)for(let d=0;d<a[0].length;d++){let u=new _({row:h+c.start.row,column:d+c.start.column});if(this.active_sheet.cells.EnsureCell(u.end),a[h][d]){let p=this.SetInferredType({area:u,target:u.start,empty:!1},a[h][d],!1,!1);if(p)for(let m of p)r.push(m)}else{let p=this.active_sheet.cells.GetCell(u.start,!1);p&&p.type!==0&&r.push({key:12,area:u.Clone()})}}}this.ExecCommand(r),this.Select(this.primary_selection,i)}AllSelections(e=!1){let t=[this.primary_selection,this.active_selection].concat(this.additional_selections);return e?t:t.filter(i=>!i.empty)}InsertRowsInternal(e){let t=super.InsertRowsInternal(e);if(t.error)return t;let i=this.FindSheet(e.sheet_id);if(i===this.active_sheet){if(e.count<0)for(let r of this.AllSelections())r.empty=!0;else for(let r of this.AllSelections())r.target.row>=e.before_row&&(r.target.row+=e.count),r.area.entire_column||(r.area.start.row>=e.before_row?r.area.Shift(e.count,0):r.area.end.row>=e.before_row&&r.area.ConsumeAddress({row:r.area.end.row+e.count,column:r.area.end.column}));for(let r of t.delete_annotations_list||[])this.layout.RemoveAnnotation(r);if(this.QueueLayoutUpdate(),this.Repaint(),t.update_annotations_list?.length){this.layout.UpdateAnnotation(t.update_annotations_list,this.theme);for(let r of t.resize_annotations_list||[]){let s=r.view[this.view_index];s?.resize_callback&&s.resize_callback.call(void 0)}}}else this.pending_layout_update.add(i.id);return t}InsertColumnsInternal(e){let t=super.InsertColumnsInternal(e);if(t.error)return t;let i=this.FindSheet(e.sheet_id);if(i===this.active_sheet){if(e.count<0)for(let r of this.AllSelections())r.empty=!0;else for(let r of this.AllSelections())r.target.column>=e.before_column&&(r.target.column+=e.count),r.area.entire_row||(r.area.start.column>=e.before_column?r.area.Shift(0,e.count):r.area.end.column>=e.before_column&&r.area.ConsumeAddress({row:r.area.end.row,column:r.area.end.column+e.count}));for(let r of t.delete_annotations_list||[])this.layout.RemoveAnnotation(r);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 r of t.resize_annotations_list||[]){let s=r.view[this.view_index];s?.resize_callback&&s.resize_callback.call(void 0)}}}else this.pending_layout_update.add(i.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,i=e.column;if(typeof i>"u"){i=[];for(let o=0;o<t.columns;o++)i.push(o)}typeof i=="number"&&(i=[i]);let r=typeof e.width!="number",s=Math.round((e.width||0)/this.scale);if(r)for(let o of i)this.AutoSizeColumn(t,o,!0);else for(let o of i)t.SetColumnWidth(o,s);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,i=e.sheet_id?this.FindSheet(e.sheet_id):this.active_sheet,r=e.row;if(typeof r>"u"){r=[];for(let a=0;a<i.rows;a++)r.push(a)}typeof r=="number"&&(r=[r]);let s=typeof e.shrink=="boolean"?e.shrink:!0,o=typeof e.height!="number",n=Math.round(e.height||0/this.scale);if(o)for(let a of r)i.GetRowHeight(a)||(t?t.ConsumeAddress({row:a,column:1}):t=new _({row:a,column:1/0,sheet_id:i.id})),this.AutoSizeRow(i,a,s);else for(let a of r){let l=i.GetRowHeight(a);(!l&&n||l&&!n)&&(t?t.ConsumeAddress({row:a,column:1}):t=new _({row:a,column:1/0,sheet_id:i.id})),i.SetRowHeight(a,n)}return i===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(i.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 _(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),i=(typeof e.highlight_transition=="boolean"?e.highlight_transition:!0)&&t===this.active_sheet;if(e.rows===t.freeze.rows&&e.columns===t.freeze.columns){i&&this.HighlightFreezeArea();return}t.freeze.rows=e.rows,t.freeze.columns=e.columns,t===this.active_sheet?(this.QueueLayoutUpdate(),this.Repaint(),i&&this.HighlightFreezeArea(),e.rows||e.columns?this.layout.CloneFrozenAnnotations():this.layout.ClearFrozenAnnotations()):this.pending_layout_update.add(t.id)}ExecCommand(e,t=!0){let i=super.ExecCommand(e,t);this.batch||i.render_area&&this.DelayedRender(!1,i.render_area),i.repaint&&this.Repaint();for(let r of i.pending||[])this.pending_layout_update.add(r);return i.layout&&this.QueueLayoutUpdate(),i.sheets&&this.tab_bar&&this.tab_bar.Update(),i.formula&&this.UpdateFormulaBarFormula(),i}};var ni=["default","old-style","transitional","handwritten","monospace","industrial","ui"],Xn={default:"Sans-serif","old-style":"Old style",transitional:"Serif",handwritten:"Handwritten",monospace:"Monospace",industrial:"Industrial sans",ui:"System UI"},oi=new Map,At=(f,e)=>{let t=e.fontFamily,i="",r=t.split(/,/);for(let h of r){h=h.replace(/'"/g,"").trim();let d=h.toLowerCase();if(V.is_firefox&&/sitka text/i.test(d))continue;let u=oi.get(d);if(typeof u>"u"&&(u=W.FontLoaded(h),oi.set(d,u)),u){i=h;break}}i||console.warn("no font found for font stack",f);let s=i.toLowerCase().replace(/['"]/g,"").replace(/\W+/g,"-"),o=e.getPropertyValue("--treb-font-stack-default-size"),n=e.getPropertyValue(`--treb-font-stack-${s}-size`),a=e.getPropertyValue(`--treb-font-stack-${s}-variant`),l=D.ParseFontSize(n||o||"10pt").font_size||{unit:"pt",value:10};return{family:t,font:i,variants:a,size:l}};var Ke={grid_color:"#ccc",note_marker_color:"#d2c500",mode:"light",offset_cache:{},offset_light:"#fff",offset_dark:"#000",font_stacks:{},grid_cell_font_size:{value:10,unit:"pt"}},cr=(f,e)=>{let t=pt(e),i=e.tint||0;f.mode==="dark"&&(i=-i),f.tint_cache||(f.tint_cache=[]),f.tint_cache[t]||(f.tint_cache[t]={});let r=f.tint_cache[t][i];if(!r){let s=(f.theme_colors_rgb?f.theme_colors_rgb[t]:[0,0,0])||[0,0,0],o;i>0?o=N.Lighten(s[0],s[1],s[2],i*100,!0):o=N.Darken(s[0],s[1],s[2],-i*100,!0),r=`rgb(${o.r},${o.g},${o.b})`,f.tint_cache[t][i]=r}return r},T=(f,e,t)=>{if(e&&e.offset){if(e.offset.offset)return console.warn("invalid offset color"),"";let i="";if(H(e.offset)){let s=W.MeasureColor(e.offset.text);i=`rgb(${s[0]}, ${s[1]}, ${s[2]})`}else i=T(f,e.offset,void 0);if(f.offset_cache&&f.offset_cache[i])return f.offset_cache[i];let r=f.offset_light;if(i){let s=i.match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/);if(s){let o=[Number(s[1]),Number(s[2]),Number(s[3])],n=Array.from(W.MeasureColor(f.offset_dark)),a=Array.from(W.MeasureColor(f.offset_light)),l=N.GetTextColor(o,n,a);r=`rgb(${l[0]}, ${l[1]}, ${l[2]})`}else console.warn("can't offset against color",i,"(1)");f.offset_cache||(f.offset_cache={}),f.offset_cache[i]=r}else console.warn("can't resolve offset color",e.offset,"(2)");return r}return H(e)?e.text==="none"?"":e.text:Ie(e)?e.tint?cr(f,e):f.theme_colors?f.theme_colors[pt(e)]:"":(t||t===0)&&f.theme_colors?f.theme_colors[t]:""},hr=f=>{let e=10,t="pt",i=f.match(/^([\d.]+)(\D.*)$/);return i&&(e=Number(i[1]),t=i[2]),{value:e,unit:t}},ai=(f,e=!1)=>{let t={fill:{text:f.backgroundColor},text:{text:f.color},font_size:{unit:"em",value:1}};return e&&(t.font_face=f.fontFamily),/italic/i.test(f.font)&&(t.italic=!0),f.fontWeight==="700"&&(t.bold=!0),t},dr=(f,e)=>{let t=f.grid_cell?.text,i=f.grid_cell?.fill;e.fillStyle=H(t)?t.text:"",e.fillRect(0,0,3,3);let r=N.RGBToHSL(...Array.from(e.getImageData(1,1,1,1).data));e.fillStyle=H(i)?i.text:"",e.fillRect(0,0,3,3);let s=N.RGBToHSL(...Array.from(e.getImageData(1,1,1,1).data));return r.l>s.l?"dark":"light"},ur=(f,e=.7)=>{let t={border_top:1,border_top_fill:{theme:f},border_bottom:1,border_bottom_fill:{theme:f}};return{header:{text:{offset:{theme:f}},fill:{theme:f},bold:!0,...t},odd:{fill:{theme:f,tint:e},...t},even:{...t},total:{...t,border_top:2}}},si=(f,e=!1)=>{let t=JSON.parse(JSON.stringify(Ke)),i=z.GetInstance(f.ownerDocument),r=(d,u)=>i.Div(u,d),s=(d,u)=>i.view?.getComputedStyle(r(d,u)),o=r(f,""),n=s.bind(0,o),a=n("grid-cells");if(t.grid_cell=ai(a,!1),t.grid_color=a.stroke||"",t.grid_cell_font_size=hr(a.fontSize||""),e)for(let d of ni)a=n(`treb-font-stack-${d}`),t.font_stacks[d]=At(d,a);else a=n("treb-font-stack-default"),t.font_stacks.default=At("default",a);a=n("grid-headers"),t.headers=ai(a,!0),t.headers_grid_color=a.stroke,(!t.headers_grid_color||t.headers_grid_color==="none")&&(t.headers_grid_color=t.grid_color),a=n("treb-offset-dark"),a.color&&(t.offset_dark=a.color),a=n("treb-offset-light"),a.color&&(t.offset_light=a.color),a=n("note-marker"),t.note_marker_color=a.backgroundColor,o.style.color="rgba(1,2,3,.4)",a=n("");let l=a.color;t.theme_colors=[H(t.grid_cell.fill)?t.grid_cell.fill.text:"rgb(255, 255, 255)",H(t.grid_cell.text)?t.grid_cell.text.text:"rgb(51, 51, 51)"];for(let d=1;d<32&&(a=n(`theme-color-${d}`),!(!a.color||a.color===l));d++)t.theme_colors.push(a.color);let c=i.Create("canvas");c.width=3,c.height=3;let h=c.getContext("2d",{willReadFrequently:!0});return h&&(t.mode=dr(t,h)),h&&(t.theme_colors_rgb=t.theme_colors.map(d=>{h.fillStyle=d,h.fillRect(0,0,3,3);let u=h.getImageData(1,1,1,1);return Array.from(u.data)})),t.table=ur(4),o.parentElement?.removeChild(o),t};var ri={column:0,type:"auto",asc:!0};var li=class{constructor(e,t,i="RGB"){this.color_space=i;this.mapped=e.map(r=>{if(r.value<0||r.value>1)throw new Error("invalid stop value");let s=W.MeasureColor(T(t,r.color)),o=[];if(i==="HSL"){let n=N.RGBToHSL(s[0],s[1],s[2]);o=[n.h,n.s,n.l]}else o=[...s];return{...r,resolved:o}}),this.mapped.sort((r,s)=>r.value-s.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,i]of this.mapped.entries()){if(e===i.value)return this.RenderColor(i.resolved);if(e<i.value){let r=this.mapped[t-1],s=i,o=s.value-r.value,n=e-r.value,a=[0,1,2].map(l=>r.resolved[l]+(s.resolved[l]-r.resolved[l])/o*n);return this.RenderColor(a)}}return{text:""}}};var ci={};mi(ci,{Iterate:()=>fr});function*fr(f){if(f.start.row===1/0||f.end.row===1/0)throw new Error("don't iterate infinite area");let e=f.start.sheet_id;for(let t=f.start.row;t<=f.end.row;t++)for(let i=f.start.column;i<=f.end.column;i++)yield{row:t,column:i,sheet_id:e}}export{pr as a,mr as b,ue as c,Ee as d,L as e,Ft as f,_ as g,lt as h,ct as i,se as j,Li as k,ut as l,De as m,M as n,U as o,pt as p,H as q,Ie as r,D as s,Vr as t,Gr as u,N as v,z as w,X as x,W as y,Vt as z,Kr as A,wt as B,Kt as C,Z as D,P as E,le as F,V as G,St as H,Xn as I,T as J,ur as K,li as L,ci as M,Ct as N,B as O,No as P};