@trebco/treb 28.0.5 → 28.2.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.
- package/dist/treb-spreadsheet-light.mjs +4 -4
- package/dist/treb-spreadsheet.mjs +12 -12
- package/dist/treb.d.ts +3 -3
- package/package.json +5 -3
- package/treb-base-types/src/import.ts +1 -0
- package/treb-embed/src/embedded-spreadsheet.ts +7 -29
- package/treb-export/src/export-worker/export-worker.ts +7 -12
- package/treb-export/src/export2.ts +57 -33
- package/treb-export/src/import2.ts +61 -21
- package/treb-export/src/workbook2.ts +69 -24
- package/treb-export/src/zip-wrapper.ts +96 -0
- package/treb-grid/src/types/annotation.ts +2 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! TREB v28.0.
|
|
1
|
+
/*! TREB v28.2.0. Copyright 2018-2023 trebco, llc. All rights reserved. LGPL: https://treb.app/license */
|
|
2
2
|
var V=c=>c!==null&&typeof c=="object"&&"row"in c&&"column"in c,Fr=c=>c!==null&&typeof c=="object"&&"start"in c&&V(c.start)&&"end"in c&&V(c.end),y=class c{start_;end_;constructor(e,t=e,r=!1){this.end_=this.PatchNull(t),this.start_=this.PatchNull(e),r&&this.Normalize()}static FromColumn(e){return new c({row:1/0,column:e})}static FromRow(e){return new c({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){return(t?`${e.sheet_id||0}!`:"")+(e.absolute_column?"$":"")+this.ColumnToLabel(e.column)+(e.absolute_row?"$":"")+(e.row+1)}static Join(e,...t){let r=new c(e.start,e.end);for(let i of t)i&&(r.ConsumeAddress(i.start),r.ConsumeAddress(i.end));return r}static Bleed(e,t=1){return new c({row:Math.max(0,e.start.row-t),column:Math.max(0,e.start.column-t),sheet_id:e.start.sheet_id},{row:e.end.row+t,column:e.end.column+t})}static PatchArea(e,t){let{before_column:r,column_count:i,before_row:o,row_count:n}=t,a=new c(e.start,e.end),s=e.start.sheet_id;if(i&&r<=a.end.column){if(i>0)r<=a.start.column?a.Shift(0,i):r>a.start.column&&r<=a.end.column?a.ConsumeAddress({row:a.end.row,column:a.end.column+i}):console.warn("AA X case 1",r,i,JSON.stringify(a));else if(i<0)if(r-i<=a.start.column)a.Shift(0,i);else{if(r<=a.start.column&&r-i>a.end.column)return!1;if(r<=a.start.column){let l=r-i-1;a=new c({row:a.start.row,column:l+1+i,sheet_id:s},{row:a.end.row,column:a.end.column+i})}else r<=a.end.column?r-i-1>=a.end.column?a=new c({row:a.start.row,column:a.start.column,sheet_id:s},{row:a.end.row,column:r-1}):a=new c({row:a.start.row,column:a.start.column,sheet_id:s},{row:a.end.row,column:a.start.column+a.columns+i-1}):console.warn("AA X case 2",r,i,JSON.stringify(a))}}if(n&&o<=a.end.row){if(n>0)o<=a.start.row?a.Shift(n,0):o>a.start.row&&o<=a.end.row?a.ConsumeAddress({row:a.end.row+n,column:a.end.column}):console.warn("AA X case 3",o,n,JSON.stringify(a));else if(n<0)if(o-n<=a.start.row)a.Shift(n,0);else{if(o<=a.start.row&&o-n>a.end.row)return!1;if(o<=a.start.row){let l=o-n-1;a=new c({column:a.start.column,row:l+1+n,sheet_id:s},{column:a.end.column,row:a.end.row+n})}else o<=a.end.row?o-n-1>=a.end.row?a=new c({column:a.start.column,row:a.start.row,sheet_id:s},{column:a.end.column,row:o-1}):a=new c({column:a.start.column,row:a.start.row,sheet_id:s},{column:a.end.column,row:a.start.row+a.rows+n-1}):console.warn("AA X case 4",o,n,JSON.stringify(a))}}return a}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}Clone(){return new c(this.start,this.end)}Array(){if(this.entire_column||this.entire_row)throw new Error("can't convert infinite area to array");let e=new Array(this.rows*this.columns),t=this.start_.sheet_id,r=0;for(let i=this.start_.row;i<=this.end_.row;i++)for(let o=this.start_.column;o<=this.end_.column;o++)e[r++]={row:i,column:o,sheet_id:t};return e}get left(){let e=new c(this.start_,this.end_);return e.end_.column=e.start_.column,e}get right(){let e=new c(this.start_,this.end_);return e.start_.column=e.end_.column,e}get top(){let e=new c(this.start_,this.end_);return e.end_.row=e.start_.row,e}get bottom(){let e=new c(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))}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}Iterate(e){if(this.entire_column||this.entire_row){console.warn("don't iterate infinite area");return}for(let t=this.start_.column;t<=this.end_.column;t++)for(let r=this.start_.row;r<=this.end_.row;r++)e({column:t,row:r,sheet_id:this.start_.sheet_id})}get spreadsheet_label(){let e;return this.entire_sheet?"":this.entire_column?(e=c.ColumnToLabel(this.start_.column),e+=":"+c.ColumnToLabel(this.end_.column),e):this.entire_row?(e=String(this.start_.row+1),e+=":"+(this.end_.row+1),e):(e=c.CellAddressToLabel(this.start_),this.columns>1||this.rows>1?e+":"+c.CellAddressToLabel(this.end_):e)}toJSON(){return{start:{...this.start_},end:{...this.end_}}}};var fe=c=>typeof c=="object"&&!!c&&typeof c.real=="number"&&typeof c.imaginary=="number",He=c=>c.real?c.imaginary?c.imaginary>0?`${c.real} + ${c.imaginary}i`:`${c.real} - ${Math.abs(c.imaginary)}i`:c.real.toString():c.imaginary?c.imaginary+"i":"0",Yt=c=>typeof c=="object"&&!!c&&typeof c.value=="number"&&typeof c.unit=="string",er=["undefined","formula","string","number","boolean","object","error","complex","array","dimensioned_quantity"];var ae=c=>{switch(typeof c){case"undefined":return 0;case"number":return 3;case"boolean":return 4;case"object":return c===null?0:fe(c)?7:Yt(c)?9:5;case"string":return c[0]==="="?1:2;default:return 6}};var ee=class{static StringToColumn(e){let t=0;e=e.toUpperCase();for(let r=0;r<e.length;r++)t*=26,t+=e.charCodeAt(r)-64;return t-1}value;type=0;calculated;calculated_type;formatted;rendered_type;style;area;merge_area;table;renderer_data;render_clean=[];note;hyperlink;editing;render_function;click_function;validation;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===7}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.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=ae(e)){this.value=e,this.type=t,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=ae(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,6)}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=ae(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 tr=c=>!c.cells,Je=c=>!!c[0]&&tr(c[0]),rr=c=>!!c[0]&&c[0].row!==void 0,Gi=er.map((c,e)=>({[c]:e})).reduce((c,e)=>({...c,...e}),{}),dt=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){let r=JSON.parse(JSON.stringify(this.data[13]));this.data=this.data.map(i=>{if(i.length>=e){let o=i.slice(0,e),n=e+t,a=i.slice(e);for(let s=0;s<a.length;s++)o[n++]=a[s];return o}return i}),this.columns_+=t}DeleteColumns(e,t=1){this.data.forEach(r=>r.splice(e,t)),this.columns_-=t}DeleteRows(e,t=1){this.data.splice(e,t),this.rows_-=t}InsertRows(e=0,t=1){let r=[e,0,[]];for(let i=1;i<t;i++)r.push([]);Array.prototype.splice.apply(this.data,r),this.rows_+=t}GetCell(e,t){let{row:r,column:i}=e;if(!this.data[r])if(t)this.data[r]=[],this.rows_=Math.max(this.rows_,r+1);else return;return this.data[r][i]||t&&(this.data[r][i]=new ee,this.columns_=Math.max(this.columns_,i+1)),this.data[r][i]}EnsureCell(e){let{row:t,column:r}=e,i=this.data[t];i||(this.data[t]=i=[],this.rows_=Math.max(this.rows_,t+1));let o=i[r];return o||(o=i[r]=new ee,this.columns_=Math.max(this.columns_,r+1)),o}FromArray(e=[],t=!1){this.data=[];let r=0,i=0;if(t){i=e.length;for(let o=0;o<i;o++){let n=e[o];r=Math.max(r,n.length);for(let a=0;a<n.length;a++)this.data[a]||(this.data[a]=[]),this.data[a][o]=new ee(n[a])}}else{r=e.length;for(let o=0;o<r;o++){let n=[],a=e[o];i=Math.max(i,a.length);for(let s=0;s<a.length;s++)n[s]=new ee(a[s]);this.data[o]=n}}this.rows_=r,this.columns_=i}SerializedTypeToValueType(e){if(e)return typeof e=="number"?e:Gi[e]||void 0}ValueTypeToSerializedType(e){return e?er[e]:void 0}ImportDataValidation(e){if(typeof e.type=="number"){let t=["list","date","range","number","boolean"];if(e.type=t[e.type],!e.type)return}return e}FromJSON(e=[],t){if(this.data=[],!Je(e)){let i=[];if(rr(e))for(let o of e)for(let n of o.cells)i.push({...n,row:o.row});else for(let o of e)for(let n of o.cells)i.push({...n,column:o.column});e=i}let r=[];for(let i of e){this.data[i.row]||(this.data[i.row]=[]);let o=new ee(i.value);if(typeof i.calculated<"u"&&o.SetCalculatedValue(i.calculated,this.SerializedTypeToValueType(i.calculated_type)),t&&typeof i.style_ref<"u"&&(o.style=t[i.style_ref]),typeof i.note<"u"&&(o.note=i.note),typeof i.hyperlink<"u"&&(o.hyperlink=i.hyperlink),this.data[i.row][i.column]&&this.data[i.row][i.column].area&&(o.area=this.data[i.row][i.column].area),this.data[i.row][i.column]=o,i.area){let n=new y(i.area.start,i.area.end);for(let a=n.start.row;a<=n.end.row;a++)for(let s=n.start.column;s<=n.end.column;s++)this.data[a]||(this.data[a]=[]),this.data[a][s]||(this.data[a][s]=new ee),this.data[a][s].area=n}if(i.table&&r.push({...i.table}),i.merge_area){let n=new y(i.merge_area.start,i.merge_area.end);for(let a=n.start.row;a<=n.end.row;a++)for(let s=n.start.column;s<=n.end.column;s++)this.data[a]||(this.data[a]=[]),this.data[a][s]||(this.data[a][s]=new ee),this.data[a][s].merge_area=n}i.validation&&(o.validation=this.ImportDataValidation(i.validation))}for(let i of r)for(let o=i.area.start.row;o<=i.area.end.row;o++)for(let n=i.area.start.column;n<=i.area.end.column;n++)this.data[o]||(this.data[o]=[]),this.data[o][n]||(this.data[o][n]=new ee),this.data[o][n].table=i;this.rows_=this.data.length,this.columns_=this.data.reduce((i,o)=>Math.max(i,o.length),0)}toJSON(e={}){let t=0,r=0,i=this.data.length-1,o;e.subset&&(t=e.subset.start.column,r=e.subset.start.row,i=e.subset.end.row);let n=[],a=-1,s=-1,l={},d={};for(let u=r;u<=i;u++)if(this.data[u]){let h=this.data[u];o=h.length-1,e.subset&&(o=e.subset.end.column);for(let m=t;m<=o;m++){let f=h[m],p=f&&f.merge_area&&f.merge_area.start.row===u&&f.merge_area.start.column===m,_=f&&f.area&&f.area.start.row===u&&f.area.start.column===m,b=f&&f.table&&f.table.area.start.row===u&&f.table.area.start.column===m,v=f?f.type===2&&!f.value:!0;if(f&&(!v||e.preserve_empty_strings)&&(p||f.type||f.calculated_type&&e.expand_arrays||f.calculated_type&&e.calculated_value||f.note||f.validation||e.decorated_cells&&f.style&&(f.style.fill||f.style.border_bottom||f.style.border_top||f.style.border_left||f.style.border_right))){let g={row:u,column:m,value:f.value};f.note&&(g.note=f.note),f.hyperlink&&(g.hyperlink=f.hyperlink),e.preserve_type&&(g.type=this.ValueTypeToSerializedType(f.type)),e.sheet_id&&(g.sheet_id=e.sheet_id),e.calculated_value&&typeof f.calculated<"u"&&(g.calculated=f.calculated,(e.preserve_type||f.calculated_type===6)&&(g.calculated_type=this.ValueTypeToSerializedType(f.calculated_type))),f.table&&b&&e.tables&&(g.table=JSON.parse(JSON.stringify(f.table))),f.area&&_&&(g.area=f.area.toJSON()),f.merge_area&&(g.merge_area=f.merge_area.toJSON()),f.validation&&(g.validation=f.validation),e.cell_style_refs&&e.cell_style_refs[m]&&e.cell_style_refs[m][u]&&(g.style_ref=e.cell_style_refs[m][u],e.cell_style_refs[m][u]=0),l[u]=u,d[m]=m,a=Math.max(u,a),s=Math.max(m,s),n.push(g)}}}if(e.nested){let u=Object.keys(l),h=Object.keys(d);if(u.length<=h.length&&u.length){let m={},f=[];for(let p of n){let{row:_,...b}=p;m[p.row]||(m[p.row]=[]),m[p.row].push(b)}for(let p of u){let _=Number(p);f.push({row:_,cells:m[_]})}return{data:f,rows:a,columns:s+1}}else if(h.length){let m={},f=[];for(let p of n){let{column:_,...b}=p;m[p.column]||(m[p.column]=[]),m[p.column].push(b)}for(let p of h){let _=Number(p);f.push({column:_,cells:m[_]})}return{data:f,rows:a,columns:s+1}}}return{data:n,rows:a+1,columns:s+1}}GetAll(e=!1){return this.GetRange({row:0,column:0},{row:this.rows_-1,column:this.columns_-1},e)}Normalize2(e,t){return e.column===1/0&&(e={...e,column:0}),e.row===1/0&&(e={...e,row:0}),t.column===1/0&&(t={...t,column:this.columns_-1}),t.row===1/0&&(t={...t,row:this.rows_-1}),{from:e,to:t}}Normalize1(e){return e.column===1/0&&(e={...e,column:0}),e.row===1/0&&(e={...e,row:0}),e}RawValue(e,t=e){if({from:e,to:t}=this.Normalize2(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 r=[],i=this.data.slice(e.row,t.row+1),o=e.column,n=t.column+1;for(let a of i){let s=[];for(let l=o,d=0;l<n;l++,d++){let u=a[l];s.push(u?u.value:void 0)}r.push(s)}return r}GetRange(e,t,r=!1){if(t?{from:e,to:t}=this.Normalize2(e,t):e=this.Normalize1(e),!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 i=[];if(r)for(let o=e.column;o<=t.column;o++){let n=[];for(let a=e.row;a<=t.row;a++)this.data[a]&&this.data[a][o]?n.push(this.data[a][o].GetValue()):n.push(void 0);i.push(n)}else for(let o=e.row;o<=t.row;o++){let n=[];for(let a=e.column;a<=t.column;a++)this.data[o]&&this.data[o][a]?n.push(this.data[o][a].GetValue()):n.push(void 0);i.push(n)}return i}GetRange4(e,t=e,r=!1){if({from:e,to:t}=this.Normalize2(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 i=[];if(r)for(let o=e.column;o<=t.column;o++){let n=[];for(let a=e.row;a<=t.row;a++)this.data[a]&&this.data[a][o]?n.push(this.data[a][o].GetValue4()):n.push({type:0});i.push(n)}else for(let o=e.row;o<=t.row;o++){let n=[];for(let a=e.column;a<=t.column;a++)this.data[o]&&this.data[o][a]?n.push(this.data[o][a].GetValue4()):n.push({type:0});i.push(n)}return{type:8,value:i}}Apply(e,t,r=!1){if(V(e)&&(e=new y(e)),e.entire_column||e.entire_row)throw new Error("don't iterate infinite cells");let i=e.start,o=e.end;if(r)for(let n=i.row;n<=o.row;n++){this.data[n]||(this.data[n]=[]);let a=this.data[n];for(let s=i.column;s<=o.column;s++)a[s]||(a[s]=new ee),t(a[s],s,n)}else for(let n=i.row;n<=o.row;n++)if(this.data[n]){let a=this.data[n];for(let s=i.column;s<=o.column;s++)a[s]&&t(a[s],s,n)}}Apply2(e,t,r=!1){if(V(e)&&(e=new y(e)),e.entire_column||e.entire_row)throw new Error("don't iterate infinite cells");let i=e.start,o=e.end;if(r)for(let n=i.row;n<=o.row;n++){this.data[n]||(this.data[n]=[]);let a=this.data[n];for(let s=i.column;s<=o.column;s++)if(a[s]||(a[s]=new ee),!t(a[s],s,n))return}else for(let n=i.row;n<=o.row;n++)if(this.data[n]){let a=this.data[n];for(let s=i.column;s<=o.column;s++)if(a[s]&&!t(a[s],s,n))return}}SetArea(e,t){if(ArrayBuffer.isView(t))throw new Error("ABIV");if(Array.isArray(t))for(let r=e.start.row,i=0;r<=e.end.row;r++,i++){this.data[r]||(this.data[r]=[]);let o=this.data[r];if(t[i])for(let n=e.start.column,a=0;n<=e.end.column;n++,a++)o[n]||(o[n]=new ee),o[n].Set(t[i][a])}else{let r=ae(t);for(let i=e.start.row;i<=e.end.row;i++){this.data[i]||(this.data[i]=[]);let o=this.data[i];for(let n=e.start.column;n<=e.end.column;n++)o[n]||(o[n]=new ee),o[n].Set(t,r)}}this.rows_=Math.max(this.rows_,e.end.row+1),this.columns_=Math.max(this.columns_,e.end.column+1)}IterateAll(e){for(let t of this.data)if(t)for(let r of t)r&&e(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 z=class{static locale="en-us";static decimal_separator=".";static argument_separator=",";static grouping_separator=",";static date_components={short_days:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],long_days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],short_months:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],long_months:["January","February","March","April","May","June","July","August","September","October","November","December"]};static UpdateLocale(e){if(e)this.locale=e;else if(typeof self<"u"){let i=self?.document?.location;if(i&&i.search&&/locale=([^?&]+?)(?:\?|$|&)/.test(i.search)){let o=i.search.match(/locale=(.*?)(?:\?|$|&)/);o&&(this.locale=o[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)}let t=new Intl.NumberFormat(this.locale,{minimumFractionDigits:1}).format(3.3).replace(/\d/g,"");this.decimal_separator=t===","?",":".",this.decimal_separator===","?(this.argument_separator=";",this.grouping_separator=" "):(this.argument_separator=",",this.grouping_separator=",");let r=new Date(2e3,0,2,12,0,0,0);this.UpdateDateComponent(0,0,r),r=new Date(2e3,1,7,12,0,0,0),this.UpdateDateComponent(1,1,r),r=new Date(2e3,2,7,12,0,0,0),this.UpdateDateComponent(2,2,r),r=new Date(2e3,3,5,12,0,0,0),this.UpdateDateComponent(3,3,r),r=new Date(2e3,4,4,12,0,0,0),this.UpdateDateComponent(4,4,r),r=new Date(2e3,5,2,12,0,0,0),this.UpdateDateComponent(5,5,r),r=new Date(2e3,6,1,12,0,0,0),this.UpdateDateComponent(6,6,r),r=new Date(2e3,7,1,12,0,0,0),this.UpdateDateComponent(7,-1,r),r=new Date(2e3,8,1,12,0,0,0),this.UpdateDateComponent(8,-1,r),r=new Date(2e3,9,1,12,0,0,0),this.UpdateDateComponent(9,-1,r),r=new Date(2e3,10,1,12,0,0,0),this.UpdateDateComponent(10,-1,r),r=new Date(2e3,11,1,12,0,0,0),this.UpdateDateComponent(11,-1,r)}static UpdateDateComponent(e,t,r){t>=0&&(this.date_components.short_days[t]=r.toLocaleString(this.locale,{weekday:"short"}),this.date_components.long_days[t]=r.toLocaleString(this.locale,{weekday:"long"})),e>=0&&(this.date_components.short_months[e]=r.toLocaleString(this.locale,{month:"short"}),this.date_components.long_months[e]=r.toLocaleString(this.locale,{month:"long"}))}};z.UpdateLocale();var O=class c{constructor(e=0,t=0,r=0,i=0){this.left=e;this.top=t;this.width=r;this.height=i}get right(){return this.left+this.width}get bottom(){return this.top+this.height}static Create(e){return new c(e.left||0,e.top||0,e.width||0,e.height||0)}static IsRectangle(e){return 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 c(this.left+e,this.top+t,this.width,this.height)}Scale(e=1,t=e){return new c(this.left*e,this.top*t,this.width*e,this.height*t)}Expand(e=0,t=0){return new c(this.left,this.top,this.width+e,this.height+t)}Combine(e){return new c(Math.min(this.left,e.left),Math.min(this.top,e.top),Math.max(this.right,e.right)-Math.min(this.left,e.left),Math.max(this.bottom,e.bottom)-Math.min(this.top,e.top))}Contains(e,t,r=0){return e>=this.left-r&&e<=this.left+this.width+r&&t>=this.top-r&&t<=this.top+this.height+r}ContextFill(e){e.fillRect(this.left,this.top,this.width,this.height)}ContextStroke(e){e.strokeRect(this.left,this.top,this.width,this.height)}Clamp(e,t){return e=Math.min(Math.max(e,this.left),this.right),t=Math.min(Math.max(t,this.top),this.bottom),{x:e,y:t}}ApplyStyle(e){e.style.top=this.top+"px",e.style.left=this.left+"px",e.style.width=this.width+"px",e.style.height=this.height+"px"}toJSON(){return{top:this.top,left:this.left,width:this.width,height:this.height}}};var Bi=JSON.stringify({}),L={DefaultProperties:{horizontal_align:"",vertical_align:"",number_format:"General",nan:"NaN",font_size:{unit:"pt",value:10.5},font_face:"sans-serif",bold:!1,italic:!1,underline:!1,strike:!1,text:{theme:1},border_top:0,border_left:0,border_right:0,border_bottom:0},CompositeBorders:c=>({top:{width:c.border_top||0,color:c.border_top_fill||{}},left:{width:c.border_left||0,color:c.border_left_fill||{}},right:{width:c.border_right||0,color:c.border_right_fill||{}},bottom:{width:c.border_bottom||0,color:c.border_bottom_fill||{}}}),Merge:(c,e,t=!0)=>{let r=t?{...c,...e}:{...e};return JSON.parse(JSON.stringify(r))},Composite:c=>JSON.parse(JSON.stringify(c.reduce((e,t)=>({...e,...t}),{}))),Empty:c=>JSON.stringify(c)===Bi,ValidColor:c=>!!(c&&!c.none&&(c.text||c.theme||c.theme===0)),ParseFontSize:(c="",e="em")=>{let t=c.match(/(-*[\d.]+)\s*(\S*)/);if(t){let r=Number(t[1]);if(!r||isNaN(r)||r<0)return{};let i=t[2].toLowerCase()||e;if(i==="pt"||i==="em"||i==="%"||i==="px")return{font_size:{unit:i,value:r}}}return{}},RelativeFontSize:(c,e)=>{let t=12,r=12;switch(c.font_size?.unit){case"pt":if(!c.font_size.value)return 1;r=c.font_size.value;break;case"px":if(!c.font_size.value)return 1;r=Math.round(c.font_size.value*300/4)/100;break;case"em":return c.font_size.value||1;case"%":return(c.font_size.value||100)/100;default:return 1}switch(e.font_size?.unit){case"pt":if(!e.font_size.value)return 1;t=e.font_size.value;break;case"px":if(!e.font_size.value)return 1;t=Math.round(e.font_size.value*300/4)/100;break;default:return 1}return r/t},FontSize:(c,e=!0)=>{let t=c.font_size?.value;switch(c.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""},Font:(c,e=1)=>{let t=[];return c.bold&&t.push("bold"),c.italic&&t.push("italic"),t.push(((c.font_size?.value||0)*e).toFixed(2)+(c.font_size?.unit||"pt")),t.push(c.font_face||""),t.join(" ")}};var ir=c=>!!c&&Array.isArray(c)&&Array.isArray(c[0]),J=(c,e)=>(typeof e>"u"&&(e=ae(c)),{value:c,type:e}),ce=c=>c.imaginary?{type:7,value:c}:{type:3,value:c.real};var Z={Darken:(c,e,t,r,i=!1)=>{let{h:o,s:n,l:a}=Z.RGBToHSL(c,e,t);return i?a-=a*r/100:a-=r/100,a=Math.max(0,Math.min(1,a)),Z.HSLToRGB(o,n,a)},Lighten:(c,e,t,r,i=!1)=>{let{h:o,s:n,l:a}=Z.RGBToHSL(c,e,t);return i?a+=a*r/100:a+=r/100,a=Math.max(0,Math.min(1,a)),Z.HSLToRGB(o,n,a)},RGBToHSL:(c,e,t)=>{c/=255,e/=255,t/=255;let r=Math.max(c,e,t),i=Math.min(c,e,t),o=0,n=0,a=(r+i)/2;if(r===i)o=n=0;else{let s=r-i;switch(n=a>.5?s/(2-r-i):s/(r+i),r){case c:o=(e-t)/s+(e<t?6:0);break;case e:o=(t-c)/s+2;break;case t:o=(c-e)/s+4;break}o/=6}return{h:o*360,s:n,l:a}},HSLToRGB:(c,e,t)=>{let r,i,o;if(e===0)r=i=o=t;else{c=c/360;let n=t<.5?t*(1+e):t+e-t*e,a=2*t-n;r=Z.HueToRGB(a,n,c+.3333333333333333),i=Z.HueToRGB(a,n,c),o=Z.HueToRGB(a,n,c-.3333333333333333)}return{r:Math.round(r*255),g:Math.round(i*255),b:Math.round(o*255)}},HueToRGB:(c,e,t)=>(t<0&&(t+=1),t>1&&(t-=1),t<.16666666666666666?c+(e-c)*6*t:t<.5?e:t<.6666666666666666?c+(e-c)*(.6666666666666666-t)*6:c)};var $i="http://www.w3.org/2000/svg",F=class c{static instances=[];static GetInstance(e){for(let r of this.instances)if(r.doc===e)return r;let t=new c(e);return this.instances.push(t),t}doc;view;get HTMLElement(){return this.view?.HTMLElement}constructor(e){e&&(this.doc=e,this.view=e?.defaultView)}GetSelection(){return this.view?.getSelection()}Div(e,t,r){return this.Create("div",e,t,r)}ClassNames(e,t){e.classList.add(...(Array.isArray(t)?t:[t]).reduce((r,i)=>[...r,...i.split(/\s+/g)],[]))}SVG(e,t,r){let i=this.doc.createElementNS($i,e);return t&&this.ClassNames(i,t),r&&r.appendChild(i),i}Text(e){return this.doc.createTextNode(e)}Fragment(){return this.doc.createDocumentFragment()}Create(e,t,r,i){let o=this.doc.createElement(e);if(t&&this.ClassNames(o,t),i){if(i.attrs)for(let[n,a]of Object.entries(i.attrs))o.setAttribute(n,a);if(i.data)for(let[n,a]of Object.entries(i.data))o.dataset[n]=a;if(i.text&&(o.textContent=i.text),i.html&&(o.innerHTML=i.html),i.events)for(let[n,a]of Object.entries(i.events))o.addEventListener(n,a);if(i.style)for(let[n,a]of Object.entries(i.style))o.style[n]=a}return r&&r.appendChild(o),o}};var ut={grid_color:"#ccc",note_marker_color:"#d2c500",mode:"light",offset_cache:{},offset_light:"#fff",offset_dark:"#000"},pe=(c,e)=>E(c,e,0),ji=(c,e,t)=>{c.mode==="dark"&&(t=-t),c.tint_cache||(c.tint_cache=[]),c.tint_cache[e]||(c.tint_cache[e]={});let r=c.tint_cache[e][t];if(!r){let i=(c.theme_colors_rgb?c.theme_colors_rgb[e]:[0,0,0])||[0,0,0],o;t>0?o=Z.Lighten(i[0],i[1],i[2],t*100,!0):o=Z.Darken(i[0],i[1],i[2],-t*100,!0),r=`rgb(${o.r},${o.g},${o.b})`,c.tint_cache[e][t]=r}return r},E=(c,e,t)=>{if(e?.offset){if(e.offset.offset)return console.warn("invalid offset color"),"";let r=E(c,e.offset);if(c.offset_cache&&c.offset_cache[r])return c.offset_cache[r];let i=c.offset_light;if(r){let o=r.match(/rgb\((\d+), (\d+), (\d+)\)/);o?Z.RGBToHSL(Number(o[1]),Number(o[2]),Number(o[3])).l>.65&&(i=c.offset_dark):console.warn("can't offset against color",r),c.offset_cache||(c.offset_cache={}),c.offset_cache[r]=i}else console.warn("can't resolve offset color",e.offset);return i}return e?.text?e.text==="none"?"":e.text:e?.theme||e?.theme===0?e.tint?ji(c,e.theme,e.tint):c.theme_colors?c.theme_colors[e.theme]:"":(t||t===0)&&c.theme_colors?c.theme_colors[t]:""},qi=c=>{let e=10,t="pt",r=c.match(/^([\d.]+)(\D.*)$/);return r&&(e=Number(r[1]),t=r[2]),{value:e,unit:t}},Hr=c=>{let{value:e,unit:t}=qi(c.fontSize||""),r={fill:{text:c.backgroundColor},text:{text:c.color},font_size:{unit:t,value:e},font_face:c.fontFamily};return/italic/i.test(c.font)&&(r.italic=!0),c.fontWeight==="700"&&(r.bold=!0),r},Ji=(c,e)=>{let t=c.grid_cell?.text,r=c.grid_cell?.fill;e.fillStyle=t?.text||"",e.fillRect(0,0,3,3);let i=Z.RGBToHSL(...Array.from(e.getImageData(1,1,1,1).data));e.fillStyle=r?.text||"",e.fillRect(0,0,3,3);let o=Z.RGBToHSL(...Array.from(e.getImageData(1,1,1,1).data));return i.l>o.l?"dark":"light"},ht=(c,e=.7)=>{let t={border_top:1,border_top_fill:{theme:c},border_bottom:1,border_bottom_fill:{theme:c}};return{header:{text:{offset:{theme:c}},fill:{theme:c},bold:!0,...t},odd:{fill:{theme:c,tint:e},...t},even:{...t},total:{...t,border_top:2}}},Nr=c=>{let e=JSON.parse(JSON.stringify(ut)),t=F.GetInstance(c.ownerDocument),r=(u,h)=>t.Div(h,u),i=(u,h)=>t.view?.getComputedStyle(r(u,h)),o=r(c,""),n=i.bind(0,o),a=n("grid-cells");e.grid_cell=Hr(a),e.grid_color=a.stroke||"",a=n("grid-headers"),e.headers=Hr(a),e.headers_grid_color=a.stroke,(!e.headers_grid_color||e.headers_grid_color==="none")&&(e.headers_grid_color=e.grid_color),a=n("treb-offset-dark"),a.color&&(e.offset_dark=a.color),a=n("treb-offset-light"),a.color&&(e.offset_light=a.color),a=n("note-marker"),e.note_marker_color=a.backgroundColor,o.style.color="rgba(1,2,3,.4)",a=n("");let s=a.color;e.theme_colors=[e.grid_cell.fill?.text||"rgb(255, 255, 255)",e.grid_cell.text?.text||"rgb(51, 51, 51)"];for(let u=1;u<32&&(a=n(`theme-color-${u}`),!(!a.color||a.color===s));u++)e.theme_colors.push(a.color);let l=t.Create("canvas");l.width=3,l.height=3;let d=l.getContext("2d",{willReadFrequently:!0});return d&&(e.mode=Ji(e,d)),d&&(e.theme_colors_rgb=e.theme_colors.map(u=>{d.fillStyle=u,d.fillRect(0,0,3,3);let h=d.getImageData(1,1,1,1);return Array.from(h.data)})),e.table=ht(4),o.parentElement?.removeChild(o),e};var Pr={column:0,type:"auto",asc:!0};var Wi=1e3,se=class{constructor(e=!1,t){this.verbose=e;this.log_id=t}queue=[];dispatched=!1;subscribers=[];Publish(e){this.verbose&&console.info(`es publish (${this.log_id})`,e),Array.isArray(e)?this.queue.push(...e):this.queue.push(e),this.dispatched||(this.dispatched=!0,Promise.resolve().then(()=>{let t=this.queue.slice(0);this.dispatched=!1,this.queue=[];for(let r of t)for(let i of this.subscribers)i.subscriber(r)}))}Subscribe(e){let t=Wi++;return this.subscribers.push({subscriber:e,token:t}),t}Cancel(e){this.subscribers=this.subscribers.filter(t=>t.token!==e)}CancelAll(){this.subscribers=[]}};var de=class{static color_measurement_canvas;static text_measurement_node;static color_cache={};static MeasureColorARGB(e){let t=this.MeasureColor(e),r="FF";for(let i=0;i<3;i++){let o=t[i].toString(16);o.length===0?r+="00":o.length===1?r+=`0${o}`:r+=o}return r.toUpperCase()}static MeasureColor(e){let t=this.color_cache[e];if(t)return t;this.color_measurement_canvas||(this.color_measurement_canvas=document.createElement("canvas"),this.color_measurement_canvas.width=1,this.color_measurement_canvas.height=1);let r=this.color_measurement_canvas.getContext("2d",{willReadFrequently:!0});return r?(r.fillStyle="#fff",r.fillRect(0,0,1,1),r.fillStyle=e,r.fillRect(0,0,1,1),t=new Uint8ClampedArray(r.getImageData(0,0,1,1).data),this.color_cache[e]=t,t):new Uint8ClampedArray(3)}static EnsureMeasurementNode(){if(!this.text_measurement_node){let e=document.querySelector(".treb-chart-measurement-node");e?this.text_measurement_node=e:(this.text_measurement_node=document.createElement("div"),this.text_measurement_node.classList.add("treb-chart-measurement-node"),this.text_measurement_node.style.margin="0px",this.text_measurement_node.style.padding="0px",this.text_measurement_node.style.height="initial",this.text_measurement_node.style.width="initial",this.text_measurement_node.style.whiteSpace="nowrap",this.text_measurement_node.style.position="fixed",this.text_measurement_node.style.border="0px",this.text_measurement_node.style.border="1px solid red",this.text_measurement_node.style.boxSizing="content-box",this.text_measurement_node.style.top=this.text_measurement_node.style.left="-1000px",document.body.appendChild(this.text_measurement_node))}}static MeasureText(e,t,r=0){this.EnsureMeasurementNode(),this.text_measurement_node.style.font=e,/\n/.test(t)?(t=t.replace(/\n/g,"<BR/>"),this.text_measurement_node.innerHTML=t):this.text_measurement_node.textContent=t,this.text_measurement_node.style.lineHeight="1em",r?this.text_measurement_node.style.transform=`rotate(${r}deg)`:this.text_measurement_node.style.transform="";let i=this.text_measurement_node.getBoundingClientRect();return{width:i.width,height:i.height}}};var or,Xi=(c,e,t)=>{let r={};return Array.prototype.forEach.call(e,i=>{e[i]!==t[i]&&(r[i]=e[i])}),(Object.keys(r).map(i=>`${i}: ${r[i]}`).join("; ")+"; "+(c.getAttribute("style")||"")).trim().replace(/"/g,"'")},Or=(c,e)=>{let t=c.cloneNode(!1),r=getComputedStyle(c),i=Xi(c,r,e);return t.removeAttribute("class"),t.setAttribute("style",i),Array.prototype.forEach.call(c.childNodes,o=>{switch(o.nodeType){case Node.ELEMENT_NODE:t.appendChild(Or(o,r));break;case Node.TEXT_NODE:c.textContent&&t.appendChild(document.createTextNode(c.textContent));break;case Node.COMMENT_NODE:break;default:console.warn("unhandled node type in serialize",o)}}),t},Gr=c=>{if(!or){let e={},t=document.createElement("iframe");t.style.width="10px",t.style.height="10px",t.style.position="absolute",t.style.left="-100px",document.body.appendChild(t);let r=t.contentDocument;if(r){let i=r.createElement("div");r.body.appendChild(i);let o=getComputedStyle(i);Array.prototype.forEach.call(o,n=>e[n]=o[n])}document.body.removeChild(t),or=e}return Or(c,or)};var Ki={data:!0,same_origin:!0,remote:!1},mt=(c,e={})=>{let t={...Ki,...e};try{let r=new URL(c,document.location.href);return r.protocol==="data:"?t.data?r.href:void 0:r.origin===document.location.origin?t.same_origin?r.href:void 0:t.remote?r.hash:void 0}catch(r){console.error(r)}};var Br=(c,e,t=6.5,r=!1,i=!1)=>{if(e===c)e++,c&&c--;else{let u=Math.round(e*1e5)/1e5;Math.abs(u-e)/(e-c)<1e-5&&(e=u)}let o=e-c,n=Math.log(o)/Math.log(10),a=Math.floor(Math.abs(n))*(n<0?-1:1)-1;i&&(a=Math.max(0,a));let s=i?[1,2,5,10,15,20,25,50,100]:[.1,.25,.5,1,2.5,5,10,25,50,100],l=-1,d=0;for(let u of s){let h=u*Math.pow(10,a),m=Math.floor(c/h)*h,p=(Math.ceil(e/h)*h-m)/h,_=Math.abs(p-t);(l<0||_<d)&&(!r||p<=t)&&(d=_,l=h)}return c=Math.floor(c/l)*l,e=Math.ceil(e/l)*l,t=Math.round((e-c)/l),{scale:a,step:l,count:t,min:c,max:e}};var ft=class{constructor(e,t,r="HSL"){this.color_space=r;this.mapped=e.map(i=>{if(i.value<0||i.value>1)throw new Error("invalid stop value");let o=de.MeasureColor(E(t,i.color)),n=[];if(r==="HSL"){let a=Z.RGBToHSL(o[0],o[1],o[2]);n=[a.h,a.s,a.l]}else n=[...o];return{...i,resolved:n}}),this.mapped.sort((i,o)=>i.value-o.value),this.mapped[0].value>0&&this.mapped.unshift({...this.mapped[0],value:0}),this.mapped[this.mapped.length-1].value<1&&this.mapped.push({...this.mapped[this.mapped.length-1],value:1})}mapped;RenderColor(e){return this.color_space==="RGB"?{text:`rgb(${e})`}:{text:`hsl(${e[0]},${e[1]*100}%,${e[2]*100}%)`}}Interpolate(e){e=Math.min(1,Math.max(0,e));for(let[t,r]of this.mapped.entries()){if(e===r.value)return this.RenderColor(r.resolved);if(e<r.value){let i=this.mapped[t-1],o=r,n=o.value-i.value,a=e-i.value,s=[0,1,2].map(l=>i.resolved[l]+(o.resolved[l]-i.resolved[l])/n*a);return this.RenderColor(s)}}return{text:""}}};var ze=/[\s-+=<>!()]/,Wr=/['*\\]/,nr=34,ar=39,Zi=160,$r=32,Qi=9,Yi=10,eo=13,ye=48,We=57,sr=46,lr=43,Xe=45,jr=40,cr=41,Ke=44,to=37,dr=95,pt=36,ro=123,io=125,Ze=91,qr=93,oo=33,Jr=59,no=35,ao=64,Ne=65,Qe=97,so=69,lo=101,bt=90,_t=122,co=105;var ur=192,hr=312,mr={"==":6,"!=":6,"<>":6,"=":6,"<":7,">":7,"<=":7,">=":7,"+":9,"-":9,"&":9,"*":10,"/":10,"^":11,":":13},uo=Object.keys(mr).sort((c,e)=>e.length-c.length),ho={"-":100,"+":100},Pe=class{argument_separator=",";decimal_mark=".";flags={spreadsheet_semantics:!0,dimensioned_quantities:!1,fractions:!0};r1c1_regex=/[rR]((?:\[[-+]{0,1}\d+\]|\d+))[cC]((?:\[[-+]{0,1}\d+\]|\d+))$/;argument_separator_char=Ke;decimal_mark_char=sr;imaginary_char=co;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=[];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":t(e)&&e.elements.forEach(r=>this.Walk(r,t));return;case"call":t(e)&&e.args.forEach(r=>this.Walk(r,t))}}Transpose(e){let t=e.length,r=[],i=0;for(let o=0;o<t;o++)Array.isArray(e[o])&&(i=Math.max(i,e[o].length));for(let o=0;o<i;o++){r[o]=[];for(let n=0;n<t;n++)r[o][n]=e[n][o]}return r}Render(e,t={}){let r=t.offset||{rows:0,columns:0},i=t.missing??"(missing)",{convert_decimal:o,convert_argument_separator:n,convert_imaginary_number:a,long_structured_references:s,table_name:l}=t,d=this.argument_separator+" ";n===","?d=", ":n===";"&&(d="; ");let u=this.imaginary_number;a&&(u=a);let h=o===","?",":".",m=this.decimal_mark===","?/,/:/\./,f=this.decimal_mark===","?/,/g:/\./g;switch(e.type){case"address":return this.AddressLabel(e,r);case"range":return this.AddressLabel(e.start,r)+":"+this.AddressLabel(e.end,r);case"missing":return i;case"array":return"{"+this.Transpose(e.values).map(p=>p.map(_=>typeof _=="string"?'"'+_+'"':_).join(", ")).join("; ")+"}";case"binary":return this.Render(e.left,t)+" "+e.operator+" "+this.Render(e.right,t);case"unary":return e.operator+this.Render(e.operand,t);case"complex":if(e.text)return o?e.text.replace(f,h):e.text;{let p=Math.abs(e.imaginary).toString();if((o===","||this.decimal_mark===",")&&(p=p.replace(/\./,",")),e.real){let _=e.real.toString();(o===","||this.decimal_mark===",")&&(_=_.replace(/\./,","));let b=Math.abs(e.imaginary);return`${_}${e.imaginary<0?" - ":" + "}${b===1?"":p}i`}else return e.imaginary===-1?"-i":e.imaginary===1?"i":`${e.imaginary<0?"-":""}${p}i`}break;case"literal":if(typeof e.value=="string")return'"'+e.value.replace(/"/g,'""')+'"';if(o&&typeof e.value=="number")if(e.text){let p=e.text;return o===","&&this.decimal_mark==="."&&(p=p.replace(/,/g,"")),p.replace(m,h)}else return e.value.toString().replace(/\./,h);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(p=>this.Render(p,t)).join(d)+")":e.elements.map(p=>this.Render(p,t)).join(d);case"call":return e.name+"("+e.args.map(p=>this.Render(p,t)).join(d)+")";case"dimensioned":return this.Render(e.expression)+" "+this.Render(e.unit);case"structured-reference":{let p=e.column;/[^A-Za-z]/.test(p)&&(p="["+p+"]");let _=e.table;switch(!_&&s&&l&&(_=l),e.scope){case"all":return`${_}[[#all],${p}]`;case"row":return s?`${_}[[#this row],${p}]`:`${_}[@${p}]`;case"column":return`${_}[${p}]`}throw new Error("unhandled scope in structured reference")}}return"??"}Parse(e){switch(e=e.trim(),e[0]==="="&&(e=e.substr(1).trim()),this.expression=e,this.data=[],this.length=e.length,this.index=0,this.valid=!0,this.error_position=void 0,this.error=void 0,this.dependencies.addresses={},this.dependencies.ranges={},this.address_refcount={},this.full_reference_list=[],this.id_counter=0,this.argument_separator){case";":this.argument_separator_char=Jr;break;default:this.argument_separator_char=Ke;break}switch(this.decimal_mark){case",":this.decimal_mark_char=Ke;break;default:this.decimal_mark_char=sr;break}for(let i=0;i<this.length;i++)this.data[i]=e.charCodeAt(i);let t=this.ParseGeneric(),r={};for(let i of Object.keys(this.dependencies.addresses))this.address_refcount[i]&&(r[i]=this.dependencies.addresses[i]);return this.dependencies.addresses=r,{expression:t||void 0,valid:this.valid,error:this.error,error_position:this.error_position,dependencies:this.dependencies,separator:this.argument_separator,decimal_mark:this.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}AddressLabel(e,t){let r=e.column;!e.absolute_column&&e.column!==1/0&&(r+=t.columns);let i=e.row;if(!e.absolute_row&&e.row!==1/0&&(i+=t.rows),i<0||r<0||i===1/0&&r===1/0)return"#REF";let o="";return e.sheet&&(o=(ze.test(e.sheet)?"'"+e.sheet+"'":e.sheet)+"!"),i===1/0?o+(e.absolute_column?"$":"")+this.ColumnLabel(r):r===1/0?o+(e.absolute_row?"$":"")+(i+1):o+(e.absolute_column?"$":"")+this.ColumnLabel(r)+(e.absolute_row?"$":"")+(i+1)}ParseGeneric(e=[0]){let t=[];for(;this.index<this.length;){let r=this.ParseNext(t.length===0);if(typeof r=="number"){if(e.some(i=>r===i))break;if(r===jr){this.index++;let i=this.ParseGeneric([cr]);this.index++,i&&t.push({type:"group",id:this.id_counter++,elements:[i],explicit:!0})}else{let i=this.ConsumeOperator();i?t.push(i):(this.error=`unexpected character [1]: ${String.fromCharCode(r)}, 0x${r.toString(16)}`,this.valid=!1,this.index++)}}else t.push(r)}if(t.length){if(t=this.BinaryToRange2(t),this.flags.fractions){let r=[],i=n=>n.type==="literal"&&typeof n.value=="number"&&n.value%1===0,o=0;for(;o<t.length-3;o++)if(i(t[o])&&i(t[o+1])&&t[o+2].type==="operator"&&t[o+2].operator==="/"&&i(t[o+3])){let n=t[o],a=t[o+1],s=t[o+3],l=(n.value<0?-1:1)*(a.value/s.value);o+=3,r.push({id:t[o].id,type:"literal",text:this.expression.substring(n.position,s.position+1),value:n.value+l,position:n.position})}else r.push(t[o]);for(;o<t.length;o++)r.push(t[o]);t=r}if(t=t.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=[],i;for(let o=0;o<t.length;o++){let n=t[o];if(!i)i=n;else if(n.type==="identifier"&&(i.type==="literal"||i.type==="group"||i.type==="call")){let a=n;for(;t[o+1]?.type==="identifier";)a.name+=" "+t[++o].name;r.push({type:"dimensioned",expression:i,unit:n,id:this.id_counter++}),i=void 0}else r.push(i),i=n}i&&r.push(i),t=r}}return t.length===0?null:t.length===1?t[0]:this.BinaryToComplex(this.ArrangeUnits(t))}UnitToAddress(e){if(e.type==="literal"){if(typeof e.value=="number"&&e.value>0&&!/\./.test(e.text||""))return{type:"address",position:e.position,label:e.value.toString(),row:e.value-1,id:this.id_counter++,column:1/0}}else{let t,r=e.name,i=r.split("!");if(i.length>1&&(t=i.slice(0,i.length-1).join("!"),r=r.substr(t.length+1),t[0]==="'"))if(t.length>1&&t[t.length-1]==="'")t=t.substr(1,t.length-2);else return;let o=r[0]==="$";r=(o?r.substr(1):r).toUpperCase();let n=Number(r);if(isNaN(n)){if(/[A-Z]{1,3}/.test(r)){let a=-1;for(let s=0;s<r.length;s++){let l=r[s].charCodeAt(0);a=26*(1+a)+(l-Ne)}return{type:"address",position:e.position,absolute_column:o,label:e.name,column:a,id:this.id_counter++,row:1/0,sheet:t}}}else if(n>0&&n!==1/0&&!/\./.test(r))return{type:"address",position:e.position,absolute_row:o,label:e.name,row:n-1,id:this.id_counter++,column:1/0,sheet:t}}}BinaryToRange2(e){let t=[];for(let r=0;r<e.length;r++){let i=e[r],o=e[r+1],n=e[r+2],a,s="",l;if(i&&o&&n&&o.type==="operator"&&o.operator===":"){if(i.type==="address"&&n.type==="address"){let d=i.position+i.label.length,u=n.position;a={type:"range",id:this.id_counter++,position:i.position,start:i,end:n,label:i.label+this.expression.substring(d,u)+n.label},s=a.start.label+":"+a.end.label,this.address_refcount[a.start.label]--,this.address_refcount[a.end.label]--;let h=[i.position,n.position];this.full_reference_list=this.full_reference_list.filter(m=>m.position!==h[0]&&m.position!==h[1])}else if((i.type==="literal"||i.type==="identifier")&&(n.type==="literal"||n.type==="identifier")){let d=this.UnitToAddress(i);if(!d&&i.type==="literal"&&typeof i.value=="number"&&i.value<0){let h={...i,text:(i.text||"").replace(/^-/,""),position:i.position+1,value:-i.value};d=this.UnitToAddress(h),d&&(l={type:"operator",operator:"-",position:i.position,id:this.id_counter++})}let u=this.UnitToAddress(n);d&&u&&(d.column===1/0&&u.column===1/0||d.row===1/0&&u.row===1/0)&&(s=d.label+":"+u.label,a={type:"range",id:this.id_counter++,position:d.position,start:d,end:u,label:s})}}a?(l&&t.push(l),t.push(a),this.dependencies.ranges[s]=a,this.full_reference_list.push(a),r+=2):t.push(i)}return t}BinaryToComplex(e){if(e.type==="binary")if((e.operator==="+"||e.operator==="-")&&e.left.type==="literal"&&typeof e.left.value=="number"&&e.right.type==="complex"&&!e.right.composited){let t="";t=this.expression.substring(e.left.position,e.right.position+(e.right.text?.length||0));let r=e.right.imaginary;return e.operator==="-"&&(r=-r),{type:"complex",position:e.left.position,text:t,id:this.id_counter++,imaginary:r,real:e.left.value,composited:!0}}else e.left=this.BinaryToComplex(e.left),e.right=this.BinaryToComplex(e.right);else if(e.type==="unary"&&(e.operator==="-"||e.operator==="+")&&e.operand.type==="complex"&&e.operand.text===this.imaginary_number)return{...e.operand,position:e.position,text:this.expression.substring(e.position,e.operand.position+(e.operand.text||"").length),imaginary:e.operand.imaginary*(e.operator==="-"?-1:1)};return e}BinaryToRangeX(e){if(e.type==="binary"){if(e.operator===":"){let t,r="";if(e.left.type==="address"&&e.right.type==="address"){let i=e.left.position+e.left.label.length,o=e.right.position;t={type:"range",id:this.id_counter++,position:e.left.position,start:e.left,end:e.right,label:e.left.label+this.expression.substring(i,o)+e.right.label},r=t.start.label+":"+t.end.label,this.address_refcount[t.start.label]--,this.address_refcount[t.end.label]--;let n=[e.left.position,e.right.position];this.full_reference_list=this.full_reference_list.filter(a=>a.position!==n[0]&&a.position!==n[1])}else if((e.left.type==="literal"||e.left.type==="identifier")&&(e.right.type==="literal"||e.right.type==="identifier")){let i=this.UnitToAddress(e.left),o=this.UnitToAddress(e.right);i&&o&&(i.column===1/0&&o.column===1/0||i.row===1/0&&o.row===1/0)&&(r=i.label+":"+o.label,t={type:"range",id:this.id_counter++,position:e.left.position,start:i,end:o,label:r})}if(t)return this.dependencies.ranges[r]=t,this.full_reference_list.push(t),t;this.error="unexpected character: :",this.valid=!1}e.left=this.BinaryToRangeX(e.left),e.right=this.BinaryToRangeX(e.right)}return e}ArrangeUnits(e){if(e.length===0)return{type:"missing",id:this.id_counter++};if(e.length===1)return e[0];let t=[];for(let r=0;r<e.length;r++){let i=e[r];if(i.type==="operator")if(t.length===0||t[t.length-1].type==="operator")if(ho[i.operator]){let o=this.BinaryToComplex(this.ArrangeUnits(e.slice(r+1)));if(!this.valid)return{type:"group",id:this.id_counter++,elements:e,explicit:!1};o.type==="binary"?(o.left={type:"unary",id:this.id_counter++,operator:i.operator,operand:o.left,position:i.position},i=o):i={type:"unary",id:this.id_counter++,operator:i.operator,operand:o,position:i.position},r=e.length}else return this.error=`unexpected character [2]: ${i.operator}`,this.error_position=i.position,this.valid=!1,{type:"group",id:this.id_counter++,elements:e,explicit:!1};else{t.push(i);continue}if(t.length<2)t.push(i);else if(t[t.length-1].type==="operator"){let o=t[t.length-2],n=t[t.length-1],a=n.operator,s={type:"binary",id:this.id_counter++,left:o,operator:a,position:n.position,right:i};o.type==="binary"&&mr[a]>mr[o.operator]&&(s.left=o.left,s.operator=o.operator,s.position=o.position,s.right={type:"binary",id:this.id_counter++,left:o.right,right:i,operator:a,position:n.position}),t.splice(-2,2,s)}else return this.error="multiple expressions",this.error_position=i.position,this.valid=!1,{type:"group",id:this.id_counter++,elements:e,explicit:!1}}return t[0]}ParseNext(e=!0){this.ConsumeWhiteSpace();let t=this.data[this.index];if(t===nr)return{type:"literal",id:this.id_counter++,position:this.index,value:this.ConsumeString()};if(t>=ye&&t<=We||t===this.decimal_mark_char)return this.ConsumeNumber();if(t===ro)return this.ConsumeArray();if(e&&(t===Xe||t===lr)){let r=this.data[this.index+1];if(r>=ye&&r<=We||r===this.decimal_mark_char)return this.ConsumeNumber()}else if(t>=Ne&&t<=bt||t>=Qe&&t<=_t||t===dr||t===no||t===ar||t===pt||t===Ze||t>=ur&&t<=hr)return this.ConsumeToken(t);return t}ConsumeArray(){let e={type:"array",id:this.id_counter++,values:[],position:this.index};this.index++;let t=0,r=0;for(;this.index<this.length;){let i=this.ParseNext(),o=this.index;if(typeof i=="number")switch(this.index++,i){case Jr:r++,t=0;break;case Ke:t++;break;case io:return e;default:this.valid&&(this.error="invalid character in array literal",this.error_position=o,this.valid=!1);break}else switch(i.type){case"literal":e.values[t]||(e.values[t]=[]),e.values[t][r]=i.value;break;default:this.valid&&(this.error="invalid value in array literal",this.error_position=o,this.valid=!1);break}}return e}ConsumeOperator(){for(let e of uo)if(this.expression.substr(this.index,e.length)===e){let t=this.index;return this.index+=e.length,{type:"operator",id:this.id_counter++,operator:e,position:t}}return null}ConsumeArguments(){this.index++;let e=0,t=[];for(;this.index<this.length;){let r=this.ParseGeneric([this.argument_separator_char,cr]);r!==null&&t.push(r);let i=this.data[this.index];if(i===this.argument_separator_char){this.index++,e++;for(let o=t.length;o<e;o++)t.push({type:"missing",id:this.id_counter++})}else if(i===cr)return this.index++,t}return t}ConsumeToken(e){let t=[e],r=this.index,i=e===ar,o=0,n=!1;for(e===Ze&&(o=1,n=!0),++this.index;this.index<this.length;this.index++){let d=this.data[this.index];if(d>=Ne&&d<=bt||d>=Qe&&d<=_t||d>=ur&&d<=hr||d===dr||d===pt||d===sr||d===oo||i||d>=ye&&d<=We||d===Ze||o>0&&d===qr||d===Xe&&this.flags.r1c1&&o===1||o>0&&d===ao&&this.data[this.index-1]===Ze||o===1&&(d===Ke||d===$r)||o>1)t.push(d),d===Ze&&(o++,n=!0),d===qr&&o--,d===ar&&(i=!1);else break}let a=t.map(d=>String.fromCharCode(d)).join("");if(i)return this.error="unbalanced single quote",this.error_position=r,this.valid=!1,{type:"identifier",id:this.id_counter++,name:a,position:r};if(o)return this.error="unbalanced square bracket",this.error_position=r,this.valid=!1,{type:"identifier",id:this.id_counter++,name:a,position:r};if(a.toLowerCase()==="true")return{type:"literal",id:this.id_counter++,value:!0,position:r};if(a.toLowerCase()==="false")return{type:"literal",id:this.id_counter++,value:!1,position:r};if(this.ConsumeWhiteSpace(),this.data[this.index]===jr){let d=this.ConsumeArguments();return{type:"call",id:this.id_counter++,name:a,args:d,position:r}}if(this.flags.spreadsheet_semantics){let d=this.ConsumeAddress(a,r);if(d)return d;if(n){let u=this.ConsumeStructuredReference(a,r);if(u)return u}}let l={type:"identifier",id:this.id_counter++,name:a,position:r};return this.full_reference_list.push(l),l}ConsumeStructuredReference(e,t){let r=t,i=e.length,o=e,n="",a=0;for(;a<i;a++){if(e[a]==="["){e=e.substring(a);break}n+=e[a]}if(e[0]!=="["||e[e.length-1]!=="]")return;e=e.substring(1,e.length-1);let s=e.split(",").map(h=>h.trim()),l="column",d="";if(s.length>2)return;s.length===2?(/\[#this row\]/i.test(s[0])?l="row":/\[#all\]/i.test(s[0])&&(l="all"),d=s[1]):(d=s[0],d[0]==="@"&&(l="row",d=d.substring(1,d.length))),d[0]==="["&&d[d.length-1]==="]"&&(d=d.substring(1,d.length-1));let u={type:"structured-reference",id:this.id_counter++,label:o,position:t,scope:l,column:d,table:n};return this.full_reference_list.push(u),u}ConsumeAddress(e,t){let r=t,i=e.length,o,n=e.split("!");if(n.length>1&&(o=n.slice(0,n.length-1).join("!"),t+=o.length+1),this.flags.r1c1){let u=n[n.length-1].match(this.r1c1_regex);if(u){let h={type:"address",id:this.id_counter++,label:e,row:0,column:0,position:r,sheet:o,r1c1:!0};return u[1][0]==="["?(h.offset_row=!0,h.row=Number(u[1].substring(1,u[1].length-1))):h.row=Number(u[1])-1,u[2][0]==="["?(h.offset_column=!0,h.column=Number(u[2].substring(1,u[2].length-1))):h.column=Number(u[2])-1,h}}let a=this.ConsumeAddressColumn(t);if(!a)return null;t=a.position;let s=this.ConsumeAddressRow(t);if(!s)return null;t=s.position;let l=o?o+e.substr(o.length,t-r).toUpperCase():e.substr(0,t-r).toUpperCase();o&&o[0]==="'"&&(o=o.substr(1,o.length-2));let d={type:"address",id:this.id_counter++,label:l,row:s.row,column:a.column,absolute_row:s.absolute,absolute_column:a.absolute,position:r,sheet:o};return i!==t-r?null:(this.dependencies.addresses[d.label]=d,this.address_refcount[d.label]=(this.address_refcount[d.label]||0)+1,this.full_reference_list.push(d),d)}ConsumeAddressRow(e){let t=this.data[e]===pt;t&&e++;let r=e,i=0;for(;;e++){let o=this.data[e];if(o>=ye&&o<=We)i*=10,i+=o-ye;else break}return r===e?!1:{absolute:t,row:i-1,position:e}}ConsumeAddressColumn(e){let t=-1,r=0,i=this.data[e]===pt;for(i&&e++;;e++,r++){if(r>=4)return!1;let o=this.data[e];if(o>=Ne&&o<=bt)t=26*(1+t)+(o-Ne);else if(o>=Qe&&o<=_t)t=26*(1+t)+(o-Qe);else break}return t<0?!1:{absolute:i,column:t,position:e}}ConsumeNumber(){let e=this.index,t=0,r=!1,i=!1,o=0,n=0,a=0,s="integer",l=0,d=!1,u=this.index;for(;this.index<this.length;this.index++,l++){let m=this.data[this.index];if(m===this.decimal_mark_char)if(s==="integer")s="fraction";else break;else if(m===to){o/=100,a/=100,this.index++;break}else if(m===lr||m===Xe)if(l===0)m===Xe&&(i=!0);else break;else if(m===so||m===lo)if(s==="integer"||s==="fraction")s="exponent",this.index<this.length-1&&(this.data[this.index+1]===lr?this.index++:this.data[this.index+1]===Xe&&(this.index++,r=!0));else break;else if(m===this.imaginary_char){let f=this.data[this.index+1];if(f>=Ne&&f<=bt||f>=Qe&&f<=_t||f>=ur&&f<=hr||f===dr)break;if(s==="integer"||s==="fraction"){this.index++,d=!0;break}}else if(m>=ye&&m<=We)switch(s){case"integer":o=o*10+(m-ye);break;case"fraction":a=a*10+(m-ye),n++;break;case"exponent":t=t*10+(m-ye);break}else break}let h=o+a/Math.pow(10,n);return s==="exponent"&&(h=h*Math.pow(10,(r?-1:1)*t)),d?{type:"complex",id:this.id_counter++,position:e,imaginary:i?-h:h,real:0,text:this.expression.substring(u,this.index)||""}:{type:"literal",id:this.id_counter++,position:e,value:i?-h:h,text:this.expression.substring(u,this.index)||""}}ConsumeString(){this.index++;let e=[];for(;this.index<this.length;this.index++){let t=this.data[this.index];if(t===nr&&(this.index++,this.index>=this.length||this.data[this.index]!==nr))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===$r||e===Qi||e===Yi||e===eo||e===Zi)this.index++;else return}}};var Xr=(c,e=",")=>{let t=0,r=[],i="",o=[],n=c.length;if(/[\r\n"]/.test(e))throw new Error("invalid delimiter");for(let a=0;a<n;a++){let s=c[a];if(!(a===0&&s.charCodeAt(0)===65279))if(t===0)switch(s){case e:r.push(i),i="";break;case"\r":break;case`
|
|
3
3
|
`:r.push(i),i="",o.push(r),r=[];break;case'"':i.length===0?t=1:i+=s;break;default:i+=s;break}else s==='"'?a+1<n&&c[a+1]==='"'?(i+='"',a++):t=0:i+=s}return(r.length||i.length)&&(r.push(i),o.push(r)),o};var Ee=class c{static _instance=new c;constructor(){}static get instance(){return this._instance}HTML(e){let t=[];for(let r of e){let i=[];for(let o of r)o.pre&&i.push("<pre>"),o.emphasis&&i.push("<em>"),o.strong&&i.push("<strong>"),o.strike&&i.push("<strike>"),i.push(o.text),o.strike&&i.push("</strike>"),o.strong&&i.push("</strong>"),o.emphasis&&i.push("</em>"),o.pre&&i.push("</pre>");t.push(i.join(""))}return t.join(`<br/>
|
|
4
4
|
`)}Dummy(e=""){return e.split(/\n/).map(t=>[{text:t}])}Parse(e=""){let t=this.Tokenize(e);for(let r=0;r<t.length;r++){let i=t[r];if(i.type==="delimeter"){let o=t[r-1],n=t[r+1],a=!o||o.type==="whitespace"||o.type==="newline",s=o&&o.type==="text"&&/[^\w\d]$/.test(o.text),l=!n||n.type==="whitespace"||n.type==="newline",d=n&&n.type==="text"&&/^[^\w\d]/.test(n.text);i.left_flanking=!l&&(!d||a),i.right_flanking=!a&&(!s||l||d)}}return this.ApplyFormatting(t),this.Consolidate(t)}IsWhitespace(e){return e===" "||e===" "}IsNewline(e){return e==="\r"||e===`
|
|
@@ -7,10 +7,10 @@ var V=c=>c!==null&&typeof c=="object"&&"row"in c&&"column"in c,Fr=c=>c!==null&&t
|
|
|
7
7
|
`+t.description:""),this.tooltip.style.left=r.left+"px",this.options.tooltip_prefer_top?this.tooltip.style.top=r.top-this.tooltip.offsetHeight-5+"px":this.tooltip.style.top=r.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((a,s)=>(a.name===this.last_completion&&(this.selected_index=s),`<li><a data-index="${s}">${a.name}</a></li>`)).join(`
|
|
8
8
|
`)+"<ul>";let i=this.completion_list.offsetHeight,o=!1;this.options.autocomplete_prefer_top?o=r.top>=200:this.DOM.doc?.documentElement&&Math.max(this.DOM.doc.documentElement.clientHeight,this.DOM.view?.innerHeight||0)-r.bottom<200&&(o=!0),o?this.completion_list.style.top=r.top-i-5+"px":this.completion_list.style.top=r.bottom+5+"px",this.completion_list.style.left=r.left+"px";let n=this.completion_list.querySelectorAll("a");this.active_element=n[this.selected_index],n[this.selected_index].classList.add("selected"),this.last_completion=n[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 tt=(C=>(C[C.Null=0]="Null",C[C.InsertRows=1]="InsertRows",C[C.InsertColumns=2]="InsertColumns",C[C.ResizeRows=3]="ResizeRows",C[C.ResizeColumns=4]="ResizeColumns",C[C.Select=5]="Select",C[C.SetRange=6]="SetRange",C[C.UpdateStyle=7]="UpdateStyle",C[C.UpdateBorders=8]="UpdateBorders",C[C.MergeCells=9]="MergeCells",C[C.UnmergeCells=10]="UnmergeCells",C[C.Clear=11]="Clear",C[C.UpdateTheme=12]="UpdateTheme",C[C.SetNote=13]="SetNote",C[C.SetLink=14]="SetLink",C[C.Freeze=15]="Freeze",C[C.SetName=16]="SetName",C[C.ShowHeaders=17]="ShowHeaders",C[C.AddSheet=18]="AddSheet",C[C.DuplicateSheet=19]="DuplicateSheet",C[C.DeleteSheet=20]="DeleteSheet",C[C.ActivateSheet=21]="ActivateSheet",C[C.RenameSheet=22]="RenameSheet",C[C.ReorderSheet=23]="ReorderSheet",C[C.ShowSheet=24]="ShowSheet",C[C.DataValidation=25]="DataValidation",C[C.Reset=26]="Reset",C[C.SortTable=27]="SortTable",C[C.InsertTable=28]="InsertTable",C[C.RemoveTable=29]="RemoveTable",C))(tt||{});var ci={scrollbars:!0,in_cell_editor:!0,formula_bar:!0,add_tab:!1,tab_bar:"auto",insert_function_button:!1,expand_formula_button:!1,expand:!0,repaint_on_cell_change:!0,grid_over_background:!1};var rt=class{grid_events=new se;command_log=new se;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=!1;batch_events=[];autocomplete_matcher=new Tt;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={...ci,...e}}RemoveTable(e){this.ExecCommand({key:29,table:e})}InsertTable(e,t=!0,r=void 0,i){e.start.sheet_id||(e.start.sheet_id=this.active_sheet.id);let o=this.FindSheet(e);for(let n=e.start.row;n<=e.end.row;n++)for(let a=e.start.column;a<=e.end.column;a++){let s=o.cells.GetCell({row:n,column:a},!1);if(s&&(s.area||s.merge_area||s.table)){this.Error(4);return}}this.ExecCommand({key:28,area:JSON.parse(JSON.stringify(e)),totals:t,sortable:r,theme:i})}ActivateSheet(e){let t=typeof e=="number"?e:void 0,r=typeof e=="string"?e:void 0;this.ExecCommand({key:21,index:t,name:r})}ActivateSheetID(e){this.ExecCommand({key:21,id:e})}DuplicateSheet(e,t,r){let i={key:19,new_name:t,insert_before:r};typeof e>"u"?i.id=this.active_sheet.id:i.index=e,this.ExecCommand(i)}AddSheet(e){this.ExecCommand({key:18,name:e,show:!0})}DeleteSheet(e){if(typeof e>"u"&&!this.model.sheets.list.some((t,r)=>t===this.active_sheet?(e=r,!0):!1))throw new Error("invalid index");this.ExecCommand({key:20,index:e})}InsertSheet(e,t){if(typeof e>"u"&&!this.model.sheets.list.some((r,i)=>r===this.active_sheet?(e=i+1,!0):!1))throw new Error("invalid index");this.ExecCommand({key:18,insert_index:e,name:t,show:!0})}DeleteSheetID(e){this.ExecCommand({key:20,id:e})}Reset(){this.ExecCommand({key:26})}SetLink(e,t){this.ExecCommand({key:14,area:e,reference:t})}ShowAll(){let e=[];for(let t=0;t<this.model.sheets.length;t++)e.push({key:24,index:t,show:!0});this.ExecCommand(e)}ShowSheet(e=0,t=!0){let r={key:24,show:t};typeof e=="string"?r.name=e:r.index=e,this.ExecCommand(r)}SortTable(e,t={}){this.ExecCommand({key:27,table:JSON.parse(JSON.stringify(e)),...Pr,...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){let t=this.parser.decimal_mark===",";t&&(this.parser.argument_separator=",",this.parser.decimal_mark=".");let i=Xr(e).map(n=>n.map(a=>{if(a){let s=this.parser.Parse(a);if(s.expression?.type==="complex")return s.expression}return be.TryParse(a).value}));t&&(this.parser.argument_separator=";",this.parser.decimal_mark=",");let o={row:Math.max(0,i.length-1),column:i.reduce((n,a)=>Math.max(n,Math.max(0,a.length-1)),0)};this.ExecCommand([{key:26},{key:6,area:{start:{row:0,column:0},end:o},value:i}])}InsertColumns(e=0,t=1){this.ExecCommand({key:2,before_column:e,count:t})}ReorderSheet(e,t){this.ExecCommand({key:23,index:e,move_before:t})}RenameSheet(e,t){this.ExecCommand({key:22,new_name:t,id:e.id})}Freeze(e=0,t=0,r=!0){this.ExecCommand({key:15,rows:e,columns:t,highlight_transition:r})}SetRowHeight(e,t,r=!0){this.ExecCommand({key:3,row:e,height:t,shrink:r})}SetColumnWidth(e,t=0){this.ExecCommand({key:4,column:e,width:t})}FilterTable(e,t,r){let i=[];if(!e.area.start.sheet_id)throw new Error("invalid table area");let o=this.model.sheets.Find(e.area.start.sheet_id);if(!o)throw new Error("invalid table sheet");let n=[],a=[],s=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<=s;l++){let d=o.CellData({row:l,column:t}),u=r(d),h=o.GetRowHeight(l);u&&!h?n.push(l):!u&&h&&a.push(l)}n&&i.push({key:3,sheet_id:o.id,row:n,height:o.default_row_height}),a&&i.push({key:3,sheet_id:o.id,row:a,height:0}),i.length&&this.ExecCommand(i)}UpdateSheets(e,t=!1,r){W.Reset();let i=e.map(o=>W.FromJSON(o,this.model.theme_style_properties));if(i.length===0&&i.push(W.Blank(this.model.theme_style_properties)),this.model.sheets.Assign(i),this.ResetMetadata(),this.active_sheet=i[0],r){let o=this.model.sheets.Find(r);o&&(this.active_sheet=o)}}SetAutocompleteFunctions(e){let t=[];for(let i of this.model.named_expressions.keys())t.push({name:i,type:0});let r=e.slice(0).concat(this.model.named_ranges.List().map(i=>({name:i.name,type:1})),t);this.autocomplete_matcher.SetFunctions(r)}ResetMetadata(){this.model.document_name=void 0,this.model.user_data=void 0}Serialize(e={}){let t=this.model.sheets.list.map(n=>n.toJSON(e)),r;this.model.tables.size>0&&(r=Array.from(this.model.tables.values()));let i;if(this.model.macro_functions.size){i=[];for(let n of this.model.macro_functions.values())i.push({...n,expression:void 0})}let o=[];if(this.model.named_expressions)for(let[n,a]of this.model.named_expressions){this.parser.Walk(a,l=>{if(l.type==="address"||l.type==="range"){let d=l.type==="range"?l.start:l;if(d.absolute_column=d.absolute_row=!0,!d.sheet){if(d.sheet_id){let u=this.model.sheets.Find(d.sheet_id);u&&(d.sheet=u.name)}d.sheet||(d.sheet=this.active_sheet.name)}return l.type==="range"&&(l.end.absolute_column=l.end.absolute_row=!0),!1}return!0});let s=this.parser.Render(a,{missing:""});o.push({name:n,expression:s})}return{sheet_data:t,active_sheet:this.active_sheet.id,named_ranges:this.model.named_ranges.Count()?this.model.named_ranges.Serialize():void 0,macro_functions:i,tables:r,named_expressions:o.length?o:void 0}}ResizeColumnsInternal(e){let t=e.sheet_id?this.FindSheet(e.sheet_id):this.active_sheet,r=e.column;if(typeof r>"u"){r=[];for(let i=0;i<t.columns;i++)r.push(i)}if(typeof r=="number"&&(r=[r]),e.width)for(let i of r)t.SetColumnWidth(i,e.width);else console.error("auto size not supported")}ResizeRowsInternal(e){let t=e.sheet_id?this.FindSheet(e.sheet_id):this.active_sheet,r=e.row;if(typeof r>"u"){r=[];for(let i=0;i<t.rows;i++)r.push(i)}if(typeof r=="number"&&(r=[r]),e.height)for(let i of r)t.SetRowHeight(i,e.height);else console.error("auto size not supported")}ResetInternal(){W.Reset(),this.UpdateSheets([],!0),this.model.named_ranges.Reset(),this.model.named_expressions.clear(),this.model.macro_functions.clear(),this.model.tables.clear()}ValidatePasteAreas(e){for(let t of e){let r=this.active_sheet;if(t.start.sheet_id&&t.start.sheet_id!==r.id&&(r=this.model.sheets.Find(t.start.sheet_id)),!r)return!1;let i=!0;if(r.cells.Apply2(t,o=>(o.style?.locked&&(console.info("invalid: locked cells"),i=!1),o.merge_area&&(!t.Contains(o.merge_area.start)||!t.Contains(o.merge_area.end))&&(console.info("invalid: merge area"),i=!1),o.area&&(!t.Contains(o.area.start)||!t.Contains(o.area.end))&&(console.info("invalid: array"),i=!1),i)),!i)return!1}return!0}SetValidationInternal(e){let t,r=this.FindSheet(e.area);if(r&&(t=r.cells.GetCell(e.area,!0)),!t)throw new Error("invalid cell in set validation");e.range?t.validation={type:"range",area:e.range,error:!!e.error}:e.list?t.validation={type:"list",list:JSON.parse(JSON.stringify(e.list)),error:!!e.error}:t.validation=void 0}GetValidationRange(e){let t,r=this.FindSheet(e);if(r){t=[],e=r.RealArea(new y(e.start,e.end),!0);for(let i=e.start.row;i<=e.end.row;i++)for(let o=e.start.column;o<=e.end.column;o++){let n=r.CellData({row:i,column:o});n&&n.formatted&&(typeof n.formatted=="string"?t.push(n.formatted):t.push(te.FormatPartsAsText(n.formatted)))}}return t}DeleteSheetInternal(e){let t=!1,r=-1,i="",o=!1,n=e.name?e.name.toLowerCase():"",a=this.model.sheets.list.filter((s,l)=>l===e.index||s.id===e.id||s.name.toLowerCase()===n?(t=s===this.active_sheet,this.model.named_ranges.RemoveRangesForSheet(s.id),i=s.name,r=l,!1):!0);if(i&&this.RenameSheetReferences(a,i,"#REF")>0&&(o=!0),!a.length)a.push(W.Blank(this.model.theme_style_properties)),r=0;else if(a.every(s=>!s.visible))a.unshift(W.Blank(this.model.theme_style_properties)),r=0;else for(r>=a.length&&(r=0);!a[r].visible;)r++;return this.model.sheets.Assign(a),t&&this.ActivateSheetInternal({key:21,index:r}),o}RenameSheetInternal(e,t){if(!t||Wr.test(t))throw new Error("invalid sheet name");let r=t.toLowerCase();for(let o of this.model.sheets.list)if(o!==e&&o.name.toLowerCase()===r)throw new Error("sheet name already exists");let i=e.name;e.name=t,this.model.sheets.Assign(this.model.sheets.list),this.RenameSheetReferences(this.model.sheets.list,i,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 r=[],i=[],o=e.table.area.end.row;e.table.totals_row&&o--;let n=0,a=0;for(let h=e.table.area.start.row+1;h<=o;h++){if(t.GetRowHeight(h))i.push(h);else continue;let f={row:h,number:0,text:"",type:0,data:[]};for(let p=e.table.area.start.column;p<=e.table.area.end.column;p++){let _=t.CellData({row:h,column:p});if(p===e.column+e.table.area.start.column){let b=_.calculated_type||_.type;b===2?n++:b===3&&a++;let v=_.calculated_type?_.calculated:_.value;f.text=v?.toString()||"",f.number=Number(v)||0,f.type=_.calculated_type||_.type}f.data.push({address:{row:h,column:p},data:_.value,type:_.type,style:_.style})}r.push(f)}let s=e.type;s==="auto"&&(a>n?s="numeric":s="text");let l=e.asc?1:-1;switch(s){case"numeric":r.sort((h,m)=>h.type===0?m.type===0?0:1:m.type===0?-1:(h.number-m.number)*l);break;case"text":default:r.sort((h,m)=>h.type===0?m.type===0?0:1:m.type===0?-1:h.text.localeCompare(m.text)*l);break}let d={row:e.table.area.start.row+1,column:e.table.area.start.column};for(let h=0;h<i.length;h++){d.row=i[h];let m=r[h];d.column=e.table.area.start.column;for(let f of m.data){if(f.type===1){let p=f.data,_={columns:0,rows:d.row-m.row},b=this.parser.Parse(p);b.expression&&(p="="+this.parser.Render(b.expression,{offset:_,missing:""})),t.SetCellValue(d,p)}else t.SetCellValue(d,f.data);t.UpdateCellStyle(d,f.style||{},!1),d.column++}}let u=this.model.tables.get(e.table.name.toLowerCase());u&&(u.sort={type:e.type,asc:!!e.asc,column:e.column});{let h=e.table.area.start.row;for(let m=e.table.area.start.column;m<=e.table.area.end.column;m++)t.cells.data[h][m]?.FlushStyle();if(e.table.totals_row){h=e.table.area.end.row;for(let m=e.table.area.start.column;m<=e.table.area.end.column;m++)t.cells.data[h][m]?.FlushStyle()}}return new y(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 r=e.columns?.slice(0)||void 0,i=[],o=e.area.start.row,n=e.area.end.column-e.area.start.column+1,a=e.area.start.column;for(let s=0;s<n;s++,a++){let l=t.CellData({row:o,column:a}),d="";l.type!==2?(typeof l.formatted<"u"?d=l.formatted.toString():typeof l.calculated<"u"?d=l.calculated.toString():typeof l.value<"u"&&(d=l.value.toString()),l.Set(d,2)):d=l.value||"",d||(d=`Column${s+1}`);let u=d,h=!1,m=1;for(;!h;){h=!0;e:for(let f of i)if(f.toLowerCase()===u.toLowerCase()){h=!1,u=`${d}${++m}`;break e}}l.Set(u,2),i.push(u.toLowerCase())}if(r&&r.length===i.length){let s=new Map;for(let l=0;l<r.length;l++){let d=r[l].toLowerCase();d!==i[l]&&s.set(d,i[l])}if(s.size){let l=e.name.toLowerCase();for(let d of this.model.sheets.list)d.cells.IterateAll(u=>{if(u.ValueIsFormula()){let h=!1,m=this.parser.Parse(u.value);m.expression&&(this.parser.Walk(m.expression,f=>{if(f.type==="structured-reference"&&(f.table.toLowerCase()===l||!f.table&&u.table===e))for(let[p,_]of s.entries())f.column.toLowerCase()===p&&(f.column=_,h=!0);return!0}),h&&(console.info("updating value"),u.value="="+this.parser.Render(m.expression,{missing:""})))}})}}return e.columns=i,{start:{...e.area.start},end:{row:e.area.start.row,column:e.area.end.column}}}SetRangeInternal(e,t={}){let r=V(e.area)?new y(e.area):new y(e.area.start,e.area.end),i=this.FindSheet(r);if(r.start.sheet_id||(r.start.sheet_id=i.id),!r.entire_row&&!r.entire_column&&(r.end.row>=i.rows||r.end.column>=i.columns)&&(i.cells.EnsureCell(r.end),i===this.active_sheet&&(t.layout=!0)),V(e.area)){let o=i.CellData(e.area);if(o.area&&(o.area.rows>1||o.area.columns>1)){this.Error(2);return}let n=Array.isArray(e.value)?Array.isArray(e.value[0])?e.value[0][0]:e.value[0]:e.value;return e.r1c1&&(n=this.TranslateR1C1(e.area,n)),e.array?i.SetArrayValue(r,n):i.SetCellValue(e.area,n),r}else{if(e.array){let o=Array.isArray(e.value)?Array.isArray(e.value[0])?e.value[0][0]:e.value[0]:e.value;e.r1c1&&(o=this.TranslateR1C1(r.start,o)),i.SetArrayValue(r,o)}else{if(e.r1c1){if(Array.isArray(e.value))for(let o=0;o<e.value.length&&o<r.rows;o++){e.value[o]||(e.value[o]=[]);let n=e.value[o];for(let a=0;a<n.length&&a<r.columns;a++){let s={...r.start,row:r.start.row+o,column:r.start.column+a};n[a]=this.TranslateR1C1(s,n[a])}}else if(typeof e.value=="string"&&e.value[0]==="="){let o=[];for(let n=0;n<r.rows;n++){let a=[];for(let s=0;s<r.columns;s++){let l={...r.start,row:r.start.row+n,column:r.start.column+s};a.push(this.TranslateR1C1(l,e.value))}o.push(a)}e.value=o}}i.SetAreaValues2(r,e.value)}return r}}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 r=this.active_sheet;this.active_sheet=t,this.grid_events.Publish({type:"sheet-change",deactivate:r,activate:this.active_sheet})}ShowSheetInternal(e){let t=this.ResolveSheet(e);if(t&&t.visible!==e.show){if(!e.show){let r=0;for(let i of this.model.sheets.list)(!t.visible||i===t)&&r++;if(r>=this.model.sheets.length)throw new Error("can't hide all sheets")}if(t.visible=e.show,t===this.active_sheet){let r=this.model.sheets.list;for(let i=0;i<r.length;i++)if(r[i]===this.active_sheet){for(let o=i+1;o<r.length;o++)if(r[o].visible){this.ActivateSheetInternal({key:21,index:o});return}for(let o=0;o<r.length;o++)if(r[o].visible){this.ActivateSheetInternal({key:21,index:o});return}throw new Error("no visible sheet")}}}}NormalizeCommands(e){Array.isArray(e)||(e=[e]);let t=this.active_sheet.id;for(let r of e)switch(r.key){case 0:case 17:case 24:case 18:case 19:case 20:case 21:case 22:case 23:case 26:break;case 27:case 29:r.table.area.start.sheet_id||(r.table.area.start.sheet_id=t);break;case 3:case 4:case 2:case 1:case 15:r.sheet_id||(r.sheet_id=t);break;case 11:case 13:case 14:case 8:case 9:case 10:case 25:case 6:case 7:case 16:case 5:case 28:r.area&&(V(r.area)?r.area.sheet_id||(r.area.sheet_id=t):r.area.start.sheet_id||(r.area.start.sheet_id=t));break}return e}AddSheetInternal(e=W.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(i=>i.name===e);){let i=e.match(/^(.*?)(\d+)$/);i?e=i[1]+(Number(i[2])+1):e=e+"2"}let r=W.Blank(this.model.theme_style_properties,e);return t>=0?this.model.sheets.Splice(t,0,r):this.model.sheets.Add(r),r.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:V(e)?e.sheet_id:e.start.sheet_id;if(!t||t===this.active_sheet.id)return this.active_sheet;let r=this.model.sheets.Find(t);return r||this.active_sheet}PatchFormulasInternal(e,t,r,i,o,n,a){let s=this.parser.Parse(e||""),l=!1;if(s.expression&&(this.parser.Walk(s.expression,d=>{if(d.type==="range"||d.type==="address"){let u=[];d.type==="range"?(d.start.sheet&&d.start.sheet.toLowerCase()===n||!d.start.sheet&&a)&&u.push(d.start,d.end):d.type==="address"&&(d.sheet&&d.sheet.toLowerCase()===n||!d.sheet&&a)&&u.push(d);for(let h of u)r&&h.row>=t&&(r<0&&h.row+r<t?h.column=h.row=-1:h.row+=r,l=!0),o&&h.column>=i&&(o<0&&h.column+o<i?h.column=h.row=-1:h.column+=o,l=!0);return!1}return!0}),l))return"="+this.parser.Render(s.expression,{missing:""})}PatchExpressionSheetName(e,t,r){let i=!1,o=this.parser.Parse(e||"");if(o.expression&&(this.parser.Walk(o.expression,n=>(n.type==="address"&&n.sheet&&n.sheet.toLowerCase()===t&&(n.sheet=r,i=!0),!0)),i))return"="+this.parser.Render(o.expression,{missing:""})}RenameSheetReferences(e,t,r){let i=0;t=t.toLowerCase();for(let o of e){if(o.cells.IterateAll(n=>{if(n.ValueIsFormula()){let a=this.PatchExpressionSheetName(n.value||"",t,r);a&&(n.value=a,i++)}}),o.conditional_formats?.length)for(let n of o.conditional_formats)switch(n.type){case"cell-match":case"expression":{let a=this.PatchExpressionSheetName(n.expression,t,r);a&&(n.expression=a,i++)}break}for(let n of o.annotations)if(n.data.formula){let a=this.PatchExpressionSheetName(n.data.formula,t,r);a&&(n.data.formula=a,i++)}}return i}ApplyBordersInternal(e){let t=e.borders,r=e.borders==="none"?0:e.width,i=new y(e.area.start,e.area.end),o=this.FindSheet(i);i.start.sheet_id=o.id;let n={border_top:r},a={border_bottom:r},s={border_left:r},l={border_right:r},d={border_top:0,border_top_fill:{}},u={border_bottom:0,border_bottom_fill:{}},h={border_left:0,border_left_fill:{}},m={border_right:0,border_right_fill:{}};return e.color?(n.border_top_fill={...e.color},a.border_bottom_fill={...e.color},s.border_left_fill={...e.color},l.border_right_fill={...e.color}):(n.border_top_fill={},a.border_bottom_fill={},s.border_left_fill={},l.border_right_fill={}),(t==="none"||t==="all")&&o.UpdateAreaStyle(i,{...n,...a,...s,...l},!0),(t==="top"||t==="outside")&&(i.entire_column||o.UpdateAreaStyle(i.top,{...n},!0)),(t==="none"||t==="all"||t==="outside"||t==="top")&&(i.entire_column||i.start.row&&o.UpdateAreaStyle(new y({row:i.start.row-1,column:i.start.column},{row:i.start.row-1,column:i.end.column}),{...u},!0)),(t==="bottom"||t==="outside")&&(i.entire_column||o.UpdateAreaStyle(i.bottom,{...a},!0)),(t==="none"||t==="all"||t==="outside"||t==="bottom")&&(i.entire_column||o.UpdateAreaStyle(new y({row:i.end.row+1,column:i.start.column},{row:i.end.row+1,column:i.end.column}),{...d},!0)),(t==="left"||t==="outside")&&(i.entire_row||o.UpdateAreaStyle(i.left,{...s},!0)),(t==="none"||t==="all"||t==="outside"||t==="left")&&(i.entire_row||i.start.column&&o.UpdateAreaStyle(new y({row:i.start.row,column:i.start.column-1},{row:i.end.row,column:i.start.column-1}),{...m},!0)),(t==="right"||t==="outside")&&(i.entire_row||o.UpdateAreaStyle(i.right,{...l},!0)),(t==="none"||t==="all"||t==="outside"||t==="right")&&(i.entire_row||o.UpdateAreaStyle(new y({row:i.start.row,column:i.end.column+1},{row:i.end.row,column:i.end.column+1}),{...h},!0)),y.Bleed(i)}TranslateR1C1(e,t){let r=!1,i=this.parser.flags.r1c1;if(this.parser.flags.r1c1=!0,typeof t=="string"&&t[0]==="="){let o=this.parser.Parse(t);o.expression&&(this.parser.Walk(o.expression,n=>(n.type==="address"&&n.r1c1&&(r=!0,n.offset_column&&(n.column=n.column+e.column),n.offset_row&&(n.row=n.row+e.row)),!0)),r&&(t="="+this.parser.Render(o.expression,{missing:""})))}return this.parser.flags.r1c1=i,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}let r=!1;e=t.RealArea(e),t.cells.Apply(e,o=>{o.area&&!e.ContainsArea(o.area)&&(r=!0)});let i=this.model.tables.keys();for(let o of i){let n=this.model.tables.get(o);if(n&&n.area.start.sheet_id===t.id){let a=new y(n.area.start,n.area.end);if(e.ContainsArea(a)){for(let s=a.start.row;s<=a.end.row;s++)for(let l=a.start.column;l<=n.area.end.column;l++){let d=t.cells.GetCell({row:s,column:l},!1);d&&(d.table=void 0)}this.model.tables.delete(o)}}}r?this.Error(2):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),r=this.model.sheets.list.reduce((s,l)=>Math.max(s,l.id),0)+1,i=-1;for(let s=0;s<this.model.sheets.length;s++)this.model.sheets.list[s]===t&&(i=s+1);if(!t||i<0)throw new Error("source sheet not found");if(typeof e.insert_before=="number")i=e.insert_before;else if(typeof e.insert_before=="string"){let s=e.insert_before.toLowerCase();for(let l=0;l<this.model.sheets.length;l++)if(this.model.sheets.list[l].name.toLowerCase()===s){i=l;break}}let o={rendered_values:!0},n=W.FromJSON(t.toJSON(o),this.model.theme_style_properties),a=e.new_name||t.name;for(;this.model.sheets.list.some(s=>s.name===a);){let s=a.match(/^(.*?)(\d+)$/);s?a=s[1]+(Number(s[2])+1):a=a+"2"}return n.name=a,n.id=r,this.model.sheets.Splice(i,0,n),n.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 r=0,i=this.parser.Parse(e);if(i.expression&&(this.parser.Walk(i.expression,o=>{if(o.type==="range"){if(!o.start.sheet||o.start.sheet.toLowerCase()===t.sheet.name.toLowerCase()){let n=y.PatchArea(o,t);n?(o.start.row=n.start.row,o.start.column=n.start.column,o.end.row=n.end.row,o.end.column=n.end.column):o.start.row=o.end.row=o.start.column=o.end.column=-1}return r++,!1}else if(o.type==="address"){let n=y.PatchArea({start:o,end:o},t);return n?(o.row=n.start.row,o.column=n.start.column):o.row=o.column=-1,r++,!1}return!0}),r))return this.parser.Render(i.expression,{missing:""})}PatchConditionals(e){if(e.sheet.conditional_formats?.length){let t=new Set;for(let r of e.sheet.conditional_formats){let i=y.PatchArea(r.area,e);if(i)r.area=JSON.parse(JSON.stringify(i));else{t.add(r);continue}switch(r.type){case"expression":case"cell-match":{let o=this.PatchExpression(r.expression,e);o&&(r.expression=o)}break}}t.size&&(e.sheet.conditional_formats=e.sheet.conditional_formats.filter(r=>!t.has(r)))}}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.PatchConditionals({sheet:t,before_column:0,column_count:0,before_row:e.before_row,row_count:e.count});let r=Array.from(this.model.tables.values());for(let s of r)if(s.area.start.sheet_id===e.sheet_id)if(e.count>0){if(e.before_row<=s.area.start.row)s.area.start.row+=e.count,s.area.end.row+=e.count;else if(e.before_row<=s.area.end.row){s.area.end.row+=e.count;for(let l=s.area.start.row;l<=s.area.end.row;l++)for(let d=s.area.start.column;d<=s.area.end.column;d++){let u=t.CellData({row:l,column:d});u.table=s}}}else if(e.before_row<=s.area.start.row)if(e.before_row-e.count<=s.area.start.row)s.area.start.row+=e.count,s.area.end.row+=e.count;else if(e.before_row-e.count>=s.area.end.row)this.model.tables.delete(s.name.toLowerCase());else{this.model.tables.delete(s.name.toLowerCase());for(let l=e.before_row;l<=s.area.end.row;l++)for(let d=s.area.start.column;d<=s.area.end.column;d++){let u=t.CellData({row:l,column:d});u.table===s&&(u.table=void 0)}}else e.before_row<=s.area.end.row&&(e.before_row-e.count>s.area.end.row&&(s.totals_row=!1),s.area.end.row=Math.max(0,s.area.end.row+e.count,e.before_row-1));this.model.named_ranges.PatchNamedRanges(t.id,0,0,e.before_row,e.count);let i=t.name.toLowerCase();for(let s of this.model.sheets.list){let l=s===t;s.cells.IterateAll(d=>{if(d.ValueIsFormula()){let u=this.PatchFormulasInternal(d.value||"",e.before_row,e.count,0,0,i,l);u&&(d.value=u)}});for(let d of s.annotations)if(d.data.formula){let u=this.PatchFormulasInternal(d.data.formula||"",e.before_row,e.count,0,0,i,l);u&&(d.data.formula=u)}}let o=[],n=[],a=[];if(e.count>0){let s=e.before_row;for(let l of t.annotations)if(l.data.layout){let[d,u,h]=[l.data.layout.tl.address.row,l.data.layout.br.address.row,l.data.layout.br.offset.y];if(s<=d)l.data.layout.tl.address.row+=e.count,l.data.layout.br.address.row+=e.count;else if(s<u||s===u&&h>0)l.data.layout.br.address.row+=e.count,n.push(l);else continue;o.push(l)}}else if(e.count<0){let s=e.before_row,l=e.before_row-e.count-1;for(let d of t.annotations)if(d.data.layout){let[u,h,m]=[d.data.layout.tl.address.row,d.data.layout.br.address.row,d.data.layout.br.offset.y];if(s<=u)if(l<u)d.data.layout.tl.address.row+=e.count,d.data.layout.br.address.row+=e.count;else if(l<h-1||l===h-1&&m>0)d.data.layout.tl.address.row=s,d.data.layout.tl.offset.y=0,d.data.layout.br.address.row+=e.count,n.push(d);else{a.push(d);continue}else if(s<h||s===h&&m>0)l<h-1||l===h-1&&m>0?(d.data.layout.br.address.row+=e.count,n.push(d)):(d.data.layout.br.address.row=s,d.data.layout.br.offset.y=0,n.push(d));else continue;o.push(d)}}for(let s of a)t.annotations=t.annotations.filter(l=>l!==s);return{update_annotations_list:o,resize_annotations_list:n,delete_annotations_list:a}}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.PatchConditionals({sheet:t,before_column:e.before_column,column_count:e.count,before_row:0,row_count:0});let r=Array.from(this.model.tables.values());for(let s of r)if(s.area.start.sheet_id===e.sheet_id)if(e.count>0){if(e.before_column<=s.area.start.column)s.area.start.column+=e.count,s.area.end.column+=e.count;else if(e.before_column<=s.area.end.column){s.area.end.column+=e.count;for(let l=s.area.start.row;l<=s.area.end.row;l++)for(let d=s.area.start.column;d<=s.area.end.column;d++){let u=t.CellData({row:l,column:d});u.table=s}this.UpdateTableColumns(s)}}else e.before_column<=s.area.start.column?e.before_column-e.count<=s.area.start.column?(s.area.start.column+=e.count,s.area.end.column+=e.count):e.before_column-e.count>=s.area.end.column?this.model.tables.delete(s.name.toLowerCase()):(s.area.start.column=e.before_column,s.area.end.column+=e.count,this.UpdateTableColumns(s)):e.before_column<=s.area.end.column&&(s.area.end.column=Math.max(0,s.area.end.column+e.count,e.before_column-1),this.UpdateTableColumns(s));this.model.named_ranges.PatchNamedRanges(t.id,e.before_column,e.count,0,0);let i=t.name.toLowerCase();for(let s of this.model.sheets.list){let l=s===t;s.cells.IterateAll(d=>{if(d.ValueIsFormula()){let u=this.PatchFormulasInternal(d.value||"",0,0,e.before_column,e.count,i,l);u&&(d.value=u)}});for(let d of s.annotations)if(d.data.formula){let u=this.PatchFormulasInternal(d.data.formula,0,0,e.before_column,e.count,i,l);u&&(d.data.formula=u)}}let o=[],n=[],a=[];if(e.count>0){let s=e.before_column;for(let l of t.annotations)if(l.data.layout){let[d,u,h]=[l.data.layout.tl.address.column,l.data.layout.br.address.column,l.data.layout.br.offset.x];if(s<=d)l.data.layout.tl.address.column+=e.count,l.data.layout.br.address.column+=e.count;else if(s<u||s===u&&h>0)l.data.layout.br.address.column+=e.count,n.push(l);else continue;o.push(l)}}else if(e.count<0){let s=e.before_column,l=e.before_column-e.count-1;for(let d of t.annotations)if(d.data.layout){let[u,h,m]=[d.data.layout.tl.address.column,d.data.layout.br.address.column,d.data.layout.br.offset.x];if(s<=u)if(l<u)d.data.layout.tl.address.column+=e.count,d.data.layout.br.address.column+=e.count;else if(l<h-1||l===h-1&&m>0)d.data.layout.tl.address.column=s,d.data.layout.tl.offset.x=0,d.data.layout.br.address.column+=e.count,n.push(d);else{a.push(d);continue}else if(s<h||s===h&&m>0)l<h-1||l===h-1&&m>0?(d.data.layout.br.address.column+=e.count,n.push(d)):(d.data.layout.br.address.column=s,d.data.layout.br.offset.x=0,n.push(d));else continue;o.push(d)}}for(let s of a)t.annotations=t.annotations.filter(l=>l!==s);return{update_annotations_list:o,resize_annotations_list:n,delete_annotations_list:a}}ExecCommand(e,t=!0){let r={pending:[]},i=[];e=this.NormalizeCommands(e),t&&this.command_log.Publish({command:e,timestamp:new Date().getTime()});for(let o of e)switch(o.key){case 26:this.ResetInternal();break;case 11:if(o.area){let n=new y(o.area.start,o.area.end);this.ClearAreaInternal(n),r.data_area=y.Join(n,r.data_area),r.formula=!0}break;case 5:this.SelectInternal(o);break;case 15:this.FreezeInternal(o),r.structure_event=!0;break;case 28:{let n=this.FindSheet(o.area),a=new y(o.area.start,o.area.end),s=!0;e:for(let l=a.start.row;l<=a.end.row;l++)for(let d=a.start.column;d<=a.end.column;d++){let u=n.cells.GetCell({row:l,column:d},!1);if(u&&(u.area||u.merge_area||u.table)){s=!1;break e}}if(s){let l=this.model.tables.size+1,d="";for(;d=`Table${l++}`,!!this.model.tables.has(d.toLowerCase()););let u={area:o.area,name:d,sortable:o.sortable,theme:o.theme};o.totals&&(u.totals_row=!0),this.model.tables.set(d.toLowerCase(),u);for(let h=a.start.row;h<=a.end.row;h++)for(let m=a.start.column;m<=a.end.column;m++){let f=n.cells.GetCell({row:h,column:m},!0);f.table=u}this.UpdateTableColumns(u),n.Invalidate(new y(u.area.start,u.area.end)),n===this.active_sheet?(r.style_area=y.Join(a,r.style_area),r.render_area=y.Join(a,r.render_area)):r.style_event=!0}}break;case 29:{let n=this.FindSheet(o.table.area),a=new y(o.table.area.start,o.table.area.end);for(let l=a.start.row;l<=a.end.row;l++)for(let d=a.start.column;d<=a.end.column;d++){let u=n.cells.GetCell({row:l,column:d},!1);u&&(u.table=void 0)}this.model.tables.delete(o.table.name.toLowerCase());let s=n.RealArea(a.Clone().Shift(-1,-1).Resize(a.rows+2,a.columns+2));n.Invalidate(s),n===this.active_sheet?(r.style_area=y.Join(a,r.style_area),r.render_area=y.Join(a,r.render_area)):r.style_event=!0}break;case 9:{let n=this.FindSheet(o.area);n.MergeCells(new y(o.area.start,o.area.end)),r.structure_event=!0,r.structure_rebuild_required=!0,n===this.active_sheet?(r.data_area=y.Join(o.area,r.data_area),r.render_area=y.Join(o.area,r.render_area)):(r.data_event=!0,r.pending||(r.pending=[]),r.pending.push(n.id))}break;case 10:{let n=this.FindSheet(o.area),a={},s=new y(o.area.start,o.area.end);n.cells.Apply(s,d=>{if(d.merge_area){let u=y.CellAddressToLabel(d.merge_area.start)+":"+y.CellAddressToLabel(d.merge_area.end);a[u]=d.merge_area}},!1);let l=Object.keys(a);for(let d=0;d<l.length;d++)n.UnmergeCells(a[l[d]]);n===this.active_sheet?(r.render_area=y.Join(o.area,r.render_area),r.data_area=y.Join(o.area,r.data_area)):(r.data_event=!0,r.pending||(r.pending=[]),r.pending.push(n.id)),r.structure_event=!0,r.structure_rebuild_required=!0}break;case 7:{let n,a=this.FindSheet(o.area);V(o.area)?(n=new y(o.area),a.UpdateCellStyle(o.area,o.style,!!o.delta)):(n=new y(o.area.start,o.area.end),a.UpdateAreaStyle(n,o.style,!!o.delta)),a===this.active_sheet?(r.style_area=y.Join(n,r.style_area),(!o.delta||o.style.fill||o.style.border_top||o.style.border_left||o.style.border_right||o.style.border_bottom)&&(n=y.Bleed(n),this.active_sheet.Invalidate(n)),r.render_area=y.Join(n,r.render_area)):r.style_event=!0}break;case 25:this.SetValidationInternal(o),(!o.area.sheet_id||o.area.sheet_id===this.active_sheet.id)&&(r.render_area=y.Join(new y(o.area),r.render_area));break;case 16:o.area?(this.model.named_expressions.delete(o.name),this.model.named_ranges.SetName(o.name,new y(o.area.start,o.area.end)),this.autocomplete_matcher.AddFunctions({type:1,name:o.name})):o.expression?(this.model.named_ranges.ClearName(o.name),this.model.named_expressions.set(o.name,o.expression),this.autocomplete_matcher.AddFunctions({type:1,name:o.name})):(this.model.named_ranges.ClearName(o.name),this.model.named_expressions.delete(o.name),this.autocomplete_matcher.RemoveFunctions({type:1,name:o.name})),r.structure_event=!0,r.structure_rebuild_required=!0;break;case 8:{let n=this.ApplyBordersInternal(o);n.start.sheet_id===this.active_sheet.id?(r.render_area=y.Join(n,r.render_area),r.style_area=y.Join(n,r.style_area)):r.style_event=!0}break;case 24:this.ShowSheetInternal(o),r.sheets=!0,r.structure_event=!0;break;case 23:{let n=[],a=this.model.sheets.list[o.index];for(let s=0;s<this.model.sheets.length;s++)s!==o.index&&(s===o.move_before&&n.push(a),n.push(this.model.sheets.list[s]));o.move_before>=this.model.sheets.length&&n.push(a),this.model.sheets.Assign(n),r.sheets=!0,r.structure_event=!0}break;case 22:{let n=this.ResolveSheet(o);n&&(this.RenameSheetInternal(n,o.new_name),r.sheets=!0,r.structure_event=!0)}break;case 3:{let n=this.ResizeRowsInternal(o);if(n)if(n.start.sheet_id===this.active_sheet.id){let a=this.active_sheet.RealArea(new y(n.start,n.end));r.render_area=y.Join(a,r.render_area),r.data_area=y.Join(a,r.data_area),r.data_event=!0}else r.data_event=!0,r.pending||(r.pending=[]),n.start.sheet_id&&r.pending.push(n.start.sheet_id);r.structure_event=!0}break;case 4:this.ResizeColumnsInternal(o),r.structure_event=!0;break;case 17:this.active_sheet.SetHeaderSize(o.show?void 0:1,o.show?void 0:1),this.flags.layout=!0,this.flags.repaint=!0;break;case 1:this.InsertRowsInternal(o),r.structure_event=!0,r.structure_rebuild_required=!0;break;case 2:this.InsertColumnsInternal(o),r.structure_event=!0,r.structure_rebuild_required=!0;break;case 14:case 13:{let n=this.FindSheet(o.area),a=n.cells.GetCell(o.area,!0);if(a){let s;a.merge_area?(s=new y(a.merge_area.start),a=n.cells.GetCell(a.merge_area.start,!0)):s=new y(o.area),o.key===13?a.SetNote(o.note):(a.hyperlink=o.reference||void 0,a.render_clean=[]),n===this.active_sheet?(r.style_area=y.Join(s,r.style_area),r.render_area=y.Join(s,r.render_area)):r.style_event=!0}}break;case 27:{let n=this.SortTableInternal(o);n&&n.start.sheet_id===this.active_sheet.id?(r.data_area=y.Join(n,r.data_area),this.options.repaint_on_cell_change&&(r.render_area=y.Join(n,r.render_area))):r.data_event=!0}break;case 6:{let n=this.SetRangeInternal(o,r);if(n){let s=this.model.sheets.Find(n.start.sheet_id||this.active_sheet.id)?.TablesFromArea(n,!0)||[];for(let l of s)this.UpdateTableColumns(l)}n&&n.start.sheet_id===this.active_sheet.id?(r.data_area=y.Join(n,r.data_area),this.options.repaint_on_cell_change&&(r.render_area=y.Join(n,r.render_area))):r.data_event=!0}break;case 20:this.DeleteSheetInternal(o),r.sheets=!0,r.structure_event=!0,r.structure_rebuild_required=!0;break;case 19:this.DuplicateSheetInternal(o),r.sheets=!0,r.structure_event=!0,r.structure_rebuild_required=!0;break;case 18:{let n=this.AddSheetInternal(o.name,o.insert_index);typeof n=="number"&&o.show&&this.ActivateSheetInternal({key:21,id:n}),r.structure_event=!0,r.sheets=!0,r.structure=!0}break;case 21:this.ActivateSheetInternal(o);break;default:console.warn(`unhandled command: ${tt[o.key]} (${o.key})`)}return r.data_area?(r.data_area.start.sheet_id||r.data_area.SetSheetID(this.active_sheet.id),i.push({type:"data",area:r.data_area})):r.data_event&&i.push({type:"data"}),r.style_area?(r.style_area.start.sheet_id||r.style_area.SetSheetID(this.active_sheet.id),i.push({type:"style",area:r.style_area})):r.style_event&&i.push({type:"style"}),r.structure_event&&i.push({type:"structure",rebuild_required:r.structure_rebuild_required}),this.batch?this.batch_events.push(...i):this.grid_events.Publish(i),r}};var Vt=class extends Me{get active(){return this.nodes.length>0}Reset(){this.AttachNodes()}AttachNodes(e=[],t=!0){this.assume_formula=t;let r=[];r=e.map(i=>{for(let o of this.nodes)if(o.node===i)return o;return{node:i}});for(let i of this.nodes)if(i.listeners){for(let[o,n]of i.listeners.entries())i.node.removeEventListener(o,n);i.listeners.clear()}this.nodes=r;for(let i of this.nodes){if(i.formatted_text===i.node.textContent){let o=i.node.innerHTML.length;i.check!==o&&(i.formatted_text=void 0)}i.node.ownerDocument.activeElement===i.node&&(this.active_editor=i),this.UpdateText(i,{toll_events:!0}),this.RegisterListener(i,"focusin",()=>{this.active_editor=i}),this.RegisterListener(i,"focusout",()=>{this.active_editor=void 0}),this.RegisterListener(i,"input",o=>{o.isTrusted&&(this.UpdateText(i),this.UpdateColors())})}this.UpdateColors(!0)}};var it=class extends rt{hide_selection=!1;headless=!1;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.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 r of t.annotations)r.dirty=!0}theme;language_map;reverse_language_map;hover_data={};editing_state=0;editing_cell={row:-1,column:-1,sheet_id:0};selected_annotation;editing_annotation;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 y({row:0,column:0});primary_selection={target:{row:0,column:0},area:new y({row:0,column:0}),empty:!0};active_selection={target:{row:0,column:0},area:new y({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=F.GetInstance();constructor(e={},t,r=ut,i=!0,o){if(super(e,t),this.decimal_separator_code=z.decimal_separator.charCodeAt(0),this.theme=JSON.parse(JSON.stringify(r)),!i){this.headless=!0,this.layout=new Rt(this.model,this.view);return}this.DOM=o,this.layout=new Et(this.model,this.view,o),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 zt(this.theme,this.layout,this.model,this.view,this.options),this.selection_renderer=new St(this.theme,this.layout,this.model,this.view,this.primary_selection,this.additional_selections)}SetLanguageMap(e){if(!e)this.language_map=this.reverse_language_map=void 0;else{let t=Object.keys(e);this.language_map={};for(let r of t)this.language_map[r.toUpperCase()]=e[r];this.reverse_language_map={};for(let r of t){let i=e[r];this.reverse_language_map[i.toUpperCase()]=r}}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:13,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=!0,r=!1,i){let o=new Te(e);if(r)if(!o.data.layout&&o.scaled_rect&&(o.data.layout=this.layout.RectToAnnotationLayout(o.scaled_rect)),!o.data.layout)console.warn("can't offset annotation without layout");else{let n=this.layout.AnnotationLayoutToRect(o.data.layout).Shift(20,20),a=!0;for(;a;){a=!1;for(let s of this.active_sheet.annotations)if(s!==o&&s.scaled_rect&&s.scaled_rect.top===n.top&&s.scaled_rect.left===n.left){n=n.Shift(20,20),a=!0;break}}o.data.layout=this.layout.RectToAnnotationLayout(n)}return i&&(O.IsRectangle(i)?(o.data.layout=void 0,o.rect=O.Create(i)):i.start&&(o.rect=void 0,o.data.layout=this.layout.AddressToAnnotationLayout(i.start,i.end||i.start))),t&&(this.active_sheet.annotations.some(n=>n===o)||this.active_sheet.annotations.push(o),this.AddAnnotation(o)),o}UpdateAnnotationLayout(){}AddAnnotation(e,t=!1,r=!0){let i=e.view[this.view_index];if(i||(i={},e.view[this.view_index]=i),!i.node){let o=this.DOM.Div("annotation",void 0,{data:{scale:this.layout.scale.toString()},style:{fontSize:`${10*this.layout.scale}pt`},attrs:{tabindex:"-1"},events:{mousedown:s=>{s.button===0&&this.layout.AnnotationMouseDown(e,o,s,n,a).then(l=>{l&&this.grid_events.Publish(l),e.data.layout&&this.EnsureAddress(e.data.layout.br.address,1)})},focusin:()=>{for(let s of this.layout.GetFrozenAnnotations(e))s.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:s=>{for(let l of this.layout.GetFrozenAnnotations(e))l.classList.remove("clone-focus");this.formula_bar&&this.formula_bar.IsElement(s.relatedTarget)?(this.primary_selection.empty=!0,this.RenderSelections(),this.editing_annotation=e,this.layout.ShowSelections(!0)):(this.selected_annotation===e&&(this.selected_annotation=void 0),this.ShowGridSelection())}}});i.node=o,i.content_node=this.DOM.Div("annotation-content",o);let n=this.DOM.Div("annotation-move-target",o),a=this.DOM.Div("annotation-resize-target",o);o.addEventListener("keydown",s=>{let l=e.scaled_rect;if(!l){console.info("missing scaled rect!");return}let d=[o,...this.layout.GetFrozenAnnotations(e)],u={x:l.left,y:l.top};switch(s.key){case"ArrowUp":case"Up":s.ctrlKey?(this.layout.AnnotationLayoutOrder(e,1)&&this.grid_events.Publish({type:"annotation",event:"move",annotation:e}),o.focus()):u.y--;break;case"ArrowLeft":case"Left":if(s.ctrlKey)return;u.x--;break;case"ArrowRight":case"Right":if(s.ctrlKey)return;u.x++;break;case"ArrowDown":case"Down":s.ctrlKey?(this.layout.AnnotationLayoutOrder(e,-1)&&this.grid_events.Publish({type:"annotation",event:"move",annotation:e}),o.focus()):u.y++;break;case"Escape":case"Esc":this.Focus();break;case"Delete":case"Del":this.Focus(),this.RemoveAnnotation(e);break;default:return}if(s.stopPropagation(),s.preventDefault(),u.x=Math.max(u.x,0),u.y=Math.max(u.y,0),l.left!==u.x||l.top!==u.y){l.left=Math.round(u.x),l.top=Math.round(u.y);for(let h of d)h.style.top=l.top+"px",h.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)}})}r&&(this.layout.AddAnnotation(e),e.data.layout&&this.EnsureAddress(e.data.layout.br.address,1)),t||this.grid_events.Publish({type:"annotation",annotation:e,event:"create"})}AnnotationUpdated(e){this.layout.CloneFrozenAnnotation(e)}RemoveAnnotation(e){for(let t=0;t<this.active_sheet.annotations.length;t++)if(e===this.active_sheet.annotations[t]){this.active_sheet.annotations.splice(t,1),this.layout.RemoveAnnotation(e),this.grid_events.Publish({type:"annotation",annotation:e,event:"delete"});return}}RemoveAnnotationNodes(){this.headless||this.layout.RemoveAnnotationNodes()}Serialize(e={}){return this.active_sheet.selection=JSON.parse(JSON.stringify(this.primary_selection)),this.active_sheet.scroll_offset=this.layout.scroll_offset,super.Serialize(e)}ShowHeaders(e=!0){this.ExecCommand({key:17,show:e})}FromImportData(e,t=!1){this.RemoveAnnotationNodes();let r=e.sheets,i=r.map(()=>W.Blank(this.model.theme_style_properties).toJSON()),o;if(typeof e.active_tab=="number")o=i[e.active_tab]?.id;else for(let a=0;a<e.sheets.length;a++)if(!e.sheets[a].hidden){o=i[a].id;break}this.UpdateSheets(i,!0,o);let n={};this.model.macro_functions.clear(),this.ClearSelection(this.primary_selection),this.model.tables.clear();for(let a=0;a<r.length;a++){let s=this.model.sheets.list[a];s.ImportData(r[a]),n[s.name]=s.id;for(let l of r[a].cells)l.table&&(l.table.area.start.sheet_id=s.id,this.model.tables.set(l.table.name.toLowerCase(),l.table));for(let l of this.model.tables.values())this.UpdateTableColumns(l)}if(this.model.sheets.UpdateIndexes(),this.model.named_ranges.Reset(),this.model.named_expressions.clear(),e.names){for(let a of Object.keys(e.names)){let s=this.model.named_ranges.ValidateNamed(a);if(!s){console.warn(`invalid name: ${a}`);continue}let l=e.names[a];if(typeof l!="number"){let d=this.parser.Parse(l);if(d.expression)if(d.expression.type==="range"){let u=n[d.expression.start.sheet||""];u&&(d.expression.start.sheet_id=u,this.model.named_ranges.SetName(s,new y(d.expression.start,d.expression.end),!1))}else if(d.expression.type==="address"){let u=n[d.expression.sheet||""];u&&(d.expression.sheet_id=u,this.model.named_ranges.SetName(s,new y(d.expression),!1))}else{let u=d.expression;this.parser.Walk(u,h=>h.type==="address"||h.type==="range"?(h.type==="range"&&(h=h.start),h.sheet_id||(h.sheet_id=n[h.sheet||""]||0),!1):!0),this.model.named_expressions.set(s,u)}}}this.model.named_ranges.RebuildList()}for(let a of this.active_sheet.annotations)this.AddAnnotation(a,!0);this.ActivateSheetTasks(),this.QueueLayoutUpdate(),this.StyleDefaultFromTheme(),t&&this.Repaint(!1,!1),this.tab_bar&&this.tab_bar.Update()}NextSheet(e=1){if(this.model.sheets.length===1)return;let t=this.model.sheets.list.map((r,i)=>({sheet:r,index:i})).filter(r=>r.sheet.visible);if(t.length!==1){for(let r=0;r<t.length;r++)if(t[r].sheet===this.active_sheet){let i=(r+e)%t.length;for(;i<0;)i+=t.length;this.ActivateSheet(t[i].index);return}}}UpdateSheets(e,t=!1,r){if(super.UpdateSheets(e,t,r),this.RemoveAnnotationNodes(),this.ClearSelection(this.primary_selection),e[0]&&e[0].primary_selection){let i=e[0].primary_selection;i.empty||this.Select(this.primary_selection,new y(i.area.start,i.area.end),i.target)}else if(!this.active_sheet.selection.empty){let i=this.active_sheet.selection;this.Select(this.primary_selection,new y(i.area.start,i.area.end),i.target)}this.layout.ClearLayoutCaches();for(let i of this.model.sheets.list)for(let o of i.annotations)this.AddAnnotation(o,!0,i===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()}UpdateLayout(){this.layout.UpdateTiles(),this.render_tiles=this.layout.VisibleTiles(),this.Repaint(!0)}UpdateTheme(e=!1,t){if(!e)for(let i of Object.keys(this.theme))delete this.theme[i];let r=JSON.parse(JSON.stringify(ut));this.view_node&&(r={...Nr(this.view_node)}),r={...this.theme,...r,...t},Object.assign(this.theme,r),this.StyleDefaultFromTheme(),this.active_sheet.UpdateDefaultRowHeight(),this.active_sheet.FlushCellStyles(),this.layout.ApplyTheme(this.theme),e||(this.UpdateLayout(),this.overlay_editor?.UpdateScale(this.layout.scale),this.Repaint(!0,!0,!0))}Initialize(e,t=!1){if(!this.tile_renderer||!this.selection_renderer)return;this.view_node=e,this.UpdateTheme(!0);let i=e.querySelector(".treb-spreadsheet-body").querySelector("div");this.options.formula_bar&&(this.autocomplete||(this.autocomplete=new et({theme:this.theme,container:i})),this.InitFormulaBar(e,this.autocomplete)),this.options.tab_bar&&(this.tab_bar=new kt(this.layout,this.model,this.view,this.options,e),this.tab_bar.Subscribe(o=>{switch(o.type){case"cancel":break;case"scale":{let n=this.layout.scale;if(n=Math.round(o.value*1e3)/1e3,n=Math.min(2,Math.max(n,.5)),this.options.persist_scale_key&&localStorage.setItem(this.options.persist_scale_key,JSON.stringify({scale:n})),this.scale=n,o.keep_focus)return}break;case"reorder-sheet":this.ReorderSheet(o.index,o.move_before);break;case"delete-sheet":this.DeleteSheet();break;case"add-sheet":this.AddSheet();break;case"rename-sheet":this.RenameSheet(o.sheet,o.name);break;case"activate-sheet":this.ActivateSheetID(o.sheet.id);break}this.SelectingArgument()||this.Focus()})),this.container=i,this.container.classList.add("treb-grid"),re.is_mac&&re.is_safari&&this.container.classList.add("safari"),this.container.setAttribute("tabindex","-1"),this.layout.Initialize(i,{scroll:()=>this.OnScroll(),dropdown:o=>this.OnDropdownSelect(o),sort:(o,n,a)=>{let s=this.model.tables.get(o.toLowerCase());s&&this.SortTable(s,{column:n,asc:a})},focus:()=>this.Focus()},this.options.scrollbars),this.selection_renderer.Initialize(),this.layout.UpdateTiles(),this.autocomplete||(this.autocomplete=new et({theme:this.theme,container:i})),this.InitOverlayEditor(this.autocomplete),this.AttachListeners(),this.render_tiles=this.layout.VisibleTiles(),t||(this.tab_bar?.Update(),this.Repaint(!0))}MergeCells(e){!e&&this.primary_selection.empty||(this.layout.HideDropdownCaret(),this.ExecCommand({key:9,area:e||this.primary_selection.area}))}UnmergeCells(e){!e&&this.primary_selection.empty||(this.layout.HideDropdownCaret(),this.ExecCommand({key:10,area:e||this.primary_selection.area}))}Focus(e=""){re.is_mobile?this.container?.focus():this.overlay_editor?.Focus(e)}SetValidation(e,t,r){if(!e){if(this.primary_selection.empty)throw new Error("invalid target in set validation");e=this.primary_selection.target}let i={key:25,area:e,error:r};t&&(Array.isArray(t)?i.list=t:typeof t=="object"&&t.start&&t.end&&V(t.start)&&V(t.end)&&(i.range=t)),this.ExecCommand(i),!this.primary_selection.empty&&(!e.sheet_id||e.sheet_id===this.active_sheet.id)&&this.primary_selection.target.row===e.row&&this.primary_selection.target.column===e.column&&requestAnimationFrame(()=>this.Select(this.primary_selection,this.primary_selection.area,this.primary_selection.target))}SetName(e,t,r){let i=this.model.named_ranges.ValidateNamed(e);if(!i)throw new Error("invalid name");let o=e.trim().toUpperCase();if(this.autocomplete_matcher){for(let a of Object.keys(this.autocomplete_matcher.function_map))if(o===a.toUpperCase()){if(t||r)throw new Error("name already defined");break}}e=i;let n={key:16,name:e};if(t)V(t)&&(t=new y(t)),t.start.sheet_id||(t=new y({...t.start,sheet_id:this.active_sheet.id},t.end)),n.area=new y(t.start,t.end);else if(r){let a=this.parser.Parse(r);if(a.valid&&a.expression)this.parser.Walk(a.expression,s=>{if(s.type==="address"||s.type==="range"){if(s.type==="range"&&(s=s.start),!s.sheet_id&&s.sheet){let l=this.model.sheets.Find(s.sheet);l&&(s.sheet_id=l.id)}return s.sheet_id||(s.sheet_id=this.active_sheet.id),!1}return!0}),n.expression=a.expression;else throw new Error("invalid expression")}this.ExecCommand(n)}SelectAll(){this.Select(this.primary_selection,new y({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(r=>!!r).map(r=>V(r)?new y(r):new y(r.start,r.end));if(e.nodes?.length){if(!this.external_editor){let r=new Vt(this.model,this.view);this.external_editor=r,r.Subscribe(i=>this.HighlightDependencies(r.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 r=0;if(V(e)?r=e.sheet_id||this.active_sheet.id:r=e.start.sheet_id||this.active_sheet.id,r)return this.model.sheets.Find(r)?.GetCellStyle(e,t)||void 0}GetRange(e,t){if(V(e)){let i=this.model.sheets.Find(e.sheet_id||this.active_sheet.id);return i?t==="formula"?i.cells.RawValue(e):t==="formatted"?i.GetFormattedRange(e):i.cells.GetRange(e):void 0}let r=this.model.sheets.Find(e.start.sheet_id||this.active_sheet.id);if(r)return t==="formula"?r.cells.RawValue(e.start,e.end):t==="formatted"?r.GetFormattedRange(e.start,e.end):r.cells.GetRange(e.start,e.end)}SetRange(e,t,r={}){let{recycle:i,transpose:o,array:n,r1c1:a}=r;if(r.argument_separator){let s={argument_separator:this.parser.argument_separator,decimal_mark:this.parser.decimal_mark},l=!1;if(r.argument_separator===","&&this.parser.argument_separator!==","&&(this.parser.argument_separator=",",this.parser.decimal_mark=".",l=!0),r.argument_separator===";"&&this.parser.argument_separator!==";"&&(this.parser.argument_separator=";",this.parser.decimal_mark=",",l=!0),l){let d=u=>{if(typeof u=="string"&&u[0]==="="){let h=this.parser.Parse(u);h.expression&&(u="="+this.parser.Render(h.expression,{missing:"",convert_decimal:s.decimal_mark,convert_argument_separator:s.argument_separator}))}return u};Array.isArray(t)?t=t.map(u=>Array.isArray(u)?u.map(h=>d(h)):d(u)):t=d(t)}this.parser.argument_separator=s.argument_separator,this.parser.decimal_mark=s.decimal_mark}if(t=this.UntranslateData(t),!Array.isArray(t))i||n?this.ExecCommand({key:6,area:e,value:t,array:n,r1c1:a}):this.ExecCommand({key:6,area:e.start,value:t,array:n,r1c1:a});else{if(!ir(t))if(i){let s=e.entire_column?this.active_sheet.rows:e.rows,l=e.entire_row?this.active_sheet.columns:e.columns,d=s*l;if(d>t.length){let h=t.slice(0),m=Math.ceil(d/h.length);for(let f=1;f<m;f++)h=h.concat(t.slice(0));t=h}let u=[];for(let h=0,m=0;h<l;h++,m+=s)u[h]=t.slice(m,m+s);t=u}else t=[t];o&&(t=this.Transpose(t)),this.ExecCommand({key:6,area:e,value:t,array:n,r1c1:a})}!this.primary_selection.empty&&e.Contains(this.primary_selection.target)&&this.UpdateFormulaBarFormula()}ApplyStyle(e,t={},r=!0){if(!e){if(this.primary_selection.empty)return;e=this.primary_selection.area}W.UpdateStyle(t),this.ExecCommand({key:7,area:e,style:t,delta:r}),this.UpdateFormulaBarFormula()}GetSelection(){return this.primary_selection}Update(e=!1,t){this.DelayedRender(e,t)}ApplyBorders2(e,t="none",r,i=1){if(!e){if(this.primary_selection.empty)return;e=this.primary_selection.area}t==="none"&&(i=0),this.ExecCommand({key:8,color:r,area:e,borders:t,width:i})}Batch(e,t=!0){this.batch=!0,e(),this.batch=!1;let r=this.batch_events.slice(0);return this.batch_events=[],t&&this.DelayedRender(!1),r}ScrollTo(e,t=!0,r=!0,i=!1){this.layout.ScrollTo(e,t,r,i)}ScrollIntoView(e){this.options.scrollbars&&this.layout.ScrollIntoView(e)}GetScrollOffset(){return this.layout.GetScrollOffset()}ScrollOffset(e){if(e)this.layout.scroll_offset=e;else return this.layout.scroll_offset}TranslateInternal(e,t){let r=this.parser.Parse(e);if(r.expression){let i=!1;if(this.parser.Walk(r.expression,o=>{if(o.type==="call"){let n=t[o.name.toUpperCase()];n&&(i=!0,o.name=n)}return!0}),i)return"="+this.parser.Render(r.expression,{missing:""})}return e}RenameSheetInternal(e,t){super.RenameSheetInternal(e,t),this.tab_bar?.Update()}TranslateFunction(e){return this.language_map?this.TranslateInternal(e,this.language_map):e}UntranslateFunction(e){return this.reverse_language_map?this.TranslateInternal(e,this.reverse_language_map):e}UntranslateData(e){return Array.isArray(e)?ir(e)?e.map(t=>t.map(r=>r&&typeof r=="string"&&r[0]==="="?this.UntranslateFunction(r):r)):e.map(t=>t&&typeof t=="string"&&t[0]==="="?this.UntranslateFunction(t):t):(e&&typeof e=="string"&&e[0]==="="&&(e=this.UntranslateFunction(e)),e)}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}}AutoSizeColumn(e,t,r=!0){if(!this.tile_renderer)return;let i=12,o=4*2;r||(i=e.GetColumnWidth(t));for(let n=0;n<e.cells.rows;n++){let a=e.CellData({row:n,column:t}),s=a.formatted||"";if(typeof s!="string"&&(s=s.map(l=>l.text).join("")),s&&s.length){let l=this.tile_renderer.MeasureText(s,L.Font(a.style||{}));i=Math.max(i,Math.ceil(l.width)+o)}}e.SetColumnWidth(t,i)}EnsureActiveSheet(e=!1){for(let t of this.model.sheets.list)if(t===this.active_sheet){e&&this.ActivateSheetInternal({key:21,id:t.id,force:!0});return}this.ActivateSheetInternal({key:21,index:0})}ActivateSheetInternal(e){let t=this.SelectingArgument(),r=this.ResolveSheet(e)||this.model.sheets.list[0];if(this.active_sheet===r&&!e.force)return;if(!r.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 i=this.active_sheet;this.RemoveAnnotationNodes(),this.active_sheet=r,t?this.RenderSelections():(this.ClearSelection(this.primary_selection),r.selection&&!r.selection.empty&&this.Select(this.primary_selection,new y(r.selection.area.start,r.selection.area.end),r.selection.target));let o=this.active_sheet.annotations;for(let n of o)this.AddAnnotation(n,!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:i,activate:this.active_sheet}),this.tab_bar&&this.tab_bar.Update(),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,r=()=>{e.complete?this.UpdateLayout():t++<5&&setTimeout(()=>r(),10)};r()}}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=(n="")=>{let a=n.toLowerCase();for(let s of this.model.sheets.list)if(s.name.toLowerCase()===a)return s.id;return this.active_sheet.id},r=n=>{for(let a of this.model.sheets.list)if(a.id===n)return a;return this.active_sheet},i,o=this.parser.Parse(e);if(o.expression)switch(o.expression.type){case"address":o.expression.sheet_id=t(o.expression.sheet),i=new y(o.expression);break;case"range":o.expression.start.sheet_id=t(o.expression.start.sheet),i=new y(o.expression.start,o.expression.end);break;case"identifier":i=this.model.named_ranges.Get(o.expression.name),i||this.primary_selection.empty||this.SetName(o.expression.name.toUpperCase(),this.primary_selection.area);break;default:break}if(i){let n=r(i.start.sheet_id);if(n.columns>=i.end.column&&n.rows>=i.end.row){this.ExecCommand({key:5,area:i});return}else console.warn("address out of range")}}this.UpdateAddressLabel(),this.Focus()}InitFormulaBar(e,t){this.formula_bar=new Dt(e,this.model,this.view,this.options,t),this.formula_bar.autocomplete_matcher=this.autocomplete_matcher,this.formula_bar.Subscribe(r=>{switch(r.type){case"address-label-event":this.HandleAddressLabelEvent(r.text);break;case"stop-editing":this.editing_state=0;break;case"start-editing":this.editing_state=2,this.editing_cell={...this.primary_selection.target};break;case"discard":if(this.editing_state=0,this.editing_annotation){this.ClearAdditionalSelections(),this.ClearSelection(this.active_selection);let i=this.editing_annotation.view[this.view_index]?.node;i&&i.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 i=this.editing_annotation;this.ClearAdditionalSelections(),this.ClearSelection(this.active_selection),i.data.formula=r.value?this.FixFormula(r.value):"";let o=this.editing_annotation.view[this.view_index]?.node;o&&o.focus(),this.grid_events.Publish({type:"annotation",event:"update",annotation:i}),this.editing_annotation=void 0,this.DelayedRender();return}this.container&&this.Focus(),this.SetInferredType(this.primary_selection,r.value,r.array),this.ClearAdditionalSelections(),this.ClearSelection(this.active_selection),this.options.repaint_on_cell_change&&this.DelayedRender(!1,this.primary_selection.area),r.event&&this.OverlayKeyDown(r.event);break;case"update":r.dependencies&&this.HighlightDependencies(r.dependencies);break}})}InitOverlayEditor(e){this.container&&(this.overlay_editor=new Mt(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,r=!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,r)}))}Repaint(e=!1,t=!1,r=!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.layout_token=0,this.tile_renderer.OverflowDirty(t),e)for(let s of this.layout.grid_tiles)for(let l of s)l.dirty=!0;let i=this.render_tiles.start,o=this.render_tiles.end,n=[];for(let s=i.row;s<=o.row;s++)n.push(s);let a=[];for(let s=i.column;s<=o.column;s++)a.push(s);i.row>0&&this.active_sheet.freeze.rows&&n.push(0),i.column>0&&this.active_sheet.freeze.columns&&a.push(0);for(let s of a)for(let l of n){let d=this.layout.grid_tiles[s][l];(e||d.dirty||d.needs_full_repaint)&&(this.tile_renderer.Render(d),d.dirty=d.needs_full_repaint=!1)}this.tile_renderer.RenderHeaders(this.render_tiles,r),this.tile_renderer.RenderCorner(),this.RenderSelections()}MouseMove_RowHeader(e){let t=this.layout.CoordinateToRowHeader(e.offsetY),r=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 i=-1;e.offsetY-r.top<=this.RESIZE_PIXEL_BUFFER&&t.row>0?i=t.row-1:r.bottom-e.offsetY<=this.RESIZE_PIXEL_BUFFER&&(i=t.row),i>=0?this.layout.ResizeCursor("row"):this.cell_resize.row&&(this.cell_resize.row=-1,this.layout.ResizeCursor()),this.cell_resize.row=i}MouseMove_ColumnHeader(e){let t=this.layout.CoordinateToColumnHeader(e.offsetX),r=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 i=-1;e.offsetX-r.left<=this.RESIZE_PIXEL_BUFFER&&t.column>0?i=t.column-1:r.right-e.offsetX<=this.RESIZE_PIXEL_BUFFER&&(i=t.column),i>=0?this.layout.ResizeCursor("column"):this.cell_resize.column&&(this.cell_resize.column=-1,this.layout.ResizeCursor()),this.cell_resize.column=i}MouseDown_RowHeader(e){if(e.button!==0)return;e.stopPropagation(),e.preventDefault();let t=this.layout.CoordinateToRowHeader(e.offsetY),r=this.layout.row_header_cover.getBoundingClientRect(),i={x:r.left,y:r.top};if(this.cell_resize.row>=0){let o=this.cell_resize.row,n=i.y+e.offsetY;if(this.layout.HideDropdownCaret(),this.IsDoubleClick({row:o,column:-1})){let m=[o];if(!this.primary_selection.empty&&this.primary_selection.area.rows>1&&this.primary_selection.area.start.column===1/0&&this.primary_selection.area.ContainsRow(o)){let f=this.active_sheet.RealArea(this.primary_selection.area);m=[];for(let p=f.start.row;p<=f.end.row;p++)m.push(p)}this.ExecCommand({key:3,row:m});return}let a=this.layout.RowHeight(o),s=a,l=this.layout.OffsetCellAddressToRectangle({row:o,column:0}),d=i.y+l.bottom;this.layout.ShowTooltip({left:!0,text:`${s}px`,x:Math.round(r.right+10),y:d});let u=[],h=[];for(let m of this.active_sheet.annotations){let f=l.bottom-1;if(!m.scaled_rect||m.scaled_rect.bottom<f)continue;let p=[...this.layout.GetFrozenAnnotations(m)],_=m.view[this.view_index]?.node;_&&p.push(_),f<=m.scaled_rect.top&&m.data.move_with_cells?u.push({annotation:m,y:m.scaled_rect.top,nodes:p}):f>m.scaled_rect.top&&m.data.resize_with_cells&&h.push({annotation:m,height:m.scaled_rect.height,nodes:p})}_e(this.layout.mask,"row-resize",m=>{let f=Math.max(-a,Math.round(m.offsetY-n));if(f+a!==s){s=f+a,this.layout.SetRowHeight(o,s),this.layout.UpdateTooltip({text:`${s}px`,y:d+f});for(let{annotation:p,y:_}of u)p.scaled_rect&&(p.scaled_rect.top=_+f);for(let{annotation:p,height:_}of h)p.scaled_rect&&(p.scaled_rect.height=_+f);requestAnimationFrame(()=>{for(let{annotation:p,nodes:_}of h)if(p.scaled_rect)for(let b of _)p.scaled_rect.ApplyStyle(b);for(let{annotation:p,nodes:_}of u)if(p.scaled_rect)for(let b of _)p.scaled_rect.ApplyStyle(b);this.layout.UpdateTileHeights(!0,o),this.Repaint(!1,!0),this.layout.UpdateAnnotation(this.active_sheet.annotations)})}},()=>{this.layout.HideTooltip(),requestAnimationFrame(()=>{let m=[o];if(!this.primary_selection.empty&&this.primary_selection.area.rows>1&&this.primary_selection.area.start.column===1/0&&this.primary_selection.area.ContainsRow(o)){let f=this.active_sheet.RealArea(this.primary_selection.area);m=[];for(let p=f.start.row;p<=f.end.row;p++)m.push(p)}this.layout.SetRowHeight(o,a),this.ExecCommand({key:3,row:m,height:s/this.scale});for(let{annotation:f}of u)f.scaled_rect&&(f.data.layout=this.layout.RectToAnnotationLayout(f.scaled_rect));for(let{annotation:f}of h){f.scaled_rect&&(f.data.layout=this.layout.RectToAnnotationLayout(f.scaled_rect));let p=f.view[this.view_index];p&&p.resize_callback&&p.resize_callback.call(void 0)}})})}else{let o=this.SelectingArgument()?this.active_selection:this.primary_selection;if(this.SelectingArgument()||this.Focus(),e.shiftKey&&!o.empty){let n=o.target;this.Select(o,new y(o.target,t,!0),void 0,!0),t=n}else this.Select(o,new y(t),{column:0,row:t.row});this.RenderSelections(),_e(this.layout.mask,[],n=>{let a=this.layout.CoordinateToRowHeader(n.offsetY-i.y),s=new y(a,t,!0);(o.empty||!s.Equals(o.area))&&(this.Select(o,s,void 0,!0),this.RenderSelections())},()=>{})}}MouseDown_ColumnHeader(e){if(e.button!==0)return;e.stopPropagation(),e.preventDefault();let t=this.layout.CoordinateToColumnHeader(e.offsetX),r=this.layout.column_header_cover.getBoundingClientRect(),i={x:r.left,y:r.top};if(this.cell_resize.column>=0){let o=this.cell_resize.column,n=i.x+e.offsetX;if(this.layout.HideDropdownCaret(),this.IsDoubleClick({row:-1,column:o})){let m=[o];if(!this.primary_selection.empty&&this.primary_selection.area.columns>1&&this.primary_selection.area.start.row===1/0&&this.primary_selection.area.ContainsColumn(o)){let f=this.active_sheet.RealArea(this.primary_selection.area);m=[];for(let p=f.start.column;p<=f.end.column;p++)m.push(p)}this.ExecCommand({key:4,column:m});return}let a=this.layout.ColumnWidth(o),s=a,l=this.layout.OffsetCellAddressToRectangle({row:0,column:o}),d=i.x+l.right;this.layout.ShowTooltip({up:!0,text:`${s}px`,x:d,y:Math.round(r.bottom+10)});let u=[],h=[];for(let m of this.active_sheet.annotations){let f=l.right-1;if(!m.scaled_rect||m.scaled_rect.right<f)continue;let p=[...this.layout.GetFrozenAnnotations(m)],_=m.view[this.view_index]?.node;_&&p.push(_),f<=m.scaled_rect.left&&m.data.move_with_cells?u.push({annotation:m,x:m.scaled_rect.left,nodes:p}):f>m.scaled_rect.left&&m.data.resize_with_cells&&h.push({annotation:m,width:m.scaled_rect.width,nodes:p})}_e(this.layout.mask,"column-resize",m=>{let f=Math.max(-a,Math.round(m.offsetX-n));if(f+a!==s){s=f+a,this.layout.UpdateTooltip({text:`${s}px`,x:d+f}),this.layout.SetColumnWidth(o,s);for(let{annotation:p,x:_}of u)p.scaled_rect&&(p.scaled_rect.left=_+f);for(let{annotation:p,width:_}of h)p.scaled_rect&&(p.scaled_rect.width=_+f);requestAnimationFrame(()=>{for(let{annotation:p,nodes:_}of h)if(p.scaled_rect)for(let b of _)p.scaled_rect.ApplyStyle(b);for(let{annotation:p,nodes:_}of u)if(p.scaled_rect)for(let b of _)p.scaled_rect.ApplyStyle(b);this.layout.UpdateTileWidths(!0,o),this.Repaint(!1,!0)})}},()=>{this.layout.HideTooltip(),requestAnimationFrame(()=>{let m=[o];if(!this.primary_selection.empty&&this.primary_selection.area.columns>1&&this.primary_selection.area.start.row===1/0&&this.primary_selection.area.ContainsColumn(o)){let f=this.active_sheet.RealArea(this.primary_selection.area);for(let p=f.start.column;p<=f.end.column;p++)m.push(p)}this.ExecCommand({key:4,column:m,width:s/this.scale});for(let{annotation:f}of u)f.scaled_rect&&(f.data.layout=this.layout.RectToAnnotationLayout(f.scaled_rect));for(let{annotation:f}of h){f.scaled_rect&&(f.data.layout=this.layout.RectToAnnotationLayout(f.scaled_rect));let p=f.view[this.view_index];p&&p.resize_callback&&p.resize_callback.call(void 0)}})})}else{let o=this.SelectingArgument()?this.active_selection:this.primary_selection;if(this.SelectingArgument()||this.Focus(),e.shiftKey&&!o.empty){let n=o.target;this.Select(o,new y(o.target,t,!0),void 0,!0),t=n}else this.Select(o,new y(t),{row:0,column:t.column});this.RenderSelections(),_e(this.layout.mask,[],n=>{let a=this.layout.CoordinateToColumnHeader(n.offsetX-i.x),s=new y(a,t,!0);(o.empty||!s.Equals(o.area))&&(this.Select(o,s,void 0,!0),this.RenderSelections())})}}HoverCell(e,t){let r=this.active_sheet.cells.GetCell(e,!1);if(r?.table&&r.table.area.start.row===e.row&&r.table.sortable!==!1?(this.hover_data.table_header=!0,this.layout.ShowTableSortButton(r.table,e.column-r.table.area.start.column,e)):(this.hover_data.table_header&&this.layout.HideTableSortButton(),this.hover_data.table_header=!1),r?.merge_area){let i=r.merge_area;e=i.start,r=this.active_sheet.cells.GetCell(e,!1),e={row:i.start.row,column:i.end.column}}if(r?.note){let i=this.options.markdown?Ee.instance.HTML(Ee.instance.Parse(r.note)):void 0;this.layout.ShowNote(r.note,e,t,i),this.hover_data.note=!0}else this.hover_data.note&&(this.layout.HideNote(),this.hover_data.note=!1);r?.hyperlink?(this.layout.ShowTitle("Link: "+r.hyperlink,e),this.hover_data.link=!0,this.hover_data.cell=r):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},r;if(this.overlay_editor?.editing||(r=this.layout.PointToAddress_Grid(t),(!this.hover_data.address||this.hover_data.address.row!==r.row||this.hover_data.address.column!==r.column)&&this.HoverCell(r,e)),this.hover_data.link&&r&&(this.hover_data.point=t,this.hover_data.handler||(this.hover_data.handler=requestAnimationFrame(()=>{let o=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);o!==!!this.hover_data.pointer&&(this.hover_data.pointer=o,o?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 i=this.selection_renderer.nub_rectangle.Contains(e.offsetX,e.offsetY);i!==this.nub_select_flag&&(i?this.layout.grid_cover.classList.add("nub-select"):this.layout.grid_cover.classList.remove("nub-select"),this.nub_select_flag=i)}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,r){let i=this.layout.CellAddressToRectangle(e);r.merge_area&&(i=i.Combine(this.layout.CellAddressToRectangle(r.merge_area.end)));let o=t.x-i.left,n=t.y-i.top,a=r.renderer_data?.text_data?.strings||[];for(let s of a)for(let l of s)if(typeof l.left=="number"&&typeof l.top=="number"&&typeof l.width=="number"&&typeof l.height=="number"&&o>=l.left&&n>=l.top&&o<=l.left+l.width&&n<=l.top+l.height)return!0;return!1}MouseDown_Grid(e){if(e.button!==0)return;e.stopPropagation(),e.preventDefault();let t=this.SelectingArgument();!t&&this.additional_selections.length&&this.ClearAdditionalSelections(),(!t||!this.formula_bar?.selecting&&!this.external_editor?.selecting)&&this.Focus(),this.overlay_editor?.editing&&!this.overlay_editor?.selecting&&this.DismissEditor();let r={x:e.offsetX,y:e.offsetY},i=this.layout.PointToAddress_Grid(r),o=t?this.active_selection:this.primary_selection;if(!t&&this.IsDoubleClick(i)){re.is_mobile&&this.overlay_editor?.edit_node?.focus(),this.OverlayEditCell({target:i,area:new y(i)},!1);return}let n=this.layout.grid_cover.getBoundingClientRect(),a={x:n.left,y:n.top},s=[],l;if(e.shiftKey&&!o.empty){let u=o.target;this.Select(o,new y(i,o.target,!0),void 0,!0),i=u}else if(this.nub_select_flag)i=o.area.TopLeft(),s.push("nub-select"),l=this.active_sheet.RealArea(o.area);else{let u=i,h=this.active_sheet.CellData(u);if(h.merge_area&&(u=h.merge_area.start,h=this.active_sheet.CellData(h.merge_area.start)),h.hyperlink&&this.PointInTextPart(u,r,h)){let m=h.hyperlink;Promise.resolve().then(()=>{this.grid_events.Publish({type:"cell-event",data:{type:"hyperlink",data:m}})}),this.ClearDoubleClick();return}if(h.click_function){let m=this.layout.CellAddressToRectangle(u);h.merge_area&&(m=m.Combine(this.layout.CellAddressToRectangle(h.merge_area.end)));let f=h.click_function.call(this,{cell:h,x:r.x-m.left,y:r.y-m.top,width:m.width,height:m.height,scale:this.layout.scale});if(f.value&&this.ExecCommand({key:6,value:f.value,area:u}),f.block_selection){this.ClearDoubleClick(),!this.primary_selection.empty&&this.primary_selection.target.row===u.row&&this.primary_selection.target.column===u.column&&this.UpdateFormulaBarFormula();return}}this.Select(o,new y(i),i)}this.RenderSelections(),t&&this.UpdateSelectedArgument(o);let d=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);_e(this.layout.mask,s,u=>{let h={x:u.offsetX-a.x,y:u.offsetY-a.y},m=d.Clamp(h.x,h.y),f=this.layout.PointToAddress_Grid(m,!0),p=this.layout.scroll_reference_node,_=!1;this.container&&this.options.scrollbars&&(h.x<p.scrollLeft?(p.scrollLeft-=25,_=!0):h.x>p.scrollLeft+this.container.clientWidth&&(p.scrollLeft+=25,_=!0),h.y<p.scrollTop?(p.scrollTop-=25,_=!0):h.y>p.scrollTop+this.container.clientHeight&&(p.scrollTop+=25,_=!0),_&&(n=this.layout.grid_cover.getBoundingClientRect(),a.x=n.left+document.body.scrollLeft,a.y=n.top+document.body.scrollTop));let b=new y(f,i,!0);if(l&&(b=l.Clone(),b.ConsumeAddress(f),b.rows!==l.rows&&b.columns!==l.columns)){let v={rows:f.row>l.end.row?f.row-l.end.row:l.start.row-f.row,columns:f.column>l.end.column?f.column-l.end.column:l.start.column-f.column};v.rows>=v.columns?b=new y({row:b.start.row,column:l.start.column},{row:b.end.row,column:l.end.column}):b=new y({row:l.start.row,column:b.start.column},{row:l.end.row,column:b.end.column})}(o.empty||!b.Equals(o.area))&&(this.Select(o,b,void 0,!0),this.RenderSelections(),t?this.UpdateSelectedArgument(o):!o.empty&&!o.area.entire_sheet&&(o.area.entire_column?this.UpdateAddressLabel(void 0,o.area.columns+"C"):o.area.entire_row?this.UpdateAddressLabel(void 0,o.area.rows+"R"):o.area.count>1?this.UpdateAddressLabel(void 0,o.area.rows+"R x "+o.area.columns+"C"):this.UpdateAddressLabel(o)))},()=>{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(o.area,l)})}Transpose(e){let t=[],r=e.length,i=e[0].length;for(let o=0;o<i;o++){t[o]=[];for(let n=0;n<r;n++)t[o][n]=e[n][o]}return t}RecycleNubArea(e,t){if(e.Equals(t))return;let r=[];for(let u=0;u<t.rows;u++){r[u]=[];for(let h=0;h<t.columns;h++){let m={row:t.start.row+u,column:t.start.column+h};r[u][h]=this.active_sheet.CellData(m)}}if(r[0][0].area&&r[0][0].area.Equals(t)){this.ExecCommand({key:6,value:r[0][0].value,array:!0,area:e});return}if(r[0][0].table&&t.Equals(new y(r[0][0].table.area.start,r[0][0].table.area.end))){let u=r[0][0].table,h=u.sortable,m=u.totals_row,f=u.theme;this.ExecCommand([{key:29,table:u},{key:28,area:e,sortable:h,totals:m,theme:f}]);return}let i=[],o=[],n=t.columns,a=e.rows,s=!1,l=!1;e.columns===t.columns?s=e.start.row<t.start.row:(n=t.rows,a=e.columns,s=e.start.column<t.start.column,r=this.Transpose(r),l=!0);for(let u=0;u<a;u++)i[u]=[],o[u]=[];for(let u=0;u<n;u++){let h=0;if(r.length>1){h=1;let m=[],f=[];for(let p=0;p<r.length;p++){let _=r[p][u];_.ValueIsNumber()&&(f.push(p),m.push(_.value))}if(m.length>1){let p=m.slice(1).map((_,b)=>_-m[b]);p.every(_=>_===p[0])&&(h=p[0])}m.length&&(h+=m[m.length-1]-m[0])}for(let m=0;m<r.length;m++){let f,p=r[m][u];if(p.ValueIsFormula()){let x=this.parser.Parse(p.value);x.expression&&x.full_reference_list?.length&&(f=x.expression)}let _=0,b=m,v=r.length,g=0,w=h;s&&(b=a-r.length+m,v=-r.length,w=-h);for(let x=b;x>=0&&x<a;x+=v,_+=v,g+=w){if(f)i[x][u]="="+this.parser.Render(f,{offset:{rows:_,columns:0}});else{let S=r[m][u];S.ValueIsNumber()?i[x][u]=S.value+g:i[x][u]=S.value}o[x][u]=r[m][u].style||{}}}}let d=[{key:6,value:l?this.Transpose(i):i,array:!1,area:e}];l&&(o=this.Transpose(o));for(let u=0;u<o.length;u++)for(let h=0;h<o[u].length;h++)d.push({key:7,area:{row:u+e.start.row,column:h+e.start.column},style:o[u][h],delta:!1});this.ExecCommand(d)}UpdateSelectedArgument(e){let t=this.active_sheet.CellData(e.area.start),r=new y(t.merge_area?t.merge_area.start:e.target),i=this.model.named_ranges.MatchSelection(e.area,r);if(!i&&(i=e.area.spreadsheet_label,t.merge_area&&t.merge_area.Equals(e.area)&&(i=y.CellAddressToLabel(t.merge_area.start)),this.external_editor_config||this.active_sheet.id!==this.editing_cell.sheet_id)){let o=this.active_sheet.name;ze.test(o)?i=`'${o}'!${i}`:i=`${o}!${i}`}if(this.overlay_editor?.editing&&this.overlay_editor.selecting)this.overlay_editor.InsertReference(i,0);else if(this.formula_bar&&this.formula_bar.selecting)this.formula_bar.InsertReference(i,0);else if(this.external_editor_config&&(this.external_editor?.active&&(this.external_editor.FocusEditor(),this.external_editor.InsertReference(i,0)),this.external_editor_config.update)){let o=this.external_editor_config.update.call(0,i);o&&Array.isArray(o)&&this.HighlightDependencies(o.filter(n=>!!n).map(n=>V(n)?new y(n):new y(n.start,n.end)))}}SelectingArgument(){return this.overlay_editor?.editing&&this.overlay_editor?.selecting||this.formula_bar&&this.formula_bar.selecting||!!this.external_editor_config}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,d=e.key==="Enter"&&e.ctrlKey&&e.shiftKey;this.SetInferredType(this.overlay_editor.selection,l,d)}this.DismissEditor(),this.options.repaint_on_cell_change&&this.DelayedRender(!1,this.overlay_editor?.selection.area||void 0);break}let r=this.SelectingArgument();if(this.formula_bar&&this.formula_bar.focused&&!r||this.selected_annotation&&!r)return;let i=r?this.active_selection:this.primary_selection,o={rows:0,columns:0},n=!1,a=!1;if(e.ctrlKey||re.is_mac&&e.metaKey){switch(e.key){case"ArrowDown":case"Down":o.rows++;break;case"ArrowUp":case"Up":o.rows--;break;case"ArrowLeft":case"Left":o.columns--;break;case"ArrowRight":case"Right":o.columns++;break;case"Delete":case"Del":{e.stopPropagation(),e.preventDefault();for(let s=0;s<this.model.sheets.length;s++)if(this.model.sheets.list[s]===this.active_sheet){this.DeleteSheet(s);break}return}break;case"/":e.stopPropagation(),e.preventDefault(),this.SelectArrayOrTable();break;default:if(e.shiftKey)return}if(o.columns||o.rows)if(e.stopPropagation(),e.preventDefault(),!i.empty&&(o.columns||o.rows)){if(this.BlockSelection(i,!!e.shiftKey,o.columns,o.rows))return}else return;else{let s={},l=this.primary_selection.empty?{}:this.active_sheet.CellData(this.primary_selection.target).style||{};switch(e.key.toLowerCase()){case"b":s.bold=!l.bold;break;case"i":s.italic=!l.italic;break;case"u":s.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(s).length&&this.ApplyStyle(void 0,s)}}else switch(e.key){case"Tab":e.shiftKey?o.columns--:o.columns++,n=!0;break;case"Enter":e.shiftKey?o.rows--:o.rows++,n=!0;break;case"ArrowDown":case"Down":o.rows++,a=e.shiftKey;break;case"ArrowUp":case"Up":o.rows--,a=e.shiftKey;break;case"ArrowLeft":case"Left":o.columns--,a=e.shiftKey;break;case"ArrowRight":case"Right":o.columns++,a=e.shiftKey;break;case"Delete":case"Del":i.empty||this.DeleteSelection(i);break;case"PageUp":case"PageDown":if(e.shiftKey){this.NextSheet(e.key==="PageUp"?-1:1);break}return;case"Control":case"Shift":case"Alt":return;default:i.empty||e.key!=="Escape"&&this.OverlayEditCell(i,!0,e);return}e.stopPropagation(),e.preventDefault(),(o.rows||o.columns)&&this.AdvanceSelection(o,i,n,a,!t)}SelectArrayOrTable(){if(this.primary_selection.empty)return;let e=this.active_sheet.CellData(this.primary_selection.target);if(!(!e||!e.area&&!e.table)){if(e.area&&this.Select(this.primary_selection,e.area,e.area.start),e.table){let t=new y(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;this.selection_renderer?.RenderSelections(t,e)}BlockSelection(e,t,r,i,o=!0){if(e.empty)return!1;let n={...e.target};i>0?n.row=Math.max(n.row,e.area.end.row):i<0&&(n.row=Math.min(n.row,e.area.start.row)),r>0?n.column=Math.max(n.column,e.area.end.column):r<0&&(n.column=Math.min(n.column,e.area.start.column));let a=this.active_sheet.cells,s=a.GetCell(e.target,!1);if(!s||s.type===0&&!s.area)return!1;let l={...n};for(;;){let d={row:l.row+i,column:l.column+r};if(d.column<0||d.row<0||d.column>=this.active_sheet.columns||d.row>=this.active_sheet.rows)break;let u=!1;if(i)for(let h=e.area.start.column;!u&&h<=e.area.end.column;h++)s=a.GetCell({row:d.row,column:h},!1),u=u||!!s&&(s.type!==0||!!s.area),!u&&s&&s.merge_area&&(s=a.GetCell(s.merge_area.start,!1),u=u||!!s&&(s.type!==0||!!s.area));else for(let h=e.area.start.row;!u&&h<=e.area.end.row;h++)s=a.GetCell({row:h,column:d.column},!1),u=u||!!s&&(s.type!==0||!!s.area),!u&&s&&s.merge_area&&(s=a.GetCell(s.merge_area.start,!1),u=u||!!s&&(s.type!==0||!!s.area));if(!u)break;l=d}if(t){i?(n.row=e.target.row,n.column=e.area.start.column,l.column=e.area.end.column):(n.column=e.target.column,n.row=e.area.start.row,l.row=e.area.end.row);let d=new y(n,l,!0);this.Select(e,d,e.target,!0)}else this.Select(e,new y(l));return this.ScrollIntoView(l),this.SelectingArgument()&&this.UpdateSelectedArgument(e),o&&this.DelayedRender(),!0}DeleteSelection(e){if(e.empty)return;let t=this.active_sheet.RealArea(e.area);this.ExecCommand({key:11,area:t})}SetInferredType(e,t,r=!1,i=!0){let o=e.target||e.area.start,n=this.active_sheet.CellData(o);if(n.area){if(!r&&n.area.count>1||!e.area||!e.area.Equals(n.area)){this.Error(2);return}}else if(r){let u=!1;if(this.active_sheet.cells.Apply(e.area,h=>{h.area&&(u=!0)},!1),u){this.Error(2);return}}if(n.validation&&n.validation.error){let u;if(n.validation.type==="list"?u=n.validation.list:n.validation.type==="range"&&(u=this.GetValidationRange(n.validation.area)),u&&u.length){let h=!1;if(t){let m=t.toUpperCase();for(let f of u)if(f&&f.toString().toUpperCase()===m){t=f.toString(),h=!0;break}}if(!h){this.Error(3);return}}}n.merge_area&&(o=n.merge_area.start);let a=typeof t=="string"&&t.trim()[0]==="=",s=[];if(a&&(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||D.Equals(n.style.number_format,"General"))){let h=u.expression.name.toLowerCase(),m;switch(h){case"today":m="Short Date";break;case"now":m="Timestamp";break}m&&s.push({key:7,area:r?e.area:o,style:{number_format:m},delta:!0})}if(u.dependencies){let h,m=u.dependencies;for(let f of Object.keys(m.addresses)){let p=m.addresses[f];if(this.active_sheet.HasCellStyle({...p})){let _=this.active_sheet.CellData({...p});if(_.style&&_.style.number_format&&(!h||/%/.test(h))&&(h=D.Translate(_.style.number_format),!/%/.test(h)))break}}if(h){let f={number_format:h};s.push({key:7,area:r?e.area:o,style:f,delta:!0})}}}}let l=this.parser.Parse(t||"").expression;l?.type==="group"&&l.elements.length===1&&l.elements[0].type==="complex"&&(l=l.elements[0]);let d=l&&l.type==="complex"?{type:7,value:{real:l.real,imaginary:l.imaginary}}:be.TryParse(t);if(!a&&d.type===3){let u="",h=d.hints||{};(!n.style||!n.style.number_format||D.Equals(n.style.number_format,"General"))&&(h.Date?u="Short Date":h.Exponential?u="Exponential":h.Percent?u="Percent":h.Currency?u="Currency":(h.Grouping||h.Parens)&&(u="Accounting")),u&&s.push({key:7,area:r?e.area:o,style:{number_format:u},delta:!0})}if(s.push({key:6,area:r?e.area:o,array:r,value:a?this.UntranslateFunction(t||""):d.value}),i)this.ExecCommand(s);else return s}FixFormula(e){if(e.trim()[0]!=="=")return e;e=e.replace(/^\s+/,"");let t=!1,r=!1,i=0,o=!1,n=e.length;for(let a=0;a<n;a++){let s=e[a];if(!o)switch(s){case'"':t?e[a+1]==='"'?a++:t=!1:r||(t=!0);break;case"'":r?r=!1:t||(r=!0);break;case"\\":o=!0;break;case"(":!t&&!r&&i++;break;case")":!t&&!r&&i--;break}}for(t?e+='"':r&&(e+="'");i>0;)e+=")",i--;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,r=>{switch(r.type){case"call":r.name=this.autocomplete_matcher.NormalizeIdentifier(r.name)||r.name;break;case"identifier":this.model.named_ranges.Get(r.name)&&(r.name=r.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(D.Get(e.style.number_format).date_format){let i=De(e.value),o=i.getUTCHours()||i.getUTCMinutes()||i.getUTCSeconds()?"Timestamp":"Short Date";t=D.Get(o).Format(t)}else if(/(?:%|percent)/i.test(e.style.number_format)){let i=0,o=e.value.toString().match(/\.(.*?)$/);o&&o[1]&&(i=Math.max(0,o[1].length-2)),t=(e.value*100).toFixed(i)+"%",z.decimal_separator===","&&(t=t.replace(/\./,","))}else t&&z.decimal_separator===","&&(t=e.value.toString().replace(/\./,","));else{if(e.ValueIsBoolean())return e.value.toString().toUpperCase();e.ValueIsNumber()?t&&z.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(),z.decimal_separator===","&&(t=t.replace(/\./,","))):e.ValueIsFormula()&&(t=this.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,r){if(!this.options.in_cell_editor)return;let i=e.target||e.area.start,o=this.active_sheet.CellData(i),n;if(this.HideHoverInfo(),o.merge_area?(n=this.layout.OffsetCellAddressToRectangle(o.merge_area.start).Combine(this.layout.OffsetCellAddressToRectangle(o.merge_area.end)),i=o.merge_area.start,o=this.active_sheet.CellData(i)):n=this.layout.OffsetCellAddressToRectangle(i),o.style?.locked){console.info("cell is locked for editing");return}n=n.Shift(this.layout.header_size.width,this.layout.header_size.height);let a=o.value;t?(o.type===3||o.rendered_type===3)&&o.style&&o.style.number_format&&/(?:%|percent)/i.test(o.style.number_format)&&(!r||this.IsNumeric(r.key.charCodeAt(0)))?a="%":a=void 0:a=this.NormalizeCellValue(o),this.overlay_editor?.Edit(e,n.Expand(-1,-1),o,a,r),o.editing=!0,o.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 r=0;r<t;r++)this.layout.RowHeight(++e)||r--;else if(t<0)for(let r=0;r>t;r--)--e>=0&&!this.layout.RowHeight(e)&&r++;return e}StepVisibleColumns(e,t){if(t>0)for(let r=0;r<t;r++)this.layout.ColumnWidth(++e)||r--;else if(t<0)for(let r=0;r>t;r--)--e>=0&&!this.layout.ColumnWidth(e)&&r++;return e}EnsureAddress(e,t=8){let r=!1;if(this.options.expand){if(e.row!==1/0&&e.row>=this.active_sheet.rows){let i=this.active_sheet.rows;for(;e.row>=i;)i+=t;this.active_sheet.cells.EnsureRow(i),r=!0}if(e.column!==1/0&&e.column>=this.active_sheet.columns){let i=this.active_sheet.columns;for(;e.column>=i;)i+=t;this.active_sheet.cells.EnsureColumn(i),r=!0}r&&(this.layout.UpdateTiles(),this.layout.UpdateContentsSize(),this.Repaint(!0,!0))}return r}AdvanceSelection(e,t,r=!1,i=!1,o=!0){let n=this.SelectingArgument();if(t.empty)if(n){let a={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 y(a))}else this.Select(t,new y({row:0,column:0}));else{let a=this.active_sheet.CellData(t.target);if(a.merge_area&&r&&(r=!a.merge_area.Equals(t.area)),r&&t.area.count>1){let s=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,s);let d=this.active_sheet.CellData(l);if(!d.merge_area||d.merge_area.start.row===l.row&&d.merge_area.start.column===l.column)break}this.Select(t,s,l)}else if(i&&t&&t.target){let s=t.area,l=t.target,d=s.start,u=s.end,h={row:1/0,column:1/0};if(e.columns&&(s.columns===1?e.columns>0?(u.column=this.StepVisibleColumns(u.column,1),h.column=u.column):(d.column=this.StepVisibleColumns(d.column,-1),h.column=d.column):s.end.column>l.column?(u.column=this.StepVisibleColumns(u.column,e.columns),h.column=u.column):s.start.column<l.column&&(d.column=this.StepVisibleColumns(d.column,e.columns),h.column=d.column),u.column=Math.max(0,u.column),d.column=Math.max(0,d.column)),e.rows&&(s.rows===1?e.rows>0?(u.row=this.StepVisibleRows(u.row,1),h.row=u.row):(d.row=this.StepVisibleRows(d.row,-1),h.row=d.row):s.end.row>l.row?(u.row=this.StepVisibleRows(u.row,e.rows),h.row=u.row):s.start.row<l.row&&(d.row=this.StepVisibleRows(d.row,e.rows),h.row=d.row),u.row=Math.max(0,u.row),d.row=Math.max(0,d.row)),this.options.expand){for(let m of[d,u,h])m.row!==1/0&&(m.row=Math.max(0,m.row)),m.column!==1/0&&(m.column=Math.max(0,m.column));this.EnsureAddress(u)&&(o=!0),this.ScrollIntoView(h),this.Select(t,new y(d,u),void 0,!0)}else{for(let m of[d,u,h])m.row!==1/0&&(m.row=Math.max(0,Math.min(m.row,this.active_sheet.rows-1))),m.column!==1/0&&(m.column=Math.max(0,Math.min(m.column,this.active_sheet.columns-1)));this.ScrollIntoView(h),this.Select(t,new y(d,u),void 0,!0)}}else{let s=t.target;a.merge_area?(e.columns<0?s.column=this.StepVisibleColumns(a.merge_area.start.column,-1):e.columns>0&&(s.column=this.StepVisibleColumns(a.merge_area.end.column,1)),e.rows<0?s.row=this.StepVisibleRows(a.merge_area.start.row,-1):e.rows>0&&(s.row=this.StepVisibleRows(a.merge_area.end.row,1))):(s.row=this.StepVisibleRows(s.row,e.rows),s.column=this.StepVisibleColumns(s.column,e.columns)),this.EnsureAddress(s)&&(o=!0),this.Select(t,new y({row:Math.min(Math.max(0,s.row),this.active_sheet.rows-1),column:Math.min(Math.max(0,s.column),this.active_sheet.columns-1)})),this.RenderSelections(),this.ScrollIntoView(t.target)}}this.SelectingArgument()&&this.UpdateSelectedArgument(t),o&&this.DelayedRender()}HighlightDependencies(e,t=!0){let r=0;e:for(let i of e)if((i.start.row===1/0||i.start.row<this.active_sheet.rows)&&(i.start.column===1/0||i.start.column<this.active_sheet.columns)){i=this.active_sheet.RealArea(i);let o=i.spreadsheet_label;if(this.additional_selections[r]&&this.additional_selections[r].area.spreadsheet_label===o)r++;else{for(let n=0;n<r;n++)if(this.additional_selections[n].area.spreadsheet_label===o&&this.additional_selections[n].area.start.sheet_id===i.start.sheet_id)continue e;this.additional_selections[r++]={target:i.start,area:i}}}this.additional_selections.splice(r),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,r,i=!1){if(e.empty||i&&(r=e.target),t){let o=this.active_sheet.RealArea(t);r||(r=o.start);let n=!0;for(;n;)n=!1,this.active_sheet.cells.Apply(o,l=>{l.merge_area&&!o.ContainsArea(l.merge_area)&&(t.ConsumeArea(l.merge_area),o=this.active_sheet.RealArea(t),n=!0)});e.area=new y({...t.start,sheet_id:this.active_sheet.id},t.end),r&&(e.target={...r,sheet_id:this.active_sheet.id}),e.empty=!1;let a=this.active_sheet.CellData(e.target),s="";a.formatted&&(typeof a.formatted=="string"?s=a.formatted:s=a.formatted.map(l=>l.flag===1||l.flag===6?"":l.text).join("")),this.overlay_editor?.UpdateCaption(s)}else e.empty=!0;e===this.primary_selection&&(re.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.formula_bar){if(e){this.formula_bar.formula=e;return}if(this.primary_selection.empty)this.formula_bar.formula="";else{let t=this.active_sheet.CellData(this.primary_selection.target),r=t.merge_area||t.area;r&&(r.start.column!==this.primary_selection.target.column||r.start.row!==this.primary_selection.target.row)&&(t=this.active_sheet.CellData(r.start)),this.formula_bar.editable=!t.style?.locked;let i=this.NormalizeCellValue(t);if(t.validation&&!t.style?.locked){let o;t.validation.type==="list"?o=t.validation.list:t.validation.type==="range"&&(o=this.GetValidationRange(t.validation.area)),o&&o.length&&this.layout.ShowDropdownCaret(t.merge_area||new y(this.primary_selection.target),o,t.value)}else this.layout.HideDropdownCaret();t.area?this.formula_bar.formula="{"+(i||"")+"}":this.formula_bar.formula=typeof i<"u"?i.toString():""}}}RenderStats(e){if(!Array.isArray(e))return[];let t=0,r=0,i={real:0,imaginary:0};for(let o of e)for(let n of o)typeof n=="number"?(i.real+=n,r++):fe(n)&&(i.real+=n.real,i.imaginary+=n.imaginary,r++),typeof n<"u"&&t++;if(t>1)if(r>0){let o=D.Get("General");if(i.imaginary){let n={real:i.real/r,imaginary:i.imaginary/r};return[{label:"Count",value:t.toString()},{label:"Sum",value:te.FormatPartsAsText(o.FormatComplex(i))},{label:"Average",value:te.FormatPartsAsText(o.FormatComplex(n))}]}else return[{label:"Count",value:t.toString()},{label:"Sum",value:o.Format(i.real)},{label:"Average",value:o.Format(i.real/r)}]}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}}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 r=this.active_sheet.CellData(this.primary_selection.target),i=new y(r.merge_area?r.merge_area.start:e.target);this.formula_bar.label=this.model.named_ranges.MatchSelection(e.area,i)||y.CellAddressToLabel(i.start)}}OnDropdownSelect(e){if(typeof e<"u"){let i=be.TryParse(e.toString());i.type===3&&(e=i.value)}let t=this.active_sheet.CellData(this.primary_selection.target),r=t.merge_area?t.merge_area.start:this.primary_selection.target;this.ExecCommand({key:6,area:r,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 r=this.selected_annotation.view[this.view_index];if(r&&r.node){let i=r.node.firstChild;if(i){let o=Gr(i).outerHTML,n="text/plain";e.clipboardData.setData(n,o)}}}}else{let t=this.active_sheet.RealArea(this.primary_selection.area),r=t.columns,i=t.rows,o=[],n=[];for(let s=0;s<i;s++){let l=[];for(let d=0;d<r;d++){let u={row:t.start.row+s,column:t.start.column+d},h=this.active_sheet.CellData(u),m="";h.calculated?h.calculated_type===7?m=He(h.calculated):m=h.calculated.toString():h.type===7?m=He(h.value):m=h.value?.toString()||"",l.push(m);let f={address:u,data:h.value,type:h.type,style:this.active_sheet.GetCopyStyle(u)};h.area&&h.area.start.row===u.row&&h.area.start.column===u.column&&(f.array={rows:h.area.rows,columns:h.area.columns}),n.push(JSON.parse(JSON.stringify(f)))}o.push(l)}let a=o.map(s=>s.join(" ")).join(`
|
|
9
9
|
`);e.clipboardData&&(e.clipboardData.clearData(),e.clipboardData.setData("text/plain",a),e.clipboardData.setData("text/x-treb",JSON.stringify({source:t,data:n})))}}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:11,area:t})}}RecyclePasteAreas(e,t){let r=[];if(e.count===1)for(let i=t.start.row;i<=t.end.row;i++)for(let o=t.start.column;o<=t.end.column;o++)r.push(new y({row:i,column:o}));else if(e.columns===t.columns&&t.rows>=e.rows&&t.rows%e.rows===0)for(let i=t.start.row;i<=t.end.row;i+=e.rows)r.push(new y({row:i,column:t.start.column},{row:i+e.rows-1,column:t.end.column}));else if(e.rows===t.rows&&t.columns>=e.columns&&t.columns%e.columns===0)for(let i=t.start.column;i<=t.end.column;i+=e.columns)r.push(new y({column:i,row:t.start.row},{column:i+e.columns-1,row:t.end.row}));else r.push(t.Clone().Resize(e.rows,e.columns));return r}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 n=JSON.parse(t);if(n.source&&n.source!==this.active_sheet.id&&n.data&&n.data.formula){let l="",d=this.model.sheets.Find(n.source);if(d&&(l=d.name),l){let u=this.parser.Parse(n.data.formula);u.expression&&(this.parser.Walk(u.expression,h=>h.type==="range"?(!h.start.sheet_id&&!h.start.sheet&&(h.start.sheet=l),!1):(h.type==="address"&&!h.sheet_id&&!h.sheet&&(h.sheet=l),!0)),n.data.formula="="+this.parser.Render(u.expression,{missing:""}))}}let s=this.CreateAnnotation(n.data,!0,!0).view[this.view_index];if(s&&s.node){let l=s.node;setTimeout(()=>{l.focus()},1)}}catch(n){console.error(n)}return}if(this.primary_selection.empty)return;let r=this.active_sheet.RealArea(this.primary_selection.area),i=[],o=e.clipboardData.getData("text/x-treb");if(o)try{let n=JSON.parse(o),a=new y(n.source.start,n.source.end),s=this.RecyclePasteAreas(a,r);if(s.length===1&&r.Resize(s[0].rows,s[0].columns),!this.ValidatePasteAreas(s)){this.Error(5);return}let l=[];for(let d of s){this.active_sheet.cells.EnsureCell(d.end),i.push({key:11,area:d});let u={rows:d.start.row-a.start.row,columns:d.start.column-a.start.column};n.data.forEach(h=>{let m=h.data,f={row:h.address.row-a.start.row+d.start.row,column:h.address.column-a.start.column+d.start.column};if(h.type===1){let p=this.parser.Parse(m);p.expression&&(m="="+this.parser.Render(p.expression,{offset:u,missing:""}))}if(h.array){let p={start:{...f},end:{row:f.row+h.array.rows-1,column:f.column+h.array.columns-1}},_={key:6,value:m,array:!0,area:p};l.push(new y(p.start,p.end)),i.push(_)}else{let p=!1;for(let _ of l)if(_.Contains(f)){p=!0;break}p||i.push({key:6,value:m,area:f})}i.push({key:7,style:h.style||{},area:f})})}}catch(n){console.error("invalid treb data on clipboard"),console.info(n);return}else{let n=e.clipboardData.getData("text/plain");if(!n)return!0;let s=n.trim().split(`
|
|
10
|
-
`).map(d=>d.split(" ").map(u=>u.trim())),l=this.RecyclePasteAreas(new y({row:0,column:0},{row:s.length-1,column:s[0].length-1}),r);if(l.length===1&&(r.Resize(s.length,s[0].length),r.Resize(l[0].rows,l[0].columns)),!this.ValidatePasteAreas(l)){this.Error(5);return}for(let d of l)for(let u=0;u<s.length;u++)for(let h=0;h<s[0].length;h++){let m=new y({row:u+d.start.row,column:h+d.start.column});if(this.active_sheet.cells.EnsureCell(m.end),s[u][h]){let f=this.SetInferredType({area:m,target:m.start,empty:!1},s[u][h],!1,!1);if(f)for(let p of f)i.push(p)}else{let f=this.active_sheet.cells.GetCell(m.start,!1);f&&f.type!==0&&i.push({key:11,area:m.Clone()})}}}this.ExecCommand(i),this.Select(this.primary_selection,r)}AllSelections(e=!1){let t=[this.primary_selection,this.active_selection].concat(this.additional_selections);return e?t:t.filter(r=>!r.empty)}InsertRowsInternal(e){let t=super.InsertRowsInternal(e);if(t.error)return t;let r=this.FindSheet(e.sheet_id);if(r===this.active_sheet){if(e.count<0)for(let i of this.AllSelections())i.empty=!0;else for(let i of this.AllSelections())i.target.row>=e.before_row&&(i.target.row+=e.count),i.area.entire_column||(i.area.start.row>=e.before_row?i.area.Shift(e.count,0):i.area.end.row>=e.before_row&&i.area.ConsumeAddress({row:i.area.end.row+e.count,column:i.area.end.column}));for(let i of t.delete_annotations_list||[])this.layout.RemoveAnnotation(i);if(this.QueueLayoutUpdate(),this.Repaint(),t.update_annotations_list?.length){this.layout.UpdateAnnotation(t.update_annotations_list);for(let i of t.resize_annotations_list||[]){let o=i.view[this.view_index];o?.resize_callback&&o.resize_callback.call(void 0)}}}else this.pending_layout_update.add(r.id);return t}InsertColumnsInternal(e){let t=super.InsertColumnsInternal(e);if(t.error)return t;let r=this.FindSheet(e.sheet_id);if(r===this.active_sheet){if(e.count<0)for(let i of this.AllSelections())i.empty=!0;else for(let i of this.AllSelections())i.target.column>=e.before_column&&(i.target.column+=e.count),i.area.entire_row||(i.area.start.column>=e.before_column?i.area.Shift(0,e.count):i.area.end.column>=e.before_column&&i.area.ConsumeAddress({row:i.area.end.row,column:i.area.end.column+e.count}));for(let i of t.delete_annotations_list||[])this.layout.RemoveAnnotation(i);if(this.tile_renderer?.FlushOverflows(),this.QueueLayoutUpdate(),this.DelayedRender(!0,void 0,!0),t.update_annotations_list?.length){this.layout.UpdateAnnotation(t.update_annotations_list);for(let i of t.resize_annotations_list||[]){let o=i.view[this.view_index];o?.resize_callback&&o.resize_callback.call(void 0)}}}else this.pending_layout_update.add(r.id);return t}ResetInternal(){super.ResetInternal(),this.RemoveAnnotationNodes(),this.ClearSelection(this.primary_selection),this.ScrollIntoView({row:0,column:0}),this.QueueLayoutUpdate(),this.layout.HideNote()}ResizeColumnsInternal(e){let t=e.sheet_id?this.FindSheet(e.sheet_id):this.active_sheet,r=e.column;if(typeof r>"u"){r=[];for(let n=0;n<t.columns;n++)r.push(n)}typeof r=="number"&&(r=[r]);let i=typeof e.width!="number",o=Math.round(e.width||0/this.scale);if(i)for(let n of r)this.AutoSizeColumn(t,n,!1);else for(let n of r)t.SetColumnWidth(n,o);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.RenderSelections()):this.pending_layout_update.add(t.id)}ResizeRowsInternal(e){let t,r=e.sheet_id?this.FindSheet(e.sheet_id):this.active_sheet,i=e.row;if(typeof i>"u"){i=[];for(let s=0;s<r.rows;s++)i.push(s)}typeof i=="number"&&(i=[i]);let o=typeof e.shrink=="boolean"?e.shrink:!0,n=typeof e.height!="number",a=Math.round(e.height||0/this.scale);if(n)for(let s of i)r.GetRowHeight(s)||(t?t.ConsumeAddress({row:s,column:1}):t=new y({row:s,column:1/0,sheet_id:r.id})),r.AutoSizeRow(s,this.theme.grid_cell,o);else for(let s of i){let l=r.GetRowHeight(s);(!l&&a||l&&!a)&&(t?t.ConsumeAddress({row:s,column:1}):t=new y({row:s,column:1/0,sheet_id:r.id})),r.SetRowHeight(s,a)}return r===this.active_sheet?(this.layout.UpdateTotalSize(),this.layout.container&&this.layout.container.offsetHeight&&this.layout.container.offsetHeight>this.layout.total_height?this.UpdateLayout():(this.layout.UpdateTileHeights(!0),this.render_tiles=this.layout.VisibleTiles(),this.Repaint(!1,!0)),this.layout.UpdateAnnotation(this.active_sheet.annotations),this.RenderSelections()):this.pending_layout_update.add(r.id),t?{start:t.start,end:t.end}:void 0}SelectInternal(e){e.area?(e.area.start.sheet_id&&e.area.start.sheet_id!==this.active_sheet.id&&this.ActivateSheetInternal({key:21,id:e.area.start.sheet_id}),this.Select(this.primary_selection,new y(e.area.start,e.area.end)),this.RenderSelections()):this.ClearSelection(this.primary_selection)}FreezeInternal(e){let t=this.FindSheet(e.sheet_id||this.active_sheet.id),r=(typeof e.highlight_transition=="boolean"?e.highlight_transition:!0)&&t===this.active_sheet;if(e.rows===t.freeze.rows&&e.columns===t.freeze.columns){r&&this.HighlightFreezeArea();return}t.freeze.rows=e.rows,t.freeze.columns=e.columns,t===this.active_sheet?(this.QueueLayoutUpdate(),this.Repaint(),r&&this.HighlightFreezeArea(),e.rows||e.columns?this.layout.CloneFrozenAnnotations():this.layout.ClearFrozenAnnotations()):this.pending_layout_update.add(t.id)}ExecCommand(e,t=!0){let r=super.ExecCommand(e,t);this.batch||r.render_area&&this.DelayedRender(!1,r.render_area),r.repaint&&this.Repaint();for(let i of r.pending||[])this.pending_layout_update.add(i);return r.layout&&this.QueueLayoutUpdate(),r.sheets&&this.tab_bar&&this.tab_bar.Update(),r.formula&&this.UpdateFormulaBarFormula(),r}};var ot=class{forward={};backward=[];Count(){return this.backward.length}Serialize(){return JSON.parse(JSON.stringify(this.Map()))}Deserialize(e){if(this.Reset(),e){for(let t of Object.keys(e))this.SetName(t,new y(e[t].start,e[t].end),!1);this.RebuildList()}}MatchSelection(e,t){if(!e.start.sheet_id)throw new Error("match selection without sheet id");let r;for(let i of this.List())if(i.range.start.sheet_id===e.start.sheet_id&&(i.range.Equals(e)&&(r=i.name),t?.Equals(i.range)))return i.name;return r}SetName(e,t,r=!0){let i=this.ValidateNamed(e);return i?t.entire_column||t.entire_row?(console.warn("invalid range"),!1):(this.forward[i]=t,r&&this.RebuildList(),!0):(console.warn("invalid name"),!1)}SetNames(e){for(let t of Object.keys(e)){let r=e[t];this.SetName(t,new y(r.start,r.end),!1)}this.RebuildList()}ClearName(e,t=!0){delete this.forward[e],t&&this.RebuildList()}RemoveRangesForSheet(e,t=!0){let r={},i=this.List();for(let o of i)o.range.start.sheet_id!==e&&(r[o.name]=o.range);this.forward=r,t&&this.RebuildList()}Reset(){this.forward={},this.backward=[]}Get(e){return this.forward[e.toUpperCase()]}Map(){return this.forward}List(){return this.backward}ValidateNamed(e){return e=e.trim(),!e.length||/^[A-Za-z]{1,3}\d+$/.test(e)||/[^A-Za-z\d_.]/.test(e)||/^[^A-Za-z_]/.test(e)?!1:e.toUpperCase()}PatchNamedRanges(e,t,r,i,o){let n=this.List().slice(0);for(let a of n){let s=a.name,l=a.range;if(l.start.sheet_id!==e){console.info("skipping name",s);continue}if(r&&t<=l.end.column){if(r>0)t<=l.start.column?l.Shift(0,r):t>l.start.column&&t<=l.end.column?l.ConsumeAddress({row:l.end.row,column:l.end.column+r}):console.warn("PNR X case 1",t,r,JSON.stringify(l));else if(r<0)if(t-r<=l.start.column)l.Shift(0,r);else if(t<=l.start.column&&t-r>l.end.column)this.ClearName(s,!1);else if(t<=l.start.column){let d=t-r-1;this.SetName(s,new y({row:l.start.row,column:d+1+r,sheet_id:e},{row:l.end.row,column:l.end.column+r}),!1)}else t<=l.end.column?t-r-1>=l.end.column?this.SetName(s,new y({row:l.start.row,column:l.start.column,sheet_id:e},{row:l.end.row,column:t-1}),!1):this.SetName(s,new y({row:l.start.row,column:l.start.column,sheet_id:e},{row:l.end.row,column:l.start.column+l.columns+r-1}),!1):console.warn("PNR X case 2",t,r,JSON.stringify(l))}if(o&&i<=l.end.row){if(o>0)i<=l.start.row?l.Shift(o,0):i>l.start.row&&i<=l.end.row?l.ConsumeAddress({row:l.end.row+o,column:l.end.column}):console.warn("PNR X case 3",i,o,JSON.stringify(l));else if(o<0)if(i-o<=l.start.row)l.Shift(o,0);else if(i<=l.start.row&&i-o>l.end.row)this.ClearName(s,!1);else if(i<=l.start.row){let d=i-o-1;this.SetName(s,new y({column:l.start.column,row:d+1+o,sheet_id:e},{column:l.end.column,row:l.end.row+o}),!1)}else i<=l.end.row?i-o-1>=l.end.row?this.SetName(s,new y({column:l.start.column,row:l.start.row,sheet_id:e},{column:l.end.column,row:i-1}),!1):this.SetName(s,new y({column:l.start.column,row:l.start.row,sheet_id:e},{column:l.end.column,row:l.start.row+l.rows+o-1}),!1):console.warn("PNR X case 4",i,o,JSON.stringify(l))}}this.RebuildList()}RebuildList(){this.backward=[];for(let e of Object.keys(this.forward))this.backward.push({name:e,range:this.forward[e]})}};var Cr=class{get list(){return this.sheets_.slice(0)}get length(){return this.sheets_.length}names=new Map;ids=new Map;sheets_=[];Assign(e){this.sheets_=[...e],this.UpdateIndexes()}Add(e){this.sheets_.push(e),this.UpdateIndexes()}Splice(e,t,...r){this.sheets_.splice(e,t,...r),this.UpdateIndexes()}Find(e){return typeof e=="string"?this.names.get(e.toLocaleUpperCase()):this.ids.get(e)}Name(e){return this.ids.get(e)?.name||void 0}ID(e){return this.names.get(e.toLocaleUpperCase())?.id||void 0}UpdateIndexes(){this.names.clear(),this.ids.clear();for(let e of this.sheets_){let t=e.name.toLocaleUpperCase();this.names.set(t,e),this.ids.set(e.id,e)}}},nt=class{parser=new Pe;document_name;user_data;sheets=new Cr;named_ranges=new ot;macro_functions=new Map;named_expressions=new Map;view_count=0;theme_style_properties=JSON.parse(JSON.stringify(L.DefaultProperties));tables=new Map;ResolveStructuredReference(e,t){let r;if(e.table?r=this.tables.get(e.table.toLowerCase()):t.sheet_id&&(r=this.sheets.Find(t.sheet_id)?.CellData(t)?.table),!r)return;let i=e.column.toLowerCase(),o=-1;if(r.columns){for(let n=0;n<r.columns.length;n++)if(i===r.columns[n]){o=r.area.start.column+n;break}}if(!(o<0))if(e.scope==="row"){let n=t.row;return n<r.area.start.row||n>r.area.end.row?void 0:{label:e.label,type:"address",row:n,column:o,sheet_id:r.area.start.sheet_id,id:e.id,position:e.position}}else{let n=r.area.start.row,a=r.area.end.row;return e.scope==="column"&&(n++,r.totals_row&&a--),{label:e.label,type:"range",position:e.position,id:e.id,start:{type:"address",row:n,column:o,sheet_id:r.area.start.sheet_id,label:e.label,position:e.position,id:0},end:{type:"address",row:a,column:o,label:e.label,position:e.position,id:0}}}}AddressToLabel(e,t){let r=V(e)?e:e.start,i=V(e)?[y.CellAddressToLabel(e)]:[y.CellAddressToLabel(e.start),y.CellAddressToLabel(e.end)],o=this.sheets.Find(r.sheet_id||0),n=o?.name?ze.test(o.name)?`'${o.name}'`:o.name:"";return n+(n?"!":"")+(i[0]===i[1]?i[0]:i.join(":"))}ResolveSheetID(e,t,r){let i=e.type==="address"?e:e.start;if(i.sheet_id)return!0;if(i.sheet){let o=this.sheets.Find(i.sheet);if(o)return i.sheet_id=o.id,!0}else{if(t?.sheet_id)return i.sheet_id=t.sheet_id,!0;if(r?.id)return i.sheet_id=r.id,!0}return!1}ResolveArea(e,t){let r=this.ResolveAddress(e,t);return V(r)?new y(r):new y(r.start,r.end)}ResolveAddress(e,t){if(typeof e=="string"){let r=this.parser.Parse(e);if(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 i=this.named_ranges.Get(r.expression.name);if(i)return i}return{row:0,column:0}}return e}};var ui={"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 Lt=class c{static type="vertex";type=c.type;color=0;edges_in=new Set;edges_out=new Set;get has_inbound_edges(){return this.edges_in.size>0}get has_outbound_edges(){return this.edges_out.size>0}Reset(){for(let e of this.edges_out)e.RemoveDependency(this);for(let e of this.edges_in)e.RemoveDependent(this);this.edges_out.clear(),this.edges_in.clear()}ClearDependencies(){for(let e of this.edges_in)e.RemoveDependent(this);this.edges_in.clear()}AddDependent(e){e!==this&&(this.edges_out.has(e)||this.edges_out.add(e))}RemoveDependent(e){this.edges_out.delete(e)}AddDependency(e){e!==this&&(this.edges_in.has(e)||this.edges_in.add(e))}RemoveDependency(e){this.edges_in.delete(e)}LinkTo(e){this.AddDependent(e),e.AddDependency(this)}DependsOn(e){this.AddDependency(e),e.AddDependent(this)}LoopCheck(){let e=[this];for(;e.length;){let t=e[e.length-1],r=!0;if(t.color!==2){t.color=1;for(let i of t.edges_out){if(i.color===1)return this.color=0,!0;i.color===0&&i.edges_out.size&&(e.push(i),r=!1)}}r&&(t.color=2,e.pop())}return this.color=2,!1}};var Be=class extends Lt{dirty=!1};var hi={error:"NOTIMPL"},xe=()=>({type:6,value:"N/A"}),Ce=()=>({type:6,value:"EXPR"});var ue=()=>({type:6,value:"DIV/0"}),H=()=>({type:6,value:"ARG"}),T=()=>({type:6,value:"VALUE"}),j=()=>({type:6,value:"REF"}),Sr=()=>({type:6,value:"NAME"}),It=()=>({type:6,value:"UNK"});var Se=class c extends Be{static type="spreadsheet-vertex";reference;error=0;address;result={type:0};expression={type:"missing",id:-1};expression_error=!1;short_circuit=!1;type=c.type;get array_head(){return this.address?!!this.reference&&!!this.reference.area&&this.reference.area.start.column===this.address.column&&this.reference.area.start.row===this.address.row:!1}TakeReferenceValue(){this.reference&&(this.result=J(this.reference.GetValue()))}Calculate(e){if(this.dirty){if(this.color===0&&this.LoopCheck()&&(this.dirty=!1,this.edges_in.size)){this.reference&&(this.array_head||this.reference.type===1)&&this.reference.SetCalculationError("LOOP");for(let t of this.edges_out)t.Calculate(e);return}for(let t of this.edges_in)if(t.dirty)return;if(this.reference){if(this.reference.type===1){this.short_circuit=!1;let t=e.CalculationCallback.call(e,this);if(this.result=t.value,this.short_circuit)return;t.volatile&&e.volatile_list.push(this)}else this.result=this.reference.GetValue4();if(this.array_head)e.SpreadCallback.call(e,this,this.result);else if(this.reference.type===1){let t=this.result.type===8?this.result.value[0][0]:this.result;this.reference.SetCalculatedValue(t.value,t.type)}}else console.info("skip dirty constant? [or dangling...]");this.dirty=!1;for(let t of this.edges_out)t.dirty&&e.calculation_list.push(t)}}};var Le=class c extends Be{static type="array-vertex";static list=[];type=c.type;area;static GetVertex(e){for(let t of this.list)if(t.area.start.sheet_id===e.start.sheet_id&&t.area.Equals(e))return[t,!1];return[new c(e),!0]}static Clear(){this.list=[]}static GetContainingArrays(e){let t=[];for(let r of this.list)r.area.start.sheet_id===e.sheet_id&&r.area.Contains(e)&&t.push(r);return t}static CreateImplicitEdges(e,t){for(let r of this.list)r.area.start.sheet_id===t.sheet_id&&r.area.Contains(t)&&r.DependsOn(e)}constructor(e){super(),this.area=e.Clone(),c.list.push(this)}RemoveDependent(e){super.RemoveDependent(e),this.edges_out.size||(this.Reset(),c.list=c.list.filter(t=>t!==this))}Calculate(e){if(this.dirty){if(this.color===0&&this.LoopCheck()&&(this.dirty=!1,this.edges_in.size)){for(let t of this.edges_out)t.Calculate(e);return}for(let t of this.edges_in)if(t.dirty)return;this.dirty=!1;for(let t of this.edges_out)t.Calculate(e)}}};var Ht=class{vertices=[[]];volatile_list=[];calculation_list=[];loop_hint;leaf_vertices=new Set;dirty_list=[];loop_check_required=!1;IsSpreadsheetVertex(e){return e.type===Se.type}FlushTree(){this.dirty_list=[],this.volatile_list=[],this.vertices=[[]],this.leaf_vertices.clear(),Le.Clear()}ResolveArrayHead(e){if(!e.sheet_id)throw new Error("resolve array head with no sheet id");let t=this.model.sheets.Find(e.sheet_id)?.cells;if(!t)throw new Error("no cells? sheet id "+e.sheet_id);let r=t.data[e.row];if(r){let i=r[e.column];if(i&&i.area){let o={row:i.area.start.row,column:i.area.start.column,sheet_id:e.sheet_id};return console.info("array head",e,o),o}}return e}GetVertex(e,t){if(!e.sheet_id)throw console.info({address:e,create:t}),new Error("getvertex with no sheet id");let r=this.model.sheets.Find(e.sheet_id)?.cells;if(!r)throw new Error("no cells? sheet id "+e.sheet_id);if(!this.vertices[e.sheet_id]){if(!t)return;this.vertices[e.sheet_id]=[]}if(this.vertices[e.sheet_id][e.column]){let o=this.vertices[e.sheet_id][e.column][e.row];if(o)return o;if(!t)return}else{if(!t)return;this.vertices[e.sheet_id][e.column]=[]}let i=new Se;return i.address={row:e.row,column:e.column,absolute_row:e.absolute_row,absolute_column:e.absolute_column,sheet_id:e.sheet_id},i.reference=r.EnsureCell(e),this.vertices[e.sheet_id][e.column][e.row]=i,Le.CreateImplicitEdges(i,e),i}RemoveVertex(e){if(!e.sheet_id)throw new Error("removevertex with no sheet id");let t=this.GetVertex(e,!1);t&&(t.Reset(),this.vertices[e.sheet_id][e.column][e.row]=void 0)}ResetVertex(e){let t=this.GetVertex(e,!1);t&&t.Reset()}RIBcount=0;ResetInbound(e,t=!1,r=!0,i=!1){this.RIBcount++;let o=this.GetVertex(e,r);if(!o){if(t){let a=Le.GetContainingArrays(e);for(let s of a)this.SetVertexDirty(s)}return}let n=[];if(i&&(n=Array.from(o.edges_in)),o.ClearDependencies(),t&&this.SetVertexDirty(o),i){o.has_outbound_edges||this.RemoveVertex(e);for(let a of n)if(!a.has_inbound_edges&&!a.has_outbound_edges){let s=a;s.address&&this.RemoveVertex(s.address)}}}ResetLoopState(){for(let e of this.vertices)if(e){for(let t of e)if(t)for(let r of t)r&&(r.color=r.edges_out.size?0:2)}for(let e of this.leaf_vertices)e.color=2}LoopCheck(e=!1){if(!this.loop_check_required&&!e)return!1;let t=[];for(let i of this.vertices)if(i){for(let o of i)if(o)for(let n of o)n&&(n.color=n.edges_out.size?0:2,t.push(n))}let r=[];for(let i of t)if(i.color===0){for(i.color=1,r.push(i);r.length;){let o=r[r.length-1],n=!0;if(o.color!==2)for(let a of o.edges_out){if(a.color===1)return this.loop_hint=this.RenderAddress(i.address),console.info("loop detected @",this.loop_hint),!0;a.color===0&&(r.push(a),n=!1)}n&&(r.pop(),o.color=2)}i.color=2}return this.loop_check_required=!1,this.loop_hint=void 0,!1}RenderAddress(e){if(!e)return"undefined";let t="";if(e.sheet_id){let i=this.model.sheets.Find(e.sheet_id);i&&(t=i.name+"!")}let r=new y(e);return t+r.spreadsheet_label}AddArrayEdge(e,t){if(!e.start.sheet_id)throw new Error("AddArrayEdge called without sheet ID");let r=this.GetVertex(t,!0),[i,o]=Le.GetVertex(e);if(r.DependsOn(i),this.loop_check_required=!0,!o)return;let n=this.vertices[e.start.sheet_id];if(n)if(e.entire_row){for(let a=0;a<n.length;a++)if(n[a])for(let s=e.start.row;s<=e.end.row;s++){let l=n[a][s];l&&i.DependsOn(l)}}else if(e.entire_column){for(let a=e.start.column;a<=e.end.column;a++)if(n[a])for(let s of n[a])s?.address&&i.DependsOn(s)}else for(let a=e.start.row;a<=e.end.row;a++)for(let s=e.start.column;s<=e.end.column;s++){let l=n[s][a];l&&i.DependsOn(l)}}AddEdge(e,t,r){let i=this.GetVertex(e,!0);this.GetVertex(t,!0).DependsOn(i),i.reference&&i.reference.area&&!i.array_head&&this.AddEdge({...e,row:i.reference.area.start.row,column:i.reference.area.start.column},t,"implicit"),this.loop_check_required=!0}RemoveEdge(e,t){let r=this.GetVertex(e,!1),i=this.GetVertex(t,!1);!r||!i||(r.RemoveDependent(i),i.RemoveDependency(r))}SetAreaDirty(e){if(e.start.column===1/0||e.end.column===1/0||e.start.row===1/0||e.end.row===1/0)throw new Error("don't iterate over infinite area");let t=e.start.sheet_id;if(!t)throw new Error("invalid area, missing sheet id");for(let r=e.start.column;r<=e.end.column;r++)for(let i=e.start.row;i<=e.end.row;i++){let o={row:i,column:r,sheet_id:t};this.GetVertex(o,!1)&&this.SetDirty(o)}}SetVertexDirty(e){if(!e.dirty){this.dirty_list.push(e),e.dirty=!0;for(let t of e.edges_out)this.SetVertexDirty(t)}}SetDirty(e){let t=this.GetVertex(e,!0);this.SetVertexDirty(t)}AddLeafVertex(e){this.leaf_vertices.add(e)}RemoveLeafVertex(e){this.leaf_vertices.delete(e)}AddLeafVertexEdge(e,t){let r=this.GetVertex(e,!0);return t.DependsOn(r),0}RemoveLeafVertexEdge(e,t){let r=this.GetVertex(e,!1);r&&(r.RemoveDependent(t),t.RemoveDependency(r))}InitializeGraph(){for(let e of this.dirty_list)this.IsSpreadsheetVertex(e)&&(e.TakeReferenceValue(),this.CheckVolatile(e)&&this.volatile_list.push(e)),e.dirty=!1;this.dirty_list=[]}Recalculate(){for(let e of this.volatile_list)this.SetVertexDirty(e);this.calculation_list=this.dirty_list.slice(0),this.volatile_list=[],this.dirty_list=[],this.loop_check_required&&(this.ResetLoopState(),this.loop_check_required=!1);for(let e=0;e<this.calculation_list.length;e++)this.calculation_list[e].Calculate(this);this.calculation_list=[]}};var Do=c=>{let e={m:c,n:c,array:[]};for(let t=0;t<c;t++){let r=[];for(let i=0;i<c;i++)r.push({real:0,imaginary:0});e.array.push(r)}return e};var Vo=c=>{let{r:e,theta:t}=c,r=e*Math.cos(t),i=e*Math.sin(t);return{real:r,imaginary:i}},Nt=c=>{let e=Math.sqrt(c.real*c.real+c.imaginary*c.imaginary),t=Math.atan2(c.imaginary,c.real);return{r:e,theta:t}},le=(c,e)=>({real:c.real*e.real-c.imaginary*e.imaginary,imaginary:c.real*e.imaginary+c.imaginary*e.real}),Lo=(c,e)=>{let t=[];for(let r=0;r<c.m;r++){let i=[];for(let o=0;o<c.n;o++)i.push(c.array[r][o]+e.array[r][o]);t.push(i)}return{m:c.m,n:c.n,array:t}},Ar=(c,e)=>{let t=[];for(let r=0;r<c.m;r++){let i=[];for(let o=0;o<e.n;o++){let n=0;for(let a=0;a<c.n;a++)n+=c.array[r][a]*e.array[a][o];i.push(n)}t.push(i)}return{array:t,m:c.m,n:e.n}},fi=(c,e)=>{let t=[];for(let r=0;r<c.m;r++){let i=[];for(let o=0;o<e.n;o++){let n={real:0,imaginary:0};for(let a=0;a<c.n;a++)n.real+=c.array[r][a].real*e.array[a][o].real-c.array[r][a].imaginary*e.array[a][o].imaginary,n.imaginary+=c.array[r][a].real*e.array[a][o].imaginary+c.array[r][a].imaginary*e.array[a][o].real;i.push(n)}t.push(i)}return t},Pt=c=>{let e={real:0,imaginary:0},t=c.n;if(t==2){let i=le(c.array[0][0],c.array[1][1]),o=le(c.array[1][0],c.array[0][1]);return{real:i.real-o.real,imaginary:i.imaginary-o.imaginary}}let r=Do(c.n);for(let i=0;i<t;i++){let o=0;for(let s=1;s<t;s++){let l=0;for(let d=0;d<t;d++)d!=i&&(r.array[o][l]={...c.array[s][d]},l++);o++}r.m=r.n=t-1;let n=Math.pow(-1,i),a=le({real:c.array[0][i].real*n,imaginary:c.array[0][i].imaginary*n},Pt(r));e.real+=a.real,e.imaginary+=a.imaginary}return e};var Io=c=>{let e={real_values:!1,imaginary_values:!1,square:c.m===c.n,unit_diagonal:!0},t={m:c.m,n:c.n,array:[]},r={m:c.m,n:c.n,array:[]};for(let i=0;i<c.m;i++){let o=c.array[i],n=[],a=[];for(let s=0;s<c.n;s++)o[s].real&&(e.real_values=!0),o[s].imaginary&&(e.imaginary_values=!0),s===i&&e.unit_diagonal&&(o[s].real!==1||o[s].imaginary!==0)&&(e.unit_diagonal=!1),n.push(o[s].real),a.push(o[s].imaginary);t.array.push(n),r.array.push(a)}return{real:t,imaginary:r,flags:e}},Fo=c=>{let e=c.array.map(t=>t.slice(0));return{m:c.m,n:c.n,array:e}},mi=c=>{if(c.m!==c.n)return;let e=Fo(c),t=e.array,r=0,i=0,o=0,n=0,a=c.m;for(i=1;i<a;i++)t[0][i]/=t[0][0];for(i=1;i<a;i++){for(o=i;o<a;o++){for(r=0,n=0;n<i;n++)r+=t[o][n]*t[n][i];t[o][i]-=r}if(i!=a-1)for(o=i+1;o<a;o++){for(r=0,n=0;n<i;n++)r+=t[i][n]*t[n][o];t[i][o]=(t[i][o]-r)/t[i][i]}}for(i=0;i<a;i++)for(o=i;o<a;o++){let s=1;if(i!=o)for(s=0,n=i;n<o;n++)s-=t[o][n]*t[n][i];t[o][i]=s/t[o][o]}for(i=0;i<a;i++)for(o=i;o<a;o++)if(i!=o){for(r=0,n=i;n<o;n++)r+=t[n][o]*(i==n?1:t[i][n]);t[i][o]=-r}for(i=0;i<a;i++)for(o=0;o<a;o++){for(r=0,n=i>o?i:o;n<a;n++)r+=(o==n?1:t[o][n])*t[n][i];t[o][i]=r}return e},pi=c=>{let e=[];if(c.m!==c.n)return;let{real:t,imaginary:r,flags:i}=Io(c),o=mi(t);if(!o)return;if(!i.imaginary_values){for(let u=0;u<c.m;u++){let h=[];for(let m=0;m<c.n;m++)h.push({real:o.array[u][m],imaginary:0});e.push(h)}return e}let n=Ar(o,r),a=Ar(r,n),s=Lo(t,a),l=mi(s);if(!l)return;let d=Ar(n,l);for(let u=0;u<c.m;u++){let h=[];for(let m=0;m<c.n;m++)h.push({real:l.array[u][m],imaginary:-d.array[u][m]});e.push(h)}return e},bi=(c,e)=>{let t={real:e.real,imaginary:-e.imaginary},r=le(c,t),i=le(e,t);return{real:r.real/i.real,imaginary:r.imaginary/i.real}},kr=c=>{let e=c.real||0,t=c.imaginary||0;return le({real:Math.exp(e),imaginary:0},{real:Math.cos(t),imaginary:Math.sin(t)})},Ho=c=>{let e=Nt(c);return{real:Math.log(e.r),imaginary:e.theta}},he=(c,e)=>{if(e.imaginary)return kr(le(e,Ho(c)));{let t=Nt(c);return Vo({r:Math.pow(t.r,e.real),theta:t.theta*e.real})}};var _i=(c,e=0)=>c&&c.type===7?c:{type:7,value:{real:e,imaginary:0}},Ie=c=>c.imaginary?{type:7,value:c}:{type:3,value:c.real},Fe=(c,e)=>{if(c.type===6)return[0,0,c];if(e.type===6)return[0,0,e];let t=[0,0];switch(c.type){case 3:t[0]=c.value;break;case 4:t[0]=c.value?1:0;break;case 0:break;case 7:t[3]=c;break;default:return[0,0,T()]}switch(e.type){case 3:t[1]=e.value;break;case 4:t[1]=e.value?1:0;break;case 0:break;case 7:t[4]=e;break;default:return[0,0,T()]}return(t[3]||t[4])&&(t[3]=_i(t[3],t[0]),t[4]=_i(t[4],t[1])),t},No=(c,e)=>{let[t,r,i,o,n]=Fe(c,e);return i||(o&&n?Ie({real:o.value.real+n.value.real,imaginary:o.value.imaginary+n.value.imaginary}):{value:t+r,type:3})},Mr=(c,e)=>{let[t,r,i,o,n]=Fe(c,e);return i||(o&&n?Ie({real:o.value.real-n.value.real,imaginary:o.value.imaginary-n.value.imaginary}):{value:t-r,type:3})},Po=(c,e)=>{let[t,r,i,o,n]=Fe(c,e);if(i)return i;if(o&&n)return Ie(he(o.value,n.value));let a=Math.pow(t,r);return isNaN(a)?T():{type:3,value:a}},Oo=(c,e)=>{let[t,r,i,o,n]=Fe(c,e);if(i)return i;if(o&&n)return Ie(he(o.value,n.value));if(t<0&&r!==0&&Math.abs(r)<1)return Ie(he({real:t,imaginary:0},{real:r,imaginary:0}));let a=Math.pow(t,r);return isNaN(a)?T():{type:3,value:a}},Er=Po,Go=(c,e)=>{let[t,r,i,o,n]=Fe(c,e);return i||(o&&n?Ie(le(o.value,n.value)):{value:t*r,type:3})},Bo=(c,e)=>{let[t,r,i,o,n]=Fe(c,e);return i||(o&&n?n.value.real===0&&n.value.imaginary===0?ue():Ie(bi(o.value,n.value)):r===0?ue():{value:t/r,type:3})},$o=(c,e)=>{let[t,r,i]=Fe(c,e);return i||(r===0?ue():{value:t%r,type:3})},jo=(c,e)=>c.type===6?c:e.type===6?e:{type:2,value:`${c.type===0?"":c.value}${e.type===0?"":e.value}`},Tr=(c,e)=>{if(c.type===6)return c;if(e.type===6)return e;if(c.type===0&&(e.value===""||e.value===0||e.type===7&&e.value.real===0&&e.value.imaginary===0)||e.type===0&&(c.value===""||c.value===0||c.type===7&&c.value.real===0&&c.value.imaginary===0))return{type:4,value:!0};if(c.type===7||e.type===7){let t=!1;return c.type===e.type?t=c.value.real==e.value.real&&c.value.imaginary==e.value.imaginary:c.type===3?t=e.value.real==c.value&&!e.value.imaginary:e.type===3&&(t=c.value.real==e.value&&!c.value.imaginary),{type:4,value:t}}return{type:4,value:c.value==e.value}},gi=(c,e)=>{let t=Tr(c,e);return t.type===6?t:{type:4,value:!t.value}},qo=(c,e)=>c.type===6?c:e.type===6?e:c.type===7||e.type===7?T():{type:4,value:(c.value||0)>(e.value||0)},Jo=(c,e)=>c.type===6?c:e.type===6?e:c.type===7||e.type===7?T():{type:4,value:c.value>=e.value},Wo=(c,e)=>c.type===6?c:e.type===6?e:c.type===7||e.type===7?T():{type:4,value:c.value<e.value},Xo=(c,e)=>c.type===6?c:e.type===6?e:c.type===7||e.type===7?T():{type:4,value:c.value<=e.value},yi=()=>{Er=Oo},vi=c=>{switch(c){case"&":return jo;case"+":return No;case"-":return Mr;case"*":return Go;case"/":return Bo;case"^":return Er;case"**":return Er;case"%":return $o;case"=":return Tr;case"==":return Tr;case"!=":return gi;case"<>":return gi;case">":return qo;case">=":return Jo;case"<":return Wo;case"<=":return Xo}};var xi=c=>!Array.isArray(c)&&c.type===5&&!!c.value.type,at=c=>c.type===5&&c.key==="metadata",Ot=class{constructor(e,t){this.library=e;this.parser=t}context={address:{row:-1,column:-1},volatile:!1,call_index:0};call_index=0;named_range_map={};data_model;SetModel(e){this.data_model=e,this.named_range_map=e.named_ranges.Map(),this.context.model=e}Calculate(e,t,r=!1){return r||(this.context.address=t,this.context.volatile=!1,this.context.call_index=0,this.call_index=0),{value:this.CalculateExpression(e),volatile:this.context.volatile}}CellFunction2(e){if(!e.sheet_id)if(e.sheet)e.sheet_id=this.data_model.sheets.ID(e.sheet)||0;else return()=>j();let t=this.data_model.sheets.Find(e.sheet_id)?.cells;if(!t)return console.warn("missing cells reference @ "+e.sheet_id),()=>j();let r=t.GetCell(e);return r?()=>r.GetValue4():()=>({type:3,value:0})}CellFunction4(e,t){return e.sheet_id?this.data_model.sheets.Find(e.sheet_id)?.cells?.GetRange4(e,t,!0)||j():j()}GetMetadata(e,t){let r,i;switch(e.type){case"address":r=e;break;case"range":i=e;break;case"structured-reference":{let o=this.data_model.ResolveStructuredReference(e,this.context.address);o&&(o.type==="address"?r=o:o.type==="range"&&(i=o))}break;case"identifier":{let o=this.named_range_map[e.name.toUpperCase()];o&&(o.count===1?r=o.start:i=o)}break;case"call":{let o=this.CalculateExpression(e,!0);if(xi(o))if(o.value.type==="address")r=o.value;else if(o.value.type==="range")i=o.value;else return o;else return o}break;default:return this.CalculateExpression(e)}if(r){let o;if(r.sheet_id&&(o=this.data_model.sheets.Find(r.sheet_id)),!o)return console.error("missing sheet [ac8]"),j();let n=o.CellData(r),a=n.calculated_type?n.calculated:n.value,s={type:"metadata",address:{...r},value:a,format:n.style?n.style.number_format:void 0,...t(n,r)};return{type:5,value:s,key:"metadata"}}else if(i){if(i.start.row===1/0||i.start.column===1/0)return j();let o;if(i.start.sheet_id&&(o=this.data_model.sheets.Find(i.start.sheet_id)),!o)throw new Error("missing sheet [ac9]");let n=[];for(let a=i.start.column;a<=i.end.column;a++){let s=[];for(let l=i.start.row;l<=i.end.row;l++){let d=o.CellData({row:l,column:a});r={...i.start,row:l,column:a};let u=d.calculated_type?d.calculated:d.value,h={type:"metadata",address:r,value:u,format:d.style?d.style.number_format:void 0,...t(d,r)};s.push({type:5,value:h,key:"metadata"})}n.push(s)}return{type:8,value:n}}return this.CalculateExpression(e)}RewriteMacro(e,t){let r;switch(e.type){case"identifier":if(r=t[e.name.toUpperCase()],r)return JSON.parse(JSON.stringify(r));break;case"binary":e.left=this.RewriteMacro(e.left,t),e.right=this.RewriteMacro(e.right,t);break;case"unary":e.operand=this.RewriteMacro(e.operand,t);break;case"group":e.elements=e.elements.map(i=>this.RewriteMacro(i,t));break;case"call":e.args=e.args.map(i=>this.RewriteMacro(i,t));break}return e}CallMacro(e,t){if(!t.expression)return()=>Ce();let r=JSON.stringify(t.expression),i={},o=t.argument_names?.map(n=>n.toUpperCase())||[];return n=>{let a=JSON.parse(r);for(let s=0;s<o.length;s++)i[o[s]]=n.args[s]||{type:"missing",id:0};return this.CalculateExpression(this.RewriteMacro(a,i))}}CallExpression(e,t=!1){let r=this.library.Get(e.name);return r?i=>{let o=this.call_index++;this.context.volatile=this.context.volatile||!!r.volatile;let n=e.name.toLowerCase()==="if",a=-1,s,l=r.arguments||[],d=i.args.map((u,h)=>{if(s)return;let m=l[Math.min(h,l.length-1)]||{};if(h===a)return m.boxed?{type:0}:void 0;if(typeof u>"u")return n&&h===0&&(a=1),m.boxed?{type:0}:void 0;if(m.address)return m.boxed?{type:2,value:this.parser.Render(u).replace(/\$/g,"")}:this.parser.Render(u).replace(/\$/g,"");if(m.metadata)return this.GetMetadata(u,()=>({}));{let f=this.CalculateExpression(u);if(f.type===6){if(m.allow_error)return f;s=f;return}if(n&&h===0&&f.type!==8){let p=!1;if(f.type===2){let _=f.value.toLowerCase().trim();p=_!=="false"&&_!=="f"}else p=!!f.value;a=p?2:1}return m.boxed?f:f.type===8?f.value.map(p=>p.map(_=>_.value)):f.value}});if(s)return s;if(this.context.call_index=o,r.return_type===1){let u=r.fn.apply(null,d);if(t)return u;if(xi(u)){if(u.value.type==="address")return this.CellFunction2(u.value)();if(u.value.type==="range")return this.CellFunction4(u.value.start,u.value.end)}return u}return r.fn.apply(null,d)}:()=>Sr()}ResolveStructuredReference(e){let t=this.data_model.ResolveStructuredReference(e,this.context.address);if(t){if(t.type==="address")return this.CellFunction2(t);if(t.type==="range")return()=>this.CellFunction4(t.start,t.end)}return()=>j()}ResolveDimensionedQuantity(){return e=>{let t=this.CalculateExpression(e.expression);return{type:9,value:{value:t.value,unit:e.unit.name}}}}UnaryExpression(e){switch(e.operator){case"+":return t=>this.CalculateExpression(t.operand);case"-":{let t=Mr,r={type:3,value:0};return i=>{let o=this.CalculateExpression(i.operand);return o.type===8?{type:8,value:o.value.map(n=>n.map(a=>t(r,a)))}:t(r,o)}}default:return()=>(console.warn("unexpected unary operator:",e.operator),Ce())}}RecycleArray(e,t,r){if(e[0].length<r){let i=e[0].length;for(let o of e)for(let n=i;n<r;n++)o[n]=o[n%i]}if(e.length<t){let i=e.length;for(let o=i;o<t;o++)e[o]=e[o%i].slice(0)}return e}ElementwiseBinaryExpression(e,t,r){let i=Math.max(t.value.length,r.value.length),o=Math.max(t.value[0].length,r.value[0].length),n=this.RecycleArray(t.value,i,o),a=this.RecycleArray(r.value,i,o),s=[];for(let l=0;l<i;l++){let d=[];for(let u=0;u<o;u++)d[u]=e(n[l][u],a[l][u]);s.push(d)}return{type:8,value:s}}BinaryExpression(e){let t=vi(e.operator);return t?r=>{let i=this.CalculateExpression(r.left),o=this.CalculateExpression(r.right);return i.type===8?o.type===8?this.ElementwiseBinaryExpression(t,i,o):this.ElementwiseBinaryExpression(t,i,{type:8,value:[[o]]}):o.type===8?this.ElementwiseBinaryExpression(t,{type:8,value:[[i]]},o):t(i,o)}:()=>(console.info(`(unexpected binary operator: ${e.operator})`),Ce())}Identifier(e){let t=e.name;if(t[0]==="#")return()=>j();let r=t.toUpperCase();switch(r){case"FALSE":case"F":return()=>({value:!1,type:4});case"TRUE":case"T":return()=>({value:!0,type:4});case"UNDEFINED":return()=>({value:void 0,type:0})}return()=>{let i=this.named_range_map[r];if(i)return i.count===1?this.CellFunction4(i.start,i.start):this.CellFunction4(i.start,i.end);let o=this.data_model.named_expressions.get(r);return o?this.CalculateExpression(o):Sr()}}GroupExpression(e){return!e.elements||e.elements.length!==1?(console.warn("Can't handle group !== 1"),()=>Ce()):t=>this.CalculateExpression(t.elements[0])}CalculateExpression(e,t=!1){if(e.user_data)return e.user_data(e);switch(e.type){case"call":{let r=this.data_model.macro_functions.get(e.name.toUpperCase());return r?(e.user_data=this.CallMacro(e,r))(e):(e.user_data=this.CallExpression(e,t))(e)}case"address":return(e.user_data=this.CellFunction2(e))();case"range":return(e.user_data=r=>this.CellFunction4(r.start,r.end))(e);case"binary":return(e.user_data=this.BinaryExpression(e))(e);case"unary":return(e.user_data=this.UnaryExpression(e))(e);case"identifier":return(e.user_data=this.Identifier(e))();case"missing":return(e.user_data=()=>({value:void 0,type:0}))();case"dimensioned":return(e.user_data=this.ResolveDimensionedQuantity())(e);case"literal":{let r={value:e.value,type:ae(e.value)};return(e.user_data=()=>r)()}case"group":return(e.user_data=this.GroupExpression(e))(e);case"complex":{let r={value:{real:e.real,imaginary:e.imaginary},type:7};return(e.user_data=()=>r)()}case"structured-reference":return(e.user_data=this.ResolveStructuredReference(e))();case"array":return(e.user_data=()=>({type:8,value:e.values.map(r=>(Array.isArray(r)?r:[r]).map(i=>({type:ae(i),value:i})))}))();default:return console.warn("Unhandled parse expr:",e),It()}}};var Vc=1e3*60*60*24;var Gt=c=>{let e=[],t=c.length,r=c[0].length;for(let i=0;i<r;i++){e[i]=[];for(let o=0;o<t;o++)e[i][o]=c[o][i]}return e};var ge=c=>{let e=[];for(let t of c)if(t.type===8)for(let r of t.value)e=e.concat(ge(r));else e.push(t);return e},N=c=>Array.isArray(c)?c.reduce((e,t)=>typeof t>"u"?e:Array.isArray(t)?e.concat(N(t)):t instanceof Float32Array||t instanceof Float64Array?e.concat(Array.from(t)):e.concat([t]),[]):[c];var P=c=>(e,...t)=>Array.isArray(e)?{type:8,value:e.map(r=>r.map(i=>c(i,...t)))}:typeof e=="object"&&e&&e.type===8?{type:8,value:e.value.map(r=>r.map(i=>c(i,...t)))}:c(e,...t),Ae=c=>(e,t,...r)=>{let i=!1,o=!1;return e&&typeof e=="object"&&e.type===8?(e=e.value,i=!0):i=Array.isArray(e),t&&typeof t=="object"&&t.type===8?(t=t.value,o=!0):o=Array.isArray(t),i?o?{type:8,value:e.map((n,a)=>n.map((s,l)=>c(s,t[a][l],...r)))}:{type:8,value:e.map(n=>n.map(a=>c(a,t,...r)))}:o?{type:8,value:t.map(n=>n.map(a=>c(e,a,...r)))}:c(e,t,...r)};var Bt=class{functions={};Register(...e){for(let t of e)for(let r of Object.keys(t)){if(/[^a-zA-Z0-9._]/.test(r))throw new Error("invalid function name (invalid character)");if(r.length>255)throw new Error("invalid function name (too long, > 255)");if(/^[^a-zA-Z]/.test(r))throw new Error("invalid function name (start with an ascii letter)");let i=r.toLowerCase();if(this.functions[i])throw new Error(`function name (${i}) is already in use`);let o=t[r];o.canonical_name=r,this.functions[i]=o}}Get(e){let t=e.toLowerCase();return this.functions[t]}List(e=!0){let t={};for(let r of Object.keys(this.functions))e&&this.functions[r].visibility==="internal"||(t[r]=this.functions[r]);return t}Alias(e,t){let r=this.Get(t);if(!r)throw new Error(`referenced function ${t} does not exist`);this.Register({[e]:{...r}})}};var st=class{static default_color="#888";static UnpackValues(e){if(Array.isArray(e)){let t=e[0];return Array.isArray(t)||t instanceof Float64Array||t instanceof Float32Array?e.reduce((r,i)=>r.concat(this.UnpackValues(i)),[]):e.map(r=>isNaN(r)?void 0:r)}else{if(e instanceof Float32Array||e instanceof Float64Array)return Array.prototype.slice.call(e);if(e&&typeof e=="object"){let r=Object.keys(e).length;if(typeof e[0]<"u"&&typeof e[(r-1).toString()]<"u"){let i=[];for(let o=0;o<r;o++)i[o]=e[o.toString()];return i}}}return[]}static SparklineCommon(e,t){let r=[],i=t.text?.text||this.default_color,o=[i,i];return Array.isArray(e.calculated)&&(r=this.UnpackValues(e.calculated[0]),typeof e.calculated[1]=="string"&&(o[0]=e.calculated[1]),typeof e.calculated[2]=="string"&&(o[1]=e.calculated[2])),{values:r,colors:o}}static RenderLine(e,t,r,i,o){let{values:n,colors:a}=this.SparklineCommon(i,o),s=.05,l=.1,d=1;Array.isArray(i.calculated)&&typeof i.calculated[2]=="number"&&(d=i.calculated[2]);let u=0,h=0,m=-1;for(let f=0;f<n.length;f++){let p=n[f];typeof p=="number"&&(m>=0?(u=Math.min(u,p),h=Math.max(h,p)):(m=f,u=h=p))}if(u!==h){let f=e*(1-2*s)/(n.length-1),p=h-u,_=t*(1-2*l),b=t*l;r.strokeStyle=a[0],r.lineWidth=d,r.lineCap="round",r.lineJoin="round",r.beginPath();let v=0;for(let g=m;g<n.length;g++){let w=n[g];if(typeof w=="number"){let x=e*s+f*g,S=t-(w-u)*_/p-b;v===0?(r.moveTo(x,S),v=1):r.lineTo(x,S)}else v=0}r.stroke()}}static RenderColumn(e,t,r,i,o){let{values:n,colors:a}=this.SparklineCommon(i,o),s=3,l=2.5,d=0,u=0,h=!1;for(let m of n)typeof m=="number"&&(h?(d=Math.min(d,m),u=Math.max(u,m)):(h=!0,d=u=m));if(n.length){let m=(e-2*s-2)/(n.length-0),f=t-2*l,p=l;if(d!==u)if(d<0&&u>0){let _=u-d,b=p+u/_*f;for(let v=0;v<n.length;v++){let g=n[v];if(typeof g=="number"){let w=s+v*m,x=Math.abs(g)/_*f;if(g>=0){r.fillStyle=a[0];let S=b-x;r.fillRect(w+2,S,m-2,x)}else{r.fillStyle=a[1];let S=b;r.fillRect(w+2,S,m-2,x)}}}}else if(u>0){r.fillStyle=a[0];let _=u-d;for(let b=0;b<n.length;b++){let v=n[b];if(typeof v=="number"){let g=s+b*m,w=Math.max(1,(v-d)/_*f),x=t-p-w;r.fillRect(g+2,x,m-2,w)}}}else{r.fillStyle=a[1];let _=u-d;for(let b=0;b<n.length;b++){let v=n[b];if(typeof v=="number"){let g=s+b*m,w=Math.max(1,Math.abs(u-v)/_*f),x=p;r.fillRect(g+2,x,m-2,w)}}}}}};var Ci=c=>{let{x:e,y:t,width:r,height:i,cell:o}=c,n={},a=3,s=Math.round(16*(c.scale||1));if(o&&r&&i&&e&&t){let l={x:a,y:i-a-s};if(o.style){switch(o.style.vertical_align){case"top":l.y=a;break;case"middle":l.y=Math.round((i-s)/2);break}switch(o.style.horizontal_align){case"right":l.x=Math.round(r-a-s);break;case"center":l.x=Math.round((r-s)/2);break}}e>=l.x&&e<=l.x+s&&t>=l.y&&t<=l.y+s&&(n.value=`=Checkbox(${o.calculated?"FALSE":"TRUE"})`,n.block_selection=!0)}return n},Si=c=>{let{context:e,width:t,height:r,cell:i}=c,o=c.scale||1;e.lineJoin="round",e.lineCap="round";let n=3*o,a=16*o,s=n,l=r-n-a;if(i.style){switch(i.style.vertical_align){case"top":l=n;break;case"middle":l=(r-a)/2;break}switch(i.style.horizontal_align){case"right":s=t-n-a;break;case"center":s=(t-a)/2;break}}s=Math.floor(s)+.5,l=Math.floor(l)+.5;let d=Math.floor(s+a)+.5,u=Math.floor(l+a)+.5;if(i&&i.calculated){e.lineWidth=.5,e.fillStyle=e.strokeStyle,e.beginPath(),e.moveTo(s,l),e.lineTo(s+16*o,l),e.lineTo(s+16*o,l+16*o),e.lineTo(s,l+16*o),e.closePath(),e.moveTo(s+15*o,l+4*o);for(let h of[[13.59,2.58],[6,10.17],[2.41,6.59],[1,8],[6,13]])e.lineTo(s+h[0]*o,l+h[1]*o);e.closePath(),e.fill()}else e.lineWidth=1,e.lineJoin="round",e.beginPath(),e.moveTo(s,l),e.lineTo(d,l),e.lineTo(d,u),e.lineTo(s,u),e.closePath(),e.stroke();return{handled:!0}};var Ai=c=>{let e=.254829592,t=-.284496736,r=1.421413741,i=-1.453152027,o=1.061405429,n=.3275911;c=Math.abs(c);let a=1/(1+n*c);return 1-((((o*a+i)*a+r)*a+t)*a+e)*a*Math.exp(-1*c*c)},Zo=Math.sqrt(2*Math.PI),ki=c=>{if(c===.5)return 0;let e=c<1&&c>.5?1-c:c,t=Math.sqrt(Math.log(1/Math.pow(e,2))),r=t-(2.515517+.802853*t+.010328*Math.pow(t,2))/(1+1.432788*t+.189269*Math.pow(t,2)+.001308*Math.pow(t,3));return c>.5?r:-r},Ur={Sqrt:{description:"Returns the square root of the argument",arguments:[{boxed:!0}],fn:P(c=>{if(c.type===7){let e=he(c.value,{real:.5,imaginary:0});return ce(e)}else{if(c.type===0||!c.value)return{type:3,value:0};if(c.type===3&&c.value<0){let e=he({real:c.value,imaginary:0},{real:.5,imaginary:0});return{type:7,value:e}}else{let e=Math.sqrt(c.value);return isNaN(e)?T():{type:3,value:e}}}})},Power:{description:"Returns base raised to the given power",arguments:[{name:"base",boxed:!0},{name:"exponent",boxed:!0}],fn:Ae((c,e)=>{if(c.type===3&&e.type===3&&(c.value>=0||e.value===0||Math.abs(e.value)>=1)){let o=Math.pow(c.value,e.value);return isNaN(o)?T():{type:3,value:o}}let t=c.type===7?c.value:{real:c.value||0,imaginary:0},r=e.type===7?e.value:{real:e.value||0,imaginary:0},i=he(t,r);return ce(i)})}},je={Int:{fn:c=>({type:3,value:Math.floor(c)})},Rand:{volatile:!0,fn:()=>({type:3,value:Math.random()})},RandBetween:{arguments:[{name:"min"},{name:"max"}],volatile:!0,fn:(c=0,e=1)=>{if(c>e){let t=c;c=e,e=t}return{type:3,value:Math.floor(Math.random()*(e+1-c)+c)}}},Sum:{description:"Adds arguments and ranges",arguments:[{boxed:!0,name:"values or ranges"}],fn:(...c)=>{let e={real:0,imaginary:0},t=ge(c);for(let r of t)switch(r.type){case 3:e.real+=r.value;break;case 4:e.real+=r.value?1:0;break;case 7:e.real+=r.value.real,e.imaginary+=r.value.imaginary;break;case 6:return r}return ce(e)}},Now:{description:"Returns current time",volatile:!0,fn:()=>({type:3,value:Oe(new Date().getTime())})},Date:{description:"Constructs a Lotus date from parts",arguments:[{name:"year"},{name:"month"},{name:"day"}],fn:(c,e,t)=>{let r=new Date;return r.setMilliseconds(0),r.setSeconds(0),r.setMinutes(0),r.setHours(0),c<0||c>1e4?H():(c<1899&&(c+=1900),r.setFullYear(c),e<1||e>12?H():(r.setMonth(e-1),t<1||t>31?H():(r.setDate(t),{type:3,value:Oe(r.getTime())})))}},Today:{description:"Returns current day",volatile:!0,fn:()=>{let c=new Date;return c.setMilliseconds(0),c.setSeconds(0),c.setMinutes(0),c.setHours(12),{type:3,value:Oe(c.getTime())}}},IfError:{description:"Returns the original value, or the alternate value if the original value contains an error",arguments:[{name:"original value",allow_error:!0,boxed:!0},{name:"alternate value"}],fn:(c,e=0)=>c&&c.type===6?{value:e,type:ae(e)}:c},IsError:{description:"Checks if another cell contains an error",arguments:[{name:"reference",allow_error:!0,boxed:!0}],fn:(...c)=>{let e=ge(c);for(let t of e)if(t.type===6)return{type:4,value:!0};return{type:4,value:!1}}},Cell:{description:"Returns data about a cell",arguments:[{name:"type",description:"Type of data to return"},{name:"reference",description:"Cell reference",metadata:!0}],fn:Ae((c,e)=>{if(!at(e))return j();if(c)switch(c.toString().toLowerCase()){case"format":return e.value.format?{type:2,value:e.value.format}:j();case"address":return{type:2,value:e.value.address.label.replace(/\$/g,"")}}return{type:6,value:hi.error}})},Year:{description:"Returns year from date",arguments:[{name:"date"}],fn:c=>J(new Date(De(c)).getUTCFullYear())},Month:{description:"Returns month from date",arguments:[{name:"date"}],fn:c=>J(new Date(De(c)).getUTCMonth()+1)},Day:{description:"Returns day of month from date",arguments:[{name:"date"}],fn:c=>J(new Date(De(c)).getUTCDate())},Radians:{description:"Converts degrees to radians",arguments:[{name:"Degrees",description:"Angle in degrees"}],fn:P(c=>J(c*Math.PI/180))},Degrees:{description:"Converts radians to degrees",arguments:[{name:"Radians",description:"Angle in radians"}],fn:P(c=>J(c/Math.PI*180))},CountA:{description:"Counts cells that are not empty",fn:(...c)=>J(N(c).reduce((e,t)=>typeof t>"u"?e:e+1,0))},Count:{description:"Counts cells that contain numbers",fn:(...c)=>J(N(c).reduce((e,t)=>typeof t=="number"||fe(t)?e+1:e,0))},Or:{fn:(...c)=>{let e=!1;c=N(c);for(let t of c)e=e||!!t;return J(e)}},And:{fn:(...c)=>{let e=!0;c=N(c);for(let t of c)e=e&&!!t;return J(e)}},Not:{fn:P((...c)=>c.length===0?H():c.length===1?J(!c[0]):J(!0))},If:{arguments:[{name:"test value",boxed:!0},{name:"value if true",boxed:!0,allow_error:!0},{name:"value if false",boxed:!0,allow_error:!0}],fn:(c,e={type:4,value:!0},t={type:4,value:!1})=>{let r=e.type===8,i=t.type===8;return c.type===8?{type:8,value:c.value.map((n,a)=>n.map((s,l)=>(s.type===2?s.value.toLowerCase()!=="false"&&s.value.toLowerCase()!=="f":!!s.value)?r?e.value[a][l]:e:i?t.value[a][l]:t))}:(c.type===2?c.value.toLowerCase()!=="false"&&c.value.toLowerCase()!=="f":!!c.value)?e:t}},Fact:{description:"Returns the factorial of a number",arguments:[{name:"number"}],fn:P(c=>{c=Math.floor(c);let e=1;for(;c>1;)e*=c,c--;return{type:3,value:e}})},Power:{description:"Returns base raised to the given power",arguments:[{name:"base",boxed:!0},{name:"exponent",boxed:!0}],fn:Ae((c,e)=>{if(c.type===7||e.type===7){let t=c.type===7?c.value:{real:c.value||0,imaginary:0},r=e.type===7?e.value:{real:e.value||0,imaginary:0},i=he(t,r);return ce(i)}else{let t=Math.pow(c.value,e.value);return isNaN(t)?T():{type:3,value:t}}})},Mod:{fn:Ae((c,e)=>e?J(c%e):ue())},Sort:{arguments:[{name:"values"}],fn:(...c)=>(c=N(c),c.every(e=>typeof e=="number")?c.sort((e,t)=>e-t):c.sort(),{type:8,value:[c.map(e=>J(e))]})},Transpose:{description:"Returns transpose of input matrix",arguments:[{name:"matrix",boxed:!0}],fn:c=>c.type===8?{type:8,value:Gt(c.value)}:c},Max:{fn:(...c)=>({type:3,value:Math.max.apply(0,N(c).filter(e=>typeof e=="number"))})},Min:{fn:(...c)=>({type:3,value:Math.min.apply(0,N(c).filter(e=>typeof e=="number"))})},SumProduct:{description:"Returns the sum of pairwise products of two or more ranges",fn:(...c)=>{let e=c.map(i=>N(i)),t=Math.max.apply(0,e.map(i=>i.length)),r=0;for(let i=0;i<t;i++)r+=e.reduce((o,n)=>o*(n[i]||0),1);return{type:3,value:r}}},VLookup:{fn:(c,e,t,r=!0)=>{if(t=Math.max(0,t-1),r){let i=Math.abs(c-e[0][0]),o=e[t][0];for(let n=1;n<e[0].length;n++){let a=Math.abs(e[0][n]-c);a<i&&(i=a,o=e[t][n])}return J(o)}else{for(let i=1;i<e[0].length;i++)if(e[0][i]==c)return e[t][i];return xe()}}},Product:{arguments:[{boxed:!0}],fn:(...c)=>{let e={real:1,imaginary:0};c=ge(c);for(let t of c)t.type===7?e=le(e,t.value):t.type===3&&(e.real*=t.value,e.imaginary*=t.value);return ce(e)}},Log:{fn:Ae((c,e=10)=>({type:3,value:Math.log(c)/Math.log(e)}))},Log10:{fn:P(c=>({type:3,value:Math.log(c)/Math.log(10)}))},Ln:{fn:P(c=>({type:3,value:Math.log(c)}))},Round:{fn:Ae((c,e=0)=>{let t=Math.pow(10,e);return{type:3,value:Math.round(t*c)/t}})},RoundDown:{fn:Ae((c,e=0)=>{let t=Math.pow(10,e),r=c>=0;return{type:3,value:r?Math.floor(t*c)/t:Math.ceil(t*c)/t}})},Reverse:{arguments:[{boxed:!0}],fn:c=>c.type===8?(c.value.length===1?c.value[0].reverse():c.value.reverse(),c):{type:2,value:c.value.toString().split("").reverse().join("")}},Exp:{arguments:[{boxed:!0}],fn:P(c=>{if(c.type===7){let e=kr(c.value);return ce(e)}return{type:3,value:Math.exp(c.value||0)}})},Abs:{arguments:[{boxed:!0}],fn:P(c=>c.type===7?{type:3,value:Math.sqrt(c.value.real*c.value.real+c.value.imaginary*c.value.imaginary)}:{type:3,value:Math.abs(c.value||0)})},Simplify:{arguments:[{name:"value"},{name:"significant digits"}],fn:Ae((c,e=2)=>{if(e=e||2,c===0)return{type:3,value:c};let t=c<0?-1:1;c*=t;let r=Math.pow(10,Math.floor(Math.log10(c))+1-e);return{type:3,value:Math.round(c/r)*r*t}})},Erf:{fn:c=>({type:3,value:Ai(c)})},NormsInv:{description:"Inverse of the normal cumulative distribution",arguments:[{name:"probability"}],fn:c=>({type:3,value:ki(c)})},"Norm.Inv":{description:"Inverse of the normal cumulative distribution",arguments:[{name:"probability"},{name:"mean",default:0},{name:"standard deviation",default:1}],xlfn:!0,fn:(c,e=0,t=1)=>({type:3,value:ki(c)*t+e})},"Norm.Dist":{description:"Cumulative normal distribution",arguments:[{name:"value"},{name:"mean",default:0},{name:"standard deviation",default:1},{name:"cumulative",default:!0}],xlfn:!0,fn:(c,e=0,t=1,r=!0)=>{let i=0;return r?i=.5*(1+(c<e?-1:1)*Ai(Math.abs(c-e)/(t*Math.sqrt(2)))):i=Math.exp(-1/2*Math.pow((c-e)/t,2))/(t*Zo),{type:3,value:i}}},Sqrt:{description:"Returns the square root of the argument",arguments:[{boxed:!0}],fn:P(c=>{if(c.type===7){let e=he(c.value,{real:.5,imaginary:0});return ce(e)}else{if(c.type===0||!c.value)return{type:3,value:0};{let e=Math.sqrt(c.value);return isNaN(e)?T():{type:3,value:e}}}})},HexToDec:{arguments:[{description:"hexadecimal string"}],fn:c=>({type:3,value:parseInt(c,16)})},DecToHex:{arguments:[{description:"number"}],fn:c=>({type:2,value:c.toString(16)})},Checkbox:{arguments:[{name:"checked"}],click:Ci,render:Si,fn:c=>({value:!!c,type:4})},"Sparkline.Column":{arguments:[{name:"data"},{name:"color"},{name:"negative color"}],render:c=>(st.RenderColumn(c.width,c.height,c.context,c.cell,c.style),{handled:!0}),fn:(...c)=>({type:5,value:c,key:"sparkline-data"})},"Sparkline.Line":{arguments:[{name:"data"},{name:"color"},{name:"line width"}],render:c=>(st.RenderLine(c.width,c.height,c.context,c.cell,c.style),{handled:!0}),fn:(...c)=>({type:5,value:c,key:"sparkline-data"})},UniqueValues:{arguments:[{name:"range",boxed:!0}],visibility:"internal",fn:c=>{if(c.type===8){let e=c.value.length,t=c.value[0]?.length,r=a=>{if(a)switch(a.type){case 2:case 3:case 4:return a.value;case 0:return"";default:return console.info("check",a,a.value),a.value?.toString()||""}else return""},i=new Set,o=new Set;for(let a of c.value)for(let s of a){let l=r(s);i.has(l)?o.add(l):i.add(l)}let n=[];for(let a of c.value){let s=[];for(let l of a){let d=r(l);s.push({type:4,value:!o.has(d)})}n.push(s)}return{type:8,value:n}}return{type:4,value:!0}}},Gradient:{arguments:[{name:"range",boxed:!0},{name:"min"},{name:"max"}],visibility:"internal",fn:(c,e,t)=>{let r=ge([c]),i=0,o=0,n=0,a=0;for(let u of r){if(u.type===6)return u;u.type===3&&(o===0?(n=u.value,a=u.value):(n=Math.min(n,u.value),a=Math.max(a,u.value)),o++)}typeof t=="number"&&(a=t),typeof e=="number"&&(n=e);let s=a-n,l=1,d=1;if(c.type===8){l=c.value.length,d=c.value[0]?.length||0;let u=[];for(let h=0;h<l;h++){let m=[];for(let f=0;f<d;f++){let p=c.value[h][f];if(p.type===3){let _=0;s>0&&(_=(p.value-n)/s),m.push({type:3,value:_})}else m.push({type:0})}u.push(m)}return{type:8,value:u}}else return H()}}},Ri={};for(let c of Object.keys(je))Ri[c.toLowerCase()]=c;var Qo=["pow"],Ei={};for(let c of Qo)Ei[c.toLowerCase()]=c;for(let c of Object.getOwnPropertyNames(Math)){let e=c.toLowerCase();if(Ri[e]||Ei[e])continue;let t=Object.getOwnPropertyDescriptor(Math,c);if(!t)continue;let r=t.value,i=typeof r;switch(i){case"number":je[c]={fn:()=>({type:3,value:r}),category:["Math Functions"]};break;case"function":je[c]={fn:(...o)=>J(r(...o)),category:["Math Functions"]};break;default:console.info("unexpected type:",i,c);break}}Math.log10||(Math.log10=c=>Math.log(c)/Math.log(10));var lt=(c,e,t=0,r=0,i=0)=>i?-(t*(c/(1-Math.pow(1+c,-e))))/(1+c)-r*(1/((1+c)*((Math.pow(1+c,e)-1)/c))):-(t*c*Math.pow(1+c,e)+r*c)/(Math.pow(1+c,e)-1),Mi=(c,e,t,r=0,i=0)=>i?(1+c)*-t/c*(Math.pow(1+c,e)-1)-r*Math.pow(1+c,e):-t/c*(Math.pow(1+c,e)-1)-r*Math.pow(1+c,e),zr=(c,e,t,r=0,i=0,o=0)=>{if(e<1)return NaN;if(e===1&&o)return 0;let n=lt(c,t,r,i,o),a=Mi(c,e-1,n,r,o)*c;return o?a/(1+c):a},Ti=(c,e,t,r=0,i=0,o=0)=>lt(c,t,r,i,o)-zr(c,e,t,r,i,o),Ui={NPV:{description:"Returns the present value of a series of future cashflows",arguments:[{name:"Rate"},{name:"Cashflow"}],fn:(c=0,...e)=>{let t=0,r=N(e);for(let i=0;i<r.length;i++){let o=r[i];typeof o=="number"&&(t+=Math.pow(1+c,-(i+1))*o)}return{type:3,value:t}}},XNPV:{description:"returns the NPV of a nonperiodic stream of payments at a given rate",arguments:[{name:"Discount rate"},{name:"Values"},{name:"Dates"}],fn:(c,e,t)=>{if(typeof c!="number")return H();if(e=N(e),t=N(t),e.length!==t.length)return H();let r=[];for(let n of e){if(typeof n!="number")return H();r.push(n)}let i=[];for(let n of t){if(typeof n!="number")return H();i.push(Math.floor(n))}let o=0;for(let n=0;n<r.length;n++)o+=(r[n]||0)/Math.pow(1+c,(i[n]-i[0])/365);return{type:3,value:o}}},XIRR:{description:"returns the internal rate of return of a nonperiodic stream of payments",arguments:[{name:"Values"},{name:"Dates"},{name:"Guess",default:.1}],fn:(c,e,t=.1)=>{if(c=N(c),e=N(e),c.length!==e.length)return H();let r=0,i=0,o=[];for(let u of c){if(typeof u!="number")return H();u>0&&r++,u<0&&i++,o.push(u)}if(r<=0||i<=0)return H();let n=[];for(let u of e){if(typeof u!="number")return H();n.push(Math.floor(u))}let a=n[0];for(let u of n)if(u<a)return H();let s=.1,l=[{found:!1,value:0},{found:!1,value:0}],d=o.length;for(let u=0;u<100;u++){let h=0;for(let m=0;m<d;m++)h+=(o[m]||0)/Math.pow(1+t,(n[m]-n[0])/365);if(Math.abs(h)<=1e-6)return{type:3,value:t};if(h>0){if(l[0].value=l[0].found?Math.max(l[0].value,t):t,l[0].found=!0,!l[1].found){t+=s;continue}}else if(l[1].value=l[1].found?Math.min(l[1].value,t):t,l[1].found=!0,!l[0].found){t-=s;continue}t=l[0].value+(l[1].value-l[0].value)/2}return T()}},IRR:{description:"Calculates the internal rate of return of a series of cashflows",arguments:[{name:"Cashflows"},{name:"Guess",default:.1}],fn:(c,e=.1)=>{let t=N(c).map(o=>typeof o=="number"?o:0),r=.1,i=[{found:!1,value:0},{found:!1,value:0}];for(let o=0;o<50;o++){let n=0;for(let a=0;a<t.length;a++)n+=Math.pow(1+e,-(a+1))*t[a];if(Math.abs(n)<=.00125)return{type:3,value:e};if(n>0){if(i[0].value=i[0].found?Math.max(i[0].value,e):e,i[0].found=!0,!i[1].found){e+=r;continue}}else if(i[1].value=i[1].found?Math.min(i[1].value,e):e,i[1].found=!0,!i[0].found){e-=r;continue}e=i[0].value+(i[1].value-i[0].value)/2}return{type:6,value:"NUM"}}},CUMPRINC:{description:"Returns cumulative principal paid on a loan between two periods",arguments:[{name:"Rate"},{name:"Periods"},{name:"Present Value"},{name:"Start Period"},{name:"End Period"},{name:"Type",default:0}],fn:(c,e,t,r,i,o=0)=>{let n=0;for(let a=r;a<=i;a++)n+=Ti(c,a,e,t,0,o);return{type:3,value:n}}},CUMIPMT:{description:"Returns cumulative interest paid on a loan between two periods",arguments:[{name:"Rate"},{name:"Periods"},{name:"Present Value"},{name:"Start Period"},{name:"End Period"},{name:"Type",default:0}],fn:(c,e,t,r,i,o=0)=>{let n=0;for(let a=r;a<=i;a++)n+=zr(c,a,e,t,0,o);return{type:3,value:n}}},IPMT:{description:"Returns the interest portion of a payment",arguments:[{name:"Rate"},{name:"Period"},{name:"Periods"},{name:"Present Value",default:0},{name:"Future Value",default:0},{name:"Type",default:0}],fn:(c,e,t,r=0,i=0,o=0)=>({type:3,value:zr(c,e,t,r,i,o)})},PPMT:{description:"Returns the principal portion of a payment",arguments:[{name:"Rate"},{name:"Period"},{name:"Periods"},{name:"Present Value",default:0},{name:"Future Value",default:0},{name:"Type",default:0}],fn:(c,e,t,r=0,i=0,o=0)=>({type:3,value:Ti(c,e,t,r,i,o)})},Rate:{description:"Returns the interest rate of a loan",arguments:[{name:"Periods"},{name:"Payment"},{name:"Present Value",default:0},{name:"Future Value",default:0},{name:"Type",default:0}],fn:(c,e,t=0,r=0,i=0)=>{let o=.25,n=[-1,1],a=32,s=1e-6;for(let l=0;l<a;l++){let d=lt(o,c,t,r,i);if(Math.abs(d-e)<=s)return{type:3,value:o};let u=lt(n[1],c,t,r,i);e>=d&&e<=u||e>=u&&e<=d?n[0]=o:n[1]=o,o=n[0]+(n[1]-n[0])/2}return{type:3,value:o}}},FV:{description:"Returns the future value of an investment",arguments:[{name:"Rate"},{name:"Periods"},{name:"Payment"},{name:"Present Value",default:0},{name:"Type",default:0}],fn:(c,e,t,r=0,i=0)=>({type:3,value:Mi(c,e,t,r,i)})},PV:{description:"Returns the present value of an investment",arguments:[{name:"Rate"},{name:"Periods"},{name:"Payment"},{name:"Future Value",default:0},{name:"Type",default:0}],fn:(c,e,t,r=0,i=0)=>i?(t+=r*(1/((1+c)*((Math.pow(1+c,e)-1)/c))),{type:3,value:-(t+t/c*(1-Math.pow(1+c,-(e-1))))}):{type:3,value:-(r+t/c*(Math.pow(1+c,e)-1))/Math.pow(1+c,e)}},NPER:{description:"Returns the number of periods of an investment",arguments:[{name:"Rate"},{name:"Payment"},{name:"Present Value"},{name:"Future Value",default:0},{name:"Type",default:0}],fn:(c,e,t=0,r=0,i=0)=>i?{type:3,value:1+(-Math.log(1+c*(1-t/-e))+Math.log(1+r*c/(-e*(1+c))))/Math.log(1+c)}:{type:3,value:(Math.log(Math.pow(1-t*c/-e,-1))+Math.log(1+r*c/-e))/Math.log(1+c)}},PMT:{description:"Returns the periodic payment of a loan",arguments:[{name:"Rate"},{name:"Periods"},{name:"Present Value"},{name:"Future Value",default:0},{name:"Type",default:0}],fn:(c,e,t,r=0,i=0)=>({type:3,value:lt(c,e,t,r,i)})}};var Yo=c=>{let e=[],t=c.length,r="[\\^$.|?*+()";for(let i=0;i<t;i++){let o=c[i];switch(o){case"*":e.push(".","*");break;case"?":e.push(".");break;case"~":o=c[++i]||"";default:for(let n=0;n<r.length;n++)if(o===r[n]){e.push("\\");break}e.push(o);break}}return e.join("")},zi={Char:{arguments:[{name:"number"}],fn:c=>({type:2,value:String.fromCodePoint(c||32)}),category:["text"]},Code:{arguments:[{name:"string"}],fn:c=>({type:3,value:c.codePointAt(0)||0}),category:["text"]},Value:{arguments:[{name:"text"}],fn:c=>{let e=be.TryParse(c);return e.type===3?{type:3,value:e.value}:H()},category:["text"]},Text:{arguments:[{name:"value"},{name:"number format"}],fn:(c,e="0.00####")=>({type:2,value:D.Get(e).Format(c||0)}),category:["text"]},Left:{arguments:[{name:"string"},{name:"count"}],fn:(c,e=1)=>({type:2,value:c.substr(0,e)}),category:["text"]},Right:{arguments:[{name:"string"},{name:"count"}],fn:(c,e=1)=>({type:2,value:c.slice(-e)}),category:["text"]},Mid:{arguments:[{name:"string"},{name:"left"},{name:"count"}],fn:(c,e=0,t=1)=>({type:2,value:c.substr(Math.max(0,e-1),t)}),category:["text"]},Search:{description:"Find a string (needle) in another string (haystack). Case-insensitive.",arguments:[{name:"Needle"},{name:"Haystack"},{name:"Start",default:1}],fn:(c,e,t=1)=>{if(t>=1){if(!c)return{type:3,value:t};let r=Yo(c),i=new RegExp(r,"i").exec(e.substr(t-1));if(i)return{type:3,value:i.index+t}}return T()}},Find:{description:"Find a string (needle) in another string (haystack). Case-sensitive.",arguments:[{name:"Needle"},{name:"Haystack"},{name:"Start",default:1}],fn:(c,e,t=1)=>{if(t>=1){if(!c)return{type:3,value:t};let r=new RegExp(c).exec(e.substr(t-1));if(r)return{type:3,value:r.index+t}}return T()}},Concat:{description:"Pastes strings together",fn:(...c)=>{let t=N(c).map(r=>{let i=r?.toString()||"";return typeof r=="number"&&z.decimal_separator===","?i.replace(/\./,","):i}).join("");return{type:2,value:t}}}},Dr={Concatenate:"Concat"};var Di={IsBlank:{description:"Returns true if the reference is blank",arguments:[{name:"Reference",metadata:!0}],fn:P(c=>({type:4,value:!c?.value||typeof c.value.value>"u"}))},IsNumber:{description:"Returns true if the reference is a number",arguments:[{name:"Reference",metadata:!0}],fn:P(c=>({type:4,value:c?.value&&typeof c.value.value=="number"}))},IsLogical:{description:"Returns true if the reference is a logical TRUE or FALSE",arguments:[{name:"Reference",metadata:!0}],fn:P(c=>({type:4,value:c?.value&&typeof c.value.value=="boolean"}))},IsText:{description:"Returns true if the reference is text",arguments:[{name:"Reference",metadata:!0}],fn:P(c=>({type:4,value:c?.value&&typeof c.value.value=="string"}))}};var ke=(c,e=!1)=>{let t=c.length,r=0,i=0;for(let o=0;o<t;o++)r+=c[o];r/=t;for(let o=0;o<t;o++){let n=c[o]-r;i+=n*n}return e?i/(t-1):i/t},Vi={"StDev.P":{description:"Returns the standard deviation of a set of values, corresponding to a population",arguments:[{name:"data"}],fn:(...c)=>({type:3,value:Math.sqrt(ke(N(c),!1))})},"StDev.S":{description:"Returns the standard deviation of a set of values, corresponding to a sample of a population",arguments:[{name:"data"}],fn:(...c)=>({type:3,value:Math.sqrt(ke(N(c),!0))})},"Var.P":{description:"Returns the variance of a set of values, corresponding to a population",arguments:[{name:"data"}],fn:(...c)=>({type:3,value:ke(N(c),!1)})},"Var.S":{description:"Returns the variance of a set of values, corresponding to a sample of a population",arguments:[{name:"data"}],fn:(...c)=>({type:3,value:ke(N(c),!0)})},Covar:{description:"Returns the covariance between two ranges of values",arguments:[{name:"A"},{name:"B"}],fn:(c,e)=>{if(!Array.isArray(c)||!Array.isArray(e))return T();if(!Array.isArray(c[0])||!Array.isArray(e[0]))return T();if(c.length!==e.length)return H();let t=0,r=0,i={x:0,y:0},o={x:[],y:[]};for(let n=0;n<c.length;n++){if(!c[n]||!e[n])continue;if(c[n].length!==e[n].length)return H();let a=c[n].length;r+=a;for(let s=0;s<a;s++)i.x+=c[n][s]||0,i.y+=e[n][s]||0,o.x.push(c[n][s]||0),o.y.push(e[n][s]||0)}if(r===0)return xe();i.x/=r,i.y/=r;for(let n=0;n<r;n++)t+=(o.x[n]-i.x)*(o.y[n]-i.y);return{type:3,value:t/r}}},Correl:{description:"Returns the correlation between two ranges of values",arguments:[{name:"A"},{name:"B"}],fn:(c,e)=>{if(!Array.isArray(c)||!Array.isArray(e))return T();if(!Array.isArray(c[0])||!Array.isArray(e[0]))return T();let t=0,r=0,i=0,o=0,n=0,a=0,s=0;for(let l=0;l<c.length;l++){if(!c[l]||!e[l])continue;let d=c[l].length;for(let u=0;u<d;u++){let h=Number(c[l][u]),m=Number(e[l][u]);isNaN(h)||isNaN(m)||(r+=h*m,i+=h,o+=m,n+=h*h,a+=m*m,s++)}}return t=s*r-i*o,t&&(t/=Math.sqrt((s*n-i*i)*(s*a-o*o))),{type:3,value:t}}},GeoMean:{description:"Returns the geometric mean of all numeric arguments",arguments:[{boxed:!0}],fn:(...c)=>{c=ge(c);let e=0,t={real:1,imaginary:0},r=!1,i=!1;for(let o of c)o.type===7?(r=!0,t=le(t,o.value),e++):o.type===3&&(o.value<0&&(i=!0),e++,t.real*=o.value,t.imaginary*=o.value);if(r){let o=he(t,{real:1/e,imaginary:0});return o.imaginary?{type:7,value:o}:{type:3,value:o.real}}else return i?T():{type:3,value:Math.pow(t.real,1/e)}}},Average:{description:"Returns the arithmetic mean of all numeric arguments",arguments:[{boxed:!0}],fn:(...c)=>{c=ge(c);let e={real:0,imaginary:0},t=0;for(let r of c){if(r.type===6)return r;r.type===3&&(e.real+=r.value,t++),r.type===7&&(e.real+=r.value.real,e.imaginary+=r.value.imaginary,t++)}return e.real/=t,e.imaginary/=t,e.imaginary?{type:7,value:e}:{type:3,value:e.real}}},Percentile:{description:"Returns the kth percentile value from the range of data",arguments:[{name:"range"},{name:"percentile"}],fn:(c,e)=>{let t=N(c).filter(s=>typeof s=="number");t.sort((s,l)=>s-l);let r=t.length,i=Math.pow(10,8),o=Math.round((1+(r-1)*e)*i)/i,n=Math.floor(o),a=Math.ceil(o);return{type:3,value:(t[n-1]+t[a-1])/2}}},Median:{description:"Returns the median value of the range of data",arguments:[{name:"range"}],fn:(...c)=>{let e=N(c).filter(n=>typeof n=="number");e.sort((n,a)=>n-a);let r=1+(e.length-1)*.5,i=Math.floor(r),o=Math.ceil(r);return{type:3,value:(e[i-1]+e[o-1])/2}}}},Vr={Mean:"Average",StDev:"StDev.S",Var:"Var.S"};var Li={IsComplex:{description:"Returns true if the reference is a complex number",arguments:[{name:"Reference",metadata:!0}],fn:P(c=>({type:4,value:c?.value&&fe(c.value.value)}))},Real:{description:"Returns the real part of a complex number",arguments:[{boxed:!0}],fn:P(c=>c.type===3?{...c}:c.type===7?{type:3,value:c.value.real||0}:c.type===0||c.type===2&&c.value===""?{type:3,value:0}:T())},Imaginary:{description:"Returns the imaginary part of a complex number (as real)",arguments:[{boxed:!0}],fn:P(c=>c.type===7?{type:3,value:c.value.imaginary||0}:c.type===3||c.type===0||c.type===2&&c.value===""?{type:3,value:0}:T())},Conjugate:{description:"Returns the conjugate of a complex number",arguments:[{boxed:!0}],fn:P(c=>c.type===7?{type:7,value:{real:c.value.real,imaginary:-c.value.imaginary}}:c.type===3||c.type===0||!c.value?{type:3,value:c.value||0}:T())},Arg:{description:"Returns the principal argument of a complex number (in radians)",arguments:[{boxed:!0}],fn:P(c=>c.type===7?{type:3,value:Math.atan2(c.value.imaginary,c.value.real)}:c.type===3||c.type===0||c.type===2&&c.value===""?{type:3,value:Math.atan2(0,c.value||0)}:T())},Rectangular:{description:"Converts a complex number in polar form to rectangular form",arguments:[{name:"r"},{name:"\u03B8 in radians"}],fn:(c=0,e=0)=>({type:7,value:{real:c*Math.cos(e),imaginary:c*Math.sin(e)}})},Complex:{description:"Ensures that the given value will be treated as a complex number",arguments:[{boxed:!0}],fn:P(c=>c.type===7?c:c.type===3||c.type===0||!c.value?{type:7,value:{imaginary:0,real:c.value||0}}:T())},ComplexLog:{description:"Returns the principal value Log(z) of a complex number z",arguments:[{boxed:!0}],fn:P(c=>{if(c.type===3){if(!c.value)return T();c={type:7,value:{real:c.value,imaginary:0}}}else if(c.type===0||c.type===2&&c.value==="")return T();if(c.type===7){let e=Nt(c.value),t={real:Math.log(e.r),imaginary:e.theta};return t.imaginary?{type:7,value:t}:{type:3,value:t.real}}return T()})}};var $t=c=>{let e=[];c.type===8?e=c.value:e=[[c.value]];let t=e.length,r=t?e[0].length:0,i=[];if(!t||!r)return{m:t,n:r,array:i};for(let o=0;o<t;o++){let n=[];for(let a=0;a<r;a++){let s=e[o][a];if(s.type===7)n.push({...s.value});else if(s.type===3)n.push({real:s.value,imaginary:0});else if(s.type===0||s.value==="")n.push({real:0,imaginary:0});else return{m:t,n:r,error:!0,array:[]}}i.push(n)}return{m:t,n:r,array:i}},Ii={MDeterm:{description:"Returns the determinant of a matrix",arguments:[{name:"matrix",boxed:!0}],fn:c=>{let e=$t(c);if(!e.array||!e.m||!e.n||e.m!==e.n||e.error)return T();let t=Pt(e);return t?ce(t):T()}},MInverse:{description:"Returns the inverse matrix",arguments:[{name:"matrix",boxed:!0}],fn:c=>{let e=$t(c);if(!e.array||!e.m||!e.n||e.m!==e.n||e.error)return T();let t=Pt(e);if(t&&t.real===0&&t?.imaginary===0)return T();let r=pi(e);return r?{type:8,value:r.map(i=>i.map(o=>ce(o)))}:T()}},MMult:{description:"Returns the dot product of A and B",arguments:[{name:"A",boxed:!0},{name:"B",boxed:!0}],fn:(c,e)=>{let t=$t(c),r=$t(e);if(!t.array||t.error||!r.array||r.error)return T();if(t.m!==r.n)return T();let i=fi(r,t);return{type:8,value:i.map(o=>o.map(n=>ce(n)))}}}};var jt=class c extends Se{static type="state-leaf-vertex";state_id=0;type=c.type;color=2;state_representation="";UpdateState(){let e=JSON.stringify(Array.from(this.edges_in).map(t=>t.result));e!==this.state_representation&&(this.state_representation=e,this.state_id++)}Calculate(e){if(this.dirty){for(let t of this.edges_in)if(t.dirty)return;this.UpdateState(),this.dirty=!1}}AddDependent(e){throw new Error("leaf vertex cannot have dependents")}};var qt=class c extends Se{static type="calculation-leaf-vertex";type=c.type;address={row:-1,column:-1};updated=!1;color=2;Calculate(e){if(!this.dirty)return;for(let r of this.edges_in)if(r.dirty)return;let t=e.CalculationCallback.call(e,this);this.result=t.value,this.dirty=!1,this.updated=!0}AddDependent(e){throw new Error("leaf vertex cannot have dependents")}};var en=c=>{if(typeof c=="string")switch(c=c.toUpperCase(),c){case"AVERAGE":case"MEAN":c=101;break;case"COUNT":c=102;break;case"COUNTA":c=103;break;case"MAX":c=104;break;case"MIN":c=105;break;case"PRODUCT":c=106;break;case"STDEV":c=107;break;case"STDEVP":c=108;break;case"SUM":c=109;break;case"VAR":c=110;break;case"VARP":c=111;break;default:c=0;break}return c},tn={complex_numbers:"off"},Jt=class extends Ht{constructor(t,r={}){super();this.model=t;if(this.expression_calculator=new Ot(this.library,this.parser),{...tn,...r}.complex_numbers==="on"){for(let o of Object.keys(Ur))je[o]=Ur[o];yi()}this.UpdateLocale(),this.library.Register(je,zi,Vi,Ui,Di,Li,Ii);for(let o of Object.keys(Vr))this.library.Alias(o,Vr[o]);for(let o of Object.keys(Dr))this.library.Alias(o,Dr[o]);this.library.Register({Subtotal:{arguments:[{name:"type"},{name:"range",metadata:!0}],fn:(o,...n)=>{if(o=en(o),o>100&&(o-=100),o<1||o>11)return H();let a=ge(n),s=[],l=0,d=0,u;for(let m of a){let f=m.value?.address;if(!f)return j();if(!u||u.id!==f.sheet_id){if(!f.sheet_id)return console.warn("invalid reference in metadata"),j();if(u=this.model.sheets.Find(f.sheet_id),!u)return console.warn("invalid sheet in metadata"),j()}if(!u.GetRowHeight(f.row))continue;let _=m.value?.value;typeof _>"u"||(l++,typeof _=="number"&&(d+=_,s.push(_)))}let h=0;switch(o){case 1:if(s.length===0)return ue();h=d/s.length;break;case 2:h=s.length;break;case 3:h=l;break;case 4:if(s.length===0)return T();h=Math.max.apply(0,s);break;case 5:if(s.length===0)return T();h=Math.min.apply(0,s);break;case 6:if(s.length===0)return T();h=1;for(let m of s)h*=m;break;case 7:if(s.length<2)return ue();h=Math.sqrt(ke(s,!0));break;case 8:if(s.length===0)return ue();h=Math.sqrt(ke(s,!1));break;case 9:h=d;break;case 10:if(s.length<2)return ue();h=ke(s,!0);break;case 11:if(s.length===0)return ue();h=ke(s,!1);break}return{type:3,value:h}}},CountIf:{arguments:[{name:"range"},{name:"criteria"}],fn:(o,n)=>{let a=N(o);typeof n!="string"?n="="+(n||0).toString():(n=n.trim(),/^[=<>]/.test(n)||(n="="+n));let s=this.parser.Parse("{}"+n),l=s.expression;if(s.error||!l)return Ce();if(l.type!=="binary")return Ce();if(l.left.type!=="array")return Ce();l.left.values=[a];let d=this.CalculateExpression(l);if(d.type===8){let u=0;for(let h of d.value)for(let m of h)m.value&&u++;return{type:3,value:u}}return d}},Offset:{arguments:[{name:"reference",description:"Base reference",metadata:!0},{name:"rows",description:"number of rows to offset"},{name:"columns",description:"number of columns to offset"},{name:"height"},{name:"width"}],return_type:1,volatile:!0,fn:((o,n=0,a=0,s,l)=>{if(!o)return H();if(o.type===8){let u=typeof s=="number"?n+s:void 0,h=typeof l=="number"?a+l:void 0;return{type:8,value:o.value.slice(n,u).map(f=>f.slice(a,h))}}if(!at(o))return console.info("e2",{reference:o}),j();let d=this.DynamicDependencies(o.value.address,this.expression_calculator.context.address,!0,n,a,l,s);if(!d)return console.info("e1",{check_result:d}),j();if(d.dirty){let u=this.GetVertex(this.expression_calculator.context.address,!0);return u.short_circuit=!0,{type:0,value:void 0}}if(d.area){let u={type:"address",...d.area.start,label:"",position:0,id:0},h={type:"address",...d.area.end,label:"",position:0,id:0},m=d.area.count===1?u:{type:"range",start:u,end:h,label:"",position:0,id:0};return{type:5,value:m}}return T()}).bind(this)},Indirect:{arguments:[{name:"reference",description:"Cell reference (string)"}],return_type:1,volatile:!0,fn:(o=>{if(!o||typeof o!="string")return H();let n=this.parser.Parse(o);if(n.error||!n.expression||n.expression.type!=="address"&&n.expression.type!=="range")return j();let a=this.DynamicDependencies(n.expression,this.expression_calculator.context.address);if(!a)return j();if(a.dirty){let s=this.GetVertex(this.expression_calculator.context.address,!0);return s.short_circuit=!0,{type:0,value:void 0}}return{type:5,value:n.expression}}).bind(this)},Match:{arguments:[{name:"value",boxed:!0},{name:"range",boxed:!0},{name:"type"}],fn:(o,n,a=0)=>{if(a)return console.warn("inexact match not supported",{value:o,range:n,type:a}),xe();if(n.type===8){if(n.value.length===1){let s=n.value[0];for(let l=0;l<s.length;l++)if(o.type==s[l].type&&o.value===s[l].value)return{type:3,value:l+1}}else for(let s=0;s<n.value.length;s++){let l=n.value[s];if(l.length!==1)return xe();if(o.type==l[0].type&&o.value===l[0].value)return{type:3,value:s+1}}return xe()}else return o.type===n.type&&o.value===n.value?{type:3,value:1}:xe();return H()}},Index:{arguments:[{name:"range",boxed:!0},{name:"row"},{name:"column"}],volatile:!1,fn:(o,n,a)=>{if(o&&o.type!==8&&(o={type:8,value:[[o]]}),n&&a){let s=o.value[a-1];if(s){let l=s[n-1];if(l)return l}}else if(n){let s=[];for(let l of o.value){if(!l[n-1])return H();s.push([l[n-1]])}return{type:8,value:s}}else if(a){let s=o.value[a-1];if(s)return{type:8,value:[s]}}return H()}},Rows:{arguments:[{name:"reference",description:"Array or reference"}],volatile:!1,fn:o=>{if(!o)return H();if(Array.isArray(o)){let n=o[0];return Array.isArray(n)?{type:3,value:n.length}:T()}return{type:3,value:1}}},Columns:{arguments:[{name:"reference",description:"Array or reference"}],volatile:!1,fn:o=>o?Array.isArray(o)?{type:3,value:o.length}:{type:3,value:1}:H()},FormulaText:{description:"Returns a formula as a string",arguments:[{name:"reference",description:"Cell reference",metadata:!0}],fn:P(o=>{if(!at(o))return j();let n=this.model.sheets.Find(o.value?.address?.sheet_id||0);if(n){let a=n.cells.GetCell(o.value.address,!1);return{type:2,value:a?.value?.toString()||""}}return j()})},IsFormula:{description:"Returns true if the reference is a formula",arguments:[{name:"Reference",metadata:!0}],fn:P(o=>{let n=this.model.sheets.Find(o?.value?.address?.sheet_id||0);if(n){let a=n.cells.GetCell(o.value.address,!1);return{type:4,value:a?.type===1}}return{type:4,value:!1}})}})}get parser(){return this.model.parser}library=new Bt;registered_libraries={};expression_calculator;full_rebuild_required=!1;ExportCalculatedValues(){let t={};for(let r of this.model.sheets.list){let i=r.cells.toJSON({calculated_value:!0}).data;t[r.id]=i.filter(o=>o.calculated!==void 0)}return t}ApplyCalculatedValues(t){for(let r of this.model.sheets.list){let i=t[r.id];if(!i)console.info("mismatch",r.id);else for(let o of i)r.cells.data[o.row][o.column].SetCalculatedValue(o.calculated)}}SpreadCallback(t,r){if(!t.address||!t.address.sheet_id)throw new Error("spread callback called without sheet id");let i=this.model.sheets.Find(t.address.sheet_id)?.cells;if(!i)throw new Error("spread callback called without cells");if(!t||!t.reference)return;let o=t.reference.area;if(o){let n=o.rows,a=o.columns;if(r.type===8){let s=Gt(r.value);for(let l=0;l<n;l++)if(s[l]){let d=0;for(;d<a&&d<s[l].length;d++)i.data[l+o.start.row][d+o.start.column].SetCalculatedValue(s[l][d].value,s[l][d].type);for(;d<a;d++)i.data[l+o.start.row][d+o.start.column].SetCalculatedValue(void 0,0)}else for(let d=0;d<a;d++)i.data[l+o.start.row][d+o.start.column].SetCalculatedValue(void 0,0)}else for(let s=0;s<n;s++)for(let l=0;l<a;l++)i.data[s+o.start.row][l+o.start.column].SetCalculatedValue(r.value,r.type)}}CalculationCallback(t){if(!t.address)throw new Error("vertex missing address");return t.expression_error?{value:It()}:this.expression_calculator.Calculate(t.expression,t.address)}DynamicDependencies(t,r,i=!1,o=0,n=0,a=1,s=1){let l=this.ResolveExpressionAddress(t,r);if(!l)return;let d=!1,u;if(t.type==="address"||t.type==="range"){let m=t.type==="range"?t.start:t;m.sheet_id?u=this.model.sheets.Find(m.sheet_id):m.sheet&&(u=this.model.sheets.Find(m.sheet))}if(!u&&r?.sheet_id&&(u=this.model.sheets.Find(r.sheet_id)),!u)throw new Error("missing sheet in dynamic dependencies [b21]");l=u.RealArea(l);let h=l.start.sheet_id;i&&(l=new y({column:l.start.column+n,row:l.start.row+o,sheet_id:l.start.sheet_id},{column:l.start.column+n+a-1,row:l.start.row+o+s-1,sheet_id:l.end.sheet_id}));for(let m=l.start.row;m<=l.end.row;m++)for(let f=l.start.column;f<=l.end.column;f++){let p=this.GetVertex({row:m,column:f,sheet_id:h},!1);p&&p.dirty&&(this.AddEdge({row:m,column:f,sheet_id:h},this.expression_calculator.context.address),d=!0)}return{dirty:d,area:l}}UpdateLocale(){z.decimal_separator===","?(this.parser.decimal_mark=",",this.parser.argument_separator=";"):(this.parser.decimal_mark=".",this.parser.argument_separator=",")}SupportedFunctions(){let t=this.library.List(),r=Object.keys(t).map(i=>{let o=t[i].canonical_name;return o||(o=i.replace(/_/g,".")),{name:o,description:t[i].description,arguments:(t[i].arguments||[]).map(n=>({name:n.name||""}))}});for(let i of this.model.macro_functions.values())r.push({name:i.name,description:i.description,arguments:(i.argument_names||[]).map(o=>({name:o}))});return r}RegisterLibrary(t,r){return this.registered_libraries[t]?!1:(this.RegisterFunction(r),this.registered_libraries[t]=!0,!0)}RegisterFunction(t){for(let r of Object.keys(t)){let i=t[r],o=i.fn;i.fn=(...n)=>o.apply({address:{...this.expression_calculator.context.address}},n),this.library.Register({[r]:i})}}AttachModel(){this.expression_calculator.SetModel(this.model)}Calculate(t){if(this.AttachModel(),t&&!t.start.sheet_id)throw new Error("CalculateInternal called with subset w/out sheet ID");this.full_rebuild_required&&(t=void 0,this.UpdateAnnotations(),this.UpdateConditionals(),this.full_rebuild_required=!1),this.RebuildGraph(t);try{this.Recalculate()}catch(r){console.error(r),console.info("calculation error trapped")}}Reset(){this.FlushTree(),this.AttachModel(),this.full_rebuild_required=!0}DecoratedFunctionList(){let t={},r=this.library.List();for(let i of Object.keys(r)){let o=r[i];o.xlfn?t[i]="_xlfn":o.extension&&(t[i]="_xll")}return t}Evaluate(t,r,i={},o=!1){let n=this.parser.argument_separator,a=this.parser.flags.r1c1;i.argument_separator&&(i.argument_separator===","?(this.parser.argument_separator=",",this.parser.decimal_mark="."):(this.parser.argument_separator=";",this.parser.decimal_mark=",")),i.r1c1&&(this.parser.flags.r1c1=i.r1c1);let s=this.parser.Parse(t);if(this.parser.argument_separator=n,this.parser.decimal_mark=n===","?".":",",this.parser.flags.r1c1=a,s&&s.expression){this.parser.Walk(s.expression,d=>{if(d.type==="address"||d.type==="range"){if(d.type==="address"){if(d.offset_column||d.offset_row)throw new Error("Evaluate does not support offset references")}else if(d.start.offset_column||d.start.offset_row||d.end.offset_column||d.end.offset_row)throw new Error("Evaluate does not support offset references");this.model.ResolveSheetID(d,void 0,r)}return!0});let l=this.CalculateExpression(s.expression);return o?l:l.type===8?l.value.map(d=>d.map(u=>u.value)):l.value}throw s.error?new Error(s.error):new Error("invalid expression")}CalculateExpression(t,r={row:-1,column:-1},i=!1){return this.expression_calculator.Calculate(t,r,i).value}RebuildClean(t=!1){this.full_rebuild_required=!1,this.AttachModel(),this.RebuildGraph(),this.UpdateAnnotations(),this.UpdateConditionals(),this.InitializeGraph(),t&&this.volatile_list.length&&this.Recalculate()}FlattenCellList(t){let r={},i=[];for(let o of t){let n={column:o.column,row:o.row,sheet_id:o.sheet_id},a=y.CellAddressToLabel(n,!0);r[a]||(r[a]=a,i.push(n))}return i}Unresolve(t,r,i=!0,o=!0){let n="",a=V(t)?new y(t):new y(t.start,t.end);if(o){let d=this.model.named_ranges.MatchSelection(a);if(d)return d}if(a.count>1?n=y.CellAddressToLabel(a.start)+":"+y.CellAddressToLabel(a.end):n=y.CellAddressToLabel(a.start),!i)return n;let s=a.start.sheet_id||r?.id,l=this.ResolveSheetName(s,!0);return l?l+"!"+n:n}ResolveSheetName(t,r=!1){let i=this.model.sheets.Find(t);if(i)return r&&ze.test(i.name)?`'${i.name}'`:i.name}RemoveConditional(t){if(t.type==="expression"){let r=t.internal?.vertex;r&&(r.Reset(),this.RemoveLeafVertex(r))}}UpdateConditionals(t,r){if(!t){for(let i of this.model.sheets.list)i.conditional_formats?.length&&this.UpdateConditionals(i.conditional_formats,i);return}if(!r)throw new Error("invalid call to update conditionals without context");t&&!Array.isArray(t)&&(t=[t]);for(let i of t){let o="";switch(i.type){case"cell-match":o=this.Unresolve(i.area,r,!0,!1)+" "+i.expression;break;case"expression":o=i.expression;break;case"duplicate-values":o=`UniqueValues(${this.Unresolve(i.area,r,!0,!1)})`,i.unique||(o=`NOT(${o})`);break;case"gradient":o=`=Gradient(${[this.Unresolve(i.area,r,!0,!1),i.min??"",i.max??""].join(this.parser.argument_separator)})`;break;default:continue}if(!o)continue;if(i.internal||(i.internal={}),!i.internal.vertex){i.internal.vertex=new qt;let a;i.type!=="gradient"&&i.type!=="duplicate-values"&&(a=i.options);let s=this.Evaluate(o,r,a,!0);i.internal.vertex.result=s,i.internal.vertex.updated=!0}let n=i.internal.vertex;this.AddLeafVertex(n),this.UpdateLeafVertex(n,o,r)}}RemoveAnnotation(t){let r=t.temp.vertex;r&&(r.Reset(),this.RemoveLeafVertex(r))}UpdateAnnotations(t,r){if(!t){for(let i of this.model.sheets.list)this.UpdateAnnotations(i.annotations,i);return}if(!r)throw new Error("invalid call to UpdateAnnotations with list but no sheet");typeof t<"u"&&!Array.isArray(t)&&(t=[t]);for(let i of t)if(i.data.formula){i.temp.vertex||(i.temp.vertex=new jt);let o=i.temp.vertex;this.AddLeafVertex(o),this.UpdateLeafVertex(o,i.data.formula,r)}}ResolveExpressionAddress(t,r){switch(t.type){case"address":if(this.model.ResolveSheetID(t,r))return new y(t);break;case"range":if(this.model.ResolveSheetID(t,r))return new y(t.start,t.end);break;case"identifier":{let i=this.model.named_ranges.Get(t.name.toUpperCase());if(i)return new y(i.start,i.end)}break}}NamedRangeToAddressUnit(t){let r=t.name.toUpperCase(),i=this.model.named_ranges.Get(r);if(i)return i.count===1?this.ConstructAddressUnit(i.start,r,t.id,t.position):{type:"range",start:this.ConstructAddressUnit(i.start,r,t.id,t.position),end:this.ConstructAddressUnit(i.end,r,t.id,t.position),label:r,id:t.id,position:t.position}}ConstructAddressUnit(t,r,i,o){return{type:"address",row:t.row,column:t.column,sheet_id:t.sheet_id,label:r,id:i,position:o}}RebuildDependencies(t,r,i,o={addresses:{},ranges:{}},n){if(!i){let a=this.model.sheets.Find(r);a&&(i=a.name)}switch(t.type){case"literal":case"missing":case"operator":break;case"identifier":{let a=t.name.toUpperCase();if(this.model.named_expressions.has(a)){let s=this.model.named_expressions.get(a);s&&this.RebuildDependencies(s,r,i,o,n)}else{let s=this.NamedRangeToAddressUnit(t);s&&(s.type==="address"?o.addresses[s.label]=s:o.ranges[s.label]=s)}}break;case"structured-reference":{let a=this.model.ResolveStructuredReference(t,n);a&&(a.type==="address"?o.addresses[a.sheet_id+"!"+a.label]=a:o.ranges[a.label]=a);let s=this.model.tables.get(t.table.toLowerCase());if(s){let l=n.row;if(l<s.area.start.row||l>s.area.end.row)break;let d=t.column.toLowerCase(),u=-1;if(s.columns){for(let h=0;h<s.columns.length;h++)if(d===s.columns[h]){u=s.area.start.column+h;break}}if(u>=0){let h={label:t.label,type:"address",row:l,column:u,sheet_id:s.area.start.sheet_id,id:t.id,position:t.position};o.addresses[h.sheet_id+"!"+h.label]=h}}}break;case"address":if(!t.sheet_id)if(t.sheet){let a=this.model.sheets.Find(t.sheet);a&&(t.sheet_id=a.id)}else t.sheet_id=r,t.sheet=i;t.sheet_id?o.addresses[t.sheet_id+"!"+t.label]=t:console.warn("invalid address in range [9d]");break;case"range":if(!t.start.sheet_id)if(t.start.sheet){let a=this.model.sheets.Find(t.start.sheet);a&&(t.start.sheet_id=a.id)}else t.start.sheet_id=r,t.start.sheet=i;t.start.sheet_id?o.ranges[t.start.sheet_id+"!"+t.start.label+":"+t.end.label]=t:console.warn("invalid sheet in range",t);break;case"unary":this.RebuildDependencies(t.operand,r,i,o,n);break;case"binary":this.RebuildDependencies(t.left,r,i,o,n),this.RebuildDependencies(t.right,r,i,o,n);break;case"group":t.elements.forEach(a=>this.RebuildDependencies(a,r,i,o,n));break;case"call":{let a=t.args.slice(0),s=this.library.Get(t.name);s&&s.arguments&&s.arguments.forEach((l,d)=>{l&&l.address&&(this.RebuildDependencies(a[d],r,i,void 0,n),a[d]={type:"missing",id:-1})}),a.forEach(l=>this.RebuildDependencies(l,r,i,o,n))}break}return o}UpdateLeafVertex(t,r,i){t.Reset();let o=this.parser.Parse(r);if(o.expression){let n=this.RebuildDependencies(o.expression,i.id,i.name,void 0,{row:0,column:0});for(let a of Object.keys(n.ranges)){let s=n.ranges[a];new y(s.start,s.end).Iterate(d=>{this.AddLeafVertexEdge(d,t)})}for(let a of Object.keys(n.addresses)){let s=n.addresses[a];this.AddLeafVertexEdge(s,t)}}t.expression=o.expression||{type:"missing",id:-1},t.expression_error=!o.valid}RebuildGraphCell(t,r){if(t.area&&t.area.start.column===r.column&&t.area.start.row===r.row){let{start:i,end:o}=t.area,n=i.sheet_id||r.sheet_id;i.sheet_id||(i.sheet_id=n);for(let a=i.column;a<=o.column;a++)for(let s=i.row;s<=o.row;s++)this.ResetInbound({column:a,row:s,sheet_id:n},!0,!1);this.SetDirty(r);for(let a=i.column;a<=o.column;a++)for(let s=i.row;s<=o.row;s++)s===i.row&&a===i.column||this.AddEdge(i,{...i,row:s,column:a})}if(t.type===1){this.ResetInbound(r,!0);let i=this.parser.Parse(t.value);if(i.expression){if(i.expression.type==="call"){let a=this.library.Get(i.expression.name);a&&(a.render||a.click)&&(t.render_function=a.render,t.click_function=a.click)}let n=this.RebuildDependencies(i.expression,r.sheet_id,"",void 0,r);for(let a of Object.keys(n.ranges)){let s=n.ranges[a],l=new y(s.start,s.end);l.entire_row||l.entire_column?this.AddArrayEdge(l,r):l.Iterate(d=>this.AddEdge(d,r))}for(let a of Object.keys(n.addresses)){let s=n.addresses[a];this.AddEdge(s,r)}}let o=this.GetVertex(r,!0);o&&(o.expression=i.expression||{type:"missing",id:-1},o.expression_error=!i.valid)}else t.value!==t.calculated?this.ResetInbound(r,!0,!1):t.type===0&&this.ResetInbound(r,!0,!1,!0)}RebuildGraph(t){if(t){if(!t.start.sheet_id)throw new Error("subset missing sheet id");let r=this.model.sheets.Find(t.start.sheet_id)?.cells;if(r)for(let i=t.start.row;i<=t.end.row;i++){let o=r.data[i];if(o)for(let n=t.start.column;n<=t.end.column;n++){let a=o[n];a&&this.RebuildGraphCell(a,{row:i,column:n,sheet_id:t.start.sheet_id})}}}else for(let r of this.model.sheets.list||[]){let i=r.cells.data.length;for(let o=0;o<i;o++){let n=r.cells.data[o];if(n){let a=n.length;for(let s=0;s<a;s++){let l=n[s];l&&this.RebuildGraphCell(l,{row:o,column:s,sheet_id:r.id})}}}}}IsNativeOrTypedArray(t){return Array.isArray(t)||t instanceof Float64Array||t instanceof Float32Array}CheckVolatile(t){if(!t.expression||t.expression_error)return!1;let r=!1;return this.parser.Walk(t.expression,i=>{if(i.type==="call"){let o=this.library.Get(i.name);o&&o.volatile&&(r=!0)}return!r}),r}};var Wt=class{model={};layout_element;visible_=!1;timeout=0;pending_dialog_resoltion=[];options_={type:"initial"};set options(e){if(e.type==="about"&&(e.close_box=!0,e.icon=!0),this.options_.icon!==e.icon&&(this.model.left.style.display=e.icon?"block":"none"),this.options_.close_box!==e.close_box&&(this.model.close.style.display=e.close_box?"block":"none"),this.options_.message!==e.message&&(this.model.message.textContent=e.message||"",this.model.message.style.display=e.message?"block":"none"),this.options_.title!==e.title&&(this.model.title.textContent=e.title||"",this.model.title.style.display=e.title?"block":"none"),this.options_.type!==e.type){let t=this.model.dialog.className.replace(/dialog-type-\S+/g,"").trim();e.type&&(t+=` dialog-type-${e.type}`),this.model.dialog.className=t,e.type==="about"?this.model.about.style.display="block":this.model.about.style.display="none"}this.options_=e}event_handler=e=>{(e.key==="Escape"||e.key==="Esc")&&(e.stopPropagation(),e.preventDefault(),this.visible=!1)};get visible(){return this.visible_}set visible(e){if(e!==this.visible_)if(this.visible_=e,e)this.layout_element?.setAttribute("dialog",""),window.addEventListener("keydown",this.event_handler);else{this.layout_element?.removeAttribute("dialog"),window.removeEventListener("keydown",this.event_handler);let t=this.pending_dialog_resoltion.slice(0);this.pending_dialog_resoltion=[],Promise.resolve().then(()=>{for(let r of t)r()})}}constructor(e){this.layout_element=e.parentElement;let t=this.layout_element?.querySelector(".treb-dialog-mask");if(t){let r=t.querySelectorAll("[data-bind]");for(let i of Array.from(r)){let o=i.dataset.bind;o&&(this.model[o]=i)}}if(this.model.about){let r=["<div>TREB version 28.0.5"];r.push("<small><a target=_blank href='https://treb.app'>http://treb.app</a></small>"),this.model.about.innerHTML=r.join(`
|
|
10
|
+
`).map(d=>d.split(" ").map(u=>u.trim())),l=this.RecyclePasteAreas(new y({row:0,column:0},{row:s.length-1,column:s[0].length-1}),r);if(l.length===1&&(r.Resize(s.length,s[0].length),r.Resize(l[0].rows,l[0].columns)),!this.ValidatePasteAreas(l)){this.Error(5);return}for(let d of l)for(let u=0;u<s.length;u++)for(let h=0;h<s[0].length;h++){let m=new y({row:u+d.start.row,column:h+d.start.column});if(this.active_sheet.cells.EnsureCell(m.end),s[u][h]){let f=this.SetInferredType({area:m,target:m.start,empty:!1},s[u][h],!1,!1);if(f)for(let p of f)i.push(p)}else{let f=this.active_sheet.cells.GetCell(m.start,!1);f&&f.type!==0&&i.push({key:11,area:m.Clone()})}}}this.ExecCommand(i),this.Select(this.primary_selection,r)}AllSelections(e=!1){let t=[this.primary_selection,this.active_selection].concat(this.additional_selections);return e?t:t.filter(r=>!r.empty)}InsertRowsInternal(e){let t=super.InsertRowsInternal(e);if(t.error)return t;let r=this.FindSheet(e.sheet_id);if(r===this.active_sheet){if(e.count<0)for(let i of this.AllSelections())i.empty=!0;else for(let i of this.AllSelections())i.target.row>=e.before_row&&(i.target.row+=e.count),i.area.entire_column||(i.area.start.row>=e.before_row?i.area.Shift(e.count,0):i.area.end.row>=e.before_row&&i.area.ConsumeAddress({row:i.area.end.row+e.count,column:i.area.end.column}));for(let i of t.delete_annotations_list||[])this.layout.RemoveAnnotation(i);if(this.QueueLayoutUpdate(),this.Repaint(),t.update_annotations_list?.length){this.layout.UpdateAnnotation(t.update_annotations_list);for(let i of t.resize_annotations_list||[]){let o=i.view[this.view_index];o?.resize_callback&&o.resize_callback.call(void 0)}}}else this.pending_layout_update.add(r.id);return t}InsertColumnsInternal(e){let t=super.InsertColumnsInternal(e);if(t.error)return t;let r=this.FindSheet(e.sheet_id);if(r===this.active_sheet){if(e.count<0)for(let i of this.AllSelections())i.empty=!0;else for(let i of this.AllSelections())i.target.column>=e.before_column&&(i.target.column+=e.count),i.area.entire_row||(i.area.start.column>=e.before_column?i.area.Shift(0,e.count):i.area.end.column>=e.before_column&&i.area.ConsumeAddress({row:i.area.end.row,column:i.area.end.column+e.count}));for(let i of t.delete_annotations_list||[])this.layout.RemoveAnnotation(i);if(this.tile_renderer?.FlushOverflows(),this.QueueLayoutUpdate(),this.DelayedRender(!0,void 0,!0),t.update_annotations_list?.length){this.layout.UpdateAnnotation(t.update_annotations_list);for(let i of t.resize_annotations_list||[]){let o=i.view[this.view_index];o?.resize_callback&&o.resize_callback.call(void 0)}}}else this.pending_layout_update.add(r.id);return t}ResetInternal(){super.ResetInternal(),this.RemoveAnnotationNodes(),this.ClearSelection(this.primary_selection),this.ScrollIntoView({row:0,column:0}),this.QueueLayoutUpdate(),this.layout.HideNote()}ResizeColumnsInternal(e){let t=e.sheet_id?this.FindSheet(e.sheet_id):this.active_sheet,r=e.column;if(typeof r>"u"){r=[];for(let n=0;n<t.columns;n++)r.push(n)}typeof r=="number"&&(r=[r]);let i=typeof e.width!="number",o=Math.round(e.width||0/this.scale);if(i)for(let n of r)this.AutoSizeColumn(t,n,!1);else for(let n of r)t.SetColumnWidth(n,o);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.RenderSelections()):this.pending_layout_update.add(t.id)}ResizeRowsInternal(e){let t,r=e.sheet_id?this.FindSheet(e.sheet_id):this.active_sheet,i=e.row;if(typeof i>"u"){i=[];for(let s=0;s<r.rows;s++)i.push(s)}typeof i=="number"&&(i=[i]);let o=typeof e.shrink=="boolean"?e.shrink:!0,n=typeof e.height!="number",a=Math.round(e.height||0/this.scale);if(n)for(let s of i)r.GetRowHeight(s)||(t?t.ConsumeAddress({row:s,column:1}):t=new y({row:s,column:1/0,sheet_id:r.id})),r.AutoSizeRow(s,this.theme.grid_cell,o);else for(let s of i){let l=r.GetRowHeight(s);(!l&&a||l&&!a)&&(t?t.ConsumeAddress({row:s,column:1}):t=new y({row:s,column:1/0,sheet_id:r.id})),r.SetRowHeight(s,a)}return r===this.active_sheet?(this.layout.UpdateTotalSize(),this.layout.container&&this.layout.container.offsetHeight&&this.layout.container.offsetHeight>this.layout.total_height?this.UpdateLayout():(this.layout.UpdateTileHeights(!0),this.render_tiles=this.layout.VisibleTiles(),this.Repaint(!1,!0)),this.layout.UpdateAnnotation(this.active_sheet.annotations),this.RenderSelections()):this.pending_layout_update.add(r.id),t?{start:t.start,end:t.end}:void 0}SelectInternal(e){e.area?(e.area.start.sheet_id&&e.area.start.sheet_id!==this.active_sheet.id&&this.ActivateSheetInternal({key:21,id:e.area.start.sheet_id}),this.Select(this.primary_selection,new y(e.area.start,e.area.end)),this.RenderSelections()):this.ClearSelection(this.primary_selection)}FreezeInternal(e){let t=this.FindSheet(e.sheet_id||this.active_sheet.id),r=(typeof e.highlight_transition=="boolean"?e.highlight_transition:!0)&&t===this.active_sheet;if(e.rows===t.freeze.rows&&e.columns===t.freeze.columns){r&&this.HighlightFreezeArea();return}t.freeze.rows=e.rows,t.freeze.columns=e.columns,t===this.active_sheet?(this.QueueLayoutUpdate(),this.Repaint(),r&&this.HighlightFreezeArea(),e.rows||e.columns?this.layout.CloneFrozenAnnotations():this.layout.ClearFrozenAnnotations()):this.pending_layout_update.add(t.id)}ExecCommand(e,t=!0){let r=super.ExecCommand(e,t);this.batch||r.render_area&&this.DelayedRender(!1,r.render_area),r.repaint&&this.Repaint();for(let i of r.pending||[])this.pending_layout_update.add(i);return r.layout&&this.QueueLayoutUpdate(),r.sheets&&this.tab_bar&&this.tab_bar.Update(),r.formula&&this.UpdateFormulaBarFormula(),r}};var ot=class{forward={};backward=[];Count(){return this.backward.length}Serialize(){return JSON.parse(JSON.stringify(this.Map()))}Deserialize(e){if(this.Reset(),e){for(let t of Object.keys(e))this.SetName(t,new y(e[t].start,e[t].end),!1);this.RebuildList()}}MatchSelection(e,t){if(!e.start.sheet_id)throw new Error("match selection without sheet id");let r;for(let i of this.List())if(i.range.start.sheet_id===e.start.sheet_id&&(i.range.Equals(e)&&(r=i.name),t?.Equals(i.range)))return i.name;return r}SetName(e,t,r=!0){let i=this.ValidateNamed(e);return i?t.entire_column||t.entire_row?(console.warn("invalid range"),!1):(this.forward[i]=t,r&&this.RebuildList(),!0):(console.warn("invalid name"),!1)}SetNames(e){for(let t of Object.keys(e)){let r=e[t];this.SetName(t,new y(r.start,r.end),!1)}this.RebuildList()}ClearName(e,t=!0){delete this.forward[e],t&&this.RebuildList()}RemoveRangesForSheet(e,t=!0){let r={},i=this.List();for(let o of i)o.range.start.sheet_id!==e&&(r[o.name]=o.range);this.forward=r,t&&this.RebuildList()}Reset(){this.forward={},this.backward=[]}Get(e){return this.forward[e.toUpperCase()]}Map(){return this.forward}List(){return this.backward}ValidateNamed(e){return e=e.trim(),!e.length||/^[A-Za-z]{1,3}\d+$/.test(e)||/[^A-Za-z\d_.]/.test(e)||/^[^A-Za-z_]/.test(e)?!1:e.toUpperCase()}PatchNamedRanges(e,t,r,i,o){let n=this.List().slice(0);for(let a of n){let s=a.name,l=a.range;if(l.start.sheet_id!==e){console.info("skipping name",s);continue}if(r&&t<=l.end.column){if(r>0)t<=l.start.column?l.Shift(0,r):t>l.start.column&&t<=l.end.column?l.ConsumeAddress({row:l.end.row,column:l.end.column+r}):console.warn("PNR X case 1",t,r,JSON.stringify(l));else if(r<0)if(t-r<=l.start.column)l.Shift(0,r);else if(t<=l.start.column&&t-r>l.end.column)this.ClearName(s,!1);else if(t<=l.start.column){let d=t-r-1;this.SetName(s,new y({row:l.start.row,column:d+1+r,sheet_id:e},{row:l.end.row,column:l.end.column+r}),!1)}else t<=l.end.column?t-r-1>=l.end.column?this.SetName(s,new y({row:l.start.row,column:l.start.column,sheet_id:e},{row:l.end.row,column:t-1}),!1):this.SetName(s,new y({row:l.start.row,column:l.start.column,sheet_id:e},{row:l.end.row,column:l.start.column+l.columns+r-1}),!1):console.warn("PNR X case 2",t,r,JSON.stringify(l))}if(o&&i<=l.end.row){if(o>0)i<=l.start.row?l.Shift(o,0):i>l.start.row&&i<=l.end.row?l.ConsumeAddress({row:l.end.row+o,column:l.end.column}):console.warn("PNR X case 3",i,o,JSON.stringify(l));else if(o<0)if(i-o<=l.start.row)l.Shift(o,0);else if(i<=l.start.row&&i-o>l.end.row)this.ClearName(s,!1);else if(i<=l.start.row){let d=i-o-1;this.SetName(s,new y({column:l.start.column,row:d+1+o,sheet_id:e},{column:l.end.column,row:l.end.row+o}),!1)}else i<=l.end.row?i-o-1>=l.end.row?this.SetName(s,new y({column:l.start.column,row:l.start.row,sheet_id:e},{column:l.end.column,row:i-1}),!1):this.SetName(s,new y({column:l.start.column,row:l.start.row,sheet_id:e},{column:l.end.column,row:l.start.row+l.rows+o-1}),!1):console.warn("PNR X case 4",i,o,JSON.stringify(l))}}this.RebuildList()}RebuildList(){this.backward=[];for(let e of Object.keys(this.forward))this.backward.push({name:e,range:this.forward[e]})}};var Cr=class{get list(){return this.sheets_.slice(0)}get length(){return this.sheets_.length}names=new Map;ids=new Map;sheets_=[];Assign(e){this.sheets_=[...e],this.UpdateIndexes()}Add(e){this.sheets_.push(e),this.UpdateIndexes()}Splice(e,t,...r){this.sheets_.splice(e,t,...r),this.UpdateIndexes()}Find(e){return typeof e=="string"?this.names.get(e.toLocaleUpperCase()):this.ids.get(e)}Name(e){return this.ids.get(e)?.name||void 0}ID(e){return this.names.get(e.toLocaleUpperCase())?.id||void 0}UpdateIndexes(){this.names.clear(),this.ids.clear();for(let e of this.sheets_){let t=e.name.toLocaleUpperCase();this.names.set(t,e),this.ids.set(e.id,e)}}},nt=class{parser=new Pe;document_name;user_data;sheets=new Cr;named_ranges=new ot;macro_functions=new Map;named_expressions=new Map;view_count=0;theme_style_properties=JSON.parse(JSON.stringify(L.DefaultProperties));tables=new Map;ResolveStructuredReference(e,t){let r;if(e.table?r=this.tables.get(e.table.toLowerCase()):t.sheet_id&&(r=this.sheets.Find(t.sheet_id)?.CellData(t)?.table),!r)return;let i=e.column.toLowerCase(),o=-1;if(r.columns){for(let n=0;n<r.columns.length;n++)if(i===r.columns[n]){o=r.area.start.column+n;break}}if(!(o<0))if(e.scope==="row"){let n=t.row;return n<r.area.start.row||n>r.area.end.row?void 0:{label:e.label,type:"address",row:n,column:o,sheet_id:r.area.start.sheet_id,id:e.id,position:e.position}}else{let n=r.area.start.row,a=r.area.end.row;return e.scope==="column"&&(n++,r.totals_row&&a--),{label:e.label,type:"range",position:e.position,id:e.id,start:{type:"address",row:n,column:o,sheet_id:r.area.start.sheet_id,label:e.label,position:e.position,id:0},end:{type:"address",row:a,column:o,label:e.label,position:e.position,id:0}}}}AddressToLabel(e,t){let r=V(e)?e:e.start,i=V(e)?[y.CellAddressToLabel(e)]:[y.CellAddressToLabel(e.start),y.CellAddressToLabel(e.end)],o=this.sheets.Find(r.sheet_id||0),n=o?.name?ze.test(o.name)?`'${o.name}'`:o.name:"";return n+(n?"!":"")+(i[0]===i[1]?i[0]:i.join(":"))}ResolveSheetID(e,t,r){let i=e.type==="address"?e:e.start;if(i.sheet_id)return!0;if(i.sheet){let o=this.sheets.Find(i.sheet);if(o)return i.sheet_id=o.id,!0}else{if(t?.sheet_id)return i.sheet_id=t.sheet_id,!0;if(r?.id)return i.sheet_id=r.id,!0}return!1}ResolveArea(e,t){let r=this.ResolveAddress(e,t);return V(r)?new y(r):new y(r.start,r.end)}ResolveAddress(e,t){if(typeof e=="string"){let r=this.parser.Parse(e);if(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 i=this.named_ranges.Get(r.expression.name);if(i)return i}return{row:0,column:0}}return e}};var ui={"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 Lt=class c{static type="vertex";type=c.type;color=0;edges_in=new Set;edges_out=new Set;get has_inbound_edges(){return this.edges_in.size>0}get has_outbound_edges(){return this.edges_out.size>0}Reset(){for(let e of this.edges_out)e.RemoveDependency(this);for(let e of this.edges_in)e.RemoveDependent(this);this.edges_out.clear(),this.edges_in.clear()}ClearDependencies(){for(let e of this.edges_in)e.RemoveDependent(this);this.edges_in.clear()}AddDependent(e){e!==this&&(this.edges_out.has(e)||this.edges_out.add(e))}RemoveDependent(e){this.edges_out.delete(e)}AddDependency(e){e!==this&&(this.edges_in.has(e)||this.edges_in.add(e))}RemoveDependency(e){this.edges_in.delete(e)}LinkTo(e){this.AddDependent(e),e.AddDependency(this)}DependsOn(e){this.AddDependency(e),e.AddDependent(this)}LoopCheck(){let e=[this];for(;e.length;){let t=e[e.length-1],r=!0;if(t.color!==2){t.color=1;for(let i of t.edges_out){if(i.color===1)return this.color=0,!0;i.color===0&&i.edges_out.size&&(e.push(i),r=!1)}}r&&(t.color=2,e.pop())}return this.color=2,!1}};var Be=class extends Lt{dirty=!1};var hi={error:"NOTIMPL"},xe=()=>({type:6,value:"N/A"}),Ce=()=>({type:6,value:"EXPR"});var ue=()=>({type:6,value:"DIV/0"}),H=()=>({type:6,value:"ARG"}),T=()=>({type:6,value:"VALUE"}),j=()=>({type:6,value:"REF"}),Sr=()=>({type:6,value:"NAME"}),It=()=>({type:6,value:"UNK"});var Se=class c extends Be{static type="spreadsheet-vertex";reference;error=0;address;result={type:0};expression={type:"missing",id:-1};expression_error=!1;short_circuit=!1;type=c.type;get array_head(){return this.address?!!this.reference&&!!this.reference.area&&this.reference.area.start.column===this.address.column&&this.reference.area.start.row===this.address.row:!1}TakeReferenceValue(){this.reference&&(this.result=J(this.reference.GetValue()))}Calculate(e){if(this.dirty){if(this.color===0&&this.LoopCheck()&&(this.dirty=!1,this.edges_in.size)){this.reference&&(this.array_head||this.reference.type===1)&&this.reference.SetCalculationError("LOOP");for(let t of this.edges_out)t.Calculate(e);return}for(let t of this.edges_in)if(t.dirty)return;if(this.reference){if(this.reference.type===1){this.short_circuit=!1;let t=e.CalculationCallback.call(e,this);if(this.result=t.value,this.short_circuit)return;t.volatile&&e.volatile_list.push(this)}else this.result=this.reference.GetValue4();if(this.array_head)e.SpreadCallback.call(e,this,this.result);else if(this.reference.type===1){let t=this.result.type===8?this.result.value[0][0]:this.result;this.reference.SetCalculatedValue(t.value,t.type)}}else console.info("skip dirty constant? [or dangling...]");this.dirty=!1;for(let t of this.edges_out)t.dirty&&e.calculation_list.push(t)}}};var Le=class c extends Be{static type="array-vertex";static list=[];type=c.type;area;static GetVertex(e){for(let t of this.list)if(t.area.start.sheet_id===e.start.sheet_id&&t.area.Equals(e))return[t,!1];return[new c(e),!0]}static Clear(){this.list=[]}static GetContainingArrays(e){let t=[];for(let r of this.list)r.area.start.sheet_id===e.sheet_id&&r.area.Contains(e)&&t.push(r);return t}static CreateImplicitEdges(e,t){for(let r of this.list)r.area.start.sheet_id===t.sheet_id&&r.area.Contains(t)&&r.DependsOn(e)}constructor(e){super(),this.area=e.Clone(),c.list.push(this)}RemoveDependent(e){super.RemoveDependent(e),this.edges_out.size||(this.Reset(),c.list=c.list.filter(t=>t!==this))}Calculate(e){if(this.dirty){if(this.color===0&&this.LoopCheck()&&(this.dirty=!1,this.edges_in.size)){for(let t of this.edges_out)t.Calculate(e);return}for(let t of this.edges_in)if(t.dirty)return;this.dirty=!1;for(let t of this.edges_out)t.Calculate(e)}}};var Ht=class{vertices=[[]];volatile_list=[];calculation_list=[];loop_hint;leaf_vertices=new Set;dirty_list=[];loop_check_required=!1;IsSpreadsheetVertex(e){return e.type===Se.type}FlushTree(){this.dirty_list=[],this.volatile_list=[],this.vertices=[[]],this.leaf_vertices.clear(),Le.Clear()}ResolveArrayHead(e){if(!e.sheet_id)throw new Error("resolve array head with no sheet id");let t=this.model.sheets.Find(e.sheet_id)?.cells;if(!t)throw new Error("no cells? sheet id "+e.sheet_id);let r=t.data[e.row];if(r){let i=r[e.column];if(i&&i.area){let o={row:i.area.start.row,column:i.area.start.column,sheet_id:e.sheet_id};return console.info("array head",e,o),o}}return e}GetVertex(e,t){if(!e.sheet_id)throw console.info({address:e,create:t}),new Error("getvertex with no sheet id");let r=this.model.sheets.Find(e.sheet_id)?.cells;if(!r)throw new Error("no cells? sheet id "+e.sheet_id);if(!this.vertices[e.sheet_id]){if(!t)return;this.vertices[e.sheet_id]=[]}if(this.vertices[e.sheet_id][e.column]){let o=this.vertices[e.sheet_id][e.column][e.row];if(o)return o;if(!t)return}else{if(!t)return;this.vertices[e.sheet_id][e.column]=[]}let i=new Se;return i.address={row:e.row,column:e.column,absolute_row:e.absolute_row,absolute_column:e.absolute_column,sheet_id:e.sheet_id},i.reference=r.EnsureCell(e),this.vertices[e.sheet_id][e.column][e.row]=i,Le.CreateImplicitEdges(i,e),i}RemoveVertex(e){if(!e.sheet_id)throw new Error("removevertex with no sheet id");let t=this.GetVertex(e,!1);t&&(t.Reset(),this.vertices[e.sheet_id][e.column][e.row]=void 0)}ResetVertex(e){let t=this.GetVertex(e,!1);t&&t.Reset()}RIBcount=0;ResetInbound(e,t=!1,r=!0,i=!1){this.RIBcount++;let o=this.GetVertex(e,r);if(!o){if(t){let a=Le.GetContainingArrays(e);for(let s of a)this.SetVertexDirty(s)}return}let n=[];if(i&&(n=Array.from(o.edges_in)),o.ClearDependencies(),t&&this.SetVertexDirty(o),i){o.has_outbound_edges||this.RemoveVertex(e);for(let a of n)if(!a.has_inbound_edges&&!a.has_outbound_edges){let s=a;s.address&&this.RemoveVertex(s.address)}}}ResetLoopState(){for(let e of this.vertices)if(e){for(let t of e)if(t)for(let r of t)r&&(r.color=r.edges_out.size?0:2)}for(let e of this.leaf_vertices)e.color=2}LoopCheck(e=!1){if(!this.loop_check_required&&!e)return!1;let t=[];for(let i of this.vertices)if(i){for(let o of i)if(o)for(let n of o)n&&(n.color=n.edges_out.size?0:2,t.push(n))}let r=[];for(let i of t)if(i.color===0){for(i.color=1,r.push(i);r.length;){let o=r[r.length-1],n=!0;if(o.color!==2)for(let a of o.edges_out){if(a.color===1)return this.loop_hint=this.RenderAddress(i.address),console.info("loop detected @",this.loop_hint),!0;a.color===0&&(r.push(a),n=!1)}n&&(r.pop(),o.color=2)}i.color=2}return this.loop_check_required=!1,this.loop_hint=void 0,!1}RenderAddress(e){if(!e)return"undefined";let t="";if(e.sheet_id){let i=this.model.sheets.Find(e.sheet_id);i&&(t=i.name+"!")}let r=new y(e);return t+r.spreadsheet_label}AddArrayEdge(e,t){if(!e.start.sheet_id)throw new Error("AddArrayEdge called without sheet ID");let r=this.GetVertex(t,!0),[i,o]=Le.GetVertex(e);if(r.DependsOn(i),this.loop_check_required=!0,!o)return;let n=this.vertices[e.start.sheet_id];if(n)if(e.entire_row){for(let a=0;a<n.length;a++)if(n[a])for(let s=e.start.row;s<=e.end.row;s++){let l=n[a][s];l&&i.DependsOn(l)}}else if(e.entire_column){for(let a=e.start.column;a<=e.end.column;a++)if(n[a])for(let s of n[a])s?.address&&i.DependsOn(s)}else for(let a=e.start.row;a<=e.end.row;a++)for(let s=e.start.column;s<=e.end.column;s++){let l=n[s][a];l&&i.DependsOn(l)}}AddEdge(e,t,r){let i=this.GetVertex(e,!0);this.GetVertex(t,!0).DependsOn(i),i.reference&&i.reference.area&&!i.array_head&&this.AddEdge({...e,row:i.reference.area.start.row,column:i.reference.area.start.column},t,"implicit"),this.loop_check_required=!0}RemoveEdge(e,t){let r=this.GetVertex(e,!1),i=this.GetVertex(t,!1);!r||!i||(r.RemoveDependent(i),i.RemoveDependency(r))}SetAreaDirty(e){if(e.start.column===1/0||e.end.column===1/0||e.start.row===1/0||e.end.row===1/0)throw new Error("don't iterate over infinite area");let t=e.start.sheet_id;if(!t)throw new Error("invalid area, missing sheet id");for(let r=e.start.column;r<=e.end.column;r++)for(let i=e.start.row;i<=e.end.row;i++){let o={row:i,column:r,sheet_id:t};this.GetVertex(o,!1)&&this.SetDirty(o)}}SetVertexDirty(e){if(!e.dirty){this.dirty_list.push(e),e.dirty=!0;for(let t of e.edges_out)this.SetVertexDirty(t)}}SetDirty(e){let t=this.GetVertex(e,!0);this.SetVertexDirty(t)}AddLeafVertex(e){this.leaf_vertices.add(e)}RemoveLeafVertex(e){this.leaf_vertices.delete(e)}AddLeafVertexEdge(e,t){let r=this.GetVertex(e,!0);return t.DependsOn(r),0}RemoveLeafVertexEdge(e,t){let r=this.GetVertex(e,!1);r&&(r.RemoveDependent(t),t.RemoveDependency(r))}InitializeGraph(){for(let e of this.dirty_list)this.IsSpreadsheetVertex(e)&&(e.TakeReferenceValue(),this.CheckVolatile(e)&&this.volatile_list.push(e)),e.dirty=!1;this.dirty_list=[]}Recalculate(){for(let e of this.volatile_list)this.SetVertexDirty(e);this.calculation_list=this.dirty_list.slice(0),this.volatile_list=[],this.dirty_list=[],this.loop_check_required&&(this.ResetLoopState(),this.loop_check_required=!1);for(let e=0;e<this.calculation_list.length;e++)this.calculation_list[e].Calculate(this);this.calculation_list=[]}};var Do=c=>{let e={m:c,n:c,array:[]};for(let t=0;t<c;t++){let r=[];for(let i=0;i<c;i++)r.push({real:0,imaginary:0});e.array.push(r)}return e};var Vo=c=>{let{r:e,theta:t}=c,r=e*Math.cos(t),i=e*Math.sin(t);return{real:r,imaginary:i}},Nt=c=>{let e=Math.sqrt(c.real*c.real+c.imaginary*c.imaginary),t=Math.atan2(c.imaginary,c.real);return{r:e,theta:t}},le=(c,e)=>({real:c.real*e.real-c.imaginary*e.imaginary,imaginary:c.real*e.imaginary+c.imaginary*e.real}),Lo=(c,e)=>{let t=[];for(let r=0;r<c.m;r++){let i=[];for(let o=0;o<c.n;o++)i.push(c.array[r][o]+e.array[r][o]);t.push(i)}return{m:c.m,n:c.n,array:t}},Ar=(c,e)=>{let t=[];for(let r=0;r<c.m;r++){let i=[];for(let o=0;o<e.n;o++){let n=0;for(let a=0;a<c.n;a++)n+=c.array[r][a]*e.array[a][o];i.push(n)}t.push(i)}return{array:t,m:c.m,n:e.n}},fi=(c,e)=>{let t=[];for(let r=0;r<c.m;r++){let i=[];for(let o=0;o<e.n;o++){let n={real:0,imaginary:0};for(let a=0;a<c.n;a++)n.real+=c.array[r][a].real*e.array[a][o].real-c.array[r][a].imaginary*e.array[a][o].imaginary,n.imaginary+=c.array[r][a].real*e.array[a][o].imaginary+c.array[r][a].imaginary*e.array[a][o].real;i.push(n)}t.push(i)}return t},Pt=c=>{let e={real:0,imaginary:0},t=c.n;if(t==2){let i=le(c.array[0][0],c.array[1][1]),o=le(c.array[1][0],c.array[0][1]);return{real:i.real-o.real,imaginary:i.imaginary-o.imaginary}}let r=Do(c.n);for(let i=0;i<t;i++){let o=0;for(let s=1;s<t;s++){let l=0;for(let d=0;d<t;d++)d!=i&&(r.array[o][l]={...c.array[s][d]},l++);o++}r.m=r.n=t-1;let n=Math.pow(-1,i),a=le({real:c.array[0][i].real*n,imaginary:c.array[0][i].imaginary*n},Pt(r));e.real+=a.real,e.imaginary+=a.imaginary}return e};var Io=c=>{let e={real_values:!1,imaginary_values:!1,square:c.m===c.n,unit_diagonal:!0},t={m:c.m,n:c.n,array:[]},r={m:c.m,n:c.n,array:[]};for(let i=0;i<c.m;i++){let o=c.array[i],n=[],a=[];for(let s=0;s<c.n;s++)o[s].real&&(e.real_values=!0),o[s].imaginary&&(e.imaginary_values=!0),s===i&&e.unit_diagonal&&(o[s].real!==1||o[s].imaginary!==0)&&(e.unit_diagonal=!1),n.push(o[s].real),a.push(o[s].imaginary);t.array.push(n),r.array.push(a)}return{real:t,imaginary:r,flags:e}},Fo=c=>{let e=c.array.map(t=>t.slice(0));return{m:c.m,n:c.n,array:e}},mi=c=>{if(c.m!==c.n)return;let e=Fo(c),t=e.array,r=0,i=0,o=0,n=0,a=c.m;for(i=1;i<a;i++)t[0][i]/=t[0][0];for(i=1;i<a;i++){for(o=i;o<a;o++){for(r=0,n=0;n<i;n++)r+=t[o][n]*t[n][i];t[o][i]-=r}if(i!=a-1)for(o=i+1;o<a;o++){for(r=0,n=0;n<i;n++)r+=t[i][n]*t[n][o];t[i][o]=(t[i][o]-r)/t[i][i]}}for(i=0;i<a;i++)for(o=i;o<a;o++){let s=1;if(i!=o)for(s=0,n=i;n<o;n++)s-=t[o][n]*t[n][i];t[o][i]=s/t[o][o]}for(i=0;i<a;i++)for(o=i;o<a;o++)if(i!=o){for(r=0,n=i;n<o;n++)r+=t[n][o]*(i==n?1:t[i][n]);t[i][o]=-r}for(i=0;i<a;i++)for(o=0;o<a;o++){for(r=0,n=i>o?i:o;n<a;n++)r+=(o==n?1:t[o][n])*t[n][i];t[o][i]=r}return e},pi=c=>{let e=[];if(c.m!==c.n)return;let{real:t,imaginary:r,flags:i}=Io(c),o=mi(t);if(!o)return;if(!i.imaginary_values){for(let u=0;u<c.m;u++){let h=[];for(let m=0;m<c.n;m++)h.push({real:o.array[u][m],imaginary:0});e.push(h)}return e}let n=Ar(o,r),a=Ar(r,n),s=Lo(t,a),l=mi(s);if(!l)return;let d=Ar(n,l);for(let u=0;u<c.m;u++){let h=[];for(let m=0;m<c.n;m++)h.push({real:l.array[u][m],imaginary:-d.array[u][m]});e.push(h)}return e},bi=(c,e)=>{let t={real:e.real,imaginary:-e.imaginary},r=le(c,t),i=le(e,t);return{real:r.real/i.real,imaginary:r.imaginary/i.real}},kr=c=>{let e=c.real||0,t=c.imaginary||0;return le({real:Math.exp(e),imaginary:0},{real:Math.cos(t),imaginary:Math.sin(t)})},Ho=c=>{let e=Nt(c);return{real:Math.log(e.r),imaginary:e.theta}},he=(c,e)=>{if(e.imaginary)return kr(le(e,Ho(c)));{let t=Nt(c);return Vo({r:Math.pow(t.r,e.real),theta:t.theta*e.real})}};var _i=(c,e=0)=>c&&c.type===7?c:{type:7,value:{real:e,imaginary:0}},Ie=c=>c.imaginary?{type:7,value:c}:{type:3,value:c.real},Fe=(c,e)=>{if(c.type===6)return[0,0,c];if(e.type===6)return[0,0,e];let t=[0,0];switch(c.type){case 3:t[0]=c.value;break;case 4:t[0]=c.value?1:0;break;case 0:break;case 7:t[3]=c;break;default:return[0,0,T()]}switch(e.type){case 3:t[1]=e.value;break;case 4:t[1]=e.value?1:0;break;case 0:break;case 7:t[4]=e;break;default:return[0,0,T()]}return(t[3]||t[4])&&(t[3]=_i(t[3],t[0]),t[4]=_i(t[4],t[1])),t},No=(c,e)=>{let[t,r,i,o,n]=Fe(c,e);return i||(o&&n?Ie({real:o.value.real+n.value.real,imaginary:o.value.imaginary+n.value.imaginary}):{value:t+r,type:3})},Mr=(c,e)=>{let[t,r,i,o,n]=Fe(c,e);return i||(o&&n?Ie({real:o.value.real-n.value.real,imaginary:o.value.imaginary-n.value.imaginary}):{value:t-r,type:3})},Po=(c,e)=>{let[t,r,i,o,n]=Fe(c,e);if(i)return i;if(o&&n)return Ie(he(o.value,n.value));let a=Math.pow(t,r);return isNaN(a)?T():{type:3,value:a}},Oo=(c,e)=>{let[t,r,i,o,n]=Fe(c,e);if(i)return i;if(o&&n)return Ie(he(o.value,n.value));if(t<0&&r!==0&&Math.abs(r)<1)return Ie(he({real:t,imaginary:0},{real:r,imaginary:0}));let a=Math.pow(t,r);return isNaN(a)?T():{type:3,value:a}},Er=Po,Go=(c,e)=>{let[t,r,i,o,n]=Fe(c,e);return i||(o&&n?Ie(le(o.value,n.value)):{value:t*r,type:3})},Bo=(c,e)=>{let[t,r,i,o,n]=Fe(c,e);return i||(o&&n?n.value.real===0&&n.value.imaginary===0?ue():Ie(bi(o.value,n.value)):r===0?ue():{value:t/r,type:3})},$o=(c,e)=>{let[t,r,i]=Fe(c,e);return i||(r===0?ue():{value:t%r,type:3})},jo=(c,e)=>c.type===6?c:e.type===6?e:{type:2,value:`${c.type===0?"":c.value}${e.type===0?"":e.value}`},Tr=(c,e)=>{if(c.type===6)return c;if(e.type===6)return e;if(c.type===0&&(e.value===""||e.value===0||e.type===7&&e.value.real===0&&e.value.imaginary===0)||e.type===0&&(c.value===""||c.value===0||c.type===7&&c.value.real===0&&c.value.imaginary===0))return{type:4,value:!0};if(c.type===7||e.type===7){let t=!1;return c.type===e.type?t=c.value.real==e.value.real&&c.value.imaginary==e.value.imaginary:c.type===3?t=e.value.real==c.value&&!e.value.imaginary:e.type===3&&(t=c.value.real==e.value&&!c.value.imaginary),{type:4,value:t}}return{type:4,value:c.value==e.value}},gi=(c,e)=>{let t=Tr(c,e);return t.type===6?t:{type:4,value:!t.value}},qo=(c,e)=>c.type===6?c:e.type===6?e:c.type===7||e.type===7?T():{type:4,value:(c.value||0)>(e.value||0)},Jo=(c,e)=>c.type===6?c:e.type===6?e:c.type===7||e.type===7?T():{type:4,value:c.value>=e.value},Wo=(c,e)=>c.type===6?c:e.type===6?e:c.type===7||e.type===7?T():{type:4,value:c.value<e.value},Xo=(c,e)=>c.type===6?c:e.type===6?e:c.type===7||e.type===7?T():{type:4,value:c.value<=e.value},yi=()=>{Er=Oo},vi=c=>{switch(c){case"&":return jo;case"+":return No;case"-":return Mr;case"*":return Go;case"/":return Bo;case"^":return Er;case"**":return Er;case"%":return $o;case"=":return Tr;case"==":return Tr;case"!=":return gi;case"<>":return gi;case">":return qo;case">=":return Jo;case"<":return Wo;case"<=":return Xo}};var xi=c=>!Array.isArray(c)&&c.type===5&&!!c.value.type,at=c=>c.type===5&&c.key==="metadata",Ot=class{constructor(e,t){this.library=e;this.parser=t}context={address:{row:-1,column:-1},volatile:!1,call_index:0};call_index=0;named_range_map={};data_model;SetModel(e){this.data_model=e,this.named_range_map=e.named_ranges.Map(),this.context.model=e}Calculate(e,t,r=!1){return r||(this.context.address=t,this.context.volatile=!1,this.context.call_index=0,this.call_index=0),{value:this.CalculateExpression(e),volatile:this.context.volatile}}CellFunction2(e){if(!e.sheet_id)if(e.sheet)e.sheet_id=this.data_model.sheets.ID(e.sheet)||0;else return()=>j();let t=this.data_model.sheets.Find(e.sheet_id)?.cells;if(!t)return console.warn("missing cells reference @ "+e.sheet_id),()=>j();let r=t.GetCell(e);return r?()=>r.GetValue4():()=>({type:3,value:0})}CellFunction4(e,t){return e.sheet_id?this.data_model.sheets.Find(e.sheet_id)?.cells?.GetRange4(e,t,!0)||j():j()}GetMetadata(e,t){let r,i;switch(e.type){case"address":r=e;break;case"range":i=e;break;case"structured-reference":{let o=this.data_model.ResolveStructuredReference(e,this.context.address);o&&(o.type==="address"?r=o:o.type==="range"&&(i=o))}break;case"identifier":{let o=this.named_range_map[e.name.toUpperCase()];o&&(o.count===1?r=o.start:i=o)}break;case"call":{let o=this.CalculateExpression(e,!0);if(xi(o))if(o.value.type==="address")r=o.value;else if(o.value.type==="range")i=o.value;else return o;else return o}break;default:return this.CalculateExpression(e)}if(r){let o;if(r.sheet_id&&(o=this.data_model.sheets.Find(r.sheet_id)),!o)return console.error("missing sheet [ac8]"),j();let n=o.CellData(r),a=n.calculated_type?n.calculated:n.value,s={type:"metadata",address:{...r},value:a,format:n.style?n.style.number_format:void 0,...t(n,r)};return{type:5,value:s,key:"metadata"}}else if(i){if(i.start.row===1/0||i.start.column===1/0)return j();let o;if(i.start.sheet_id&&(o=this.data_model.sheets.Find(i.start.sheet_id)),!o)throw new Error("missing sheet [ac9]");let n=[];for(let a=i.start.column;a<=i.end.column;a++){let s=[];for(let l=i.start.row;l<=i.end.row;l++){let d=o.CellData({row:l,column:a});r={...i.start,row:l,column:a};let u=d.calculated_type?d.calculated:d.value,h={type:"metadata",address:r,value:u,format:d.style?d.style.number_format:void 0,...t(d,r)};s.push({type:5,value:h,key:"metadata"})}n.push(s)}return{type:8,value:n}}return this.CalculateExpression(e)}RewriteMacro(e,t){let r;switch(e.type){case"identifier":if(r=t[e.name.toUpperCase()],r)return JSON.parse(JSON.stringify(r));break;case"binary":e.left=this.RewriteMacro(e.left,t),e.right=this.RewriteMacro(e.right,t);break;case"unary":e.operand=this.RewriteMacro(e.operand,t);break;case"group":e.elements=e.elements.map(i=>this.RewriteMacro(i,t));break;case"call":e.args=e.args.map(i=>this.RewriteMacro(i,t));break}return e}CallMacro(e,t){if(!t.expression)return()=>Ce();let r=JSON.stringify(t.expression),i={},o=t.argument_names?.map(n=>n.toUpperCase())||[];return n=>{let a=JSON.parse(r);for(let s=0;s<o.length;s++)i[o[s]]=n.args[s]||{type:"missing",id:0};return this.CalculateExpression(this.RewriteMacro(a,i))}}CallExpression(e,t=!1){let r=this.library.Get(e.name);return r?i=>{let o=this.call_index++;this.context.volatile=this.context.volatile||!!r.volatile;let n=e.name.toLowerCase()==="if",a=-1,s,l=r.arguments||[],d=i.args.map((u,h)=>{if(s)return;let m=l[Math.min(h,l.length-1)]||{};if(h===a)return m.boxed?{type:0}:void 0;if(typeof u>"u")return n&&h===0&&(a=1),m.boxed?{type:0}:void 0;if(m.address)return m.boxed?{type:2,value:this.parser.Render(u).replace(/\$/g,"")}:this.parser.Render(u).replace(/\$/g,"");if(m.metadata)return this.GetMetadata(u,()=>({}));{let f=this.CalculateExpression(u);if(f.type===6){if(m.allow_error)return f;s=f;return}if(n&&h===0&&f.type!==8){let p=!1;if(f.type===2){let _=f.value.toLowerCase().trim();p=_!=="false"&&_!=="f"}else p=!!f.value;a=p?2:1}return m.boxed?f:f.type===8?f.value.map(p=>p.map(_=>_.value)):f.value}});if(s)return s;if(this.context.call_index=o,r.return_type===1){let u=r.fn.apply(null,d);if(t)return u;if(xi(u)){if(u.value.type==="address")return this.CellFunction2(u.value)();if(u.value.type==="range")return this.CellFunction4(u.value.start,u.value.end)}return u}return r.fn.apply(null,d)}:()=>Sr()}ResolveStructuredReference(e){let t=this.data_model.ResolveStructuredReference(e,this.context.address);if(t){if(t.type==="address")return this.CellFunction2(t);if(t.type==="range")return()=>this.CellFunction4(t.start,t.end)}return()=>j()}ResolveDimensionedQuantity(){return e=>{let t=this.CalculateExpression(e.expression);return{type:9,value:{value:t.value,unit:e.unit.name}}}}UnaryExpression(e){switch(e.operator){case"+":return t=>this.CalculateExpression(t.operand);case"-":{let t=Mr,r={type:3,value:0};return i=>{let o=this.CalculateExpression(i.operand);return o.type===8?{type:8,value:o.value.map(n=>n.map(a=>t(r,a)))}:t(r,o)}}default:return()=>(console.warn("unexpected unary operator:",e.operator),Ce())}}RecycleArray(e,t,r){if(e[0].length<r){let i=e[0].length;for(let o of e)for(let n=i;n<r;n++)o[n]=o[n%i]}if(e.length<t){let i=e.length;for(let o=i;o<t;o++)e[o]=e[o%i].slice(0)}return e}ElementwiseBinaryExpression(e,t,r){let i=Math.max(t.value.length,r.value.length),o=Math.max(t.value[0].length,r.value[0].length),n=this.RecycleArray(t.value,i,o),a=this.RecycleArray(r.value,i,o),s=[];for(let l=0;l<i;l++){let d=[];for(let u=0;u<o;u++)d[u]=e(n[l][u],a[l][u]);s.push(d)}return{type:8,value:s}}BinaryExpression(e){let t=vi(e.operator);return t?r=>{let i=this.CalculateExpression(r.left),o=this.CalculateExpression(r.right);return i.type===8?o.type===8?this.ElementwiseBinaryExpression(t,i,o):this.ElementwiseBinaryExpression(t,i,{type:8,value:[[o]]}):o.type===8?this.ElementwiseBinaryExpression(t,{type:8,value:[[i]]},o):t(i,o)}:()=>(console.info(`(unexpected binary operator: ${e.operator})`),Ce())}Identifier(e){let t=e.name;if(t[0]==="#")return()=>j();let r=t.toUpperCase();switch(r){case"FALSE":case"F":return()=>({value:!1,type:4});case"TRUE":case"T":return()=>({value:!0,type:4});case"UNDEFINED":return()=>({value:void 0,type:0})}return()=>{let i=this.named_range_map[r];if(i)return i.count===1?this.CellFunction4(i.start,i.start):this.CellFunction4(i.start,i.end);let o=this.data_model.named_expressions.get(r);return o?this.CalculateExpression(o):Sr()}}GroupExpression(e){return!e.elements||e.elements.length!==1?(console.warn("Can't handle group !== 1"),()=>Ce()):t=>this.CalculateExpression(t.elements[0])}CalculateExpression(e,t=!1){if(e.user_data)return e.user_data(e);switch(e.type){case"call":{let r=this.data_model.macro_functions.get(e.name.toUpperCase());return r?(e.user_data=this.CallMacro(e,r))(e):(e.user_data=this.CallExpression(e,t))(e)}case"address":return(e.user_data=this.CellFunction2(e))();case"range":return(e.user_data=r=>this.CellFunction4(r.start,r.end))(e);case"binary":return(e.user_data=this.BinaryExpression(e))(e);case"unary":return(e.user_data=this.UnaryExpression(e))(e);case"identifier":return(e.user_data=this.Identifier(e))();case"missing":return(e.user_data=()=>({value:void 0,type:0}))();case"dimensioned":return(e.user_data=this.ResolveDimensionedQuantity())(e);case"literal":{let r={value:e.value,type:ae(e.value)};return(e.user_data=()=>r)()}case"group":return(e.user_data=this.GroupExpression(e))(e);case"complex":{let r={value:{real:e.real,imaginary:e.imaginary},type:7};return(e.user_data=()=>r)()}case"structured-reference":return(e.user_data=this.ResolveStructuredReference(e))();case"array":return(e.user_data=()=>({type:8,value:e.values.map(r=>(Array.isArray(r)?r:[r]).map(i=>({type:ae(i),value:i})))}))();default:return console.warn("Unhandled parse expr:",e),It()}}};var Vc=1e3*60*60*24;var Gt=c=>{let e=[],t=c.length,r=c[0].length;for(let i=0;i<r;i++){e[i]=[];for(let o=0;o<t;o++)e[i][o]=c[o][i]}return e};var ge=c=>{let e=[];for(let t of c)if(t.type===8)for(let r of t.value)e=e.concat(ge(r));else e.push(t);return e},N=c=>Array.isArray(c)?c.reduce((e,t)=>typeof t>"u"?e:Array.isArray(t)?e.concat(N(t)):t instanceof Float32Array||t instanceof Float64Array?e.concat(Array.from(t)):e.concat([t]),[]):[c];var P=c=>(e,...t)=>Array.isArray(e)?{type:8,value:e.map(r=>r.map(i=>c(i,...t)))}:typeof e=="object"&&e&&e.type===8?{type:8,value:e.value.map(r=>r.map(i=>c(i,...t)))}:c(e,...t),Ae=c=>(e,t,...r)=>{let i=!1,o=!1;return e&&typeof e=="object"&&e.type===8?(e=e.value,i=!0):i=Array.isArray(e),t&&typeof t=="object"&&t.type===8?(t=t.value,o=!0):o=Array.isArray(t),i?o?{type:8,value:e.map((n,a)=>n.map((s,l)=>c(s,t[a][l],...r)))}:{type:8,value:e.map(n=>n.map(a=>c(a,t,...r)))}:o?{type:8,value:t.map(n=>n.map(a=>c(e,a,...r)))}:c(e,t,...r)};var Bt=class{functions={};Register(...e){for(let t of e)for(let r of Object.keys(t)){if(/[^a-zA-Z0-9._]/.test(r))throw new Error("invalid function name (invalid character)");if(r.length>255)throw new Error("invalid function name (too long, > 255)");if(/^[^a-zA-Z]/.test(r))throw new Error("invalid function name (start with an ascii letter)");let i=r.toLowerCase();if(this.functions[i])throw new Error(`function name (${i}) is already in use`);let o=t[r];o.canonical_name=r,this.functions[i]=o}}Get(e){let t=e.toLowerCase();return this.functions[t]}List(e=!0){let t={};for(let r of Object.keys(this.functions))e&&this.functions[r].visibility==="internal"||(t[r]=this.functions[r]);return t}Alias(e,t){let r=this.Get(t);if(!r)throw new Error(`referenced function ${t} does not exist`);this.Register({[e]:{...r}})}};var st=class{static default_color="#888";static UnpackValues(e){if(Array.isArray(e)){let t=e[0];return Array.isArray(t)||t instanceof Float64Array||t instanceof Float32Array?e.reduce((r,i)=>r.concat(this.UnpackValues(i)),[]):e.map(r=>isNaN(r)?void 0:r)}else{if(e instanceof Float32Array||e instanceof Float64Array)return Array.prototype.slice.call(e);if(e&&typeof e=="object"){let r=Object.keys(e).length;if(typeof e[0]<"u"&&typeof e[(r-1).toString()]<"u"){let i=[];for(let o=0;o<r;o++)i[o]=e[o.toString()];return i}}}return[]}static SparklineCommon(e,t){let r=[],i=t.text?.text||this.default_color,o=[i,i];return Array.isArray(e.calculated)&&(r=this.UnpackValues(e.calculated[0]),typeof e.calculated[1]=="string"&&(o[0]=e.calculated[1]),typeof e.calculated[2]=="string"&&(o[1]=e.calculated[2])),{values:r,colors:o}}static RenderLine(e,t,r,i,o){let{values:n,colors:a}=this.SparklineCommon(i,o),s=.05,l=.1,d=1;Array.isArray(i.calculated)&&typeof i.calculated[2]=="number"&&(d=i.calculated[2]);let u=0,h=0,m=-1;for(let f=0;f<n.length;f++){let p=n[f];typeof p=="number"&&(m>=0?(u=Math.min(u,p),h=Math.max(h,p)):(m=f,u=h=p))}if(u!==h){let f=e*(1-2*s)/(n.length-1),p=h-u,_=t*(1-2*l),b=t*l;r.strokeStyle=a[0],r.lineWidth=d,r.lineCap="round",r.lineJoin="round",r.beginPath();let v=0;for(let g=m;g<n.length;g++){let w=n[g];if(typeof w=="number"){let x=e*s+f*g,S=t-(w-u)*_/p-b;v===0?(r.moveTo(x,S),v=1):r.lineTo(x,S)}else v=0}r.stroke()}}static RenderColumn(e,t,r,i,o){let{values:n,colors:a}=this.SparklineCommon(i,o),s=3,l=2.5,d=0,u=0,h=!1;for(let m of n)typeof m=="number"&&(h?(d=Math.min(d,m),u=Math.max(u,m)):(h=!0,d=u=m));if(n.length){let m=(e-2*s-2)/(n.length-0),f=t-2*l,p=l;if(d!==u)if(d<0&&u>0){let _=u-d,b=p+u/_*f;for(let v=0;v<n.length;v++){let g=n[v];if(typeof g=="number"){let w=s+v*m,x=Math.abs(g)/_*f;if(g>=0){r.fillStyle=a[0];let S=b-x;r.fillRect(w+2,S,m-2,x)}else{r.fillStyle=a[1];let S=b;r.fillRect(w+2,S,m-2,x)}}}}else if(u>0){r.fillStyle=a[0];let _=u-d;for(let b=0;b<n.length;b++){let v=n[b];if(typeof v=="number"){let g=s+b*m,w=Math.max(1,(v-d)/_*f),x=t-p-w;r.fillRect(g+2,x,m-2,w)}}}else{r.fillStyle=a[1];let _=u-d;for(let b=0;b<n.length;b++){let v=n[b];if(typeof v=="number"){let g=s+b*m,w=Math.max(1,Math.abs(u-v)/_*f),x=p;r.fillRect(g+2,x,m-2,w)}}}}}};var Ci=c=>{let{x:e,y:t,width:r,height:i,cell:o}=c,n={},a=3,s=Math.round(16*(c.scale||1));if(o&&r&&i&&e&&t){let l={x:a,y:i-a-s};if(o.style){switch(o.style.vertical_align){case"top":l.y=a;break;case"middle":l.y=Math.round((i-s)/2);break}switch(o.style.horizontal_align){case"right":l.x=Math.round(r-a-s);break;case"center":l.x=Math.round((r-s)/2);break}}e>=l.x&&e<=l.x+s&&t>=l.y&&t<=l.y+s&&(n.value=`=Checkbox(${o.calculated?"FALSE":"TRUE"})`,n.block_selection=!0)}return n},Si=c=>{let{context:e,width:t,height:r,cell:i}=c,o=c.scale||1;e.lineJoin="round",e.lineCap="round";let n=3*o,a=16*o,s=n,l=r-n-a;if(i.style){switch(i.style.vertical_align){case"top":l=n;break;case"middle":l=(r-a)/2;break}switch(i.style.horizontal_align){case"right":s=t-n-a;break;case"center":s=(t-a)/2;break}}s=Math.floor(s)+.5,l=Math.floor(l)+.5;let d=Math.floor(s+a)+.5,u=Math.floor(l+a)+.5;if(i&&i.calculated){e.lineWidth=.5,e.fillStyle=e.strokeStyle,e.beginPath(),e.moveTo(s,l),e.lineTo(s+16*o,l),e.lineTo(s+16*o,l+16*o),e.lineTo(s,l+16*o),e.closePath(),e.moveTo(s+15*o,l+4*o);for(let h of[[13.59,2.58],[6,10.17],[2.41,6.59],[1,8],[6,13]])e.lineTo(s+h[0]*o,l+h[1]*o);e.closePath(),e.fill()}else e.lineWidth=1,e.lineJoin="round",e.beginPath(),e.moveTo(s,l),e.lineTo(d,l),e.lineTo(d,u),e.lineTo(s,u),e.closePath(),e.stroke();return{handled:!0}};var Ai=c=>{let e=.254829592,t=-.284496736,r=1.421413741,i=-1.453152027,o=1.061405429,n=.3275911;c=Math.abs(c);let a=1/(1+n*c);return 1-((((o*a+i)*a+r)*a+t)*a+e)*a*Math.exp(-1*c*c)},Zo=Math.sqrt(2*Math.PI),ki=c=>{if(c===.5)return 0;let e=c<1&&c>.5?1-c:c,t=Math.sqrt(Math.log(1/Math.pow(e,2))),r=t-(2.515517+.802853*t+.010328*Math.pow(t,2))/(1+1.432788*t+.189269*Math.pow(t,2)+.001308*Math.pow(t,3));return c>.5?r:-r},Ur={Sqrt:{description:"Returns the square root of the argument",arguments:[{boxed:!0}],fn:P(c=>{if(c.type===7){let e=he(c.value,{real:.5,imaginary:0});return ce(e)}else{if(c.type===0||!c.value)return{type:3,value:0};if(c.type===3&&c.value<0){let e=he({real:c.value,imaginary:0},{real:.5,imaginary:0});return{type:7,value:e}}else{let e=Math.sqrt(c.value);return isNaN(e)?T():{type:3,value:e}}}})},Power:{description:"Returns base raised to the given power",arguments:[{name:"base",boxed:!0},{name:"exponent",boxed:!0}],fn:Ae((c,e)=>{if(c.type===3&&e.type===3&&(c.value>=0||e.value===0||Math.abs(e.value)>=1)){let o=Math.pow(c.value,e.value);return isNaN(o)?T():{type:3,value:o}}let t=c.type===7?c.value:{real:c.value||0,imaginary:0},r=e.type===7?e.value:{real:e.value||0,imaginary:0},i=he(t,r);return ce(i)})}},je={Int:{fn:c=>({type:3,value:Math.floor(c)})},Rand:{volatile:!0,fn:()=>({type:3,value:Math.random()})},RandBetween:{arguments:[{name:"min"},{name:"max"}],volatile:!0,fn:(c=0,e=1)=>{if(c>e){let t=c;c=e,e=t}return{type:3,value:Math.floor(Math.random()*(e+1-c)+c)}}},Sum:{description:"Adds arguments and ranges",arguments:[{boxed:!0,name:"values or ranges"}],fn:(...c)=>{let e={real:0,imaginary:0},t=ge(c);for(let r of t)switch(r.type){case 3:e.real+=r.value;break;case 4:e.real+=r.value?1:0;break;case 7:e.real+=r.value.real,e.imaginary+=r.value.imaginary;break;case 6:return r}return ce(e)}},Now:{description:"Returns current time",volatile:!0,fn:()=>({type:3,value:Oe(new Date().getTime())})},Date:{description:"Constructs a Lotus date from parts",arguments:[{name:"year"},{name:"month"},{name:"day"}],fn:(c,e,t)=>{let r=new Date;return r.setMilliseconds(0),r.setSeconds(0),r.setMinutes(0),r.setHours(0),c<0||c>1e4?H():(c<1899&&(c+=1900),r.setFullYear(c),e<1||e>12?H():(r.setMonth(e-1),t<1||t>31?H():(r.setDate(t),{type:3,value:Oe(r.getTime())})))}},Today:{description:"Returns current day",volatile:!0,fn:()=>{let c=new Date;return c.setMilliseconds(0),c.setSeconds(0),c.setMinutes(0),c.setHours(12),{type:3,value:Oe(c.getTime())}}},IfError:{description:"Returns the original value, or the alternate value if the original value contains an error",arguments:[{name:"original value",allow_error:!0,boxed:!0},{name:"alternate value"}],fn:(c,e=0)=>c&&c.type===6?{value:e,type:ae(e)}:c},IsError:{description:"Checks if another cell contains an error",arguments:[{name:"reference",allow_error:!0,boxed:!0}],fn:(...c)=>{let e=ge(c);for(let t of e)if(t.type===6)return{type:4,value:!0};return{type:4,value:!1}}},Cell:{description:"Returns data about a cell",arguments:[{name:"type",description:"Type of data to return"},{name:"reference",description:"Cell reference",metadata:!0}],fn:Ae((c,e)=>{if(!at(e))return j();if(c)switch(c.toString().toLowerCase()){case"format":return e.value.format?{type:2,value:e.value.format}:j();case"address":return{type:2,value:e.value.address.label.replace(/\$/g,"")}}return{type:6,value:hi.error}})},Year:{description:"Returns year from date",arguments:[{name:"date"}],fn:c=>J(new Date(De(c)).getUTCFullYear())},Month:{description:"Returns month from date",arguments:[{name:"date"}],fn:c=>J(new Date(De(c)).getUTCMonth()+1)},Day:{description:"Returns day of month from date",arguments:[{name:"date"}],fn:c=>J(new Date(De(c)).getUTCDate())},Radians:{description:"Converts degrees to radians",arguments:[{name:"Degrees",description:"Angle in degrees"}],fn:P(c=>J(c*Math.PI/180))},Degrees:{description:"Converts radians to degrees",arguments:[{name:"Radians",description:"Angle in radians"}],fn:P(c=>J(c/Math.PI*180))},CountA:{description:"Counts cells that are not empty",fn:(...c)=>J(N(c).reduce((e,t)=>typeof t>"u"?e:e+1,0))},Count:{description:"Counts cells that contain numbers",fn:(...c)=>J(N(c).reduce((e,t)=>typeof t=="number"||fe(t)?e+1:e,0))},Or:{fn:(...c)=>{let e=!1;c=N(c);for(let t of c)e=e||!!t;return J(e)}},And:{fn:(...c)=>{let e=!0;c=N(c);for(let t of c)e=e&&!!t;return J(e)}},Not:{fn:P((...c)=>c.length===0?H():c.length===1?J(!c[0]):J(!0))},If:{arguments:[{name:"test value",boxed:!0},{name:"value if true",boxed:!0,allow_error:!0},{name:"value if false",boxed:!0,allow_error:!0}],fn:(c,e={type:4,value:!0},t={type:4,value:!1})=>{let r=e.type===8,i=t.type===8;return c.type===8?{type:8,value:c.value.map((n,a)=>n.map((s,l)=>(s.type===2?s.value.toLowerCase()!=="false"&&s.value.toLowerCase()!=="f":!!s.value)?r?e.value[a][l]:e:i?t.value[a][l]:t))}:(c.type===2?c.value.toLowerCase()!=="false"&&c.value.toLowerCase()!=="f":!!c.value)?e:t}},Fact:{description:"Returns the factorial of a number",arguments:[{name:"number"}],fn:P(c=>{c=Math.floor(c);let e=1;for(;c>1;)e*=c,c--;return{type:3,value:e}})},Power:{description:"Returns base raised to the given power",arguments:[{name:"base",boxed:!0},{name:"exponent",boxed:!0}],fn:Ae((c,e)=>{if(c.type===7||e.type===7){let t=c.type===7?c.value:{real:c.value||0,imaginary:0},r=e.type===7?e.value:{real:e.value||0,imaginary:0},i=he(t,r);return ce(i)}else{let t=Math.pow(c.value,e.value);return isNaN(t)?T():{type:3,value:t}}})},Mod:{fn:Ae((c,e)=>e?J(c%e):ue())},Sort:{arguments:[{name:"values"}],fn:(...c)=>(c=N(c),c.every(e=>typeof e=="number")?c.sort((e,t)=>e-t):c.sort(),{type:8,value:[c.map(e=>J(e))]})},Transpose:{description:"Returns transpose of input matrix",arguments:[{name:"matrix",boxed:!0}],fn:c=>c.type===8?{type:8,value:Gt(c.value)}:c},Max:{fn:(...c)=>({type:3,value:Math.max.apply(0,N(c).filter(e=>typeof e=="number"))})},Min:{fn:(...c)=>({type:3,value:Math.min.apply(0,N(c).filter(e=>typeof e=="number"))})},SumProduct:{description:"Returns the sum of pairwise products of two or more ranges",fn:(...c)=>{let e=c.map(i=>N(i)),t=Math.max.apply(0,e.map(i=>i.length)),r=0;for(let i=0;i<t;i++)r+=e.reduce((o,n)=>o*(n[i]||0),1);return{type:3,value:r}}},VLookup:{fn:(c,e,t,r=!0)=>{if(t=Math.max(0,t-1),r){let i=Math.abs(c-e[0][0]),o=e[t][0];for(let n=1;n<e[0].length;n++){let a=Math.abs(e[0][n]-c);a<i&&(i=a,o=e[t][n])}return J(o)}else{for(let i=1;i<e[0].length;i++)if(e[0][i]==c)return e[t][i];return xe()}}},Product:{arguments:[{boxed:!0}],fn:(...c)=>{let e={real:1,imaginary:0};c=ge(c);for(let t of c)t.type===7?e=le(e,t.value):t.type===3&&(e.real*=t.value,e.imaginary*=t.value);return ce(e)}},Log:{fn:Ae((c,e=10)=>({type:3,value:Math.log(c)/Math.log(e)}))},Log10:{fn:P(c=>({type:3,value:Math.log(c)/Math.log(10)}))},Ln:{fn:P(c=>({type:3,value:Math.log(c)}))},Round:{fn:Ae((c,e=0)=>{let t=Math.pow(10,e);return{type:3,value:Math.round(t*c)/t}})},RoundDown:{fn:Ae((c,e=0)=>{let t=Math.pow(10,e),r=c>=0;return{type:3,value:r?Math.floor(t*c)/t:Math.ceil(t*c)/t}})},Reverse:{arguments:[{boxed:!0}],fn:c=>c.type===8?(c.value.length===1?c.value[0].reverse():c.value.reverse(),c):{type:2,value:c.value.toString().split("").reverse().join("")}},Exp:{arguments:[{boxed:!0}],fn:P(c=>{if(c.type===7){let e=kr(c.value);return ce(e)}return{type:3,value:Math.exp(c.value||0)}})},Abs:{arguments:[{boxed:!0}],fn:P(c=>c.type===7?{type:3,value:Math.sqrt(c.value.real*c.value.real+c.value.imaginary*c.value.imaginary)}:{type:3,value:Math.abs(c.value||0)})},Simplify:{arguments:[{name:"value"},{name:"significant digits"}],fn:Ae((c,e=2)=>{if(e=e||2,c===0)return{type:3,value:c};let t=c<0?-1:1;c*=t;let r=Math.pow(10,Math.floor(Math.log10(c))+1-e);return{type:3,value:Math.round(c/r)*r*t}})},Erf:{fn:c=>({type:3,value:Ai(c)})},NormsInv:{description:"Inverse of the normal cumulative distribution",arguments:[{name:"probability"}],fn:c=>({type:3,value:ki(c)})},"Norm.Inv":{description:"Inverse of the normal cumulative distribution",arguments:[{name:"probability"},{name:"mean",default:0},{name:"standard deviation",default:1}],xlfn:!0,fn:(c,e=0,t=1)=>({type:3,value:ki(c)*t+e})},"Norm.Dist":{description:"Cumulative normal distribution",arguments:[{name:"value"},{name:"mean",default:0},{name:"standard deviation",default:1},{name:"cumulative",default:!0}],xlfn:!0,fn:(c,e=0,t=1,r=!0)=>{let i=0;return r?i=.5*(1+(c<e?-1:1)*Ai(Math.abs(c-e)/(t*Math.sqrt(2)))):i=Math.exp(-1/2*Math.pow((c-e)/t,2))/(t*Zo),{type:3,value:i}}},Sqrt:{description:"Returns the square root of the argument",arguments:[{boxed:!0}],fn:P(c=>{if(c.type===7){let e=he(c.value,{real:.5,imaginary:0});return ce(e)}else{if(c.type===0||!c.value)return{type:3,value:0};{let e=Math.sqrt(c.value);return isNaN(e)?T():{type:3,value:e}}}})},HexToDec:{arguments:[{description:"hexadecimal string"}],fn:c=>({type:3,value:parseInt(c,16)})},DecToHex:{arguments:[{description:"number"}],fn:c=>({type:2,value:c.toString(16)})},Checkbox:{arguments:[{name:"checked"}],click:Ci,render:Si,fn:c=>({value:!!c,type:4})},"Sparkline.Column":{arguments:[{name:"data"},{name:"color"},{name:"negative color"}],render:c=>(st.RenderColumn(c.width,c.height,c.context,c.cell,c.style),{handled:!0}),fn:(...c)=>({type:5,value:c,key:"sparkline-data"})},"Sparkline.Line":{arguments:[{name:"data"},{name:"color"},{name:"line width"}],render:c=>(st.RenderLine(c.width,c.height,c.context,c.cell,c.style),{handled:!0}),fn:(...c)=>({type:5,value:c,key:"sparkline-data"})},UniqueValues:{arguments:[{name:"range",boxed:!0}],visibility:"internal",fn:c=>{if(c.type===8){let e=c.value.length,t=c.value[0]?.length,r=a=>{if(a)switch(a.type){case 2:case 3:case 4:return a.value;case 0:return"";default:return console.info("check",a,a.value),a.value?.toString()||""}else return""},i=new Set,o=new Set;for(let a of c.value)for(let s of a){let l=r(s);i.has(l)?o.add(l):i.add(l)}let n=[];for(let a of c.value){let s=[];for(let l of a){let d=r(l);s.push({type:4,value:!o.has(d)})}n.push(s)}return{type:8,value:n}}return{type:4,value:!0}}},Gradient:{arguments:[{name:"range",boxed:!0},{name:"min"},{name:"max"}],visibility:"internal",fn:(c,e,t)=>{let r=ge([c]),i=0,o=0,n=0,a=0;for(let u of r){if(u.type===6)return u;u.type===3&&(o===0?(n=u.value,a=u.value):(n=Math.min(n,u.value),a=Math.max(a,u.value)),o++)}typeof t=="number"&&(a=t),typeof e=="number"&&(n=e);let s=a-n,l=1,d=1;if(c.type===8){l=c.value.length,d=c.value[0]?.length||0;let u=[];for(let h=0;h<l;h++){let m=[];for(let f=0;f<d;f++){let p=c.value[h][f];if(p.type===3){let _=0;s>0&&(_=(p.value-n)/s),m.push({type:3,value:_})}else m.push({type:0})}u.push(m)}return{type:8,value:u}}else return H()}}},Ri={};for(let c of Object.keys(je))Ri[c.toLowerCase()]=c;var Qo=["pow"],Ei={};for(let c of Qo)Ei[c.toLowerCase()]=c;for(let c of Object.getOwnPropertyNames(Math)){let e=c.toLowerCase();if(Ri[e]||Ei[e])continue;let t=Object.getOwnPropertyDescriptor(Math,c);if(!t)continue;let r=t.value,i=typeof r;switch(i){case"number":je[c]={fn:()=>({type:3,value:r}),category:["Math Functions"]};break;case"function":je[c]={fn:(...o)=>J(r(...o)),category:["Math Functions"]};break;default:console.info("unexpected type:",i,c);break}}Math.log10||(Math.log10=c=>Math.log(c)/Math.log(10));var lt=(c,e,t=0,r=0,i=0)=>i?-(t*(c/(1-Math.pow(1+c,-e))))/(1+c)-r*(1/((1+c)*((Math.pow(1+c,e)-1)/c))):-(t*c*Math.pow(1+c,e)+r*c)/(Math.pow(1+c,e)-1),Mi=(c,e,t,r=0,i=0)=>i?(1+c)*-t/c*(Math.pow(1+c,e)-1)-r*Math.pow(1+c,e):-t/c*(Math.pow(1+c,e)-1)-r*Math.pow(1+c,e),zr=(c,e,t,r=0,i=0,o=0)=>{if(e<1)return NaN;if(e===1&&o)return 0;let n=lt(c,t,r,i,o),a=Mi(c,e-1,n,r,o)*c;return o?a/(1+c):a},Ti=(c,e,t,r=0,i=0,o=0)=>lt(c,t,r,i,o)-zr(c,e,t,r,i,o),Ui={NPV:{description:"Returns the present value of a series of future cashflows",arguments:[{name:"Rate"},{name:"Cashflow"}],fn:(c=0,...e)=>{let t=0,r=N(e);for(let i=0;i<r.length;i++){let o=r[i];typeof o=="number"&&(t+=Math.pow(1+c,-(i+1))*o)}return{type:3,value:t}}},XNPV:{description:"returns the NPV of a nonperiodic stream of payments at a given rate",arguments:[{name:"Discount rate"},{name:"Values"},{name:"Dates"}],fn:(c,e,t)=>{if(typeof c!="number")return H();if(e=N(e),t=N(t),e.length!==t.length)return H();let r=[];for(let n of e){if(typeof n!="number")return H();r.push(n)}let i=[];for(let n of t){if(typeof n!="number")return H();i.push(Math.floor(n))}let o=0;for(let n=0;n<r.length;n++)o+=(r[n]||0)/Math.pow(1+c,(i[n]-i[0])/365);return{type:3,value:o}}},XIRR:{description:"returns the internal rate of return of a nonperiodic stream of payments",arguments:[{name:"Values"},{name:"Dates"},{name:"Guess",default:.1}],fn:(c,e,t=.1)=>{if(c=N(c),e=N(e),c.length!==e.length)return H();let r=0,i=0,o=[];for(let u of c){if(typeof u!="number")return H();u>0&&r++,u<0&&i++,o.push(u)}if(r<=0||i<=0)return H();let n=[];for(let u of e){if(typeof u!="number")return H();n.push(Math.floor(u))}let a=n[0];for(let u of n)if(u<a)return H();let s=.1,l=[{found:!1,value:0},{found:!1,value:0}],d=o.length;for(let u=0;u<100;u++){let h=0;for(let m=0;m<d;m++)h+=(o[m]||0)/Math.pow(1+t,(n[m]-n[0])/365);if(Math.abs(h)<=1e-6)return{type:3,value:t};if(h>0){if(l[0].value=l[0].found?Math.max(l[0].value,t):t,l[0].found=!0,!l[1].found){t+=s;continue}}else if(l[1].value=l[1].found?Math.min(l[1].value,t):t,l[1].found=!0,!l[0].found){t-=s;continue}t=l[0].value+(l[1].value-l[0].value)/2}return T()}},IRR:{description:"Calculates the internal rate of return of a series of cashflows",arguments:[{name:"Cashflows"},{name:"Guess",default:.1}],fn:(c,e=.1)=>{let t=N(c).map(o=>typeof o=="number"?o:0),r=.1,i=[{found:!1,value:0},{found:!1,value:0}];for(let o=0;o<50;o++){let n=0;for(let a=0;a<t.length;a++)n+=Math.pow(1+e,-(a+1))*t[a];if(Math.abs(n)<=.00125)return{type:3,value:e};if(n>0){if(i[0].value=i[0].found?Math.max(i[0].value,e):e,i[0].found=!0,!i[1].found){e+=r;continue}}else if(i[1].value=i[1].found?Math.min(i[1].value,e):e,i[1].found=!0,!i[0].found){e-=r;continue}e=i[0].value+(i[1].value-i[0].value)/2}return{type:6,value:"NUM"}}},CUMPRINC:{description:"Returns cumulative principal paid on a loan between two periods",arguments:[{name:"Rate"},{name:"Periods"},{name:"Present Value"},{name:"Start Period"},{name:"End Period"},{name:"Type",default:0}],fn:(c,e,t,r,i,o=0)=>{let n=0;for(let a=r;a<=i;a++)n+=Ti(c,a,e,t,0,o);return{type:3,value:n}}},CUMIPMT:{description:"Returns cumulative interest paid on a loan between two periods",arguments:[{name:"Rate"},{name:"Periods"},{name:"Present Value"},{name:"Start Period"},{name:"End Period"},{name:"Type",default:0}],fn:(c,e,t,r,i,o=0)=>{let n=0;for(let a=r;a<=i;a++)n+=zr(c,a,e,t,0,o);return{type:3,value:n}}},IPMT:{description:"Returns the interest portion of a payment",arguments:[{name:"Rate"},{name:"Period"},{name:"Periods"},{name:"Present Value",default:0},{name:"Future Value",default:0},{name:"Type",default:0}],fn:(c,e,t,r=0,i=0,o=0)=>({type:3,value:zr(c,e,t,r,i,o)})},PPMT:{description:"Returns the principal portion of a payment",arguments:[{name:"Rate"},{name:"Period"},{name:"Periods"},{name:"Present Value",default:0},{name:"Future Value",default:0},{name:"Type",default:0}],fn:(c,e,t,r=0,i=0,o=0)=>({type:3,value:Ti(c,e,t,r,i,o)})},Rate:{description:"Returns the interest rate of a loan",arguments:[{name:"Periods"},{name:"Payment"},{name:"Present Value",default:0},{name:"Future Value",default:0},{name:"Type",default:0}],fn:(c,e,t=0,r=0,i=0)=>{let o=.25,n=[-1,1],a=32,s=1e-6;for(let l=0;l<a;l++){let d=lt(o,c,t,r,i);if(Math.abs(d-e)<=s)return{type:3,value:o};let u=lt(n[1],c,t,r,i);e>=d&&e<=u||e>=u&&e<=d?n[0]=o:n[1]=o,o=n[0]+(n[1]-n[0])/2}return{type:3,value:o}}},FV:{description:"Returns the future value of an investment",arguments:[{name:"Rate"},{name:"Periods"},{name:"Payment"},{name:"Present Value",default:0},{name:"Type",default:0}],fn:(c,e,t,r=0,i=0)=>({type:3,value:Mi(c,e,t,r,i)})},PV:{description:"Returns the present value of an investment",arguments:[{name:"Rate"},{name:"Periods"},{name:"Payment"},{name:"Future Value",default:0},{name:"Type",default:0}],fn:(c,e,t,r=0,i=0)=>i?(t+=r*(1/((1+c)*((Math.pow(1+c,e)-1)/c))),{type:3,value:-(t+t/c*(1-Math.pow(1+c,-(e-1))))}):{type:3,value:-(r+t/c*(Math.pow(1+c,e)-1))/Math.pow(1+c,e)}},NPER:{description:"Returns the number of periods of an investment",arguments:[{name:"Rate"},{name:"Payment"},{name:"Present Value"},{name:"Future Value",default:0},{name:"Type",default:0}],fn:(c,e,t=0,r=0,i=0)=>i?{type:3,value:1+(-Math.log(1+c*(1-t/-e))+Math.log(1+r*c/(-e*(1+c))))/Math.log(1+c)}:{type:3,value:(Math.log(Math.pow(1-t*c/-e,-1))+Math.log(1+r*c/-e))/Math.log(1+c)}},PMT:{description:"Returns the periodic payment of a loan",arguments:[{name:"Rate"},{name:"Periods"},{name:"Present Value"},{name:"Future Value",default:0},{name:"Type",default:0}],fn:(c,e,t,r=0,i=0)=>({type:3,value:lt(c,e,t,r,i)})}};var Yo=c=>{let e=[],t=c.length,r="[\\^$.|?*+()";for(let i=0;i<t;i++){let o=c[i];switch(o){case"*":e.push(".","*");break;case"?":e.push(".");break;case"~":o=c[++i]||"";default:for(let n=0;n<r.length;n++)if(o===r[n]){e.push("\\");break}e.push(o);break}}return e.join("")},zi={Char:{arguments:[{name:"number"}],fn:c=>({type:2,value:String.fromCodePoint(c||32)}),category:["text"]},Code:{arguments:[{name:"string"}],fn:c=>({type:3,value:c.codePointAt(0)||0}),category:["text"]},Value:{arguments:[{name:"text"}],fn:c=>{let e=be.TryParse(c);return e.type===3?{type:3,value:e.value}:H()},category:["text"]},Text:{arguments:[{name:"value"},{name:"number format"}],fn:(c,e="0.00####")=>({type:2,value:D.Get(e).Format(c||0)}),category:["text"]},Left:{arguments:[{name:"string"},{name:"count"}],fn:(c,e=1)=>({type:2,value:c.substr(0,e)}),category:["text"]},Right:{arguments:[{name:"string"},{name:"count"}],fn:(c,e=1)=>({type:2,value:c.slice(-e)}),category:["text"]},Mid:{arguments:[{name:"string"},{name:"left"},{name:"count"}],fn:(c,e=0,t=1)=>({type:2,value:c.substr(Math.max(0,e-1),t)}),category:["text"]},Search:{description:"Find a string (needle) in another string (haystack). Case-insensitive.",arguments:[{name:"Needle"},{name:"Haystack"},{name:"Start",default:1}],fn:(c,e,t=1)=>{if(t>=1){if(!c)return{type:3,value:t};let r=Yo(c),i=new RegExp(r,"i").exec(e.substr(t-1));if(i)return{type:3,value:i.index+t}}return T()}},Find:{description:"Find a string (needle) in another string (haystack). Case-sensitive.",arguments:[{name:"Needle"},{name:"Haystack"},{name:"Start",default:1}],fn:(c,e,t=1)=>{if(t>=1){if(!c)return{type:3,value:t};let r=new RegExp(c).exec(e.substr(t-1));if(r)return{type:3,value:r.index+t}}return T()}},Concat:{description:"Pastes strings together",fn:(...c)=>{let t=N(c).map(r=>{let i=r?.toString()||"";return typeof r=="number"&&z.decimal_separator===","?i.replace(/\./,","):i}).join("");return{type:2,value:t}}}},Dr={Concatenate:"Concat"};var Di={IsBlank:{description:"Returns true if the reference is blank",arguments:[{name:"Reference",metadata:!0}],fn:P(c=>({type:4,value:!c?.value||typeof c.value.value>"u"}))},IsNumber:{description:"Returns true if the reference is a number",arguments:[{name:"Reference",metadata:!0}],fn:P(c=>({type:4,value:c?.value&&typeof c.value.value=="number"}))},IsLogical:{description:"Returns true if the reference is a logical TRUE or FALSE",arguments:[{name:"Reference",metadata:!0}],fn:P(c=>({type:4,value:c?.value&&typeof c.value.value=="boolean"}))},IsText:{description:"Returns true if the reference is text",arguments:[{name:"Reference",metadata:!0}],fn:P(c=>({type:4,value:c?.value&&typeof c.value.value=="string"}))}};var ke=(c,e=!1)=>{let t=c.length,r=0,i=0;for(let o=0;o<t;o++)r+=c[o];r/=t;for(let o=0;o<t;o++){let n=c[o]-r;i+=n*n}return e?i/(t-1):i/t},Vi={"StDev.P":{description:"Returns the standard deviation of a set of values, corresponding to a population",arguments:[{name:"data"}],fn:(...c)=>({type:3,value:Math.sqrt(ke(N(c),!1))})},"StDev.S":{description:"Returns the standard deviation of a set of values, corresponding to a sample of a population",arguments:[{name:"data"}],fn:(...c)=>({type:3,value:Math.sqrt(ke(N(c),!0))})},"Var.P":{description:"Returns the variance of a set of values, corresponding to a population",arguments:[{name:"data"}],fn:(...c)=>({type:3,value:ke(N(c),!1)})},"Var.S":{description:"Returns the variance of a set of values, corresponding to a sample of a population",arguments:[{name:"data"}],fn:(...c)=>({type:3,value:ke(N(c),!0)})},Covar:{description:"Returns the covariance between two ranges of values",arguments:[{name:"A"},{name:"B"}],fn:(c,e)=>{if(!Array.isArray(c)||!Array.isArray(e))return T();if(!Array.isArray(c[0])||!Array.isArray(e[0]))return T();if(c.length!==e.length)return H();let t=0,r=0,i={x:0,y:0},o={x:[],y:[]};for(let n=0;n<c.length;n++){if(!c[n]||!e[n])continue;if(c[n].length!==e[n].length)return H();let a=c[n].length;r+=a;for(let s=0;s<a;s++)i.x+=c[n][s]||0,i.y+=e[n][s]||0,o.x.push(c[n][s]||0),o.y.push(e[n][s]||0)}if(r===0)return xe();i.x/=r,i.y/=r;for(let n=0;n<r;n++)t+=(o.x[n]-i.x)*(o.y[n]-i.y);return{type:3,value:t/r}}},Correl:{description:"Returns the correlation between two ranges of values",arguments:[{name:"A"},{name:"B"}],fn:(c,e)=>{if(!Array.isArray(c)||!Array.isArray(e))return T();if(!Array.isArray(c[0])||!Array.isArray(e[0]))return T();let t=0,r=0,i=0,o=0,n=0,a=0,s=0;for(let l=0;l<c.length;l++){if(!c[l]||!e[l])continue;let d=c[l].length;for(let u=0;u<d;u++){let h=Number(c[l][u]),m=Number(e[l][u]);isNaN(h)||isNaN(m)||(r+=h*m,i+=h,o+=m,n+=h*h,a+=m*m,s++)}}return t=s*r-i*o,t&&(t/=Math.sqrt((s*n-i*i)*(s*a-o*o))),{type:3,value:t}}},GeoMean:{description:"Returns the geometric mean of all numeric arguments",arguments:[{boxed:!0}],fn:(...c)=>{c=ge(c);let e=0,t={real:1,imaginary:0},r=!1,i=!1;for(let o of c)o.type===7?(r=!0,t=le(t,o.value),e++):o.type===3&&(o.value<0&&(i=!0),e++,t.real*=o.value,t.imaginary*=o.value);if(r){let o=he(t,{real:1/e,imaginary:0});return o.imaginary?{type:7,value:o}:{type:3,value:o.real}}else return i?T():{type:3,value:Math.pow(t.real,1/e)}}},Average:{description:"Returns the arithmetic mean of all numeric arguments",arguments:[{boxed:!0}],fn:(...c)=>{c=ge(c);let e={real:0,imaginary:0},t=0;for(let r of c){if(r.type===6)return r;r.type===3&&(e.real+=r.value,t++),r.type===7&&(e.real+=r.value.real,e.imaginary+=r.value.imaginary,t++)}return e.real/=t,e.imaginary/=t,e.imaginary?{type:7,value:e}:{type:3,value:e.real}}},Percentile:{description:"Returns the kth percentile value from the range of data",arguments:[{name:"range"},{name:"percentile"}],fn:(c,e)=>{let t=N(c).filter(s=>typeof s=="number");t.sort((s,l)=>s-l);let r=t.length,i=Math.pow(10,8),o=Math.round((1+(r-1)*e)*i)/i,n=Math.floor(o),a=Math.ceil(o);return{type:3,value:(t[n-1]+t[a-1])/2}}},Median:{description:"Returns the median value of the range of data",arguments:[{name:"range"}],fn:(...c)=>{let e=N(c).filter(n=>typeof n=="number");e.sort((n,a)=>n-a);let r=1+(e.length-1)*.5,i=Math.floor(r),o=Math.ceil(r);return{type:3,value:(e[i-1]+e[o-1])/2}}}},Vr={Mean:"Average",StDev:"StDev.S",Var:"Var.S"};var Li={IsComplex:{description:"Returns true if the reference is a complex number",arguments:[{name:"Reference",metadata:!0}],fn:P(c=>({type:4,value:c?.value&&fe(c.value.value)}))},Real:{description:"Returns the real part of a complex number",arguments:[{boxed:!0}],fn:P(c=>c.type===3?{...c}:c.type===7?{type:3,value:c.value.real||0}:c.type===0||c.type===2&&c.value===""?{type:3,value:0}:T())},Imaginary:{description:"Returns the imaginary part of a complex number (as real)",arguments:[{boxed:!0}],fn:P(c=>c.type===7?{type:3,value:c.value.imaginary||0}:c.type===3||c.type===0||c.type===2&&c.value===""?{type:3,value:0}:T())},Conjugate:{description:"Returns the conjugate of a complex number",arguments:[{boxed:!0}],fn:P(c=>c.type===7?{type:7,value:{real:c.value.real,imaginary:-c.value.imaginary}}:c.type===3||c.type===0||!c.value?{type:3,value:c.value||0}:T())},Arg:{description:"Returns the principal argument of a complex number (in radians)",arguments:[{boxed:!0}],fn:P(c=>c.type===7?{type:3,value:Math.atan2(c.value.imaginary,c.value.real)}:c.type===3||c.type===0||c.type===2&&c.value===""?{type:3,value:Math.atan2(0,c.value||0)}:T())},Rectangular:{description:"Converts a complex number in polar form to rectangular form",arguments:[{name:"r"},{name:"\u03B8 in radians"}],fn:(c=0,e=0)=>({type:7,value:{real:c*Math.cos(e),imaginary:c*Math.sin(e)}})},Complex:{description:"Ensures that the given value will be treated as a complex number",arguments:[{boxed:!0}],fn:P(c=>c.type===7?c:c.type===3||c.type===0||!c.value?{type:7,value:{imaginary:0,real:c.value||0}}:T())},ComplexLog:{description:"Returns the principal value Log(z) of a complex number z",arguments:[{boxed:!0}],fn:P(c=>{if(c.type===3){if(!c.value)return T();c={type:7,value:{real:c.value,imaginary:0}}}else if(c.type===0||c.type===2&&c.value==="")return T();if(c.type===7){let e=Nt(c.value),t={real:Math.log(e.r),imaginary:e.theta};return t.imaginary?{type:7,value:t}:{type:3,value:t.real}}return T()})}};var $t=c=>{let e=[];c.type===8?e=c.value:e=[[c.value]];let t=e.length,r=t?e[0].length:0,i=[];if(!t||!r)return{m:t,n:r,array:i};for(let o=0;o<t;o++){let n=[];for(let a=0;a<r;a++){let s=e[o][a];if(s.type===7)n.push({...s.value});else if(s.type===3)n.push({real:s.value,imaginary:0});else if(s.type===0||s.value==="")n.push({real:0,imaginary:0});else return{m:t,n:r,error:!0,array:[]}}i.push(n)}return{m:t,n:r,array:i}},Ii={MDeterm:{description:"Returns the determinant of a matrix",arguments:[{name:"matrix",boxed:!0}],fn:c=>{let e=$t(c);if(!e.array||!e.m||!e.n||e.m!==e.n||e.error)return T();let t=Pt(e);return t?ce(t):T()}},MInverse:{description:"Returns the inverse matrix",arguments:[{name:"matrix",boxed:!0}],fn:c=>{let e=$t(c);if(!e.array||!e.m||!e.n||e.m!==e.n||e.error)return T();let t=Pt(e);if(t&&t.real===0&&t?.imaginary===0)return T();let r=pi(e);return r?{type:8,value:r.map(i=>i.map(o=>ce(o)))}:T()}},MMult:{description:"Returns the dot product of A and B",arguments:[{name:"A",boxed:!0},{name:"B",boxed:!0}],fn:(c,e)=>{let t=$t(c),r=$t(e);if(!t.array||t.error||!r.array||r.error)return T();if(t.m!==r.n)return T();let i=fi(r,t);return{type:8,value:i.map(o=>o.map(n=>ce(n)))}}}};var jt=class c extends Se{static type="state-leaf-vertex";state_id=0;type=c.type;color=2;state_representation="";UpdateState(){let e=JSON.stringify(Array.from(this.edges_in).map(t=>t.result));e!==this.state_representation&&(this.state_representation=e,this.state_id++)}Calculate(e){if(this.dirty){for(let t of this.edges_in)if(t.dirty)return;this.UpdateState(),this.dirty=!1}}AddDependent(e){throw new Error("leaf vertex cannot have dependents")}};var qt=class c extends Se{static type="calculation-leaf-vertex";type=c.type;address={row:-1,column:-1};updated=!1;color=2;Calculate(e){if(!this.dirty)return;for(let r of this.edges_in)if(r.dirty)return;let t=e.CalculationCallback.call(e,this);this.result=t.value,this.dirty=!1,this.updated=!0}AddDependent(e){throw new Error("leaf vertex cannot have dependents")}};var en=c=>{if(typeof c=="string")switch(c=c.toUpperCase(),c){case"AVERAGE":case"MEAN":c=101;break;case"COUNT":c=102;break;case"COUNTA":c=103;break;case"MAX":c=104;break;case"MIN":c=105;break;case"PRODUCT":c=106;break;case"STDEV":c=107;break;case"STDEVP":c=108;break;case"SUM":c=109;break;case"VAR":c=110;break;case"VARP":c=111;break;default:c=0;break}return c},tn={complex_numbers:"off"},Jt=class extends Ht{constructor(t,r={}){super();this.model=t;if(this.expression_calculator=new Ot(this.library,this.parser),{...tn,...r}.complex_numbers==="on"){for(let o of Object.keys(Ur))je[o]=Ur[o];yi()}this.UpdateLocale(),this.library.Register(je,zi,Vi,Ui,Di,Li,Ii);for(let o of Object.keys(Vr))this.library.Alias(o,Vr[o]);for(let o of Object.keys(Dr))this.library.Alias(o,Dr[o]);this.library.Register({Subtotal:{arguments:[{name:"type"},{name:"range",metadata:!0}],fn:(o,...n)=>{if(o=en(o),o>100&&(o-=100),o<1||o>11)return H();let a=ge(n),s=[],l=0,d=0,u;for(let m of a){let f=m.value?.address;if(!f)return j();if(!u||u.id!==f.sheet_id){if(!f.sheet_id)return console.warn("invalid reference in metadata"),j();if(u=this.model.sheets.Find(f.sheet_id),!u)return console.warn("invalid sheet in metadata"),j()}if(!u.GetRowHeight(f.row))continue;let _=m.value?.value;typeof _>"u"||(l++,typeof _=="number"&&(d+=_,s.push(_)))}let h=0;switch(o){case 1:if(s.length===0)return ue();h=d/s.length;break;case 2:h=s.length;break;case 3:h=l;break;case 4:if(s.length===0)return T();h=Math.max.apply(0,s);break;case 5:if(s.length===0)return T();h=Math.min.apply(0,s);break;case 6:if(s.length===0)return T();h=1;for(let m of s)h*=m;break;case 7:if(s.length<2)return ue();h=Math.sqrt(ke(s,!0));break;case 8:if(s.length===0)return ue();h=Math.sqrt(ke(s,!1));break;case 9:h=d;break;case 10:if(s.length<2)return ue();h=ke(s,!0);break;case 11:if(s.length===0)return ue();h=ke(s,!1);break}return{type:3,value:h}}},CountIf:{arguments:[{name:"range"},{name:"criteria"}],fn:(o,n)=>{let a=N(o);typeof n!="string"?n="="+(n||0).toString():(n=n.trim(),/^[=<>]/.test(n)||(n="="+n));let s=this.parser.Parse("{}"+n),l=s.expression;if(s.error||!l)return Ce();if(l.type!=="binary")return Ce();if(l.left.type!=="array")return Ce();l.left.values=[a];let d=this.CalculateExpression(l);if(d.type===8){let u=0;for(let h of d.value)for(let m of h)m.value&&u++;return{type:3,value:u}}return d}},Offset:{arguments:[{name:"reference",description:"Base reference",metadata:!0},{name:"rows",description:"number of rows to offset"},{name:"columns",description:"number of columns to offset"},{name:"height"},{name:"width"}],return_type:1,volatile:!0,fn:((o,n=0,a=0,s,l)=>{if(!o)return H();if(o.type===8){let u=typeof s=="number"?n+s:void 0,h=typeof l=="number"?a+l:void 0;return{type:8,value:o.value.slice(n,u).map(f=>f.slice(a,h))}}if(!at(o))return console.info("e2",{reference:o}),j();let d=this.DynamicDependencies(o.value.address,this.expression_calculator.context.address,!0,n,a,l,s);if(!d)return console.info("e1",{check_result:d}),j();if(d.dirty){let u=this.GetVertex(this.expression_calculator.context.address,!0);return u.short_circuit=!0,{type:0,value:void 0}}if(d.area){let u={type:"address",...d.area.start,label:"",position:0,id:0},h={type:"address",...d.area.end,label:"",position:0,id:0},m=d.area.count===1?u:{type:"range",start:u,end:h,label:"",position:0,id:0};return{type:5,value:m}}return T()}).bind(this)},Indirect:{arguments:[{name:"reference",description:"Cell reference (string)"}],return_type:1,volatile:!0,fn:(o=>{if(!o||typeof o!="string")return H();let n=this.parser.Parse(o);if(n.error||!n.expression||n.expression.type!=="address"&&n.expression.type!=="range")return j();let a=this.DynamicDependencies(n.expression,this.expression_calculator.context.address);if(!a)return j();if(a.dirty){let s=this.GetVertex(this.expression_calculator.context.address,!0);return s.short_circuit=!0,{type:0,value:void 0}}return{type:5,value:n.expression}}).bind(this)},Match:{arguments:[{name:"value",boxed:!0},{name:"range",boxed:!0},{name:"type"}],fn:(o,n,a=0)=>{if(a)return console.warn("inexact match not supported",{value:o,range:n,type:a}),xe();if(n.type===8){if(n.value.length===1){let s=n.value[0];for(let l=0;l<s.length;l++)if(o.type==s[l].type&&o.value===s[l].value)return{type:3,value:l+1}}else for(let s=0;s<n.value.length;s++){let l=n.value[s];if(l.length!==1)return xe();if(o.type==l[0].type&&o.value===l[0].value)return{type:3,value:s+1}}return xe()}else return o.type===n.type&&o.value===n.value?{type:3,value:1}:xe();return H()}},Index:{arguments:[{name:"range",boxed:!0},{name:"row"},{name:"column"}],volatile:!1,fn:(o,n,a)=>{if(o&&o.type!==8&&(o={type:8,value:[[o]]}),n&&a){let s=o.value[a-1];if(s){let l=s[n-1];if(l)return l}}else if(n){let s=[];for(let l of o.value){if(!l[n-1])return H();s.push([l[n-1]])}return{type:8,value:s}}else if(a){let s=o.value[a-1];if(s)return{type:8,value:[s]}}return H()}},Rows:{arguments:[{name:"reference",description:"Array or reference"}],volatile:!1,fn:o=>{if(!o)return H();if(Array.isArray(o)){let n=o[0];return Array.isArray(n)?{type:3,value:n.length}:T()}return{type:3,value:1}}},Columns:{arguments:[{name:"reference",description:"Array or reference"}],volatile:!1,fn:o=>o?Array.isArray(o)?{type:3,value:o.length}:{type:3,value:1}:H()},FormulaText:{description:"Returns a formula as a string",arguments:[{name:"reference",description:"Cell reference",metadata:!0}],fn:P(o=>{if(!at(o))return j();let n=this.model.sheets.Find(o.value?.address?.sheet_id||0);if(n){let a=n.cells.GetCell(o.value.address,!1);return{type:2,value:a?.value?.toString()||""}}return j()})},IsFormula:{description:"Returns true if the reference is a formula",arguments:[{name:"Reference",metadata:!0}],fn:P(o=>{let n=this.model.sheets.Find(o?.value?.address?.sheet_id||0);if(n){let a=n.cells.GetCell(o.value.address,!1);return{type:4,value:a?.type===1}}return{type:4,value:!1}})}})}get parser(){return this.model.parser}library=new Bt;registered_libraries={};expression_calculator;full_rebuild_required=!1;ExportCalculatedValues(){let t={};for(let r of this.model.sheets.list){let i=r.cells.toJSON({calculated_value:!0}).data;t[r.id]=i.filter(o=>o.calculated!==void 0)}return t}ApplyCalculatedValues(t){for(let r of this.model.sheets.list){let i=t[r.id];if(!i)console.info("mismatch",r.id);else for(let o of i)r.cells.data[o.row][o.column].SetCalculatedValue(o.calculated)}}SpreadCallback(t,r){if(!t.address||!t.address.sheet_id)throw new Error("spread callback called without sheet id");let i=this.model.sheets.Find(t.address.sheet_id)?.cells;if(!i)throw new Error("spread callback called without cells");if(!t||!t.reference)return;let o=t.reference.area;if(o){let n=o.rows,a=o.columns;if(r.type===8){let s=Gt(r.value);for(let l=0;l<n;l++)if(s[l]){let d=0;for(;d<a&&d<s[l].length;d++)i.data[l+o.start.row][d+o.start.column].SetCalculatedValue(s[l][d].value,s[l][d].type);for(;d<a;d++)i.data[l+o.start.row][d+o.start.column].SetCalculatedValue(void 0,0)}else for(let d=0;d<a;d++)i.data[l+o.start.row][d+o.start.column].SetCalculatedValue(void 0,0)}else for(let s=0;s<n;s++)for(let l=0;l<a;l++)i.data[s+o.start.row][l+o.start.column].SetCalculatedValue(r.value,r.type)}}CalculationCallback(t){if(!t.address)throw new Error("vertex missing address");return t.expression_error?{value:It()}:this.expression_calculator.Calculate(t.expression,t.address)}DynamicDependencies(t,r,i=!1,o=0,n=0,a=1,s=1){let l=this.ResolveExpressionAddress(t,r);if(!l)return;let d=!1,u;if(t.type==="address"||t.type==="range"){let m=t.type==="range"?t.start:t;m.sheet_id?u=this.model.sheets.Find(m.sheet_id):m.sheet&&(u=this.model.sheets.Find(m.sheet))}if(!u&&r?.sheet_id&&(u=this.model.sheets.Find(r.sheet_id)),!u)throw new Error("missing sheet in dynamic dependencies [b21]");l=u.RealArea(l);let h=l.start.sheet_id;i&&(l=new y({column:l.start.column+n,row:l.start.row+o,sheet_id:l.start.sheet_id},{column:l.start.column+n+a-1,row:l.start.row+o+s-1,sheet_id:l.end.sheet_id}));for(let m=l.start.row;m<=l.end.row;m++)for(let f=l.start.column;f<=l.end.column;f++){let p=this.GetVertex({row:m,column:f,sheet_id:h},!1);p&&p.dirty&&(this.AddEdge({row:m,column:f,sheet_id:h},this.expression_calculator.context.address),d=!0)}return{dirty:d,area:l}}UpdateLocale(){z.decimal_separator===","?(this.parser.decimal_mark=",",this.parser.argument_separator=";"):(this.parser.decimal_mark=".",this.parser.argument_separator=",")}SupportedFunctions(){let t=this.library.List(),r=Object.keys(t).map(i=>{let o=t[i].canonical_name;return o||(o=i.replace(/_/g,".")),{name:o,description:t[i].description,arguments:(t[i].arguments||[]).map(n=>({name:n.name||""}))}});for(let i of this.model.macro_functions.values())r.push({name:i.name,description:i.description,arguments:(i.argument_names||[]).map(o=>({name:o}))});return r}RegisterLibrary(t,r){return this.registered_libraries[t]?!1:(this.RegisterFunction(r),this.registered_libraries[t]=!0,!0)}RegisterFunction(t){for(let r of Object.keys(t)){let i=t[r],o=i.fn;i.fn=(...n)=>o.apply({address:{...this.expression_calculator.context.address}},n),this.library.Register({[r]:i})}}AttachModel(){this.expression_calculator.SetModel(this.model)}Calculate(t){if(this.AttachModel(),t&&!t.start.sheet_id)throw new Error("CalculateInternal called with subset w/out sheet ID");this.full_rebuild_required&&(t=void 0,this.UpdateAnnotations(),this.UpdateConditionals(),this.full_rebuild_required=!1),this.RebuildGraph(t);try{this.Recalculate()}catch(r){console.error(r),console.info("calculation error trapped")}}Reset(){this.FlushTree(),this.AttachModel(),this.full_rebuild_required=!0}DecoratedFunctionList(){let t={},r=this.library.List();for(let i of Object.keys(r)){let o=r[i];o.xlfn?t[i]="_xlfn":o.extension&&(t[i]="_xll")}return t}Evaluate(t,r,i={},o=!1){let n=this.parser.argument_separator,a=this.parser.flags.r1c1;i.argument_separator&&(i.argument_separator===","?(this.parser.argument_separator=",",this.parser.decimal_mark="."):(this.parser.argument_separator=";",this.parser.decimal_mark=",")),i.r1c1&&(this.parser.flags.r1c1=i.r1c1);let s=this.parser.Parse(t);if(this.parser.argument_separator=n,this.parser.decimal_mark=n===","?".":",",this.parser.flags.r1c1=a,s&&s.expression){this.parser.Walk(s.expression,d=>{if(d.type==="address"||d.type==="range"){if(d.type==="address"){if(d.offset_column||d.offset_row)throw new Error("Evaluate does not support offset references")}else if(d.start.offset_column||d.start.offset_row||d.end.offset_column||d.end.offset_row)throw new Error("Evaluate does not support offset references");this.model.ResolveSheetID(d,void 0,r)}return!0});let l=this.CalculateExpression(s.expression);return o?l:l.type===8?l.value.map(d=>d.map(u=>u.value)):l.value}throw s.error?new Error(s.error):new Error("invalid expression")}CalculateExpression(t,r={row:-1,column:-1},i=!1){return this.expression_calculator.Calculate(t,r,i).value}RebuildClean(t=!1){this.full_rebuild_required=!1,this.AttachModel(),this.RebuildGraph(),this.UpdateAnnotations(),this.UpdateConditionals(),this.InitializeGraph(),t&&this.volatile_list.length&&this.Recalculate()}FlattenCellList(t){let r={},i=[];for(let o of t){let n={column:o.column,row:o.row,sheet_id:o.sheet_id},a=y.CellAddressToLabel(n,!0);r[a]||(r[a]=a,i.push(n))}return i}Unresolve(t,r,i=!0,o=!0){let n="",a=V(t)?new y(t):new y(t.start,t.end);if(o){let d=this.model.named_ranges.MatchSelection(a);if(d)return d}if(a.count>1?n=y.CellAddressToLabel(a.start)+":"+y.CellAddressToLabel(a.end):n=y.CellAddressToLabel(a.start),!i)return n;let s=a.start.sheet_id||r?.id,l=this.ResolveSheetName(s,!0);return l?l+"!"+n:n}ResolveSheetName(t,r=!1){let i=this.model.sheets.Find(t);if(i)return r&&ze.test(i.name)?`'${i.name}'`:i.name}RemoveConditional(t){if(t.type==="expression"){let r=t.internal?.vertex;r&&(r.Reset(),this.RemoveLeafVertex(r))}}UpdateConditionals(t,r){if(!t){for(let i of this.model.sheets.list)i.conditional_formats?.length&&this.UpdateConditionals(i.conditional_formats,i);return}if(!r)throw new Error("invalid call to update conditionals without context");t&&!Array.isArray(t)&&(t=[t]);for(let i of t){let o="";switch(i.type){case"cell-match":o=this.Unresolve(i.area,r,!0,!1)+" "+i.expression;break;case"expression":o=i.expression;break;case"duplicate-values":o=`UniqueValues(${this.Unresolve(i.area,r,!0,!1)})`,i.unique||(o=`NOT(${o})`);break;case"gradient":o=`=Gradient(${[this.Unresolve(i.area,r,!0,!1),i.min??"",i.max??""].join(this.parser.argument_separator)})`;break;default:continue}if(!o)continue;if(i.internal||(i.internal={}),!i.internal.vertex){i.internal.vertex=new qt;let a;i.type!=="gradient"&&i.type!=="duplicate-values"&&(a=i.options);let s=this.Evaluate(o,r,a,!0);i.internal.vertex.result=s,i.internal.vertex.updated=!0}let n=i.internal.vertex;this.AddLeafVertex(n),this.UpdateLeafVertex(n,o,r)}}RemoveAnnotation(t){let r=t.temp.vertex;r&&(r.Reset(),this.RemoveLeafVertex(r))}UpdateAnnotations(t,r){if(!t){for(let i of this.model.sheets.list)this.UpdateAnnotations(i.annotations,i);return}if(!r)throw new Error("invalid call to UpdateAnnotations with list but no sheet");typeof t<"u"&&!Array.isArray(t)&&(t=[t]);for(let i of t)if(i.data.formula){i.temp.vertex||(i.temp.vertex=new jt);let o=i.temp.vertex;this.AddLeafVertex(o),this.UpdateLeafVertex(o,i.data.formula,r)}}ResolveExpressionAddress(t,r){switch(t.type){case"address":if(this.model.ResolveSheetID(t,r))return new y(t);break;case"range":if(this.model.ResolveSheetID(t,r))return new y(t.start,t.end);break;case"identifier":{let i=this.model.named_ranges.Get(t.name.toUpperCase());if(i)return new y(i.start,i.end)}break}}NamedRangeToAddressUnit(t){let r=t.name.toUpperCase(),i=this.model.named_ranges.Get(r);if(i)return i.count===1?this.ConstructAddressUnit(i.start,r,t.id,t.position):{type:"range",start:this.ConstructAddressUnit(i.start,r,t.id,t.position),end:this.ConstructAddressUnit(i.end,r,t.id,t.position),label:r,id:t.id,position:t.position}}ConstructAddressUnit(t,r,i,o){return{type:"address",row:t.row,column:t.column,sheet_id:t.sheet_id,label:r,id:i,position:o}}RebuildDependencies(t,r,i,o={addresses:{},ranges:{}},n){if(!i){let a=this.model.sheets.Find(r);a&&(i=a.name)}switch(t.type){case"literal":case"missing":case"operator":break;case"identifier":{let a=t.name.toUpperCase();if(this.model.named_expressions.has(a)){let s=this.model.named_expressions.get(a);s&&this.RebuildDependencies(s,r,i,o,n)}else{let s=this.NamedRangeToAddressUnit(t);s&&(s.type==="address"?o.addresses[s.label]=s:o.ranges[s.label]=s)}}break;case"structured-reference":{let a=this.model.ResolveStructuredReference(t,n);a&&(a.type==="address"?o.addresses[a.sheet_id+"!"+a.label]=a:o.ranges[a.label]=a);let s=this.model.tables.get(t.table.toLowerCase());if(s){let l=n.row;if(l<s.area.start.row||l>s.area.end.row)break;let d=t.column.toLowerCase(),u=-1;if(s.columns){for(let h=0;h<s.columns.length;h++)if(d===s.columns[h]){u=s.area.start.column+h;break}}if(u>=0){let h={label:t.label,type:"address",row:l,column:u,sheet_id:s.area.start.sheet_id,id:t.id,position:t.position};o.addresses[h.sheet_id+"!"+h.label]=h}}}break;case"address":if(!t.sheet_id)if(t.sheet){let a=this.model.sheets.Find(t.sheet);a&&(t.sheet_id=a.id)}else t.sheet_id=r,t.sheet=i;t.sheet_id?o.addresses[t.sheet_id+"!"+t.label]=t:console.warn("invalid address in range [9d]");break;case"range":if(!t.start.sheet_id)if(t.start.sheet){let a=this.model.sheets.Find(t.start.sheet);a&&(t.start.sheet_id=a.id)}else t.start.sheet_id=r,t.start.sheet=i;t.start.sheet_id?o.ranges[t.start.sheet_id+"!"+t.start.label+":"+t.end.label]=t:console.warn("invalid sheet in range",t);break;case"unary":this.RebuildDependencies(t.operand,r,i,o,n);break;case"binary":this.RebuildDependencies(t.left,r,i,o,n),this.RebuildDependencies(t.right,r,i,o,n);break;case"group":t.elements.forEach(a=>this.RebuildDependencies(a,r,i,o,n));break;case"call":{let a=t.args.slice(0),s=this.library.Get(t.name);s&&s.arguments&&s.arguments.forEach((l,d)=>{l&&l.address&&(this.RebuildDependencies(a[d],r,i,void 0,n),a[d]={type:"missing",id:-1})}),a.forEach(l=>this.RebuildDependencies(l,r,i,o,n))}break}return o}UpdateLeafVertex(t,r,i){t.Reset();let o=this.parser.Parse(r);if(o.expression){let n=this.RebuildDependencies(o.expression,i.id,i.name,void 0,{row:0,column:0});for(let a of Object.keys(n.ranges)){let s=n.ranges[a];new y(s.start,s.end).Iterate(d=>{this.AddLeafVertexEdge(d,t)})}for(let a of Object.keys(n.addresses)){let s=n.addresses[a];this.AddLeafVertexEdge(s,t)}}t.expression=o.expression||{type:"missing",id:-1},t.expression_error=!o.valid}RebuildGraphCell(t,r){if(t.area&&t.area.start.column===r.column&&t.area.start.row===r.row){let{start:i,end:o}=t.area,n=i.sheet_id||r.sheet_id;i.sheet_id||(i.sheet_id=n);for(let a=i.column;a<=o.column;a++)for(let s=i.row;s<=o.row;s++)this.ResetInbound({column:a,row:s,sheet_id:n},!0,!1);this.SetDirty(r);for(let a=i.column;a<=o.column;a++)for(let s=i.row;s<=o.row;s++)s===i.row&&a===i.column||this.AddEdge(i,{...i,row:s,column:a})}if(t.type===1){this.ResetInbound(r,!0);let i=this.parser.Parse(t.value);if(i.expression){if(i.expression.type==="call"){let a=this.library.Get(i.expression.name);a&&(a.render||a.click)&&(t.render_function=a.render,t.click_function=a.click)}let n=this.RebuildDependencies(i.expression,r.sheet_id,"",void 0,r);for(let a of Object.keys(n.ranges)){let s=n.ranges[a],l=new y(s.start,s.end);l.entire_row||l.entire_column?this.AddArrayEdge(l,r):l.Iterate(d=>this.AddEdge(d,r))}for(let a of Object.keys(n.addresses)){let s=n.addresses[a];this.AddEdge(s,r)}}let o=this.GetVertex(r,!0);o&&(o.expression=i.expression||{type:"missing",id:-1},o.expression_error=!i.valid)}else t.value!==t.calculated?this.ResetInbound(r,!0,!1):t.type===0&&this.ResetInbound(r,!0,!1,!0)}RebuildGraph(t){if(t){if(!t.start.sheet_id)throw new Error("subset missing sheet id");let r=this.model.sheets.Find(t.start.sheet_id)?.cells;if(r)for(let i=t.start.row;i<=t.end.row;i++){let o=r.data[i];if(o)for(let n=t.start.column;n<=t.end.column;n++){let a=o[n];a&&this.RebuildGraphCell(a,{row:i,column:n,sheet_id:t.start.sheet_id})}}}else for(let r of this.model.sheets.list||[]){let i=r.cells.data.length;for(let o=0;o<i;o++){let n=r.cells.data[o];if(n){let a=n.length;for(let s=0;s<a;s++){let l=n[s];l&&this.RebuildGraphCell(l,{row:o,column:s,sheet_id:r.id})}}}}}IsNativeOrTypedArray(t){return Array.isArray(t)||t instanceof Float64Array||t instanceof Float32Array}CheckVolatile(t){if(!t.expression||t.expression_error)return!1;let r=!1;return this.parser.Walk(t.expression,i=>{if(i.type==="call"){let o=this.library.Get(i.name);o&&o.volatile&&(r=!0)}return!r}),r}};var Wt=class{model={};layout_element;visible_=!1;timeout=0;pending_dialog_resoltion=[];options_={type:"initial"};set options(e){if(e.type==="about"&&(e.close_box=!0,e.icon=!0),this.options_.icon!==e.icon&&(this.model.left.style.display=e.icon?"block":"none"),this.options_.close_box!==e.close_box&&(this.model.close.style.display=e.close_box?"block":"none"),this.options_.message!==e.message&&(this.model.message.textContent=e.message||"",this.model.message.style.display=e.message?"block":"none"),this.options_.title!==e.title&&(this.model.title.textContent=e.title||"",this.model.title.style.display=e.title?"block":"none"),this.options_.type!==e.type){let t=this.model.dialog.className.replace(/dialog-type-\S+/g,"").trim();e.type&&(t+=` dialog-type-${e.type}`),this.model.dialog.className=t,e.type==="about"?this.model.about.style.display="block":this.model.about.style.display="none"}this.options_=e}event_handler=e=>{(e.key==="Escape"||e.key==="Esc")&&(e.stopPropagation(),e.preventDefault(),this.visible=!1)};get visible(){return this.visible_}set visible(e){if(e!==this.visible_)if(this.visible_=e,e)this.layout_element?.setAttribute("dialog",""),window.addEventListener("keydown",this.event_handler);else{this.layout_element?.removeAttribute("dialog"),window.removeEventListener("keydown",this.event_handler);let t=this.pending_dialog_resoltion.slice(0);this.pending_dialog_resoltion=[],Promise.resolve().then(()=>{for(let r of t)r()})}}constructor(e){this.layout_element=e.parentElement;let t=this.layout_element?.querySelector(".treb-dialog-mask");if(t){let r=t.querySelectorAll("[data-bind]");for(let i of Array.from(r)){let o=i.dataset.bind;o&&(this.model[o]=i)}}if(this.model.about){let r=["<div>TREB version 28.2.0"];r.push("<small><a target=_blank href='https://treb.app'>http://treb.app</a></small>"),this.model.about.innerHTML=r.join(`
|
|
11
11
|
`)}this.model.close?.addEventListener("click",r=>{r.stopPropagation(),r.preventDefault(),this.HideDialog()})}Update(e,t=!0){t&&(e={...this.options_,...e}),this.options=e}HideDialog(){this.visible=!1}ShowDialog(e){return new Promise(t=>{this.pending_dialog_resoltion.push(t),this.options=e,this.visible=!0,this.timeout&&(window.clearTimeout(this.timeout),this.timeout=0),e.timeout&&(this.timeout=window.setTimeout(()=>this.HideDialog(),e.timeout))})}};var Xt=class{constructor(e){this.container=e;let t=F.GetInstance(e.ownerDocument);this.node=t.Div("treb-spinner",e,{html:"<div><div></div><div></div><div></div><div></div></div>"})}node;visible=!1;Show(){this.node.classList.add("visible")}Hide(){this.node.classList.remove("visible")}};var Fi={formula_bar:!0,in_cell_editor:!0,undo:!0,scrollbars:!0,headers:!0,export:!0,tab_bar:"auto",resizable:!0,hyperlinks:"_blank",max_file_size:94208,tint_theme_colors:!0,dnd:!1,add_tab:!1,expand_formula_button:!1,expand:!0,markdown:!1,spinner:!1,complex:"off"};var Re=class{constructor(e=0,t=0,r=100,i=100){this.left=e;this.top=t;this.right=r;this.bottom=i}get width(){return this.right-this.left}get height(){return this.bottom-this.top}get center(){return{x:this.left+this.width/2,y:this.top+this.height/2}}};var an="http://www.w3.org/2000/svg",R=(c,e={},t)=>{let r=document.createElementNS(an,c);for(let i of Object.keys(e))if(e[i]!==void 0){let o=e[i];r.setAttribute(i,Array.isArray(o)?o.join(" "):o.toString())}return t&&(r.textContent=t),r},Kt=class{parent;svg_node;text_measurement_node;container_group;group;axis_group;label_group;size={width:0,height:0};bounds=new Re;constructor(){this.container_group=R("g"),this.group=R("g"),this.axis_group=R("g",{class:"axis-group"}),this.label_group=R("g",{class:"label-group"}),this.container_group.appendChild(this.axis_group),this.container_group.appendChild(this.group),this.container_group.appendChild(this.label_group)}Initialize(e){this.parent=e,this.svg_node=R("svg",{class:"treb-chart"}),this.svg_node.style.overflow="hidden",this.svg_node.style.position="relative",this.svg_node.style.width="100%",this.svg_node.style.height="100%",this.svg_node.appendChild(this.container_group),this.parent.appendChild(this.svg_node),this.Resize()}Legend(e){let t=R("g");this.group.appendChild(t);let r=R("text");t.appendChild(r),t.setAttribute("class","legend");let i=[[]],o=10,n=e.area.width,a=0,s=0,l=e.area.width,d=e.style===1?14:26,u=e.labels.map((_,b)=>{r.textContent=_.label;let v=r.getBoundingClientRect(),g={width:v.width,height:v.height},w=g.width+d+o;return s=Math.max(s,g.height),e.layout===1?i[b]=[b]:w>n?i[a].length===0?(i[a].push(b),a++,i[a]=[],n=l):(a++,i[a]=[b],n=l-w):(i[a].push(b),n-=w),g});t.removeChild(r);let h=s,m=e.layout||0;m===0&&i.every(_=>_.length<=1)&&(m=0);for(let _=0;_<i.length;_++){let b=i[_].reduce((w,x)=>w+u[x].width+d,(i[_].length-1)*o),v=0,g=m===0?Math.round((l-b)/2):Math.round(o/2);for(let w=0;w<i[_].length;w++){let x=i[_][w],S=u[x],k=e.labels[x],A=h-1,M=!1;typeof navigator<"u"&&(M=/trident/i.test(navigator?.userAgent||""));let I=typeof k.index=="number"?k.index:x+1;t.appendChild(R("text",{"dominant-baseline":"middle",x:g+d,y:h,dy:M?".3em":void 0},k.label)),e.style===1?t.appendChild(R("rect",{class:`series-${I}`,x:g,y:A-4,width:8,height:8})):t.appendChild(R("rect",{class:`series-${I}`,x:g,y:A-1,width:d-3,height:2})),v=Math.max(v,S.height),g+=S.width+d+o}h=Math.round(h+v*1.1)}let f=t.getBoundingClientRect(),p={width:f.width,height:f.height+s};switch(e.position){case 1:t.setAttribute("transform",`translate(${e.area.left}, ${e.area.bottom-p.height})`);break;case 2:t.setAttribute("transform",`translate(${e.area.left}, ${e.area.top})`);break;case 3:t.setAttribute("transform",`translate(${e.area.right-p.width}, ${e.area.top})`);break;case 0:default:t.setAttribute("transform",`translate(${e.area.left}, ${e.area.top})`)}e.position===0?e.area.top+=p.height||0:e.position===3?e.area.right-=(p.width||0)+8:e.position===2?e.area.left+=(p.width||0)+8:e.area.bottom-=p.height||0}Clear(e){this.group.textContent="",this.axis_group.textContent="",this.label_group.textContent="",e="treb-chart"+(e?" "+e:""),this.svg_node.setAttribute("class",e)}Resize(){let e=this.parent.getBoundingClientRect();this.svg_node.setAttribute("width",e.width.toString()),this.svg_node.setAttribute("height",e.height.toString()),this.size={width:e.width,height:e.height}}Prerender(){let e=this.svg_node.getBoundingClientRect();this.bounds.top=e.top,this.bounds.left=e.left,this.bounds.right=e.right,this.bounds.bottom=e.bottom}RenderTitle(e,t,r,i){let o=R("text",{class:"chart-title",x:Math.round(t.width/2)},e);o.style.textAnchor="middle",this.group.appendChild(o);let n=o.getBoundingClientRect();switch(i){case"bottom":o.setAttribute("y",Math.round(t.bottom-n.height).toString()),t.bottom-=n.height+r;break;default:o.setAttribute("y",Math.round(t.top+r+n.height).toString()),t.top+=n.height+r;break}}MeasureText(e,t,r=!1){this.text_measurement_node||(this.text_measurement_node=R("text",{x:"-100px",y:"-100px"}),this.svg_node.appendChild(this.text_measurement_node)),typeof t<"u"?(typeof t=="string"&&(t=[t]),this.text_measurement_node.setAttribute("class",t.join(" "))):this.text_measurement_node.setAttribute("class",""),this.text_measurement_node.textContent=e;let i=this.text_measurement_node.getBoundingClientRect(),o={width:i.width,height:i.height,y_offset:i.height-(this.bounds.top-i.top-100)};return r&&(o.width=Math.ceil(o.width),o.height=Math.ceil(o.height),o.y_offset=Math.ceil(o.y_offset)),o}RenderTicks(e,t,r,i,o){let n=[],a=e.width/i;for(let s=0;s<i;s++){let l=Math.round(e.left+a/2+a*s)-.5;n.push(`M${l} ${t} L${l} ${r}`)}this.group.appendChild(R("path",{d:n,class:o}))}RenderXAxisBar(e,t,r,i,o){let n=r.length;if(!n)return;let a=4,s=t?e.width/n:e.width/(n-1),l=t?s/2:0,d=1,u=!0;for(;u;){u=!1;let h=0;for(let m=0;m<n;m+=d){let f=Math.round(e.left+l+s*m),p=f-i[m].width/2;if(h&&p<=h){d++,u=!0;break}h=f+i[m].width/2+a}}for(let h=0;h<n;h+=d){let m=Math.round(e.left+l+s*h);this.RenderText(this.axis_group,r[h],"center",{x:m,y:e.bottom},o)}}RenderXAxisTicks(e,t,r){let i=t?e.width/r:e.width/(r-1),o=t?i/2:0,n=[];for(let a=0;a<r;a++){let s=Math.round(e.left+o+i*a)+.5;n.push(`M${s},${e.bottom+.5} v6`)}this.axis_group.appendChild(R("path",{d:n.join(" "),class:"x-axis-tick axis-tick"}))}RenderXAxis(e,t,r,i,o){let n=r.length;if(!n)return;let a=4,s=t?e.width/n:e.width/(n-1),l=t?s/2:0,d=1,u=!0,h=(r.length-1)%2===0,m=(r.length-1)%3===0;for(;u;){u=!1;let f=0;for(let p=0;p<n;p+=d){let _=Math.round(e.left+l+s*p),b=_-i[p].width/2;if(f&&b<=f){d++,u=!0;break}f=_+i[p].width/2+a}}d===3&&!m&&h&&d++;for(let f=0;f<n;f+=d){let p=Math.round(e.left+l+s*f);this.RenderText(this.axis_group,r[f],"center",{x:p,y:e.bottom},o)}}RenderYAxisBar(e,t,r,i){r=r.slice(0),r.reverse();let o=r.length;if(!o)return;let n=e.height/o,a=1,s=!0;for(;s;){s=!1;let l=0;for(let d=0;d<o;d+=a){let u=r[d],h=Math.round(e.bottom-n*(d+.5)+u.metrics.height/4);if(l&&h>=l){a++,s=!0;break}l=h-u.metrics.height}}for(let l=0;l<o;l+=a){let d=r[l],u=Math.round(e.bottom-n*(l+.5)+d.metrics.height/4);this.RenderText(this.axis_group,d.label,"right",{x:t,y:u},i)}}RenderYAxis(e,t,r,i){let o=r.length;if(!o)return;let n=e.height/(o-1),a=1,s=!0;for(;s;){s=!1;let l=0;for(let d=0;d<o;d+=a){let u=r[d],h=Math.round(e.bottom-n*d+u.metrics.height/4);if(l&&h>=l){a++,s=!0;break}l=h-u.metrics.height}}for(let l=0;l<o;l+=a){let d=r[l],u=Math.round(e.bottom-n*l+d.metrics.height/4);this.RenderText(this.axis_group,d.label,"right",{x:t,y:u},i)}}LineProperties(e,t){let r=t.x-e.x,i=t.y-e.y;return{length:Math.sqrt(r*r+i*i),angle:Math.atan2(i,r)}}RenderSmoothLine(e,t,r=!1,i,o){let n=R("g"),a=[],s=[],l=t.length,d=l-1,u=e.width/l/2,h=[],m=t.map((_,b)=>{if(!(typeof _>"u"))return{x:Math.round(e.left+e.width/d*b),y:e.bottom-_}}),f=[],p=()=>{if(f.length<2)return;let _="",b=f[0],v=f[f.length-1];f.length===2?_=`${f[0].x},${f[0].y} L${f[1].x},${f[1].y}`:f.length>2&&(_=""+this.CatmullRomChain(f).map(w=>`${w.x},${w.y}`).join(" L")),_&&(a.push("M"+_),r&&(s.push(`M ${b.x},${e.bottom} L ${b.x},${b.y}`),s.push("L"+_),s.push(`L ${v.x},${e.bottom}`)))};for(let _ of m)_?f.push(_):(p(),f=[]);if(f.length&&p(),r&&n.appendChild(R("path",{class:"fill",d:s})),n.appendChild(R("path",{class:"line",d:a})),typeof o<"u"&&(typeof o=="string"&&(o=[o]),n.setAttribute("class",o.join(" "))),this.group.appendChild(n),i&&h.length){let _=R("g");for(let b of h){let v=R("circle",{cx:b.x,cy:b.y,r:u});v.addEventListener("mouseenter",g=>{this.parent.setAttribute("title",i[b.i]||"")}),v.addEventListener("mouseleave",g=>{this.parent.setAttribute("title","")}),_.appendChild(v)}_.setAttribute("class","mouse-layer"),this.group.appendChild(_)}}RenderLine(e,t,r=!1,i,o){let n=R("g"),a=[],s=[],l=t.length,d=l-1,u=e.width/l/2,h=[],m=0,f=!0,p;for(;m<l;m++){let _=t[m];if(typeof _>"u"){f=!0,r&&typeof p<"u"&&s.push(`L${p} ${e.bottom}Z`),p=void 0;continue}let b=Math.round(+e.left+e.width/d*m);f?(r&&s.push(`M${b} ${e.bottom} L${b} ${e.bottom-_}`),a.push(`M${b} ${e.bottom-_}`)):(a.push(`L${b} ${e.bottom-_}`),s.push(`L${b} ${e.bottom-_}`)),h.push({x:b,y:e.bottom-_,i:m}),p=b,f=!1}if(r&&typeof p<"u"&&s.push(`L${p} ${e.bottom}Z`),r&&n.appendChild(R("path",{class:"fill",d:s})),n.appendChild(R("path",{class:"line",d:a})),typeof o<"u"&&(typeof o=="string"&&(o=[o]),n.setAttribute("class",o.join(" "))),this.group.appendChild(n),i&&h.length){let _=R("g");for(let b of h){let v=R("circle",{cx:b.x,cy:b.y,r:u});v.addEventListener("mouseenter",g=>{this.parent.setAttribute("title",i[b.i]||"")}),v.addEventListener("mouseleave",g=>{this.parent.setAttribute("title","")}),_.appendChild(v)}_.setAttribute("class","mouse-layer"),this.group.appendChild(_)}}RenderBarGrid(e,t,r){let i=[],o=e.width/t;for(let n=0;n<=t;n++){let a=Math.round(e.left+o*n)-.5;i.push(`M${a} ${e.top} L${a} ${e.bottom}`)}this.group.appendChild(R("path",{d:i,class:r}))}RenderGrid(e,t,r=0,i){let o=[],n=e.height/t;for(let a=0;a<=t;a++){let s=Math.round(e.top+n*a)-.5;o.push(`M${e.left} ${s} L${e.right} ${s}`)}n=e.width/(r-1);for(let a=0;a<r;a++){let s=Math.round(e.left+n*a)-.5;o.push(`M${s} ${e.top} L${s} ${e.bottom}`)}this.group.appendChild(R("path",{d:o,class:i}))}MultiplyPoint(e,t){return{x:e.x*t,y:e.y*t}}AddPoints(e,t){return{x:e.x+t.x,y:e.y+t.y}}CatmullRomSpline(e,t){let r=.5;r=r/2;let i=(u,h,m)=>{let{x:f,y:p}=h,{x:_,y:b}=m;return((_-f)**2+(b-p)**2)**r+u},o=0,n=i(o,e[0],e[1]),a=i(n,e[1],e[2]),s=i(a,e[2],e[3]),l=(a-n)/t,d=[];for(let u=0;u<t;u++){let h=n+l*u,m=this.AddPoints(this.MultiplyPoint(e[0],(n-h)/(n-o)),this.MultiplyPoint(e[1],(h-o)/(n-o))),f=this.AddPoints(this.MultiplyPoint(e[1],(a-h)/(a-n)),this.MultiplyPoint(e[2],(h-n)/(a-n))),p=this.AddPoints(this.MultiplyPoint(e[2],(s-h)/(s-a)),this.MultiplyPoint(e[3],(h-a)/(s-a))),_=this.AddPoints(this.MultiplyPoint(m,(a-h)/(a-o)),this.MultiplyPoint(f,(h-o)/(a-o))),b=this.AddPoints(this.MultiplyPoint(f,(s-h)/(s-n)),this.MultiplyPoint(p,(h-n)/(s-n))),v=this.AddPoints(this.MultiplyPoint(_,(a-h)/(a-n)),this.MultiplyPoint(b,(h-n)/(a-n)));d.push(v)}return d}CatmullRomChain(e,t=30){let r=e.slice(0),i=[],o=r.length;if(o){let n=r[o-1].x-r[o-2].x,a=r[o-1].y-r[o-2].y;r.push({x:r[o-1].x+n,y:r[o-1].y+a}),r.push({x:r[o-1].x+n,y:r[o-1].y+a}),n=r[1].x-r[0].x,a=r[1].y-r[0].y,r.unshift({x:r[0].x-n,y:r[0].y-a});for(let s=0;s<r.length-4;s++){let l=r.slice(s,s+4),d=this.CatmullRomSpline(l,t);i.push(...d)}}return i}RenderDataLabels(e,t,r,i,o,n,a){let s=Math.max(t.length,r.length),l=i.max-i.min||1,d=o.max-o.min||1;for(let u=0;u<s;u++){let h=t[u],m=r[u];if(h!==void 0&&m!==void 0){let f={x:e.left+(h-i.min)/l*e.width,y:e.bottom-(m-o.min)/d*e.height},p=n[u];if(p){this.label_group.appendChild(R("circle",{class:"label-target",cx:f.x,cy:f.y,r:10}));let _=R("g",{class:"data-label",transform:`translate(${f.x+10},${f.y})`});this.label_group.appendChild(_);let b=R("circle",{cx:-10,y:0,r:5,class:`marker-highlight series-${a}`});_.appendChild(b);let v=R("text",{x:4,y:0},p);_.appendChild(v);let g=v.getBoundingClientRect(),w=g.height,x=g.width+8;x+15+f.x>=e.right&&(_.setAttribute("transform",`translate(${f.x-x-15},${f.y})`),b.setAttribute("cx",(x+15).toString()));let S=R("path",{d:`M0,5 h${x} v-${w} h-${x} Z`});_.insertBefore(S,v)}}}}RenderScatterSeries(e,t,r,i,o,n=!0,a=!1,s=!1,l=!1,d=!1,u){let h=Math.max(t.length,r.length),m=i.max-i.min||1,f=o.max-o.min||1,p=[],_=[],b=[],v=R("g",{class:u});this.group.appendChild(v);for(let g=0;g<h;g++){let w=t[g],x=r[g];typeof w>"u"||typeof x>"u"?p.push(void 0):p.push({x:e.left+(w-i.min)/m*e.width,y:e.bottom-(x-o.min)/f*e.height})}if(n){let g=[],w=d?()=>g.length===2?`${g[0].x},${g[0].y} L${g[1].x},${g[1].y}`:g.length>2?this.CatmullRomChain(g).map(S=>`${S.x},${S.y}`).join(" L"):"":()=>g.map(x=>`${x.x},${x.y}`).join(" L");for(let x of p)if(x)g.push(x);else{if(g.length>=2){let S=w();_.push("M"+S),b.push(`M${g[0].x},${e.bottom}L`+S+`L${g[g.length-1].x},${e.bottom}Z`)}g=[]}if(g.length>=2){let x=w();_.push("M"+x),b.push(`M${g[0].x},${e.bottom}L`+x+`L${g[g.length-1].x},${e.bottom}Z`)}}if(s&&v.appendChild(R("path",{d:b,class:"fill"})),n&&v.appendChild(R("path",{d:_,class:"line"})),a)for(let g of p)g&&v.appendChild(R("circle",{cx:g.x,cy:g.y,r:1,class:"point"}));if(l)for(let g of p)g&&v.appendChild(R("circle",{cx:g.x,cy:g.y,r:3,class:"marker"}))}RenderPoints(e,t,r,i){let o=[];for(let n=0;n<t.length;n++){let a=t[n]*e.width+e.left,s=e.bottom-r[n]*e.height;o.push(`M${a-1},${s-1} L${a+1},${s+1}`),o.push(`M${a-1},${s+1} L${a+1},${s-1}`)}this.group.appendChild(R("path",{d:o,class:i}))}RenderPoint(e,t,r){this.group.appendChild(R("circle",{cx:e,cy:t,r:1,class:r}))}RenderCalloutLines(e){let t=R("g",{class:"callouts"});this.label_group.appendChild(t);for(let r of e)t.appendChild(R("path",{d:`M${r.x1},${r.y1} L${r.x2},${r.y2}`,class:"callout "+(r.classes||"").trim()}))}RenderRectangle(e,t,r,i,o,n){let a="";if(t)if(t[0]&&t[0]===t[1]&&t[0]>=e.height){let l=t[0],d=t[0]-e.height,u=Math.sqrt(l*l-d*d);a=`M${e.left+e.width/2-u},${e.bottom} a${l},${l} 0 0 1 ${u*2},0 z`}else if(t[1]&&t[1]===t[2]&&t[1]>=e.width){let l=t[1],d=t[1]-e.width,u=Math.sqrt(l*l-d*d);a=`M${e.left},${e.top+e.height/2-u} a${l},${l} 0 0 1 0,${u*2} z`}else a=`M${e.left},${e.top+t[0]} a${t[0]},${t[0]} 0 0 1 ${t[0]},${-t[0]} h${e.width-t[0]-t[1]} a${t[1]},${t[1]} 0 0 1 ${t[1]},${t[1]} v${e.height-t[1]-t[2]} a${t[2]},${t[2]} 0 0 1 ${-t[2]},${t[2]} h${-e.width+t[2]+t[3]} a${t[3]},${t[3]} 0 0 1 ${-t[3]},${-t[3]} v${-e.height+t[3]+t[0]} `;else a=`M${e.left},${e.top} h${e.width} v${e.height} h${-e.width} v${-e.height} `;let s=R("path",{d:a,class:r});if(i&&(s.addEventListener("mouseenter",l=>{this.parent.setAttribute("title",i)}),s.addEventListener("mouseleave",l=>{this.parent.setAttribute("title","")})),this.group.appendChild(s),o){this.label_group.appendChild(R("path",{class:"label-target",d:a}));let l=n||{x:Math.round(e.left+e.width/2),y:Math.round(e.top-10)},d=R("g",{class:"data-label",transform:`translate(${l.x},${l.y})`});this.label_group.appendChild(d);let u=R("text",{x:0,y:0},o);d.appendChild(u);let h=u.getBoundingClientRect(),m=h.height,f=h.width+8;l.y-h.height<4&&(l.y-=l.y-h.height-4,d.setAttribute("transform",`translate(${l.x},${l.y})`)),u.setAttribute("x",Math.floor(-h.width/2).toString());let p=Math.ceil(m*.125),_=R("rect",{rx:3,x:-f/2,y:Math.round(-m+p*2/3),width:f,height:m+p});d.insertBefore(_,u)}}RenderText(e,t,r,i,o){let n=R("text",{x:i.x,y:i.y,class:o},t);switch(r){case"right":n.style.textAnchor="end";break;case"center":n.style.textAnchor="middle";break;default:n.style.textAnchor="start";break}(e||this.group).appendChild(n)}RenderDonut(e,t,r,i,o,n,a){let s=-Math.PI/2,l=0;n&&(r*=.8,i*=.7);let d=(u,h,m)=>[Math.cos(m)*h+u.x,Math.sin(m)*h+u.y];for(let u of e){let h=u.title||"",m=u.percent,f=u.index,p=[],_=0,b=d.bind(0,t,r),v=d.bind(0,t,i);if(m>.5){_=s+m/2*Math.PI*2,l=s+m*Math.PI*2;let x=_-s,S=l-_;p.push(`M${b(s)}`,`A${r},${r},${x},0,1,${b(_)}`,`A${r},${r},${S},0,1,${b(l)}`,`L${v(l)}`,`A${i},${i},${S},0,0,${v(_)}`,`A${i},${i},${x},0,0,${v(s)}`,"Z")}else{l=s+m*Math.PI*2,_=(l-s)/2+s;let x=l-s;p.push(`M${b(s)}`,`A${r},${r},${x},0,1,${b(l)}`,`L${v(l)}`,`A${i},${i},${x},0,0,${v(s)}`,"Z")}let g=R("path",{d:p,class:typeof f>"u"?void 0:`series-${f}`});typeof f<"u"&&g.setAttribute("data-index",f.toString());let w=R("g",{class:a});if(w.appendChild(g),this.group.appendChild(w),m>=.05&&h){let x=r-i;p=[];let S=d(t,i+(r-i)/2+x,_);p.push(`M${d(t,i+(r-i)/2,_)}`),p.push(`L${S}`),w.appendChild(R("path",{d:p,class:"callout"}));let k=[],A=R("text",{class:"callout-label"});w.appendChild(A);let M=_+Math.PI/2,I=h;A.textContent=I;let q=A.getBoundingClientRect(),me={width:q.width,height:q.height},[ie,C]=S;ie+=me.height/2*Math.cos(_),C+=me.height/4+me.height/2*Math.sin(_);let Y=!1;M>Math.PI?ie-me.width<=o.left&&(Y=!0):ie+me.width>o.right&&(Y=!0);let oe=/[\s-]/;if(Y&&oe.test(I)){let X=-1,K=1,Q=[];for(let U=0;U<I.length;U++)if(oe.test(I[U])){let $=Math.abs(.5-U/I.length);$<K&&(K=$,X=U)}X>0&&(k.push(I.substr(0,X+1).trim()),k.push(I.substr(X+1).trim()))}if(k.length){let X=0,K=0,Q=k.map(U=>{A.textContent=U,q=A.getBoundingClientRect();let $={width:q.width,height:q.height};return K=Math.max(K,$.width),{text:U,metrics:$}});A.textContent="";for(let U of Q){let $=R("tspan");$.textContent=U.text;let Oi=M>Math.PI?ie-(K-U.metrics.width)/2:ie+(K-U.metrics.width)/2;$.setAttribute("x",Oi.toString()),$.setAttribute("dy",X.toString()),A.appendChild($),X=U.metrics.height}}let ne=M>Math.PI?"end":"start";A.setAttribute("text-anchor",ne),A.setAttribute("x",ie.toString()),A.setAttribute("y",C.toString()),typeof f<"u"&&A.setAttribute("data-index",f.toString())}s=l}}};var G=class{static Scale(e,t,r=6.5,i,o){return Br(e,t,r,i,o)}static Range(e){let t,r;for(let o of e)typeof o>"u"||((typeof t>"u"||t>o)&&(t=o),(typeof r>"u"||r<o)&&(r=o));let i=typeof t>"u"||typeof r>"u"?0:r-t;return{min:t,max:r,range:i}}static ApplyScale(e,t,r){return t*(e-r.min)/(r.max-r.min)}static Flatten(e){let t=[];if(Array.isArray(e))for(let r of e)Array.isArray(r)?t=t.concat(this.Flatten(r)):t.push(r);else typeof e<"u"&&t.push(e);return t}};var Lr="#,##0.00",ct=class{constructor(e=new Kt){this.renderer=e}static functions_registered=!1;chart_data={type:"null"};margin={top:.025,left:.05,bottom:.025,right:.075};Initialize(e){this.renderer.Initialize(e)}Exec(e,t){let r=t?.value||[];switch(e.toLowerCase()){case"column.chart":this.CreateColumnChart(r,"column");break;case"bar.chart":this.CreateColumnChart(r,"bar");break;case"line.chart":this.CreateLineChart(r,"line");break;case"area.chart":this.CreateLineChart(r,"area");break;case"donut.chart":case"pie.chart":this.CreateDonut(r,e.toLowerCase()==="pie.chart");break;case"scatter.plot":this.CreateScatterChart(r,"plot");break;case"scatter.line":this.CreateScatterChart(r,"line");break;default:this.Clear();break}}Clear(){this.chart_data={type:"null"}}CreateColumnChart(e,t){let r=this.TransformSeriesData(e[0]),i=this.CommonData(r),o;if(e[1]){o=(e[1].type===8?G.Flatten(e[1].value):G.Flatten(e[1])).map(d=>d?d.type===5&&d.value.type==="metadata"?typeof d.value.value=="number"?D.Get(d.value.format||Lr).Format(d.value.value):d.value.value:typeof d.value=="number"?D.Get(d.format||Lr).Format(d.value):d.value:"");let l=r.reduce((d,u)=>Math.max(d,u.y.data.length),0);for(l<o.length&&(o=o.slice(0,l));l>o.length;)o.push("")}let n=e[2]?.toString()||void 0,a=e[3]?.toString()||void 0;if(this.chart_data={type:t,legend:i.legend,legend_style:1,series2:r,scale:i.y.scale,title:n,y_labels:t==="bar"?o:i.y.labels,x_labels:t==="bar"?i.y.labels:o},a){this.chart_data.round=/round/i.test(a),this.chart_data.data_labels=/labels/i.test(a);let s=a.match(/labels="(.*?)"/);s&&r?this.ApplyLabels(r,s[1],o):(s=a.match(/labels=([^\s\r\n,]+)(?:\W|$)/),s&&r&&this.ApplyLabels(r,s[1],o)),s=a.match(/class=([\w_-]+)(?:\W|$)/),s&&(this.chart_data.class_name=s[1])}}ReadSeries(e){let t={x:{data:[]},y:{data:[]}};if(e[3]&&typeof e[3]=="number"&&(t.index=e[3]),e[4]&&(t.subtype=e[4].toString()),e[0]){let r=G.Flatten(e[0]);typeof r[0]=="object"?t.label=r[0]?.value?.toString()||"":t.label=r[0].toString()}if(e[2]&&typeof e[2]=="object"&&e[2].type===8){let r=G.Flatten(e[2].value);if(t.y.data=r.map(i=>typeof i.value.value=="number"?i.value.value:void 0),r[0].value?.format){t.y.format=r[0].value?.format;let i=D.Get(t.y.format);t.y.labels=t.y.data.map(o=>o===void 0?void 0:i.Format(o))}}if(e[1]&&typeof e[1]=="object"&&e[1].type===8){let r=G.Flatten(e[1].value);t.x.data=r.map(i=>typeof i.value.value=="number"?i.value.value:void 0),r[0].value.format&&(t.x.format=r[0].value.format)}for(let r of[t.x,t.y])if(r.data.length){let i=r.data.filter(o=>o||o===0);r.range={min:Math.min.apply(0,i),max:Math.max.apply(0,i)}}return t}ArrayToSeries(e){let t={x:{data:[]},y:{data:[]}},r=G.Flatten(e.value);if(t.y.data=r.map((o,n)=>typeof o.value=="number"?o.value:typeof o.value.value?.real=="number"?(t.x.data[n]=o.value.value.real,o.value.value.imaginary):typeof o.value.value=="number"?o.value.value:void 0),r[0].value.format){t.y.format=r[0].value.format||"";let o=D.Get(t.y.format||"");t.y.labels=t.y.data.map(n=>n===void 0?void 0:o.Format(n))}let i=t.y.data.filter(o=>o||o===0);if(t.y.range={min:Math.min.apply(0,i),max:Math.max.apply(0,i)},t.x.data.length){let o=t.x.data.filter(n=>typeof n=="number");if(t.x.range={min:Math.min.apply(0,o),max:Math.max.apply(0,o)},r[0].value.format){t.x.format=r[0].value.format||"";let n=D.Get(t.x.format||"");t.x.labels=t.x.data.map(a=>a===void 0?void 0:n.Format(a))}}return t}TransformSeriesData(e,t){if(!e)return[];let r=[];if(e.type===5){if(e.key==="group"){if(Array.isArray(e.value)){for(let n of e.value)if(n&&typeof n=="object")if(n.key==="series"){let a=this.ReadSeries(n.value);r.push(a)}else n.type===8&&r.push(this.ArrayToSeries(n))}}else if(e.key==="series"){let n=this.ReadSeries(e.value);r.push(n)}}else e.type===8&&r.push(this.ArrayToSeries(e));let i,o=0;if(t?.type===8){let n=G.Flatten(t.value),a="0.00###";n[0]&&n[0].type===5&&(a=n[0].value.format);let s=n.map(d=>{if(d.type===3)return d.value;if(d.type===5)return d.value.value}),l=s.filter(d=>typeof d=="number");i={data:s,format:a,range:{min:Math.min.apply(0,l),max:Math.max.apply(0,l)}}}for(let n of r)o=Math.max(o,n.y.data.length),n.x.data.length&&(i||(i=n.x));if(!i){i={data:[],range:{min:0,max:Math.max(0,o-1)}};for(let n=0;n<o;n++)i.data.push(n)}for(let n of r)n.x.data.length||(n.x=i);return r}CommonData(e,t,r){let i="",o="";for(let b of e)b.y.format&&!o&&(o=b.y.format),b.x.format&&!i&&(i=b.x.format);let n;e.some(b=>b.label&&b.label.length>0)&&(n=e.map((b,v)=>({label:b.label||`Series ${v+1}`,index:typeof b.index=="number"?b.index:v+1})));let a=e.filter(b=>b.x.range),s=Math.min.apply(0,a.map(b=>b.x.range?.min||0)),l=Math.max.apply(0,a.map(b=>b.x.range?.max||0)),d=e.filter(b=>b.y.range),u=Math.min.apply(0,a.map(b=>b.y.range?.min||0)),h=Math.max.apply(0,a.map(b=>b.y.range?.max||0));typeof t<"u"&&(u=Math.min(u,t)),typeof r<"u"&&(h=Math.max(h,r));let m=G.Scale(s,l,7),f=G.Scale(u,h,7),p,_;if(i){p=[];let b=D.Get(i);for(let v=0;v<=m.count;v++)p.push(b.Format(m.min+v*m.step))}if(o){_=[];let b=D.Get(o);for(let v=0;v<=f.count;v++)_.push(b.Format(f.min+v*f.step))}return{x:{format:i,scale:m,labels:p},y:{format:o,scale:f,labels:_},legend:n}}CreateScatterChart(e,t="plot"){let r=this.TransformSeriesData(e[0]),i=this.CommonData(r),o=e[1]?.toString()||void 0,n=e[2]?.toString()||void 0;if(this.chart_data={legend:i.legend,style:t,type:"scatter2",series:r,title:o,x_scale:i.x.scale,x_labels:i.x.labels,y_scale:i.y.scale,y_labels:i.y.labels,lines:t==="line",points:t==="plot"},n){this.chart_data.markers=/marker/i.test(n),this.chart_data.smooth=/smooth/i.test(n),this.chart_data.data_labels=/labels/i.test(n);let a=n.match(/labels="(.*?)"/);a&&this.chart_data.series?this.ApplyLabels(this.chart_data.series,a[1]):(a=n.match(/labels=([^\s\r\n,]+)(?:\W|$)/),a&&this.chart_data.series&&this.ApplyLabels(this.chart_data.series,a[1])),a=n.match(/class=([\w_-]+)(?:\W|$)/),a&&(this.chart_data.class_name=a[1])}}ApplyLabels(e,t,r){for(let i of e){let o={x:D.Get(i.x.format||""),y:D.Get(i.y.format||"")};i.y.labels=[];for(let n=0;n<i.y.data.length;n++){let a=r?r[n]:typeof i.x.data[n]=="number"?o.x.Format(i.x.data[n]):"",s=typeof i.y.data[n]=="number"?o.y.Format(i.y.data[n]):"";i.y.labels[n]=t.replace(/\bx\b/g,a).replace(/\by\b/g,s)}}}CreateLineChart(e,t){let r=this.TransformSeriesData(e[0],e[1]),i=this.CommonData(r,0,0),o=e[2]?.toString()||void 0,n=e[3]?.toString()||void 0;if(this.chart_data={legend:i.legend,type:"scatter2",series:r,title:o,x_scale:i.x.scale,x_labels:i.x.labels,y_scale:i.y.scale,y_labels:i.y.labels,lines:!0,filled:t==="area"},n){this.chart_data.smooth=/smooth/i.test(n);let a=n.match(/class=([\w_-]+)(?:\W|$)/);a&&(this.chart_data.class_name=a[1])}}CreateDonut(e,t=!1){let r=e[0]?.type===8?e[0].value:e[0],i=G.Flatten(r),o=i.map(b=>typeof b.value.value=="number"?b.value.value:void 0),n=e[1]?.type===8?e[1].value:e[1],a=G.Flatten(n).map(b=>{if(b&&typeof b=="object"){let v=b.value?.value;return typeof v=="number"&&b.value?.format?D.Get(b.value?.format).Format(v):v?v.toString():""}else return b?b.toString():""});o=o.map(b=>b<0?(console.warn("pie/donut chart does not support negative values (omitted)"),0):b);let s=e[2]||"",l=0,d=o.map((b,v)=>(typeof b<"u"&&(l+=b),{value:b,label:a[v]||"",index:v+1,percent:0}));if(l)for(let b of d)b.percent=(b.value||0)/l;let u=i.length&&i[0].value?.format?i[0].value.format:"",h=D.Get(u||Lr),m=D.Get("percent");typeof e[4]>"u"&&e[1]&&(e[4]="label");let f=e[4]||"";if(f)for(let b of d){let v=h.Format(b.value||0),g=m.Format(b.percent);b.title=f.replace(/value%/ig,m.Format(b.value||0)).replace(/value/ig,v).replace(/percent/ig,g).replace(/label/ig,b.label||"").trim()}let p=(e[3]||"").toString().trim(),_=p.toUpperCase();if(_==="ASC"||_==="ASCENDING"||_==="INC")d.sort((b,v)=>(b.value||0)-(v.value||0));else if(_==="DESC"||_==="DESCENDING"||_==="DEC")d.sort((b,v)=>(v.value||0)-(b.value||0));else{let b=p.match(/sort=([\w]+)(?:\W|$)/i);b&&(_=b[1],/^(asc|inc)/i.test(_)?d.sort((v,g)=>(v.value||0)-(g.value||0)):/^(desc|dec)/i.test(_)&&d.sort((v,g)=>(g.value||0)-(v.value||0)))}if(this.chart_data={type:t?"pie":"donut",slices:d,title:s},p){let b=p.match(/class=([_-\w]+)(?:\W|$)/);b&&(this.chart_data.class_name=b[1])}}Resize(){this.renderer.Resize()}Update(){this.renderer.Resize(),this.renderer.Prerender(),this.renderer.Clear(this.chart_data.class_name);let e=new Re(0,0,this.renderer.size.width,this.renderer.size.height),t={top:Math.round(e.height)*this.margin.top,bottom:Math.round(e.height)*this.margin.bottom,left:Math.round(e.width)*this.margin.left,right:Math.round(e.width)*this.margin.right},r=this.chart_data.title;if(r&&this.renderer.RenderTitle(r,e,t.top,this.chart_data.title_layout||"top"),e.top+=t.top,e.left+=t.left,e.bottom-=t.bottom,e.right-=t.right,this.chart_data.legend&&this.chart_data.legend.length){let i=0;this.chart_data.title&&(!this.chart_data.title_layout||this.chart_data.title_layout==="top")&&(i=1);let o=this.chart_data.legend_position||i;this.renderer.Legend({labels:this.chart_data.legend,position:o,style:this.chart_data.legend_style,layout:o===0||o===1?0:1,area:e})}if(this.chart_data.type==="histogram"||this.chart_data.type==="line"||this.chart_data.type==="area"||this.chart_data.type==="column"||this.chart_data.type==="histogram2"||this.chart_data.type==="bar"||this.chart_data.type==="scatter2"){let i=[],o=0;if(this.chart_data.x_labels&&this.chart_data.x_labels.length&&(i=this.chart_data.x_labels.map(n=>{let a=this.renderer.MeasureText(n,["axis-label","x-axis-label"],!0);return o=Math.max(o,a.height),a})),this.chart_data.y_labels&&this.chart_data.y_labels.length){let n=[],a=0,s=0,l=this.chart_data.type==="scatter2"?this.chart_data.y_scale:this.chart_data.scale,d=this.chart_data.type==="bar"?this.chart_data.y_labels.length:l.count+1;for(let u=0;u<d;u++){let h=this.renderer.MeasureText(this.chart_data.y_labels[u],["axis-label","y-axis-label"]);n.push({label:this.chart_data.y_labels[u],metrics:h}),a=Math.max(a,h.width),s=Math.max(s,h.height)}e.bottom=Math.round(e.bottom-s/2),e.top=Math.round(e.top+s/2),i.length&&(e.bottom-=o+t.bottom),this.chart_data.type==="bar"?this.renderer.RenderYAxisBar(e,e.left+a,n,["axis-label","y-axis-label"]):this.renderer.RenderYAxis(e,e.left+a,n,["axis-label","y-axis-label"]),e.left+=a+t.left}if(i.length&&this.chart_data.x_labels&&this.chart_data.x_labels.length){let n=this.chart_data.type==="histogram2",a=this.chart_data.type!=="line"&&this.chart_data.type!=="area"&&this.chart_data.type!=="bar"&&this.chart_data.type!=="scatter2"&&this.chart_data.type!=="histogram2";n&&this.renderer.RenderXAxisTicks(e,a,this.chart_data.x_labels.length),this.chart_data.y_labels&&(e.bottom+=o+t.bottom),this.renderer.RenderXAxis(e,a,this.chart_data.x_labels,i,["axis-label","x-axis-label"]),e.bottom-=o+t.bottom}}switch(this.chart_data.type){case"scatter":this.renderer.RenderPoints(e,this.chart_data.x,this.chart_data.y,"mc mc-correlation series-1");break;case"scatter2":if(this.renderer.RenderGrid(e,this.chart_data.y_scale.count,this.chart_data.x_scale.count+1,"chart-grid"),this.chart_data.series){for(let i=0;i<this.chart_data.series.length;i++){let o=this.chart_data.series[i],n=!!this.chart_data.lines,a=!!this.chart_data.points;o.subtype==="plot"?(a=!0,n=!1):o.subtype==="line"&&(a=!1,n=!0);let s=typeof o.index=="number"?o.index:i+1;this.renderer.RenderScatterSeries(e,o.x.data,o.y.data,this.chart_data.x_scale,this.chart_data.y_scale,n,a,!!this.chart_data.filled,!!this.chart_data.markers,!!this.chart_data.smooth,`scatter-plot series-${s}`)}if(this.chart_data.data_labels)for(let i=0;i<this.chart_data.series.length;i++){let o=this.chart_data.series[i];o.y.labels&&this.renderer.RenderDataLabels(e,o.x.data,o.y.data,this.chart_data.x_scale,this.chart_data.y_scale,o.y.labels,i+1)}}break;case"pie":case"donut":{let i=Math.min(e.height,e.width)/2*.9,o=this.chart_data.type==="pie"?0:i*.8;this.renderer.RenderDonut(this.chart_data.slices,e.center,i,o,e,!0,"donut")}break;case"line":case"area":{let i=this.chart_data.scale;if(this.chart_data.series){let o=this.chart_data.x_scale?this.chart_data.x_scale.max:Math.max.apply(0,this.chart_data.series.map(s=>s.length)),n=this.chart_data.smooth?this.renderer.RenderSmoothLine:this.renderer.RenderLine;this.renderer.RenderGrid(e,this.chart_data.scale.count,this.chart_data.x_scale?this.chart_data.x_scale.count+1:o,"chart-grid");let a=0;for(let s of this.chart_data.series){let l=s.map(u=>{if(!(typeof u>"u"))return G.ApplyScale(u,e.height,i)});if(l.length<o)for(let u=l.length;u<o;u++)l.push(void 0);let d=[this.chart_data.type==="area"?"chart-area":"chart-line",`series-${a+1}`];n.call(this.renderer,e,l,this.chart_data.type==="area",this.chart_data.titles,d),a++}}}break;case"bar":{let i;if(this.renderer.RenderBarGrid(e,this.chart_data.scale.count,"chart-grid"),this.chart_data.series2){let o=0,n=this.chart_data.series2.length;for(let h of this.chart_data.series2)o=Math.max(o,h.y.data.length);let a=e.height/o,s=.7;typeof this.chart_data.space=="number"&&(s=Math.max(0,Math.min(1,1-this.chart_data.space)));let l=a*(1-s)/2,d=(a-l*2)/n,u=0;if(this.chart_data.scale.min<0&&(u=G.ApplyScale(0,e.width,this.chart_data.scale)),this.chart_data.round){let h=Math.floor(d/2);i=[0,h,h,0]}for(let h=0;h<n;h++){let m=this.chart_data.series2[h],f=typeof m.index=="number"?m.index:h+1;for(let p=0;p<m.y.data.length;p++){let _=m.y.data[p];if(typeof _=="number"){let b=Math.round(e.top+p*a+l)+h*d,v=0,g=0,w=!1;u?_>0?(g=G.ApplyScale(_+this.chart_data.scale.min,e.width,this.chart_data.scale),v=e.left+u):(g=G.ApplyScale(this.chart_data.scale.min-_,e.width,this.chart_data.scale),v=e.left+u-g,w=!0):(g=G.ApplyScale(_,e.width,this.chart_data.scale),v=e.left);let x=void 0;g&&this.renderer.RenderRectangle(new Re(v,b,v+g,b+d),i,["chart-column",`series-${f}`],x||void 0)}}}}}break;case"column":case"histogram2":if(this.renderer.RenderGrid(e,this.chart_data.scale.count,0,"chart-grid"),this.chart_data.series2){let i=0,o=this.chart_data.series2.length;for(let h of this.chart_data.series2)i=Math.max(i,h.y.data.length);let n=e.width/i,a=.7;typeof this.chart_data.space=="number"&&(a=Math.max(0,Math.min(1,1-this.chart_data.space)));let s=n*(1-a)/2,l=(n-s*2)/o,d=0;if(this.chart_data.scale.min<0&&(d=G.ApplyScale(0,e.height,this.chart_data.scale)),this.chart_data.callouts&&this.chart_data.x_scale){let h=this.chart_data.x_scale,m=this.chart_data.callouts.map((f,p)=>{let _=Math.round(e.left+G.ApplyScale(f.value,e.width,h))+.5;return{x1:_,y1:e.bottom-e.height,x2:_,y2:e.bottom,classes:`callout-${p+1}`}});this.renderer.RenderCalloutLines(m)}let u;if(this.chart_data.round){let h=Math.floor(l/2);u=[h,h,0,0]}for(let h=0;h<o;h++){let m=this.chart_data.series2[h],f=typeof m.index=="number"?m.index:h+1;for(let p=0;p<m.y.data.length;p++){let _=m.y.data[p];if(typeof _=="number"){let b=e.left+p*n+s+h*l,v=0,g=0,w=!1;d?_>0?(v=G.ApplyScale(_+this.chart_data.scale.min,e.height,this.chart_data.scale),g=e.bottom-v-d):(v=G.ApplyScale(this.chart_data.scale.min-_,e.height,this.chart_data.scale),g=e.bottom-d,w=!0):(v=G.ApplyScale(_,e.height,this.chart_data.scale),g=e.bottom-v);let x=void 0;if(v){let S=this.chart_data.data_labels&&m.y.labels?m.y.labels[p]:"",k={x:Math.round(b+l/2),y:Math.round(g-10)};this.renderer.RenderRectangle(new Re(b,g,b+l,g+v),u,["chart-column",`series-${f}`],x||void 0,S,k)}}}}}break;case"histogram":{this.renderer.RenderGrid(e,this.chart_data.scale.count,0,"chart-grid");let i=e.width/this.chart_data.count,o=this.chart_data.column_width,n=i*(1-o)/2;for(let a=0;a<this.chart_data.count;a++){let s=Math.round(e.left+a*i+n),l=i-n*2,d=G.ApplyScale(this.chart_data.bins[a],e.height,this.chart_data.scale),u=e.bottom-d,h=this.chart_data.titles?this.chart_data.titles[a]:void 0;this.renderer.RenderRectangle(new Re(s,u,s+l,u+d),void 0,"chart-column series-1",h||void 0)}}break}}IsCellData(e){return typeof e=="object"&&typeof e.address=="object"&&typeof e.address.row=="number"&&typeof e.address.column=="number"}};var Ue=(...c)=>({type:5,value:c,key:"arguments"}),Ir={Group:{arguments:[{name:"Array...",metadata:!0}],fn:(...c)=>({type:5,value:c,key:"group"})},Series:{arguments:[{name:"Label"},{name:"X",metadata:!0},{name:"Y",metadata:!0},{name:"index"},{name:"subtype"}],fn:(...c)=>({type:5,value:c,key:"series"})},"Bar.Chart":{arguments:[{name:"Data",metadata:!0},{name:"Categories",metadata:!0},{name:"ChartTitle"}],fn:Ue},"Line.Chart":{arguments:[{name:"y",metadata:!0},{name:"x",metadata:!0},{name:"ChartTitle"}],fn:Ue},"Area.Chart":{arguments:[{name:"y",metadata:!0},{name:"x",metadata:!0},{name:"ChartTitle"}],fn:Ue},"Pie.Chart":{arguments:[{name:"Values",metadata:!0},{name:"Labels"},{name:"Title"},{name:"Sort"},{name:"Label"}],fn:Ue},"Donut.Chart":{arguments:[{name:"Values",metadata:!0},{name:"Labels",metadata:!0},{name:"Title"},{name:"Sort"},{name:"Label"}],fn:Ue},"Scatter.Line":{arguments:[{name:"Data",metadata:!0},{name:"ChartTitle"}],fn:Ue},"Scatter.Plot":{arguments:[{name:"Data",metadata:!0},{name:"ChartTitle"}],fn:Ue},"Column.Chart":{arguments:[{name:"Data",metadata:!0},{name:"Categories",metadata:!0},{name:"Chart Title"}],fn:Ue}};var Zt=class c{static treb_base_path="";static treb_embedded_script_path="";static one_time_warnings={};DOM=F.GetInstance();loaded=!1;document_styles={number_formats:[],colors:[],theme_colors:[]};selection_state={};options;get Localization(){return z}language_model;events=new se;calculation=0;file_version=0;last_save_version=0;initial_load_source=void 0;calculator;grid;model;dialog;spinner;file_chooser;file_chooser_operation=0;get parser(){return this.model.parser}view;key_listener;views=[];focus_target=this;parent_view;export_worker;undo_pointer=0;undo_stack=[];last_selection;get modified(){return this.undo_stack.length!==1}get document_name(){return this.grid.model.document_name}set document_name(e){this.grid.model.document_name=e,this.DocumentChange()}get user_data(){return this.grid.model.user_data}set user_data(e){this.grid.model.user_data=e,this.DocumentChange()}get scale(){return this.grid.scale}set scale(e){this.grid.scale=e}get headless(){return this.grid.headless}set headless(e){this.grid.headless!==e&&(this.grid.headless=e,e||(this.grid.Update(!0),this.RebuildAllAnnotations()))}get state(){return this.file_version}get can_revert(){return!this.options.inline_document&&!this.options.document?!1:this.initial_load_source==="local-storage"?!0:this.dirty}get dirty(){return this.file_version!==this.last_save_version}get sheet_names(){return this.model.sheets.list.map(e=>e.name)}constructor(e){e.storage_key&&!e.local_storage&&(e.local_storage=e.storage_key),this.options={...Fi,...e,local_storage:this.ResolveStorageKey(e.local_storage,"document")},typeof this.options.imaginary_value=="string"&&(te.imaginary_character=this.options.imaginary_value),this.options.network_document&&(console.warn("the option `network_document` is deprecated. please use `document` instead."),this.options.document||(this.options.document=this.options.network_document)),this.options.document&&this.options.inline_document&&console.warn("both document and inline-document are provided");let t=this.options.document,r,i;this.options.local_storage&&!this.options.toll_initial_load&&!e.model&&(r=localStorage.getItem(this.options.local_storage)||void 0,r&&(i="local-storage")),!r&&!this.options.toll_initial_load&&!e.model&&e.inline_document&&(r=e.inline_document,i="inline-document"),this.options.local_storage&&!e.model&&window.addEventListener("visibilitychange",a=>{document.visibilityState==="hidden"&&this.options.local_storage&&this.dirty&&this.SaveLocalStorage(this.options.local_storage)});let o;typeof this.options.container=="string"?o=document.querySelector(this.options.container):this.options.container&&(o=this.options.container);let n={insert_function_button:!1,in_cell_editor:!0,repaint_on_cell_change:!1,scrollbars:this.options.scrollbars,markdown:!!this.options.markdown,formula_bar:this.options.formula_bar,expand_formula_button:this.options.expand_formula_button,tab_bar:this.options.tab_bar,add_tab:this.options.add_tab,expand:this.options.expand};if(this.options.scale&&(n.initial_scale=this.options.scale),this.options.stats&&(n.stats=this.options.stats,n.tab_bar=!0),this.options.scale_control&&(n.scale_control=!0,n.tab_bar=!0,this.options.persist_scale&&(n.persist_scale_key=this.ResolveStorageKey(this.options.persist_scale,"scale"),n.persist_scale_key))){let a=localStorage.getItem(n.persist_scale_key);if(a)try{let s=JSON.parse(a);n.initial_scale=s.scale||1}catch{console.warn("parsing persisted scale failed")}}if(e.model?(this.model=e.model.model,this.calculator=e.model.calculator,this.DOM=e.model.DOM):(this.model=new nt,this.model.sheets.Add(W.Blank(this.model.theme_style_properties)),this.calculator=this.CreateCalculator(this.model,e)),o&&(this.DOM=F.GetInstance(o.ownerDocument)),this.grid=new it(n,this.model,void 0,!!o,this.DOM),this.options.headless&&(this.grid.headless=!0),o){this.DOM=F.GetInstance(o.ownerDocument),this.parent_view||(re.is_windows?o.parentElement?.classList.add("treb-ua-windows"):re.is_mac&&o.parentElement?.classList.add("treb-ua-osx"));let a=o.querySelector(".treb-view-template");this.view=a.content.firstElementChild?.cloneNode(!0),o.prepend(this.view),this.view.addEventListener("focusin",()=>{this.focus_target!==this&&(this.Publish({type:"focus-view"}),this.focus_target=this)}),this.key_listener=l=>this.HandleKeyDown(l),o.addEventListener("keydown",this.key_listener);let s=!!(r||this.options.document);this.grid.Initialize(this.view,s),this.options.dnd&&(this.view.addEventListener("dragenter",l=>this.HandleDrag(l)),this.view.addEventListener("dragover",l=>this.HandleDrag(l)),this.view.addEventListener("drop",l=>this.HandleDrop(l))),this.grid.grid_events.Subscribe(l=>{switch(l.type){case"error":this.dialog?.ShowDialog({type:"error",...this.TranslateGridError(l.code),timeout:3e3,close_box:!0});break;case"selection":this.UpdateSelection(l.selection),this.UpdateSelectionStyle(l.selection);break;case"sheet-change":this.OnSheetChange(l),this.UpdateSelectionStyle();break;case"data":{let d=this.last_selection;(this.calculation===0?this.Recalculate(l):Promise.resolve()).then(()=>{this.DocumentChange(d)})}break;case"style":this.DocumentChange(),this.UpdateDocumentStyles(!1),this.UpdateSelectionStyle();break;case"scale":this.RebuildAllAnnotations(),this.events.Publish({type:"view-change"});break;case"annotation":if(l.annotation){let d=l.annotation.view[this.grid.view_index]||{};switch(this.DocumentChange(),l.event){case"create":this.InflateAnnotation(l.annotation),this.calculator.UpdateAnnotations(l.annotation,this.grid.active_sheet),this.grid.AnnotationUpdated(l.annotation);break;case"delete":this.calculator.RemoveAnnotation(l.annotation);break;case"update":d.update_callback?(d.update_callback(),this.grid.AnnotationUpdated(l.annotation)):console.info("annotation update event without update callback"),this.calculator.UpdateAnnotations(l.annotation,this.grid.active_sheet);break;case"resize":d.resize_callback&&(d.resize_callback(),this.grid.AnnotationUpdated(l.annotation));break}}else console.info("annotation event without annotation");break;case"structure":{let d=this.last_selection;l.rebuild_required?(this.calculator.Reset(),(this.calculation===0?this.Recalculate(l):Promise.resolve()).then(()=>{this.DocumentChange(d)})):this.DocumentChange(d)}this.UpdateSelectionStyle();break;case"cell-event":this.HandleCellEvent(l);break}}),this.options.prompt_save&&window.addEventListener("beforeunload",l=>{this.last_save_version!==this.file_version&&(l.preventDefault(),l.returnValue="")})}else c.one_time_warnings.headless||(c.one_time_warnings.headless=!0,console.info("not initializing layout; don't call UI functions"));if(r?(typeof r=="string"&&(r=JSON.parse(r)),r?this.LoadDocument(r,{recalculate:!!this.options.recalculate,source:i}):this.UpdateDocumentStyles()):t||(this.calculator.RebuildClean(!0),this.UpdateDocumentStyles()),this.FlushUndo(),this.grid.ShowHeaders(this.options.headers),this.options.scroll&&!this.options.document){let a=this.options.scroll;requestAnimationFrame(()=>{this.ScrollTo(a)})}this.UpdateAC(),this.options.global_name&&(self[this.options.global_name]=this),o&&this.options.spinner&&(this.spinner=new Xt(o)),t&&!e.model&&!r&&this.LoadNetworkDocument(t,this.options),o&&(this.dialog=new Wt(o))}UpdateAC(){let e=this.calculator.SupportedFunctions();if(this.language_model){let t={};for(let r of this.language_model.functions||[])t[r.base.toUpperCase()]=r;e=e.map(r=>t[r.name.toUpperCase()]||r)}this.grid.SetAutocompleteFunctions(e)}CreateCalculator(e,t){return new Jt(e,{complex_numbers:t.complex})}TranslateGridError(e){switch(e){case 0:return{message:"No error"};case 2:return{message:"You can't change part of an array"};case 5:return{message:"Invalid area for paste"};case 4:return{message:"Invalid area for table"};case 3:return{message:"Invalid value (data validation)"};default:return{message:`Unknown error (${e})`}}}CreateView(){let e=new c({...this.options,global_name:void 0,model:this});return e.parent_view=this,e}Unsplit(){let e=this.views.pop();if(e){let t=e.view;t.grid.grid_events.CancelAll(),t.events.CancelAll(),t.view?.parentElement&&(t.key_listener&&t.view.parentElement.removeEventListener("keydown",t.key_listener),t.view.parentElement.removeChild(t.view)),this.view?.focus(),this.Resize()}}ExternalEditor(e){this.grid.ExternalEditor(e)}Split(){let e=this.CreateView();e.grid.EnsureActiveSheet(!0),e.view?.addEventListener("focusin",()=>{this.focus_target!==e&&(this.Publish({type:"focus-view"}),this.focus_target=e)}),e.grid.grid_events.Subscribe(r=>{r.type==="structure"&&(this.grid.EnsureActiveSheet(),this.grid.UpdateLayout(),this.grid.tab_bar?.Update())}),e.Subscribe(r=>{switch(r.type){case"selection":break;default:e.UpdateAnnotations(),this.grid.Update(!0)}}),this.grid.grid_events.Subscribe(r=>{r.type==="structure"&&(e.grid.EnsureActiveSheet(),e.grid.UpdateLayout(),e.grid.tab_bar?.Update())});let t=this.Subscribe(r=>{switch(r.type){case"selection":break;case"load":case"reset":e.grid.EnsureActiveSheet(!0),e.UpdateAnnotations(),e.grid.Update(!0);break;default:e.UpdateAnnotations(),e.grid.Update(!0)}});this.views.push({view:e,subscription:t})}ListConditionalFormats(e){return(typeof e>"u"?this.grid.active_sheet:this.model.sheets.Find(e))?.conditional_formats||[]}ConditionalFormatDuplicateValues(e,t){if(e===void 0){let r=this.GetSelectionReference();if(r.empty)throw new Error("invalid range (no selection)");e=r.area}return this.AddConditionalFormat({type:"duplicate-values",area:this.model.ResolveArea(e,this.grid.active_sheet),...t})}ConditionalFormatGradient(e,t){if(e===void 0){let o=this.GetSelectionReference();if(o.empty)throw new Error("invalid range (no selection)");e=o.area}let r=this.model.ResolveArea(e,this.grid.active_sheet),i=typeof t=="object"?{type:"gradient",area:r,...t}:{type:"gradient",area:r,...ui[t]};return this.AddConditionalFormat(i),i}ConditionalFormatCellMatch(e,t){if(e===void 0){let o=this.GetSelectionReference();if(o.empty)throw new Error("invalid range (no selection)");e=o.area}let i={type:"cell-match",area:this.model.ResolveArea(e,this.grid.active_sheet),...t};return this.AddConditionalFormat(i),i}ConditionalFormatExpression(e,t){if(e===void 0){let o=this.GetSelectionReference();if(o.empty)throw new Error("invalid range (no selection)");e=o.area}let i={type:"expression",area:this.model.ResolveArea(e,this.grid.active_sheet),...t};return this.AddConditionalFormat(i),i}AddConditionalFormat(e){let t=this.model.sheets.Find(e.area.start.sheet_id||0);if(!t)throw new Error("invalid reference in format");return t.conditional_formats.push(e),this.calculator.UpdateConditionals(e,t),this.ApplyConditionalFormats(t,t===this.grid.active_sheet),this.PushUndo(),e}RemoveConditionalFormat(e){let t=e.area,r=t.start.sheet_id?this.model.sheets.Find(t.start.sheet_id):this.grid.active_sheet;if(!r)throw new Error("invalid reference in format");let i=0;r.conditional_formats=r.conditional_formats.filter(o=>o===e?(i++,this.calculator.RemoveConditional(o),!1):!0),i&&r.FlushConditionalFormats(),this.ApplyConditionalFormats(r,!1),r===this.grid.active_sheet&&this.grid.Update(!0),i&&this.PushUndo()}RemoveConditionalFormats(e){if(e===void 0){let i=this.GetSelectionReference();if(i.empty)throw new Error("invalid range (no selection)");e=i.area}let t=this.model.ResolveArea(e,this.grid.active_sheet),r=t.start.sheet_id?this.model.sheets.Find(t.start.sheet_id):this.grid.active_sheet;if(r){let i=0;r.conditional_formats=r.conditional_formats.filter(o=>new y(o.area.start,o.area.end).Intersects(t)?(i++,this.calculator.RemoveConditional(o),!1):!0),i&&(r.FlushConditionalFormats(),this.ApplyConditionalFormats(r,!1),r===this.grid.active_sheet&&this.grid.Update(!0),this.PushUndo())}}HandleToolbarMessage(e){if(this.focus_target!==this){this.focus_target.HandleToolbarMessage(e);return}let t={},r=i=>{let o=this.grid.GetSelection();if(o&&!o.empty){let n=o.area.spreadsheet_label;this.InsertAnnotation(`=${i}(${n},,"${n}")`,void 0,void 0,",")}};if(/^border-/.test(e.command))if(e.command==="border-color")try{t.border_top_fill=t.border_bottom_fill=t.border_left_fill=t.border_right_fill=e.color||{}}catch(i){console.error(i)}else{let i=1,o=e.command.substring(7);e.command==="border-double-bottom"&&(o="bottom",i=2),this.grid.ApplyBorders2(void 0,o,e.color||{},i)}else switch(e.command){case"about":this.About();break;case"number-format":t.number_format=e.format||"General";break;case"font-scale":{let i=this.grid.GetSelection(),o=this.grid.active_sheet.RealArea(i.area),n=Number(e.scale||1);if(n&&!isNaN(n)){this.grid.ApplyStyle(void 0,{font_size:{unit:"em",value:n}},!0);let a=[];for(let s=o.start.row;s<=o.end.row;s++)a.push(s);this.selection_state?.merge||this.grid.SetRowHeight(a,void 0,!1)}}break;case"update-comment":this.SetNote(void 0,e.comment||"");break;case"clear-comment":this.SetNote(void 0,"");break;case"text-color":case"fill-color":try{let i=e.color||{};e.command==="text-color"?t.text=i:e.command==="fill-color"&&(t.fill=i)}catch(i){console.error(i)}break;case"insert-table":this.InsertTable();break;case"remove-table":this.RemoveTable();break;case"insert-row":this.InsertRows();break;case"insert-column":this.InsertColumns();break;case"delete-row":this.DeleteRows();break;case"delete-column":this.DeleteColumns();break;case"insert-sheet":this.grid.InsertSheet();break;case"delete-sheet":this.grid.DeleteSheet();break;case"freeze-panes":{let i=this.grid.GetFreeze();i.rows||i.columns?this.Freeze(0,0):this.FreezeSelection()}break;case"insert-image":this.InsertImage();break;case"insert-donut-chart":r("Donut.Chart");break;case"insert-column-chart":r("Column.Chart");break;case"insert-bar-chart":r("Bar.Chart");break;case"insert-line-chart":r("Line.Chart");break;case"increase-precision":case"decrease-precision":if(this.selection_state?.style){let i=D.Get(this.selection_state.style.number_format||"General");if(i.date_format)break;let o=new te(i.pattern);if(i.magic_decimal){let n=0,a=this.GetRange();Array.isArray(a)||(a=[[a]]);e:for(let s=0;s<a.length;s++)for(let l=0;l<a[s].length;l++){let d=a[s][l];if(typeof d<"u"&&fe(d)){let u=D.Get(this.selection_state.style.number_format||"General",!0),h=u.BaseFormat(d.real),m=u.BaseFormat(d.imaginary);h.parts&&typeof h.parts[1]=="string"&&(n=h.parts[1].length),m.parts&&typeof m.parts[1]=="string"&&(n=Math.max(n,m.parts[1].length));break e}else if(typeof d=="number"){let u=i.BaseFormat(d);u.parts&&typeof u.parts[1]=="string"&&(n=u.parts[1].length);break e}}e.command==="increase-precision"?o.SetDecimal(n+1):o.SetDecimal(Math.max(0,n-1))}else e.command==="increase-precision"?o.IncreaseDecimal():o.DecreaseDecimal();t.number_format=o.toString()}break;case"merge-cells":this.grid.MergeCells();break;case"unmerge-cells":this.grid.UnmergeCells();break;case"lock-cells":t={locked:this.selection_state?.style?!this.selection_state.style.locked:!0};break;case"wrap-text":t={wrap:this.selection_state?.style?!this.selection_state?.style.wrap:!0};break;case"justify-left":t={horizontal_align:"left"};break;case"justify-center":t={horizontal_align:"center"};break;case"justify-right":t={horizontal_align:"right"};break;case"align-top":t={vertical_align:"top"};break;case"align-middle":t={vertical_align:"middle"};break;case"align-bottom":t={vertical_align:"bottom"};break;case"reset":this.Reset();break;case"import-file":this.LoadLocalFile();break;case"save-json":this.SaveToDesktop();break;case"save-csv":this.SaveToDesktop("csv");break;case"export-xlsx":this.Export();break;case"revert":this.Revert();break;case"recalculate":this.Recalculate();break;case"toggle-toolbar":case"show-toolbar":case"hide-toolbar":this.ShowToolbar(e.command==="toggle-toolbar"?void 0:e.command==="show-toolbar");break;case"toggle-sidebar":case"show-sidebar":case"hide-sidebar":this.ShowSidebar(e.command==="toggle-sidebar"?void 0:e.command==="show-sidebar");break;case"revert-indicator":this.dialog?.ShowDialog({title:`This is a modified version of the document.
|
|
12
12
|
You can revert to the original or save your
|
|
13
13
|
changes in the sidebar.`,close_box:!0,timeout:5e3,type:"info"});break;default:console.info("unhandled",e.command);break}Object.keys(t).length&&this.grid.ApplyStyle(void 0,t,!0),this.Focus()}ShowToolbar(e){if(this.options.toolbar&&this.options.container instanceof HTMLElement){let t=this.options.container.parentElement;t&&(e===void 0&&(e=!t.hasAttribute("toolbar")),e?t.setAttribute("toolbar",""):t.removeAttribute("toolbar"))}}ShowSidebar(e){if(this.options.toolbar&&this.options.container instanceof HTMLElement){let t=this.options.container.parentElement;t&&(e===void 0&&(e=t.hasAttribute("collapsed")),e?t.removeAttribute("collapsed"):t.setAttribute("collapsed",""))}}CreateChart(){return this.calculator.RegisterLibrary("treb-charts",Ir)&&this.UpdateAC(),new ct}SetLanguage(e){if(this.language_model=e,!e)this.grid.SetLanguageMap();else{let t={};for(let r of e.functions||[])t[r.base]=r.name;this.grid.SetLanguageMap(t)}this.UpdateAC()}async Batch(e,t=!1){let r=this.last_selection,i=this.grid.Batch(e,t),o=!1,n=!1;for(let a of i)a.type==="data"?o=!0:a.type==="structure"&&a.rebuild_required&&(n=!0);n&&this.calculator.Reset(),(o||n)&&(await this.Recalculate(),this.DocumentChange(r))}Freeze(e=0,t=0){this.grid.Freeze(e,t,!0)}FreezeSelection(){let e=this.grid.GetSelection();if(e.empty)this.grid.Freeze(0,0);else{let t=e.area;t.entire_sheet||(t.entire_row?this.grid.Freeze(t.end.row+1,0):t.entire_column?this.grid.Freeze(0,t.end.column+1):this.grid.Freeze(t.end.row+1,t.end.column+1))}}GetFreeze(){return this.grid.GetFreeze()}UpdateTheme(){this.grid.UpdateTheme(void 0),this.UpdateDocumentStyles();for(let e of this.model.sheets.list)for(let t of e.conditional_formats)t.internal=void 0;this.calculator.UpdateConditionals(),this.ApplyConditionalFormats(this.grid.active_sheet,!1),this.grid.Update(!0)}GetSheetID(e){if(typeof e=="number"){let t=this.grid.model.sheets.list[e];if(t)return t.id}else{let t=this.model.sheets.Find(e);if(t)return t.id}}InsertTable(e,t={}){let r=e?this.model.ResolveArea(e,this.grid.active_sheet):this.GetSelectionReference().area,i=t.theme;typeof i=="number"&&(i=ht(i)),this.grid.InsertTable(r,t.totals_row,t.sortable,i)}RemoveTable(e){let t=this.ResolveTable(e||this.GetSelectionReference().target);t&&this.grid.RemoveTable(t)}UpdateTableStyle(e,t=4){let r=this.ResolveTable(e||this.GetSelectionReference().target);r&&(typeof t=="number"&&(t=ht(t)),r.theme=t,this.grid.active_sheet.FlushCellStyles(),this.grid.Update(!0),this.PushUndo())}AddSheet(e){this.grid.AddSheet(e);let t=this.model.sheets.list[this.model.sheets.list.length-1];return this.calculator.Reset(),t.id}InsertAnnotation(e,t="treb-chart",r,i){let o,n,a=!1;if(typeof i=="object"?(n=i.argument_separator,a=!!i.r1c1):(i===","||i===";")&&(n=i),r&&(o=O.IsRectangle(r)?r:this.model.ResolveArea(r,this.grid.active_sheet)),n&&n!==this.parser.argument_separator||a){let h={argument_separator:this.parser.argument_separator,decimal_mark:this.parser.decimal_mark};n===","?(this.parser.argument_separator=",",this.parser.decimal_mark="."):(this.parser.argument_separator=";",this.parser.decimal_mark=",");let m=this.parser.flags.r1c1;a&&(this.parser.flags.r1c1=a);let f=this.parser.Parse(e);this.parser.argument_separator=h.argument_separator,this.parser.decimal_mark=h.decimal_mark,this.parser.flags.r1c1=m,f.expression&&(e="="+this.parser.Render(f.expression,{missing:""}))}let{x:s,y:l}=this.grid.GetScrollOffset(),d=this.grid.scale||1,u={width:301,height:301};this.grid.CreateAnnotation({type:t,formula:e},void 0,void 0,o||{top:l/d+30,left:s/d+30,...u})}InsertImage(){this.SelectFile2(".png, .jpg, .jpeg, .gif, .svg",2)}RenameSheet(e,t){let r;typeof e=="number"?r=this.grid.model.sheets.list[e]:typeof e=="string"?r=this.model.sheets.Find(e):r=this.grid.active_sheet,r&&this.grid.RenameSheet(r,t)}DeleteSheet(e){if(typeof e=="string"){let t=this.model.sheets.Find(e);t&&this.grid.DeleteSheetID(t.id)}else this.grid.DeleteSheet(e);this.calculator.Reset()}HideSheet(e=0,t=!0){this.grid.ShowSheet(e,!t)}ShowSheet(e=0,t=!0){this.grid.ShowSheet(e,t)}ActivateSheet(e){this.grid.ActivateSheet(e)}SetColumnWidth(e,t){this.grid.SetColumnWidth(e,t)}SetRowHeight(e,t){this.grid.SetRowHeight(e,t)}InsertRows(e,t=1){if(typeof e>"u"){let r=this.grid.GetSelection();if(r.empty)return;let i=r.area;e=i.entire_column?0:i.start.row}this.grid.InsertRows(e,t)}InsertColumns(e,t=1){if(typeof e>"u"){let r=this.grid.GetSelection();if(r.empty)return;let i=r.area;e=i.entire_row?0:i.start.column}this.grid.InsertColumns(e,t)}DeleteRows(e,t=1){if(typeof e>"u"){let r=this.grid.GetSelection();if(r.empty)return;let i=r.area;e=i.entire_column?0:i.start.row,t=i.rows}this.grid.InsertRows(e,-t)}DeleteColumns(e,t=1){if(typeof e>"u"){let r=this.grid.GetSelection();if(r.empty)return;let i=r.area;e=i.entire_row?0:i.start.column,t=i.columns}this.grid.InsertColumns(e,-t)}FilterTable(e,t=0,r){let i=this.ResolveTable(e);if(!i)throw new Error("invalid table reference");r?this.grid.FilterTable(i,t,o=>r.call(0,o.value,o.calculated||void 0,JSON.parse(JSON.stringify(o.style||{})))):this.grid.FilterTable(i,0,()=>!0)}SortTable(e,t={}){let r=this.ResolveTable(e);if(!r)throw new Error("invalid table reference");this.grid.SortTable(r,t)}MergeCells(e){this.grid.MergeCells(e?this.model.ResolveArea(e,this.grid.active_sheet):void 0)}UnmergeCells(e){this.grid.UnmergeCells(e?this.model.ResolveArea(e,this.grid.active_sheet):void 0)}async ExportBlob(){throw console.warn("this build does not include xlsx support."),new Error("this build does not include xlsx support.")}Revert(){if(this.options.inline_document){this.LoadDocument(this.options.inline_document),this.initial_load_source="inline-document",this.options.local_storage&&(this.SaveLocalStorage("reverted_backup"),localStorage.removeItem(this.options.local_storage));return}let e=this.options.document;if(e){this.LoadNetworkDocument(e),this.initial_load_source="network-file",this.options.local_storage&&(this.SaveLocalStorage("reverted_backup"),localStorage.removeItem(this.options.local_storage));return}console.warn("to revert, there must be a document set in options"),this.dialog?.ShowDialog({title:"Can't revert -- no document is set in options",close_box:!0,timeout:3e3,type:"error"})}Export(){console.warn("this build does not include xlsx support.")}GetSelectionReference(){return this.grid.GetSelection()}Focus(){this.grid.Focus()}Resize(){this.grid.UpdateLayout();for(let e of this.views)e.view.grid.UpdateLayout();this.Publish({type:"resize"})}Reset(){if(this.parent_view)return this.parent_view.Reset();this.grid.Reset(),this.ResetInternal(),this.calculator.AttachModel(),this.UpdateAC(),this.Publish({type:"reset"})}LoadFromLocalStorage(e){this.options.local_storage=e;let t=localStorage.getItem(e);if(t)try{let r=JSON.parse(t);return this.LoadDocument(r,{source:"local-storage"}),!0}catch(r){console.error(r)}return!1}async LoadNetworkDocument(e,t){let r=t?t.scroll:void 0,i=t?!!t.recalculate:!1,o=t?t.sheet:void 0,n=/csv(?:$|\?|&)/i.test(e),a=/tsv(?:$|\?|&)/i.test(e);try{this.spinner?.Show();let s=await fetch(e);if(this.spinner?.Hide(),!s.ok)throw new Error("network error");let l=await s.text();if(typeof l=="string")if(n)this.LoadCSV(l,"network-file");else{if(a)throw new Error("tsv not supported (TODO)");{l.substr(0,11)==="&&&START&&&"?l=l.substr(11):l.substr(0,8)==="for(;;);"&&(l=l.substr(8));let d=JSON.parse(l);this.LoadDocument(d,{scroll:r,recalculate:i,override_sheet:o,source:"network-file"})}}}catch(s){console.info("error loading network document",e),console.error(s),this.dialog?.ShowDialog({title:"Error loading file",close_box:!0,message:"The network document returned an error",type:"error",timeout:3e3}),this.Reset()}}async LoadLocalFile(){this.SelectFile2(".treb, .csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/json",1)}ExportDelimited(e={}){if(e={delimiter:",",...e},!e.delimiter||e.delimiter!==","&&e.delimiter!==" ")throw new Error("invalid delimiter");let t=this.grid.active_sheet;switch(typeof e.sheet){case"undefined":break;case"string":t=this.model.sheets.Find(e.sheet);break;case"number":t=this.grid.model.sheets.list[e.sheet];break;default:t=void 0;break}if(!t)throw new Error("invalid sheet identifier");let r=t.cells.toJSON({nested:!1,expand_arrays:!0,calculated_value:!0}),i=[];for(let a=0;a<r.columns;a++)i.push("");let o=[];for(let a=0;a<r.rows;a++)o.push(i.slice(0));let n=new RegExp(`[
|
|
14
14
|
\r"${e.delimiter}]`);if(Je(r.data))for(let a of r.data){let s="";!e.formulas&&typeof a.calculated<"u"?s=fe(a.calculated)?He(a.calculated):a.calculated.toString():typeof a.value=="string"&&a.value[0]==="'"?s=a.value.substr(1):typeof a.value<"u"&&(s=fe(a.value)?He(a.value):a.value.toString()),n.test(s)&&(s=s.replace(/"/g,'""'),s='"'+s+'"'),o[a.row][a.column]=s}return o.map(a=>a.join(e.delimiter)).join(`\r
|
|
15
|
-
`)}SaveLocalFile(e="treb.json",t={}){this.SaveToDesktop(e,t)}SaveToDesktop(e="treb.json",t={}){let r=this.grid.model.document_name||"document",i,o,n=e.split(/\./).filter(s=>s.trim().length),a=n.length?n[n.length-1].toLowerCase():"treb";if(n.length<=1||e==="treb.json")if(e==="treb.json"&&(a=e),(a==="csv"||a==="tsv")&&this.grid.model.sheets.length>1){let s=this.grid.active_sheet.name;e=(r+"-"+s).toLowerCase().replace(/\W+/g,"-")+"."+a}else e=r.toLowerCase().replace(/\W+/g,"-")+"."+a;switch(a){case"csv":o=this.ExportDelimited({delimiter:","});break;case"tsv":o=this.ExportDelimited({delimiter:" "});break;case"treb":case"json":case"treb.json":i=this.SerializeDocument({...t}),o=JSON.stringify(i,void 0,t.pretty?2:void 0),this.last_save_version=this.file_version;break;default:throw new Error("invalid file type")}if(o&&e){let s=new Blob([o],{type:"text/plain;charset=utf-8"});this.SaveAs(s,e)}}LoadCSV(e,t){if(this.parent_view)return this.parent_view.LoadCSV(e,t);this.grid.FromCSV(e),this.ResetInternal(),this.grid.Update(!0),this.Publish({type:"load",source:t}),this.UpdateDocumentStyles()}ScrollOffset(e){return this.grid.ScrollOffset(e)}LoadDocument(e,t={}){if(this.parent_view)return this.parent_view.LoadDocument(e,t);if(this.initial_load_source||(this.initial_load_source=t.source),t={flush:!0,recalculate:!1,...t},t.override_selection&&e.sheet_data){let r=Array.isArray(e.sheet_data)?e.sheet_data:[e.sheet_data];for(let i of r)if(i.id===t.override_selection.target.sheet_id){i.selection=t.override_selection;break}}if(this.ImportDocumentData(e,t.override_sheet),this.calculator.Reset(),e.rendered_values&&!t.recalculate?(this.calculator.RebuildClean(!0),this.ApplyConditionalFormats(this.grid.active_sheet,!1),this.grid.Update()):this.Recalculate(),this.InflateAnnotations(),t.flush&&this.FlushUndo(),this.Publish({type:"load",source:t.source}),this.UpdateDocumentStyles(),this.loaded=!0,t.scroll){let r=t.scroll;Promise.resolve().then(()=>this.ScrollTo(r))}}SetNote(e,t){if(typeof e=="string"){let r=this.model.ResolveAddress(e,this.grid.active_sheet);e=V(r)?r:r.start}this.grid.SetNote(e,t)}SetValidation(e,t,r){if(typeof e=="string"){let i=this.model.ResolveAddress(e,this.grid.active_sheet);e=V(i)?i:i.start}if(typeof t>"u"||Array.isArray(t))this.grid.SetValidation(e,t,r);else{let i=this.model.ResolveArea(t,this.grid.active_sheet);this.grid.SetValidation(e,i,r)}}RemoveFunction(e){let t=e.toUpperCase();this.model.macro_functions.delete(t),this.UpdateAC()}DefineFunction(e,t="",r="0"){if(!e.length||/^[^A-Za-z]/.test(e)||/[^\w_.]/.test(e))throw new Error("invalid function name");typeof t=="string"&&(t=t?t.split(this.parser.argument_separator).map(i=>i.trim()):[]);for(let i of t)if(!i.length||/^[^A-Za-z]/.test(i)||/[^\w_.]/.test(i))throw new Error("invalid argument name");this.RemoveFunction(e),this.grid.model.macro_functions.set(e.toUpperCase(),{name:e,function_def:r,argument_names:t,expression:this.parser.Parse(r).expression}),this.UpdateAC()}SerializeDocument(e={}){e={share_resources:!0,shrink:!0,...e};let t=this.grid.Serialize(e),r={app:"@trebco/treb",version:"28.0.5",revision:this.file_version,name:this.grid.model.document_name,user_data:this.grid.model.user_data,decimal_mark:z.decimal_separator,...t};if(e.share_resources){let i=1,o=new Map,n=Array.isArray(r.sheet_data)?r.sheet_data:[r.sheet_data],a=l=>{let d=o.get(l);return d||(d=(i++).toString(),o.set(l,d)),`resource:${d}`};for(let l of n)if(l){l.background_image&&(l.background_image=a(l.background_image));for(let d of l.annotations||[])d.type==="image"&&d.data?.src&&(d.data.src=a(d.data.src))}let s={};for(let[l,d]of o.entries())s[d]=l;r.shared_resources=s}return e.rendered_values&&(r.rendered_values=!0),r}async Recalculate(e){let t;e&&e.type==="data"&&e.area&&(t=e.area),this.calculator.Calculate(t),this.ApplyConditionalFormats(this.grid.active_sheet,!1),this.grid.Update(!0),this.UpdateAnnotations(),this.Publish({type:"data"}),this.grid.UpdateStats()}SaveLocalStorage(e=this.options.local_storage){if(!e){console.warn("not saving, no key");return}let t=JSON.stringify(this.SerializeDocument({rendered_values:!0,expand_arrays:!0}));localStorage.setItem(e,t)}Undo(){if(this.parent_view)return this.parent_view.Undo();if(this.undo_pointer<=1){console.warn("nothing to undo");return}let e=this.undo_stack[--this.undo_pointer-1],t=e.selection?JSON.parse(e.selection):void 0;this.LoadDocument(JSON.parse(e.data),{flush:!1,override_selection:t,source:"undo"})}About(){this.dialog?.ShowDialog({type:"about"})}ScrollTo(e,t={}){if(typeof e=="string"){let r=this.model.ResolveAddress(e,this.grid.active_sheet);e=V(r)?r:r.start}t={x:!0,y:!0,smooth:!1,...t},this.grid.ScrollTo(e,t.x,t.y,t.smooth)}Resolve(e){let t=this.model.ResolveAddress(e,this.grid.active_sheet);return V(t)?t.sheet_id?t:void 0:t.start.sheet_id?t:void 0}Unresolve(e,t=!0,r=!0){if(typeof e=="string"){let i=this.Resolve(e);if(!i)throw new Error("invalid reference");e=i}return this.calculator.Unresolve(e,this.grid.active_sheet,t,r)}Evaluate(e,t={}){return this.calculator.Evaluate(e,this.grid.active_sheet,t)}GetSelection(e=!0){let t=this.grid.GetSelection();if(t.empty)return"";let r="";if(t.area.count>1?r=y.CellAddressToLabel(t.area.start)+":"+y.CellAddressToLabel(t.area.end):r=y.CellAddressToLabel(t.area.start),!e)return r;let i=t.area.start.sheet_id||this.grid.active_sheet.id,o=this.calculator.ResolveSheetName(i,!0);return o?o+"!"+r:r}ParseNumber(e){return be.TryParse(e).value}FormatNumber(e,t="General"){return D.Get(t).Format(e)}ApplyBorders(e,t,r=1){this.grid.ApplyBorders2(e?this.model.ResolveArea(e,this.grid.active_sheet):void 0,t,{},r)}ApplyStyle(e,t={},r=!0){this.grid.ApplyStyle(e?this.model.ResolveArea(e,this.grid.active_sheet):void 0,t,r)}ClearName(e){this.grid.SetName(e)}DefineName(e,t){if(typeof t>"u"||t===null)throw new Error("invalid value (null or undefined)");if(typeof t=="object"&&(V(t)||Fr(t))){this.grid.SetName(e,this.model.ResolveArea(t,this.grid.active_sheet));return}if(typeof t=="string"){let r=this.parser.Parse(t);if(!r.expression)throw new Error("invalid expression");switch(r.expression.type){case"address":case"range":this.grid.SetName(e,this.model.ResolveArea(r.expression,this.grid.active_sheet));return}this.grid.SetName(e,void 0,t)}else this.grid.SetName(e,void 0,t.toString())}SetLink(e,t=""){if(typeof e=="string"){let r=this.model.ResolveAddress(e,this.grid.active_sheet);e=V(r)?r:r.start}if(!e){let r=this.GetSelectionReference();if(r.empty)return;e=r.target}this.grid.SetLink(e,t)}Select(e){let t;e&&(t=this.model.ResolveArea(e,this.grid.active_sheet),t.start.sheet_id&&t.start.sheet_id!==this.grid.active_sheet.id&&this.grid.ActivateSheetID(t.start.sheet_id)),this.grid.SelectRange(t)}GetRange(e,t={}){if(!e){let r=this.GetSelectionReference();r.empty||(e=r.area)}if(e)return t.type||(t.formatted&&(t.type="formatted"),t.formula&&(t.type="formula")),this.grid.GetRange(this.model.ResolveAddress(e,this.grid.active_sheet),t.type)}GetStyle(e,t=!1){if(!e){let r=this.GetSelectionReference();r.empty||(e=r.area)}if(e)return this.grid.GetRangeStyle(this.model.ResolveAddress(e,this.grid.active_sheet),t)}SetRange(e,t=void 0,r={}){if(!e){let i=this.GetSelectionReference();i.empty||(e=i.area)}if(e){let i=this.model.ResolveArea(e,this.grid.active_sheet);if(r.spill&&Array.isArray(t)){let o=t.length,n=Math.max(0,...t.map(s=>s.length)),a={row:i.start.row+o+1,column:i.start.column+n+1};i.ConsumeAddress(a)}return this.grid.SetRange(i,t,r)}}Subscribe(e){return this.events.Subscribe(e)}Cancel(e){this.events.Cancel(e)}ApplyConditionalFormats(e,t){let r=[];if(e.conditional_formats.length||e.flush_conditional_formats){for(let i of e.conditional_formats)r.push(i.area),i.type==="gradient"&&(i.internal||(i.internal={}),i.internal.gradient||(i.internal.gradient=new ft(i.stops,this.grid.theme,i.color_space)));e.ApplyConditionalFormats()}t&&this.grid.Update(!0,r)}ResolveTable(e){let t;if(typeof e=="string"){let r=e.toLowerCase();this.model.tables.has(r)&&(t=this.model.tables.get(r))}if(!t){let r=this.model.ResolveAddress(e,this.grid.active_sheet);V(r)||(r=r.start),t=this.grid.GetTableReference(r)}return t}SaveAs(e,t){let r=this.DOM.Create("a");r.href=URL.createObjectURL(e),r.download=t,r.click(),URL.revokeObjectURL(r.href)}Publish(e){this.events.Publish(e)}async ImportXLSX(e,t){console.warn("this build does not include xlsx support.")}ResetInternal(){this.calculator.Reset(),this.FlushUndo(),this.file_version=this.last_save_version=0}HandleCellEvent(e){if(e.data?.type==="hyperlink"){let r="hyperlink invalid target",i=e.data.data||"";if(typeof i=="string"){if(/^https{0,1}:\/\//i.test(i)){if(!this.options.hyperlinks){console.warn("hyperlinks are disabled");return}let o=this.DOM.Create("a");o.setAttribute("target",this.options.hyperlinks),o.setAttribute("href",i),o.setAttribute("noreferrer","true"),o.setAttribute("nofollow","true"),o.click();return}else{let o=this.parser.Parse(i);if(o.expression){if(o.expression.type==="address"){(o.expression.sheet||o.expression.sheet_id)&&this.ActivateSheet(o.expression.sheet||o.expression.sheet_id),this.Select(i);return}else if(o.expression.type==="range"){(o.expression.start.sheet||o.expression.start.sheet_id)&&this.ActivateSheet(o.expression.start.sheet||o.expression.start.sheet_id),this.Select(i);return}}}console.warn(r,2);return}}}OnSheetChange(e){for(let t of e.activate.annotations)this.InflateAnnotation(t),this.calculator.UpdateAnnotations(t,e.activate);this.UpdateAnnotations(),this.calculator.UpdateConditionals(),this.ApplyConditionalFormats(e.activate,!0)}HandleDrag(e){if(e.dataTransfer&&e.dataTransfer.types){if(e.dataTransfer.types.some&&e.dataTransfer.types.some(t=>t==="Files"))e.preventDefault();else for(let t=0;t<e.dataTransfer.types.length;t++)if(e.dataTransfer.types[t]==="files"){e.preventDefault();return}}}HandleDrop(e){if(e.dataTransfer&&e.dataTransfer.files&&e.dataTransfer.files.length){e.preventDefault();let t=e.dataTransfer.files[0];/^image/.test(t.type)?this.InsertImageInternal(t):this.LoadFileInternal(t,"drag-and-drop").catch(()=>{})}}SelectFile2(e,t){if(!this.file_chooser){let r=this.DOM.Create("input",void 0,void 0,{attrs:{type:"file"},events:{change:()=>{if(r.files&&r.files[0]){let i=r.files[0];switch(r.value="",this.file_chooser_operation){case 2:this.InsertImageInternal(i);break;case 1:this.LoadFileInternal(i,"local-file",!0);break;default:console.warn("file chooser: no operation");break}}}}});this.file_chooser=r}if(!this.file_chooser)throw new Error("could not create file chooser");this.file_chooser_operation=t,this.file_chooser.accept=e||"",this.file_chooser.click()}async InsertImageInternal(e){if(this.options.max_file_size&&e.size>this.options.max_file_size){this.dialog?.ShowDialog({type:"error",message:"This file exceeds the allowed image size. Please try a smaller image.",title:"Error adding image",timeout:3e3,close_box:!0});return}let t=e;await new Promise((r,i)=>{let o=new FileReader;o.onload=async()=>{try{if(o.result){let n;if(typeof o.result=="string")n=o.result;else{n="";let l=new Uint8Array(o.result);for(let d=0;d<l.byteLength;d++)n+=String.fromCharCode(l[d])}let a=this.DOM.Create("img");a.src=n,await Promise.resolve();let s=this.grid.CreateAnnotation({type:"image",formula:"",data:{scale:"",src:n,original_size:{width:a.width||300,height:a.height||300}}},void 0,void 0,{top:30,left:30,width:a.width||300,height:a.height||300})}r()}catch(n){i(n)}},o.onabort=()=>{i("Aborted")},o.onerror=()=>{i("File error")},setTimeout(()=>{o.readAsDataURL(t)},100)})}LoadFileInternal(e,t,r=!0){if(!e)return Promise.resolve();let i=new FileReader;return new Promise((o,n)=>{let a=s=>{i.onload=null,i.onabort=null,i.onerror=null,s?(r&&(this.dialog?.ShowDialog({title:"Error reading file",close_box:!0,message:"Please make sure your file is a valid CSV or TREB file.",type:"error",timeout:3e3}),console.error(s)),n(s)):o()};i.onload=()=>{try{if(i.result)if(/\.csv$/i.test(e.name))this.LoadCSV(i.result,t);else{let s=JSON.parse(i.result);this.LoadDocument(s,{source:t})}a()}catch(s){a(s?.toString())}},i.onabort=()=>{a("Aborted")},i.onerror=()=>{a("File error")},setTimeout(()=>{/\.xlsx$/i.test(e.name)?i.readAsBinaryString?i.readAsBinaryString(e):i.readAsArrayBuffer(e):i.readAsText(e)},100)})}UpdateAnnotations(){for(let e of this.grid.active_sheet.annotations){if(e.temp.vertex){let r=e.temp.vertex;if(r.state_id!==e.temp.state){e.temp.state=r.state_id;for(let i of e.view)i.dirty=!0}}let t=e.view[this.grid.view_index]||{};t.dirty&&(t.update_callback&&t.update_callback(),this.grid.AnnotationUpdated(e))}}RebuildAllAnnotations(){for(let e of this.grid.active_sheet.annotations){this.InflateAnnotation(e);let t=e.view[this.grid.view_index]||{};t.resize_callback&&t.resize_callback(),t.update_callback&&t.update_callback()}}InflateAnnotations(){for(let e of this.grid.active_sheet.annotations)this.InflateAnnotation(e)}InflateAnnotation(e){if(this.grid.headless)return;let t=e.view[this.grid.view_index]||{};if(t.inflated){e.dirty&&(t.resize_callback&&t.resize_callback(),e.dirty=!1);return}if(t.inflated=!0,e.dirty&&(e.dirty=!1),t.content_node){if(e.data.type==="treb-chart"){let r=this.CreateChart();r.Initialize(t.content_node);let i=()=>{if(e.data.formula){let o=this.parser.Parse(e.data.formula);if(o&&o.expression&&o.expression.type==="call"){this.parser.Walk(o.expression,s=>((s.type==="address"||s.type==="range")&&this.model.ResolveSheetID(s,void 0,this.grid.active_sheet),!0));let n=o.expression.name.toLowerCase(),a=this.calculator.CalculateExpression(o.expression);r.Exec(n,a)}}r.Update()};t.resize_callback=()=>{this.grid.headless||(r.Resize(),r.Update())},t.update_callback=()=>{this.grid.headless||i()},t.node?.parentElement&&(this.grid.headless||i())}else if(e.data.type==="image"&&typeof e.data.data?.src=="string"){let r=mt(e.data.data.src);if(r){let i=this.DOM.Create("img");i.src=r,e.data.data.scale==="fixed"?(i.style.position="relative",i.style.left="50%",i.style.top="50%",i.style.transform="translate(-50%, -50%)"):(i.style.width="100%",i.style.height="100%"),t.content_node.appendChild(i)}}}}DocumentChange(e){Promise.resolve().then(()=>{this.file_version++,this.file_version>=65536&&(this.file_version=1);let t=JSON.stringify(this.SerializeDocument({optimize:"size",rendered_values:!0,expand_arrays:!0}));this.options.undo&&this.PushUndo(t,e,!1),this.Publish({type:"document-change"})})}ResolveStorageKey(e,t=""){if(e){if(e===!0){let r=0,i=document.location.href;for(let n=0,a=i.length;n<a;n++)r=(r<<5)-r+i.charCodeAt(n),r|=0;let o=Math.abs(r).toString(16);return t?t+"-"+o:o}return e}}PushUndo(e,t,r=!0){let i=t||this.last_selection;this.undo_stack[this.undo_pointer-1]&&(this.undo_stack[this.undo_pointer-1].selection=i),r&&(this.file_version++,this.file_version>=65536&&(this.file_version=1)),e||(e=JSON.stringify(this.SerializeDocument({optimize:"size",rendered_values:!0,expand_arrays:!0}))),this.undo_stack[this.undo_pointer++]={data:e,selection:void 0};let o=this.undo_stack.length;if(o>16){let n=o-16;this.undo_stack=this.undo_stack.slice(n),this.undo_pointer-=n}}FlushUndo(e=!0){this.undo_stack=[],this.undo_pointer=0,this.last_save_version=this.file_version,e&&this.PushUndo(void 0,void 0,!1)}UpdateSelection(e){this.last_selection=JSON.stringify(e),this.Publish({type:"selection"})}UpdateSelectionStyle(e){let t=this.grid.GetFreeze(),r={frozen:!!t.rows||!!t.columns};if(e||(e=this.grid.GetSelection()),e&&!e.empty){r.selection=e;let i=this.grid.active_sheet.CellData(e.target);r.table=!!i.table,r.merge=!!i.merge_area,r.merge&&i.merge_area&&(i.merge_area.start.row!==e.target.row||i.merge_area.start.column!==e.target.column)&&(i=this.grid.active_sheet.CellData(i.merge_area.start)),r.comment=i.note,r.style=i.style?{...i.style}:void 0,r.relative_font_size=L.RelativeFontSize(r.style||{},this.grid.theme.grid_cell||{})}this.selection_state=r}UpdateDocumentStyles(e=!0){let t={},r={};for(let o of this.grid.model.sheets.list)o.NumberFormatsAndColors(r,t);this.document_styles.colors=Object.keys(r),this.document_styles.number_formats=Object.keys(t),this.document_styles.theme_colors=[];let i=[.5,.25,0,-.25,-.5];for(let o=0;o<10;o++)this.document_styles.theme_colors.push(i.map(n=>{let a={theme:o,tint:n},s=E(this.grid.theme,a);return{color:a,resolved:s}}))}ConvertLocale(e){let t=new Pe;t.flags={...this.parser.flags};let r,i;e.decimal_mark==="."?(t.decimal_mark=".",t.argument_separator=",",r=",",i=";"):(t.decimal_mark=",",t.argument_separator=";",r=".",i=",");let o=n=>{let a=t.Parse(n);if(a.expression)return"="+t.Render(a.expression,{missing:"",convert_decimal:r,convert_argument_separator:i})};if(e.macro_functions)for(let n of e.macro_functions){let a=o(n.function_def);a&&(n.function_def=a)}if(e.sheet_data){let n=Array.isArray(e.sheet_data)?e.sheet_data:[e.sheet_data];for(let a of n){if(a.annotations){for(let s of a.annotations)if(s.formula){let l=o(s.formula);l&&(s.formula=l)}}if(a.data?.length)for(let s of a.data){let l=tr(s)?[s]:s.cells;for(let d of l)if(d.value&&typeof d.value=="string"&&d.value[0]==="="){let u=o(d.value.slice(1));u&&(d.value=u)}}}}}CompareVersions(e="",t=""){let r=e.split(".").map(a=>Number(a)||0).concat([0,0,0]),i=t.split(".").map(a=>Number(a)||0).concat([0,0,0]),o=[0,1,2],n={match:0};for(let a=0;a<3;a++)if(r[a]!==i[a]){n.match=r[a]>i[a]?1:-1,n.level=o[a];break}return n}ImportDocumentData(e,t){this.file_version=e.revision||0;let r=[],i=this.CompareVersions(e.version,"28.0.5");if(i.match>0&&(i.level===0||i.level===1)&&console.warn(`The file you are opening was created with a newer version of TREB (${e.version} vs 28.0.5).
|
|
16
|
-
You may encounter compatibility errors.`),e.sheet_data&&(Array.isArray(e.sheet_data)?r=e.sheet_data:r.push(e.sheet_data)),e.shared_resources){let a=e.shared_resources,s=l=>/^resource:/.test(l)?a[l.substring(9)]||"":l;for(let l of r){l.background_image&&(l.background_image=s(l.background_image));for(let d of l.annotations||[])d.type==="image"&&d.data?.src&&(d.data.src=s(d.data.src))}}e.decimal_mark&&e.decimal_mark!==z.decimal_separator&&this.ConvertLocale(e);let o=this.grid.model;if(o.tables.clear(),e.tables)for(let a of e.tables)o.tables.set(a.name.toLowerCase(),a);this.grid.UpdateSheets(r,void 0,t||e.active_sheet);for(let[a,s]of this.model.tables.entries())if(s.area.start.sheet_id){let l=o.sheets.Find(s.area.start.sheet_id);if(l)for(let d=s.area.start.row;d<=s.area.end.row;d++)for(let u=s.area.start.column;u<=s.area.end.column;u++){let h=l.cells.GetCell({row:d,column:u},!0);h.table=s}}o.document_name=e.name,o.user_data=e.user_data,o.named_ranges.Reset();let n=e.named_ranges;if(!n&&r[0]&&r[0].named_ranges&&(n=r[0].named_ranges),n&&o.named_ranges.Deserialize(n),o.named_expressions.clear(),e.named_expressions)for(let a of e.named_expressions){let s=this.parser.Parse(a.expression);s.valid&&s.expression&&(this.parser.Walk(s.expression,l=>{if(l.type==="address"||l.type==="range"){if(l.type==="range"&&(l=l.start),!l.sheet_id&&l.sheet){let d=this.model.sheets.Find(l.sheet);d&&(l.sheet_id=d.id)}return l.sheet_id||(l.sheet_id=this.grid.active_sheet.id),!1}return!0}),o.named_expressions.set(a.name.toUpperCase(),s.expression))}if(o.macro_functions.clear(),e.macro_functions)for(let a of e.macro_functions)o.macro_functions.set(a.name.toUpperCase(),{...a,expression:this.parser.Parse(a.function_def||"").expression});this.UpdateAC()}async LoadWorker(e){if(!1){if(index_worker_exports)try{}catch(t){}}else console.warn("this build does not include xlsx support.");throw new Error("creating worker failed")}HandleKeyDown(e){e.ctrlKey&&(e.code==="KeyZ"||e.key==="z")&&(e.stopPropagation(),e.preventDefault(),this.Undo())}};var Hi=`@charset "UTF-8";.treb-main.treb-main .treb-mouse-mask{background:transparent;bottom:0;display:none;left:0;position:fixed;right:0;top:0;z-index:9999}.treb-main.treb-main .treb-mouse-mask.column-resize{cursor:col-resize}.treb-main.treb-main .treb-mouse-mask.row-resize{cursor:row-resize}.treb-main.treb-main .treb-mouse-mask.nub-select{cursor:crosshair}.treb-main.treb-main .treb-mouse-mask.move{cursor:move}.treb-main.treb-main .treb-mouse-mask.nw-resize{cursor:nw-resize}.treb-main.treb-main .treb-note{max-width:15em;min-width:15em}.treb-main.treb-main .treb-hover-title,.treb-main.treb-main .treb-note{background:var(--treb-note-background,#fff);border:1px solid var(--treb-note-border-color,var(--treb-ui-border-color,#ddd));border-radius:2px;box-shadow:0 1px 4px 2px hsla(0,0%,43%,.2);color:var(--treb-note-color,#333);font-family:BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,"sans-serif";font-size:10.5pt;left:100px;line-height:normal;opacity:0;padding:7px 10px;position:fixed;top:100px;transition:opacity .2s;white-space:pre-line;z-index:39}.treb-main.treb-main .treb-hover-title{min-width:10em;pointer-events:none}.treb-main.treb-main .treb-sort-button{background:#fff;border:1px solid #ccc;border-radius:2px;height:1em;left:100px;opacity:0;pointer-events:none;position:absolute;top:100px;transition:opacity .1s ease;width:1em;z-index:39}.treb-main.treb-main .treb-sort-button:after{box-sizing:border-box}.treb-main.treb-main .treb-sort-button.asc:after{border:.4em solid transparent;border-top-color:currentcolor;content:"";height:.8em;left:50%;opacity:.5;position:absolute;top:50%;transform:translate(-50%,-25%);width:.8em}.treb-main.treb-main .treb-sort-button.desc:after{border:.4em solid transparent;border-bottom-color:currentcolor;content:"";height:.8em;left:50%;opacity:.5;position:absolute;top:50%;transform:translate(-50%,-80%);width:.8em}.treb-main.treb-main .treb-tooltip{border-radius:2px;box-shadow:0 1px 4px 2px hsla(0,0%,43%,.2);display:none;line-height:normal;padding:2px 10px;pointer-events:none;position:fixed;z-index:39}.treb-main.treb-main .treb-tooltip.arrow-up:after{border:4px solid transparent;border-bottom-color:inherit;box-sizing:border-box;content:" ";height:8px;left:calc(50% - 4px);overflow:hidden;position:absolute;top:-8px;width:8px}.treb-main.treb-main .treb-tooltip.arrow-left:after{border:4px solid transparent;border-right-color:inherit;box-sizing:border-box;content:" ";height:8px;left:-8px;overflow:hidden;position:absolute;top:calc(50% - 4px);width:8px}.treb-main.treb-main .treb-dropdown-caret{background:var(--treb-dropdown-caret-background,#fff);border:1px solid var(--treb-dropdown-caret-border-color,#ccc);border-radius:2px;box-shadow:0 1px 4px 2px hsla(0,0%,43%,.2);display:none;height:20px;position:absolute;width:20px;z-index:39}.treb-main.treb-main .treb-dropdown-caret path{fill:none;stroke:var(--treb-dropdown-caret-color,#444);stroke-linecap:round;stroke-linejoin:round;stroke-width:2}.treb-main.treb-main .treb-dropdown-list{background:var(--treb-dropdown-background,#fff);border:1px solid var(--treb-dropdown-border-color,unset);box-shadow:0 1px 4px 2px hsla(0,0%,43%,.2);color:var(--treb-dropdown-color,inherit);display:none;font-size:10pt;max-height:10em;outline:none;overflow-y:auto;position:absolute;text-align:left;z-index:39}.treb-main.treb-main .treb-dropdown-list div{cursor:default;padding:2px}.treb-main.treb-main .treb-dropdown-list div.selected{background:var(--treb-dropdown-selected-background,#555);color:var(--treb-dropdown-selected-color,#fff)}.treb-main.treb-main .treb-dropdown-caret.active{background:var(--treb-dropdown-caret-active-background,#eee)}.treb-main.treb-main .treb-dropdown-caret.active+.treb-dropdown-list{display:block}.treb-main.treb-main .treb-error-highlight{background:rgba(255,0,0,.25);opacity:0;pointer-events:none;position:absolute;transition:opacity .15s ease-in-out;z-index:40}.treb-main.treb-main .treb-autocomplete{box-sizing:border-box;font-size:inherit;font-weight:400;line-height:normal;max-height:10em;overflow-y:auto;position:fixed;text-align:left;top:-1000px;z-index:39}.treb-main.treb-main .treb-autocomplete *{box-sizing:border-box}.treb-main.treb-main .treb-autocomplete ul{list-style-type:none}.treb-main.treb-main .treb-autocomplete ul,.treb-main.treb-main .treb-autocomplete ul li{font-size:inherit;font-weight:inherit;margin:0;padding:0}.treb-main.treb-main .treb-autocomplete ul li a{color:inherit;cursor:default;display:inline-block;font-size:inherit;font-weight:inherit;padding:3px 6px;text-decoration:none;width:100%}.treb-main.treb-main .treb-autocomplete-tooltip{position:fixed;top:-1000px;white-space:pre;z-index:39}.treb-main.treb-main .treb-formula-bar{display:flex;flex-direction:row;grid-area:1/1/2/2;max-width:100%;overflow-x:hidden;padding:0 2px 12px;text-align:left}.treb-main.treb-main .treb-formula-bar[hidden]{display:none}.treb-main.treb-main .treb-formula-bar .treb-address-label{border:1px solid var(--treb-formula-bar-border-color,var(--treb-ui-border-color,#ccc));border-radius:2px;display:flex;flex-direction:column;height:1.75em;justify-content:center;margin-right:6px;min-height:1.5em;min-width:95px;padding-left:3px;width:95px}.treb-main.treb-main .treb-formula-bar .treb-address-label>div{outline:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.treb-main.treb-main .treb-formula-bar .expand-button{background:transparent;border:0;border-radius:2px;height:1.75em;margin-left:2px;outline:none;padding:1px}.treb-main.treb-main .treb-formula-bar .expand-button:after{border:5px solid transparent;border-top-color:#999;content:" ";display:inline-block;margin:0;padding:0;position:relative;top:-6px;transition:transform .15s ease}.treb-main.treb-main .treb-formula-bar[expanded] .expand-button:after{transform:rotate(180deg) translateY(6px)}.treb-main.treb-main .treb-formula-bar .treb-editor-container{border:1px solid var(--treb-formula-bar-border-color,var(--treb-ui-border-color,#ccc));border-radius:2px;display:flex;flex-direction:column;flex-grow:1;height:1.75em;justify-content:center;min-width:0}.treb-main.treb-main .treb-formula-bar[expanded] .treb-editor-container{height:4.5em;transition:height .1s ease-in-out}.treb-main.treb-main .treb-formula-bar[expanded] .treb-editor-container>div{overflow-y:auto}.treb-main.treb-main .treb-formula-bar .treb-editor-container>div{flex-grow:1;line-height:1.35;margin:2px;min-height:1em;outline:none;overflow-x:hidden;overflow-y:hidden;white-space:pre-wrap;width:100%}.treb-main.treb-main .treb-formula-bar .formula-button{border:1px solid #ccc;border-radius:2px;height:1.75em;margin-left:6px;overflow:hidden;white-space:nowrap}.treb-main.treb-main .treb-formula-bar .formula-button .text-1{font-style:italic;padding-right:.1em}.treb-main.treb-main .treb-formula-bar .formula-button .text-1:after{content:"f"}.treb-main.treb-main .treb-formula-bar .formula-button .text-2{font-size:.7em}.treb-main.treb-main .treb-formula-bar .formula-button .text-2:after{content:"(x)"}.treb-main.treb-main .treb-mouse-mask .ghost-tab{position:fixed}.treb-main.treb-main .treb-spreadsheet-footer{align-items:center;grid-area:3/1/4/2}.treb-main.treb-main .treb-spreadsheet-footer,.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs{color:var(--treb-ui-color,inherit);display:flex;flex-direction:row;height:2.2em;list-style-type:none;max-width:100%;padding-inline-start:0;z-index:2}.treb-main.treb-main .treb-spreadsheet-footer[hidden]{display:none}.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs>li{display:inline-block;position:relative}.treb-main.treb-main .treb-spreadsheet-footer .treb-add-tab,.treb-main.treb-main .treb-spreadsheet-footer .treb-delete-tab,.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs>li{align-items:center;border-bottom-left-radius:5px;border-bottom-right-radius:5px;border-top-width:1px;border:1px solid var(--treb-tab-bar-tab-border-color,var(--treb-ui-border-color,#ccc));border-top:0 solid var(--treb-tab-bar-tab-border-color,var(--treb-ui-border-color,#ccc));color:var(--treb-tab-bar-tab-color,var(--treb-ui-color,#fff));cursor:default;display:inline-flex;font-size:inherit;height:100%;justify-content:center;margin-right:-2px;overflow:hidden;padding:0 .75em;z-index:1}.treb-main.treb-main .treb-spreadsheet-footer .treb-add-tab:active,.treb-main.treb-main .treb-spreadsheet-footer .treb-add-tab:focus,.treb-main.treb-main .treb-spreadsheet-footer .treb-delete-tab:active,.treb-main.treb-main .treb-spreadsheet-footer .treb-delete-tab:focus,.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs>li:active,.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs>li:focus{z-index:3}.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs>li{overflow-x:hidden;white-space:nowrap}.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs>li[selected]{z-index:2}.treb-main.treb-main .treb-spreadsheet-footer .treb-scale-control{align-items:center;display:flex;flex-direction:row;font-size:inherit;height:2.2em;justify-content:center;position:relative;width:5em}.treb-main.treb-main .treb-spreadsheet-footer .treb-scale-control .treb-scale-input{background:transparent;border:1px solid transparent;border-radius:2px;color:inherit;font-family:inherit;font-size:inherit;padding:initial;text-align:center;transition:border-color .25s ease,background-color .25s ease;width:4em}.treb-main.treb-main .treb-spreadsheet-footer .treb-scale-control .treb-slider-container{accent-color:var(--treb-scale-slider-accent-color,undefined);align-items:center;background:var(--treb-scale-slider-background,#fff);border:1px solid var(--treb-scale-slider-border-color,var(--treb-ui-border-color,#ccc));display:flex;flex-direction:row;height:4em;justify-content:center;left:.5em;opacity:0;pointer-events:none;position:absolute;top:0;transform:rotate(-90deg);transform-origin:left top;transition:opacity .25s ease;width:10em;z-index:40}.treb-main.treb-main .treb-spreadsheet-footer .treb-scale-control .treb-scale-input:focus,.treb-main.treb-main .treb-spreadsheet-footer .treb-scale-control:hover .treb-scale-input{border-color:var(--treb-ui-border-color,#ccc)}.treb-main.treb-main .treb-spreadsheet-footer .treb-scale-control .treb-slider-container>input[type=range]{width:8.5em}.treb-main.treb-main .treb-spreadsheet-footer .treb-scale-control .treb-scale-input:focus+.treb-slider-container,.treb-main.treb-main .treb-spreadsheet-footer .treb-scale-control .treb-slider-container:focus-within,.treb-main.treb-main .treb-spreadsheet-footer .treb-scale-control:hover .treb-slider-container{opacity:.85;pointer-events:auto}.treb-main.treb-main .treb-spreadsheet-footer .treb-delete-tab{align-items:center;background:transparent;border:none;border-bottom-left-radius:5px;border-bottom-right-radius:5px;border-top:0;color:currentColor;cursor:default;display:inline-flex;flex-direction:row;font-size:inherit;margin-right:-2px;padding:.25em .75em;z-index:1}.treb-main.treb-main .treb-spreadsheet-footer .treb-delete-tab svg{height:1em;opacity:.75;pointer-events:none;transition:opacity .125s ease-in-out;width:1em}.treb-main.treb-main .treb-spreadsheet-footer .treb-delete-tab:hover svg{opacity:.75}.treb-main.treb-main .treb-spreadsheet-footer .treb-delete-tab path{stroke:currentColor;stroke-width:1.5px;stroke-linecap:round}.treb-main.treb-main .treb-spreadsheet-footer .treb-delete-tab:active,.treb-main.treb-main .treb-spreadsheet-footer .treb-delete-tab:focus{z-index:3}.treb-main.treb-main .treb-spreadsheet-footer .treb-stats-panel{margin-left:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.treb-main.treb-main .treb-spreadsheet-footer .treb-stats-panel>*{margin-left:.5em}.treb-main.treb-main .treb-spreadsheet-footer .treb-stats-panel .treb-stats-value{background:var(--treb-stats-value-background,#f8f8ff);border:1px solid var(--treb-stats-value-border-color,var(--treb-ui-border-color,#ddd));border-radius:3px;padding:0 .3em}.treb-main.treb-main .treb-grid .treb-overlay-container{margin:0;opacity:0;outline:none;padding:0;position:absolute;z-index:24}.treb-main.treb-main .treb-grid .treb-overlay-container.align-right .treb-overlay-inset{padding-right:3px;right:0;text-align:right}.treb-main.treb-main .treb-grid .treb-overlay-container.align-center .treb-overlay-inset{left:50%;text-align:center;transform:translateX(-50%)}.treb-main.treb-main .treb-grid .treb-overlay-inset{display:flex;flex-direction:column;height:100%;justify-content:flex-end;margin:0;min-width:100%;padding:0 4px;position:absolute}.treb-main.treb-main .treb-grid .treb-overlay-editor{outline:none;position:relative;white-space:nowrap;white-space:pre}.treb-main.treb-main .treb-grid .treb-overlay-editor.firefox:before{content:"\u200B"}.treb-main.treb-main .treb-buffer-canvas{display:none;position:absolute}.treb-main.treb-main .treb-spreadsheet-body{-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:transparent;display:flex;grid-area:2/1/3/2;overflow:hidden;position:relative;z-index:1}.treb-main.treb-main .treb-grid{-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:transparent;display:grid;flex-grow:1;grid-template-columns:100px auto;grid-template-rows:20px auto;order:2;outline:none;overflow:scroll;position:relative}.treb-main.treb-main .treb-grid .tile-cover.grid-cover{grid-area:2/2/3/3}.treb-main.treb-main .treb-grid .tile-cover.column-header-cover{grid-area:1/2/2/3;position:-webkit-sticky;position:sticky;top:0}.treb-main.treb-main .treb-grid .tile-cover.row-header-cover{grid-area:2/1/3/2;left:0;position:-webkit-sticky;position:sticky}.treb-main.treb-main .treb-grid .treb-grid-selection{grid-area:1/1/2/2}.treb-main.treb-main .treb-grid .treb-corner{grid-area:1/1/2/2;position:-webkit-sticky;position:sticky}.treb-main.treb-main .treb-grid .treb-left-header{display:grid;grid-area:2/1/3/2;grid-template-columns:auto;grid-template-rows:auto;position:-webkit-sticky;position:sticky}.treb-main.treb-main .treb-grid .treb-top-header{display:grid;grid-area:1/2/2/3;grid-template-columns:auto;grid-template-rows:auto;position:-webkit-sticky;position:sticky}.treb-main.treb-main .treb-grid .treb-contents{display:grid;grid-area:2/2/3/3;grid-template-columns:auto;grid-template-rows:auto}.treb-main.treb-main .treb-grid.safari::-webkit-scrollbar{-webkit-appearance:none;height:7px;width:7px}.treb-main.treb-main .treb-grid.safari::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.25);border-radius:4px;-webkit-box-shadow:0 0 1px hsla(0,0%,100%,.5)}.treb-main.treb-main .treb-grid canvas{background:transparent;border:0;margin:0;padding:0}.treb-main.treb-main .treb-grid .nub-select{cursor:crosshair}.treb-main.treb-main .treb-grid .link-pointer{cursor:pointer}.treb-main.treb-main .treb-grid .mock-selection-node{background:red;left:-100px;position:fixed;top:-100px}.treb-main.treb-main .treb-grid .tile-cover{background:transparent;position:relative;z-index:14}.treb-main.treb-main .treb-grid .tile-cover.column-header-cover{z-index:22}.treb-main.treb-main .treb-grid .tile-cover.column-header-cover.resize{cursor:col-resize}.treb-main.treb-main .treb-grid .tile-cover.row-header-cover{z-index:22}.treb-main.treb-main .treb-grid .tile-cover.row-header-cover.resize{cursor:row-resize}.treb-main.treb-main .treb-grid .frozen-annotation-container,.treb-main.treb-main .treb-grid .treb-annotation-container{left:0;pointer-events:none;position:absolute;top:0;z-index:16}.treb-main.treb-main .treb-grid .frozen-annotation-container .annotation,.treb-main.treb-main .treb-grid .treb-annotation-container .annotation{background:hsla(0,0%,100%,.5);border:1px solid #999;overflow:hidden;pointer-events:auto;position:absolute;z-index:1}.treb-main.treb-main .treb-grid .frozen-annotation-container .annotation .annotation-content,.treb-main.treb-main .treb-grid .treb-annotation-container .annotation .annotation-content{font-family:inherit;font-size:inherit;height:100%;left:0;position:absolute;top:0;width:100%;z-index:1}.treb-main.treb-main .treb-grid .frozen-annotation-container .annotation .annotation-move-target,.treb-main.treb-main .treb-grid .treb-annotation-container .annotation .annotation-move-target{cursor:move;height:10%;left:0;min-height:14px;position:absolute;top:0;width:100%;z-index:2}.treb-main.treb-main .treb-grid .frozen-annotation-container .annotation .annotation-resize-target,.treb-main.treb-main .treb-grid .treb-annotation-container .annotation .annotation-resize-target{bottom:0;cursor:nwse-resize;height:10%;min-height:14px;min-width:14px;position:absolute;right:0;width:10%;z-index:3}.treb-main.treb-main .treb-grid .frozen-annotation-container .annotation.clone-focus,.treb-main.treb-main .treb-grid .frozen-annotation-container .annotation.retain-focus,.treb-main.treb-main .treb-grid .frozen-annotation-container .annotation:focus,.treb-main.treb-main .treb-grid .treb-annotation-container .annotation.clone-focus,.treb-main.treb-main .treb-grid .treb-annotation-container .annotation.retain-focus,.treb-main.treb-main .treb-grid .treb-annotation-container .annotation:focus{box-shadow:0 0 0 3px rgba(14,165,233,.33)}.treb-main.treb-main .treb-grid .frozen-annotation-container .move-buffer,.treb-main.treb-main .treb-grid .treb-annotation-container .move-buffer{border:1px solid red;cursor:move;height:10%;left:0;position:absolute;top:0;width:100%}.treb-main.treb-main .treb-grid .treb-grid-selection{background:transparent;position:absolute;-moz-transform:scale(1);z-index:10}.treb-main.treb-main .treb-grid .frozen-selection{overflow:hidden;pointer-events:none;position:absolute;-moz-transform:scale(1);transition:background .33s;z-index:12}.treb-main.treb-main .treb-grid .frozen-selection.frozen-selection-rows{border-bottom:1px solid transparent}.treb-main.treb-main .treb-grid .frozen-selection.frozen-selection-columns{border-right:1px solid transparent}.treb-main.treb-main .treb-grid .frozen-annotation-container{height:100%;left:0;overflow:hidden;position:absolute;top:0;width:100%}.treb-main.treb-main .treb-grid .treb-corner{left:0;top:0;z-index:20}.treb-main.treb-main .treb-grid .treb-corner canvas{left:0;pointer-events:none;position:absolute;top:0}.treb-main.treb-main .treb-grid .treb-left-header{left:0;pointer-events:none;z-index:18}.treb-main.treb-main .treb-grid .treb-top-header{pointer-events:none;top:0;z-index:18}.treb-main.treb-main .treb-grid .treb-contents{height:2000px;width:2000px}.treb-main.treb-main{--alternate-selection-color-1:#fbb13c;--alternate-selection-color-2:#40c040;--alternate-selection-color-3:#b66d0d;--alternate-selection-color-4:#2176ae;--alternate-selection-color-5:#fe6847;--text-reference-color-1:#e08a00;--text-reference-color-2:#3aad3a;--text-reference-color-3:#b66d0d;--text-reference-color-4:#2176ae;--text-reference-color-5:#fe2f01}.treb-main.treb-main:focus-within .treb-grid-selection .primary-selection,.treb-main.treb-main:focus-within .treb-header-overlay{color:var(--treb-selection-color,#4caaf1)}.treb-main.treb-main .theme-color-1{color:var(--treb-theme-color-1,#e7e6e6)}.treb-main.treb-main .theme-color-2{color:var(--treb-theme-color-2,#44546a)}.treb-main.treb-main .theme-color-3{color:var(--treb-theme-color-3,#4472c4)}.treb-main.treb-main .theme-color-4{color:var(--treb-theme-color-4,#ed7d31)}.treb-main.treb-main .theme-color-5{color:var(--treb-theme-color-5,#a5a5a5)}.treb-main.treb-main .theme-color-6{color:var(--treb-theme-color-6,#ffc000)}.treb-main.treb-main .theme-color-7{color:var(--treb-theme-color-7,#5b9bd5)}.treb-main.treb-main .theme-color-8{color:var(--treb-theme-color-8,#70ad47)}.treb-main.treb-main .theme-color-9{color:var(--treb-theme-color-9,#0563c1)}.treb-main.treb-main .theme-color-10{color:var(--treb-theme-color-10,#954f72)}.treb-main.treb-main .treb-offset-dark{color:#000}.treb-main.treb-main .treb-offset-light{color:#fff}.treb-main.treb-main .note-marker{background:var(--treb-note-marker-color,#6fab20)}.treb-main.treb-main .grid-headers{stroke:var(--treb-grid-header-grid-color,var(--treb-grid-grid-color,#ccccd4));background:var(--treb-grid-header-background,#eeeef2);color:var(--treb-grid-header-color,var(--treb-grid-default-color,#666));font-family:var(--treb-grid-header-font-family,inherit);font-size:var(--treb-grid-header-font-size,10pt);font-style:var(--treb-grid-header-font-style,normal);font-weight:var(--treb-grid-header-font-weight,normal)}.treb-main.treb-main .grid-cells{stroke:var(--treb-grid-grid-color,#ccccd4);background:var(--treb-grid-background,#fff);color:var(--treb-grid-default-color,inherit);font-family:var(--treb-grid-font-family,inherit);font-size:var(--treb-grid-font-size,14px)}.treb-main.treb-main .frozen-selection.highlight-area{background:rgba(87,184,255,.25);border-bottom-color:#2176ae;border-left-color:#2176ae}.treb-main.treb-main .treb-autocomplete-tooltip{background:var(--treb-autocomplete-tooltip-background,#fffbb5);border:1px solid var(--treb-autocomplete-tooltip-border-color,unset);border-radius:2px;color:var(--treb-autocomplete-tooltip-color,inherit);font-size:14px;line-height:normal;margin:4px 0;padding:3px 8px}.treb-main.treb-main .treb-autocomplete-tooltip .active-argument{font-weight:700}.treb-main.treb-main .treb-autocomplete-tooltip .function-description{font-style:italic}.treb-main.treb-main .treb-autocomplete{background:var(--treb-autocomplete-background,#fff);border:1px solid var(--treb-autocomplete-border-color,var(--treb-ui-border-color,#ccc));border-radius:2px;box-shadow:0 1px 4px 2px hsla(0,0%,43%,.2);font-size:14px}.treb-main.treb-main .treb-autocomplete li{color:var(--treb-autocomplete-entry-color,#333)}.treb-main.treb-main .treb-autocomplete li a.selected{background:var(--treb-autocomplete-selected-entry-background,#2e8dd6);color:var(--treb-autocomplete-selected-entry-color,#fff)}.treb-main.treb-main .treb-header-overlay{stroke:none;color:var(--treb-selection-color-unfocused,var(--treb-selection-color,#4caaf1))}.treb-main.treb-main .treb-header-overlay .treb-overlay{fill:#000;stroke:none;opacity:.05}.treb-main.treb-main .treb-header-overlay .treb-highlight{fill:currentColor}.treb-main.treb-main .treb-editor-container>div [data-highlight-index="1"],.treb-main.treb-main .treb-overlay-editor [data-highlight-index="1"]{color:var(--text-reference-color-1)}.treb-main.treb-main .treb-editor-container>div [data-highlight-index="2"],.treb-main.treb-main .treb-overlay-editor [data-highlight-index="2"]{color:var(--text-reference-color-2)}.treb-main.treb-main .treb-editor-container>div [data-highlight-index="3"],.treb-main.treb-main .treb-overlay-editor [data-highlight-index="3"]{color:var(--text-reference-color-3)}.treb-main.treb-main .treb-editor-container>div [data-highlight-index="4"],.treb-main.treb-main .treb-overlay-editor [data-highlight-index="4"]{color:var(--text-reference-color-4)}.treb-main.treb-main .treb-editor-container>div [data-highlight-index="5"],.treb-main.treb-main .treb-overlay-editor [data-highlight-index="5"]{color:var(--text-reference-color-5)}.treb-main.treb-main .treb-editor-container>div span.highlight-1,.treb-main.treb-main .treb-overlay-editor span.highlight-1{color:var(--text-reference-color-1)}.treb-main.treb-main .treb-editor-container>div span.highlight-2,.treb-main.treb-main .treb-overlay-editor span.highlight-2{color:var(--text-reference-color-2)}.treb-main.treb-main .treb-editor-container>div span.highlight-3,.treb-main.treb-main .treb-overlay-editor span.highlight-3{color:var(--text-reference-color-3)}.treb-main.treb-main .treb-editor-container>div span.highlight-4,.treb-main.treb-main .treb-overlay-editor span.highlight-4{color:var(--text-reference-color-4)}.treb-main.treb-main .treb-editor-container>div span.highlight-5,.treb-main.treb-main .treb-overlay-editor span.highlight-5{color:var(--text-reference-color-5)}.treb-main.treb-main .frozen-selection .selection,.treb-main.treb-main .treb-grid-selection .selection{stroke-width:var(--treb-selection-stroke-width,2px)}.treb-main.treb-main .frozen-selection .selection .outline,.treb-main.treb-main .treb-grid-selection .selection .outline{stroke:currentColor;fill:none}.treb-main.treb-main .frozen-selection .selection .fill,.treb-main.treb-main .treb-grid-selection .selection .fill{stroke:none;fill:currentColor;opacity:var(--treb-selection-fill-opacity,.1)}.treb-main.treb-main .frozen-selection .alternate-selection,.treb-main.treb-main .treb-grid-selection .alternate-selection{stroke-dasharray:var(--treb-alternate-selection-dasharray,3 2)}.treb-main.treb-main .frozen-selection .alternate-selection:nth-of-type(1n),.treb-main.treb-main .treb-grid-selection .alternate-selection:nth-of-type(1n){color:var(--alternate-selection-color-1)}.treb-main.treb-main .frozen-selection .alternate-selection:nth-of-type(2n),.treb-main.treb-main .treb-grid-selection .alternate-selection:nth-of-type(2n){color:var(--alternate-selection-color-2)}.treb-main.treb-main .frozen-selection .alternate-selection:nth-of-type(3n),.treb-main.treb-main .treb-grid-selection .alternate-selection:nth-of-type(3n){color:var(--alternate-selection-color-3)}.treb-main.treb-main .frozen-selection .alternate-selection:nth-of-type(4n),.treb-main.treb-main .treb-grid-selection .alternate-selection:nth-of-type(4n){color:var(--alternate-selection-color-4)}.treb-main.treb-main .frozen-selection .alternate-selection:nth-of-type(5n),.treb-main.treb-main .treb-grid-selection .alternate-selection:nth-of-type(5n){color:var(--alternate-selection-color-5)}.treb-main.treb-main .frozen-selection .primary-selection,.treb-main.treb-main .treb-grid-selection .primary-selection{color:var(--treb-selection-color-unfocused,var(--treb-selection-color,#4caaf1))}.treb-main.treb-main .frozen-selection .primary-selection .nub,.treb-main.treb-main .treb-grid-selection .primary-selection .nub{stroke:#fff;fill:currentColor;stroke-width:1px}.treb-main.treb-main .treb-tooltip{background:var(--treb-resize-tooltip-background,rgba(0,0,0,.8));border-color:var(--treb-resize-tooltip-background,rgba(0,0,0,.8));color:var(--treb-resize-tooltip-color,#fff);font-size:11pt}.treb-main.treb-main .treb-spreadsheet-footer .treb-add-tab,.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs>li{background:var(--treb-tab-bar-tab-background,#eeeef2);color:var(--treb-tab-bar-tab-color,var(--treb-ui-color,inherit))}.treb-main.treb-main .treb-spreadsheet-footer .treb-add-tab[selected],.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs>li[selected]{background:var(--treb-tab-bar-active-tab-background,#fff);color:var(--treb-tab-bar-active-tab-color,var(--treb-ui-color,inherit))}.treb-main.treb-main .treb-formula-bar .treb-address-label,.treb-main.treb-main .treb-formula-bar .treb-editor-container{background:var(--treb-formula-bar-background,transparent);color:var(--treb-formula-bar-color,var(--treb-ui-color,inherit))}.treb-main.treb-main .treb-formula-bar .treb-address-label[locked],.treb-main.treb-main .treb-formula-bar .treb-editor-container[locked]{background:var(--treb-formula-bar-locked-background,#eef4fc);position:relative}.treb-main.treb-main .treb-formula-bar .treb-address-label[locked]:after,.treb-main.treb-main .treb-formula-bar .treb-editor-container[locked]:after{--icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath fill='currentColor' d='M416 224h-16v-80C400 65 335 0 256 0S112 65 112 144v80H96c-35 0-64 29-64 64v160c0 35 29 64 64 64h320c35 0 64-29 64-64V288c0-35-29-64-64-64Zm-240-80c0-44 36-80 80-80s80 36 80 80v80H176v-80Z'/%3E%3C/svg%3E");background:var(--treb-formula-bar-lock-icon-color,currentColor);content:"";height:12px;mask-image:var(--icon);-webkit-mask-image:var(--icon);mask-position:center;-webkit-mask-position:center;mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat;mask-size:12px 12px;-webkit-mask-size:12px 12px;opacity:.4;position:absolute;right:2px;top:2px;width:12px}.treb-main.treb-main.treb-ua-windows .grid-cells{font-family:var(--treb-grid-font-family-windows,var(--treb-grid-font-family,"Calibri","BlinkMacSystemFont","Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue","sans-serif"));font-size:var(--treb-grid-font-size-windows,var(--treb-grid-font-size,12pt))}.treb-main.treb-main.treb-ua-osx .grid-cells{font-family:var(--treb-grid-font-family-osx,var(--treb-grid-font-family,inherit));font-size:var(--treb-grid-font-size-osx,var(--treb-grid-font-size,10pt))}.treb-dark-theme{--treb-autocomplete-background:#333;--treb-autocomplete-border-color:#fff;--treb-autocomplete-entry-color:#fff;--treb-autocomplete-selected-entry-background:darkred;--treb-autocomplete-tooltip-background:darkred;--treb-autocomplete-tooltip-border-color:#fff;--treb-autocomplete-tooltip-color:#fff;--treb-chart-background:#000;--treb-chart-grid-color:#976;--treb-chart-text-color:#fff;--treb-dialog-background:#000;--treb-dialog-color:#fff;--treb-dropdown-background:#000;--treb-dropdown-border-color:#fff;--treb-dropdown-caret-active-background:darkred;--treb-dropdown-caret-background:#444;--treb-dropdown-caret-border-color:#fff;--treb-dropdown-caret-color:#fff;--treb-dropdown-color:#fff;--treb-dropdown-selected-background:darkred;--treb-grid-background:#000;--treb-grid-default-color:#fff;--treb-grid-grid-color:#444;--treb-grid-header-background:#444;--treb-grid-header-grid-color:#000;--treb-note-background:#333;--treb-note-border-color:#aaa;--treb-note-color:#fff;--treb-note-marker-color:pink;--treb-resize-tooltip-background:#fff;--treb-resize-tooltip-color:#000;--treb-scale-slider-accent-color:#fff;--treb-scale-slider-background:#333;--treb-scale-slider-border-color:#aaa;--treb-selection-color:#ff0;--treb-selection-fill-opacity:.2;--treb-sidebar-button-background:#000;--treb-sidebar-button-border-color:#888;--treb-stats-value-background:#223;--treb-tab-bar-active-tab-background:#444;--treb-tab-bar-tab-background:#000;--treb-tab-bar-tab-color:#fff;--treb-theme-color-1:#222;--treb-theme-color-2:#ddd;--treb-toolbar-active-button-background:#555;--treb-toolbar-button-background:#000;--treb-toolbar-hover-button-background:#444;--treb-ui-color:#fff;--treb-table-header-background:#334;--treb-table-odd-background:#122;--treb-table-header-font-weight:700;--treb-table-header-border-top:#889;--treb-table-header-border-bottom:#889;--treb-table-footer-border-bottom:#889;--treb-table-odd-border-top:#889;--treb-table-odd-border-bottom:#889;--treb-table-even-border-top:#889;--treb-table-even-border-bottom:#889;--treb-table-total-border-top:#889;--treb-table-total-border-bottom:#889;--treb-table-total-background:#334;--treb-table-total-font-weight:700;--treb-color-scheme:dark;--treb-resize-handle-color:#add8e6;--treb-resize-frame-color:#add8e6;--treb-formula-bar-locked-background:#234;--treb-grid-background:#1e1e1e;--treb-grid-header-background:#565656;--treb-grid-header-color:#ddd;--treb-tab-bar-active-tab-background:field;--treb-tab-bar-tab-background:transparent;--treb-tab-bar-tab-border-color:#444;--treb-ui-border-color:#aaa;--treb-toolbar-button-background:#565656;--treb-toolbar-button-background:#212121;--treb-toolbar-border-color:#434343;--treb-toolbar-color:#ddd}@media (prefers-color-scheme:dark){.treb-light-dark-theme{--treb-autocomplete-background:#333;--treb-autocomplete-border-color:#fff;--treb-autocomplete-entry-color:#fff;--treb-autocomplete-selected-entry-background:darkred;--treb-autocomplete-tooltip-background:darkred;--treb-autocomplete-tooltip-border-color:#fff;--treb-autocomplete-tooltip-color:#fff;--treb-chart-background:#000;--treb-chart-grid-color:#976;--treb-chart-text-color:#fff;--treb-dialog-background:#000;--treb-dialog-color:#fff;--treb-dropdown-background:#000;--treb-dropdown-border-color:#fff;--treb-dropdown-caret-active-background:darkred;--treb-dropdown-caret-background:#444;--treb-dropdown-caret-border-color:#fff;--treb-dropdown-caret-color:#fff;--treb-dropdown-color:#fff;--treb-dropdown-selected-background:darkred;--treb-grid-background:#000;--treb-grid-default-color:#fff;--treb-grid-grid-color:#444;--treb-grid-header-background:#444;--treb-grid-header-grid-color:#000;--treb-note-background:#333;--treb-note-border-color:#aaa;--treb-note-color:#fff;--treb-note-marker-color:pink;--treb-resize-tooltip-background:#fff;--treb-resize-tooltip-color:#000;--treb-scale-slider-accent-color:#fff;--treb-scale-slider-background:#333;--treb-scale-slider-border-color:#aaa;--treb-selection-color:#ff0;--treb-selection-fill-opacity:.2;--treb-sidebar-button-background:#000;--treb-sidebar-button-border-color:#888;--treb-stats-value-background:#223;--treb-tab-bar-active-tab-background:#444;--treb-tab-bar-tab-background:#000;--treb-tab-bar-tab-color:#fff;--treb-theme-color-1:#222;--treb-theme-color-2:#ddd;--treb-toolbar-active-button-background:#555;--treb-toolbar-button-background:#000;--treb-toolbar-hover-button-background:#444;--treb-ui-color:#fff;--treb-table-header-background:#334;--treb-table-odd-background:#122;--treb-table-header-font-weight:700;--treb-table-header-border-top:#889;--treb-table-header-border-bottom:#889;--treb-table-footer-border-bottom:#889;--treb-table-odd-border-top:#889;--treb-table-odd-border-bottom:#889;--treb-table-even-border-top:#889;--treb-table-even-border-bottom:#889;--treb-table-total-border-top:#889;--treb-table-total-border-bottom:#889;--treb-table-total-background:#334;--treb-table-total-font-weight:700;--treb-color-scheme:dark;--treb-resize-handle-color:#add8e6;--treb-resize-frame-color:#add8e6;--treb-formula-bar-locked-background:#234;--treb-grid-background:#1e1e1e;--treb-grid-header-background:#565656;--treb-grid-header-color:#ddd;--treb-tab-bar-active-tab-background:field;--treb-tab-bar-tab-background:transparent;--treb-tab-bar-tab-border-color:#444;--treb-ui-border-color:#aaa;--treb-toolbar-button-background:#565656;--treb-toolbar-button-background:#212121;--treb-toolbar-border-color:#434343;--treb-toolbar-color:#ddd}}.treb-chart,.treb-main.treb-main .treb-chart{background:var(--treb-chart-background,#fff)}.treb-chart .series-1{color:var(--treb-chart-color-series-1,#80b1d3)}.treb-chart .series-2{color:var(--treb-chart-color-series-2,#8dd3c7)}.treb-chart .series-3{color:var(--treb-chart-color-series-3,#bebada)}.treb-chart .series-4{color:var(--treb-chart-color-series-4,#fb8072)}.treb-chart .series-5{color:var(--treb-chart-color-series-5,#fdb462)}.treb-chart .series-6{color:var(--treb-chart-color-series-6,#b3de69)}.treb-chart .series-7{color:var(--treb-chart-color-series-7,#fccde5)}.treb-chart .series-8{color:var(--treb-chart-color-series-8,#d9d9d9)}.treb-chart .series-9{color:var(--treb-chart-color-series-9,#bc80bd)}.treb-chart .series-10{color:var(--treb-chart-color-series-10,#ccebc5)}.treb-chart .series-11{color:var(--treb-chart-color-series-11,#ffed6f)}.treb-chart .series-12{color:var(--treb-chart-color-series-12,#ffffb3)}.treb-chart .chart-title{font-size:1.4em}.treb-chart .axis-group{font-size:.9em}.treb-chart text{fill:var(--treb-chart-text-color,#000);stroke:none}.treb-chart .legend{font-size:1.05em}.treb-chart .legend rect{fill:currentColor}.treb-chart .chart-grid,.treb-chart .chart-ticks{stroke:var(--treb-chart-grid-color,#ddd)}.treb-chart .label-target{stroke:none;fill:transparent}.treb-chart path.label-target{transition:fill .2s}.treb-chart path.label-target:hover{fill:rgba(0,0,0,.15)}.treb-chart .data-label{opacity:0;pointer-events:none;transition:opacity .2s ease-in-out}.treb-chart .data-label text{fill:#fff}.treb-chart .data-label path{fill:#000}.treb-chart .data-label .marker-highlight{fill:currentColor;stroke:none}.treb-chart .label-target:hover+.data-label{opacity:1}.treb-chart .chart-line{stroke:currentColor;fill:none;stroke-width:2}.treb-chart .chart-area .line{stroke:currentColor;stroke-width:2px;fill:none}.treb-chart .chart-area .fill{fill:currentColor;opacity:.5}.treb-chart .scatter-plot{stroke-width:3;fill:none;stroke:currentColor}.treb-chart .scatter-plot .fill{fill:currentColor;stroke:none;opacity:.5}.treb-chart .scatter-plot .marker{stroke-width:2.5px;fill:#fff;transition:stroke-width .15s ease-in}.treb-chart .scatter-plot .marker:hover{stroke-width:5px}.treb-chart .donut path{fill:currentColor}.treb-chart .donut path.callout{fill:none;stroke:#999;stroke-dasharray:2 2}.treb-chart .donut text.callout-label{font-size:1em}.treb-chart .chart-column{fill:currentColor;stroke:none}.treb-chart .mc-correlation{stroke:currentColor;stroke-width:1}.treb-main.treb-main{--treb-icon-svg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' width='153.073' height='133.742' viewBox='0.673 4.629 153.073 133.742'%3E%3ClinearGradient id='a' x1='.673' x2='153.746' y1='71.5' y2='71.5' gradientUnits='userSpaceOnUse'%3E%3Cstop offset='0' style='stop-color:%235cb5ff'/%3E%3Cstop offset='1' style='stop-color:%230059b9'/%3E%3C/linearGradient%3E%3Cpath fill='url(%23a)' d='M91.656 28.313c-4.989 0-17.266 6.249-21.305 8.504-2.344-2.473-2.603-6.162-3.036-10.933-2.344 2.429-.824 9.806 0 12.496-10.238 7.635-18.83 15.531-27.597 24.471-2.992-4.729-5.031-8.593-5.726-17.183-3.038 6.509.867 15.057 3.121 19.784-9.674 12.193-19.263 25.297-27.03 37.834-35.488-74.973 72.853-119.534 143.663-88.855-43.867 29.199-55.192 121.353-132.248 96.843-5.423 7.809-9.069 18.006-13.538 27.072-3.73.263-6.334-1.646-7.288-3.12 7.506-18.181 17.183-34.192 27.075-49.984 10.718.306 21.346.478 30.198-1.04-7.681-2.038-16.877-.78-26.032-3.123C37.51 70.361 45.667 62.203 53.78 54.004c8.808.782 17.746 3.21 27.074 1.041-8.111-1.431-15.966-1.952-22.909-4.165 7.594-8.378 22.777-17.491 33.711-22.567z'/%3E%3C/svg%3E")}.treb-main.treb-main .treb-icon-64{background:no-repeat 50%/100% var(--treb-icon-svg);height:64px;width:64px}.treb-main.treb-main .treb-dialog-mask{align-items:center;display:flex;height:100%;justify-content:center;left:0;opacity:0;pointer-events:none;position:absolute;top:0;transition:opacity .2s;width:100%;z-index:1000}.treb-main.treb-main .treb-embed-dialog{align-items:center;background:var(--treb-dialog-background,#fff);border:1px solid var(--treb-dialog-border-color,var(--treb-ui-border-color,#999));border-radius:3px;border-top:3px solid #999;box-shadow:0 4px 6px -4px rgba(0,0,0,.3);color:var(--treb-dialog-color,#000);display:flex;flex-direction:row;font-size:var(--treb-dialog-font-size,16px);line-height:1.6em;padding:1rem;position:relative;text-align:left}.treb-main.treb-main .treb-embed-dialog>*{display:none}.treb-main.treb-main .treb-embed-dialog>div{position:relative}.treb-main.treb-main .treb-embed-dialog>:nth-child(2){display:block;flex-grow:1;padding:2px 20px 2px 12px}.treb-main.treb-main .treb-embed-dialog>.treb-close-box{background:transparent;border:0;padding:4px;position:absolute;right:0;top:0}.treb-main.treb-main .treb-embed-dialog>.treb-close-box>svg{fill:#73828c;cursor:default;height:20px;width:20px}.treb-main.treb-main .treb-embed-dialog>.treb-close-box>svg:active,.treb-main.treb-main .treb-embed-dialog>.treb-close-box>svg:hover{fill:#049cfb}.treb-main.treb-main .treb-embed-dialog small{display:block;font-size:.9em}.treb-main.treb-main .treb-embed-dialog a{color:inherit;text-decoration:none}.treb-main.treb-main .treb-embed-dialog a:active,.treb-main.treb-main .treb-embed-dialog a:hover{color:#049cfb}.treb-main.treb-main .treb-embed-dialog.dialog-type-success{border-top-color:#44d926;border-top-width:3px}.treb-main.treb-main .treb-embed-dialog.dialog-type-about{border-top-color:#009dff;border-top-width:3px}.treb-main.treb-main .treb-embed-dialog.dialog-type-error{border-top-color:#f92f06;border-top-width:3px}.treb-main.treb-main .treb-embed-dialog.dialog-type-info{border-top-color:#009dff;border-top-width:3px}.treb-main.treb-main .treb-embed-dialog .treb-embed-dialog-message,.treb-main.treb-main .treb-embed-dialog .treb-embed-dialog-title{white-space:pre}.treb-main.treb-main .treb-embed-dialog .treb-embed-progress-container{border:1px solid #ddd;height:6px;margin:1rem auto .5rem;position:relative;width:100%}.treb-main.treb-main .treb-embed-dialog .treb-embed-progress-bar{background:#52880b;height:100%;left:0;position:relative;top:0}.treb-main.treb-main .treb-spinner{align-items:center;background:transparent;display:flex;height:100%;justify-content:center;left:0;opacity:0;position:absolute;top:0;transition:visibility .25s,opacity .25s ease;visibility:collapse;width:100%;z-index:1000}.treb-main.treb-main .treb-spinner.visible{opacity:1;transition:visibility 0s,opacity 1s ease;visibility:visible}.treb-main.treb-main .treb-spinner>div{display:inline-block;height:80px;position:relative;width:80px}.treb-main.treb-main .treb-spinner>div div{animation:treb-spinner 1.2s cubic-bezier(.5,0,.5,1) infinite;border:8px solid #fff;border-color:var(--treb-spinner-color,currentColor) transparent transparent transparent;border-radius:50%;box-sizing:border-box;display:block;height:64px;margin:8px;position:absolute;width:64px}.treb-main.treb-main .treb-spinner>div div:first-child{animation-delay:-.45s}.treb-main.treb-main .treb-spinner>div div:nth-child(2){animation-delay:-.3s}.treb-main.treb-main .treb-spinner>div div:nth-child(3){animation-delay:-.15s}@keyframes treb-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.treb-main.treb-main{--icon-x:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z"/></svg>');--icon-popout:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28"><path fill="currentColor" d="M22 14.5v5c0 2.484-2.016 4.5-4.5 4.5h-13A4.502 4.502 0 0 1 0 19.5v-13C0 4.016 2.016 2 4.5 2h11c.281 0 .5.219.5.5v1c0 .281-.219.5-.5.5h-11A2.507 2.507 0 0 0 2 6.5v13C2 20.875 3.125 22 4.5 22h13c1.375 0 2.5-1.125 2.5-2.5v-5c0-.281.219-.5.5-.5h1c.281 0 .5.219.5.5zM28 1v8c0 .547-.453 1-1 1a.99.99 0 0 1-.703-.297l-2.75-2.75L13.36 17.14c-.094.094-.234.156-.359.156s-.266-.063-.359-.156l-1.781-1.781c-.094-.094-.156-.234-.156-.359s.063-.266.156-.359L21.048 4.454l-2.75-2.75a.996.996 0 0 1-.297-.703c0-.547.453-1 1-1h8c.547 0 1 .453 1 1z"/></svg>');--icon-toolbar:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 28"><path fill="currentColor" d="M5.5 22v2H0v-2h5.5zm5.5-2c.547 0 1 .453 1 1v4c0 .547-.453 1-1 1H7c-.547 0-1-.453-1-1v-4c0-.547.453-1 1-1h4zm2.5-6v2H0v-2h13.5zm-10-8v2H0V6h3.5zM24 22v2H12.5v-2H24zM9 4c.547 0 1 .453 1 1v4c0 .547-.453 1-1 1H5c-.547 0-1-.453-1-1V5c0-.547.453-1 1-1h4zm10 8c.547 0 1 .453 1 1v4c0 .547-.453 1-1 1h-4c-.547 0-1-.453-1-1v-4c0-.547.453-1 1-1h4zm5 2v2h-3.5v-2H24zm0-8v2H10.5V6H24z"/></svg>');--icon-export:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 26 28"><path fill="currentColor" d="M20 21c0-.547-.453-1-1-1s-1 .453-1 1 .453 1 1 1 1-.453 1-1zm4 0c0-.547-.453-1-1-1s-1 .453-1 1 .453 1 1 1 1-.453 1-1zm2-3.5v5a1.5 1.5 0 0 1-1.5 1.5h-23A1.5 1.5 0 0 1 0 22.5v-5A1.5 1.5 0 0 1 1.5 16h7.266l2.109 2.125c.578.562 1.328.875 2.125.875s1.547-.313 2.125-.875L17.25 16h7.25a1.5 1.5 0 0 1 1.5 1.5zm-5.078-8.891a.984.984 0 0 1-.219 1.094l-7 7c-.187.203-.453.297-.703.297s-.516-.094-.703-.297l-7-7a.984.984 0 0 1-.219-1.094C5.234 8.25 5.594 8 6 8h4V1c0-.547.453-1 1-1h4c.547 0 1 .453 1 1v7h4c.406 0 .766.25.922.609z"/></svg>');--icon-reset:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 28"><path fill="currentColor" d="M23.609 16.5c0 .031 0 .078-.016.109C22.265 22.14 17.702 26 11.937 26c-3.047 0-6-1.203-8.219-3.313l-2.016 2.016A.996.996 0 0 1 .999 25c-.547 0-1-.453-1-1v-7c0-.547.453-1 1-1h7c.547 0 1 .453 1 1a.99.99 0 0 1-.297.703l-2.141 2.141A7.985 7.985 0 0 0 11.998 22a7.976 7.976 0 0 0 6.813-3.813c.375-.609.562-1.203.828-1.828.078-.219.234-.359.469-.359h3c.281 0 .5.234.5.5zM24 4v7c0 .547-.453 1-1 1h-7c-.547 0-1-.453-1-1a.99.99 0 0 1 .297-.703l2.156-2.156A8.036 8.036 0 0 0 12 6a7.976 7.976 0 0 0-6.813 3.813c-.375.609-.562 1.203-.828 1.828-.078.219-.234.359-.469.359H.781a.503.503 0 0 1-.5-.5v-.109C1.625 5.844 6.234 2 12 2c3.063 0 6.047 1.219 8.266 3.313l2.031-2.016A.996.996 0 0 1 23 3c.547 0 1 .453 1 1z"/></svg>');--icon-about:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 28"><path fill="currentColor" d="M14 21.5v-3c0-.281-.219-.5-.5-.5h-3c-.281 0-.5.219-.5.5v3c0 .281.219.5.5.5h3c.281 0 .5-.219.5-.5zM18 11c0-2.859-3-5-5.688-5-2.547 0-4.453 1.094-5.797 3.328a.49.49 0 0 0 .125.656l2.063 1.563a.477.477 0 0 0 .297.094.498.498 0 0 0 .391-.187c.734-.938 1.047-1.219 1.344-1.437.266-.187.781-.375 1.344-.375 1 0 1.922.641 1.922 1.328 0 .812-.422 1.219-1.375 1.656-1.109.5-2.625 1.797-2.625 3.313v.562c0 .281.219.5.5.5h3c.281 0 .5-.219.5-.5 0-.359.453-1.125 1.188-1.547 1.188-.672 2.812-1.578 2.812-3.953zm6 3c0 6.625-5.375 12-12 12S0 20.625 0 14 5.375 2 12 2s12 5.375 12 12z"/></svg>');--icon-chevron-left:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 21 28"><path fill="currentColor" d="M18.297 4.703 10 13l8.297 8.297a.99.99 0 0 1 0 1.406l-2.594 2.594a.99.99 0 0 1-1.406 0L2.703 13.703a.99.99 0 0 1 0-1.406L14.297.703a.99.99 0 0 1 1.406 0l2.594 2.594a.99.99 0 0 1 0 1.406z"/></svg>');--icon-chevron-right:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19 28"><path fill="currentColor" d="M17.297 13.703 5.703 25.297a.99.99 0 0 1-1.406 0l-2.594-2.594a.99.99 0 0 1 0-1.406L10 13 1.703 4.703a.99.99 0 0 1 0-1.406L4.297.703a.99.99 0 0 1 1.406 0l11.594 11.594a.99.99 0 0 1 0 1.406z"/></svg>');--icon-revert:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 28"><path fill="currentColor" d="M24 14c0 6.609-5.391 12-12 12a11.972 11.972 0 0 1-9.234-4.328.52.52 0 0 1 .031-.672l2.141-2.156a.599.599 0 0 1 .391-.141.51.51 0 0 1 .359.187A7.91 7.91 0 0 0 12 21.999c4.406 0 8-3.594 8-8s-3.594-8-8-8A7.952 7.952 0 0 0 6.563 8.14l2.141 2.156a.964.964 0 0 1 .219 1.078 1.002 1.002 0 0 1-.922.625h-7c-.547 0-1-.453-1-1v-7c0-.406.25-.766.625-.922a.964.964 0 0 1 1.078.219l2.031 2.016c2.203-2.078 5.187-3.313 8.266-3.313 6.609 0 12 5.391 12 12zM14 9.5v7c0 .281-.219.5-.5.5h-5a.494.494 0 0 1-.5-.5v-1c0-.281.219-.5.5-.5H12V9.5c0-.281.219-.5.5-.5h1c.281 0 .5.219.5.5z"/></svg>');--icon-text-align-left:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path fill-rule="evenodd" d="M2 12.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm0-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5zm0-3a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm0-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5z"/></svg>');--icon-text-align-center:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path fill-rule="evenodd" d="M4 12.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm-2-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5zm2-3a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm-2-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5z"/></svg>');--icon-text-align-right:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path fill-rule="evenodd" d="M6 12.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm-4-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5zm4-3a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm-4-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5z"/></svg>');--icon-text-align-top:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' width='16' height='16'%3E%3Cpath d='M8 15a.5.5 0 0 0 .5-.5V5.707l3.146 3.146a.5.5 0 0 0 .707-.707l-4-4a.5.5 0 0 0-.706-.001l-.001.001-4 4a.5.5 0 0 0 .708.707L7.5 5.707V14.5a.5.5 0 0 0 .5.5z'/%3E%3Cpath fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-miterlimit='10' d='M3 1.5h10'/%3E%3C/svg%3E");--icon-text-align-middle:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path fill-rule="evenodd" d="M1 8a.5.5 0 0 1 .5-.5h13a.5.5 0 0 1 0 1h-13A.5.5 0 0 1 1 8zm7-8a.5.5 0 0 1 .5.5v3.793l1.146-1.147a.5.5 0 0 1 .708.708l-2 2a.5.5 0 0 1-.708 0l-2-2a.5.5 0 1 1 .708-.708L7.5 4.293V.5A.5.5 0 0 1 8 0zm-.5 11.707-1.146 1.147a.5.5 0 0 1-.708-.708l2-2a.5.5 0 0 1 .708 0l2 2a.5.5 0 0 1-.708.708L8.5 11.707V15.5a.5.5 0 0 1-1 0v-3.793z"/></svg>');--icon-text-align-bottom:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' width='16' height='16'%3E%3Cpath d='M8 1a.5.5 0 0 0-.5.5v8.793L4.354 7.146a.5.5 0 0 0-.707.707l4 4a.5.5 0 0 0 .707.001l.001-.001 4-4a.5.5 0 0 0-.708-.707L8.5 10.293V1.5A.5.5 0 0 0 8 1z'/%3E%3Cpath fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-miterlimit='10' d='M13 14.5H3'/%3E%3C/svg%3E");--icon-file-menu:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M.54 3.87.5 3a2 2 0 0 1 2-2h3.672a2 2 0 0 1 1.414.586l.828.828A2 2 0 0 0 9.828 3h3.982a2 2 0 0 1 1.992 2.181l-.637 7A2 2 0 0 1 13.174 14H2.826a2 2 0 0 1-1.991-1.819l-.637-7a1.99 1.99 0 0 1 .342-1.31zM2.19 4a1 1 0 0 0-.996 1.09l.637 7a1 1 0 0 0 .995.91h10.348a1 1 0 0 0 .995-.91l.637-7A1 1 0 0 0 13.81 4H2.19zm4.69-1.707A1 1 0 0 0 6.172 2H2.5a1 1 0 0 0-1 .981l.006.139C1.72 3.042 1.95 3 2.19 3h5.396l-.707-.707z"/></svg>');--icon-wrap-text:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M4 5h8a.5.5 0 0 0 0-1H4a.5.5 0 0 0 0 1zM10 8H4a.5.5 0 0 0 0 1h6a1.5 1.5 0 0 1 0 3v-1.203l-2.953 1.707L10 14.203V13a2.5 2.5 0 1 0 0-5zM3.75 12.5a.5.5 0 0 0 .5.5H6v-1H4.25a.5.5 0 0 0-.5.5z"/></svg>');--icon-unmerge-cells:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M1.5 1a.5.5 0 0 0-.5.5v4a.5.5 0 0 1-1 0v-4A1.5 1.5 0 0 1 1.5 0h4a.5.5 0 0 1 0 1h-4zM10 .5a.5.5 0 0 1 .5-.5h4A1.5 1.5 0 0 1 16 1.5v4a.5.5 0 0 1-1 0v-4a.5.5 0 0 0-.5-.5h-4a.5.5 0 0 1-.5-.5zM.5 10a.5.5 0 0 1 .5.5v4a.5.5 0 0 0 .5.5h4a.5.5 0 0 1 0 1h-4A1.5 1.5 0 0 1 0 14.5v-4a.5.5 0 0 1 .5-.5zm15 0a.5.5 0 0 1 .5.5v4a1.5 1.5 0 0 1-1.5 1.5h-4a.5.5 0 0 1 0-1h4a.5.5 0 0 0 .5-.5v-4a.5.5 0 0 1 .5-.5z"/></svg>');--icon-merge-cells:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M5.5 0a.5.5 0 0 1 .5.5v4A1.5 1.5 0 0 1 4.5 6h-4a.5.5 0 0 1 0-1h4a.5.5 0 0 0 .5-.5v-4a.5.5 0 0 1 .5-.5zm5 0a.5.5 0 0 1 .5.5v4a.5.5 0 0 0 .5.5h4a.5.5 0 0 1 0 1h-4A1.5 1.5 0 0 1 10 4.5v-4a.5.5 0 0 1 .5-.5zM0 10.5a.5.5 0 0 1 .5-.5h4A1.5 1.5 0 0 1 6 11.5v4a.5.5 0 0 1-1 0v-4a.5.5 0 0 0-.5-.5h-4a.5.5 0 0 1-.5-.5zm10 1a1.5 1.5 0 0 1 1.5-1.5h4a.5.5 0 0 1 0 1h-4a.5.5 0 0 0-.5.5v4a.5.5 0 0 1-1 0v-4z"/></svg>');--icon-lock:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M8 1a2 2 0 0 1 2 2v4H6V3a2 2 0 0 1 2-2zm3 6V3a3 3 0 0 0-6 0v4a2 2 0 0 0-2 2v5a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2zM5 8h6a1 1 0 0 1 1 1v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V9a1 1 0 0 1 1-1z"/></svg>');--icon-comment:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M14 1a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1h-2.5a2 2 0 0 0-1.6.8L8 14.333 6.1 11.8a2 2 0 0 0-1.6-.8H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h12zM2 0a2 2 0 0 0-2 2v8a2 2 0 0 0 2 2h2.5a1 1 0 0 1 .8.4l1.9 2.533a1 1 0 0 0 1.6 0l1.9-2.533a1 1 0 0 1 .8-.4H14a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2z"/></svg>');--icon-fill-color:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M6.192 2.78c-.458-.677-.927-1.248-1.35-1.643a2.972 2.972 0 0 0-.71-.515c-.217-.104-.56-.205-.882-.02-.367.213-.427.63-.43.896-.003.304.064.664.173 1.044.196.687.556 1.528 1.035 2.402L.752 8.22c-.277.277-.269.656-.218.918.055.283.187.593.36.903.348.627.92 1.361 1.626 2.068.707.707 1.441 1.278 2.068 1.626.31.173.62.305.903.36.262.05.64.059.918-.218l5.615-5.615c.118.257.092.512.05.939-.03.292-.068.665-.073 1.176v.123h.003a1 1 0 0 0 1.993 0H14v-.057a1.01 1.01 0 0 0-.004-.117c-.055-1.25-.7-2.738-1.86-3.494a4.322 4.322 0 0 0-.211-.434c-.349-.626-.92-1.36-1.627-2.067-.707-.707-1.441-1.279-2.068-1.627-.31-.172-.62-.304-.903-.36-.262-.05-.64-.058-.918.219l-.217.216zM4.16 1.867c.381.356.844.922 1.311 1.632l-.704.705c-.382-.727-.66-1.402-.813-1.938a3.283 3.283 0 0 1-.131-.673c.091.061.204.15.337.274zm.394 3.965c.54.852 1.107 1.567 1.607 2.033a.5.5 0 1 0 .682-.732c-.453-.422-1.017-1.136-1.564-2.027l1.088-1.088c.054.12.115.243.183.365.349.627.92 1.361 1.627 2.068.706.707 1.44 1.278 2.068 1.626.122.068.244.13.365.183l-4.861 4.862a.571.571 0 0 1-.068-.01c-.137-.027-.342-.104-.608-.252-.524-.292-1.186-.8-1.846-1.46-.66-.66-1.168-1.32-1.46-1.846-.147-.265-.225-.47-.251-.607a.573.573 0 0 1-.01-.068l3.048-3.047zm2.87-1.935a2.44 2.44 0 0 1-.241-.561c.135.033.324.11.562.241.524.292 1.186.8 1.846 1.46.45.45.83.901 1.118 1.31a3.497 3.497 0 0 0-1.066.091 11.27 11.27 0 0 1-.76-.694c-.66-.66-1.167-1.322-1.458-1.847z"/></svg>');--icon-text-color:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="16" height="16"><path d="m12.259 14.001-1.389-3.727H5.465l-1.354 3.727h-1.3L7.609 1.397h1.178l4.772 12.604h-1.3zM8.418 3.604a5.908 5.908 0 0 1-.127-.387 3.618 3.618 0 0 1-.11-.501h-.035a5.492 5.492 0 0 1-.247.888L5.86 9.211h4.614L8.418 3.604z"/></svg>');--icon-border-bottom:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M.969 0H0v.969h.5V1h.469V.969H1V.5H.969V0zm.937 1h.938V0h-.938v1zm1.875 0h.938V0H3.78v1zm1.875 0h.938V0h-.938v1zM7.531.969V1h.938V.969H8.5V.5h-.031V0H7.53v.5H7.5v.469h.031zM9.406 1h.938V0h-.938v1zm1.875 0h.938V0h-.938v1zm1.875 0h.938V0h-.938v1zm1.875 0h.469V.969h.5V0h-.969v.5H15v.469h.031V1zM1 2.844v-.938H0v.938h1zm6.5-.938v.938h1v-.938h-1zm7.5 0v.938h1v-.938h-1zM1 4.719V3.78H0v.938h1zm6.5-.938v.938h1V3.78h-1zm7.5 0v.938h1V3.78h-1zM1 6.594v-.938H0v.938h1zm6.5-.938v.938h1v-.938h-1zm7.5 0v.938h1v-.938h-1zM.5 8.5h.469v-.031H1V7.53H.969V7.5H.5v.031H0v.938h.5V8.5zm1.406 0h.938v-1h-.938v1zm1.875 0h.938v-1H3.78v1zm1.875 0h.938v-1h-.938v1zm2.813 0v-.031H8.5V7.53h-.031V7.5H7.53v.031H7.5v.938h.031V8.5h.938zm.937 0h.938v-1h-.938v1zm1.875 0h.938v-1h-.938v1zm1.875 0h.938v-1h-.938v1zm1.875 0h.469v-.031h.5V7.53h-.5V7.5h-.469v.031H15v.938h.031V8.5zM0 9.406v.938h1v-.938H0zm7.5 0v.938h1v-.938h-1zm8.5.938v-.938h-1v.938h1zm-16 .937v.938h1v-.938H0zm7.5 0v.938h1v-.938h-1zm8.5.938v-.938h-1v.938h1zm-16 .937v.938h1v-.938H0zm7.5 0v.938h1v-.938h-1zm8.5.938v-.938h-1v.938h1zM0 15h16v1H0v-1z"/></svg>');--icon-border-top:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M0 0v1h16V0H0zm1 2.844v-.938H0v.938h1zm6.5-.938v.938h1v-.938h-1zm7.5 0v.938h1v-.938h-1zM1 4.719V3.78H0v.938h1zm6.5-.938v.938h1V3.78h-1zm7.5 0v.938h1V3.78h-1zM1 6.594v-.938H0v.938h1zm6.5-.938v.938h1v-.938h-1zm7.5 0v.938h1v-.938h-1zM.5 8.5h.469v-.031H1V7.53H.969V7.5H.5v.031H0v.938h.5V8.5zm1.406 0h.938v-1h-.938v1zm1.875 0h.938v-1H3.78v1zm1.875 0h.938v-1h-.938v1zm2.813 0v-.031H8.5V7.53h-.031V7.5H7.53v.031H7.5v.938h.031V8.5h.938zm.937 0h.938v-1h-.938v1zm1.875 0h.938v-1h-.938v1zm1.875 0h.938v-1h-.938v1zm1.875 0h.469v-.031h.5V7.53h-.5V7.5h-.469v.031H15v.938h.031V8.5zM0 9.406v.938h1v-.938H0zm7.5 0v.938h1v-.938h-1zm8.5.938v-.938h-1v.938h1zm-16 .937v.938h1v-.938H0zm7.5 0v.938h1v-.938h-1zm8.5.938v-.938h-1v.938h1zm-16 .937v.938h1v-.938H0zm7.5 0v.938h1v-.938h-1zm8.5.938v-.938h-1v.938h1zM0 16h.969v-.5H1v-.469H.969V15H.5v.031H0V16zm1.906 0h.938v-1h-.938v1zm1.875 0h.938v-1H3.78v1zm1.875 0h.938v-1h-.938v1zm1.875-.5v.5h.938v-.5H8.5v-.469h-.031V15H7.53v.031H7.5v.469h.031zm1.875.5h.938v-1h-.938v1zm1.875 0h.938v-1h-.938v1zm1.875 0h.938v-1h-.938v1zm1.875-.5v.5H16v-.969h-.5V15h-.469v.031H15v.469h.031z"/></svg>');--icon-border-left:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M0 0v16h1V0H0zm1.906 1h.938V0h-.938v1zm1.875 0h.938V0H3.78v1zm1.875 0h.938V0h-.938v1zM7.531.969V1h.938V.969H8.5V.5h-.031V0H7.53v.5H7.5v.469h.031zM9.406 1h.938V0h-.938v1zm1.875 0h.938V0h-.938v1zm1.875 0h.938V0h-.938v1zm1.875 0h.469V.969h.5V0h-.969v.5H15v.469h.031V1zM7.5 1.906v.938h1v-.938h-1zm7.5 0v.938h1v-.938h-1zM7.5 3.781v.938h1V3.78h-1zm7.5 0v.938h1V3.78h-1zM7.5 5.656v.938h1v-.938h-1zm7.5 0v.938h1v-.938h-1zM1.906 8.5h.938v-1h-.938v1zm1.875 0h.938v-1H3.78v1zm1.875 0h.938v-1h-.938v1zm2.813 0v-.031H8.5V7.53h-.031V7.5H7.53v.031H7.5v.938h.031V8.5h.938zm.937 0h.938v-1h-.938v1zm1.875 0h.938v-1h-.938v1zm1.875 0h.938v-1h-.938v1zm1.875 0h.469v-.031h.5V7.53h-.5V7.5h-.469v.031H15v.938h.031V8.5zM7.5 9.406v.938h1v-.938h-1zm8.5.938v-.938h-1v.938h1zm-8.5.937v.938h1v-.938h-1zm8.5.938v-.938h-1v.938h1zm-8.5.937v.938h1v-.938h-1zm8.5.938v-.938h-1v.938h1zM1.906 16h.938v-1h-.938v1zm1.875 0h.938v-1H3.78v1zm1.875 0h.938v-1h-.938v1zm1.875-.5v.5h.938v-.5H8.5v-.469h-.031V15H7.53v.031H7.5v.469h.031zm1.875.5h.938v-1h-.938v1zm1.875 0h.938v-1h-.938v1zm1.875 0h.938v-1h-.938v1zm1.875-.5v.5H16v-.969h-.5V15h-.469v.031H15v.469h.031z"/></svg>');--icon-border-right:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M.969 0H0v.969h.5V1h.469V.969H1V.5H.969V0zm.937 1h.938V0h-.938v1zm1.875 0h.938V0H3.78v1zm1.875 0h.938V0h-.938v1zM7.531.969V1h.938V.969H8.5V.5h-.031V0H7.53v.5H7.5v.469h.031zM9.406 1h.938V0h-.938v1zm1.875 0h.938V0h-.938v1zm1.875 0h.938V0h-.938v1zM16 0h-1v16h1V0zM1 2.844v-.938H0v.938h1zm6.5-.938v.938h1v-.938h-1zM1 4.719V3.78H0v.938h1zm6.5-.938v.938h1V3.78h-1zM1 6.594v-.938H0v.938h1zm6.5-.938v.938h1v-.938h-1zM.5 8.5h.469v-.031H1V7.53H.969V7.5H.5v.031H0v.938h.5V8.5zm1.406 0h.938v-1h-.938v1zm1.875 0h.938v-1H3.78v1zm1.875 0h.938v-1h-.938v1zm2.813 0v-.031H8.5V7.53h-.031V7.5H7.53v.031H7.5v.938h.031V8.5h.938zm.937 0h.938v-1h-.938v1zm1.875 0h.938v-1h-.938v1zm1.875 0h.938v-1h-.938v1zM0 9.406v.938h1v-.938H0zm7.5 0v.938h1v-.938h-1zM0 11.281v.938h1v-.938H0zm7.5 0v.938h1v-.938h-1zM0 13.156v.938h1v-.938H0zm7.5 0v.938h1v-.938h-1zM0 16h.969v-.5H1v-.469H.969V15H.5v.031H0V16zm1.906 0h.938v-1h-.938v1zm1.875 0h.938v-1H3.78v1zm1.875 0h.938v-1h-.938v1zm1.875-.5v.5h.938v-.5H8.5v-.469h-.031V15H7.53v.031H7.5v.469h.031zm1.875.5h.938v-1h-.938v1zm1.875 0h.938v-1h-.938v1zm1.875 0h.938v-1h-.938v1z"/></svg>');--icon-border-double-bottom:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M.969 0H0v.969h.5V1h.469V.969H1V.5H.969V0zm.937 1h.938V0h-.938v1zm1.875 0h.938V0H3.78v1h.001zm1.875 0h.938V0h-.938v1zM7.531.969V1h.938V.969H8.5V.5h-.031V0H7.53v.5H7.5v.469h.031zM9.406 1h.938V0h-.938v1zm1.875 0h.938V0h-.938v1zm1.875 0h.938V0h-.938v1zm1.875 0h.469V.969h.5V0h-.969v.5H15v.469h.031V1zM1 2.844v-.938H0v.938h1zm6.5-.938v.938h1v-.938h-1zm7.5 0v.938h1v-.938h-1zM1 4.719V3.78H0v.938l1 .001zm6.5-.938v.938h1V3.78h-1v.001zm7.5 0v.938h1V3.78h-1v.001zM1 6.594v-.938H0v.938h1zm6.5-.938v.938h1v-.938h-1zm7.5 0v.938h1v-.938h-1zM.5 8.5h.469v-.031H1V7.53H.969V7.5H.5v.031H0v.938h.5V8.5zm1.406 0h.938v-1h-.938v1zm1.875 0h.938v-1H3.78v1h.001zm1.875 0h.938v-1h-.938v1zm2.813 0v-.031H8.5V7.53h-.031V7.5H7.53v.031H7.5v.938h.031V8.5h.938zm.937 0h.938v-1h-.938v1zm1.875 0h.938v-1h-.938v1zm1.875 0h.938v-1h-.938v1zm1.875 0h.469v-.031h.5V7.53h-.5V7.5h-.469v.031H15v.938h.031V8.5zM0 9.406v.938h1v-.938H0zm7.5 0v.938h1v-.938h-1zm8.5.938v-.938h-1v.938h1zm-16 .937v.938h1v-.938H0zm7.5 0v.938h1v-.938h-1zm8.5.938v-.938h-1v.938h1zM0 15h16v1H0v-1zm0-2h16v1H0v-1z"/></svg>');--icon-border-all:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M0 0h16v16H0V0zm1 1v6.5h6.5V1H1zm7.5 0v6.5H15V1H8.5zM15 8.5H8.5V15H15V8.5zM7.5 15V8.5H1V15h6.5z"/></svg>');--icon-border-outer:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M7.5 1.906v.938h1v-.938h-1zm0 1.875v.938h1V3.78h-1zm0 1.875v.938h1v-.938h-1zM1.906 8.5h.938v-1h-.938v1zm1.875 0h.938v-1H3.78v1zm1.875 0h.938v-1h-.938v1zm2.813 0v-.031H8.5V7.53h-.031V7.5H7.53v.031H7.5v.938h.031V8.5h.938zm.937 0h.938v-1h-.938v1zm1.875 0h.938v-1h-.938v1zm1.875 0h.938v-1h-.938v1zM7.5 9.406v.938h1v-.938h-1zm0 1.875v.938h1v-.938h-1zm0 1.875v.938h1v-.938h-1z"/><path d="M0 0v16h16V0H0zm1 1h14v14H1V1z"/></svg>');--icon-border-none:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M0 0h.969v.5H1v.469H.969V1H.5V.969H0V0zm2.844 1h-.938V0h.938v1zm1.875 0H3.78V0h.938v1zm1.875 0h-.938V0h.938v1zm.937 0V.969H7.5V.5h.031V0h.938v.5H8.5v.469h-.031V1H7.53zm2.813 0h-.938V0h.938v1zm1.875 0h-.938V0h.938v1zm1.875 0h-.938V0h.938v1zM15.5 1h-.469V.969H15V.5h.031V0H16v.969h-.5V1zM1 1.906v.938H0v-.938h1zm6.5.938v-.938h1v.938h-1zm7.5 0v-.938h1v.938h-1zM1 3.78v.938H0V3.78h1zm6.5.938V3.78h1v.938h-1zm7.5 0V3.78h1v.938h-1zM1 5.656v.938H0v-.938h1zm6.5.938v-.938h1v.938h-1zm7.5 0v-.938h1v.938h-1zM.969 8.5H.5v-.031H0V7.53h.5V7.5h.469v.031H1v.938H.969V8.5zm1.875 0h-.938v-1h.938v1zm1.875 0H3.78v-1h.938v1zm1.875 0h-.938v-1h.938v1zm1.875-.031V8.5H7.53v-.031H7.5V7.53h.031V7.5h.938v.031H8.5v.938h-.031zm1.875.031h-.938v-1h.938v1zm1.875 0h-.938v-1h.938v1zm1.875 0h-.938v-1h.938v1zm1.406 0h-.469v-.031H15V7.53h.031V7.5h.469v.031h.5v.938h-.5V8.5zM0 10.344v-.938h1v.938H0zm7.5 0v-.938h1v.938h-1zm8.5-.938v.938h-1v-.938h1zM0 12.22v-.938h1v.938H0zm7.5 0v-.938h1v.938h-1zm8.5-.938v.938h-1v-.938h1zM0 14.094v-.938h1v.938H0zm7.5 0v-.938h1v.938h-1zm8.5-.938v.938h-1v-.938h1zM.969 16H0v-.969h.5V15h.469v.031H1v.469H.969v.5zm1.875 0h-.938v-1h.938v1zm1.875 0H3.78v-1h.938v1zm1.875 0h-.938v-1h.938v1zm.937 0v-.5H7.5v-.469h.031V15h.938v.031H8.5v.469h-.031v.5H7.53zm2.813 0h-.938v-1h.938v1zm1.875 0h-.938v-1h.938v1zm1.875 0h-.938v-1h.938v1zm.937 0v-.5H15v-.469h.031V15h.469v.031h.5V16h-.969z"/></svg>');--icon-palette:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M0 .5A.5.5 0 0 1 .5 0h5a.5.5 0 0 1 .5.5v5.277l4.147-4.131a.5.5 0 0 1 .707 0l3.535 3.536a.5.5 0 0 1 0 .708L10.261 10H15.5a.5.5 0 0 1 .5.5v5a.5.5 0 0 1-.5.5H3a2.99 2.99 0 0 1-2.121-.879A2.99 2.99 0 0 1 0 13.044m6-.21 7.328-7.3-2.829-2.828L6 7.188v5.647zM4.5 13a1.5 1.5 0 1 0-3 0 1.5 1.5 0 0 0 3 0zM15 15v-4H9.258l-4.015 4H15zM0 .5v12.495V.5z"/><path d="M0 12.995V13a3.07 3.07 0 0 0 0-.005z"/></svg>');--icon-layout:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="20" height="20"><path d="m3 0 17 17.156v-.114z"/><path d="M3 0H0v16h1V1h1.585L19 17.455V19H4v1h16v-2.844z"/><path d="M6.886 3.922 5.343 5.465a.5.5 0 0 0 .708.707l1.539-1.54-.704-.71zM9.702 6.763l-1.53 1.53A.5.5 0 0 0 8.879 9l1.526-1.526-.703-.711zM12.517 9.604 11 11.121a.5.5 0 0 0 .707.707l1.514-1.514-.704-.71zM15.332 12.445l-1.504 1.504a.5.5 0 0 0 .707.707l1.501-1.5-.704-.711zM1 16H0a4 4 0 0 0 4 4v-1c-1.654 0-3-1.346-3-3zM5 9v6h6L5 9zm1 2.414L8.586 14H6v-2.586z"/></svg>');--icon-freeze:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M8 16a.5.5 0 0 1-.5-.5v-1.293l-.646.647a.5.5 0 0 1-.707-.708L7.5 12.793V8.866l-3.4 1.963-.496 1.85a.5.5 0 1 1-.966-.26l.237-.882-1.12.646a.5.5 0 0 1-.5-.866l1.12-.646-.884-.237a.5.5 0 1 1 .26-.966l1.848.495L7 8 3.6 6.037l-1.85.495a.5.5 0 0 1-.258-.966l.883-.237-1.12-.646a.5.5 0 1 1 .5-.866l1.12.646-.237-.883a.5.5 0 1 1 .966-.258l.495 1.849L7.5 7.134V3.207L6.147 1.854a.5.5 0 1 1 .707-.708l.646.647V.5a.5.5 0 1 1 1 0v1.293l.647-.647a.5.5 0 1 1 .707.708L8.5 3.207v3.927l3.4-1.963.496-1.85a.5.5 0 1 1 .966.26l-.236.882 1.12-.646a.5.5 0 0 1 .5.866l-1.12.646.883.237a.5.5 0 1 1-.26.966l-1.848-.495L9 8l3.4 1.963 1.849-.495a.5.5 0 0 1 .259.966l-.883.237 1.12.646a.5.5 0 0 1-.5.866l-1.12-.646.236.883a.5.5 0 1 1-.966.258l-.495-1.849-3.4-1.963v3.927l1.353 1.353a.5.5 0 0 1-.707.708l-.647-.647V15.5a.5.5 0 0 1-.5.5z"/></svg>');--icon-column-chart:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="20" height="20"><path d="M4.5 17.5a.5.5 0 0 1-1 0v-5a.5.5 0 0 1 1 0v5zM12.5 17.5a.5.5 0 0 1-1 0v-9a.5.5 0 0 1 1 0v9zM16.5 17.5a.5.5 0 0 1-1 0v-13a.5.5 0 0 1 1 0v13zM8.5 17.5a.5.5 0 0 1-1 0v-14a.5.5 0 0 1 1 0v14z"/></svg>');--icon-donut-chart:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="20" height="20"><path d="M12 1.23v1.548c2.526.701 4.5 2.699 5.203 5.222h1.565A9.006 9.006 0 0 0 12 1.23zM2.5 10c0-3.51 2.426-6.456 5.688-7.27V1.183A9.001 9.001 0 0 0 1 10c0 1.761.513 3.397 1.387 4.784l1.093-1.093A7.432 7.432 0 0 1 2.5 10zM17.221 12c-.878 3.166-3.778 5.5-7.221 5.5a7.448 7.448 0 0 1-3.692-.979l-1.093 1.093A8.956 8.956 0 0 0 10 19c4.282 0 7.859-2.993 8.77-7h-1.549z"/></svg>');--icon-bar-chart:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="20" height="20"><path d="M2.5 4.5a.5.5 0 0 1 0-1h5a.5.5 0 0 1 0 1h-5zM2.5 12.5a.5.5 0 0 1 0-1h9a.5.5 0 0 1 0 1h-9zM2.5 16.5a.5.5 0 0 1 0-1h13a.5.5 0 0 1 0 1h-13zM2.5 8.5a.5.5 0 0 1 0-1h14a.5.5 0 0 1 0 1h-14z"/></svg>');--icon-line-chart:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="20" height="20"><path d="m1 8 3-3 7 5 8-8v2l-8 8-7-5-3 3z"/></svg>');--icon-image:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M6.002 5.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0z"/><path d="M2.002 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2h-12zm12 1a1 1 0 0 1 1 1v6.5l-3.777-1.947a.5.5 0 0 0-.577.093l-3.71 3.71-2.66-1.772a.5.5 0 0 0-.63.062L1.002 12V3a1 1 0 0 1 1-1h12z"/></svg>');--icon-recalculate:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="20" height="20"><path d="M9.478 4.022c2.402-.209 4.583 1.047 5.711 3.014l1.083-.095c-1.233-2.528-3.912-4.175-6.881-3.916-2.97.26-5.321 2.347-6.098 5.051l1.083-.095c.768-2.132 2.698-3.748 5.102-3.959zM10.523 15.977c-2.403.211-4.585-1.047-5.712-3.013l-1.08.095c1.234 2.527 3.91 4.175 6.879 3.914 2.971-.259 5.32-2.347 6.095-5.05l-1.08.095c-.769 2.132-2.699 3.749-5.102 3.959z"/><path d="m2.272 15.616 5.197-3-4.098-1.097zM17.728 4.384l-5.197 3 4.098 1.098z"/></svg>');--icon-check:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M13.854 3.646a.5.5 0 0 1 0 .708l-7 7a.5.5 0 0 1-.708 0l-3.5-3.5a.5.5 0 1 1 .708-.708L6.5 10.293l6.646-6.647a.5.5 0 0 1 .708 0z"/></svg>');--icon-table:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2zm15 2h-4v3h4V4zm0 4h-4v3h4V8zm0 4h-4v3h3a1 1 0 0 0 1-1v-2zm-5 3v-3H6v3h4zm-5 0v-3H1v2a1 1 0 0 0 1 1h3zm-4-4h4V8H1v3zm0-4h4V4H1v3zm5-3v3h4V4H6zm4 4H6v3h4V8z"/></svg>')}.treb-main.treb-main .treb-layout-header{-ms-overflow-style:none;overflow:hidden;overflow-x:scroll;position:relative;scrollbar-width:none}.treb-main.treb-main .treb-layout-header::-webkit-scrollbar{display:none}.treb-main.treb-main .treb-toolbar{color:var(--treb-toolbar-color,var(--treb-ui-color,#333));display:flex;flex-direction:row;font-size:var(--treb-toolbar-font-size,inherit);gap:.5rem}.treb-main.treb-main .treb-toolbar>div{display:flex;flex-direction:row}.treb-main.treb-main .treb-toolbar>div>input,.treb-main.treb-main .treb-toolbar>input{background-color:var(--treb-toolbar-button-background,transparent);border:1px solid var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));height:32px;overflow:hidden;padding-left:.5em;padding-right:.5em;text-overflow:ellipsis}.treb-main.treb-main .treb-toolbar>.treb-menu>button{border-radius:3px}.treb-main.treb-main .treb-toolbar>.group>.treb-menu+button,.treb-main.treb-main .treb-toolbar>.group>button+.treb-menu>button,.treb-main.treb-main .treb-toolbar>.group>button+button,.treb-main.treb-main .treb-toolbar>.group>input+.treb-menu>button,.treb-main.treb-main .treb-toolbar>.group>input+button,.treb-main.treb-main .treb-toolbar>[composite]>.treb-menu+button,.treb-main.treb-main .treb-toolbar>[composite]>button+.treb-menu>button,.treb-main.treb-main .treb-toolbar>[composite]>button+button,.treb-main.treb-main .treb-toolbar>[composite]>input+.treb-menu>button,.treb-main.treb-main .treb-toolbar>[composite]>input+button{border-left-width:0}.treb-main.treb-main .treb-toolbar>.group>button:first-child,.treb-main.treb-main .treb-toolbar>.group>input:first-child,.treb-main.treb-main .treb-toolbar>[composite]>button:first-child,.treb-main.treb-main .treb-toolbar>[composite]>input:first-child{border-bottom-left-radius:3px;border-top-left-radius:3px}.treb-main.treb-main .treb-toolbar>.group>.treb-menu:last-child>button,.treb-main.treb-main .treb-toolbar>.group>button:last-child,.treb-main.treb-main .treb-toolbar>[composite]>.treb-menu:last-child>button,.treb-main.treb-main .treb-toolbar>[composite]>button:last-child{border-bottom-right-radius:3px;border-top-right-radius:3px}.treb-main.treb-main .treb-toolbar .treb-icon-buttons>button,.treb-main.treb-main .treb-toolbar .treb-menu>button,.treb-main.treb-main .treb-toolbar button[data-icon],.treb-main.treb-main .treb-toolbar>button,.treb-main.treb-main .treb-toolbar>div>button{align-items:center;background-color:var(--treb-toolbar-button-background,transparent);border:1px solid var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));display:flex;flex-direction:column;height:32px;justify-content:center;position:relative;width:32px}.treb-main.treb-main .treb-toolbar .treb-icon-buttons>button[dropdown],.treb-main.treb-main .treb-toolbar .treb-menu>button[dropdown],.treb-main.treb-main .treb-toolbar button[data-icon][dropdown],.treb-main.treb-main .treb-toolbar>button[dropdown],.treb-main.treb-main .treb-toolbar>div>button[dropdown]{width:16px}.treb-main.treb-main .treb-toolbar .treb-icon-buttons>button[dropdown]:after,.treb-main.treb-main .treb-toolbar .treb-menu>button[dropdown]:after,.treb-main.treb-main .treb-toolbar button[data-icon][dropdown]:after,.treb-main.treb-main .treb-toolbar>button[dropdown]:after,.treb-main.treb-main .treb-toolbar>div>button[dropdown]:after{border:5px solid transparent;border-top-color:currentcolor;box-sizing:content-box;content:"";height:0;left:50%;position:absolute;top:18px;transform:translate(-50%,-50%);width:0}.treb-main.treb-main .treb-toolbar .treb-icon-buttons>button:hover,.treb-main.treb-main .treb-toolbar .treb-icon-buttons>button[active],.treb-main.treb-main .treb-toolbar .treb-menu>button:hover,.treb-main.treb-main .treb-toolbar .treb-menu>button[active],.treb-main.treb-main .treb-toolbar button[data-icon]:hover,.treb-main.treb-main .treb-toolbar button[data-icon][active],.treb-main.treb-main .treb-toolbar>button:hover,.treb-main.treb-main .treb-toolbar>button[active],.treb-main.treb-main .treb-toolbar>div>button:hover,.treb-main.treb-main .treb-toolbar>div>button[active]{background-color:var(--treb-toolbar-hover-button-background,#f3f4f6)}.treb-main.treb-main .treb-toolbar .treb-icon-buttons>button[data-color-bar]:after,.treb-main.treb-main .treb-toolbar .treb-menu>button[data-color-bar]:after,.treb-main.treb-main .treb-toolbar button[data-icon][data-color-bar]:after,.treb-main.treb-main .treb-toolbar>button[data-color-bar]:after,.treb-main.treb-main .treb-toolbar>div>button[data-color-bar]:after{background:var(--treb-color-bar-color,var(--treb-default-color,unset));border:1px solid var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));box-sizing:border-box;content:"";display:block;height:6px;position:relative;width:20px}.treb-main.treb-main .treb-toolbar .treb-icon-buttons>button[data-command]:before,.treb-main.treb-main .treb-toolbar .treb-icon-buttons>button[data-icon]:before,.treb-main.treb-main .treb-toolbar .treb-menu>button[data-command]:before,.treb-main.treb-main .treb-toolbar .treb-menu>button[data-icon]:before,.treb-main.treb-main .treb-toolbar button[data-icon][data-command]:before,.treb-main.treb-main .treb-toolbar button[data-icon][data-icon]:before,.treb-main.treb-main .treb-toolbar>button[data-command]:before,.treb-main.treb-main .treb-toolbar>button[data-icon]:before,.treb-main.treb-main .treb-toolbar>div>button[data-command]:before,.treb-main.treb-main .treb-toolbar>div>button[data-icon]:before{background:currentColor;content:"";display:block;height:20px;mask-image:var(--icon);-webkit-mask-image:var(--icon);mask-position:center;-webkit-mask-position:center;mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat;mask-size:var(--icon-size,16px 16px);-webkit-mask-size:var(--icon-size,16px 16px);position:relative;width:20px}.treb-main.treb-main .treb-toolbar .treb-split{display:flex;flex-direction:column;gap:0}.treb-main.treb-main .treb-toolbar .treb-split button[data-command]{font-size:10px}.treb-main.treb-main .treb-toolbar .treb-split button[data-command]:before{display:none}.treb-main.treb-main .treb-toolbar .treb-split>button{align-items:center;display:flex;height:16px;justify-content:center}.treb-main.treb-main .treb-toolbar .treb-split>button:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.treb-main.treb-main .treb-toolbar .treb-split>button:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px;border-top:0}.treb-main.treb-main .treb-toolbar .treb-menu{outline:none}.treb-main.treb-main .treb-toolbar .treb-menu>div{background:var(--treb-toolbar-button-background,#fff);border:1px solid var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));border-radius:3px;box-shadow:0 4px 6px -4px rgba(0,0,0,.4);display:none;flex-direction:column;margin-top:.5rem;position:fixed;top:48px;z-index:20}.treb-main.treb-main .treb-toolbar .treb-menu>div button{background:transparent;border:0;margin:3px 0;padding:.4rem 1rem;text-align:left;transition:background-color .125s ease;white-space:nowrap}.treb-main.treb-main .treb-toolbar .treb-menu>div button:hover{background:var(--treb-toolbar-hover-button-background,#f3f4f6)}.treb-main.treb-main .treb-toolbar .treb-menu>div.treb-icon-buttons>.treb-menu>button,.treb-main.treb-main .treb-toolbar .treb-menu>div.treb-icon-buttons>button{padding:0}.treb-main.treb-main .treb-toolbar .treb-menu>div>[separator]{background:var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));height:1px;margin:2px 0}.treb-main.treb-main .treb-toolbar .treb-menu.visible>div,.treb-main.treb-main .treb-toolbar .treb-menu:focus-within>div{display:flex}.treb-main.treb-main .treb-toolbar [data-icon=file-menu]{--icon:var(--icon-file-menu)}.treb-main.treb-main .treb-toolbar [data-command=justify-left]{--icon:var(--icon-text-align-left)}.treb-main.treb-main .treb-toolbar [data-command=justify-right]{--icon:var(--icon-text-align-right)}.treb-main.treb-main .treb-toolbar [data-command=justify-center]{--icon:var(--icon-text-align-center)}.treb-main.treb-main .treb-toolbar [data-command=align-top]{--icon:var(--icon-text-align-top)}.treb-main.treb-main .treb-toolbar [data-command=align-middle]{--icon:var(--icon-text-align-middle)}.treb-main.treb-main .treb-toolbar [data-command=align-bottom]{--icon:var(--icon-text-align-bottom)}.treb-main.treb-main .treb-toolbar [data-command=merge-cells]{--icon:var(--icon-merge-cells)}.treb-main.treb-main .treb-toolbar [data-command=unmerge-cells]{--icon:var(--icon-unmerge-cells)}.treb-main.treb-main .treb-toolbar [data-command=fill-color]{--icon:var(--icon-fill-color)}.treb-main.treb-main .treb-toolbar [data-command=text-color]{--icon:var(--icon-text-color)}.treb-main.treb-main .treb-toolbar [data-command=lock-cells]{--icon:var(--icon-lock)}.treb-main.treb-main .treb-toolbar [data-command=wrap-text]{--icon:var(--icon-wrap-text)}.treb-main.treb-main .treb-toolbar [data-icon=comment]{--icon:var(--icon-comment)}.treb-main.treb-main .treb-toolbar [data-icon=table]{--icon:var(--icon-table)}.treb-main.treb-main .treb-toolbar [data-icon=layout]{--icon:var(--icon-layout)}.treb-main.treb-main .treb-toolbar [data-command=freeze-panes]{--icon:var(--icon-freeze)}.treb-main.treb-main .treb-toolbar [data-command=insert-column-chart]{--icon:var(--icon-column-chart)}.treb-main.treb-main .treb-toolbar [data-command=insert-donut-chart]{--icon:var(--icon-donut-chart)}.treb-main.treb-main .treb-toolbar [data-command=insert-bar-chart]{--icon:var(--icon-bar-chart)}.treb-main.treb-main .treb-toolbar [data-command=insert-line-chart]{--icon:var(--icon-line-chart)}.treb-main.treb-main .treb-toolbar [data-command=insert-image]{--icon:var(--icon-image)}.treb-main.treb-main .treb-toolbar [data-command=border-bottom]{--icon:var(--icon-border-bottom)}.treb-main.treb-main .treb-toolbar [data-command=border-left]{--icon:var(--icon-border-left)}.treb-main.treb-main .treb-toolbar [data-command=border-right]{--icon:var(--icon-border-right)}.treb-main.treb-main .treb-toolbar [data-command=border-top]{--icon:var(--icon-border-top)}.treb-main.treb-main .treb-toolbar [data-command=border-outside]{--icon:var(--icon-border-outer)}.treb-main.treb-main .treb-toolbar [data-command=border-all]{--icon:var(--icon-border-all)}.treb-main.treb-main .treb-toolbar [data-command=border-none]{--icon:var(--icon-border-none)}.treb-main.treb-main .treb-toolbar [data-command=border-double-bottom]{--icon:var(--icon-border-double-bottom)}.treb-main.treb-main .treb-toolbar [data-icon=palette]{--icon:var(--icon-palette)}.treb-main.treb-main .treb-toolbar [data-command=recalculate]{--icon:var(--icon-recalculate);--icon-size:20px 20px}.treb-main.treb-main .treb-toolbar .treb-font-scale{width:4em}.treb-main.treb-main .treb-toolbar .treb-number-format{width:8em}.treb-main.treb-main .treb-toolbar .treb-color-chooser button[data-command=set-color]{align-items:center;display:flex;justify-content:center;padding:0;width:32px}.treb-main.treb-main .treb-toolbar .treb-color-chooser>div{padding:.75rem}.treb-main.treb-main .treb-toolbar .treb-color-chooser>div+div{padding-top:0}.treb-main.treb-main .treb-toolbar .treb-color-chooser>div:last-child{align-items:center;display:flex;flex-direction:row;gap:.5rem}.treb-main.treb-main .treb-toolbar .treb-color-chooser>div:last-child input{flex-grow:1;padding:0 .5rem}.treb-main.treb-main .treb-toolbar .treb-color-chooser>div:last-child button,.treb-main.treb-main .treb-toolbar .treb-color-chooser>div:last-child input{border:1px solid var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));border-radius:3px;height:32px}.treb-main.treb-main .treb-toolbar .treb-color-chooser .treb-swatches{display:grid;gap:.5rem;grid-template-columns:repeat(10,1fr)}.treb-main.treb-main .treb-toolbar .treb-color-chooser .treb-swatches button{border:1px solid var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));border-radius:2px;height:18px;margin:0;padding:0;width:18px}.treb-main.treb-main .treb-toolbar .treb-color-chooser .treb-swatches .treb-default-color:before{background:currentColor;content:"";display:block;height:100%;mask-image:var(--icon-x);-webkit-mask-image:var(--icon-x);mask-position:center;-webkit-mask-position:center;mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat;mask-size:24px 24px;-webkit-mask-size:24px 24px;opacity:.7;position:relative;width:100%}.treb-main.treb-main .treb-toolbar .treb-comment-box textarea{border:1px solid var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));font:inherit;height:10rem;line-height:1.5;margin:.5rem;padding:.25rem;resize:both}.treb-main.treb-main .treb-toolbar .treb-comment-box textarea+div{align-items:center;display:flex;flex-direction:row;gap:.5rem;justify-content:center;padding:0 0 .5rem}.treb-main.treb-main .treb-toolbar .treb-comment-box textarea+div button{border:1px solid var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));border-radius:3px}.treb-main.treb-main{all:revert;box-sizing:border-box;color:inherit;color-scheme:var(--treb-color-scheme,unset);display:grid;font-family:var(--treb-default-font,system-ui,"BlinkMacSystemFont","Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue","sans-serif");font-family:BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,"sans-serif";font-size:14px;font-style:normal;font-weight:400;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:auto minmax(0,1fr);height:100%;position:relative;text-align:start;width:100%}.treb-main.treb-main a,.treb-main.treb-main button,.treb-main.treb-main div,.treb-main.treb-main input,.treb-main.treb-main li,.treb-main.treb-main ol,.treb-main.treb-main svg,.treb-main.treb-main textarea,.treb-main.treb-main ul{all:revert;box-sizing:border-box;font-family:var(--treb-default-font,system-ui,"BlinkMacSystemFont","Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue","sans-serif")}.treb-main.treb-main button,.treb-main.treb-main input{color:inherit;font:inherit}.treb-main.treb-main *{box-sizing:border-box}.treb-main.treb-main [contenteditable]{-webkit-user-modify:read-write;-moz-user-modify:read-write}.treb-main.treb-main[animate] .treb-layout-header{transition:height var(--treb-sidebar-transition,.2s ease),opacity var(--treb-sidebar-transition,.2s ease)}.treb-main.treb-main .treb-layout-header{grid-column:1/3;grid-row:1;height:1px;opacity:0}.treb-main.treb-main[toolbar] .treb-layout-header{height:42px;opacity:1}.treb-main.treb-main[dialog] .treb-layout-header,.treb-main.treb-main[dialog]>*{opacity:.6}.treb-main.treb-main[dialog] .treb-dialog-mask{opacity:1;pointer-events:auto}.treb-main.treb-main .treb-layout-spreadsheet{display:flex;flex-direction:row;gap:1em;grid-column:1;grid-row:2;position:relative;transition:opacity .2s ease;z-index:5}.treb-main.treb-main .treb-views.treb-can-revert .treb-view .treb-revert-indicator{opacity:1;pointer-events:auto}.treb-main.treb-main .treb-view{display:grid;flex:1 1 0px;grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(0,1fr) auto;position:relative}.treb-main.treb-main .treb-view .treb-spreadsheet-backdrop{box-shadow:0 4px 6px -4px rgba(0,0,0,.4);grid-column:1;grid-row:2;z-index:2}.treb-main.treb-main .treb-view .treb-spreadsheet-body{position:relative;z-index:4}.treb-main.treb-main .treb-view .treb-spreadsheet-footer{position:relative;z-index:5}.treb-main.treb-main .treb-view .treb-layout-resize-handle,.treb-main.treb-main .treb-view .treb-revert-indicator{display:none}.treb-main.treb-main .treb-view:first-of-type .treb-revert-indicator{align-self:start;border-color:orange transparent transparent orange;border-style:solid;border-width:.5em;display:block;grid-area:2/1/3/2;height:1rem;justify-self:start;opacity:0;overflow:hidden;pointer-events:none;position:relative;transition:opacity .125s ease;width:1rem;z-index:20}.treb-main.treb-main .treb-view:last-of-type .treb-layout-resize-handle{align-self:end;border-bottom:.5rem solid var(--treb-resize-handle-color,#0059b9);border-left:.5rem solid transparent;border-right:.5rem solid var(--treb-resize-handle-color,#0059b9);border-top:.5rem solid transparent;cursor:nw-resize;display:block;grid-area:2/1/3/2;height:1rem;justify-self:end;width:1rem;z-index:20}.treb-main.treb-main[animate] .treb-layout-sidebar{transition:width var(--treb-sidebar-transition,.2s ease),opacity var(--treb-sidebar-transition,.2s ease)}.treb-main.treb-main .treb-layout-sidebar{align-items:center;display:flex;flex-direction:column;gap:.75rem;grid-column:2;grid-row:2;justify-content:flex-start;overflow:hidden;padding-top:3rem;width:2.5rem;width:3rem}.treb-main.treb-main[collapsed] .treb-layout-sidebar{opacity:0;width:0}.treb-main.treb-main[collapsed] .treb-toggle-sidebar-button{background:var(--treb-toolbar-button-background,#fff);border-bottom-right-radius:0;border-color:var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));border-right-color:var(--treb-toolbar-button-background,transparent);border-top-right-radius:0;right:0}.treb-main.treb-main[collapsed] .treb-toggle-sidebar-button:after{mask-image:var(--icon-chevron-left);-webkit-mask-image:var(--icon-chevron-left)}.treb-main.treb-main .treb-layout-sidebar>button,.treb-main.treb-main .treb-toggle-sidebar-button{background:transparent;border:0;margin:0;padding:0}.treb-main.treb-main .treb-layout-sidebar>button:after,.treb-main.treb-main .treb-toggle-sidebar-button:after{background:#ccc;content:"";display:block;height:24px;mask-image:var(--icon);-webkit-mask-image:var(--icon);mask-position:center;-webkit-mask-position:center;mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat;transition:background-color .1s ease;width:24px}.treb-main.treb-main .treb-layout-sidebar>button[data-can-revert=false],.treb-main.treb-main .treb-toggle-sidebar-button[data-can-revert=false]{display:none}.treb-main.treb-main .treb-layout-sidebar>button:hover:after,.treb-main.treb-main .treb-toggle-sidebar-button:hover:after{background:#666}.treb-main.treb-main .treb-layout-sidebar>button[data-command=recalculate],.treb-main.treb-main .treb-toggle-sidebar-button[data-command=recalculate]{--icon:var(--icon-reset)}.treb-main.treb-main .treb-layout-sidebar>button[data-command=toggle-toolbar],.treb-main.treb-main .treb-toggle-sidebar-button[data-command=toggle-toolbar]{--icon:var(--icon-toolbar)}.treb-main.treb-main .treb-layout-sidebar>button[data-command=revert],.treb-main.treb-main .treb-toggle-sidebar-button[data-command=revert]{--icon:var(--icon-revert)}.treb-main.treb-main .treb-layout-sidebar>button[data-command=export-xlsx],.treb-main.treb-main .treb-toggle-sidebar-button[data-command=export-xlsx]{--icon:var(--icon-export)}.treb-main.treb-main .treb-layout-sidebar>button[data-command=about],.treb-main.treb-main .treb-toggle-sidebar-button[data-command=about]{--icon:var(--icon-about)}.treb-main.treb-main .treb-toggle-sidebar-button{align-items:center;background:transparent;border:1px solid transparent;border-radius:12px;bottom:6rem;display:flex;height:24px;justify-content:center;margin:0;padding:0;position:absolute;right:.5rem;right:calc(1.5rem - 12px);width:24px;z-index:39}.treb-main.treb-main .treb-toggle-sidebar-button:after{height:12px;mask-image:var(--icon-chevron-right);-webkit-mask-image:var(--icon-chevron-right);width:12px}.treb-main.treb-main .treb-resize-rect{border:1px dotted var(--treb-resize-frame-color,blue);display:block;height:100%;left:0;position:fixed;top:0;width:100%;z-index:9998}.treb-main.treb-main .treb-resize-mask{height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:9999}treb-spreadsheet{display:block;overflow:hidden;position:relative}.treb-default-size{height:550px;width:800px}`;var Ni=`<div class="treb-main treb-theme"><div class="treb-layout-header treb-animate"><div class="treb-toolbar"></div></div><div class="treb-dialog-mask"><div data-bind="dialog" class="treb-embed-dialog"><div data-bind="left"><a href="https://treb.app" target="_blank"><div class="treb-icon-64"></div></a></div><div data-bind="middle"><div data-bind="title" class="treb-embed-dialog-title"></div><div data-bind="message" class="treb-embed-dialog-message"></div><div data-bind="about" class="treb-embed-dialog-body"></div></div><button type="button" title="Close dialog" data-bind="close" class="treb-close-box"><svg viewBox="0 0 16 16"><path d="M11.854 4.146a.5.5 0 0 1 0 .708l-7 7a.5.5 0 0 1-.708-.708l7-7a.5.5 0 0 1 .708 0z"/><path d="M4.146 4.146a.5.5 0 0 0 0 .708l7 7a.5.5 0 0 0 .708-.708l-7-7a.5.5 0 0 0-.708 0z"/></svg></button></div></div><div class="treb-layout-spreadsheet treb-views"><template class="treb-view-template"><div class="treb-view"><div class="treb-formula-bar notranslate" hidden><div class="treb-address-label"><div></div></div><div class="treb-editor-container"><div contenteditable="true"></div></div></div><div class="treb-spreadsheet-backdrop"></div><div class="treb-spreadsheet-body" role="grid"><div class="treb-grid" tabindex="-1"><div class="treb-overlay-container notranslate" translate="no"><div class="treb-overlay-inset"><div class="treb-overlay-editor" contenteditable tabindex="-1" spellcheck="true" role="gridcell"></div></div></div></div></div><div class="treb-spreadsheet-footer" hidden><button class="treb-delete-tab" title="Delete current sheet" data-command="delete-tab" data-conditional="delete-tab"><svg tabindex="-1" viewbox="0 0 16 16"><path d="M4,4 L12,12 M12,4 L4,12"/></svg></button><ol class="treb-spreadsheet-tabs" role="tablist"></ol><button class="treb-add-tab" data-command="add-tab" data-conditional="add-tab" title="Add sheet">+</button><div class="treb-stats-panel"></div><div class="treb-scale-control" data-conditional="scale-control"></div></div><div class="treb-layout-resize-handle" data-conditional="resize"></div><div class="treb-revert-indicator" data-command="revert-indicator" title="This document has been modified from the original version."></div></div></template></div><div class="treb-layout-sidebar treb-animate"><button data-command="recalculate" title="Recalculate"></button> <button data-command="toggle-toolbar" data-conditional="toolbar" title="Toggle toolbar"></button> <button data-command="export-xlsx" data-conditional="export" title="Export as XLSX"></button> <button data-command="revert" data-conditional="revert" title="Revert to original version"></button> <button data-command="about" title="What's this?"></button></div><button class="treb-toggle-sidebar-button" title="Toggle sidebar"></button></div>`;var Pi='<div class="treb-menu" title="File menu" file-menu><button data-icon="file-menu" menu-target></button><div><button data-command="reset">New document</button><div separator></div><button data-command="import-file">Open file...</button> <button data-command="save-json">Save JSON</button><div separator xlsx-support></div><button data-command="export-xlsx" xlsx-support>Export XLSX</button></div></div><div composite narrow><button data-command="justify-left" data-target="justify" title="Left-align text"></button><div class="treb-menu"><button dropdown></button><div class="treb-icon-buttons" data-replace="justify"><button data-command="justify-left" title="Left-align text"></button> <button data-command="justify-center" title="Center-align text"></button> <button data-command="justify-right" title="Right-align text"></button></div></div></div><div composite narrow><button data-command="align-top" data-target="align" title="Align to top"></button><div class="treb-menu"><button dropdown></button><div class="treb-icon-buttons" data-replace="align"><button data-command="align-top" title="Align to top"></button> <button data-command="align-middle" title="Align to middle"></button> <button data-command="align-bottom" title="Align to bottom"></button></div></div></div><div class="group" wide><button data-command="justify-left" title="Left-align text"></button> <button data-command="justify-center" title="Center-align text"></button> <button data-command="justify-right" title="Right-align text"></button></div><div class="group" wide><button data-command="align-top" title="Align to top"></button> <button data-command="align-middle" title="Align to middle"></button> <button data-command="align-bottom" title="Align to bottom"></button></div><div class="group"><button data-command="wrap-text" title="Wrap text"></button> <button data-command="merge-cells" data-id="merge" data-title="Merge cells" data-active-title="Unmerge cells"></button> <button data-command="lock-cells" data-title="Lock cells" data-active-title="Unlock cells"></button> <button data-command="freeze-panes" data-title="Freeze panes" data-active-title="Unfreeze panes" freeze-button></button> <button data-command="insert-table" data-icon="table" data-title="Insert table" data-active-title="Remove table" table-button></button><div class="treb-menu"><button data-icon="comment" data-title="Comment" data-active-title="Update comment"></button><div class="treb-comment-box"><textarea></textarea><div><button data-command="clear-comment">Clear</button> <button data-command="update-comment">Save</button></div></div></div></div><div composite><button data-command="fill-color" data-color-bar="fill" data-color="{}" title="Fill color"></button><div class="treb-menu treb-color-menu" data-color-command="fill-color" data-replace-color="fill" data-default-color-text="No fill"><button dropdown></button><div class="treb-color-chooser"><div class="treb-caption">Theme colors</div><div class="treb-swatches"></div><div class="treb-caption">Other colors</div><div class="treb-swatches"></div><div><input placeholder="New color" class="treb-color-input"> <button data-command="set-color" data-color=""><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" viewBox="0 0 16 16"><path d="M13.854 3.646a.5.5 0 0 1 0 .708l-7 7a.5.5 0 0 1-.708 0l-3.5-3.5a.5.5 0 1 1 .708-.708L6.5 10.293l6.646-6.647a.5.5 0 0 1 .708 0z"/></svg></button></div></div></div></div><div composite><button data-command="text-color" data-color-bar="text" data-color="{}" title="Text color"></button><div class="treb-menu treb-color-menu" data-color-command="text-color" data-replace-color="text" data-default-color-text="Default text color"><button dropdown></button></div></div><div composite><button data-command="border-bottom" data-target="border" title="Bottom border"></button><div class="treb-menu"><button dropdown></button><div class="treb-icon-buttons" data-replace="border"><button data-command="border-top" title="Top border"></button> <button data-command="border-left" title="Left border"></button> <button data-command="border-right" title="Right border"></button> <button data-command="border-bottom" title="Bottom border"></button> <button data-command="border-double-bottom" title="Double bottom border"></button> <button data-command="border-outside" title="Outside borders"></button> <button data-command="border-all" title="All borders"></button> <button data-command="border-none" title="Clear borders"></button><div separator></div><div class="treb-menu treb-color-menu treb-submenu" data-color-command="border-color" data-replace-color="border" title="Border color" data-default-color-text="Default border color"><button data-icon="palette" data-color-bar="border" data-color="{}"></button></div></div></div></div><div composite font-scale><input class="treb-font-scale" title="Font scale"><div class="treb-menu"><button dropdown></button><div><button data-command="font-scale" data-scale="0.8">0.80</button> <button data-command="font-scale" data-scale="0.9">0.90</button> <button data-command="font-scale" data-scale="1.0">1.00</button> <button data-command="font-scale" data-scale="1.1">1.10</button> <button data-command="font-scale" data-scale="1.2">1.20</button> <button data-command="font-scale" data-scale="1.5">1.50</button> <button data-command="font-scale" data-scale="2.0">2.00</button></div></div></div><div class="treb-menu"><button data-icon="layout" title="Rows & columns"></button><div><button data-command="insert-row">Insert row</button> <button data-command="insert-column">Insert column</button> <button data-command="delete-row">Delete row</button> <button data-command="delete-column">Delete column</button><div separator add-remove-sheet></div><button data-command="insert-sheet" add-remove-sheet>Add sheet</button> <button data-command="delete-sheet" add-remove-sheet>Delete sheet</button></div></div><div composite><input class="treb-number-format" title="Number format"><div class="treb-menu"><button dropdown></button><div class="treb-number-format-menu"></div></div></div><div class="treb-split"><button data-command="decrease-precision" title="Decrease precision"></button> <button data-command="increase-precision" title="Increase precision"></button></div><div composite chart-menu><button data-command="insert-column-chart" data-target="annotation" title="Insert column chart"></button><div class="treb-menu"><button dropdown></button><div class="treb-icon-buttons" data-replace="annotation"><button data-command="insert-column-chart" title="Insert column chart"></button> <button data-command="insert-donut-chart" title="Insert donut chart"></button> <button data-command="insert-bar-chart" title="Insert bar chart"></button> <button data-command="insert-line-chart" title="Insert line chart"></button><div separator></div><button data-command="insert-image" title="Insert image"></button></div></div></div><button data-command="recalculate" title="Recalculate" recalculate-button></button>';var qe=class{root;sheet;border_color;color_bar_elements={};replace_targets={};layout_element;views;revert_button;revert_state=!1;toolbar_controls={};swatch_lists={};DOM;constructor(e){typeof e=="string"&&(e=document.querySelector(e)),this.DOM=F.GetInstance(e?.ownerDocument),this.DOM.view&&e instanceof this.DOM.view.HTMLElement&&(this.root=e,this.DOM.doc?.head.querySelector("style[treb-stylesheet]")||this.DOM.doc?.head.prepend(this.DOM.Create("style",void 0,void 0,{text:Hi,attrs:{"treb-stylesheet":""}})))}CoerceAttributeValue(e){if(e===null||e.toString().toLowerCase()==="true"||e==="")return!0;if(e.toLowerCase()==="false")return!1;{let t=Number(e);if(!isNaN(t))return t}return e||""}ParseOptionAttributes(){let e={};if(this.root){let t=this.root.getAttributeNames();for(let r of t){switch(r){case"class":case"style":case"id":continue;case"data-options":case"options":{let o=(this.root.getAttribute(r)||"").split(",");for(let n of o){let a=n.split(/=/);a.length===1?e[a[0]]=!0:e[a[0]]=this.CoerceAttributeValue(a[1])}}continue;case"data-treb":continue;case"inline-document":continue;case"src":e.document=this.root.getAttribute("src")||void 0;continue}r=r.replace(/-/g,"_"),e[r]=this.CoerceAttributeValue(this.root.getAttribute(r))}}return{...e}}AttachElement(e={}){if(e={...this.ParseOptionAttributes(),...e},this.root){if(!e.headless){let t=this.root.getBoundingClientRect();(!t.width||!t.height)&&this.root.classList.add("treb-default-size")}if(this.root.hasAttribute("inline-document")){let t=this.root.getAttribute("inline-document")||"";for(let r of Array.from(this.root.children))if(this.DOM.view&&r instanceof this.DOM.view.HTMLScriptElement&&r.type==="application/json"){let i=r.getAttribute("name")||"";if(i===t||!i&&t==="true"){let o=r.textContent;if(o)try{e.inline_document=JSON.parse(o)}catch(n){console.error(n)}break}}e.inline_document||console.warn("inline document failed")}this.root.innerHTML=Ni,e.container=this.root.querySelector(".treb-layout-spreadsheet")}e.export=!1,this.sheet=new Zt(e),this.root&&this.CreateLayout(this.sheet,this.root)}CreateLayout(e,t){new ResizeObserver(()=>e.Resize()).observe(t),this.layout_element=t.querySelector(".treb-main");let i=t.querySelector(".treb-toggle-sidebar-button");if(i&&this.layout_element){let s=this.layout_element;i.addEventListener("click",()=>{let l=s.getAttribute("collapsed");typeof l=="string"&&(l===""||l==="true")?s.removeAttribute("collapsed"):s.setAttribute("collapsed","")})}(e.options.toolbar==="show"||e.options.toolbar==="show-narrow")&&this.layout_element?.setAttribute("toolbar",""),e.options.collapsed&&this.layout_element?.setAttribute("collapsed","");let o=t.querySelector("[data-command=revert-indicator]");this.DOM.view&&o instanceof this.DOM.view.HTMLElement&&(e.options.revert_indicator?o.addEventListener("click",()=>{e.HandleToolbarMessage({command:"revert-indicator"})}):o.style.display="none"),t.querySelector(".treb-layout-sidebar")?.addEventListener("click",s=>{let l=s.target;if(l.dataset.command)switch(l.dataset.command){case"toggle-toolbar":this.ToggleToolbar();break;default:e.HandleToolbarMessage({command:l.dataset.command});break}}),e.options.toolbar&&this.AttachToolbar(e,t);let a={"table-button":!!e.options.table_button,revert:!!e.options.revert_button,toolbar:!!e.options.toolbar,export:!!e.options.export,resize:!!e.options.resizable,"add-tab":!!e.options.add_tab,"delete-tab":!!e.options.delete_tab||!!e.options.add_tab};for(let[s,l]of Object.entries(a))if(!l){let d=this.layout_element.querySelectorAll(`[data-conditional=${s}]`);for(let u of Array.from(d))u.style.display="none"}if(e.options.revert_button&&(this.revert_button=this.layout_element.querySelector("[data-command=revert]")||void 0),e.options.resizable){let s={width:0,height:0},l={x:0,y:0},d={x:0,y:0};this.views=t.querySelector(".treb-views")||void 0;let u,h,m=t.querySelector(".treb-layout-resize-handle"),f=()=>_(),p=b=>{b.buttons===0?_():(d.x=b.screenX-l.x,d.y=b.screenY-l.y,h&&(h.style.width=s.width+d.x+"px",h.style.height=s.height+d.y+"px"))},_=()=>{if(d.x||d.y){let b=t.getBoundingClientRect();e.options.constrain_width||(t.style.width=b.width+d.x+"px"),t.style.height=b.height+d.y+"px"}u&&(u.removeEventListener("mouseup",f),u.removeEventListener("mousemove",p),u.parentElement?.removeChild(u),u=void 0),h?.parentElement?.removeChild(h),h=void 0};m.addEventListener("mousedown",b=>{b.stopPropagation(),b.preventDefault();let v=t.querySelector(".treb-main");h=this.DOM.Div("treb-resize-rect",v),u=this.DOM.Div("treb-resize-mask",v,{attrs:{style:"cursor: nw-resize;"},events:{mouseup:f,mousemove:p}}),l.x=b.screenX,l.y=b.screenY,d.x=0,d.y=0;let g=this.views?.querySelectorAll(".treb-spreadsheet-body"),w=Array.from(g||[]).map(x=>x.getBoundingClientRect());if(w.length){let x=JSON.parse(JSON.stringify(w.shift()));for(let A of w)x.top=Math.min(A.top,x.top),x.left=Math.min(A.left,x.left),x.right=Math.max(A.right,x.right),x.bottom=Math.max(A.bottom,x.bottom);let S=x.right-x.left,k=x.bottom-x.top;h.style.top=x.top+"px",h.style.left=x.left+"px",h.style.width=S+"px",h.style.height=k+"px",s.width=S,s.height=k}})}setTimeout(()=>this.layout_element?.setAttribute("animate",""),250)}ToggleToolbar(){if(this.layout_element){let e=this.layout_element.getAttribute("toolbar");typeof e=="string"&&(e===""||e==="true")?this.layout_element.removeAttribute("toolbar"):this.layout_element.setAttribute("toolbar","")}}UpdateSelectionStyle(e,t,r){let i=e.selection_state;r.value="";for(let[s,l]of Object.entries(this.toolbar_controls))l&&(l.removeAttribute("active"),l.dataset.title&&(l.title=l.dataset.title));let o=s=>{s&&(s.setAttribute("active",""),s.dataset.activeTitle&&(s.title=s.dataset.activeTitle))};i.comment&&(o(this.toolbar_controls.comment),r.value=i.comment),i.style?.locked&&o(this.toolbar_controls.locked),i.frozen&&o(this.toolbar_controls.freeze),i.style?.wrap&&o(this.toolbar_controls.wrap),this.toolbar_controls.table&&(i.table?(o(this.toolbar_controls.table),this.toolbar_controls.table.dataset.command="remove-table"):this.toolbar_controls.table.dataset.command="insert-table"),this.toolbar_controls.merge&&(i.merge?(o(this.toolbar_controls.merge),this.toolbar_controls.merge.dataset.command="unmerge-cells"):this.toolbar_controls.merge.dataset.command="merge-cells");let n=this.toolbar_controls.format;n&&(i.style?.number_format?n.value=D.SymbolicName(i.style.number_format)||i.style.number_format:n.value="General");let a=this.toolbar_controls.scale;switch(a&&(a.value=e.FormatNumber(i.relative_font_size||1,"0.00")),i.style?.horizontal_align){case"left":o(this.toolbar_controls.left);break;case"center":o(this.toolbar_controls.center);break;case"right":o(this.toolbar_controls.right);break}switch(i.style?.vertical_align){case"top":o(this.toolbar_controls.top);break;case"middle":o(this.toolbar_controls.middle);break;case"bottom":o(this.toolbar_controls.bottom);break}}UpdateDocumentStyles(e,t){{let a=this.DOM.Fragment(),s=e.document_styles.theme_colors.length,l=["Background","Text","Background","Text","Accent"];if(s){let m=e.document_styles.theme_colors[0].length;for(let f=0;f<m;f++)for(let p=0;p<s;p++){let _=e.document_styles.theme_colors[p][f],b=`background: ${_.resolved};`,v=l[p]||l[4];_.color.tint?v+=` (${(_.color.tint>0?"+":"")+_.color.tint*100}%)`:p===0?this.color_bar_elements.fill?.style.setProperty("--treb-default-color",_.resolved):p===1&&(this.color_bar_elements.text?.style.setProperty("--treb-default-color",_.resolved),this.color_bar_elements.border?.style.setProperty("--treb-default-color",_.resolved)),this.DOM.Create("button",void 0,a,{attrs:{style:b,title:v},data:{command:"set-color",color:JSON.stringify(_.color)}})}}this.swatch_lists.theme?.replaceChildren(a),a=this.DOM.Fragment(),this.DOM.Create("button","treb-default-color",a,{attrs:{title:"Default color"},data:{command:"set-color",color:JSON.stringify({})}});let d=["Black","White","Gray","Red","Orange","Yellow","Green","Blue","Violet"],u=d.map(m=>m.toLowerCase()),h=e.document_styles.colors.filter(m=>!u.includes(m.toLowerCase()));for(let m of[...d,...h]){let f=`background: ${m.toLowerCase()};`;this.DOM.Create("button",void 0,a,{attrs:{style:f,title:m},data:{command:"set-color",color:JSON.stringify({text:m.toLowerCase()})}})}this.swatch_lists.other?.replaceChildren(a)}let r=["General","Number","Integer","Percent","Fraction","Accounting","Currency","Scientific"],i=["Timestamp","Long Date","Short Date"];for(let a of e.document_styles.number_formats){if(D.SymbolicName(D.Translate(a)))continue;D.Get(a).date_format?i.push(a):r.push(a)}let o=a=>this.DOM.Create("button",void 0,void 0,{text:a,data:{format:a,command:"number-format"}}),n=this.DOM.Fragment();n.append(...r.map(a=>o(a))),n.append(this.DOM.Div(void 0,void 0,{attrs:{separator:""}})),n.append(...i.map(a=>o(a))),t.textContent="",t.append(n)}UpdateRevertState(e){let t=e.can_revert;this.revert_state!==t&&(this.revert_state=t,(this.revert_button||e.options.revert_indicator)&&(this.revert_state?this.views?.classList.add("treb-can-revert"):this.views?.classList.remove("treb-can-revert"),this.revert_button&&(this.revert_button.dataset.canRevert=t?"true":"false",t?(this.revert_button.classList.remove("sidebar-disabled"),this.revert_button.title="Revert to original version"):(this.revert_button.classList.add("sidebar-disabled"),this.revert_button.title="This is the original version of the document"))))}ReplaceTemplate(e,t,r=!0){let i=e.querySelector(t);if(i&&i.parentElement){for(let o of Array.from(i.content.children))i.parentElement.insertBefore(o,i);r&&i.parentElement.removeChild(i)}else console.warn("template not found",t)}AttachToolbar(e,t){let r=t.querySelector(".treb-layout-header"),i=t.querySelector(".treb-toolbar");i.innerHTML=Pi;let o=[];e.options.toolbar==="narrow"||e.options.toolbar==="show-narrow"?o.push(...Array.from(i.querySelectorAll("[wide]"))):o.push(...Array.from(i.querySelectorAll("[narrow]"))),e.options.file_menu||o.push(i.querySelector("[file-menu]")),e.options.font_scale||o.push(i.querySelector("[font-scale]")),e.options.chart_menu||o.push(i.querySelector("[chart-menu]")),e.options.freeze_button||o.push(i.querySelector("[freeze-button]")),e.options.table_button||o.push(i.querySelector("[table-button]")),!e.options.add_tab&&!e.options.delete_tab&&o.push(...Array.from(i.querySelectorAll("[add-remove-sheet]"))),e.options.toolbar_recalculate_button||o.push(i.querySelector("[recalculate-button]")),o.push(...Array.from(i.querySelectorAll("[xlsx-support]")));for(let g of o)g&&g.parentElement?.removeChild(g);let n=i.querySelector(".treb-color-chooser"),a=i.querySelector(".treb-comment-box textarea");for(let[g,w]of Object.entries({top:"[wide] [data-command=align-top]",middle:"[wide] [data-command=align-middle]",bottom:"[wide] [data-command=align-bottom]",left:"[wide] [data-command=justify-left]",right:"[wide] [data-command=justify-right]",center:"[wide] [data-command=justify-center]",wrap:"[data-command=wrap-text]",merge:"[data-id=merge]",comment:"[data-icon=comment]",locked:"[data-command=lock-cells]",freeze:"[data-command=freeze-panes]",table:"[data-icon=table]",format:"input.treb-number-format",scale:"input.treb-font-scale"})){let x=i.querySelector(w);x&&(this.toolbar_controls[g]=x)}let s=n.querySelectorAll(".treb-swatches");this.swatch_lists={theme:s[0],other:s[1]};let l=t.querySelector("[data-command=increase-precision");l&&(l.textContent=this.sheet?.FormatNumber(0,"0.00")||""),l=t.querySelector("[data-command=decrease-precision"),l&&(l.textContent=this.sheet?.FormatNumber(0,"0.0")||""),l=i.querySelector("[data-command=update-comment]"),a.addEventListener("keydown",g=>{g.key==="Enter"&&(g.shiftKey||g.ctrlKey)&&l.click()});for(let g of["border","annotation","align","justify"])this.replace_targets[g]=i.querySelector(`[data-target=${g}`);for(let g of["fill","text","border"])this.color_bar_elements[g]=i.querySelector(`[data-color-bar=${g}]`);i.addEventListener("click",g=>{let w=g.target,x={format:w.dataset.format,scale:w.dataset.scale},S=w?.dataset.command;if(S){let k=w.parentElement?.dataset.replace;if(k){let A=this.replace_targets[k];A&&(A.dataset.command=S,A.title=w.title||"")}switch(/^border-/.test(S)&&(x.color=this.border_color||{}),S){case"text-color":case"fill-color":x.color={};try{x.color=JSON.parse(w.dataset.color||"{}")}catch(A){console.error(A)}break;case"set-color":S=n.dataset.colorCommand||"",x.color={};try{x.color=JSON.parse(w.dataset.color||"{}")}catch(A){console.error(A)}if(S==="border-color"&&(this.border_color=x.color),n.dataset.target){let A=this.color_bar_elements[n.dataset.target];A&&(A.style.setProperty("--treb-color-bar-color",w.style.backgroundColor),A.dataset.color=w.dataset.color||"{}")}break;case"update-comment":x.comment=a.value;break}e.HandleToolbarMessage({command:S,...x})}});let d=(g,w)=>{let x=i.querySelector(g);if(x){let S="";x.addEventListener("focusin",()=>S=x.value),x.addEventListener("keydown",k=>{switch(k.key){case"Escape":x.value=S,e.Focus();break;case"Enter":w(x.value)||(x.value=S,e.Focus());break;default:return}k.stopPropagation(),k.preventDefault()})}};d("input.treb-number-format",g=>g?(e.HandleToolbarMessage({command:"number-format",format:g}),!0):!1),d("input.treb-font-scale",g=>{let w=Number(g);return!w||isNaN(w)?(console.warn("invalid scale value"),!1):(e.HandleToolbarMessage({command:"font-scale",scale:w}),!0)});let u=n.querySelector("input"),h=n.querySelector("input + button");u.addEventListener("input",g=>{if(g instanceof InputEvent&&g.isComposing)return;h.style.background=u.value||"";let w=h.style.backgroundColor||"#fff",x=de.MeasureColor(w),S=Z.RGBToHSL(x[0],x[1],x[2]);h.style.color=S.l>.5?"#000":"#fff",h.dataset.color=JSON.stringify(h.style.backgroundColor?{text:h.style.backgroundColor}:{})}),u.addEventListener("keydown",g=>{g.key==="Enter"&&(g.stopPropagation(),g.preventDefault(),h.click())}),/firefox/i.test(navigator.userAgent)?r.addEventListener("scroll",()=>{this.DOM.view&&this.DOM.doc?.activeElement instanceof this.DOM.view.HTMLElement&&this.DOM.doc.activeElement?.blur()}):r.addEventListener("scroll",()=>e.Focus());let m=!1,f=g=>{g.key==="Escape"&&(g.stopPropagation(),g.preventDefault(),Promise.resolve().then(()=>e.Focus()))},p=g=>{if(m){if(g.relatedTarget instanceof Node&&i.contains(g.relatedTarget))return;i.removeEventListener("keydown",f),i.removeEventListener("focusout",p),m=!1}},_=g=>{let w=g.target,x=w?.parentElement;if(w?.classList.contains("treb-menu")){x=w;for(let S of Array.from(x.children))if(S.tagName==="BUTTON"){w=S;break}}else if(!x?.classList.contains("treb-menu"))return;if(w&&x){m||(i.addEventListener("focusout",p),i.addEventListener("keydown",f),m=!0),x.dataset.colorCommand&&(n.querySelector(".treb-default-color")?.setAttribute("title",x.dataset.defaultColorText||"Default color"),x.appendChild(n),n.dataset.colorCommand=x.dataset.colorCommand,n.dataset.target=x.dataset.replaceColor||"");let S=x.querySelector("div"),k=r.getBoundingClientRect(),A=w.getBoundingClientRect(),{left:M}=A,I=x.parentElement;I?.hasAttribute("composite")&&(M=I.firstElementChild.getBoundingClientRect().left);let q=S.getBoundingClientRect();x.classList.contains("treb-submenu")?(S.style.top=A.top-q.height/2+"px",M+A.width+6+q.width>k.right?S.style.left=M-6-q.width+"px":S.style.left=M+A.width+6+"px"):(S.style.top=A.bottom+"px",M+q.width>k.right-6?S.style.left=A.right-q.width+"px":S.style.left=M+"px");let me=S.querySelector("textarea");me&&requestAnimationFrame(()=>me.focus())}},b=this.root?.querySelector(".treb-number-format-menu");b&&(this.UpdateDocumentStyles(e,b),this.UpdateSelectionStyle(e,i,a),e.Subscribe(g=>{switch(g.type){case"focus-view":break;case"data":case"document-change":case"load":case"reset":this.UpdateDocumentStyles(e,b),this.UpdateSelectionStyle(e,i,a),this.UpdateRevertState(e);break;case"selection":this.UpdateSelectionStyle(e,i,a);break}}));let v=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);if(i.addEventListener("focusin",g=>{_(g)}),v){let g=Array.from(i.querySelectorAll(".treb-menu"));for(let w of g)w.tabIndex=0;i.addEventListener("mousedown",w=>{_(w)})}}};var Qt=class{version="28.0.5";CreateSpreadsheet(e){let t=e.container,r=new qe(t);if(r.AttachElement(e),!r.sheet)throw new Error("construction failed");return r.sheet}},dn=new Qt;if(typeof HTMLElement<"u"){class c extends HTMLElement{get sheet(){return this.instance.sheet}instance;constructor(){super(),this.instance=new qe(this)}connectedCallback(){this.instance.AttachElement()}}typeof customElements<"u"&&(customElements.get("treb-spreadsheet")?console.info("custom element treb-spreadsheet is already defined."):customElements.define("treb-spreadsheet",c))}export{dn as TREB,Qt as TREBGlobal};
|
|
15
|
+
`)}SaveLocalFile(e="treb.json",t={}){this.SaveToDesktop(e,t)}SaveToDesktop(e="treb.json",t={}){let r=this.grid.model.document_name||"document",i,o,n=e.split(/\./).filter(s=>s.trim().length),a=n.length?n[n.length-1].toLowerCase():"treb";if(n.length<=1||e==="treb.json")if(e==="treb.json"&&(a=e),(a==="csv"||a==="tsv")&&this.grid.model.sheets.length>1){let s=this.grid.active_sheet.name;e=(r+"-"+s).toLowerCase().replace(/\W+/g,"-")+"."+a}else e=r.toLowerCase().replace(/\W+/g,"-")+"."+a;switch(a){case"csv":o=this.ExportDelimited({delimiter:","});break;case"tsv":o=this.ExportDelimited({delimiter:" "});break;case"treb":case"json":case"treb.json":i=this.SerializeDocument({...t}),o=JSON.stringify(i,void 0,t.pretty?2:void 0),this.last_save_version=this.file_version;break;default:throw new Error("invalid file type")}if(o&&e){let s=new Blob([o],{type:"text/plain;charset=utf-8"});this.SaveAs(s,e)}}LoadCSV(e,t){if(this.parent_view)return this.parent_view.LoadCSV(e,t);this.grid.FromCSV(e),this.ResetInternal(),this.grid.Update(!0),this.Publish({type:"load",source:t}),this.UpdateDocumentStyles()}ScrollOffset(e){return this.grid.ScrollOffset(e)}LoadDocument(e,t={}){if(this.parent_view)return this.parent_view.LoadDocument(e,t);if(this.initial_load_source||(this.initial_load_source=t.source),t={flush:!0,recalculate:!1,...t},t.override_selection&&e.sheet_data){let r=Array.isArray(e.sheet_data)?e.sheet_data:[e.sheet_data];for(let i of r)if(i.id===t.override_selection.target.sheet_id){i.selection=t.override_selection;break}}if(this.ImportDocumentData(e,t.override_sheet),this.calculator.Reset(),e.rendered_values&&!t.recalculate?(this.calculator.RebuildClean(!0),this.ApplyConditionalFormats(this.grid.active_sheet,!1),this.grid.Update()):this.Recalculate(),this.InflateAnnotations(),t.flush&&this.FlushUndo(),this.Publish({type:"load",source:t.source}),this.UpdateDocumentStyles(),this.loaded=!0,t.scroll){let r=t.scroll;Promise.resolve().then(()=>this.ScrollTo(r))}}SetNote(e,t){if(typeof e=="string"){let r=this.model.ResolveAddress(e,this.grid.active_sheet);e=V(r)?r:r.start}this.grid.SetNote(e,t)}SetValidation(e,t,r){if(typeof e=="string"){let i=this.model.ResolveAddress(e,this.grid.active_sheet);e=V(i)?i:i.start}if(typeof t>"u"||Array.isArray(t))this.grid.SetValidation(e,t,r);else{let i=this.model.ResolveArea(t,this.grid.active_sheet);this.grid.SetValidation(e,i,r)}}RemoveFunction(e){let t=e.toUpperCase();this.model.macro_functions.delete(t),this.UpdateAC()}DefineFunction(e,t="",r="0"){if(!e.length||/^[^A-Za-z]/.test(e)||/[^\w_.]/.test(e))throw new Error("invalid function name");typeof t=="string"&&(t=t?t.split(this.parser.argument_separator).map(i=>i.trim()):[]);for(let i of t)if(!i.length||/^[^A-Za-z]/.test(i)||/[^\w_.]/.test(i))throw new Error("invalid argument name");this.RemoveFunction(e),this.grid.model.macro_functions.set(e.toUpperCase(),{name:e,function_def:r,argument_names:t,expression:this.parser.Parse(r).expression}),this.UpdateAC()}SerializeDocument(e={}){e={share_resources:!0,shrink:!0,...e};let t=this.grid.Serialize(e),r={app:"@trebco/treb",version:"28.2.0",revision:this.file_version,name:this.grid.model.document_name,user_data:this.grid.model.user_data,decimal_mark:z.decimal_separator,...t};if(e.share_resources){let i=1,o=new Map,n=Array.isArray(r.sheet_data)?r.sheet_data:[r.sheet_data],a=l=>{let d=o.get(l);return d||(d=(i++).toString(),o.set(l,d)),`resource:${d}`};for(let l of n)if(l){l.background_image&&(l.background_image=a(l.background_image));for(let d of l.annotations||[])d.type==="image"&&d.data?.src&&(d.data.src=a(d.data.src))}let s={};for(let[l,d]of o.entries())s[d]=l;r.shared_resources=s}return e.rendered_values&&(r.rendered_values=!0),r}async Recalculate(e){let t;e&&e.type==="data"&&e.area&&(t=e.area),this.calculator.Calculate(t),this.ApplyConditionalFormats(this.grid.active_sheet,!1),this.grid.Update(!0),this.UpdateAnnotations(),this.Publish({type:"data"}),this.grid.UpdateStats()}SaveLocalStorage(e=this.options.local_storage){if(!e){console.warn("not saving, no key");return}let t=JSON.stringify(this.SerializeDocument({rendered_values:!0,expand_arrays:!0}));localStorage.setItem(e,t)}Undo(){if(this.parent_view)return this.parent_view.Undo();if(this.undo_pointer<=1){console.warn("nothing to undo");return}let e=this.undo_stack[--this.undo_pointer-1],t=e.selection?JSON.parse(e.selection):void 0;this.LoadDocument(JSON.parse(e.data),{flush:!1,override_selection:t,source:"undo"})}About(){this.dialog?.ShowDialog({type:"about"})}ScrollTo(e,t={}){if(typeof e=="string"){let r=this.model.ResolveAddress(e,this.grid.active_sheet);e=V(r)?r:r.start}t={x:!0,y:!0,smooth:!1,...t},this.grid.ScrollTo(e,t.x,t.y,t.smooth)}Resolve(e){let t=this.model.ResolveAddress(e,this.grid.active_sheet);return V(t)?t.sheet_id?t:void 0:t.start.sheet_id?t:void 0}Unresolve(e,t=!0,r=!0){if(typeof e=="string"){let i=this.Resolve(e);if(!i)throw new Error("invalid reference");e=i}return this.calculator.Unresolve(e,this.grid.active_sheet,t,r)}Evaluate(e,t={}){return this.calculator.Evaluate(e,this.grid.active_sheet,t)}GetSelection(e=!0){let t=this.grid.GetSelection();if(t.empty)return"";let r="";if(t.area.count>1?r=y.CellAddressToLabel(t.area.start)+":"+y.CellAddressToLabel(t.area.end):r=y.CellAddressToLabel(t.area.start),!e)return r;let i=t.area.start.sheet_id||this.grid.active_sheet.id,o=this.calculator.ResolveSheetName(i,!0);return o?o+"!"+r:r}ParseNumber(e){return be.TryParse(e).value}FormatNumber(e,t="General"){return D.Get(t).Format(e)}ApplyBorders(e,t,r=1){this.grid.ApplyBorders2(e?this.model.ResolveArea(e,this.grid.active_sheet):void 0,t,{},r)}ApplyStyle(e,t={},r=!0){this.grid.ApplyStyle(e?this.model.ResolveArea(e,this.grid.active_sheet):void 0,t,r)}ClearName(e){this.grid.SetName(e)}DefineName(e,t){if(typeof t>"u"||t===null)throw new Error("invalid value (null or undefined)");if(typeof t=="object"&&(V(t)||Fr(t))){this.grid.SetName(e,this.model.ResolveArea(t,this.grid.active_sheet));return}if(typeof t=="string"){let r=this.parser.Parse(t);if(!r.expression)throw new Error("invalid expression");switch(r.expression.type){case"address":case"range":this.grid.SetName(e,this.model.ResolveArea(r.expression,this.grid.active_sheet));return}this.grid.SetName(e,void 0,t)}else this.grid.SetName(e,void 0,t.toString())}SetLink(e,t=""){if(typeof e=="string"){let r=this.model.ResolveAddress(e,this.grid.active_sheet);e=V(r)?r:r.start}if(!e){let r=this.GetSelectionReference();if(r.empty)return;e=r.target}this.grid.SetLink(e,t)}Select(e){let t;e&&(t=this.model.ResolveArea(e,this.grid.active_sheet),t.start.sheet_id&&t.start.sheet_id!==this.grid.active_sheet.id&&this.grid.ActivateSheetID(t.start.sheet_id)),this.grid.SelectRange(t)}GetRange(e,t={}){if(!e){let r=this.GetSelectionReference();r.empty||(e=r.area)}if(e)return t.type||(t.formatted&&(t.type="formatted"),t.formula&&(t.type="formula")),this.grid.GetRange(this.model.ResolveAddress(e,this.grid.active_sheet),t.type)}GetStyle(e,t=!1){if(!e){let r=this.GetSelectionReference();r.empty||(e=r.area)}if(e)return this.grid.GetRangeStyle(this.model.ResolveAddress(e,this.grid.active_sheet),t)}SetRange(e,t=void 0,r={}){if(!e){let i=this.GetSelectionReference();i.empty||(e=i.area)}if(e){let i=this.model.ResolveArea(e,this.grid.active_sheet);if(r.spill&&Array.isArray(t)){let o=t.length,n=Math.max(0,...t.map(s=>s.length)),a={row:i.start.row+o+1,column:i.start.column+n+1};i.ConsumeAddress(a)}return this.grid.SetRange(i,t,r)}}Subscribe(e){return this.events.Subscribe(e)}Cancel(e){this.events.Cancel(e)}ApplyConditionalFormats(e,t){let r=[];if(e.conditional_formats.length||e.flush_conditional_formats){for(let i of e.conditional_formats)r.push(i.area),i.type==="gradient"&&(i.internal||(i.internal={}),i.internal.gradient||(i.internal.gradient=new ft(i.stops,this.grid.theme,i.color_space)));e.ApplyConditionalFormats()}t&&this.grid.Update(!0,r)}ResolveTable(e){let t;if(typeof e=="string"){let r=e.toLowerCase();this.model.tables.has(r)&&(t=this.model.tables.get(r))}if(!t){let r=this.model.ResolveAddress(e,this.grid.active_sheet);V(r)||(r=r.start),t=this.grid.GetTableReference(r)}return t}SaveAs(e,t){let r=this.DOM.Create("a");r.href=URL.createObjectURL(e),r.download=t,r.click(),URL.revokeObjectURL(r.href)}Publish(e){this.events.Publish(e)}async ImportXLSX(e,t){console.warn("this build does not include xlsx support.")}ResetInternal(){this.calculator.Reset(),this.FlushUndo(),this.file_version=this.last_save_version=0}HandleCellEvent(e){if(e.data?.type==="hyperlink"){let r="hyperlink invalid target",i=e.data.data||"";if(typeof i=="string"){if(/^https{0,1}:\/\//i.test(i)){if(!this.options.hyperlinks){console.warn("hyperlinks are disabled");return}let o=this.DOM.Create("a");o.setAttribute("target",this.options.hyperlinks),o.setAttribute("href",i),o.setAttribute("noreferrer","true"),o.setAttribute("nofollow","true"),o.click();return}else{let o=this.parser.Parse(i);if(o.expression){if(o.expression.type==="address"){(o.expression.sheet||o.expression.sheet_id)&&this.ActivateSheet(o.expression.sheet||o.expression.sheet_id),this.Select(i);return}else if(o.expression.type==="range"){(o.expression.start.sheet||o.expression.start.sheet_id)&&this.ActivateSheet(o.expression.start.sheet||o.expression.start.sheet_id),this.Select(i);return}}}console.warn(r,2);return}}}OnSheetChange(e){for(let t of e.activate.annotations)this.InflateAnnotation(t),this.calculator.UpdateAnnotations(t,e.activate);this.UpdateAnnotations(),this.calculator.UpdateConditionals(),this.ApplyConditionalFormats(e.activate,!0)}HandleDrag(e){if(e.dataTransfer&&e.dataTransfer.types){if(e.dataTransfer.types.some&&e.dataTransfer.types.some(t=>t==="Files"))e.preventDefault();else for(let t=0;t<e.dataTransfer.types.length;t++)if(e.dataTransfer.types[t]==="files"){e.preventDefault();return}}}HandleDrop(e){if(e.dataTransfer&&e.dataTransfer.files&&e.dataTransfer.files.length){e.preventDefault();let t=e.dataTransfer.files[0];/^image/.test(t.type)?this.InsertImageInternal(t):this.LoadFileInternal(t,"drag-and-drop").catch(()=>{})}}SelectFile2(e,t){if(!this.file_chooser){let r=this.DOM.Create("input",void 0,void 0,{attrs:{type:"file"},events:{change:()=>{if(r.files&&r.files[0]){let i=r.files[0];switch(r.value="",this.file_chooser_operation){case 2:this.InsertImageInternal(i);break;case 1:this.LoadFileInternal(i,"local-file",!0);break;default:console.warn("file chooser: no operation");break}}}}});this.file_chooser=r}if(!this.file_chooser)throw new Error("could not create file chooser");this.file_chooser_operation=t,this.file_chooser.accept=e||"",this.file_chooser.click()}async InsertImageInternal(e){if(this.options.max_file_size&&e.size>this.options.max_file_size){this.dialog?.ShowDialog({type:"error",message:"This file exceeds the allowed image size. Please try a smaller image.",title:"Error adding image",timeout:3e3,close_box:!0});return}let t=e;await new Promise((r,i)=>{let o=new FileReader;o.onload=async()=>{try{if(o.result){let n;if(typeof o.result=="string")n=o.result;else{n="";let l=new Uint8Array(o.result);for(let d=0;d<l.byteLength;d++)n+=String.fromCharCode(l[d])}let a=this.DOM.Create("img");a.src=n,await Promise.resolve();let s=this.grid.CreateAnnotation({type:"image",formula:"",data:{scale:"",src:n,original_size:{width:a.width||300,height:a.height||300}}},void 0,void 0,{top:30,left:30,width:a.width||300,height:a.height||300})}r()}catch(n){i(n)}},o.onabort=()=>{i("Aborted")},o.onerror=()=>{i("File error")},setTimeout(()=>{o.readAsDataURL(t)},100)})}LoadFileInternal(e,t,r=!0){if(!e)return Promise.resolve();let i=new FileReader;return new Promise((o,n)=>{let a=s=>{i.onload=null,i.onabort=null,i.onerror=null,s?(r&&(this.dialog?.ShowDialog({title:"Error reading file",close_box:!0,message:"Please make sure your file is a valid CSV or TREB file.",type:"error",timeout:3e3}),console.error(s)),n(s)):o()};i.onload=()=>{try{if(i.result)if(/\.csv$/i.test(e.name))this.LoadCSV(i.result,t);else{let s=JSON.parse(i.result);this.LoadDocument(s,{source:t})}a()}catch(s){a(s?.toString())}},i.onabort=()=>{a("Aborted")},i.onerror=()=>{a("File error")},setTimeout(()=>{/\.xls[xm]$/i.test(e.name)?i.readAsArrayBuffer(e):i.readAsText(e)},100)})}UpdateAnnotations(){for(let e of this.grid.active_sheet.annotations){if(e.temp.vertex){let r=e.temp.vertex;if(r.state_id!==e.temp.state){e.temp.state=r.state_id;for(let i of e.view)i.dirty=!0}}let t=e.view[this.grid.view_index]||{};t.dirty&&(t.update_callback&&t.update_callback(),this.grid.AnnotationUpdated(e))}}RebuildAllAnnotations(){for(let e of this.grid.active_sheet.annotations){this.InflateAnnotation(e);let t=e.view[this.grid.view_index]||{};t.resize_callback&&t.resize_callback(),t.update_callback&&t.update_callback()}}InflateAnnotations(){for(let e of this.grid.active_sheet.annotations)this.InflateAnnotation(e)}InflateAnnotation(e){if(this.grid.headless)return;let t=e.view[this.grid.view_index]||{};if(t.inflated){e.dirty&&(t.resize_callback&&t.resize_callback(),e.dirty=!1);return}if(t.inflated=!0,e.dirty&&(e.dirty=!1),t.content_node){if(e.data.type==="treb-chart"){let r=this.CreateChart();r.Initialize(t.content_node);let i=()=>{if(e.data.formula){let o=this.parser.Parse(e.data.formula);if(o&&o.expression&&o.expression.type==="call"){this.parser.Walk(o.expression,s=>((s.type==="address"||s.type==="range")&&this.model.ResolveSheetID(s,void 0,this.grid.active_sheet),!0));let n=o.expression.name.toLowerCase(),a=this.calculator.CalculateExpression(o.expression);r.Exec(n,a)}}r.Update()};t.resize_callback=()=>{this.grid.headless||(r.Resize(),r.Update())},t.update_callback=()=>{this.grid.headless||i()},t.node?.parentElement&&(this.grid.headless||i())}else if(e.data.type==="image"&&typeof e.data.data?.src=="string"){let r=mt(e.data.data.src);if(r){let i=this.DOM.Create("img");i.src=r,e.data.data.scale==="fixed"?(i.style.position="relative",i.style.left="50%",i.style.top="50%",i.style.transform="translate(-50%, -50%)"):(i.style.width="100%",i.style.height="100%"),t.content_node.appendChild(i)}}}}DocumentChange(e){Promise.resolve().then(()=>{this.file_version++,this.file_version>=65536&&(this.file_version=1);let t=JSON.stringify(this.SerializeDocument({optimize:"size",rendered_values:!0,expand_arrays:!0}));this.options.undo&&this.PushUndo(t,e,!1),this.Publish({type:"document-change"})})}ResolveStorageKey(e,t=""){if(e){if(e===!0){let r=0,i=document.location.href;for(let n=0,a=i.length;n<a;n++)r=(r<<5)-r+i.charCodeAt(n),r|=0;let o=Math.abs(r).toString(16);return t?t+"-"+o:o}return e}}PushUndo(e,t,r=!0){let i=t||this.last_selection;this.undo_stack[this.undo_pointer-1]&&(this.undo_stack[this.undo_pointer-1].selection=i),r&&(this.file_version++,this.file_version>=65536&&(this.file_version=1)),e||(e=JSON.stringify(this.SerializeDocument({optimize:"size",rendered_values:!0,expand_arrays:!0}))),this.undo_stack[this.undo_pointer++]={data:e,selection:void 0};let o=this.undo_stack.length;if(o>16){let n=o-16;this.undo_stack=this.undo_stack.slice(n),this.undo_pointer-=n}}FlushUndo(e=!0){this.undo_stack=[],this.undo_pointer=0,this.last_save_version=this.file_version,e&&this.PushUndo(void 0,void 0,!1)}UpdateSelection(e){this.last_selection=JSON.stringify(e),this.Publish({type:"selection"})}UpdateSelectionStyle(e){let t=this.grid.GetFreeze(),r={frozen:!!t.rows||!!t.columns};if(e||(e=this.grid.GetSelection()),e&&!e.empty){r.selection=e;let i=this.grid.active_sheet.CellData(e.target);r.table=!!i.table,r.merge=!!i.merge_area,r.merge&&i.merge_area&&(i.merge_area.start.row!==e.target.row||i.merge_area.start.column!==e.target.column)&&(i=this.grid.active_sheet.CellData(i.merge_area.start)),r.comment=i.note,r.style=i.style?{...i.style}:void 0,r.relative_font_size=L.RelativeFontSize(r.style||{},this.grid.theme.grid_cell||{})}this.selection_state=r}UpdateDocumentStyles(e=!0){let t={},r={};for(let o of this.grid.model.sheets.list)o.NumberFormatsAndColors(r,t);this.document_styles.colors=Object.keys(r),this.document_styles.number_formats=Object.keys(t),this.document_styles.theme_colors=[];let i=[.5,.25,0,-.25,-.5];for(let o=0;o<10;o++)this.document_styles.theme_colors.push(i.map(n=>{let a={theme:o,tint:n},s=E(this.grid.theme,a);return{color:a,resolved:s}}))}ConvertLocale(e){let t=new Pe;t.flags={...this.parser.flags};let r,i;e.decimal_mark==="."?(t.decimal_mark=".",t.argument_separator=",",r=",",i=";"):(t.decimal_mark=",",t.argument_separator=";",r=".",i=",");let o=n=>{let a=t.Parse(n);if(a.expression)return"="+t.Render(a.expression,{missing:"",convert_decimal:r,convert_argument_separator:i})};if(e.macro_functions)for(let n of e.macro_functions){let a=o(n.function_def);a&&(n.function_def=a)}if(e.sheet_data){let n=Array.isArray(e.sheet_data)?e.sheet_data:[e.sheet_data];for(let a of n){if(a.annotations){for(let s of a.annotations)if(s.formula){let l=o(s.formula);l&&(s.formula=l)}}if(a.data?.length)for(let s of a.data){let l=tr(s)?[s]:s.cells;for(let d of l)if(d.value&&typeof d.value=="string"&&d.value[0]==="="){let u=o(d.value.slice(1));u&&(d.value=u)}}}}}CompareVersions(e="",t=""){let r=e.split(".").map(a=>Number(a)||0).concat([0,0,0]),i=t.split(".").map(a=>Number(a)||0).concat([0,0,0]),o=[0,1,2],n={match:0};for(let a=0;a<3;a++)if(r[a]!==i[a]){n.match=r[a]>i[a]?1:-1,n.level=o[a];break}return n}ImportDocumentData(e,t){this.file_version=e.revision||0;let r=[],i=this.CompareVersions(e.version,"28.2.0");if(i.match>0&&(i.level===0||i.level===1)&&console.warn(`The file you are opening was created with a newer version of TREB (${e.version} vs 28.2.0).
|
|
16
|
+
You may encounter compatibility errors.`),e.sheet_data&&(Array.isArray(e.sheet_data)?r=e.sheet_data:r.push(e.sheet_data)),e.shared_resources){let a=e.shared_resources,s=l=>/^resource:/.test(l)?a[l.substring(9)]||"":l;for(let l of r){l.background_image&&(l.background_image=s(l.background_image));for(let d of l.annotations||[])d.type==="image"&&d.data?.src&&(d.data.src=s(d.data.src))}}e.decimal_mark&&e.decimal_mark!==z.decimal_separator&&this.ConvertLocale(e);let o=this.grid.model;if(o.tables.clear(),e.tables)for(let a of e.tables)o.tables.set(a.name.toLowerCase(),a);this.grid.UpdateSheets(r,void 0,t||e.active_sheet);for(let[a,s]of this.model.tables.entries())if(s.area.start.sheet_id){let l=o.sheets.Find(s.area.start.sheet_id);if(l)for(let d=s.area.start.row;d<=s.area.end.row;d++)for(let u=s.area.start.column;u<=s.area.end.column;u++){let h=l.cells.GetCell({row:d,column:u},!0);h.table=s}}o.document_name=e.name,o.user_data=e.user_data,o.named_ranges.Reset();let n=e.named_ranges;if(!n&&r[0]&&r[0].named_ranges&&(n=r[0].named_ranges),n&&o.named_ranges.Deserialize(n),o.named_expressions.clear(),e.named_expressions)for(let a of e.named_expressions){let s=this.parser.Parse(a.expression);s.valid&&s.expression&&(this.parser.Walk(s.expression,l=>{if(l.type==="address"||l.type==="range"){if(l.type==="range"&&(l=l.start),!l.sheet_id&&l.sheet){let d=this.model.sheets.Find(l.sheet);d&&(l.sheet_id=d.id)}return l.sheet_id||(l.sheet_id=this.grid.active_sheet.id),!1}return!0}),o.named_expressions.set(a.name.toUpperCase(),s.expression))}if(o.macro_functions.clear(),e.macro_functions)for(let a of e.macro_functions)o.macro_functions.set(a.name.toUpperCase(),{...a,expression:this.parser.Parse(a.function_def||"").expression});this.UpdateAC()}async LoadWorker(e){if(!1){if(index_worker_exports)try{}catch(t){}}else console.warn("this build does not include xlsx support.");throw new Error("creating worker failed")}HandleKeyDown(e){e.ctrlKey&&(e.code==="KeyZ"||e.key==="z")&&(e.stopPropagation(),e.preventDefault(),this.Undo())}};var Hi=`@charset "UTF-8";.treb-main.treb-main .treb-mouse-mask{background:transparent;bottom:0;display:none;left:0;position:fixed;right:0;top:0;z-index:9999}.treb-main.treb-main .treb-mouse-mask.column-resize{cursor:col-resize}.treb-main.treb-main .treb-mouse-mask.row-resize{cursor:row-resize}.treb-main.treb-main .treb-mouse-mask.nub-select{cursor:crosshair}.treb-main.treb-main .treb-mouse-mask.move{cursor:move}.treb-main.treb-main .treb-mouse-mask.nw-resize{cursor:nw-resize}.treb-main.treb-main .treb-note{max-width:15em;min-width:15em}.treb-main.treb-main .treb-hover-title,.treb-main.treb-main .treb-note{background:var(--treb-note-background,#fff);border:1px solid var(--treb-note-border-color,var(--treb-ui-border-color,#ddd));border-radius:2px;box-shadow:0 1px 4px 2px hsla(0,0%,43%,.2);color:var(--treb-note-color,#333);font-family:BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,"sans-serif";font-size:10.5pt;left:100px;line-height:normal;opacity:0;padding:7px 10px;position:fixed;top:100px;transition:opacity .2s;white-space:pre-line;z-index:39}.treb-main.treb-main .treb-hover-title{min-width:10em;pointer-events:none}.treb-main.treb-main .treb-sort-button{background:#fff;border:1px solid #ccc;border-radius:2px;height:1em;left:100px;opacity:0;pointer-events:none;position:absolute;top:100px;transition:opacity .1s ease;width:1em;z-index:39}.treb-main.treb-main .treb-sort-button:after{box-sizing:border-box}.treb-main.treb-main .treb-sort-button.asc:after{border:.4em solid transparent;border-top-color:currentcolor;content:"";height:.8em;left:50%;opacity:.5;position:absolute;top:50%;transform:translate(-50%,-25%);width:.8em}.treb-main.treb-main .treb-sort-button.desc:after{border:.4em solid transparent;border-bottom-color:currentcolor;content:"";height:.8em;left:50%;opacity:.5;position:absolute;top:50%;transform:translate(-50%,-80%);width:.8em}.treb-main.treb-main .treb-tooltip{border-radius:2px;box-shadow:0 1px 4px 2px hsla(0,0%,43%,.2);display:none;line-height:normal;padding:2px 10px;pointer-events:none;position:fixed;z-index:39}.treb-main.treb-main .treb-tooltip.arrow-up:after{border:4px solid transparent;border-bottom-color:inherit;box-sizing:border-box;content:" ";height:8px;left:calc(50% - 4px);overflow:hidden;position:absolute;top:-8px;width:8px}.treb-main.treb-main .treb-tooltip.arrow-left:after{border:4px solid transparent;border-right-color:inherit;box-sizing:border-box;content:" ";height:8px;left:-8px;overflow:hidden;position:absolute;top:calc(50% - 4px);width:8px}.treb-main.treb-main .treb-dropdown-caret{background:var(--treb-dropdown-caret-background,#fff);border:1px solid var(--treb-dropdown-caret-border-color,#ccc);border-radius:2px;box-shadow:0 1px 4px 2px hsla(0,0%,43%,.2);display:none;height:20px;position:absolute;width:20px;z-index:39}.treb-main.treb-main .treb-dropdown-caret path{fill:none;stroke:var(--treb-dropdown-caret-color,#444);stroke-linecap:round;stroke-linejoin:round;stroke-width:2}.treb-main.treb-main .treb-dropdown-list{background:var(--treb-dropdown-background,#fff);border:1px solid var(--treb-dropdown-border-color,unset);box-shadow:0 1px 4px 2px hsla(0,0%,43%,.2);color:var(--treb-dropdown-color,inherit);display:none;font-size:10pt;max-height:10em;outline:none;overflow-y:auto;position:absolute;text-align:left;z-index:39}.treb-main.treb-main .treb-dropdown-list div{cursor:default;padding:2px}.treb-main.treb-main .treb-dropdown-list div.selected{background:var(--treb-dropdown-selected-background,#555);color:var(--treb-dropdown-selected-color,#fff)}.treb-main.treb-main .treb-dropdown-caret.active{background:var(--treb-dropdown-caret-active-background,#eee)}.treb-main.treb-main .treb-dropdown-caret.active+.treb-dropdown-list{display:block}.treb-main.treb-main .treb-error-highlight{background:rgba(255,0,0,.25);opacity:0;pointer-events:none;position:absolute;transition:opacity .15s ease-in-out;z-index:40}.treb-main.treb-main .treb-autocomplete{box-sizing:border-box;font-size:inherit;font-weight:400;line-height:normal;max-height:10em;overflow-y:auto;position:fixed;text-align:left;top:-1000px;z-index:39}.treb-main.treb-main .treb-autocomplete *{box-sizing:border-box}.treb-main.treb-main .treb-autocomplete ul{list-style-type:none}.treb-main.treb-main .treb-autocomplete ul,.treb-main.treb-main .treb-autocomplete ul li{font-size:inherit;font-weight:inherit;margin:0;padding:0}.treb-main.treb-main .treb-autocomplete ul li a{color:inherit;cursor:default;display:inline-block;font-size:inherit;font-weight:inherit;padding:3px 6px;text-decoration:none;width:100%}.treb-main.treb-main .treb-autocomplete-tooltip{position:fixed;top:-1000px;white-space:pre;z-index:39}.treb-main.treb-main .treb-formula-bar{display:flex;flex-direction:row;grid-area:1/1/2/2;max-width:100%;overflow-x:hidden;padding:0 2px 12px;text-align:left}.treb-main.treb-main .treb-formula-bar[hidden]{display:none}.treb-main.treb-main .treb-formula-bar .treb-address-label{border:1px solid var(--treb-formula-bar-border-color,var(--treb-ui-border-color,#ccc));border-radius:2px;display:flex;flex-direction:column;height:1.75em;justify-content:center;margin-right:6px;min-height:1.5em;min-width:95px;padding-left:3px;width:95px}.treb-main.treb-main .treb-formula-bar .treb-address-label>div{outline:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.treb-main.treb-main .treb-formula-bar .expand-button{background:transparent;border:0;border-radius:2px;height:1.75em;margin-left:2px;outline:none;padding:1px}.treb-main.treb-main .treb-formula-bar .expand-button:after{border:5px solid transparent;border-top-color:#999;content:" ";display:inline-block;margin:0;padding:0;position:relative;top:-6px;transition:transform .15s ease}.treb-main.treb-main .treb-formula-bar[expanded] .expand-button:after{transform:rotate(180deg) translateY(6px)}.treb-main.treb-main .treb-formula-bar .treb-editor-container{border:1px solid var(--treb-formula-bar-border-color,var(--treb-ui-border-color,#ccc));border-radius:2px;display:flex;flex-direction:column;flex-grow:1;height:1.75em;justify-content:center;min-width:0}.treb-main.treb-main .treb-formula-bar[expanded] .treb-editor-container{height:4.5em;transition:height .1s ease-in-out}.treb-main.treb-main .treb-formula-bar[expanded] .treb-editor-container>div{overflow-y:auto}.treb-main.treb-main .treb-formula-bar .treb-editor-container>div{flex-grow:1;line-height:1.35;margin:2px;min-height:1em;outline:none;overflow-x:hidden;overflow-y:hidden;white-space:pre-wrap;width:100%}.treb-main.treb-main .treb-formula-bar .formula-button{border:1px solid #ccc;border-radius:2px;height:1.75em;margin-left:6px;overflow:hidden;white-space:nowrap}.treb-main.treb-main .treb-formula-bar .formula-button .text-1{font-style:italic;padding-right:.1em}.treb-main.treb-main .treb-formula-bar .formula-button .text-1:after{content:"f"}.treb-main.treb-main .treb-formula-bar .formula-button .text-2{font-size:.7em}.treb-main.treb-main .treb-formula-bar .formula-button .text-2:after{content:"(x)"}.treb-main.treb-main .treb-mouse-mask .ghost-tab{position:fixed}.treb-main.treb-main .treb-spreadsheet-footer{align-items:center;grid-area:3/1/4/2}.treb-main.treb-main .treb-spreadsheet-footer,.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs{color:var(--treb-ui-color,inherit);display:flex;flex-direction:row;height:2.2em;list-style-type:none;max-width:100%;padding-inline-start:0;z-index:2}.treb-main.treb-main .treb-spreadsheet-footer[hidden]{display:none}.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs>li{display:inline-block;position:relative}.treb-main.treb-main .treb-spreadsheet-footer .treb-add-tab,.treb-main.treb-main .treb-spreadsheet-footer .treb-delete-tab,.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs>li{align-items:center;border-bottom-left-radius:5px;border-bottom-right-radius:5px;border-top-width:1px;border:1px solid var(--treb-tab-bar-tab-border-color,var(--treb-ui-border-color,#ccc));border-top:0 solid var(--treb-tab-bar-tab-border-color,var(--treb-ui-border-color,#ccc));color:var(--treb-tab-bar-tab-color,var(--treb-ui-color,#fff));cursor:default;display:inline-flex;font-size:inherit;height:100%;justify-content:center;margin-right:-2px;overflow:hidden;padding:0 .75em;z-index:1}.treb-main.treb-main .treb-spreadsheet-footer .treb-add-tab:active,.treb-main.treb-main .treb-spreadsheet-footer .treb-add-tab:focus,.treb-main.treb-main .treb-spreadsheet-footer .treb-delete-tab:active,.treb-main.treb-main .treb-spreadsheet-footer .treb-delete-tab:focus,.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs>li:active,.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs>li:focus{z-index:3}.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs>li{overflow-x:hidden;white-space:nowrap}.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs>li[selected]{z-index:2}.treb-main.treb-main .treb-spreadsheet-footer .treb-scale-control{align-items:center;display:flex;flex-direction:row;font-size:inherit;height:2.2em;justify-content:center;position:relative;width:5em}.treb-main.treb-main .treb-spreadsheet-footer .treb-scale-control .treb-scale-input{background:transparent;border:1px solid transparent;border-radius:2px;color:inherit;font-family:inherit;font-size:inherit;padding:initial;text-align:center;transition:border-color .25s ease,background-color .25s ease;width:4em}.treb-main.treb-main .treb-spreadsheet-footer .treb-scale-control .treb-slider-container{accent-color:var(--treb-scale-slider-accent-color,undefined);align-items:center;background:var(--treb-scale-slider-background,#fff);border:1px solid var(--treb-scale-slider-border-color,var(--treb-ui-border-color,#ccc));display:flex;flex-direction:row;height:4em;justify-content:center;left:.5em;opacity:0;pointer-events:none;position:absolute;top:0;transform:rotate(-90deg);transform-origin:left top;transition:opacity .25s ease;width:10em;z-index:40}.treb-main.treb-main .treb-spreadsheet-footer .treb-scale-control .treb-scale-input:focus,.treb-main.treb-main .treb-spreadsheet-footer .treb-scale-control:hover .treb-scale-input{border-color:var(--treb-ui-border-color,#ccc)}.treb-main.treb-main .treb-spreadsheet-footer .treb-scale-control .treb-slider-container>input[type=range]{width:8.5em}.treb-main.treb-main .treb-spreadsheet-footer .treb-scale-control .treb-scale-input:focus+.treb-slider-container,.treb-main.treb-main .treb-spreadsheet-footer .treb-scale-control .treb-slider-container:focus-within,.treb-main.treb-main .treb-spreadsheet-footer .treb-scale-control:hover .treb-slider-container{opacity:.85;pointer-events:auto}.treb-main.treb-main .treb-spreadsheet-footer .treb-delete-tab{align-items:center;background:transparent;border:none;border-bottom-left-radius:5px;border-bottom-right-radius:5px;border-top:0;color:currentColor;cursor:default;display:inline-flex;flex-direction:row;font-size:inherit;margin-right:-2px;padding:.25em .75em;z-index:1}.treb-main.treb-main .treb-spreadsheet-footer .treb-delete-tab svg{height:1em;opacity:.75;pointer-events:none;transition:opacity .125s ease-in-out;width:1em}.treb-main.treb-main .treb-spreadsheet-footer .treb-delete-tab:hover svg{opacity:.75}.treb-main.treb-main .treb-spreadsheet-footer .treb-delete-tab path{stroke:currentColor;stroke-width:1.5px;stroke-linecap:round}.treb-main.treb-main .treb-spreadsheet-footer .treb-delete-tab:active,.treb-main.treb-main .treb-spreadsheet-footer .treb-delete-tab:focus{z-index:3}.treb-main.treb-main .treb-spreadsheet-footer .treb-stats-panel{margin-left:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.treb-main.treb-main .treb-spreadsheet-footer .treb-stats-panel>*{margin-left:.5em}.treb-main.treb-main .treb-spreadsheet-footer .treb-stats-panel .treb-stats-value{background:var(--treb-stats-value-background,#f8f8ff);border:1px solid var(--treb-stats-value-border-color,var(--treb-ui-border-color,#ddd));border-radius:3px;padding:0 .3em}.treb-main.treb-main .treb-grid .treb-overlay-container{margin:0;opacity:0;outline:none;padding:0;position:absolute;z-index:24}.treb-main.treb-main .treb-grid .treb-overlay-container.align-right .treb-overlay-inset{padding-right:3px;right:0;text-align:right}.treb-main.treb-main .treb-grid .treb-overlay-container.align-center .treb-overlay-inset{left:50%;text-align:center;transform:translateX(-50%)}.treb-main.treb-main .treb-grid .treb-overlay-inset{display:flex;flex-direction:column;height:100%;justify-content:flex-end;margin:0;min-width:100%;padding:0 4px;position:absolute}.treb-main.treb-main .treb-grid .treb-overlay-editor{outline:none;position:relative;white-space:nowrap;white-space:pre}.treb-main.treb-main .treb-grid .treb-overlay-editor.firefox:before{content:"\u200B"}.treb-main.treb-main .treb-buffer-canvas{display:none;position:absolute}.treb-main.treb-main .treb-spreadsheet-body{-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:transparent;display:flex;grid-area:2/1/3/2;overflow:hidden;position:relative;z-index:1}.treb-main.treb-main .treb-grid{-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:transparent;display:grid;flex-grow:1;grid-template-columns:100px auto;grid-template-rows:20px auto;order:2;outline:none;overflow:scroll;position:relative}.treb-main.treb-main .treb-grid .tile-cover.grid-cover{grid-area:2/2/3/3}.treb-main.treb-main .treb-grid .tile-cover.column-header-cover{grid-area:1/2/2/3;position:-webkit-sticky;position:sticky;top:0}.treb-main.treb-main .treb-grid .tile-cover.row-header-cover{grid-area:2/1/3/2;left:0;position:-webkit-sticky;position:sticky}.treb-main.treb-main .treb-grid .treb-grid-selection{grid-area:1/1/2/2}.treb-main.treb-main .treb-grid .treb-corner{grid-area:1/1/2/2;position:-webkit-sticky;position:sticky}.treb-main.treb-main .treb-grid .treb-left-header{display:grid;grid-area:2/1/3/2;grid-template-columns:auto;grid-template-rows:auto;position:-webkit-sticky;position:sticky}.treb-main.treb-main .treb-grid .treb-top-header{display:grid;grid-area:1/2/2/3;grid-template-columns:auto;grid-template-rows:auto;position:-webkit-sticky;position:sticky}.treb-main.treb-main .treb-grid .treb-contents{display:grid;grid-area:2/2/3/3;grid-template-columns:auto;grid-template-rows:auto}.treb-main.treb-main .treb-grid.safari::-webkit-scrollbar{-webkit-appearance:none;height:7px;width:7px}.treb-main.treb-main .treb-grid.safari::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.25);border-radius:4px;-webkit-box-shadow:0 0 1px hsla(0,0%,100%,.5)}.treb-main.treb-main .treb-grid canvas{background:transparent;border:0;margin:0;padding:0}.treb-main.treb-main .treb-grid .nub-select{cursor:crosshair}.treb-main.treb-main .treb-grid .link-pointer{cursor:pointer}.treb-main.treb-main .treb-grid .mock-selection-node{background:red;left:-100px;position:fixed;top:-100px}.treb-main.treb-main .treb-grid .tile-cover{background:transparent;position:relative;z-index:14}.treb-main.treb-main .treb-grid .tile-cover.column-header-cover{z-index:22}.treb-main.treb-main .treb-grid .tile-cover.column-header-cover.resize{cursor:col-resize}.treb-main.treb-main .treb-grid .tile-cover.row-header-cover{z-index:22}.treb-main.treb-main .treb-grid .tile-cover.row-header-cover.resize{cursor:row-resize}.treb-main.treb-main .treb-grid .frozen-annotation-container,.treb-main.treb-main .treb-grid .treb-annotation-container{left:0;pointer-events:none;position:absolute;top:0;z-index:16}.treb-main.treb-main .treb-grid .frozen-annotation-container .annotation,.treb-main.treb-main .treb-grid .treb-annotation-container .annotation{background:hsla(0,0%,100%,.5);border:1px solid #999;overflow:hidden;pointer-events:auto;position:absolute;z-index:1}.treb-main.treb-main .treb-grid .frozen-annotation-container .annotation .annotation-content,.treb-main.treb-main .treb-grid .treb-annotation-container .annotation .annotation-content{font-family:inherit;font-size:inherit;height:100%;left:0;position:absolute;top:0;width:100%;z-index:1}.treb-main.treb-main .treb-grid .frozen-annotation-container .annotation .annotation-move-target,.treb-main.treb-main .treb-grid .treb-annotation-container .annotation .annotation-move-target{cursor:move;height:10%;left:0;min-height:14px;position:absolute;top:0;width:100%;z-index:2}.treb-main.treb-main .treb-grid .frozen-annotation-container .annotation .annotation-resize-target,.treb-main.treb-main .treb-grid .treb-annotation-container .annotation .annotation-resize-target{bottom:0;cursor:nwse-resize;height:10%;min-height:14px;min-width:14px;position:absolute;right:0;width:10%;z-index:3}.treb-main.treb-main .treb-grid .frozen-annotation-container .annotation.clone-focus,.treb-main.treb-main .treb-grid .frozen-annotation-container .annotation.retain-focus,.treb-main.treb-main .treb-grid .frozen-annotation-container .annotation:focus,.treb-main.treb-main .treb-grid .treb-annotation-container .annotation.clone-focus,.treb-main.treb-main .treb-grid .treb-annotation-container .annotation.retain-focus,.treb-main.treb-main .treb-grid .treb-annotation-container .annotation:focus{box-shadow:0 0 0 3px rgba(14,165,233,.33)}.treb-main.treb-main .treb-grid .frozen-annotation-container .move-buffer,.treb-main.treb-main .treb-grid .treb-annotation-container .move-buffer{border:1px solid red;cursor:move;height:10%;left:0;position:absolute;top:0;width:100%}.treb-main.treb-main .treb-grid .treb-grid-selection{background:transparent;position:absolute;-moz-transform:scale(1);z-index:10}.treb-main.treb-main .treb-grid .frozen-selection{overflow:hidden;pointer-events:none;position:absolute;-moz-transform:scale(1);transition:background .33s;z-index:12}.treb-main.treb-main .treb-grid .frozen-selection.frozen-selection-rows{border-bottom:1px solid transparent}.treb-main.treb-main .treb-grid .frozen-selection.frozen-selection-columns{border-right:1px solid transparent}.treb-main.treb-main .treb-grid .frozen-annotation-container{height:100%;left:0;overflow:hidden;position:absolute;top:0;width:100%}.treb-main.treb-main .treb-grid .treb-corner{left:0;top:0;z-index:20}.treb-main.treb-main .treb-grid .treb-corner canvas{left:0;pointer-events:none;position:absolute;top:0}.treb-main.treb-main .treb-grid .treb-left-header{left:0;pointer-events:none;z-index:18}.treb-main.treb-main .treb-grid .treb-top-header{pointer-events:none;top:0;z-index:18}.treb-main.treb-main .treb-grid .treb-contents{height:2000px;width:2000px}.treb-main.treb-main{--alternate-selection-color-1:#fbb13c;--alternate-selection-color-2:#40c040;--alternate-selection-color-3:#b66d0d;--alternate-selection-color-4:#2176ae;--alternate-selection-color-5:#fe6847;--text-reference-color-1:#e08a00;--text-reference-color-2:#3aad3a;--text-reference-color-3:#b66d0d;--text-reference-color-4:#2176ae;--text-reference-color-5:#fe2f01}.treb-main.treb-main:focus-within .treb-grid-selection .primary-selection,.treb-main.treb-main:focus-within .treb-header-overlay{color:var(--treb-selection-color,#4caaf1)}.treb-main.treb-main .theme-color-1{color:var(--treb-theme-color-1,#e7e6e6)}.treb-main.treb-main .theme-color-2{color:var(--treb-theme-color-2,#44546a)}.treb-main.treb-main .theme-color-3{color:var(--treb-theme-color-3,#4472c4)}.treb-main.treb-main .theme-color-4{color:var(--treb-theme-color-4,#ed7d31)}.treb-main.treb-main .theme-color-5{color:var(--treb-theme-color-5,#a5a5a5)}.treb-main.treb-main .theme-color-6{color:var(--treb-theme-color-6,#ffc000)}.treb-main.treb-main .theme-color-7{color:var(--treb-theme-color-7,#5b9bd5)}.treb-main.treb-main .theme-color-8{color:var(--treb-theme-color-8,#70ad47)}.treb-main.treb-main .theme-color-9{color:var(--treb-theme-color-9,#0563c1)}.treb-main.treb-main .theme-color-10{color:var(--treb-theme-color-10,#954f72)}.treb-main.treb-main .treb-offset-dark{color:#000}.treb-main.treb-main .treb-offset-light{color:#fff}.treb-main.treb-main .note-marker{background:var(--treb-note-marker-color,#6fab20)}.treb-main.treb-main .grid-headers{stroke:var(--treb-grid-header-grid-color,var(--treb-grid-grid-color,#ccccd4));background:var(--treb-grid-header-background,#eeeef2);color:var(--treb-grid-header-color,var(--treb-grid-default-color,#666));font-family:var(--treb-grid-header-font-family,inherit);font-size:var(--treb-grid-header-font-size,10pt);font-style:var(--treb-grid-header-font-style,normal);font-weight:var(--treb-grid-header-font-weight,normal)}.treb-main.treb-main .grid-cells{stroke:var(--treb-grid-grid-color,#ccccd4);background:var(--treb-grid-background,#fff);color:var(--treb-grid-default-color,inherit);font-family:var(--treb-grid-font-family,inherit);font-size:var(--treb-grid-font-size,14px)}.treb-main.treb-main .frozen-selection.highlight-area{background:rgba(87,184,255,.25);border-bottom-color:#2176ae;border-left-color:#2176ae}.treb-main.treb-main .treb-autocomplete-tooltip{background:var(--treb-autocomplete-tooltip-background,#fffbb5);border:1px solid var(--treb-autocomplete-tooltip-border-color,unset);border-radius:2px;color:var(--treb-autocomplete-tooltip-color,inherit);font-size:14px;line-height:normal;margin:4px 0;padding:3px 8px}.treb-main.treb-main .treb-autocomplete-tooltip .active-argument{font-weight:700}.treb-main.treb-main .treb-autocomplete-tooltip .function-description{font-style:italic}.treb-main.treb-main .treb-autocomplete{background:var(--treb-autocomplete-background,#fff);border:1px solid var(--treb-autocomplete-border-color,var(--treb-ui-border-color,#ccc));border-radius:2px;box-shadow:0 1px 4px 2px hsla(0,0%,43%,.2);font-size:14px}.treb-main.treb-main .treb-autocomplete li{color:var(--treb-autocomplete-entry-color,#333)}.treb-main.treb-main .treb-autocomplete li a.selected{background:var(--treb-autocomplete-selected-entry-background,#2e8dd6);color:var(--treb-autocomplete-selected-entry-color,#fff)}.treb-main.treb-main .treb-header-overlay{stroke:none;color:var(--treb-selection-color-unfocused,var(--treb-selection-color,#4caaf1))}.treb-main.treb-main .treb-header-overlay .treb-overlay{fill:#000;stroke:none;opacity:.05}.treb-main.treb-main .treb-header-overlay .treb-highlight{fill:currentColor}.treb-main.treb-main .treb-editor-container>div [data-highlight-index="1"],.treb-main.treb-main .treb-overlay-editor [data-highlight-index="1"]{color:var(--text-reference-color-1)}.treb-main.treb-main .treb-editor-container>div [data-highlight-index="2"],.treb-main.treb-main .treb-overlay-editor [data-highlight-index="2"]{color:var(--text-reference-color-2)}.treb-main.treb-main .treb-editor-container>div [data-highlight-index="3"],.treb-main.treb-main .treb-overlay-editor [data-highlight-index="3"]{color:var(--text-reference-color-3)}.treb-main.treb-main .treb-editor-container>div [data-highlight-index="4"],.treb-main.treb-main .treb-overlay-editor [data-highlight-index="4"]{color:var(--text-reference-color-4)}.treb-main.treb-main .treb-editor-container>div [data-highlight-index="5"],.treb-main.treb-main .treb-overlay-editor [data-highlight-index="5"]{color:var(--text-reference-color-5)}.treb-main.treb-main .treb-editor-container>div span.highlight-1,.treb-main.treb-main .treb-overlay-editor span.highlight-1{color:var(--text-reference-color-1)}.treb-main.treb-main .treb-editor-container>div span.highlight-2,.treb-main.treb-main .treb-overlay-editor span.highlight-2{color:var(--text-reference-color-2)}.treb-main.treb-main .treb-editor-container>div span.highlight-3,.treb-main.treb-main .treb-overlay-editor span.highlight-3{color:var(--text-reference-color-3)}.treb-main.treb-main .treb-editor-container>div span.highlight-4,.treb-main.treb-main .treb-overlay-editor span.highlight-4{color:var(--text-reference-color-4)}.treb-main.treb-main .treb-editor-container>div span.highlight-5,.treb-main.treb-main .treb-overlay-editor span.highlight-5{color:var(--text-reference-color-5)}.treb-main.treb-main .frozen-selection .selection,.treb-main.treb-main .treb-grid-selection .selection{stroke-width:var(--treb-selection-stroke-width,2px)}.treb-main.treb-main .frozen-selection .selection .outline,.treb-main.treb-main .treb-grid-selection .selection .outline{stroke:currentColor;fill:none}.treb-main.treb-main .frozen-selection .selection .fill,.treb-main.treb-main .treb-grid-selection .selection .fill{stroke:none;fill:currentColor;opacity:var(--treb-selection-fill-opacity,.1)}.treb-main.treb-main .frozen-selection .alternate-selection,.treb-main.treb-main .treb-grid-selection .alternate-selection{stroke-dasharray:var(--treb-alternate-selection-dasharray,3 2)}.treb-main.treb-main .frozen-selection .alternate-selection:nth-of-type(1n),.treb-main.treb-main .treb-grid-selection .alternate-selection:nth-of-type(1n){color:var(--alternate-selection-color-1)}.treb-main.treb-main .frozen-selection .alternate-selection:nth-of-type(2n),.treb-main.treb-main .treb-grid-selection .alternate-selection:nth-of-type(2n){color:var(--alternate-selection-color-2)}.treb-main.treb-main .frozen-selection .alternate-selection:nth-of-type(3n),.treb-main.treb-main .treb-grid-selection .alternate-selection:nth-of-type(3n){color:var(--alternate-selection-color-3)}.treb-main.treb-main .frozen-selection .alternate-selection:nth-of-type(4n),.treb-main.treb-main .treb-grid-selection .alternate-selection:nth-of-type(4n){color:var(--alternate-selection-color-4)}.treb-main.treb-main .frozen-selection .alternate-selection:nth-of-type(5n),.treb-main.treb-main .treb-grid-selection .alternate-selection:nth-of-type(5n){color:var(--alternate-selection-color-5)}.treb-main.treb-main .frozen-selection .primary-selection,.treb-main.treb-main .treb-grid-selection .primary-selection{color:var(--treb-selection-color-unfocused,var(--treb-selection-color,#4caaf1))}.treb-main.treb-main .frozen-selection .primary-selection .nub,.treb-main.treb-main .treb-grid-selection .primary-selection .nub{stroke:#fff;fill:currentColor;stroke-width:1px}.treb-main.treb-main .treb-tooltip{background:var(--treb-resize-tooltip-background,rgba(0,0,0,.8));border-color:var(--treb-resize-tooltip-background,rgba(0,0,0,.8));color:var(--treb-resize-tooltip-color,#fff);font-size:11pt}.treb-main.treb-main .treb-spreadsheet-footer .treb-add-tab,.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs>li{background:var(--treb-tab-bar-tab-background,#eeeef2);color:var(--treb-tab-bar-tab-color,var(--treb-ui-color,inherit))}.treb-main.treb-main .treb-spreadsheet-footer .treb-add-tab[selected],.treb-main.treb-main .treb-spreadsheet-footer .treb-spreadsheet-tabs>li[selected]{background:var(--treb-tab-bar-active-tab-background,#fff);color:var(--treb-tab-bar-active-tab-color,var(--treb-ui-color,inherit))}.treb-main.treb-main .treb-formula-bar .treb-address-label,.treb-main.treb-main .treb-formula-bar .treb-editor-container{background:var(--treb-formula-bar-background,transparent);color:var(--treb-formula-bar-color,var(--treb-ui-color,inherit))}.treb-main.treb-main .treb-formula-bar .treb-address-label[locked],.treb-main.treb-main .treb-formula-bar .treb-editor-container[locked]{background:var(--treb-formula-bar-locked-background,#eef4fc);position:relative}.treb-main.treb-main .treb-formula-bar .treb-address-label[locked]:after,.treb-main.treb-main .treb-formula-bar .treb-editor-container[locked]:after{--icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath fill='currentColor' d='M416 224h-16v-80C400 65 335 0 256 0S112 65 112 144v80H96c-35 0-64 29-64 64v160c0 35 29 64 64 64h320c35 0 64-29 64-64V288c0-35-29-64-64-64Zm-240-80c0-44 36-80 80-80s80 36 80 80v80H176v-80Z'/%3E%3C/svg%3E");background:var(--treb-formula-bar-lock-icon-color,currentColor);content:"";height:12px;mask-image:var(--icon);-webkit-mask-image:var(--icon);mask-position:center;-webkit-mask-position:center;mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat;mask-size:12px 12px;-webkit-mask-size:12px 12px;opacity:.4;position:absolute;right:2px;top:2px;width:12px}.treb-main.treb-main.treb-ua-windows .grid-cells{font-family:var(--treb-grid-font-family-windows,var(--treb-grid-font-family,"Calibri","BlinkMacSystemFont","Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue","sans-serif"));font-size:var(--treb-grid-font-size-windows,var(--treb-grid-font-size,12pt))}.treb-main.treb-main.treb-ua-osx .grid-cells{font-family:var(--treb-grid-font-family-osx,var(--treb-grid-font-family,inherit));font-size:var(--treb-grid-font-size-osx,var(--treb-grid-font-size,10pt))}.treb-dark-theme{--treb-autocomplete-background:#333;--treb-autocomplete-border-color:#fff;--treb-autocomplete-entry-color:#fff;--treb-autocomplete-selected-entry-background:darkred;--treb-autocomplete-tooltip-background:darkred;--treb-autocomplete-tooltip-border-color:#fff;--treb-autocomplete-tooltip-color:#fff;--treb-chart-background:#000;--treb-chart-grid-color:#976;--treb-chart-text-color:#fff;--treb-dialog-background:#000;--treb-dialog-color:#fff;--treb-dropdown-background:#000;--treb-dropdown-border-color:#fff;--treb-dropdown-caret-active-background:darkred;--treb-dropdown-caret-background:#444;--treb-dropdown-caret-border-color:#fff;--treb-dropdown-caret-color:#fff;--treb-dropdown-color:#fff;--treb-dropdown-selected-background:darkred;--treb-grid-background:#000;--treb-grid-default-color:#fff;--treb-grid-grid-color:#444;--treb-grid-header-background:#444;--treb-grid-header-grid-color:#000;--treb-note-background:#333;--treb-note-border-color:#aaa;--treb-note-color:#fff;--treb-note-marker-color:pink;--treb-resize-tooltip-background:#fff;--treb-resize-tooltip-color:#000;--treb-scale-slider-accent-color:#fff;--treb-scale-slider-background:#333;--treb-scale-slider-border-color:#aaa;--treb-selection-color:#ff0;--treb-selection-fill-opacity:.2;--treb-sidebar-button-background:#000;--treb-sidebar-button-border-color:#888;--treb-stats-value-background:#223;--treb-tab-bar-active-tab-background:#444;--treb-tab-bar-tab-background:#000;--treb-tab-bar-tab-color:#fff;--treb-theme-color-1:#222;--treb-theme-color-2:#ddd;--treb-toolbar-active-button-background:#555;--treb-toolbar-button-background:#000;--treb-toolbar-hover-button-background:#444;--treb-ui-color:#fff;--treb-table-header-background:#334;--treb-table-odd-background:#122;--treb-table-header-font-weight:700;--treb-table-header-border-top:#889;--treb-table-header-border-bottom:#889;--treb-table-footer-border-bottom:#889;--treb-table-odd-border-top:#889;--treb-table-odd-border-bottom:#889;--treb-table-even-border-top:#889;--treb-table-even-border-bottom:#889;--treb-table-total-border-top:#889;--treb-table-total-border-bottom:#889;--treb-table-total-background:#334;--treb-table-total-font-weight:700;--treb-color-scheme:dark;--treb-resize-handle-color:#add8e6;--treb-resize-frame-color:#add8e6;--treb-formula-bar-locked-background:#234;--treb-grid-background:#1e1e1e;--treb-grid-header-background:#565656;--treb-grid-header-color:#ddd;--treb-tab-bar-active-tab-background:field;--treb-tab-bar-tab-background:transparent;--treb-tab-bar-tab-border-color:#444;--treb-ui-border-color:#aaa;--treb-toolbar-button-background:#565656;--treb-toolbar-button-background:#212121;--treb-toolbar-border-color:#434343;--treb-toolbar-color:#ddd}@media (prefers-color-scheme:dark){.treb-light-dark-theme{--treb-autocomplete-background:#333;--treb-autocomplete-border-color:#fff;--treb-autocomplete-entry-color:#fff;--treb-autocomplete-selected-entry-background:darkred;--treb-autocomplete-tooltip-background:darkred;--treb-autocomplete-tooltip-border-color:#fff;--treb-autocomplete-tooltip-color:#fff;--treb-chart-background:#000;--treb-chart-grid-color:#976;--treb-chart-text-color:#fff;--treb-dialog-background:#000;--treb-dialog-color:#fff;--treb-dropdown-background:#000;--treb-dropdown-border-color:#fff;--treb-dropdown-caret-active-background:darkred;--treb-dropdown-caret-background:#444;--treb-dropdown-caret-border-color:#fff;--treb-dropdown-caret-color:#fff;--treb-dropdown-color:#fff;--treb-dropdown-selected-background:darkred;--treb-grid-background:#000;--treb-grid-default-color:#fff;--treb-grid-grid-color:#444;--treb-grid-header-background:#444;--treb-grid-header-grid-color:#000;--treb-note-background:#333;--treb-note-border-color:#aaa;--treb-note-color:#fff;--treb-note-marker-color:pink;--treb-resize-tooltip-background:#fff;--treb-resize-tooltip-color:#000;--treb-scale-slider-accent-color:#fff;--treb-scale-slider-background:#333;--treb-scale-slider-border-color:#aaa;--treb-selection-color:#ff0;--treb-selection-fill-opacity:.2;--treb-sidebar-button-background:#000;--treb-sidebar-button-border-color:#888;--treb-stats-value-background:#223;--treb-tab-bar-active-tab-background:#444;--treb-tab-bar-tab-background:#000;--treb-tab-bar-tab-color:#fff;--treb-theme-color-1:#222;--treb-theme-color-2:#ddd;--treb-toolbar-active-button-background:#555;--treb-toolbar-button-background:#000;--treb-toolbar-hover-button-background:#444;--treb-ui-color:#fff;--treb-table-header-background:#334;--treb-table-odd-background:#122;--treb-table-header-font-weight:700;--treb-table-header-border-top:#889;--treb-table-header-border-bottom:#889;--treb-table-footer-border-bottom:#889;--treb-table-odd-border-top:#889;--treb-table-odd-border-bottom:#889;--treb-table-even-border-top:#889;--treb-table-even-border-bottom:#889;--treb-table-total-border-top:#889;--treb-table-total-border-bottom:#889;--treb-table-total-background:#334;--treb-table-total-font-weight:700;--treb-color-scheme:dark;--treb-resize-handle-color:#add8e6;--treb-resize-frame-color:#add8e6;--treb-formula-bar-locked-background:#234;--treb-grid-background:#1e1e1e;--treb-grid-header-background:#565656;--treb-grid-header-color:#ddd;--treb-tab-bar-active-tab-background:field;--treb-tab-bar-tab-background:transparent;--treb-tab-bar-tab-border-color:#444;--treb-ui-border-color:#aaa;--treb-toolbar-button-background:#565656;--treb-toolbar-button-background:#212121;--treb-toolbar-border-color:#434343;--treb-toolbar-color:#ddd}}.treb-chart,.treb-main.treb-main .treb-chart{background:var(--treb-chart-background,#fff)}.treb-chart .series-1{color:var(--treb-chart-color-series-1,#80b1d3)}.treb-chart .series-2{color:var(--treb-chart-color-series-2,#8dd3c7)}.treb-chart .series-3{color:var(--treb-chart-color-series-3,#bebada)}.treb-chart .series-4{color:var(--treb-chart-color-series-4,#fb8072)}.treb-chart .series-5{color:var(--treb-chart-color-series-5,#fdb462)}.treb-chart .series-6{color:var(--treb-chart-color-series-6,#b3de69)}.treb-chart .series-7{color:var(--treb-chart-color-series-7,#fccde5)}.treb-chart .series-8{color:var(--treb-chart-color-series-8,#d9d9d9)}.treb-chart .series-9{color:var(--treb-chart-color-series-9,#bc80bd)}.treb-chart .series-10{color:var(--treb-chart-color-series-10,#ccebc5)}.treb-chart .series-11{color:var(--treb-chart-color-series-11,#ffed6f)}.treb-chart .series-12{color:var(--treb-chart-color-series-12,#ffffb3)}.treb-chart .chart-title{font-size:1.4em}.treb-chart .axis-group{font-size:.9em}.treb-chart text{fill:var(--treb-chart-text-color,#000);stroke:none}.treb-chart .legend{font-size:1.05em}.treb-chart .legend rect{fill:currentColor}.treb-chart .chart-grid,.treb-chart .chart-ticks{stroke:var(--treb-chart-grid-color,#ddd)}.treb-chart .label-target{stroke:none;fill:transparent}.treb-chart path.label-target{transition:fill .2s}.treb-chart path.label-target:hover{fill:rgba(0,0,0,.15)}.treb-chart .data-label{opacity:0;pointer-events:none;transition:opacity .2s ease-in-out}.treb-chart .data-label text{fill:#fff}.treb-chart .data-label path{fill:#000}.treb-chart .data-label .marker-highlight{fill:currentColor;stroke:none}.treb-chart .label-target:hover+.data-label{opacity:1}.treb-chart .chart-line{stroke:currentColor;fill:none;stroke-width:2}.treb-chart .chart-area .line{stroke:currentColor;stroke-width:2px;fill:none}.treb-chart .chart-area .fill{fill:currentColor;opacity:.5}.treb-chart .scatter-plot{stroke-width:3;fill:none;stroke:currentColor}.treb-chart .scatter-plot .fill{fill:currentColor;stroke:none;opacity:.5}.treb-chart .scatter-plot .marker{stroke-width:2.5px;fill:#fff;transition:stroke-width .15s ease-in}.treb-chart .scatter-plot .marker:hover{stroke-width:5px}.treb-chart .donut path{fill:currentColor}.treb-chart .donut path.callout{fill:none;stroke:#999;stroke-dasharray:2 2}.treb-chart .donut text.callout-label{font-size:1em}.treb-chart .chart-column{fill:currentColor;stroke:none}.treb-chart .mc-correlation{stroke:currentColor;stroke-width:1}.treb-main.treb-main{--treb-icon-svg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' width='153.073' height='133.742' viewBox='0.673 4.629 153.073 133.742'%3E%3ClinearGradient id='a' x1='.673' x2='153.746' y1='71.5' y2='71.5' gradientUnits='userSpaceOnUse'%3E%3Cstop offset='0' style='stop-color:%235cb5ff'/%3E%3Cstop offset='1' style='stop-color:%230059b9'/%3E%3C/linearGradient%3E%3Cpath fill='url(%23a)' d='M91.656 28.313c-4.989 0-17.266 6.249-21.305 8.504-2.344-2.473-2.603-6.162-3.036-10.933-2.344 2.429-.824 9.806 0 12.496-10.238 7.635-18.83 15.531-27.597 24.471-2.992-4.729-5.031-8.593-5.726-17.183-3.038 6.509.867 15.057 3.121 19.784-9.674 12.193-19.263 25.297-27.03 37.834-35.488-74.973 72.853-119.534 143.663-88.855-43.867 29.199-55.192 121.353-132.248 96.843-5.423 7.809-9.069 18.006-13.538 27.072-3.73.263-6.334-1.646-7.288-3.12 7.506-18.181 17.183-34.192 27.075-49.984 10.718.306 21.346.478 30.198-1.04-7.681-2.038-16.877-.78-26.032-3.123C37.51 70.361 45.667 62.203 53.78 54.004c8.808.782 17.746 3.21 27.074 1.041-8.111-1.431-15.966-1.952-22.909-4.165 7.594-8.378 22.777-17.491 33.711-22.567z'/%3E%3C/svg%3E")}.treb-main.treb-main .treb-icon-64{background:no-repeat 50%/100% var(--treb-icon-svg);height:64px;width:64px}.treb-main.treb-main .treb-dialog-mask{align-items:center;display:flex;height:100%;justify-content:center;left:0;opacity:0;pointer-events:none;position:absolute;top:0;transition:opacity .2s;width:100%;z-index:1000}.treb-main.treb-main .treb-embed-dialog{align-items:center;background:var(--treb-dialog-background,#fff);border:1px solid var(--treb-dialog-border-color,var(--treb-ui-border-color,#999));border-radius:3px;border-top:3px solid #999;box-shadow:0 4px 6px -4px rgba(0,0,0,.3);color:var(--treb-dialog-color,#000);display:flex;flex-direction:row;font-size:var(--treb-dialog-font-size,16px);line-height:1.6em;padding:1rem;position:relative;text-align:left}.treb-main.treb-main .treb-embed-dialog>*{display:none}.treb-main.treb-main .treb-embed-dialog>div{position:relative}.treb-main.treb-main .treb-embed-dialog>:nth-child(2){display:block;flex-grow:1;padding:2px 20px 2px 12px}.treb-main.treb-main .treb-embed-dialog>.treb-close-box{background:transparent;border:0;padding:4px;position:absolute;right:0;top:0}.treb-main.treb-main .treb-embed-dialog>.treb-close-box>svg{fill:#73828c;cursor:default;height:20px;width:20px}.treb-main.treb-main .treb-embed-dialog>.treb-close-box>svg:active,.treb-main.treb-main .treb-embed-dialog>.treb-close-box>svg:hover{fill:#049cfb}.treb-main.treb-main .treb-embed-dialog small{display:block;font-size:.9em}.treb-main.treb-main .treb-embed-dialog a{color:inherit;text-decoration:none}.treb-main.treb-main .treb-embed-dialog a:active,.treb-main.treb-main .treb-embed-dialog a:hover{color:#049cfb}.treb-main.treb-main .treb-embed-dialog.dialog-type-success{border-top-color:#44d926;border-top-width:3px}.treb-main.treb-main .treb-embed-dialog.dialog-type-about{border-top-color:#009dff;border-top-width:3px}.treb-main.treb-main .treb-embed-dialog.dialog-type-error{border-top-color:#f92f06;border-top-width:3px}.treb-main.treb-main .treb-embed-dialog.dialog-type-info{border-top-color:#009dff;border-top-width:3px}.treb-main.treb-main .treb-embed-dialog .treb-embed-dialog-message,.treb-main.treb-main .treb-embed-dialog .treb-embed-dialog-title{white-space:pre}.treb-main.treb-main .treb-embed-dialog .treb-embed-progress-container{border:1px solid #ddd;height:6px;margin:1rem auto .5rem;position:relative;width:100%}.treb-main.treb-main .treb-embed-dialog .treb-embed-progress-bar{background:#52880b;height:100%;left:0;position:relative;top:0}.treb-main.treb-main .treb-spinner{align-items:center;background:transparent;display:flex;height:100%;justify-content:center;left:0;opacity:0;position:absolute;top:0;transition:visibility .25s,opacity .25s ease;visibility:collapse;width:100%;z-index:1000}.treb-main.treb-main .treb-spinner.visible{opacity:1;transition:visibility 0s,opacity 1s ease;visibility:visible}.treb-main.treb-main .treb-spinner>div{display:inline-block;height:80px;position:relative;width:80px}.treb-main.treb-main .treb-spinner>div div{animation:treb-spinner 1.2s cubic-bezier(.5,0,.5,1) infinite;border:8px solid #fff;border-color:var(--treb-spinner-color,currentColor) transparent transparent transparent;border-radius:50%;box-sizing:border-box;display:block;height:64px;margin:8px;position:absolute;width:64px}.treb-main.treb-main .treb-spinner>div div:first-child{animation-delay:-.45s}.treb-main.treb-main .treb-spinner>div div:nth-child(2){animation-delay:-.3s}.treb-main.treb-main .treb-spinner>div div:nth-child(3){animation-delay:-.15s}@keyframes treb-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.treb-main.treb-main{--icon-x:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z"/></svg>');--icon-popout:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28"><path fill="currentColor" d="M22 14.5v5c0 2.484-2.016 4.5-4.5 4.5h-13A4.502 4.502 0 0 1 0 19.5v-13C0 4.016 2.016 2 4.5 2h11c.281 0 .5.219.5.5v1c0 .281-.219.5-.5.5h-11A2.507 2.507 0 0 0 2 6.5v13C2 20.875 3.125 22 4.5 22h13c1.375 0 2.5-1.125 2.5-2.5v-5c0-.281.219-.5.5-.5h1c.281 0 .5.219.5.5zM28 1v8c0 .547-.453 1-1 1a.99.99 0 0 1-.703-.297l-2.75-2.75L13.36 17.14c-.094.094-.234.156-.359.156s-.266-.063-.359-.156l-1.781-1.781c-.094-.094-.156-.234-.156-.359s.063-.266.156-.359L21.048 4.454l-2.75-2.75a.996.996 0 0 1-.297-.703c0-.547.453-1 1-1h8c.547 0 1 .453 1 1z"/></svg>');--icon-toolbar:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 28"><path fill="currentColor" d="M5.5 22v2H0v-2h5.5zm5.5-2c.547 0 1 .453 1 1v4c0 .547-.453 1-1 1H7c-.547 0-1-.453-1-1v-4c0-.547.453-1 1-1h4zm2.5-6v2H0v-2h13.5zm-10-8v2H0V6h3.5zM24 22v2H12.5v-2H24zM9 4c.547 0 1 .453 1 1v4c0 .547-.453 1-1 1H5c-.547 0-1-.453-1-1V5c0-.547.453-1 1-1h4zm10 8c.547 0 1 .453 1 1v4c0 .547-.453 1-1 1h-4c-.547 0-1-.453-1-1v-4c0-.547.453-1 1-1h4zm5 2v2h-3.5v-2H24zm0-8v2H10.5V6H24z"/></svg>');--icon-export:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 26 28"><path fill="currentColor" d="M20 21c0-.547-.453-1-1-1s-1 .453-1 1 .453 1 1 1 1-.453 1-1zm4 0c0-.547-.453-1-1-1s-1 .453-1 1 .453 1 1 1 1-.453 1-1zm2-3.5v5a1.5 1.5 0 0 1-1.5 1.5h-23A1.5 1.5 0 0 1 0 22.5v-5A1.5 1.5 0 0 1 1.5 16h7.266l2.109 2.125c.578.562 1.328.875 2.125.875s1.547-.313 2.125-.875L17.25 16h7.25a1.5 1.5 0 0 1 1.5 1.5zm-5.078-8.891a.984.984 0 0 1-.219 1.094l-7 7c-.187.203-.453.297-.703.297s-.516-.094-.703-.297l-7-7a.984.984 0 0 1-.219-1.094C5.234 8.25 5.594 8 6 8h4V1c0-.547.453-1 1-1h4c.547 0 1 .453 1 1v7h4c.406 0 .766.25.922.609z"/></svg>');--icon-reset:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 28"><path fill="currentColor" d="M23.609 16.5c0 .031 0 .078-.016.109C22.265 22.14 17.702 26 11.937 26c-3.047 0-6-1.203-8.219-3.313l-2.016 2.016A.996.996 0 0 1 .999 25c-.547 0-1-.453-1-1v-7c0-.547.453-1 1-1h7c.547 0 1 .453 1 1a.99.99 0 0 1-.297.703l-2.141 2.141A7.985 7.985 0 0 0 11.998 22a7.976 7.976 0 0 0 6.813-3.813c.375-.609.562-1.203.828-1.828.078-.219.234-.359.469-.359h3c.281 0 .5.234.5.5zM24 4v7c0 .547-.453 1-1 1h-7c-.547 0-1-.453-1-1a.99.99 0 0 1 .297-.703l2.156-2.156A8.036 8.036 0 0 0 12 6a7.976 7.976 0 0 0-6.813 3.813c-.375.609-.562 1.203-.828 1.828-.078.219-.234.359-.469.359H.781a.503.503 0 0 1-.5-.5v-.109C1.625 5.844 6.234 2 12 2c3.063 0 6.047 1.219 8.266 3.313l2.031-2.016A.996.996 0 0 1 23 3c.547 0 1 .453 1 1z"/></svg>');--icon-about:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 28"><path fill="currentColor" d="M14 21.5v-3c0-.281-.219-.5-.5-.5h-3c-.281 0-.5.219-.5.5v3c0 .281.219.5.5.5h3c.281 0 .5-.219.5-.5zM18 11c0-2.859-3-5-5.688-5-2.547 0-4.453 1.094-5.797 3.328a.49.49 0 0 0 .125.656l2.063 1.563a.477.477 0 0 0 .297.094.498.498 0 0 0 .391-.187c.734-.938 1.047-1.219 1.344-1.437.266-.187.781-.375 1.344-.375 1 0 1.922.641 1.922 1.328 0 .812-.422 1.219-1.375 1.656-1.109.5-2.625 1.797-2.625 3.313v.562c0 .281.219.5.5.5h3c.281 0 .5-.219.5-.5 0-.359.453-1.125 1.188-1.547 1.188-.672 2.812-1.578 2.812-3.953zm6 3c0 6.625-5.375 12-12 12S0 20.625 0 14 5.375 2 12 2s12 5.375 12 12z"/></svg>');--icon-chevron-left:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 21 28"><path fill="currentColor" d="M18.297 4.703 10 13l8.297 8.297a.99.99 0 0 1 0 1.406l-2.594 2.594a.99.99 0 0 1-1.406 0L2.703 13.703a.99.99 0 0 1 0-1.406L14.297.703a.99.99 0 0 1 1.406 0l2.594 2.594a.99.99 0 0 1 0 1.406z"/></svg>');--icon-chevron-right:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19 28"><path fill="currentColor" d="M17.297 13.703 5.703 25.297a.99.99 0 0 1-1.406 0l-2.594-2.594a.99.99 0 0 1 0-1.406L10 13 1.703 4.703a.99.99 0 0 1 0-1.406L4.297.703a.99.99 0 0 1 1.406 0l11.594 11.594a.99.99 0 0 1 0 1.406z"/></svg>');--icon-revert:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 28"><path fill="currentColor" d="M24 14c0 6.609-5.391 12-12 12a11.972 11.972 0 0 1-9.234-4.328.52.52 0 0 1 .031-.672l2.141-2.156a.599.599 0 0 1 .391-.141.51.51 0 0 1 .359.187A7.91 7.91 0 0 0 12 21.999c4.406 0 8-3.594 8-8s-3.594-8-8-8A7.952 7.952 0 0 0 6.563 8.14l2.141 2.156a.964.964 0 0 1 .219 1.078 1.002 1.002 0 0 1-.922.625h-7c-.547 0-1-.453-1-1v-7c0-.406.25-.766.625-.922a.964.964 0 0 1 1.078.219l2.031 2.016c2.203-2.078 5.187-3.313 8.266-3.313 6.609 0 12 5.391 12 12zM14 9.5v7c0 .281-.219.5-.5.5h-5a.494.494 0 0 1-.5-.5v-1c0-.281.219-.5.5-.5H12V9.5c0-.281.219-.5.5-.5h1c.281 0 .5.219.5.5z"/></svg>');--icon-text-align-left:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path fill-rule="evenodd" d="M2 12.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm0-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5zm0-3a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm0-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5z"/></svg>');--icon-text-align-center:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path fill-rule="evenodd" d="M4 12.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm-2-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5zm2-3a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm-2-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5z"/></svg>');--icon-text-align-right:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path fill-rule="evenodd" d="M6 12.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm-4-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5zm4-3a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm-4-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5z"/></svg>');--icon-text-align-top:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' width='16' height='16'%3E%3Cpath d='M8 15a.5.5 0 0 0 .5-.5V5.707l3.146 3.146a.5.5 0 0 0 .707-.707l-4-4a.5.5 0 0 0-.706-.001l-.001.001-4 4a.5.5 0 0 0 .708.707L7.5 5.707V14.5a.5.5 0 0 0 .5.5z'/%3E%3Cpath fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-miterlimit='10' d='M3 1.5h10'/%3E%3C/svg%3E");--icon-text-align-middle:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path fill-rule="evenodd" d="M1 8a.5.5 0 0 1 .5-.5h13a.5.5 0 0 1 0 1h-13A.5.5 0 0 1 1 8zm7-8a.5.5 0 0 1 .5.5v3.793l1.146-1.147a.5.5 0 0 1 .708.708l-2 2a.5.5 0 0 1-.708 0l-2-2a.5.5 0 1 1 .708-.708L7.5 4.293V.5A.5.5 0 0 1 8 0zm-.5 11.707-1.146 1.147a.5.5 0 0 1-.708-.708l2-2a.5.5 0 0 1 .708 0l2 2a.5.5 0 0 1-.708.708L8.5 11.707V15.5a.5.5 0 0 1-1 0v-3.793z"/></svg>');--icon-text-align-bottom:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' width='16' height='16'%3E%3Cpath d='M8 1a.5.5 0 0 0-.5.5v8.793L4.354 7.146a.5.5 0 0 0-.707.707l4 4a.5.5 0 0 0 .707.001l.001-.001 4-4a.5.5 0 0 0-.708-.707L8.5 10.293V1.5A.5.5 0 0 0 8 1z'/%3E%3Cpath fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-miterlimit='10' d='M13 14.5H3'/%3E%3C/svg%3E");--icon-file-menu:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M.54 3.87.5 3a2 2 0 0 1 2-2h3.672a2 2 0 0 1 1.414.586l.828.828A2 2 0 0 0 9.828 3h3.982a2 2 0 0 1 1.992 2.181l-.637 7A2 2 0 0 1 13.174 14H2.826a2 2 0 0 1-1.991-1.819l-.637-7a1.99 1.99 0 0 1 .342-1.31zM2.19 4a1 1 0 0 0-.996 1.09l.637 7a1 1 0 0 0 .995.91h10.348a1 1 0 0 0 .995-.91l.637-7A1 1 0 0 0 13.81 4H2.19zm4.69-1.707A1 1 0 0 0 6.172 2H2.5a1 1 0 0 0-1 .981l.006.139C1.72 3.042 1.95 3 2.19 3h5.396l-.707-.707z"/></svg>');--icon-wrap-text:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M4 5h8a.5.5 0 0 0 0-1H4a.5.5 0 0 0 0 1zM10 8H4a.5.5 0 0 0 0 1h6a1.5 1.5 0 0 1 0 3v-1.203l-2.953 1.707L10 14.203V13a2.5 2.5 0 1 0 0-5zM3.75 12.5a.5.5 0 0 0 .5.5H6v-1H4.25a.5.5 0 0 0-.5.5z"/></svg>');--icon-unmerge-cells:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M1.5 1a.5.5 0 0 0-.5.5v4a.5.5 0 0 1-1 0v-4A1.5 1.5 0 0 1 1.5 0h4a.5.5 0 0 1 0 1h-4zM10 .5a.5.5 0 0 1 .5-.5h4A1.5 1.5 0 0 1 16 1.5v4a.5.5 0 0 1-1 0v-4a.5.5 0 0 0-.5-.5h-4a.5.5 0 0 1-.5-.5zM.5 10a.5.5 0 0 1 .5.5v4a.5.5 0 0 0 .5.5h4a.5.5 0 0 1 0 1h-4A1.5 1.5 0 0 1 0 14.5v-4a.5.5 0 0 1 .5-.5zm15 0a.5.5 0 0 1 .5.5v4a1.5 1.5 0 0 1-1.5 1.5h-4a.5.5 0 0 1 0-1h4a.5.5 0 0 0 .5-.5v-4a.5.5 0 0 1 .5-.5z"/></svg>');--icon-merge-cells:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M5.5 0a.5.5 0 0 1 .5.5v4A1.5 1.5 0 0 1 4.5 6h-4a.5.5 0 0 1 0-1h4a.5.5 0 0 0 .5-.5v-4a.5.5 0 0 1 .5-.5zm5 0a.5.5 0 0 1 .5.5v4a.5.5 0 0 0 .5.5h4a.5.5 0 0 1 0 1h-4A1.5 1.5 0 0 1 10 4.5v-4a.5.5 0 0 1 .5-.5zM0 10.5a.5.5 0 0 1 .5-.5h4A1.5 1.5 0 0 1 6 11.5v4a.5.5 0 0 1-1 0v-4a.5.5 0 0 0-.5-.5h-4a.5.5 0 0 1-.5-.5zm10 1a1.5 1.5 0 0 1 1.5-1.5h4a.5.5 0 0 1 0 1h-4a.5.5 0 0 0-.5.5v4a.5.5 0 0 1-1 0v-4z"/></svg>');--icon-lock:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M8 1a2 2 0 0 1 2 2v4H6V3a2 2 0 0 1 2-2zm3 6V3a3 3 0 0 0-6 0v4a2 2 0 0 0-2 2v5a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2zM5 8h6a1 1 0 0 1 1 1v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V9a1 1 0 0 1 1-1z"/></svg>');--icon-comment:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M14 1a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1h-2.5a2 2 0 0 0-1.6.8L8 14.333 6.1 11.8a2 2 0 0 0-1.6-.8H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h12zM2 0a2 2 0 0 0-2 2v8a2 2 0 0 0 2 2h2.5a1 1 0 0 1 .8.4l1.9 2.533a1 1 0 0 0 1.6 0l1.9-2.533a1 1 0 0 1 .8-.4H14a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2z"/></svg>');--icon-fill-color:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M6.192 2.78c-.458-.677-.927-1.248-1.35-1.643a2.972 2.972 0 0 0-.71-.515c-.217-.104-.56-.205-.882-.02-.367.213-.427.63-.43.896-.003.304.064.664.173 1.044.196.687.556 1.528 1.035 2.402L.752 8.22c-.277.277-.269.656-.218.918.055.283.187.593.36.903.348.627.92 1.361 1.626 2.068.707.707 1.441 1.278 2.068 1.626.31.173.62.305.903.36.262.05.64.059.918-.218l5.615-5.615c.118.257.092.512.05.939-.03.292-.068.665-.073 1.176v.123h.003a1 1 0 0 0 1.993 0H14v-.057a1.01 1.01 0 0 0-.004-.117c-.055-1.25-.7-2.738-1.86-3.494a4.322 4.322 0 0 0-.211-.434c-.349-.626-.92-1.36-1.627-2.067-.707-.707-1.441-1.279-2.068-1.627-.31-.172-.62-.304-.903-.36-.262-.05-.64-.058-.918.219l-.217.216zM4.16 1.867c.381.356.844.922 1.311 1.632l-.704.705c-.382-.727-.66-1.402-.813-1.938a3.283 3.283 0 0 1-.131-.673c.091.061.204.15.337.274zm.394 3.965c.54.852 1.107 1.567 1.607 2.033a.5.5 0 1 0 .682-.732c-.453-.422-1.017-1.136-1.564-2.027l1.088-1.088c.054.12.115.243.183.365.349.627.92 1.361 1.627 2.068.706.707 1.44 1.278 2.068 1.626.122.068.244.13.365.183l-4.861 4.862a.571.571 0 0 1-.068-.01c-.137-.027-.342-.104-.608-.252-.524-.292-1.186-.8-1.846-1.46-.66-.66-1.168-1.32-1.46-1.846-.147-.265-.225-.47-.251-.607a.573.573 0 0 1-.01-.068l3.048-3.047zm2.87-1.935a2.44 2.44 0 0 1-.241-.561c.135.033.324.11.562.241.524.292 1.186.8 1.846 1.46.45.45.83.901 1.118 1.31a3.497 3.497 0 0 0-1.066.091 11.27 11.27 0 0 1-.76-.694c-.66-.66-1.167-1.322-1.458-1.847z"/></svg>');--icon-text-color:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="16" height="16"><path d="m12.259 14.001-1.389-3.727H5.465l-1.354 3.727h-1.3L7.609 1.397h1.178l4.772 12.604h-1.3zM8.418 3.604a5.908 5.908 0 0 1-.127-.387 3.618 3.618 0 0 1-.11-.501h-.035a5.492 5.492 0 0 1-.247.888L5.86 9.211h4.614L8.418 3.604z"/></svg>');--icon-border-bottom:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M.969 0H0v.969h.5V1h.469V.969H1V.5H.969V0zm.937 1h.938V0h-.938v1zm1.875 0h.938V0H3.78v1zm1.875 0h.938V0h-.938v1zM7.531.969V1h.938V.969H8.5V.5h-.031V0H7.53v.5H7.5v.469h.031zM9.406 1h.938V0h-.938v1zm1.875 0h.938V0h-.938v1zm1.875 0h.938V0h-.938v1zm1.875 0h.469V.969h.5V0h-.969v.5H15v.469h.031V1zM1 2.844v-.938H0v.938h1zm6.5-.938v.938h1v-.938h-1zm7.5 0v.938h1v-.938h-1zM1 4.719V3.78H0v.938h1zm6.5-.938v.938h1V3.78h-1zm7.5 0v.938h1V3.78h-1zM1 6.594v-.938H0v.938h1zm6.5-.938v.938h1v-.938h-1zm7.5 0v.938h1v-.938h-1zM.5 8.5h.469v-.031H1V7.53H.969V7.5H.5v.031H0v.938h.5V8.5zm1.406 0h.938v-1h-.938v1zm1.875 0h.938v-1H3.78v1zm1.875 0h.938v-1h-.938v1zm2.813 0v-.031H8.5V7.53h-.031V7.5H7.53v.031H7.5v.938h.031V8.5h.938zm.937 0h.938v-1h-.938v1zm1.875 0h.938v-1h-.938v1zm1.875 0h.938v-1h-.938v1zm1.875 0h.469v-.031h.5V7.53h-.5V7.5h-.469v.031H15v.938h.031V8.5zM0 9.406v.938h1v-.938H0zm7.5 0v.938h1v-.938h-1zm8.5.938v-.938h-1v.938h1zm-16 .937v.938h1v-.938H0zm7.5 0v.938h1v-.938h-1zm8.5.938v-.938h-1v.938h1zm-16 .937v.938h1v-.938H0zm7.5 0v.938h1v-.938h-1zm8.5.938v-.938h-1v.938h1zM0 15h16v1H0v-1z"/></svg>');--icon-border-top:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M0 0v1h16V0H0zm1 2.844v-.938H0v.938h1zm6.5-.938v.938h1v-.938h-1zm7.5 0v.938h1v-.938h-1zM1 4.719V3.78H0v.938h1zm6.5-.938v.938h1V3.78h-1zm7.5 0v.938h1V3.78h-1zM1 6.594v-.938H0v.938h1zm6.5-.938v.938h1v-.938h-1zm7.5 0v.938h1v-.938h-1zM.5 8.5h.469v-.031H1V7.53H.969V7.5H.5v.031H0v.938h.5V8.5zm1.406 0h.938v-1h-.938v1zm1.875 0h.938v-1H3.78v1zm1.875 0h.938v-1h-.938v1zm2.813 0v-.031H8.5V7.53h-.031V7.5H7.53v.031H7.5v.938h.031V8.5h.938zm.937 0h.938v-1h-.938v1zm1.875 0h.938v-1h-.938v1zm1.875 0h.938v-1h-.938v1zm1.875 0h.469v-.031h.5V7.53h-.5V7.5h-.469v.031H15v.938h.031V8.5zM0 9.406v.938h1v-.938H0zm7.5 0v.938h1v-.938h-1zm8.5.938v-.938h-1v.938h1zm-16 .937v.938h1v-.938H0zm7.5 0v.938h1v-.938h-1zm8.5.938v-.938h-1v.938h1zm-16 .937v.938h1v-.938H0zm7.5 0v.938h1v-.938h-1zm8.5.938v-.938h-1v.938h1zM0 16h.969v-.5H1v-.469H.969V15H.5v.031H0V16zm1.906 0h.938v-1h-.938v1zm1.875 0h.938v-1H3.78v1zm1.875 0h.938v-1h-.938v1zm1.875-.5v.5h.938v-.5H8.5v-.469h-.031V15H7.53v.031H7.5v.469h.031zm1.875.5h.938v-1h-.938v1zm1.875 0h.938v-1h-.938v1zm1.875 0h.938v-1h-.938v1zm1.875-.5v.5H16v-.969h-.5V15h-.469v.031H15v.469h.031z"/></svg>');--icon-border-left:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M0 0v16h1V0H0zm1.906 1h.938V0h-.938v1zm1.875 0h.938V0H3.78v1zm1.875 0h.938V0h-.938v1zM7.531.969V1h.938V.969H8.5V.5h-.031V0H7.53v.5H7.5v.469h.031zM9.406 1h.938V0h-.938v1zm1.875 0h.938V0h-.938v1zm1.875 0h.938V0h-.938v1zm1.875 0h.469V.969h.5V0h-.969v.5H15v.469h.031V1zM7.5 1.906v.938h1v-.938h-1zm7.5 0v.938h1v-.938h-1zM7.5 3.781v.938h1V3.78h-1zm7.5 0v.938h1V3.78h-1zM7.5 5.656v.938h1v-.938h-1zm7.5 0v.938h1v-.938h-1zM1.906 8.5h.938v-1h-.938v1zm1.875 0h.938v-1H3.78v1zm1.875 0h.938v-1h-.938v1zm2.813 0v-.031H8.5V7.53h-.031V7.5H7.53v.031H7.5v.938h.031V8.5h.938zm.937 0h.938v-1h-.938v1zm1.875 0h.938v-1h-.938v1zm1.875 0h.938v-1h-.938v1zm1.875 0h.469v-.031h.5V7.53h-.5V7.5h-.469v.031H15v.938h.031V8.5zM7.5 9.406v.938h1v-.938h-1zm8.5.938v-.938h-1v.938h1zm-8.5.937v.938h1v-.938h-1zm8.5.938v-.938h-1v.938h1zm-8.5.937v.938h1v-.938h-1zm8.5.938v-.938h-1v.938h1zM1.906 16h.938v-1h-.938v1zm1.875 0h.938v-1H3.78v1zm1.875 0h.938v-1h-.938v1zm1.875-.5v.5h.938v-.5H8.5v-.469h-.031V15H7.53v.031H7.5v.469h.031zm1.875.5h.938v-1h-.938v1zm1.875 0h.938v-1h-.938v1zm1.875 0h.938v-1h-.938v1zm1.875-.5v.5H16v-.969h-.5V15h-.469v.031H15v.469h.031z"/></svg>');--icon-border-right:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M.969 0H0v.969h.5V1h.469V.969H1V.5H.969V0zm.937 1h.938V0h-.938v1zm1.875 0h.938V0H3.78v1zm1.875 0h.938V0h-.938v1zM7.531.969V1h.938V.969H8.5V.5h-.031V0H7.53v.5H7.5v.469h.031zM9.406 1h.938V0h-.938v1zm1.875 0h.938V0h-.938v1zm1.875 0h.938V0h-.938v1zM16 0h-1v16h1V0zM1 2.844v-.938H0v.938h1zm6.5-.938v.938h1v-.938h-1zM1 4.719V3.78H0v.938h1zm6.5-.938v.938h1V3.78h-1zM1 6.594v-.938H0v.938h1zm6.5-.938v.938h1v-.938h-1zM.5 8.5h.469v-.031H1V7.53H.969V7.5H.5v.031H0v.938h.5V8.5zm1.406 0h.938v-1h-.938v1zm1.875 0h.938v-1H3.78v1zm1.875 0h.938v-1h-.938v1zm2.813 0v-.031H8.5V7.53h-.031V7.5H7.53v.031H7.5v.938h.031V8.5h.938zm.937 0h.938v-1h-.938v1zm1.875 0h.938v-1h-.938v1zm1.875 0h.938v-1h-.938v1zM0 9.406v.938h1v-.938H0zm7.5 0v.938h1v-.938h-1zM0 11.281v.938h1v-.938H0zm7.5 0v.938h1v-.938h-1zM0 13.156v.938h1v-.938H0zm7.5 0v.938h1v-.938h-1zM0 16h.969v-.5H1v-.469H.969V15H.5v.031H0V16zm1.906 0h.938v-1h-.938v1zm1.875 0h.938v-1H3.78v1zm1.875 0h.938v-1h-.938v1zm1.875-.5v.5h.938v-.5H8.5v-.469h-.031V15H7.53v.031H7.5v.469h.031zm1.875.5h.938v-1h-.938v1zm1.875 0h.938v-1h-.938v1zm1.875 0h.938v-1h-.938v1z"/></svg>');--icon-border-double-bottom:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M.969 0H0v.969h.5V1h.469V.969H1V.5H.969V0zm.937 1h.938V0h-.938v1zm1.875 0h.938V0H3.78v1h.001zm1.875 0h.938V0h-.938v1zM7.531.969V1h.938V.969H8.5V.5h-.031V0H7.53v.5H7.5v.469h.031zM9.406 1h.938V0h-.938v1zm1.875 0h.938V0h-.938v1zm1.875 0h.938V0h-.938v1zm1.875 0h.469V.969h.5V0h-.969v.5H15v.469h.031V1zM1 2.844v-.938H0v.938h1zm6.5-.938v.938h1v-.938h-1zm7.5 0v.938h1v-.938h-1zM1 4.719V3.78H0v.938l1 .001zm6.5-.938v.938h1V3.78h-1v.001zm7.5 0v.938h1V3.78h-1v.001zM1 6.594v-.938H0v.938h1zm6.5-.938v.938h1v-.938h-1zm7.5 0v.938h1v-.938h-1zM.5 8.5h.469v-.031H1V7.53H.969V7.5H.5v.031H0v.938h.5V8.5zm1.406 0h.938v-1h-.938v1zm1.875 0h.938v-1H3.78v1h.001zm1.875 0h.938v-1h-.938v1zm2.813 0v-.031H8.5V7.53h-.031V7.5H7.53v.031H7.5v.938h.031V8.5h.938zm.937 0h.938v-1h-.938v1zm1.875 0h.938v-1h-.938v1zm1.875 0h.938v-1h-.938v1zm1.875 0h.469v-.031h.5V7.53h-.5V7.5h-.469v.031H15v.938h.031V8.5zM0 9.406v.938h1v-.938H0zm7.5 0v.938h1v-.938h-1zm8.5.938v-.938h-1v.938h1zm-16 .937v.938h1v-.938H0zm7.5 0v.938h1v-.938h-1zm8.5.938v-.938h-1v.938h1zM0 15h16v1H0v-1zm0-2h16v1H0v-1z"/></svg>');--icon-border-all:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M0 0h16v16H0V0zm1 1v6.5h6.5V1H1zm7.5 0v6.5H15V1H8.5zM15 8.5H8.5V15H15V8.5zM7.5 15V8.5H1V15h6.5z"/></svg>');--icon-border-outer:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M7.5 1.906v.938h1v-.938h-1zm0 1.875v.938h1V3.78h-1zm0 1.875v.938h1v-.938h-1zM1.906 8.5h.938v-1h-.938v1zm1.875 0h.938v-1H3.78v1zm1.875 0h.938v-1h-.938v1zm2.813 0v-.031H8.5V7.53h-.031V7.5H7.53v.031H7.5v.938h.031V8.5h.938zm.937 0h.938v-1h-.938v1zm1.875 0h.938v-1h-.938v1zm1.875 0h.938v-1h-.938v1zM7.5 9.406v.938h1v-.938h-1zm0 1.875v.938h1v-.938h-1zm0 1.875v.938h1v-.938h-1z"/><path d="M0 0v16h16V0H0zm1 1h14v14H1V1z"/></svg>');--icon-border-none:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M0 0h.969v.5H1v.469H.969V1H.5V.969H0V0zm2.844 1h-.938V0h.938v1zm1.875 0H3.78V0h.938v1zm1.875 0h-.938V0h.938v1zm.937 0V.969H7.5V.5h.031V0h.938v.5H8.5v.469h-.031V1H7.53zm2.813 0h-.938V0h.938v1zm1.875 0h-.938V0h.938v1zm1.875 0h-.938V0h.938v1zM15.5 1h-.469V.969H15V.5h.031V0H16v.969h-.5V1zM1 1.906v.938H0v-.938h1zm6.5.938v-.938h1v.938h-1zm7.5 0v-.938h1v.938h-1zM1 3.78v.938H0V3.78h1zm6.5.938V3.78h1v.938h-1zm7.5 0V3.78h1v.938h-1zM1 5.656v.938H0v-.938h1zm6.5.938v-.938h1v.938h-1zm7.5 0v-.938h1v.938h-1zM.969 8.5H.5v-.031H0V7.53h.5V7.5h.469v.031H1v.938H.969V8.5zm1.875 0h-.938v-1h.938v1zm1.875 0H3.78v-1h.938v1zm1.875 0h-.938v-1h.938v1zm1.875-.031V8.5H7.53v-.031H7.5V7.53h.031V7.5h.938v.031H8.5v.938h-.031zm1.875.031h-.938v-1h.938v1zm1.875 0h-.938v-1h.938v1zm1.875 0h-.938v-1h.938v1zm1.406 0h-.469v-.031H15V7.53h.031V7.5h.469v.031h.5v.938h-.5V8.5zM0 10.344v-.938h1v.938H0zm7.5 0v-.938h1v.938h-1zm8.5-.938v.938h-1v-.938h1zM0 12.22v-.938h1v.938H0zm7.5 0v-.938h1v.938h-1zm8.5-.938v.938h-1v-.938h1zM0 14.094v-.938h1v.938H0zm7.5 0v-.938h1v.938h-1zm8.5-.938v.938h-1v-.938h1zM.969 16H0v-.969h.5V15h.469v.031H1v.469H.969v.5zm1.875 0h-.938v-1h.938v1zm1.875 0H3.78v-1h.938v1zm1.875 0h-.938v-1h.938v1zm.937 0v-.5H7.5v-.469h.031V15h.938v.031H8.5v.469h-.031v.5H7.53zm2.813 0h-.938v-1h.938v1zm1.875 0h-.938v-1h.938v1zm1.875 0h-.938v-1h.938v1zm.937 0v-.5H15v-.469h.031V15h.469v.031h.5V16h-.969z"/></svg>');--icon-palette:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M0 .5A.5.5 0 0 1 .5 0h5a.5.5 0 0 1 .5.5v5.277l4.147-4.131a.5.5 0 0 1 .707 0l3.535 3.536a.5.5 0 0 1 0 .708L10.261 10H15.5a.5.5 0 0 1 .5.5v5a.5.5 0 0 1-.5.5H3a2.99 2.99 0 0 1-2.121-.879A2.99 2.99 0 0 1 0 13.044m6-.21 7.328-7.3-2.829-2.828L6 7.188v5.647zM4.5 13a1.5 1.5 0 1 0-3 0 1.5 1.5 0 0 0 3 0zM15 15v-4H9.258l-4.015 4H15zM0 .5v12.495V.5z"/><path d="M0 12.995V13a3.07 3.07 0 0 0 0-.005z"/></svg>');--icon-layout:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="20" height="20"><path d="m3 0 17 17.156v-.114z"/><path d="M3 0H0v16h1V1h1.585L19 17.455V19H4v1h16v-2.844z"/><path d="M6.886 3.922 5.343 5.465a.5.5 0 0 0 .708.707l1.539-1.54-.704-.71zM9.702 6.763l-1.53 1.53A.5.5 0 0 0 8.879 9l1.526-1.526-.703-.711zM12.517 9.604 11 11.121a.5.5 0 0 0 .707.707l1.514-1.514-.704-.71zM15.332 12.445l-1.504 1.504a.5.5 0 0 0 .707.707l1.501-1.5-.704-.711zM1 16H0a4 4 0 0 0 4 4v-1c-1.654 0-3-1.346-3-3zM5 9v6h6L5 9zm1 2.414L8.586 14H6v-2.586z"/></svg>');--icon-freeze:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M8 16a.5.5 0 0 1-.5-.5v-1.293l-.646.647a.5.5 0 0 1-.707-.708L7.5 12.793V8.866l-3.4 1.963-.496 1.85a.5.5 0 1 1-.966-.26l.237-.882-1.12.646a.5.5 0 0 1-.5-.866l1.12-.646-.884-.237a.5.5 0 1 1 .26-.966l1.848.495L7 8 3.6 6.037l-1.85.495a.5.5 0 0 1-.258-.966l.883-.237-1.12-.646a.5.5 0 1 1 .5-.866l1.12.646-.237-.883a.5.5 0 1 1 .966-.258l.495 1.849L7.5 7.134V3.207L6.147 1.854a.5.5 0 1 1 .707-.708l.646.647V.5a.5.5 0 1 1 1 0v1.293l.647-.647a.5.5 0 1 1 .707.708L8.5 3.207v3.927l3.4-1.963.496-1.85a.5.5 0 1 1 .966.26l-.236.882 1.12-.646a.5.5 0 0 1 .5.866l-1.12.646.883.237a.5.5 0 1 1-.26.966l-1.848-.495L9 8l3.4 1.963 1.849-.495a.5.5 0 0 1 .259.966l-.883.237 1.12.646a.5.5 0 0 1-.5.866l-1.12-.646.236.883a.5.5 0 1 1-.966.258l-.495-1.849-3.4-1.963v3.927l1.353 1.353a.5.5 0 0 1-.707.708l-.647-.647V15.5a.5.5 0 0 1-.5.5z"/></svg>');--icon-column-chart:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="20" height="20"><path d="M4.5 17.5a.5.5 0 0 1-1 0v-5a.5.5 0 0 1 1 0v5zM12.5 17.5a.5.5 0 0 1-1 0v-9a.5.5 0 0 1 1 0v9zM16.5 17.5a.5.5 0 0 1-1 0v-13a.5.5 0 0 1 1 0v13zM8.5 17.5a.5.5 0 0 1-1 0v-14a.5.5 0 0 1 1 0v14z"/></svg>');--icon-donut-chart:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="20" height="20"><path d="M12 1.23v1.548c2.526.701 4.5 2.699 5.203 5.222h1.565A9.006 9.006 0 0 0 12 1.23zM2.5 10c0-3.51 2.426-6.456 5.688-7.27V1.183A9.001 9.001 0 0 0 1 10c0 1.761.513 3.397 1.387 4.784l1.093-1.093A7.432 7.432 0 0 1 2.5 10zM17.221 12c-.878 3.166-3.778 5.5-7.221 5.5a7.448 7.448 0 0 1-3.692-.979l-1.093 1.093A8.956 8.956 0 0 0 10 19c4.282 0 7.859-2.993 8.77-7h-1.549z"/></svg>');--icon-bar-chart:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="20" height="20"><path d="M2.5 4.5a.5.5 0 0 1 0-1h5a.5.5 0 0 1 0 1h-5zM2.5 12.5a.5.5 0 0 1 0-1h9a.5.5 0 0 1 0 1h-9zM2.5 16.5a.5.5 0 0 1 0-1h13a.5.5 0 0 1 0 1h-13zM2.5 8.5a.5.5 0 0 1 0-1h14a.5.5 0 0 1 0 1h-14z"/></svg>');--icon-line-chart:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="20" height="20"><path d="m1 8 3-3 7 5 8-8v2l-8 8-7-5-3 3z"/></svg>');--icon-image:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M6.002 5.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0z"/><path d="M2.002 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2h-12zm12 1a1 1 0 0 1 1 1v6.5l-3.777-1.947a.5.5 0 0 0-.577.093l-3.71 3.71-2.66-1.772a.5.5 0 0 0-.63.062L1.002 12V3a1 1 0 0 1 1-1h12z"/></svg>');--icon-recalculate:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="20" height="20"><path d="M9.478 4.022c2.402-.209 4.583 1.047 5.711 3.014l1.083-.095c-1.233-2.528-3.912-4.175-6.881-3.916-2.97.26-5.321 2.347-6.098 5.051l1.083-.095c.768-2.132 2.698-3.748 5.102-3.959zM10.523 15.977c-2.403.211-4.585-1.047-5.712-3.013l-1.08.095c1.234 2.527 3.91 4.175 6.879 3.914 2.971-.259 5.32-2.347 6.095-5.05l-1.08.095c-.769 2.132-2.699 3.749-5.102 3.959z"/><path d="m2.272 15.616 5.197-3-4.098-1.097zM17.728 4.384l-5.197 3 4.098 1.098z"/></svg>');--icon-check:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M13.854 3.646a.5.5 0 0 1 0 .708l-7 7a.5.5 0 0 1-.708 0l-3.5-3.5a.5.5 0 1 1 .708-.708L6.5 10.293l6.646-6.647a.5.5 0 0 1 .708 0z"/></svg>');--icon-table:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"><path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2zm15 2h-4v3h4V4zm0 4h-4v3h4V8zm0 4h-4v3h3a1 1 0 0 0 1-1v-2zm-5 3v-3H6v3h4zm-5 0v-3H1v2a1 1 0 0 0 1 1h3zm-4-4h4V8H1v3zm0-4h4V4H1v3zm5-3v3h4V4H6zm4 4H6v3h4V8z"/></svg>')}.treb-main.treb-main .treb-layout-header{-ms-overflow-style:none;overflow:hidden;overflow-x:scroll;position:relative;scrollbar-width:none}.treb-main.treb-main .treb-layout-header::-webkit-scrollbar{display:none}.treb-main.treb-main .treb-toolbar{color:var(--treb-toolbar-color,var(--treb-ui-color,#333));display:flex;flex-direction:row;font-size:var(--treb-toolbar-font-size,inherit);gap:.5rem}.treb-main.treb-main .treb-toolbar>div{display:flex;flex-direction:row}.treb-main.treb-main .treb-toolbar>div>input,.treb-main.treb-main .treb-toolbar>input{background-color:var(--treb-toolbar-button-background,transparent);border:1px solid var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));height:32px;overflow:hidden;padding-left:.5em;padding-right:.5em;text-overflow:ellipsis}.treb-main.treb-main .treb-toolbar>.treb-menu>button{border-radius:3px}.treb-main.treb-main .treb-toolbar>.group>.treb-menu+button,.treb-main.treb-main .treb-toolbar>.group>button+.treb-menu>button,.treb-main.treb-main .treb-toolbar>.group>button+button,.treb-main.treb-main .treb-toolbar>.group>input+.treb-menu>button,.treb-main.treb-main .treb-toolbar>.group>input+button,.treb-main.treb-main .treb-toolbar>[composite]>.treb-menu+button,.treb-main.treb-main .treb-toolbar>[composite]>button+.treb-menu>button,.treb-main.treb-main .treb-toolbar>[composite]>button+button,.treb-main.treb-main .treb-toolbar>[composite]>input+.treb-menu>button,.treb-main.treb-main .treb-toolbar>[composite]>input+button{border-left-width:0}.treb-main.treb-main .treb-toolbar>.group>button:first-child,.treb-main.treb-main .treb-toolbar>.group>input:first-child,.treb-main.treb-main .treb-toolbar>[composite]>button:first-child,.treb-main.treb-main .treb-toolbar>[composite]>input:first-child{border-bottom-left-radius:3px;border-top-left-radius:3px}.treb-main.treb-main .treb-toolbar>.group>.treb-menu:last-child>button,.treb-main.treb-main .treb-toolbar>.group>button:last-child,.treb-main.treb-main .treb-toolbar>[composite]>.treb-menu:last-child>button,.treb-main.treb-main .treb-toolbar>[composite]>button:last-child{border-bottom-right-radius:3px;border-top-right-radius:3px}.treb-main.treb-main .treb-toolbar .treb-icon-buttons>button,.treb-main.treb-main .treb-toolbar .treb-menu>button,.treb-main.treb-main .treb-toolbar button[data-icon],.treb-main.treb-main .treb-toolbar>button,.treb-main.treb-main .treb-toolbar>div>button{align-items:center;background-color:var(--treb-toolbar-button-background,transparent);border:1px solid var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));display:flex;flex-direction:column;height:32px;justify-content:center;position:relative;width:32px}.treb-main.treb-main .treb-toolbar .treb-icon-buttons>button[dropdown],.treb-main.treb-main .treb-toolbar .treb-menu>button[dropdown],.treb-main.treb-main .treb-toolbar button[data-icon][dropdown],.treb-main.treb-main .treb-toolbar>button[dropdown],.treb-main.treb-main .treb-toolbar>div>button[dropdown]{width:16px}.treb-main.treb-main .treb-toolbar .treb-icon-buttons>button[dropdown]:after,.treb-main.treb-main .treb-toolbar .treb-menu>button[dropdown]:after,.treb-main.treb-main .treb-toolbar button[data-icon][dropdown]:after,.treb-main.treb-main .treb-toolbar>button[dropdown]:after,.treb-main.treb-main .treb-toolbar>div>button[dropdown]:after{border:5px solid transparent;border-top-color:currentcolor;box-sizing:content-box;content:"";height:0;left:50%;position:absolute;top:18px;transform:translate(-50%,-50%);width:0}.treb-main.treb-main .treb-toolbar .treb-icon-buttons>button:hover,.treb-main.treb-main .treb-toolbar .treb-icon-buttons>button[active],.treb-main.treb-main .treb-toolbar .treb-menu>button:hover,.treb-main.treb-main .treb-toolbar .treb-menu>button[active],.treb-main.treb-main .treb-toolbar button[data-icon]:hover,.treb-main.treb-main .treb-toolbar button[data-icon][active],.treb-main.treb-main .treb-toolbar>button:hover,.treb-main.treb-main .treb-toolbar>button[active],.treb-main.treb-main .treb-toolbar>div>button:hover,.treb-main.treb-main .treb-toolbar>div>button[active]{background-color:var(--treb-toolbar-hover-button-background,#f3f4f6)}.treb-main.treb-main .treb-toolbar .treb-icon-buttons>button[data-color-bar]:after,.treb-main.treb-main .treb-toolbar .treb-menu>button[data-color-bar]:after,.treb-main.treb-main .treb-toolbar button[data-icon][data-color-bar]:after,.treb-main.treb-main .treb-toolbar>button[data-color-bar]:after,.treb-main.treb-main .treb-toolbar>div>button[data-color-bar]:after{background:var(--treb-color-bar-color,var(--treb-default-color,unset));border:1px solid var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));box-sizing:border-box;content:"";display:block;height:6px;position:relative;width:20px}.treb-main.treb-main .treb-toolbar .treb-icon-buttons>button[data-command]:before,.treb-main.treb-main .treb-toolbar .treb-icon-buttons>button[data-icon]:before,.treb-main.treb-main .treb-toolbar .treb-menu>button[data-command]:before,.treb-main.treb-main .treb-toolbar .treb-menu>button[data-icon]:before,.treb-main.treb-main .treb-toolbar button[data-icon][data-command]:before,.treb-main.treb-main .treb-toolbar button[data-icon][data-icon]:before,.treb-main.treb-main .treb-toolbar>button[data-command]:before,.treb-main.treb-main .treb-toolbar>button[data-icon]:before,.treb-main.treb-main .treb-toolbar>div>button[data-command]:before,.treb-main.treb-main .treb-toolbar>div>button[data-icon]:before{background:currentColor;content:"";display:block;height:20px;mask-image:var(--icon);-webkit-mask-image:var(--icon);mask-position:center;-webkit-mask-position:center;mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat;mask-size:var(--icon-size,16px 16px);-webkit-mask-size:var(--icon-size,16px 16px);position:relative;width:20px}.treb-main.treb-main .treb-toolbar .treb-split{display:flex;flex-direction:column;gap:0}.treb-main.treb-main .treb-toolbar .treb-split button[data-command]{font-size:10px}.treb-main.treb-main .treb-toolbar .treb-split button[data-command]:before{display:none}.treb-main.treb-main .treb-toolbar .treb-split>button{align-items:center;display:flex;height:16px;justify-content:center}.treb-main.treb-main .treb-toolbar .treb-split>button:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.treb-main.treb-main .treb-toolbar .treb-split>button:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px;border-top:0}.treb-main.treb-main .treb-toolbar .treb-menu{outline:none}.treb-main.treb-main .treb-toolbar .treb-menu>div{background:var(--treb-toolbar-button-background,#fff);border:1px solid var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));border-radius:3px;box-shadow:0 4px 6px -4px rgba(0,0,0,.4);display:none;flex-direction:column;margin-top:.5rem;position:fixed;top:48px;z-index:20}.treb-main.treb-main .treb-toolbar .treb-menu>div button{background:transparent;border:0;margin:3px 0;padding:.4rem 1rem;text-align:left;transition:background-color .125s ease;white-space:nowrap}.treb-main.treb-main .treb-toolbar .treb-menu>div button:hover{background:var(--treb-toolbar-hover-button-background,#f3f4f6)}.treb-main.treb-main .treb-toolbar .treb-menu>div.treb-icon-buttons>.treb-menu>button,.treb-main.treb-main .treb-toolbar .treb-menu>div.treb-icon-buttons>button{padding:0}.treb-main.treb-main .treb-toolbar .treb-menu>div>[separator]{background:var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));height:1px;margin:2px 0}.treb-main.treb-main .treb-toolbar .treb-menu.visible>div,.treb-main.treb-main .treb-toolbar .treb-menu:focus-within>div{display:flex}.treb-main.treb-main .treb-toolbar [data-icon=file-menu]{--icon:var(--icon-file-menu)}.treb-main.treb-main .treb-toolbar [data-command=justify-left]{--icon:var(--icon-text-align-left)}.treb-main.treb-main .treb-toolbar [data-command=justify-right]{--icon:var(--icon-text-align-right)}.treb-main.treb-main .treb-toolbar [data-command=justify-center]{--icon:var(--icon-text-align-center)}.treb-main.treb-main .treb-toolbar [data-command=align-top]{--icon:var(--icon-text-align-top)}.treb-main.treb-main .treb-toolbar [data-command=align-middle]{--icon:var(--icon-text-align-middle)}.treb-main.treb-main .treb-toolbar [data-command=align-bottom]{--icon:var(--icon-text-align-bottom)}.treb-main.treb-main .treb-toolbar [data-command=merge-cells]{--icon:var(--icon-merge-cells)}.treb-main.treb-main .treb-toolbar [data-command=unmerge-cells]{--icon:var(--icon-unmerge-cells)}.treb-main.treb-main .treb-toolbar [data-command=fill-color]{--icon:var(--icon-fill-color)}.treb-main.treb-main .treb-toolbar [data-command=text-color]{--icon:var(--icon-text-color)}.treb-main.treb-main .treb-toolbar [data-command=lock-cells]{--icon:var(--icon-lock)}.treb-main.treb-main .treb-toolbar [data-command=wrap-text]{--icon:var(--icon-wrap-text)}.treb-main.treb-main .treb-toolbar [data-icon=comment]{--icon:var(--icon-comment)}.treb-main.treb-main .treb-toolbar [data-icon=table]{--icon:var(--icon-table)}.treb-main.treb-main .treb-toolbar [data-icon=layout]{--icon:var(--icon-layout)}.treb-main.treb-main .treb-toolbar [data-command=freeze-panes]{--icon:var(--icon-freeze)}.treb-main.treb-main .treb-toolbar [data-command=insert-column-chart]{--icon:var(--icon-column-chart)}.treb-main.treb-main .treb-toolbar [data-command=insert-donut-chart]{--icon:var(--icon-donut-chart)}.treb-main.treb-main .treb-toolbar [data-command=insert-bar-chart]{--icon:var(--icon-bar-chart)}.treb-main.treb-main .treb-toolbar [data-command=insert-line-chart]{--icon:var(--icon-line-chart)}.treb-main.treb-main .treb-toolbar [data-command=insert-image]{--icon:var(--icon-image)}.treb-main.treb-main .treb-toolbar [data-command=border-bottom]{--icon:var(--icon-border-bottom)}.treb-main.treb-main .treb-toolbar [data-command=border-left]{--icon:var(--icon-border-left)}.treb-main.treb-main .treb-toolbar [data-command=border-right]{--icon:var(--icon-border-right)}.treb-main.treb-main .treb-toolbar [data-command=border-top]{--icon:var(--icon-border-top)}.treb-main.treb-main .treb-toolbar [data-command=border-outside]{--icon:var(--icon-border-outer)}.treb-main.treb-main .treb-toolbar [data-command=border-all]{--icon:var(--icon-border-all)}.treb-main.treb-main .treb-toolbar [data-command=border-none]{--icon:var(--icon-border-none)}.treb-main.treb-main .treb-toolbar [data-command=border-double-bottom]{--icon:var(--icon-border-double-bottom)}.treb-main.treb-main .treb-toolbar [data-icon=palette]{--icon:var(--icon-palette)}.treb-main.treb-main .treb-toolbar [data-command=recalculate]{--icon:var(--icon-recalculate);--icon-size:20px 20px}.treb-main.treb-main .treb-toolbar .treb-font-scale{width:4em}.treb-main.treb-main .treb-toolbar .treb-number-format{width:8em}.treb-main.treb-main .treb-toolbar .treb-color-chooser button[data-command=set-color]{align-items:center;display:flex;justify-content:center;padding:0;width:32px}.treb-main.treb-main .treb-toolbar .treb-color-chooser>div{padding:.75rem}.treb-main.treb-main .treb-toolbar .treb-color-chooser>div+div{padding-top:0}.treb-main.treb-main .treb-toolbar .treb-color-chooser>div:last-child{align-items:center;display:flex;flex-direction:row;gap:.5rem}.treb-main.treb-main .treb-toolbar .treb-color-chooser>div:last-child input{flex-grow:1;padding:0 .5rem}.treb-main.treb-main .treb-toolbar .treb-color-chooser>div:last-child button,.treb-main.treb-main .treb-toolbar .treb-color-chooser>div:last-child input{border:1px solid var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));border-radius:3px;height:32px}.treb-main.treb-main .treb-toolbar .treb-color-chooser .treb-swatches{display:grid;gap:.5rem;grid-template-columns:repeat(10,1fr)}.treb-main.treb-main .treb-toolbar .treb-color-chooser .treb-swatches button{border:1px solid var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));border-radius:2px;height:18px;margin:0;padding:0;width:18px}.treb-main.treb-main .treb-toolbar .treb-color-chooser .treb-swatches .treb-default-color:before{background:currentColor;content:"";display:block;height:100%;mask-image:var(--icon-x);-webkit-mask-image:var(--icon-x);mask-position:center;-webkit-mask-position:center;mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat;mask-size:24px 24px;-webkit-mask-size:24px 24px;opacity:.7;position:relative;width:100%}.treb-main.treb-main .treb-toolbar .treb-comment-box textarea{border:1px solid var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));font:inherit;height:10rem;line-height:1.5;margin:.5rem;padding:.25rem;resize:both}.treb-main.treb-main .treb-toolbar .treb-comment-box textarea+div{align-items:center;display:flex;flex-direction:row;gap:.5rem;justify-content:center;padding:0 0 .5rem}.treb-main.treb-main .treb-toolbar .treb-comment-box textarea+div button{border:1px solid var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));border-radius:3px}.treb-main.treb-main{all:revert;box-sizing:border-box;color:inherit;color-scheme:var(--treb-color-scheme,unset);display:grid;font-family:var(--treb-default-font,system-ui,"BlinkMacSystemFont","Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue","sans-serif");font-family:BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,"sans-serif";font-size:14px;font-style:normal;font-weight:400;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:auto minmax(0,1fr);height:100%;position:relative;text-align:start;width:100%}.treb-main.treb-main a,.treb-main.treb-main button,.treb-main.treb-main div,.treb-main.treb-main input,.treb-main.treb-main li,.treb-main.treb-main ol,.treb-main.treb-main svg,.treb-main.treb-main textarea,.treb-main.treb-main ul{all:revert;box-sizing:border-box;font-family:var(--treb-default-font,system-ui,"BlinkMacSystemFont","Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue","sans-serif")}.treb-main.treb-main button,.treb-main.treb-main input{color:inherit;font:inherit}.treb-main.treb-main *{box-sizing:border-box}.treb-main.treb-main [contenteditable]{-webkit-user-modify:read-write;-moz-user-modify:read-write}.treb-main.treb-main[animate] .treb-layout-header{transition:height var(--treb-sidebar-transition,.2s ease),opacity var(--treb-sidebar-transition,.2s ease)}.treb-main.treb-main .treb-layout-header{grid-column:1/3;grid-row:1;height:1px;opacity:0}.treb-main.treb-main[toolbar] .treb-layout-header{height:42px;opacity:1}.treb-main.treb-main[dialog] .treb-layout-header,.treb-main.treb-main[dialog]>*{opacity:.6}.treb-main.treb-main[dialog] .treb-dialog-mask{opacity:1;pointer-events:auto}.treb-main.treb-main .treb-layout-spreadsheet{display:flex;flex-direction:row;gap:1em;grid-column:1;grid-row:2;position:relative;transition:opacity .2s ease;z-index:5}.treb-main.treb-main .treb-views.treb-can-revert .treb-view .treb-revert-indicator{opacity:1;pointer-events:auto}.treb-main.treb-main .treb-view{display:grid;flex:1 1 0px;grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(0,1fr) auto;position:relative}.treb-main.treb-main .treb-view .treb-spreadsheet-backdrop{box-shadow:0 4px 6px -4px rgba(0,0,0,.4);grid-column:1;grid-row:2;z-index:2}.treb-main.treb-main .treb-view .treb-spreadsheet-body{position:relative;z-index:4}.treb-main.treb-main .treb-view .treb-spreadsheet-footer{position:relative;z-index:5}.treb-main.treb-main .treb-view .treb-layout-resize-handle,.treb-main.treb-main .treb-view .treb-revert-indicator{display:none}.treb-main.treb-main .treb-view:first-of-type .treb-revert-indicator{align-self:start;border-color:orange transparent transparent orange;border-style:solid;border-width:.5em;display:block;grid-area:2/1/3/2;height:1rem;justify-self:start;opacity:0;overflow:hidden;pointer-events:none;position:relative;transition:opacity .125s ease;width:1rem;z-index:20}.treb-main.treb-main .treb-view:last-of-type .treb-layout-resize-handle{align-self:end;border-bottom:.5rem solid var(--treb-resize-handle-color,#0059b9);border-left:.5rem solid transparent;border-right:.5rem solid var(--treb-resize-handle-color,#0059b9);border-top:.5rem solid transparent;cursor:nw-resize;display:block;grid-area:2/1/3/2;height:1rem;justify-self:end;width:1rem;z-index:20}.treb-main.treb-main[animate] .treb-layout-sidebar{transition:width var(--treb-sidebar-transition,.2s ease),opacity var(--treb-sidebar-transition,.2s ease)}.treb-main.treb-main .treb-layout-sidebar{align-items:center;display:flex;flex-direction:column;gap:.75rem;grid-column:2;grid-row:2;justify-content:flex-start;overflow:hidden;padding-top:3rem;width:2.5rem;width:3rem}.treb-main.treb-main[collapsed] .treb-layout-sidebar{opacity:0;width:0}.treb-main.treb-main[collapsed] .treb-toggle-sidebar-button{background:var(--treb-toolbar-button-background,#fff);border-bottom-right-radius:0;border-color:var(--treb-toolbar-border-color,var(--treb-ui-border-color,#d1d5db));border-right-color:var(--treb-toolbar-button-background,transparent);border-top-right-radius:0;right:0}.treb-main.treb-main[collapsed] .treb-toggle-sidebar-button:after{mask-image:var(--icon-chevron-left);-webkit-mask-image:var(--icon-chevron-left)}.treb-main.treb-main .treb-layout-sidebar>button,.treb-main.treb-main .treb-toggle-sidebar-button{background:transparent;border:0;margin:0;padding:0}.treb-main.treb-main .treb-layout-sidebar>button:after,.treb-main.treb-main .treb-toggle-sidebar-button:after{background:#ccc;content:"";display:block;height:24px;mask-image:var(--icon);-webkit-mask-image:var(--icon);mask-position:center;-webkit-mask-position:center;mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat;transition:background-color .1s ease;width:24px}.treb-main.treb-main .treb-layout-sidebar>button[data-can-revert=false],.treb-main.treb-main .treb-toggle-sidebar-button[data-can-revert=false]{display:none}.treb-main.treb-main .treb-layout-sidebar>button:hover:after,.treb-main.treb-main .treb-toggle-sidebar-button:hover:after{background:#666}.treb-main.treb-main .treb-layout-sidebar>button[data-command=recalculate],.treb-main.treb-main .treb-toggle-sidebar-button[data-command=recalculate]{--icon:var(--icon-reset)}.treb-main.treb-main .treb-layout-sidebar>button[data-command=toggle-toolbar],.treb-main.treb-main .treb-toggle-sidebar-button[data-command=toggle-toolbar]{--icon:var(--icon-toolbar)}.treb-main.treb-main .treb-layout-sidebar>button[data-command=revert],.treb-main.treb-main .treb-toggle-sidebar-button[data-command=revert]{--icon:var(--icon-revert)}.treb-main.treb-main .treb-layout-sidebar>button[data-command=export-xlsx],.treb-main.treb-main .treb-toggle-sidebar-button[data-command=export-xlsx]{--icon:var(--icon-export)}.treb-main.treb-main .treb-layout-sidebar>button[data-command=about],.treb-main.treb-main .treb-toggle-sidebar-button[data-command=about]{--icon:var(--icon-about)}.treb-main.treb-main .treb-toggle-sidebar-button{align-items:center;background:transparent;border:1px solid transparent;border-radius:12px;bottom:6rem;display:flex;height:24px;justify-content:center;margin:0;padding:0;position:absolute;right:.5rem;right:calc(1.5rem - 12px);width:24px;z-index:39}.treb-main.treb-main .treb-toggle-sidebar-button:after{height:12px;mask-image:var(--icon-chevron-right);-webkit-mask-image:var(--icon-chevron-right);width:12px}.treb-main.treb-main .treb-resize-rect{border:1px dotted var(--treb-resize-frame-color,blue);display:block;height:100%;left:0;position:fixed;top:0;width:100%;z-index:9998}.treb-main.treb-main .treb-resize-mask{height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:9999}treb-spreadsheet{display:block;overflow:hidden;position:relative}.treb-default-size{height:550px;width:800px}`;var Ni=`<div class="treb-main treb-theme"><div class="treb-layout-header treb-animate"><div class="treb-toolbar"></div></div><div class="treb-dialog-mask"><div data-bind="dialog" class="treb-embed-dialog"><div data-bind="left"><a href="https://treb.app" target="_blank"><div class="treb-icon-64"></div></a></div><div data-bind="middle"><div data-bind="title" class="treb-embed-dialog-title"></div><div data-bind="message" class="treb-embed-dialog-message"></div><div data-bind="about" class="treb-embed-dialog-body"></div></div><button type="button" title="Close dialog" data-bind="close" class="treb-close-box"><svg viewBox="0 0 16 16"><path d="M11.854 4.146a.5.5 0 0 1 0 .708l-7 7a.5.5 0 0 1-.708-.708l7-7a.5.5 0 0 1 .708 0z"/><path d="M4.146 4.146a.5.5 0 0 0 0 .708l7 7a.5.5 0 0 0 .708-.708l-7-7a.5.5 0 0 0-.708 0z"/></svg></button></div></div><div class="treb-layout-spreadsheet treb-views"><template class="treb-view-template"><div class="treb-view"><div class="treb-formula-bar notranslate" hidden><div class="treb-address-label"><div></div></div><div class="treb-editor-container"><div contenteditable="true"></div></div></div><div class="treb-spreadsheet-backdrop"></div><div class="treb-spreadsheet-body" role="grid"><div class="treb-grid" tabindex="-1"><div class="treb-overlay-container notranslate" translate="no"><div class="treb-overlay-inset"><div class="treb-overlay-editor" contenteditable tabindex="-1" spellcheck="true" role="gridcell"></div></div></div></div></div><div class="treb-spreadsheet-footer" hidden><button class="treb-delete-tab" title="Delete current sheet" data-command="delete-tab" data-conditional="delete-tab"><svg tabindex="-1" viewbox="0 0 16 16"><path d="M4,4 L12,12 M12,4 L4,12"/></svg></button><ol class="treb-spreadsheet-tabs" role="tablist"></ol><button class="treb-add-tab" data-command="add-tab" data-conditional="add-tab" title="Add sheet">+</button><div class="treb-stats-panel"></div><div class="treb-scale-control" data-conditional="scale-control"></div></div><div class="treb-layout-resize-handle" data-conditional="resize"></div><div class="treb-revert-indicator" data-command="revert-indicator" title="This document has been modified from the original version."></div></div></template></div><div class="treb-layout-sidebar treb-animate"><button data-command="recalculate" title="Recalculate"></button> <button data-command="toggle-toolbar" data-conditional="toolbar" title="Toggle toolbar"></button> <button data-command="export-xlsx" data-conditional="export" title="Export as XLSX"></button> <button data-command="revert" data-conditional="revert" title="Revert to original version"></button> <button data-command="about" title="What's this?"></button></div><button class="treb-toggle-sidebar-button" title="Toggle sidebar"></button></div>`;var Pi='<div class="treb-menu" title="File menu" file-menu><button data-icon="file-menu" menu-target></button><div><button data-command="reset">New document</button><div separator></div><button data-command="import-file">Open file...</button> <button data-command="save-json">Save JSON</button><div separator xlsx-support></div><button data-command="export-xlsx" xlsx-support>Export XLSX</button></div></div><div composite narrow><button data-command="justify-left" data-target="justify" title="Left-align text"></button><div class="treb-menu"><button dropdown></button><div class="treb-icon-buttons" data-replace="justify"><button data-command="justify-left" title="Left-align text"></button> <button data-command="justify-center" title="Center-align text"></button> <button data-command="justify-right" title="Right-align text"></button></div></div></div><div composite narrow><button data-command="align-top" data-target="align" title="Align to top"></button><div class="treb-menu"><button dropdown></button><div class="treb-icon-buttons" data-replace="align"><button data-command="align-top" title="Align to top"></button> <button data-command="align-middle" title="Align to middle"></button> <button data-command="align-bottom" title="Align to bottom"></button></div></div></div><div class="group" wide><button data-command="justify-left" title="Left-align text"></button> <button data-command="justify-center" title="Center-align text"></button> <button data-command="justify-right" title="Right-align text"></button></div><div class="group" wide><button data-command="align-top" title="Align to top"></button> <button data-command="align-middle" title="Align to middle"></button> <button data-command="align-bottom" title="Align to bottom"></button></div><div class="group"><button data-command="wrap-text" title="Wrap text"></button> <button data-command="merge-cells" data-id="merge" data-title="Merge cells" data-active-title="Unmerge cells"></button> <button data-command="lock-cells" data-title="Lock cells" data-active-title="Unlock cells"></button> <button data-command="freeze-panes" data-title="Freeze panes" data-active-title="Unfreeze panes" freeze-button></button> <button data-command="insert-table" data-icon="table" data-title="Insert table" data-active-title="Remove table" table-button></button><div class="treb-menu"><button data-icon="comment" data-title="Comment" data-active-title="Update comment"></button><div class="treb-comment-box"><textarea></textarea><div><button data-command="clear-comment">Clear</button> <button data-command="update-comment">Save</button></div></div></div></div><div composite><button data-command="fill-color" data-color-bar="fill" data-color="{}" title="Fill color"></button><div class="treb-menu treb-color-menu" data-color-command="fill-color" data-replace-color="fill" data-default-color-text="No fill"><button dropdown></button><div class="treb-color-chooser"><div class="treb-caption">Theme colors</div><div class="treb-swatches"></div><div class="treb-caption">Other colors</div><div class="treb-swatches"></div><div><input placeholder="New color" class="treb-color-input"> <button data-command="set-color" data-color=""><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" viewBox="0 0 16 16"><path d="M13.854 3.646a.5.5 0 0 1 0 .708l-7 7a.5.5 0 0 1-.708 0l-3.5-3.5a.5.5 0 1 1 .708-.708L6.5 10.293l6.646-6.647a.5.5 0 0 1 .708 0z"/></svg></button></div></div></div></div><div composite><button data-command="text-color" data-color-bar="text" data-color="{}" title="Text color"></button><div class="treb-menu treb-color-menu" data-color-command="text-color" data-replace-color="text" data-default-color-text="Default text color"><button dropdown></button></div></div><div composite><button data-command="border-bottom" data-target="border" title="Bottom border"></button><div class="treb-menu"><button dropdown></button><div class="treb-icon-buttons" data-replace="border"><button data-command="border-top" title="Top border"></button> <button data-command="border-left" title="Left border"></button> <button data-command="border-right" title="Right border"></button> <button data-command="border-bottom" title="Bottom border"></button> <button data-command="border-double-bottom" title="Double bottom border"></button> <button data-command="border-outside" title="Outside borders"></button> <button data-command="border-all" title="All borders"></button> <button data-command="border-none" title="Clear borders"></button><div separator></div><div class="treb-menu treb-color-menu treb-submenu" data-color-command="border-color" data-replace-color="border" title="Border color" data-default-color-text="Default border color"><button data-icon="palette" data-color-bar="border" data-color="{}"></button></div></div></div></div><div composite font-scale><input class="treb-font-scale" title="Font scale"><div class="treb-menu"><button dropdown></button><div><button data-command="font-scale" data-scale="0.8">0.80</button> <button data-command="font-scale" data-scale="0.9">0.90</button> <button data-command="font-scale" data-scale="1.0">1.00</button> <button data-command="font-scale" data-scale="1.1">1.10</button> <button data-command="font-scale" data-scale="1.2">1.20</button> <button data-command="font-scale" data-scale="1.5">1.50</button> <button data-command="font-scale" data-scale="2.0">2.00</button></div></div></div><div class="treb-menu"><button data-icon="layout" title="Rows & columns"></button><div><button data-command="insert-row">Insert row</button> <button data-command="insert-column">Insert column</button> <button data-command="delete-row">Delete row</button> <button data-command="delete-column">Delete column</button><div separator add-remove-sheet></div><button data-command="insert-sheet" add-remove-sheet>Add sheet</button> <button data-command="delete-sheet" add-remove-sheet>Delete sheet</button></div></div><div composite><input class="treb-number-format" title="Number format"><div class="treb-menu"><button dropdown></button><div class="treb-number-format-menu"></div></div></div><div class="treb-split"><button data-command="decrease-precision" title="Decrease precision"></button> <button data-command="increase-precision" title="Increase precision"></button></div><div composite chart-menu><button data-command="insert-column-chart" data-target="annotation" title="Insert column chart"></button><div class="treb-menu"><button dropdown></button><div class="treb-icon-buttons" data-replace="annotation"><button data-command="insert-column-chart" title="Insert column chart"></button> <button data-command="insert-donut-chart" title="Insert donut chart"></button> <button data-command="insert-bar-chart" title="Insert bar chart"></button> <button data-command="insert-line-chart" title="Insert line chart"></button><div separator></div><button data-command="insert-image" title="Insert image"></button></div></div></div><button data-command="recalculate" title="Recalculate" recalculate-button></button>';var qe=class{root;sheet;border_color;color_bar_elements={};replace_targets={};layout_element;views;revert_button;revert_state=!1;toolbar_controls={};swatch_lists={};DOM;constructor(e){typeof e=="string"&&(e=document.querySelector(e)),this.DOM=F.GetInstance(e?.ownerDocument),this.DOM.view&&e instanceof this.DOM.view.HTMLElement&&(this.root=e,this.DOM.doc?.head.querySelector("style[treb-stylesheet]")||this.DOM.doc?.head.prepend(this.DOM.Create("style",void 0,void 0,{text:Hi,attrs:{"treb-stylesheet":""}})))}CoerceAttributeValue(e){if(e===null||e.toString().toLowerCase()==="true"||e==="")return!0;if(e.toLowerCase()==="false")return!1;{let t=Number(e);if(!isNaN(t))return t}return e||""}ParseOptionAttributes(){let e={};if(this.root){let t=this.root.getAttributeNames();for(let r of t){switch(r){case"class":case"style":case"id":continue;case"data-options":case"options":{let o=(this.root.getAttribute(r)||"").split(",");for(let n of o){let a=n.split(/=/);a.length===1?e[a[0]]=!0:e[a[0]]=this.CoerceAttributeValue(a[1])}}continue;case"data-treb":continue;case"inline-document":continue;case"src":e.document=this.root.getAttribute("src")||void 0;continue}r=r.replace(/-/g,"_"),e[r]=this.CoerceAttributeValue(this.root.getAttribute(r))}}return{...e}}AttachElement(e={}){if(e={...this.ParseOptionAttributes(),...e},this.root){if(!e.headless){let t=this.root.getBoundingClientRect();(!t.width||!t.height)&&this.root.classList.add("treb-default-size")}if(this.root.hasAttribute("inline-document")){let t=this.root.getAttribute("inline-document")||"";for(let r of Array.from(this.root.children))if(this.DOM.view&&r instanceof this.DOM.view.HTMLScriptElement&&r.type==="application/json"){let i=r.getAttribute("name")||"";if(i===t||!i&&t==="true"){let o=r.textContent;if(o)try{e.inline_document=JSON.parse(o)}catch(n){console.error(n)}break}}e.inline_document||console.warn("inline document failed")}this.root.innerHTML=Ni,e.container=this.root.querySelector(".treb-layout-spreadsheet")}e.export=!1,this.sheet=new Zt(e),this.root&&this.CreateLayout(this.sheet,this.root)}CreateLayout(e,t){new ResizeObserver(()=>e.Resize()).observe(t),this.layout_element=t.querySelector(".treb-main");let i=t.querySelector(".treb-toggle-sidebar-button");if(i&&this.layout_element){let s=this.layout_element;i.addEventListener("click",()=>{let l=s.getAttribute("collapsed");typeof l=="string"&&(l===""||l==="true")?s.removeAttribute("collapsed"):s.setAttribute("collapsed","")})}(e.options.toolbar==="show"||e.options.toolbar==="show-narrow")&&this.layout_element?.setAttribute("toolbar",""),e.options.collapsed&&this.layout_element?.setAttribute("collapsed","");let o=t.querySelector("[data-command=revert-indicator]");this.DOM.view&&o instanceof this.DOM.view.HTMLElement&&(e.options.revert_indicator?o.addEventListener("click",()=>{e.HandleToolbarMessage({command:"revert-indicator"})}):o.style.display="none"),t.querySelector(".treb-layout-sidebar")?.addEventListener("click",s=>{let l=s.target;if(l.dataset.command)switch(l.dataset.command){case"toggle-toolbar":this.ToggleToolbar();break;default:e.HandleToolbarMessage({command:l.dataset.command});break}}),e.options.toolbar&&this.AttachToolbar(e,t);let a={"table-button":!!e.options.table_button,revert:!!e.options.revert_button,toolbar:!!e.options.toolbar,export:!!e.options.export,resize:!!e.options.resizable,"add-tab":!!e.options.add_tab,"delete-tab":!!e.options.delete_tab||!!e.options.add_tab};for(let[s,l]of Object.entries(a))if(!l){let d=this.layout_element.querySelectorAll(`[data-conditional=${s}]`);for(let u of Array.from(d))u.style.display="none"}if(e.options.revert_button&&(this.revert_button=this.layout_element.querySelector("[data-command=revert]")||void 0),e.options.resizable){let s={width:0,height:0},l={x:0,y:0},d={x:0,y:0};this.views=t.querySelector(".treb-views")||void 0;let u,h,m=t.querySelector(".treb-layout-resize-handle"),f=()=>_(),p=b=>{b.buttons===0?_():(d.x=b.screenX-l.x,d.y=b.screenY-l.y,h&&(h.style.width=s.width+d.x+"px",h.style.height=s.height+d.y+"px"))},_=()=>{if(d.x||d.y){let b=t.getBoundingClientRect();e.options.constrain_width||(t.style.width=b.width+d.x+"px"),t.style.height=b.height+d.y+"px"}u&&(u.removeEventListener("mouseup",f),u.removeEventListener("mousemove",p),u.parentElement?.removeChild(u),u=void 0),h?.parentElement?.removeChild(h),h=void 0};m.addEventListener("mousedown",b=>{b.stopPropagation(),b.preventDefault();let v=t.querySelector(".treb-main");h=this.DOM.Div("treb-resize-rect",v),u=this.DOM.Div("treb-resize-mask",v,{attrs:{style:"cursor: nw-resize;"},events:{mouseup:f,mousemove:p}}),l.x=b.screenX,l.y=b.screenY,d.x=0,d.y=0;let g=this.views?.querySelectorAll(".treb-spreadsheet-body"),w=Array.from(g||[]).map(x=>x.getBoundingClientRect());if(w.length){let x=JSON.parse(JSON.stringify(w.shift()));for(let A of w)x.top=Math.min(A.top,x.top),x.left=Math.min(A.left,x.left),x.right=Math.max(A.right,x.right),x.bottom=Math.max(A.bottom,x.bottom);let S=x.right-x.left,k=x.bottom-x.top;h.style.top=x.top+"px",h.style.left=x.left+"px",h.style.width=S+"px",h.style.height=k+"px",s.width=S,s.height=k}})}setTimeout(()=>this.layout_element?.setAttribute("animate",""),250)}ToggleToolbar(){if(this.layout_element){let e=this.layout_element.getAttribute("toolbar");typeof e=="string"&&(e===""||e==="true")?this.layout_element.removeAttribute("toolbar"):this.layout_element.setAttribute("toolbar","")}}UpdateSelectionStyle(e,t,r){let i=e.selection_state;r.value="";for(let[s,l]of Object.entries(this.toolbar_controls))l&&(l.removeAttribute("active"),l.dataset.title&&(l.title=l.dataset.title));let o=s=>{s&&(s.setAttribute("active",""),s.dataset.activeTitle&&(s.title=s.dataset.activeTitle))};i.comment&&(o(this.toolbar_controls.comment),r.value=i.comment),i.style?.locked&&o(this.toolbar_controls.locked),i.frozen&&o(this.toolbar_controls.freeze),i.style?.wrap&&o(this.toolbar_controls.wrap),this.toolbar_controls.table&&(i.table?(o(this.toolbar_controls.table),this.toolbar_controls.table.dataset.command="remove-table"):this.toolbar_controls.table.dataset.command="insert-table"),this.toolbar_controls.merge&&(i.merge?(o(this.toolbar_controls.merge),this.toolbar_controls.merge.dataset.command="unmerge-cells"):this.toolbar_controls.merge.dataset.command="merge-cells");let n=this.toolbar_controls.format;n&&(i.style?.number_format?n.value=D.SymbolicName(i.style.number_format)||i.style.number_format:n.value="General");let a=this.toolbar_controls.scale;switch(a&&(a.value=e.FormatNumber(i.relative_font_size||1,"0.00")),i.style?.horizontal_align){case"left":o(this.toolbar_controls.left);break;case"center":o(this.toolbar_controls.center);break;case"right":o(this.toolbar_controls.right);break}switch(i.style?.vertical_align){case"top":o(this.toolbar_controls.top);break;case"middle":o(this.toolbar_controls.middle);break;case"bottom":o(this.toolbar_controls.bottom);break}}UpdateDocumentStyles(e,t){{let a=this.DOM.Fragment(),s=e.document_styles.theme_colors.length,l=["Background","Text","Background","Text","Accent"];if(s){let m=e.document_styles.theme_colors[0].length;for(let f=0;f<m;f++)for(let p=0;p<s;p++){let _=e.document_styles.theme_colors[p][f],b=`background: ${_.resolved};`,v=l[p]||l[4];_.color.tint?v+=` (${(_.color.tint>0?"+":"")+_.color.tint*100}%)`:p===0?this.color_bar_elements.fill?.style.setProperty("--treb-default-color",_.resolved):p===1&&(this.color_bar_elements.text?.style.setProperty("--treb-default-color",_.resolved),this.color_bar_elements.border?.style.setProperty("--treb-default-color",_.resolved)),this.DOM.Create("button",void 0,a,{attrs:{style:b,title:v},data:{command:"set-color",color:JSON.stringify(_.color)}})}}this.swatch_lists.theme?.replaceChildren(a),a=this.DOM.Fragment(),this.DOM.Create("button","treb-default-color",a,{attrs:{title:"Default color"},data:{command:"set-color",color:JSON.stringify({})}});let d=["Black","White","Gray","Red","Orange","Yellow","Green","Blue","Violet"],u=d.map(m=>m.toLowerCase()),h=e.document_styles.colors.filter(m=>!u.includes(m.toLowerCase()));for(let m of[...d,...h]){let f=`background: ${m.toLowerCase()};`;this.DOM.Create("button",void 0,a,{attrs:{style:f,title:m},data:{command:"set-color",color:JSON.stringify({text:m.toLowerCase()})}})}this.swatch_lists.other?.replaceChildren(a)}let r=["General","Number","Integer","Percent","Fraction","Accounting","Currency","Scientific"],i=["Timestamp","Long Date","Short Date"];for(let a of e.document_styles.number_formats){if(D.SymbolicName(D.Translate(a)))continue;D.Get(a).date_format?i.push(a):r.push(a)}let o=a=>this.DOM.Create("button",void 0,void 0,{text:a,data:{format:a,command:"number-format"}}),n=this.DOM.Fragment();n.append(...r.map(a=>o(a))),n.append(this.DOM.Div(void 0,void 0,{attrs:{separator:""}})),n.append(...i.map(a=>o(a))),t.textContent="",t.append(n)}UpdateRevertState(e){let t=e.can_revert;this.revert_state!==t&&(this.revert_state=t,(this.revert_button||e.options.revert_indicator)&&(this.revert_state?this.views?.classList.add("treb-can-revert"):this.views?.classList.remove("treb-can-revert"),this.revert_button&&(this.revert_button.dataset.canRevert=t?"true":"false",t?(this.revert_button.classList.remove("sidebar-disabled"),this.revert_button.title="Revert to original version"):(this.revert_button.classList.add("sidebar-disabled"),this.revert_button.title="This is the original version of the document"))))}ReplaceTemplate(e,t,r=!0){let i=e.querySelector(t);if(i&&i.parentElement){for(let o of Array.from(i.content.children))i.parentElement.insertBefore(o,i);r&&i.parentElement.removeChild(i)}else console.warn("template not found",t)}AttachToolbar(e,t){let r=t.querySelector(".treb-layout-header"),i=t.querySelector(".treb-toolbar");i.innerHTML=Pi;let o=[];e.options.toolbar==="narrow"||e.options.toolbar==="show-narrow"?o.push(...Array.from(i.querySelectorAll("[wide]"))):o.push(...Array.from(i.querySelectorAll("[narrow]"))),e.options.file_menu||o.push(i.querySelector("[file-menu]")),e.options.font_scale||o.push(i.querySelector("[font-scale]")),e.options.chart_menu||o.push(i.querySelector("[chart-menu]")),e.options.freeze_button||o.push(i.querySelector("[freeze-button]")),e.options.table_button||o.push(i.querySelector("[table-button]")),!e.options.add_tab&&!e.options.delete_tab&&o.push(...Array.from(i.querySelectorAll("[add-remove-sheet]"))),e.options.toolbar_recalculate_button||o.push(i.querySelector("[recalculate-button]")),o.push(...Array.from(i.querySelectorAll("[xlsx-support]")));for(let g of o)g&&g.parentElement?.removeChild(g);let n=i.querySelector(".treb-color-chooser"),a=i.querySelector(".treb-comment-box textarea");for(let[g,w]of Object.entries({top:"[wide] [data-command=align-top]",middle:"[wide] [data-command=align-middle]",bottom:"[wide] [data-command=align-bottom]",left:"[wide] [data-command=justify-left]",right:"[wide] [data-command=justify-right]",center:"[wide] [data-command=justify-center]",wrap:"[data-command=wrap-text]",merge:"[data-id=merge]",comment:"[data-icon=comment]",locked:"[data-command=lock-cells]",freeze:"[data-command=freeze-panes]",table:"[data-icon=table]",format:"input.treb-number-format",scale:"input.treb-font-scale"})){let x=i.querySelector(w);x&&(this.toolbar_controls[g]=x)}let s=n.querySelectorAll(".treb-swatches");this.swatch_lists={theme:s[0],other:s[1]};let l=t.querySelector("[data-command=increase-precision");l&&(l.textContent=this.sheet?.FormatNumber(0,"0.00")||""),l=t.querySelector("[data-command=decrease-precision"),l&&(l.textContent=this.sheet?.FormatNumber(0,"0.0")||""),l=i.querySelector("[data-command=update-comment]"),a.addEventListener("keydown",g=>{g.key==="Enter"&&(g.shiftKey||g.ctrlKey)&&l.click()});for(let g of["border","annotation","align","justify"])this.replace_targets[g]=i.querySelector(`[data-target=${g}`);for(let g of["fill","text","border"])this.color_bar_elements[g]=i.querySelector(`[data-color-bar=${g}]`);i.addEventListener("click",g=>{let w=g.target,x={format:w.dataset.format,scale:w.dataset.scale},S=w?.dataset.command;if(S){let k=w.parentElement?.dataset.replace;if(k){let A=this.replace_targets[k];A&&(A.dataset.command=S,A.title=w.title||"")}switch(/^border-/.test(S)&&(x.color=this.border_color||{}),S){case"text-color":case"fill-color":x.color={};try{x.color=JSON.parse(w.dataset.color||"{}")}catch(A){console.error(A)}break;case"set-color":S=n.dataset.colorCommand||"",x.color={};try{x.color=JSON.parse(w.dataset.color||"{}")}catch(A){console.error(A)}if(S==="border-color"&&(this.border_color=x.color),n.dataset.target){let A=this.color_bar_elements[n.dataset.target];A&&(A.style.setProperty("--treb-color-bar-color",w.style.backgroundColor),A.dataset.color=w.dataset.color||"{}")}break;case"update-comment":x.comment=a.value;break}e.HandleToolbarMessage({command:S,...x})}});let d=(g,w)=>{let x=i.querySelector(g);if(x){let S="";x.addEventListener("focusin",()=>S=x.value),x.addEventListener("keydown",k=>{switch(k.key){case"Escape":x.value=S,e.Focus();break;case"Enter":w(x.value)||(x.value=S,e.Focus());break;default:return}k.stopPropagation(),k.preventDefault()})}};d("input.treb-number-format",g=>g?(e.HandleToolbarMessage({command:"number-format",format:g}),!0):!1),d("input.treb-font-scale",g=>{let w=Number(g);return!w||isNaN(w)?(console.warn("invalid scale value"),!1):(e.HandleToolbarMessage({command:"font-scale",scale:w}),!0)});let u=n.querySelector("input"),h=n.querySelector("input + button");u.addEventListener("input",g=>{if(g instanceof InputEvent&&g.isComposing)return;h.style.background=u.value||"";let w=h.style.backgroundColor||"#fff",x=de.MeasureColor(w),S=Z.RGBToHSL(x[0],x[1],x[2]);h.style.color=S.l>.5?"#000":"#fff",h.dataset.color=JSON.stringify(h.style.backgroundColor?{text:h.style.backgroundColor}:{})}),u.addEventListener("keydown",g=>{g.key==="Enter"&&(g.stopPropagation(),g.preventDefault(),h.click())}),/firefox/i.test(navigator.userAgent)?r.addEventListener("scroll",()=>{this.DOM.view&&this.DOM.doc?.activeElement instanceof this.DOM.view.HTMLElement&&this.DOM.doc.activeElement?.blur()}):r.addEventListener("scroll",()=>e.Focus());let m=!1,f=g=>{g.key==="Escape"&&(g.stopPropagation(),g.preventDefault(),Promise.resolve().then(()=>e.Focus()))},p=g=>{if(m){if(g.relatedTarget instanceof Node&&i.contains(g.relatedTarget))return;i.removeEventListener("keydown",f),i.removeEventListener("focusout",p),m=!1}},_=g=>{let w=g.target,x=w?.parentElement;if(w?.classList.contains("treb-menu")){x=w;for(let S of Array.from(x.children))if(S.tagName==="BUTTON"){w=S;break}}else if(!x?.classList.contains("treb-menu"))return;if(w&&x){m||(i.addEventListener("focusout",p),i.addEventListener("keydown",f),m=!0),x.dataset.colorCommand&&(n.querySelector(".treb-default-color")?.setAttribute("title",x.dataset.defaultColorText||"Default color"),x.appendChild(n),n.dataset.colorCommand=x.dataset.colorCommand,n.dataset.target=x.dataset.replaceColor||"");let S=x.querySelector("div"),k=r.getBoundingClientRect(),A=w.getBoundingClientRect(),{left:M}=A,I=x.parentElement;I?.hasAttribute("composite")&&(M=I.firstElementChild.getBoundingClientRect().left);let q=S.getBoundingClientRect();x.classList.contains("treb-submenu")?(S.style.top=A.top-q.height/2+"px",M+A.width+6+q.width>k.right?S.style.left=M-6-q.width+"px":S.style.left=M+A.width+6+"px"):(S.style.top=A.bottom+"px",M+q.width>k.right-6?S.style.left=A.right-q.width+"px":S.style.left=M+"px");let me=S.querySelector("textarea");me&&requestAnimationFrame(()=>me.focus())}},b=this.root?.querySelector(".treb-number-format-menu");b&&(this.UpdateDocumentStyles(e,b),this.UpdateSelectionStyle(e,i,a),e.Subscribe(g=>{switch(g.type){case"focus-view":break;case"data":case"document-change":case"load":case"reset":this.UpdateDocumentStyles(e,b),this.UpdateSelectionStyle(e,i,a),this.UpdateRevertState(e);break;case"selection":this.UpdateSelectionStyle(e,i,a);break}}));let v=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);if(i.addEventListener("focusin",g=>{_(g)}),v){let g=Array.from(i.querySelectorAll(".treb-menu"));for(let w of g)w.tabIndex=0;i.addEventListener("mousedown",w=>{_(w)})}}};var Qt=class{version="28.2.0";CreateSpreadsheet(e){let t=e.container,r=new qe(t);if(r.AttachElement(e),!r.sheet)throw new Error("construction failed");return r.sheet}},dn=new Qt;if(typeof HTMLElement<"u"){class c extends HTMLElement{get sheet(){return this.instance.sheet}instance;constructor(){super(),this.instance=new qe(this)}connectedCallback(){this.instance.AttachElement()}}typeof customElements<"u"&&(customElements.get("treb-spreadsheet")?console.info("custom element treb-spreadsheet is already defined."):customElements.define("treb-spreadsheet",c))}export{dn as TREB,Qt as TREBGlobal};
|