@odoo/o-spreadsheet 18.5.0-alpha.0 → 18.5.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,7 +6,7 @@
6
6
  z-index: ${Fe.FigureTooltip};
7
7
  }
8
8
  }
9
- `,Sh.add("chartShowValuesPlugin",{register:e=>e.register(uC),unregister:e=>e.unregister(uC)}),Sh.add("waterfallLinesPlugin",{register:e=>e.register(HC),unregister:e=>e.unregister(HC)}),Sh.add("funnelController",{register:e=>e.register(wh()),unregister:e=>e.unregister(wh())}),Sh.add("funnelElement",{register:e=>e.register(Ih()),unregister:e=>e.unregister(Ih())}),Sh.add("funnelTooltipPositioner",{register:e=>e.Tooltip.positioners.funnelTooltipPositioner=Eh,unregister:e=>e.Tooltip.positioners.funnelTooltipPositioner=void 0}),Sh.add("sunburstLabelsPlugin",{register:e=>e.register(LC),unregister:e=>e.unregister(LC)}),Sh.add("sunburstHoverPlugin",{register:e=>e.register(kC),unregister:e=>e.unregister(kC)});class zC extends t.Component{static template="o-spreadsheet-ChartJsComponent";static props={figureUI:Object,isFullScreen:{type:Boolean,optional:!0}};canvas=t.useRef("graphContainer");chart;currentRuntime;animationStore;currentDevicePixelRatio=window.devicePixelRatio;get background(){return this.chartRuntime.background}get canvasStyle(){return`background-color: ${this.background}`}get chartRuntime(){const e=this.env.model.getters.getChartRuntime(this.props.figureUI.id);if(!("chartJsConfig"in e))throw new Error("Unsupported chart runtime");return e}setup(){this.env.model.getters.isDashboard()&&(this.animationStore=oh(yh)),t.onMounted((()=>{const e=this.chartRuntime;this.currentRuntime=e,this.createChart(ze(e.chartJsConfig))})),t.onWillUnmount((()=>this.chart?.destroy())),t.useEffect((()=>{const e=this.chartRuntime;e!==this.currentRuntime?(e.chartJsConfig.type!==this.currentRuntime.chartJsConfig.type?(this.chart?.destroy(),this.createChart(ze(e.chartJsConfig))):this.updateChartJs(ze(e.chartJsConfig)),this.currentRuntime=e):this.currentDevicePixelRatio!==window.devicePixelRatio&&(this.currentDevicePixelRatio=window.devicePixelRatio,this.updateChartJs(ze(this.currentRuntime.chartJsConfig)))}))}createChart(e){if(this.env.model.getters.isDashboard()&&this.animationStore){const t=this.env.model.getters.getChart(this.props.figureUI.id)?.type;t&&this.animationStore.animationPlayed[this.animationFigureId]!==t&&(e=this.enableAnimationInChartData(e),this.animationStore.disableAnimationForChart(this.animationFigureId,t))}const t=this.canvas.el.getContext("2d");this.chart=new window.Chart(t,e)}updateChartJs(e){if(this.env.model.getters.isDashboard()){const t=this.env.model.getters.getChart(this.props.figureUI.id)?.type;t&&this.hasChartDataChanged()&&this.animationStore&&(e=this.enableAnimationInChartData(e),this.animationStore.disableAnimationForChart(this.animationFigureId,t))}e.data&&e.data.datasets?(this.chart.data=e.data,e.options?.plugins?.title&&(this.chart.config.options.plugins.title=e.options.plugins.title)):this.chart.data.datasets=[],this.chart.config.options=e.options,this.chart.update()}hasChartDataChanged(){return!mt(this.currentRuntime.chartJsConfig.data,this.chartRuntime.chartJsConfig.data)}enableAnimationInChartData(e){return{...e,options:{...e.options,animation:{animateRotate:!0}}}}get animationFigureId(){return this.props.isFullScreen?this.props.figureUI.id+"-fullscreen":this.props.figureUI.id}}class $C{sheetId;title;getters;constructor(e,t,o){this.title=e.title,this.sheetId=t,this.getters=o}static validateChartDefinition(e,t){throw new Error("This method should be implemented by sub class")}static transformDefinition(e,t,o){throw new Error("This method should be implemented by sub class")}static getDefinitionFromContextCreation(e){throw new Error("This method should be implemented by sub class")}}function GC(e,t,o,s,i){if("text"===t||"progress"===t||e?.type!==Ts.number||o?.type!==Ts.number)return;const n=o.value-e.value;return n>0?s:n<0?i:void 0}function WC(e,t,o){if("text"===o||e?.type!==Ts.number||t?.type!==Ts.number)return"neutral";const s=t.value-e.value;return s>0?"up":s<0?"down":"neutral"}function qC(e){return e.keyValue&&!Xr.test(e.keyValue)?"InvalidScorecardKeyValue":"Success"}function ZC(e){return e.baseline&&!Xr.test(e.baseline)?"InvalidScorecardBaseline":"Success"}const jC=new window.Path2D("M8.6 4.8a.5.5 0 0 1 0 .75l-3.9 3.9a.5 .5 0 0 1 -.75 0l-3.8 -3.9a.5 .5 0 0 1 0 -.75l.4-.4a.5.5 0 0 1 .75 0l2.3 2.4v-5.7c0-.25.25-.5.5-.5h.6c.25 0 .5.25.5.5v5.8l2.3 -2.4a.5.5 0 0 1 .75 0z"),YC=new window.Path2D("M8.7 5.5a.5.5 0 0 0 0-.75l-3.8-4a.5.5 0 0 0-.75 0l-3.8 4a.5.5 0 0 0 0 .75l.4.4a.5.5 0 0 0 .75 0l2.3-2.4v5.8c0 .25.25.5.5.5h.6c.25 0 .5-.25.5-.5v-5.8l2.2 2.4a.5.5 0 0 0 .75 0z");let XC=class e extends $C{keyValue;keyDescr;baseline;baselineMode;baselineDescr;progressBar=!1;background;baselineColorUp;baselineColorDown;fontColor;humanize;type="scorecard";constructor(e,t,o){super(e,t,o),this.keyValue=fa(o,t,e.keyValue),this.keyDescr=e.keyDescr,this.baseline=fa(o,t,e.baseline),this.baselineMode=e.baselineMode,this.baselineDescr=e.baselineDescr,this.background=e.background,this.baselineColorUp=e.baselineColorUp??xe,this.baselineColorDown=e.baselineColorDown??Ee,this.humanize=e.humanize??!1}static validateChartDefinition(e,t){return e.checkValidations(t,qC,ZC)}static getDefinitionFromContextCreation(e){return{background:e.background,type:"scorecard",keyValue:e.range?e.range[0].dataRange:void 0,title:e.title||{text:""},baselineMode:Ie,baselineColorUp:xe,baselineColorDown:Ee,baseline:e.auxiliaryRange||""}}static transformDefinition(e,t,o){let s,i;if(t.baseline){const i=US(e,t.baseline,o);i!==Js.InvalidReference&&(s=i)}if(t.keyValue){const s=US(e,t.keyValue,o);s!==Js.InvalidReference&&(i=s)}return{...t,baseline:s,keyValue:i}}duplicateInDuplicatedSheet(t){const o=ZS(this.sheetId,t,this.baseline),s=ZS(this.sheetId,t,this.keyValue),i=this.getDefinitionWithSpecificRanges(o,s,t);return new e(i,t,this.getters)}copyInSheetId(t){const o=this.getDefinitionWithSpecificRanges(this.baseline,this.keyValue,t);return new e(o,t,this.getters)}getDefinition(){return this.getDefinitionWithSpecificRanges(this.baseline,this.keyValue)}getContextCreation(){return{...this,range:this.keyValue?[{dataRange:this.getters.getRangeString(this.keyValue,this.sheetId)}]:void 0,auxiliaryRange:this.baseline?this.getters.getRangeString(this.baseline,this.sheetId):void 0}}getDefinitionWithSpecificRanges(e,t,o){return{baselineColorDown:this.baselineColorDown,baselineColorUp:this.baselineColorUp,baselineMode:this.baselineMode,title:this.title,type:"scorecard",background:this.background,baseline:e?this.getters.getRangeString(e,o||this.sheetId):void 0,baselineDescr:this.baselineDescr,keyValue:t?this.getters.getRangeString(t,o||this.sheetId):void 0,keyDescr:this.keyDescr,humanize:this.humanize}}getDefinitionForExcel(){}updateRanges(t){const o=jS(this.baseline,t),s=jS(this.keyValue,t);if(this.baseline===o&&this.keyValue===s)return this;const i=this.getDefinitionWithSpecificRanges(o,s);return new e(i,this.sheetId,this.getters)}};function KC(e,t){const o=t.getContext("2d"),s=window.devicePixelRatio||1;t.width=s*e.canvas.width,t.height=s*e.canvas.height,o.scale(s,s);const i=e.canvas.width-j;if(o.fillStyle=e.canvas.backgroundColor,o.fillRect(0,0,e.canvas.width,e.canvas.height),e.title){o.font=e.title.style.font,o.fillStyle=e.title.style.color;const t=o.textBaseline;o.textBaseline="middle",o.fillText(za(o,e.title.text,i-e.title.position.x),e.title.position.x,e.title.position.y),o.textBaseline=t}if(e.baseline&&(o.font=e.baseline.style.font,o.fillStyle=e.baseline.style.color,$a(o,e.baseline.text,e.baseline.position,e.baseline.style.underline,e.baseline.style.strikethrough)),e.baselineArrow&&e.baselineArrow.style.size>0){o.save(),o.fillStyle=e.baselineArrow.style.color,o.translate(e.baselineArrow.position.x,e.baselineArrow.position.y);const t=e.baselineArrow.style.size/10;switch(o.scale(t,t),e.baselineArrow.direction){case"down":o.fill(jC);break;case"up":o.fill(YC)}o.restore()}if(e.baselineDescr){const t=e.baselineDescr;o.font=t.style.font,o.fillStyle=t.style.color,o.fillText(za(o,t.text,i-t.position.x),t.position.x,t.position.y)}if(e.key&&(o.font=e.key.style.font,o.fillStyle=e.key.style.color,$a(o,za(o,e.key.text,i-e.key.position.x),e.key.position,e.key.style.underline,e.key.style.strikethrough)),e.keyDescr){const t=e.keyDescr;o.font=e.keyDescr?.style.font??t.style.font,o.fillStyle=t.style.color,o.fillText(za(o,t.text,i-t.position.x),t.position.x,t.position.y)}if(e.progressBar){if(o.fillStyle=e.progressBar.style.backgroundColor,o.beginPath(),o.roundRect(e.progressBar.position.x,e.progressBar.position.y,e.progressBar.dimension.width,e.progressBar.dimension.height,e.progressBar.dimension.height/2),o.fill(),o.fillStyle=e.progressBar.style.color,o.beginPath(),e.progressBar.value>0)o.roundRect(e.progressBar.position.x,e.progressBar.position.y,e.progressBar.dimension.width*Math.max(0,Math.min(1,e.progressBar.value)),e.progressBar.dimension.height,e.progressBar.dimension.height/2);else{const t=e.progressBar.dimension.width*Math.max(0,Math.min(1,-e.progressBar.value));o.roundRect(e.progressBar.position.x+e.progressBar.dimension.width-t,e.progressBar.position.y,t,e.progressBar.dimension.height,e.progressBar.dimension.height/2)}o.fill()}}function JC(e,t){let o,s="";const i=t.getLocale();if(e.keyValue){const n={sheetId:e.keyValue.sheetId,col:e.keyValue.zone.left,row:e.keyValue.zone.top};o=t.getEvaluatedCell(n),s=function(e,t,o){return e?t?Vn(e,o):e.formattedValue??String(e.value??""):""}(o,e.humanize??!1,i)}let n;const r=e.baseline;if(r){const e={sheetId:r.sheetId,col:r.zone.left,row:r.zone.top};n=t.getEvaluatedCell(e)}const{background:a,fontColor:l}=t.getStyleOfSingleCellChart(e.background,e.keyValue),c=function(e,t,o,s,i){if(!e)return"";if("text"===o||t?.type!==Ts.number||e.type!==Ts.number)return s?Vn(e,i):e.formattedValue;let{value:n,format:r}=e;return"progress"===o?(n=t.value/n,r="0.0%"):(n=Math.abs(t.value-n),"percentage"===o&&0!==n&&(n/=e.value),"percentage"===o&&(r="0.0%"),r||(n=Math.round(100*n)/100)),s?Vn({value:n,format:r},i):bn(n,{format:r,locale:i})}(n,o,e.baselineMode,e.humanize??!1,i),h="progress"===e.baselineMode&&Is(c,i)?gi(c,i):0;return{title:{...e.title,text:e.title.text?Vo(e.title.text):""},keyValue:s,keyDescr:e.keyDescr?.text?Vo(e.keyDescr.text):"",baselineDisplay:c,baselineArrow:WC(n,o,e.baselineMode),baselineColor:GC(n,e.baselineMode,o,e.baselineColorUp,e.baselineColorDown),baselineDescr:"progress"!==e.baselineMode&&e.baselineDescr?.text?Vo(e.baselineDescr.text):"",fontColor:l,background:a,baselineStyle:{..."percentage"!==e.baselineMode&&"progress"!==e.baselineMode&&r?t.getCellComputedStyle({sheetId:r.sheetId,col:r.zone.left,row:r.zone.top}):void 0,fontSize:e.baselineDescr?.fontSize,align:e.baselineDescr?.align},baselineDescrStyle:{textColor:e.baselineDescr?.color,...e.baselineDescr},keyValueStyle:{...e.keyValue?t.getCellComputedStyle({sheetId:e.keyValue.sheetId,col:e.keyValue.zone.left,row:e.keyValue.zone.top}):void 0,fontSize:e.keyDescr?.fontSize,align:e.keyDescr?.align},keyValueDescrStyle:{textColor:e.keyDescr?.color,...e.keyDescr},progressBar:"progress"===e.baselineMode?{value:h,color:h>0?e.baselineColorUp:e.baselineColorDown}:void 0}}const QC=.05;function ey(e,t){const o=e||"";return t&&o?" "+o:o}function ty({width:e,height:t},o){return new oy({width:e,height:t},o).computeDesign()}class oy{runtime;context;width;height;constructor({width:e,height:t},o){this.runtime=o;const s=document.createElement("canvas");this.width=s.width=e,this.height=s.height=t,this.context=s.getContext("2d")}computeDesign(){const e={canvas:{width:this.width,height:this.height,backgroundColor:this.backgroundColor}},t=this.getTextStyles();let o=0;if(this.title){let s,i;switch(({height:o,width:i}=this.getFullTextDimensions(this.title,t.title.font)),this.runtime.title.align){case"center":s=(this.width-i)/2;break;case"right":s=this.width-i-j;break;default:s=j}e.title={text:this.title,style:t.title,position:{x:s,y:Y+o/2}}}const s=t.baselineArrow?.size??0;let{height:i,width:n}=this.getTextDimensions(this.baseline,t.baselineValue.font);this.baseline||(i=this.getTextDimensions(this.baselineDescr,t.baselineDescr.font).height);const r=this.getTextDimensions(this.baselineDescr,t.baselineDescr.font).width;let a;switch(this.runtime.baselineStyle?.align){case"right":a=this.width-j-r-n;break;case"left":a=j+s;break;default:a=(this.width-n-r+s)/2}if(this.baseline&&(e.baseline={text:this.baseline,style:t.baselineValue,position:{x:a,y:this.keyValue?this.height*(1-QC*(this.runtime.progressBar?1:2)):this.height-(this.height-o-i)/2-Y}},t.baselineArrow&&!this.runtime.progressBar&&(e.baselineArrow={direction:this.baselineArrow,style:t.baselineArrow,position:{x:e.baseline.position.x-s,y:e.baseline.position.y-(i+s)/2}})),e.baseline&&this.baselineDescr){const o={x:e.baseline.position.x+n,y:e.baseline.position.y};e.baselineDescr={text:this.baselineDescr,style:t.baselineDescr,position:o}}let l=0;this.runtime.progressBar&&(l=.05*this.height,e.progressBar={position:{x:2*j,y:.9*this.height-i-l},dimension:{height:l,width:this.width-4*j},value:this.runtime.progressBar.value,style:{color:this.runtime.progressBar.color,backgroundColor:this.secondaryFontColor}});const{width:c,height:h}=this.getFullTextDimensions(this.keyValue,t.keyValue.font),d=this.getTextDimensions(this.keyDescr,t.keyDescr.font).width;let u;switch(this.runtime.keyValueStyle?.align){case"right":u=this.width-j-d-c;break;case"left":u=j;break;default:u=(this.width-c-d)/2}if(this.keyValue&&(e.key={text:this.keyValue,style:t.keyValue,position:{x:Math.max(j,u),y:.4*this.height+Y/2+(o+h/2)/2}}),e.key&&this.keyDescr){const o={x:e.key.position.x+c,y:e.key.position.y};e.keyDescr={text:this.keyDescr,style:t.keyDescr,position:o}}return e}get title(){return this.runtime.title.text??""}get keyValue(){return this.runtime.keyValue}get keyDescr(){return ey(this.runtime.keyDescr,this.keyValue)}get baseline(){return this.runtime.baselineDisplay}get baselineDescr(){return ey(this.runtime.baselineDescr,this.baseline)}get baselineArrow(){return this.runtime.baselineArrow}get backgroundColor(){return this.runtime.background}get secondaryFontColor(){return tC(this.backgroundColor)}getTextDimensions(e,t){this.context.font=t;const o=this.context.measureText(e);return{width:o.width,height:o.actualBoundingBoxAscent+o.actualBoundingBoxDescent}}getFullTextDimensions(e,t){this.context.font=t;const o=this.context.measureText(e);return{width:o.width,height:o.fontBoundingBoxAscent+o.fontBoundingBoxDescent}}getTextStyles(){const e=this.runtime.keyValueStyle?.fontSize??32,t=Math.floor(.9*e);let o=this.runtime.baselineStyle?.fontSize??16;const s=Math.floor(.9*o);return this.runtime.progressBar&&(o/=1.5),{title:{font:Da(this.runtime.title.fontSize??14,this.runtime.title.bold,this.runtime.title.italic),color:this.runtime.title.color??this.secondaryFontColor},keyValue:{color:this.runtime.keyValueStyle?.textColor||this.runtime.fontColor,font:Da(e,this.runtime.keyValueStyle?.bold,this.runtime.keyValueStyle?.italic),strikethrough:this.runtime.keyValueStyle?.strikethrough,underline:this.runtime.keyValueStyle?.underline},keyDescr:{color:this.runtime.keyValueDescrStyle?.textColor||this.runtime.fontColor,font:Da(t,this.runtime.keyValueDescrStyle?.bold,this.runtime.keyValueDescrStyle?.italic),strikethrough:this.runtime.keyValueDescrStyle?.strikethrough,underline:this.runtime.keyValueDescrStyle?.underline},baselineValue:{font:Da(o,this.runtime.baselineStyle?.bold,this.runtime.baselineStyle?.italic),strikethrough:this.runtime.baselineStyle?.strikethrough,underline:this.runtime.baselineStyle?.underline,color:this.runtime.baselineColor||this.runtime.baselineStyle?.textColor||this.secondaryFontColor},baselineDescr:{font:Da(s,this.runtime.baselineDescrStyle?.bold,this.runtime.baselineDescrStyle?.italic),strikethrough:this.runtime.baselineDescrStyle?.strikethrough,underline:this.runtime.baselineDescrStyle?.underline,color:this.runtime.baselineDescrStyle?.textColor??this.secondaryFontColor},baselineArrow:"neutral"===this.baselineArrow||this.runtime.progressBar?void 0:{size:this.keyValue?.8*o:0,color:this.runtime.baselineColor||this.runtime.baselineStyle?.textColor||this.secondaryFontColor}}}}class sy extends t.Component{static template="o-spreadsheet-ScorecardChart";static props={figureUI:Object};canvas=t.useRef("chartContainer");get runtime(){return this.env.model.getters.getChartRuntime(this.props.figureUI.id)}get title(){const e=this.env.model.getters.getChartDefinition(this.props.figureUI.id).title.text??"";return Vo(e)}setup(){t.useEffect(this.createChart.bind(this),(()=>{const e=this.canvas.el.getBoundingClientRect();return[e.width,e.height,this.runtime,this.canvas.el,window.devicePixelRatio]}))}createChart(){const e=this.canvas.el;KC(ty(e.getBoundingClientRect(),this.runtime),e)}}const iy=/Mac/i,ny=["Shift","Control","Alt","Meta"];function ry(e,t){return!!e&&(!!t.target&&e.contains(t.target))}function ay(){const e=document.querySelector(".o-grid-overlay");if(e){const{top:t,left:o}=e.getBoundingClientRect();return{top:t,left:o}}throw new Error("Can't find spreadsheet position")}function ly(e){return e.el?cy(e.el):{x:0,y:0,width:0,height:0}}function cy(e){const t=e.getBoundingClientRect();return{x:t.x,y:t.y,width:t.width,height:t.height}}function*hy(e){if(yield e,e.hasChildNodes())for(const t of e.childNodes)yield*hy(t)}function dy(e){const{startElement:t,endElement:o,startSelectionOffset:s,endSelectionOffset:i}=function(e){const t=document.getSelection();return{startElement:t.anchorNode||e,startSelectionOffset:t.anchorOffset,endElement:t.focusNode||e,endSelectionOffset:t.focusOffset}}(e);return{start:uy(e,t,s),end:uy(e,o,i)}}function uy(e,t,o){let s=0;const i=hy(e);let n=i.next(),r=!0;for(;!n.done&&n.value!==t;)n.value.hasChildNodes()||n.value.textContent&&(s+=n.value.textContent.length),("P"===n.value.nodeName||"DIV"===n.value.nodeName&&n.value!==e)&&(r?r=!1:s++),n=i.next();if(n.value!==t)return 0;if(n.value.hasChildNodes()){const e=[...n.value.childNodes].slice(0,o);s+=e.reduce(((t,o,s)=>{if(null!==o.textContent){let i=o.textContent.length;return"P"===o.nodeName&&s!==e.length-1&&i++,t+i}return t}),0)}else s+=o;return"P"!==t.nodeName||r||""!==t.textContent||s++,s}const gy=/^[a-zA-Z]$/;function py(e,t="key"){let o="";ny.includes(e.key)||(fy(e)&&(o+="Ctrl+"),e.altKey&&(o+="Alt+"),e.shiftKey&&(o+="Shift+"));const s="key"===t?e.key:e.code;return o+=gy.test(s)?s.toUpperCase():s,o}function my(){return Boolean(iy.test(navigator.userAgent))}function fy(e){return my()||Cy()?e.metaKey:e.ctrlKey}function vy(e){return 1===e.button||fy(e)&&0===e.button}function by(e,t){const o=document.createElement("a");o.href=e,o.download=t,document.body.appendChild(o),o.click(),document.body.removeChild(o)}function Sy(){return/Firefox/i.test(navigator.userAgent)}function Cy(){return/(iPad|iPhone|iPod)/i.test(navigator.userAgent)||"MacIntel"===navigator.platform&&(navigator.maxTouchPoints||1)>1}function yy(){return/Android/i.test(navigator.userAgent)||Cy()||/(webOS|BlackBerry|Windows Phone)/i.test(navigator.userAgent)}function wy(e){return 8===(e=$t(e).replace("#","")).length?e.slice(6)+e.slice(0,6):e}const Iy=30,xy=10,Ey=20,Ry=12,Ty=80,Ay="#F3F2F1",Dy=6,_y=25;function Oy(e,t){const o=e.getBoundingClientRect(),s=window.devicePixelRatio||1;e.width=s*o.width,e.height=s*o.height;const i=e.getContext("2d");i.scale(s,s);const n=function(e,t,o){const s=t.maxValue,i=t.minValue,n=Vy(t,"animated"),r=function(e,t){const o=t?_y:0,s=e.height-Ey-o-xy,i=e.width-2*Iy;let n,r;i>2*s?(n=2*s,r=s):(n=i,r=i/2);const a=o+xy+(s-r)/2;return{x:Iy+(i-n)/2,y:a,width:n,height:r}}(e,t.title.text),a=r.width/6,l=n?(n-i.value)/(s.value-i.value):0,c={x:e.width/2,y:r.y+r.height-r.height/12};let h=Ty;r.height<300&&(h*=r.height/300);const d=r.width/2,u=t.gaugeValue?.label||"-";Oa(o,u,{fontSize:h},"px")>d&&(h=function(e,t,o,s=.25){let i=1;if(o(i)>e)return i;if(o(t)<e)return t;let n=(i+t)/2,r=o(n),a=0;for(;Math.abs(r-e)>s&&a<20;)r>=e?t=(i+t)/2:i=(i+t)/2,n=(i+t)/2,r=o(n),a++;return n}(d,h,(e=>Oa(o,u,{fontSize:e},"px"))));const g={x:r.x+a/2,y:r.y+r.height+Ry},p={x:r.x+r.width-a/2,y:r.y+r.height+Ry},m=tC(t.background),f=function(e,t,o,s){const i=e.maxValue,n=e.minValue,r={x:t.x+t.width/2,y:t.y+t.height},a={fontSize:Ry},l=[],c=[];for(const h of e.inflectionValues){const e=(h.value-n.value)/(i.value-n.value),d=Oa(s,h.label,a,"px"),u=Math.PI-Math.PI*e,g=ky(u,t.height+Dy,r.x,r.y,d+2,Ry),p=c.some((e=>Ny(e,g)))?Ry:0;c.push(g),l.push({rotation:u,label:h.label,fontSize:Ry,color:o,offset:p})}return l}(t,r,m,o);let v=0,b=0,S=0;t.title.text&&({width:b,height:S}=Ma(o,t.title.text,{fontSize:K,...t.title},"px"));switch(t.title.align){case"right":v=e.width-b-j;break;case"center":v=(e.width-b)/2;break;default:v=j}return{width:e.width,height:e.height,title:{label:t.title.text??"",fontSize:t.title.fontSize??K,textPosition:{x:v,y:X+S/2},color:t.title.color??m,bold:t.title.bold,italic:t.title.italic},backgroundColor:t.background,gauge:{rect:r,arcWidth:a,percentage:Ze(l,0,1),color:Fy(t)},inflectionValues:f,gaugeValue:{label:u,textPosition:c,fontSize:h,color:m},minLabel:{label:t.minValue.label,textPosition:g,fontSize:Ry,color:m},maxLabel:{label:t.maxValue.label,textPosition:p,fontSize:Ry,color:m}}}(o,t,i);!function(e,t){e.save(),e.fillStyle=t.backgroundColor,e.fillRect(0,0,t.width,t.height),e.restore()}(i,n),function(e,t){e.save();const o=t.gauge,s=o.rect.x+o.rect.width/2,i=o.rect.y+o.rect.height,n=o.rect.height-o.arcWidth/2;if(n<0)return;const r=1===o.percentage?0:Math.PI*(1+o.percentage);e.strokeStyle=Ay,e.beginPath(),e.lineWidth=o.arcWidth,e.arc(s,i,n,r,0),e.stroke(),e.strokeStyle=o.color,e.beginPath(),e.arc(s,i,n,Math.PI,r),e.stroke(),e.restore()}(i,n),function(e,t){const{x:o,y:s,width:i,height:n}=t.gauge.rect;for(const r of t.inflectionValues){e.save(),e.translate(o+i/2-.5,s+n-.5),e.rotate(Math.PI/2-r.rotation),e.lineWidth=2,e.strokeStyle=tC(t.backgroundColor)+"aa",e.beginPath(),e.moveTo(0,-(n-t.gauge.arcWidth)),e.lineTo(0,-n-3),e.stroke(),e.textAlign="center",e.font=`${r.fontSize}px ${fe}`,e.fillStyle=r.color;const a=-n-Dy-r.offset;e.fillText(r.label,0,a),e.restore()}}(i,n),function(e,t){for(const o of[t.minLabel,t.maxLabel,t.gaugeValue])e.save(),e.textAlign="center",e.fillStyle=o.color,e.font=`${o.fontSize}px ${fe}`,e.fillText(o.label,o.textPosition.x,o.textPosition.y),e.restore()}(i,n),function(e,t){e.save();const o=t.title;e.font=Da(o.fontSize,o.bold,o.italic),e.textBaseline="middle",e.fillStyle=o.color,e.fillText(o.label,o.textPosition.x,o.textPosition.y),e.restore()}(i,n)}function Fy(e){const t=Vy(e,"final");if(void 0===t)return Ay;for(let o=0;o<e.inflectionValues.length;o++){const s=e.inflectionValues[o];if("<"===s.operator&&t<s.value)return e.colors[o];if("<="===s.operator&&t<=s.value)return e.colors[o]}return e.colors.at(-1)}function Py(e){return[{start:e.topLeft,end:e.topRight},{start:e.topRight,end:e.bottomRight},{start:e.bottomRight,end:e.bottomLeft},{start:e.bottomLeft,end:e.topLeft}]}function My(e,t){const o=e.start,s=e.end,i=t.start,n=t.end;function r(e,t,o){return(o.y-e.y)*(t.x-e.x)>(t.y-e.y)*(o.x-e.x)}return r(o,i,n)!==r(s,i,n)&&r(o,s,i)!==r(o,s,n)}function Ny(e,t){const o=Py(e),s=Py(t);for(const e of o)for(const t of s)if(My(e,t))return!0;return!1}function ky(e,t,o,s,i,n){const r=Math.cos(e),a=Math.sin(e),l=r*t,c=a*t,h=a*(i/2),d=r*(i/2),u=r*(t+n),g=a*(t+n);return{bottomLeft:{x:l-h+o,y:s-(c+d)},bottomRight:{x:l+h+o,y:s-(c-d)},topRight:{x:u+h+o,y:s-(g-d)},topLeft:{x:u-h+o,y:s-(g+d)}}}function Vy(e,t){return"animated"===t&&void 0!==e.animationValue?e.animationValue:e.gaugeValue?.value}const Ly={responsive:!0,maintainAspectRatio:!1,elements:{line:{fill:!1},point:{hitRadius:15}},animation:!1,events:["mousemove","mouseout","click","touchstart","touchmove","mouseup"]};function Hy(e,t,o){const s=document.createElement("div");s.style.width=`${t.width}px`,s.style.height=`${t.height}px`;const i=document.createElement("canvas");let n;if(s.append(i),i.setAttribute("width",t.width.toString()),i.setAttribute("height",t.height.toString()),document.body.append(s),"chartJsConfig"in e){const t=ze(e.chartJsConfig);t.plugins=[By];const o=new window.Chart(i,t);n=o.toBase64Image(),o.destroy()}else if("scorecard"===o){KC(ty(t,e),i),n=i.toDataURL()}else"gauge"===o&&(Oy(i,e),n=i.toDataURL());return s.remove(),n}async function Uy(e,t,o){const s=document.createElement("div");s.style.width=`${t.width}px`,s.style.height=`${t.height}px`,s.style.position="fixed",s.style.opacity="0";const i=document.createElement("canvas");s.append(i),i.setAttribute("width",t.width.toString()),i.setAttribute("height",t.height.toString()),document.body.append(s);let n=null;if("chartJsConfig"in e){const t=ze(e.chartJsConfig);t.plugins=[By];const o=new window.Chart(i,t);n=await new Promise((e=>i.toBlob(e,"image/png"))),o.destroy()}else if("scorecard"===o){KC(ty(t,e),i),n=await new Promise((e=>i.toBlob(e,"image/png")))}else"gauge"===o&&(Oy(i,e),n=await new Promise((e=>i.toBlob(e,"image/png"))));return s.remove(),n?new File([n],"chart.png",{type:"image/png"}):void 0}const By={id:"customCanvasBackgroundColor",beforeDraw:e=>{const{ctx:t}=e;t.save(),t.globalCompositeOperation="destination-over",t.fillStyle="#ffffff",t.fillRect(0,0,e.width,e.height),t.restore()}},zy={Errors:{InvalidRange:Vo("The range is invalid"),FirstArgMissing:Vo("The argument is missing. Please provide a value"),SecondArgMissing:Vo("The second argument is missing. Please provide a value"),MinNaN:Vo("The minpoint must be a number"),MidNaN:Vo("The midpoint must be a number"),MaxNaN:Vo("The maxpoint must be a number"),ValueUpperInflectionNaN:Vo("The first value must be a number"),ValueLowerInflectionNaN:Vo("The second value must be a number"),MinBiggerThanMax:Vo("Minimum must be smaller then Maximum"),MinBiggerThanMid:Vo("Minimum must be smaller then Midpoint"),MidBiggerThanMax:Vo("Midpoint must be smaller then Maximum"),LowerBiggerThanUpper:Vo("Lower inflection point must be smaller than upper inflection point"),MinInvalidFormula:Vo("Invalid Minpoint formula"),MaxInvalidFormula:Vo("Invalid Maxpoint formula"),MidInvalidFormula:Vo("Invalid Midpoint formula"),ValueUpperInvalidFormula:Vo("Invalid upper inflection point formula"),ValueLowerInvalidFormula:Vo("Invalid lower inflection point formula"),EmptyRange:Vo("A range needs to be defined"),ValueCellIsInvalidFormula:Vo("At least one of the provided values is an invalid formula"),Unexpected:Vo("The rule is invalid for an unknown reason")},ColorScale:Vo("Color scale"),IconSet:Vo("Icon set"),DataBar:Vo("Data bar")},$y={Series:Vo("Series"),BackgroundColor:Vo("Background color"),StackedBarChart:Vo("Stacked bar chart"),StackedLineChart:Vo("Stacked line chart"),StackedAreaChart:Vo("Stacked area chart"),StackedColumnChart:Vo("Stacked column chart"),CumulativeData:Vo("Cumulative data"),TreatLabelsAsText:Vo("Treat labels as text"),AggregatedChart:Vo("Aggregate"),Errors:{Unexpected:Vo("The chart definition is invalid for an unknown reason"),InvalidDataSet:Vo("The dataset is invalid"),InvalidLabelRange:Vo("Labels are invalid"),InvalidScorecardKeyValue:Vo("The key value is invalid"),InvalidScorecardBaseline:Vo("The baseline value is invalid"),InvalidGaugeDataRange:Vo("The data range is invalid"),EmptyGaugeRangeMin:Vo("A minimum range limit value is needed"),GaugeRangeMinNaN:Vo("The minimum range limit value must be a number"),EmptyGaugeRangeMax:Vo("A maximum range limit value is needed"),GaugeRangeMaxNaN:Vo("The maximum range limit value must be a number"),GaugeLowerInflectionPointNaN:Vo("The lower inflection point value must be a number"),GaugeUpperInflectionPointNaN:Vo("The upper inflection point value must be a number")},GeoChart:{ColorScales:{blues:Vo("Blues"),cividis:Vo("Cividis"),greens:Vo("Greens"),greys:Vo("Greys"),oranges:Vo("Oranges"),purples:Vo("Purples"),rainbow:Vo("Rainbow"),reds:Vo("Reds"),viridis:Vo("Viridis")}}},Gy={Custom:Vo("Custom")},Wy=Vo("Merged cells are preventing this operation. Unmerge those cells and try again."),qy={Errors:{Unexpected:Vo("Cannot split the selection for an unknown reason"),NoSplitSeparatorInSelection:Vo("There is no match for the selected separator in the selection"),MoreThanOneColumnSelected:Vo("Only a selection from a single column can be split"),SplitWillOverwriteContent:Vo("Splitting will overwrite existing content")}},Zy={Errors:{Unexpected:Vo("Cannot remove duplicates for an unknown reason"),MoreThanOneRangeSelected:Vo("Please select only one range of cells"),EmptyTarget:Vo("Please select a range of cells containing values."),NoColumnsProvided:Vo("Please select at latest one column to analyze."),WillRemoveExistingMerge:Vo("This operation is not possible due to a merge. Please remove the merges first than try again.")}},jy={DateIs:{today:Vo("today"),yesterday:Vo("yesterday"),tomorrow:Vo("tomorrow"),lastWeek:Vo("in the past week"),lastMonth:Vo("in the past month"),lastYear:Vo("in the past year")},DateIsBefore:{today:Vo("today"),yesterday:Vo("yesterday"),tomorrow:Vo("tomorrow"),lastWeek:Vo("one week ago"),lastMonth:Vo("one month ago"),lastYear:Vo("one year ago")},CriterionError:{notEmptyValue:Vo("The value must not be empty"),numberValue:Vo("The value must be a number"),dateValue:Vo("The value must be a date"),validRange:Vo("The value must be a valid range"),validFormula:Vo("The formula must be valid")},Errors:{InvalidRange:Vo("The range is invalid."),InvalidDataValidationCriterionValue:Vo("One or more of the provided criteria values are invalid. Please review and correct them."),InvalidNumberOfCriterionValues:Vo("One or more of the provided criteria values are missing."),Unexpected:Vo("The rule is invalid for an unknown reason.")}},Yy={Errors:{Unexpected:Vo("The table zone is invalid for an unknown reason"),TableOverlap:Vo("You cannot create overlapping tables."),NonContinuousTargets:Vo("A table can only be created on a continuous selection."),InvalidRange:Vo("The range is invalid"),TargetOutOfSheet:Vo("The range is out of the sheet")},Checkboxes:{hasFilters:Vo("Filter button"),headerRow:Vo("Header row(s)"),bandedRows:Vo("Banded rows"),firstColumn:Vo("First column"),lastColumn:Vo("Last column"),bandedColumns:Vo("Banded columns"),automaticAutofill:Vo("Automatically autofill formulas"),totalRow:Vo("Total row"),isDynamic:Vo("Auto-adjust to formula result")},Tooltips:{filterWithoutHeader:Vo("Cannot have filters without a header row"),isDynamic:Vo("For tables based on array formulas only")}},Xy={labels:{no_calculations:Vo("No calculations"),"%_of_grand_total":Vo("% of grand total"),"%_of_col_total":Vo("% of column total"),"%_of_row_total":Vo("% of row total"),"%_of":Vo("% of"),"%_of_parent_row_total":Vo("% of parent row total"),"%_of_parent_col_total":Vo("% of parent column total"),"%_of_parent_total":Vo("% of parent total"),difference_from:Vo("Difference from"),"%_difference_from":Vo("% difference from"),running_total:Vo("Running total"),"%_running_total":Vo("% Running total"),rank_asc:Vo("Rank smallest to largest"),rank_desc:Vo("Rank largest to smallest"),index:Vo("Index")},descriptions:{"%_of_grand_total":()=>Vo("Displayed as % of grand total"),"%_of_col_total":()=>Vo("Displayed as % of column total"),"%_of_row_total":()=>Vo("Displayed as % of row total"),"%_of":e=>Vo('Displayed as % of "%s"',e),"%_of_parent_row_total":e=>Vo('Displayed as % of parent row total of "%s"',e),"%_of_parent_col_total":()=>Vo("Displayed as % of parent column total"),"%_of_parent_total":e=>Vo('Displayed as % of parent "%s" total',e),difference_from:e=>Vo('Displayed as difference from "%s"',e),"%_difference_from":e=>Vo('Displayed as % difference from "%s"',e),running_total:e=>Vo('Displayed as running total based on "%s"',e),"%_running_total":e=>Vo('Displayed as % running total based on "%s"',e),rank_asc:e=>Vo('Displayed as rank from smallest to largest based on "%s"',e),rank_desc:e=>Vo('Displayed as rank largest to smallest based on "%s"',e),index:()=>Vo("Displayed as index")},documentation:{no_calculations:Vo("Displays the value that is entered in the field."),"%_of_grand_total":Vo("Displays values as a percentage of the grand total of all the values or data points in the report."),"%_of_col_total":Vo("Displays all the values in each column or series as a percentage of the total for the column or series."),"%_of_row_total":Vo("Displays the value in each row or category as a percentage of the total for the row or category."),"%_of":Vo("Displays values as a percentage of the value of the Base item in the Base field."),"%_of_parent_row_total":Vo("Calculates values as follows:\n(value for the item) / (value for the parent item on rows)"),"%_of_parent_col_total":Vo("Calculates values as follows:\n(value for the item) / (value for the parent item on columns)"),"%_of_parent_total":Vo("Calculates values as follows:\n(value for the item) / (value for the parent item of the selected Base field)"),difference_from:Vo("Displays values as the difference from the value of the Base item in the Base field."),"%_difference_from":Vo("Displays values as the percentage difference from the value of the Base item in the Base field."),running_total:Vo("Displays the value for successive items in the Base field as a running total."),"%_running_total":Vo("Calculates the value as a percentage for successive items in the Base field that are displayed as a running total."),rank_asc:Vo("Displays the rank of selected values in a specific field, listing the smallest item in the field as 1, and each larger value with a higher rank value."),rank_desc:Vo("Displays the rank of selected values in a specific field, listing the largest item in the field as 1, and each smaller value with a higher rank value."),index:Vo("Calculates values as follows:\n((value in cell) x (Grand Total of Grand Totals)) / ((Grand Row Total) x (Grand Column Total))")}},Ky={second:1e3,minute:6e4,hour:36e5,day:864e5,month:2592e6,year:31536e6},Jy={inSeconds:function(e){return Math.floor(e/Ky.second)},inMinutes:function(e){return Math.floor(e/Ky.minute)},inHours:function(e){return Math.floor(e/Ky.hour)},inDays:function(e){return Math.floor(e/Ky.day)},inMonths:function(e){return Math.floor(e/Ky.month)},inYears:function(e){return Math.floor(e/Ky.year)}},Qy=/^((d|dd|m|mm|yyyy|yy|hh|h|ss|a)(-|:|\s|\/))*(d|dd|m|mm|yyyy|yy|hh|h|ss|a)$/i;function ew(e,t,o){const s=function(e){const t=e.indexOf("h");e=t>=0?e.slice(0,t).replace(/m/g,"M")+e.slice(t):e.replace(/m/g,"M");e.includes("a")||(e=e.replace(/h/g,"H"));return e}(t),i=function(e,t,o){const s=e.map((e=>ls(e,o)?.jsDate));if(s.some((e=>void 0===e))||e.length<2)return;const i=s.map((e=>e.getTime())),n=Ot(i)-Ft(i),r=function(e){if(e.includes("s"))return"second";if(e.includes("m"))return"minute";if(e.includes("h")||e.includes("H"))return"hour";if(e.includes("d"))return"day";if(e.includes("M"))return"month";return"year"}(t);if(Ky.second>=Ky[r]&&Jy.inSeconds(n)<180)return"second";if(Ky.minute>=Ky[r]&&Jy.inMinutes(n)<180)return"minute";if(Ky.hour>=Ky[r]&&Jy.inHours(n)<96)return"hour";if(Ky.day>=Ky[r]&&Jy.inDays(n)<90)return"day";if(Ky.month>=Ky[r]&&Jy.inMonths(n)<36)return"month";return"year"}(e,s,o),n={};return i&&(n[i]=s),{parser:s,displayFormats:n,unit:i??!1}}function tw(e,t,o,s){let i=Cw(s,t,o).formattedValues,n=ww(s,t);iC(o,t[0],e.dataSetsHaveTitle||!1)&&i.shift(),({labels:i,dataSetsValues:n}=vw(i,n)),e.aggregated&&({labels:i,dataSetsValues:n}=bw(i,n));const r=yw(s,t,"left"),a=yw(s,t,"right"),l=e.horizontal?{x:r||a}:{y:r,y1:a},c=[];for(const t in n){const{data:o}=n[t],s=e.dataSets?.[t].trend;if(!s?.display||e.horizontal){c.push(void 0);continue}const i=cw(s,o);c.push(i)}return{dataSetsValues:n,trendDataSetsValues:c,axisFormats:l,labels:i,locale:s.getLocale(),topPadding:xw(e,s)}}function ow(e,t,o,s){const i=tw(e,t.slice(0,2),o,s),n=i.dataSetsValues.filter((e=>!e.hidden)),r=[];if(n[0]){const e=n[0].data.map((e=>e>0?e:0));r.push({...n[0],data:e})}if(n[1]){const e=n[1].data.map((e=>e>0?-e:0));r.push({...n[1],data:e})}return{...i,dataSetsValues:r}}function sw(e,t,o,s){const i=function(e,t,o,s){if(function(e,t,o,s){return!e.labelsAsText&&gw(e,t,o,s)}(e,t,o,s)&&function(){if(!window.Chart)return!1;const e="luxon"===new window.Chart._adapters._date({})._id;e||mw||(mw=!0,console.warn("'chartjs-adapter-luxon' time adapter is not installed. Time scale axes are disabled."));return e}())return"time";if(function(e,t,o,s){return!e.labelsAsText&&pw(e,t,o,s)}(e,t,o,s))return"linear";return"category"}(e,t,o,s),n=Cw(s,t,o);let r="linear"===i?n.values:n.formattedValues,a=ww(s,t);const l=iC(o,t[0],e.dataSetsHaveTitle||!1);l&&r.shift(),({labels:r,dataSetsValues:a}=vw(r,a)),"time"===i&&({labels:r,dataSetsValues:a}=function(e,t){if(0===e.length||e.every((e=>!e)))return{labels:e,dataSetsValues:t};const o=[...e],s=ze(t);for(let e=0;e<o.length;e++)if(!o[e]){o[e]=gt(o,e);for(const t of s)t.data[e]=void 0}return{labels:o,dataSetsValues:s}}(r,a)),e.aggregated&&({labels:r,dataSetsValues:a}=bw(r,a)),e.cumulative&&(a=Iw(a,"asc"));const c={y:yw(s,t,"left"),y1:yw(s,t,"right"),x:Sw(s,o,l)},h=[];for(const t in a){const o=e.dataSets?.[t].trend;if(!o?.display){h.push(void 0);continue}const{data:n}=a[t];h.push(hw(o,n,r,i,s.getLocale()))}return{dataSetsValues:a,axisFormats:c,labels:r,locale:s.getLocale(),trendDataSetsValues:h,axisType:i,topPadding:xw(e,s)}}function iw(e,t,o,s){let i=Cw(s,t,o).formattedValues,n=ww(s,t);iC(o,t[0],e.dataSetsHaveTitle||!1)&&i.shift(),({labels:i,dataSetsValues:n}=vw(i,n)),e.aggregated&&({labels:i,dataSetsValues:n}=bw(i,n)),({dataSetsValues:n,labels:i}=function(e,t){const o=Math.max(e.length,...t.map((e=>e.data?.length||0))),s=je(0,o).filter((e=>t.some((t=>"number"==typeof t.data[e]&&t.data[e]>0))));return{labels:s.map((t=>e[t]||"")),dataSetsValues:t.map((e=>({...e,data:s.map((t=>"number"==typeof e.data[t]&&e.data[t]>0?e.data[t]:null))})))}}(i,n));return{dataSetsValues:n,axisFormats:{y:yw(s,t,"left")},labels:i,locale:s.getLocale(),topPadding:xw(e,s)}}function nw(e,t,o,s){let i=Cw(s,t,o).formattedValues,n=ww(s,t);iC(o,t[0],e.dataSetsHaveTitle||!1)&&i.shift(),({labels:i,dataSetsValues:n}=vw(i,n)),e.aggregated&&({labels:i,dataSetsValues:n}=bw(i,n));return{dataSetsValues:n,axisFormats:{r:yw(s,t,"left")||yw(s,t,"right")},labels:i,locale:s.getLocale()}}function rw(e,t,o,s){const i=t.slice(0,1);let n=Cw(s,i,o).formattedValues;iC(o,i[0],e.dataSetsHaveTitle||!1)&&n.shift();let r=ww(s,i);({labels:n,dataSetsValues:r}=bw(n,r));return{dataSetsValues:r,axisFormats:{y:yw(s,i,"left")||yw(s,i,"right")},labels:n,locale:s.getLocale(),availableRegions:s.getGeoChartAvailableRegions(),geoFeatureNameToId:s.geoFeatureNameToId,getGeoJsonFeatures:s.getGeoJsonFeatures}}function aw(e,t,o,s){let i=Cw(s,t,o).formattedValues,n=ww(s,t);iC(o,t[0],e.dataSetsHaveTitle||!1)&&i.shift(),({labels:i,dataSetsValues:n}=vw(i,n)),e.aggregated&&({labels:i,dataSetsValues:n}=bw(i,n)),e.cumulative&&(n=Iw(n,"desc"));return{dataSetsValues:n,axisFormats:{x:yw(s,t,"left")||yw(s,t,"right")},labels:i,locale:s.getLocale()}}function lw(e,t,o,s){let i=Cw(s,t,o).values,n=function(e,t){t=t.filter((t=>!e.isColHidden(t.dataRange.sheetId,t.dataRange.zone.left)));const o=t.map((()=>({data:[],label:""}))),s=t.map((t=>fw(e,t)));if(!s.length)return o;const i=Math.min(...s.map((e=>e.length)));let n=[];const r=t.length-1;for(let e=0;e<i;e++)for(let t=0;t<s.length;t++){let i=s[t][e];null==i&&t!==r&&(i=n[t]),i!==n[t]&&(n=n.slice(0,t),n[t]=i),o[t].data.push(i??null)}return o.filter((e=>e.data.some((e=>null!==e))))}(s,t);const r=iC(o,t[0],e.dataSetsHaveTitle||!1);return r&&i.shift(),({labels:i,dataSetsValues:n}=function(e,t){const o=[],s=[];for(let t=0;t<e.length;t++)Number(e[t])<=0?s.push(t):Number(e[t])>0&&o.push(t);const i=o.length?o:s;return{labels:i.map((t=>e[t])),dataSetsValues:t.map((e=>({...e,data:i.map((t=>e.data[t]))})))}}(i,n)),({labels:i,dataSetsValues:n}=function(e,t){const o=Math.max(e.length,...t.map((e=>e.data?.length||0))),s=e=>null==e||""===e,i=je(0,o).filter((o=>{const i=t.map((e=>e.data?.[o]));if(s(i[0]))return!1;let n=!1;for(const e of i)if(n||=s(e),n&&!s(e))return!1;return e[o]&&!isNaN(Number(e[o]))}));return{labels:i.map((t=>e[t])),dataSetsValues:t.map((e=>({...e,data:i.map((t=>e.data[t]))})))}}(i,n)),{dataSetsValues:n,axisFormats:{y:Sw(s,o,r)},labels:i,locale:s.getLocale()}}function cw(e,t){const o=[],s=[],i=[];for(let e=0;e<t.length;e++)"number"==typeof t[e]&&(o.push(t[e]),s.push(e+1)),i.push(e+1);const n=dw(e,o,s,je(.5,i.length+.55,.2));return n.length?n:void 0}function hw(e,t,o,s,i){const n=[],r=[],a=[],l=t.length;if(l<2)return;switch(s){case"category":for(let e=0;e<l;e++)"number"==typeof t[e]&&(n.push(t[e]),r.push(e+1)),a.push(e+1);break;case"linear":for(let e=0;e<t.length;e++){const s=Number(o[e]);isNaN(s)||("number"==typeof t[e]&&(n.push(t[e]),r.push(s)),a.push(s))}break;case"time":for(let e=0;e<t.length;e++){const s=gi({value:o[e]},i);null!==t[e]&&(n.push(t[e]),r.push(s)),a.push(s)}}const c=Math.min(...a),h=Math.max(...a);if(h===c)return;const d=(h-c)/(5*a.length),u=dw(e,n,r,je(c,h+d/2,d));return u.length?u:void 0}function dw(e,t,o,s){if(t.length<2||o.length<2||0===s.length)return[];const{normalizedLabels:i,normalizedNewLabels:n}=function(e,t,o){let s=[],i=[];if("logarithmic"===o.type){const o=Math.max(...e.map(Math.abs));s=e.map((e=>e/o)),i=t.map((e=>e/o))}else{const o=Math.max(...e),n=Math.min(...e),r=o-n;s=e.map((e=>(e-o)/r)),i=t.map((e=>(e-o)/r))}return{normalizedLabels:s,normalizedNewLabels:i}}(o,s,e);try{switch(e.type){case"polynomial":{const o=e.order;if(!o)return s.map((e=>({x:e,y:NaN})));if(1===o)return hc([t],[i],[n],!0)[0].map(((e,t)=>({x:s[t],y:e})));const r=nc(t,i,o,!0).flat();return n.map(((e,t)=>({x:s[t],y:ac(r,e,o)})))}case"exponential":{const e=[],o=[];for(let s=0;s<t.length;s++)t[s]>0&&(e.push(Math.log(t[s])),o.push(i[s]));return o.length?lc(hc([e],[o],[n],!0))[0].map(((e,t)=>({x:s[t],y:e}))):s.map((e=>({x:e,y:NaN})))}case"logarithmic":return hc([t],cc([i]),cc([n]),!0)[0].map(((e,t)=>({x:s[t],y:e})));case"trailingMovingAverage":return function(e,t,o=Ae){const s=[];for(let e=0;e<o-1;e++)s.push({x:t[e],y:NaN});for(let i=0;i<=e.length-o;i++){let n=0;for(let t=i;t<i+o;t++)n+=e[t];s.push({x:t[i+o-1],y:n/o})}return s}(t,o,e.window);default:return s.map((e=>({x:e,y:NaN})))}}catch(e){return s.map((e=>({x:e,y:NaN})))}}function uw(e,t,o,s){return gw(e,t,o,s)||pw(e,t,o,s)}function gw(e,t,o,s){if(!o||!pw(e,t,o,s))return!1;const i=Sw(s,o,iC(o,t[0],e.dataSetsHaveTitle||!1));return Boolean(i&&Qy.test(i))}function pw(e,t,o,s){if(!o)return!1;const i=s.getRangeValues(o);return iC(o,t[0],e.dataSetsHaveTitle||!1)&&i.shift(),!i.some((e=>isNaN(Number(e))&&e))&&!i.every((e=>!e))}let mw=!1;function fw(e,t){if(t.dataRange){const o=t.labelCell?[t.labelCell.zone]:[],s=er([t.dataRange.zone],o)[0];if(void 0===s)return[];const i=e.getRangeFromZone(t.dataRange.sheetId,s);return e.getRangeValues(i).map((e=>""===e?void 0:e))}return[]}function vw(e,t){const o=je(0,Math.max(e.length,...t.map((e=>e.data?.length||0)))).filter((o=>{const s=e[o],i=t.map((e=>e.data?.[o]));return s||i.some((e=>"number"==typeof e))}));return{labels:o.map((t=>e[t]||"")),dataSetsValues:t.map((e=>({...e,data:o.map((t=>"number"==typeof e.data[t]?e.data[t]:null))})))}}function bw(e,t){const o=new Set(e),s={};o.forEach((e=>{s[e]=new Array(t.length).fill(0)}));for(const o of je(0,e.length)){const n=e[o];for(const e of je(0,t.length))s[n][e]+="number"==typeof(i=t[e].data[o])?i:0}var i;return{labels:Array.from(o),dataSetsValues:t.map(((e,t)=>({...e,data:Array.from(o).map((e=>s[e][t]))})))}}function Sw(e,t,o){if(!t)return;const{sheetId:s,zone:i}=t,n=Er(i).map((t=>e.getEvaluatedCell({sheetId:s,...t}).format));return o&&n.shift(),n.find((e=>void 0!==e))}function Cw(e,t,o){let s={values:[],formattedValues:[]};if(o){const{left:i}=o.zone;if(o.invalidXc||o.invalidSheetName||e.isColHidden(o.sheetId,i)){if(t[0]){s={formattedValues:je(0,fw(e,t[0]).length).map((e=>e.toString())),values:s.formattedValues}}}else s={formattedValues:e.getRangeFormattedValues(o),values:e.getRangeValues(o).map((e=>String(e??"")))}}else if(1===t.length){const o=fw(e,t[0]).length;for(let e=0;e<o;e++)s.formattedValues.push(""),s.values.push("")}else if(t[0]){s={formattedValues:je(0,fw(e,t[0]).length).map((e=>e.toString())),values:s.formattedValues}}return s}function yw(e,t,o){const s=t.filter((e=>"right"===o==!!e.rightYAxis));for(const t of s){const o=e.getRangeFormats(t.dataRange).find((e=>void 0!==e&&!Rn(e)));if(o)return o}}function ww(e,t){const o=[];for(const[s,i]of Object.entries(t)){let t,n=e.isColHidden(i.dataRange.sheetId,i.dataRange.zone.left);if(i.labelCell){const o=i.labelCell,n=o?e.getEvaluatedCell({sheetId:o.sheetId,col:o.zone.left,row:o.zone.top}):void 0;t=n&&o?n.formattedValue:t=`${$y.Series} ${parseInt(s)+1}`}else t=`${$y.Series} ${parseInt(s)+1}`;const r=i.dataRange?fw(e,i):[];r.every((e=>"string"==typeof e&&!hi(e)))&&r.some((e=>""!==e))?r.fill(1):r.every((e=>null==e||!Is(e.toString(),$s)))&&(n=!0),o.push({data:r,label:t,hidden:n})}return o}function Iw(e,t){return e.map((e=>{const o=[];let s=0;const i="asc"===t?Object.keys(e.data):Object.keys(e.data).reverse();for(const t of i)isNaN(parseFloat(e.data[t]))?o[t]=e.data[t]:(s+=parseFloat(e.data[t]),o[t]=s);return{...e,data:o}}))}function xw(e,t){const{title:o,legendPosition:s}=e,i=o&&o.text||"top"===s;return t.isDashboard()&&!i?30:0}function Ew(e,t){return{padding:{left:j,right:j,top:Math.max(X,t.topPadding||0),bottom:Y}}}function Rw(e,t){return{display:"none"!==e.legendPosition,position:"none"!==e.legendPosition?e.legendPosition:void 0}}function Tw(e,t){return{...Nw,...Rw(e),...kw(eC(e.background),{pointStyle:"rect",lineWidth:3})}}function Aw(e,t){const o=e.fillArea,s=o?"rect":"line",i=o?2:3;return{...Nw,...Rw(e),...kw(eC(e.background),{pointStyle:s,lineWidth:i})}}function Dw(e,t){const{dataSetsValues:o}=t,s=Math.max(0,...o.map((e=>e?.data?.length??0))),i=cC(new po(s),o),n=eC(e.background);return{...Rw(e),labels:{usePointStyle:!0,generateLabels:e=>(e.data.labels?.map(((e,t)=>({text:hC(String(e)),strokeStyle:i[t],fillStyle:i[t],pointStyle:"rect",lineWidth:2,fontColor:n})))||[]).filter((e=>e.text)),filter:(e,t)=>!("datasetIndex"in e)||!t.datasets[e.datasetIndex].hidden}}}function _w(e,t){return{...Nw,...Rw(e),...kw(eC(e.background),{pointStyle:"circle",strokeStyle:e.background||"#ffffff",lineWidth:8})}}function Ow(e,t){return{...Nw,...Rw(e),...kw(eC(e.background),{lineWidth:3})}}function Fw(e,t){const o=eC(e.background),s=e.negativeValuesColor||A,i=e.positiveValuesColor||T,n=e.subTotalValuesColor||D;return{...Rw(e),labels:{usePointStyle:!0,generateLabels:()=>{const t=[{text:Vo("Positive values"),fontColor:o,fillStyle:i,strokeStyle:i,pointStyle:"rect"},{text:Vo("Negative values"),fontColor:o,fillStyle:s,strokeStyle:s,pointStyle:"rect"}];return(e.showSubTotals||e.firstValueAsSubtotal)&&t.push({text:Vo("Subtotals"),fontColor:o,fillStyle:n,strokeStyle:n,pointStyle:"rect"}),t},filter:(e,t)=>!("datasetIndex"in e)||!t.datasets[e.datasetIndex].hidden},onClick:()=>{}}}function Pw(e,t){const o=e.fillArea??!1,s=o?"rect":"line",i=o?2:3;return{...Nw,...Rw(e),...kw(eC(e.background),{pointStyle:s,lineWidth:i})}}function Mw(e,t){const o=eC(e.background);return{...Rw(e),labels:{usePointStyle:!0,generateLabels:e=>{const t=e.data.datasets.at(-1);if(!t)return[];return t.groupColors.map((({color:e,label:t})=>({text:hC(t),fontColor:o,fillStyle:e,strokeStyle:e,pointStyle:"rect"})))}}}}const Nw={onHover:e=>{const t=e.native?.target;t&&(t.style.cursor="pointer")},onLeave:e=>{const t=e.native?.target;t&&(t.style.cursor="default")},onClick:(e,t,o)=>{if("click"!==e.type)return;const s=t.datasetIndex;o.legendItems&&void 0!==s&&(o.chart.isDatasetVisible(s)?o.chart.hide(s):o.chart.show(s),e.native.preventDefault(),e.native.stopPropagation())}};function kw(e,t){return{labels:{color:e,usePointStyle:!0,generateLabels:o=>o.data.datasets.map(((s,i)=>dC(s.xAxisID)?{text:hC(s.label),fontColor:e,strokeStyle:s.borderColor,hidden:!o.isDatasetVisible(i),pointStyle:"line",datasetIndex:i,lineWidth:3}:{text:hC(s.label),fontColor:e,strokeStyle:s.borderColor,fillStyle:s.backgroundColor,hidden:!o.isDatasetVisible(i),pointStyle:"line"===s.type?"line":"rect",datasetIndex:i,...t})).filter((e=>e.text)),filter:(e,t)=>!("datasetIndex"in e)||!t.datasets[e.datasetIndex].hidden}}}function Vw(e,t){let o={};const{trendDataSetsValues:s,locale:i,axisFormats:n}=t,r={stacked:e.stacked,locale:i};if(e.horizontal)o.x=Zw(e,"bottom","values",{...r,format:n?.x}),o.y=Zw(e,"left","labels",r);else{o.x=Zw(e,"bottom","labels",r);const t={...r,format:n?.y};o.y=Zw(e,"left","values",t);const s={...r,format:n?.y1};o.y1=Zw(e,"right","values",s)}if(o=bt(o),s&&s.length&&s.some(lt)){const e=Math.max(...s.map((e=>e?.length||0)));o[zS]={...o.x,labels:Array(e).fill(""),offset:!1,display:!1},o[$S]={...o.x,offset:!0,display:!1}}return o}function Lw(e,t){const{locale:o,axisType:s,trendDataSetsValues:i,labels:n,axisFormats:r}=t,a=r?.x,l=e.stacked;let c={x:Zw(e,"bottom","labels",{locale:o}),y:Zw(e,"left","values",{locale:o,stacked:l,format:r?.y}),y1:Zw(e,"right","values",{locale:o,stacked:l,format:r?.y1})};if(c=bt(c),"time"===s&&n&&a){const e={type:"time",time:ew(n,a,o)};Object.assign(c.x,e),c.x.ticks.maxTicksLimit=15}else"linear"===s&&(c.x.type="linear",c.x.ticks.callback=e=>bn(e,{format:a,locale:o}));if(i&&i.length&&i.some(lt)&&(c[zS]={...c.x,display:!1},c[$S]={...c.x,display:!1},"category"===s||"time"===s)){const e=Math.max(...i.map((e=>e?.length||0)));c[zS].type="category",c[zS].labels=je(0,e).map((e=>e.toString())),c[zS].offset=!1,c[$S].type="category",c[$S].offset=!1}return c}function Hw(e,t){const o=Lw(e,t);return{...o,x:{...o.x,grid:{display:!0}}}}function Uw(e,t){const{locale:o,axisFormats:s}=t,i=s?.y||s?.y1;e.dataSets;const n={x:{...Zw(e,"bottom","labels",{locale:o}),grid:{display:!1}},y:{position:e.verticalAxisPosition,ticks:{color:eC(e.background),callback:aC({locale:o,format:i})},grid:{lineWidth:e=>0===e.tick.value?2:1},title:qw(e.axesDesign?.y)}},r=n?.y||n?.y1;return r&&(r.grid={lineWidth:e=>0===e.tick.value?2:1}),n}function Bw(e,t){const{dataSetsValues:o}=t,s=Vw(e,t),i=s.x.ticks.callback;s.x.ticks.callback=e=>i(Math.abs(e));const n=Math.max(...o.map((e=>Math.max(...e.data.map(Math.abs)))));return s.x.suggestedMin=-n,s.x.suggestedMax=n,s}function zw(e,t){const{locale:o,axisFormats:s,dataSetsValues:i}=t,n=Math.min(...i.map((e=>Math.min(...e.data.filter((e=>!isNaN(e)))))));return{r:{beginAtZero:!0,ticks:{callback:aC({format:s?.r,locale:o}),backdropColor:e.background||"#FFFFFF"},pointLabels:{color:eC(e.background),callback:hC},suggestedMin:n<0?n-1:0}}}function $w(e,t){const{locale:o,axisFormats:s,availableRegions:i}=t,n=function(e){switch(e){case"top":return"top-left";case"right":return"top-right";case"bottom":return"bottom-right";case"left":case"none":return"bottom-left"}}(e.legendPosition),r=e.region?i.find((t=>t.id===e.region)):i[0],a=s?.y||s?.y1;return{projection:{projection:Ww(r?.defaultProjection||"mercator"),axis:"x"},color:{axis:"x",display:"none"!==e.legendPosition,border:{color:O},grid:{color:O},ticks:{color:eC(e.background),callback:aC({locale:o,format:a})},legend:{position:n,align:n.includes("right")?"left":"right",margin:Yw(e)},interpolate:jw(e),missing:e.missingValueColor||"#ffffff"}}}function Gw(e,t){const o=t.dataSetsValues[0];return{x:{display:!1},y:{grid:{offset:!1},ticks:{callback:function(e){return hC(this.getLabelForValue(e))}},border:{display:!1}},percentages:{position:"right",border:{display:!1},ticks:{callback:function(e,s,i){const n=o.data?.[s],r=o.data?.[0];return r&&void 0!==n?bn(n/r,{format:"0%",locale:t.locale}):""}},grid:{display:!1}}}}function Ww(e){return"conicConformal"===e?window.ChartGeo.geoConicConformal().rotate([100,0]):e}function qw(e){if(e?.title?.text){const{text:t,color:o,align:s,italic:i,bold:n}=e.title;return{display:!0,text:t,color:o,font:{style:i?"italic":"normal",weight:n?"bold":"normal",size:e.title.fontSize??J},align:"left"===s?"start":"right"===s?"end":"center"}}}function Zw(e,t,o,s){const{useLeftAxis:i,useRightAxis:n}=nC(e);if("left"===t&&!i||"right"===t&&!n)return;const r=eC(e.background);let a;if(a="bottom"===t?e.axesDesign?.x:"left"===t?e.axesDesign?.y:e.axesDesign?.y1,"values"===o){const e=!("right"===t&&i);return{position:t,title:qw(a),grid:{display:e},beginAtZero:!0,stacked:s?.stacked,ticks:{color:r,callback:aC(s)}}}return{ticks:{padding:5,color:r,callback:function(e){return hC(this.getLabelForValue(e))}},grid:{display:!1},stacked:s?.stacked,title:qw(a)}}function jw(e){if(!e.colorScale||"string"==typeof e.colorScale)return e.colorScale||"oranges";const t=[{value:0,color:e.colorScale.minColor}];return e.colorScale.midColor&&t.push({value:.5,color:e.colorScale.midColor}),t.push({value:1,color:e.colorScale.maxColor}),vo(t)}function Yw(e){switch(e.legendPosition){case"top":case"right":return{top:!!e.title.text?X+30:X,left:j,right:j};case"bottom":case"left":case"none":return{left:j,right:j,bottom:Y}}}const Xw={showValues:!1,showLabels:!0,valuesDesign:{align:"center",fontSize:13}};function Kw(e,t){const{axisFormats:o,locale:s}=t;return{horizontal:"horizontal"in e&&e.horizontal,showValues:"showValues"in e&&!!e.showValues,background:e.background,callback:(t,i)=>{const n=function(e,t){if(t.rAxisID)return t.rAxisID;const o="horizontal"in e&&e.horizontal?t.xAxisID:t.yAxisID;return o||"y"}(e,i);return rC(o,s)(t,n)}}}function Jw(e,t){const{axisFormats:o,locale:s}=t;return{callback:rC(o,s),showLabels:e.showLabels??Xw.showLabels,showValues:e.showValues??Xw.showValues,style:{fontSize:e.valuesDesign?.fontSize??Xw.valuesDesign.fontSize,align:e.valuesDesign?.align??Xw.valuesDesign.align,bold:e.valuesDesign?.bold??Xw.valuesDesign.bold,italic:e.valuesDesign?.italic??Xw.valuesDesign.italic,textColor:e.valuesDesign?.color??Xw.valuesDesign.color}}}function Qw(e,t){const{axisFormats:o,locale:s}=t;return{horizontal:!0,showValues:"showValues"in e&&!!e.showValues,background:e.background,callback:(e,t)=>0===(e=Math.abs(Number(e)))?"":rC(o,s)(e,t.xAxisID||"x")}}function eI(e,t){const{axisFormats:o,locale:s,dataSetsValues:i}=t,n=i.reduce(((e,t)=>(e.push((e.at(-1)||-1)+t.data.length+1),e)),[]);return{showValues:"showValues"in e&&!!e.showValues,background:e.background,callback:(t,i,r)=>{const a=i._dataset.data[r],l=a[1]-a[0];let c=l>=0?"+":"";return e.showSubTotals&&n.includes(r)&&"+"===c&&(c=""),`${c}${rC(o,s)(l,i.yAxisID)}`}}}function tI(e){const t=e.title,o=tC(e.background);return{display:!!t.text,text:Vo(t.text),color:t?.color??o,align:"center"===t.align?"center":"right"===t.align?"end":"start",font:{size:e.title.fontSize??K,weight:t.bold?"bold":"normal",style:t.italic?"italic":"normal"},padding:{bottom:"top"===e.legendPosition?0:j}}}const oI='\n<templates>\n <t t-name="o-spreadsheet-CustomTooltip">\n <div\n class="o-chart-custom-tooltip border rounded px-2 py-1 pe-none mw-100 position-absolute text-nowrap shadow opacity-100">\n <table class="overflow-hidden m-0">\n <thead t-if="title">\n <tr>\n <th class="o-tooltip-title align-baseline border-0 text-truncate" t-esc="title" t-attf-style="max-width: {{ labelsMaxWidth }}"/>\n </tr>\n </thead>\n <tbody>\n <tr t-foreach="tooltipItems" t-as="tooltipItem" t-key="tooltipItem_index">\n <td>\n <span\n class="badge ps-2 py-2 rounded-0 align-middle"\n t-attf-style="background-color: {{ tooltipItem.boxColor }}"\n > </span>\n <small\n t-if="tooltipItem.label"\n class="o-tooltip-label d-inline-block text-truncate align-middle smaller ms-2"\n t-esc="tooltipItem.label"\n t-attf-style="max-width: {{ labelsMaxWidth }}"\n />\n </td>\n <td class="o-tooltip-value ps-2 fw-bolder text-end">\n <small class="smaller d-inline-block text-truncate align-middle" t-attf-style="max-width: {{ valuesMaxWidth }}">\n <t t-esc="tooltipItem.value"/>\n <t t-if="tooltipItem.percentage">\n (\n <t t-esc="tooltipItem.percentage"/>\n %)\n </t>\n </small>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </t>\n</templates>\n';let sI;function iI(e,o={}){return function(e,o={}){sI||(sI=new t.App(t.Component,{templates:oI,translateFn:Vo}));const s=sI.getTemplate(e),i=s(o,{}),n=document.createElement("div");return t.blockDom.mount(i,n),n}(e,o).innerHTML}function nI(e,t){return{enabled:!1,external:mI,callbacks:{title:function(e){return e.some((e=>!dC(e.dataset.xAxisID)))?void 0:""},beforeLabel:e=>e.dataset?.label||e.label,label:function(o){const s=e.horizontal;let i=s?o.parsed.x:o.parsed.y;null==i&&(i=o.parsed);const n=s?o.dataset.xAxisID:o.dataset.yAxisID;return rC(t.axisFormats,t.locale)(i,n)}}}}function rI(e,t){const{axisType:o,locale:s,axisFormats:i}=t,n=i?.x,r={enabled:!1,external:mI,callbacks:{}};return r.callbacks.label="linear"===o?e=>{const t=e.parsed.y;let o=dC(e.dataset.xAxisID)?"":e.parsed.x;"string"==typeof o&&Is(o,s)&&(o=gi(o,s));const r=bn(o,{locale:s,format:n}),a=e.dataset.yAxisID||"y",l=bn(t,{locale:s,format:i?.[a]});return r?`(${r}, ${l})`:`${l}`}:function(e){const t=e.parsed.y,o=e.dataset.yAxisID;return rC(i,s)(t,o)},r.callbacks.beforeLabel=e=>e.dataset?.label||e.label,r.callbacks.title=function(e){return"linear"!==o&&e.some((e=>!dC(e.dataset.xAxisID)))?void 0:""},r}function aI(e,t){const{locale:o,axisFormats:s}=t,i=s?.y||s?.y1;return{enabled:!1,external:mI,callbacks:{title:function(e){return e[0].dataset.label},beforeLabel:e=>e.label||e.dataset.label,label:function(e){const t=function(e,t){const o=e.filter((e=>"number"==typeof e)).reduce(((e,t)=>e+t),0);if(!o)return"";const s=e[t]/o*100;return s.toFixed(2)}(e.dataset.data,e.dataIndex),s=e.parsed.y??e.parsed;return`${bn(s,{format:!i&&s>=1e3?"#,##":i,locale:o})} (${t}%)`}}}}function lI(e,t){const{dataSetsValues:o,locale:s,axisFormats:i,labels:n}=t,r=i?.y||i?.y1,a=o.map((e=>e.label));return{enabled:!1,external:mI,callbacks:{beforeLabel:function(e){const t=n.length?Math.floor(e.dataIndex/n.length):0;return a[t]},label:function(e){const[t,o]=e.raw,i=o-t;return bn(i,{format:!r&&Math.abs(i)>1e3?"#,##":r,locale:s})}}}}function cI(e,t){const o=nI(e,t);return{...o,callbacks:{...o.callbacks,label:e=>{const t={...e,parsed:{y:e.parsed.y,x:Math.abs(e.parsed.x)}};return(o?.callbacks?.label)(t)}}}}function hI(e,t){const{locale:o,axisFormats:s}=t;return{enabled:!1,external:mI,callbacks:{beforeLabel:e=>e.dataset?.label||e.label,label:function(e){return bn(e.parsed.r,{format:s?.r,locale:o})}}}}function dI(e,t){const{locale:o,axisFormats:s}=t,i=s?.y||s?.y1;return{enabled:!1,external:mI,filter:function(e){return void 0!==e.raw.value},callbacks:{beforeLabel:e=>e.raw.feature.properties.name,label:function(e){const t=e.raw.value;return bn(t,{format:!i&&Math.abs(t)>=1e3?"#,##":i,locale:o})}}}}function uI(e,t){return{enabled:!1,external:mI,position:"funnelTooltipPositioner",callbacks:{title:()=>"",beforeLabel:e=>e.label,label:function(e){const o=e.parsed.x,s=e.dataset.xAxisID;return rC(t.axisFormats,t.locale)(o,s)}}}}function gI(e,t){const{locale:o,axisFormats:s}=t,i=s?.y||s?.y1;return{enabled:!1,external:mI,filter:function(e){const t=e.raw;return t?.label!==fC},callbacks:{title:()=>"",beforeLabel:e=>e.raw.groups.join(" / "),label:function(e){const t=e.raw.value;return bn(t,{format:!i&&t>=1e3?"#,##":i,locale:o})}}}}function pI(e,t){const{locale:o,axisFormats:s}=t,i=s?.y;return{enabled:!1,external:mI,filter:(e,t,o)=>t===o.length-1,callbacks:{title:()=>"",beforeLabel:e=>{const t=e.raw._data.children[0];if(!t)return"";const o=[];for(let s=0;s<=e.raw.l;s++)o.push(t[s]);return o.join(" / ")},label:e=>{const t=e.raw.v;return bn(t,{format:!i&&t>=1e3?"#,##":i,locale:o})}}}}function mI({chart:e,tooltip:t}){if(e.canvas.parentNode.querySelector("div.o-chart-custom-tooltip")?.remove(),0===t.opacity||0===t.dataPoints.length)return;const o=t.body.map(((e,o)=>{let s=e.before[0],i=e.lines[0];i||(i=s,s="");const n=t.labelColors[o].backgroundColor;return{label:s,value:i,boxColor:"string"==typeof n?eo(n,1):n}})),s=iI("o-spreadsheet-CustomTooltip",{labelsMaxWidth:Math.floor(.5*e.canvas.clientWidth)+"px",valuesMaxWidth:Math.floor(.25*e.canvas.clientWidth)+"px",title:t.title[0],tooltipItems:o}),i=Object.assign(document.createElement("template"),{innerHTML:s}).content.firstChild;e.canvas.parentNode?.appendChild(i),Object.assign(i.style,{left:fI(e,t,i.clientWidth)+"px",top:Math.floor(t.caretY-i.clientHeight/2)+"px"})}function fI(e,t,o){const s=t.caretX;return s+o>e.chartArea.right?Math.max(0,s-o):s}var vI=Object.freeze({__proto__:null,GHOST_SUNBURST_VALUE:fC,INTERACTIVE_LEGEND_CONFIG:Nw,canChartParseLabels:uw,getBarChartData:tw,getBarChartDatasets:vC,getBarChartLegend:Tw,getBarChartScales:Vw,getBarChartTooltip:nI,getChartColorsGenerator:NC,getChartLabelFormat:Sw,getChartLayout:Ew,getChartShowValues:Kw,getChartTitle:tI,getComboChartDatasets:wC,getComboChartLegend:Ow,getData:fw,getFunnelChartData:aw,getFunnelChartDatasets:EC,getFunnelChartScales:Gw,getFunnelChartTooltip:uI,getFunnelLabelColors:RC,getGeoChartData:rw,getGeoChartDatasets:xC,getGeoChartScales:$w,getGeoChartTooltip:dI,getHierarchalChartData:lw,getLineChartData:sw,getLineChartDatasets:SC,getLineChartLegend:Aw,getLineChartScales:Lw,getLineChartTooltip:rI,getPieChartData:iw,getPieChartDatasets:yC,getPieChartLegend:Dw,getPieChartTooltip:aI,getPyramidChartData:ow,getPyramidChartScales:Bw,getPyramidChartShowValues:Qw,getPyramidChartTooltip:cI,getRadarChartData:nw,getRadarChartDatasets:IC,getRadarChartLegend:Pw,getRadarChartScales:zw,getRadarChartTooltip:hI,getScatterChartDatasets:CC,getScatterChartLegend:_w,getScatterChartScales:Hw,getSunburstChartDatasets:TC,getSunburstChartLegend:Mw,getSunburstChartTooltip:gI,getSunburstShowValues:Jw,getTopPaddingForDashboard:xw,getTreeMapChartDatasets:OC,getTreeMapChartTooltip:pI,getTrendDatasetForBarChart:cw,getTrendDatasetForLineChart:hw,getWaterfallChartLegend:Fw,getWaterfallChartScales:Uw,getWaterfallChartShowValues:eI,getWaterfallChartTooltip:lI,getWaterfallDatasetAndLabels:bC,makeDatasetsCumulative:Iw});class bI extends $C{dataSets;labelRange;background;legendPosition;stacked;aggregated;type="bar";dataSetsHaveTitle;dataSetDesign;axesDesign;horizontal;showValues;constructor(e,t,o){super(e,t,o),this.dataSets=YS(o,e.dataSets,t,e.dataSetsHaveTitle),this.labelRange=fa(o,t,e.labelRange),this.background=e.background,this.legendPosition=e.legendPosition,this.stacked=e.stacked,this.aggregated=e.aggregated,this.dataSetsHaveTitle=e.dataSetsHaveTitle,this.dataSetDesign=e.dataSets,this.axesDesign=e.axesDesign,this.horizontal=e.horizontal,this.showValues=e.showValues}static transformDefinition(e,t,o){return QS(e,t,o)}static validateChartDefinition(e,t){return e.checkValidations(t,oC,sC)}static getDefinitionFromContextCreation(e){return{background:e.background,dataSets:e.range??[],dataSetsHaveTitle:e.dataSetsHaveTitle??!1,stacked:e.stacked??!1,aggregated:e.aggregated??!1,legendPosition:e.legendPosition??"top",title:e.title||{text:""},type:"bar",labelRange:e.auxiliaryRange||void 0,axesDesign:e.axesDesign,showValues:e.showValues}}getContextCreation(){const e=[];for(const[t,o]of this.dataSets.entries())e.push({...this.dataSetDesign?.[t],dataRange:this.getters.getRangeString(o.dataRange,this.sheetId)});return{...this,range:e,auxiliaryRange:this.labelRange?this.getters.getRangeString(this.labelRange,this.sheetId):void 0}}duplicateInDuplicatedSheet(e){const t=qS(this.sheetId,e,this.dataSets),o=ZS(this.sheetId,e,this.labelRange),s=this.getDefinitionWithSpecificDataSets(t,o,e);return new bI(s,e,this.getters)}copyInSheetId(e){const t=this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange,e);return new bI(t,e,this.getters)}getDefinition(){return this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange)}getDefinitionWithSpecificDataSets(e,t,o){const s=[];for(const[t,i]of e.entries())s.push({...this.dataSetDesign?.[t],dataRange:this.getters.getRangeString(i.dataRange,o||this.sheetId)});return{type:"bar",dataSetsHaveTitle:!!e.length&&Boolean(e[0].labelCell),background:this.background,dataSets:s,legendPosition:this.legendPosition,labelRange:t?this.getters.getRangeString(t,o||this.sheetId):void 0,title:this.title,stacked:this.stacked,aggregated:this.aggregated,axesDesign:this.axesDesign,horizontal:this.horizontal,showValues:this.showValues}}getDefinitionForExcel(){const e=this.dataSets.map((e=>KS(this.getters,e))).filter((e=>""!==e.range&&e.range!==Js.InvalidReference)),t=JS(this.getters,this.labelRange,iC(this.labelRange,this.dataSets[0],this.dataSetsHaveTitle)),o=this.getDefinition();return{...o,backgroundColor:wy(this.background||m),fontColor:wy(eC(this.background)),dataSets:e,labelRange:t,verticalAxis:nC(o)}}updateRanges(e){const{dataSets:t,labelRange:o,isStale:s}=WS(this.getters,e,this.dataSets,this.labelRange);if(!s)return this;const i=this.getDefinitionWithSpecificDataSets(t,o);return new bI(i,this.sheetId,this.getters)}}function SI(e,t){const o=e.getDefinition(),s=tw(o,e.dataSets,e.labelRange,t);return{chartJsConfig:{type:"bar",data:{labels:s.labels,datasets:vC(o,s)},options:{...Ly,indexAxis:e.horizontal?"y":"x",layout:Ew(0,s),scales:Vw(o,s),plugins:{title:tI(o),legend:Tw(o),tooltip:nI(o,s),chartShowValuesPlugin:Kw(o,s)}}},background:e.background||m}}const CI=new n;CI.add("animatedBackgroundColorChange",{id:"animatedBackgroundColorChange",easingFn:"easeOutCubic",hasAnimation:(e,t)=>e?.style?.fillColor!==t?.style?.fillColor,updateAnimation:function(e,t,o,s){const i=vo([{value:0,color:o.style.fillColor||"#ffffff"},{value:1,color:s.style.fillColor||"#ffffff"}]);t.style.fillColor=i(yI[this.easingFn](e))}}),CI.add("animatedTextColorChange",{id:"animatedTextColorChange",easingFn:"easeOutCubic",hasAnimation:(e,t)=>e?.style?.textColor!==t?.style?.textColor,updateAnimation:function(e,t,o,s){const i=vo([{value:0,color:o.style.textColor||"#000000"},{value:1,color:s.style.textColor||"#000000"}]);t.style.textColor=i(yI[this.easingFn](e))}}),CI.add("animatedDataBar",{id:"animatedDataBar",easingFn:"easeOutCubic",hasAnimation:(e,t)=>e?.dataBarFill?.percentage!==t?.dataBarFill?.percentage,updateAnimation:function(e,t,o,s){const i=o?.dataBarFill?.percentage||0,n=i+((s?.dataBarFill?.percentage||0)-i)*yI[this.easingFn](e);t.dataBarFill={color:s.dataBarFill?.color||o.dataBarFill?.color||"#ffffff",percentage:n}}}),CI.add("textFadeIn",{id:"textFadeIn",easingFn:"easeInCubic",hasAnimation:(e,t)=>{const o=e?.content?.textLines?.join("\n"),s=t?.content?.textLines?.join("\n");return Boolean(!o&&s)},updateAnimation:function(e,t,o,s){t.textOpacity=yI[this.easingFn](e)}}),CI.add("textFadeOut",{id:"textFadeOut",easingFn:"easeOutCubic",hasAnimation:(e,t)=>{const o=e?.content?.textLines?.join("\n"),s=t?.content?.textLines?.join("\n");return Boolean(o&&!s)},updateAnimation:function(e,t,o,s){const i=1-yI[this.easingFn](e),n={...o.style};delete n.fillColor,t.textOpacity=i,t.content=o.content,t.clipRect=o.clipRect,Object.assign(t.style,n)}}),CI.add("textChange",{id:"textChange",easingFn:"easeOutCubic",hasAnimation:(e,t)=>{const o=e?.content?.textLines?.join("\n"),s=t?.content?.textLines?.join("\n");return Boolean(o&&s&&o!==s)||xI(t,e)},updateAnimation:function(e,t,o,s){const i=yI[this.easingFn](e),n=s.y+(i-1)*s.height,r=s.y+i*s.height,a=xI(s,o),l={id:s.id+"-text-slide-in",x:s.x,y:n,width:s.width,height:s.height,style:{...s.style},skipCellGridLines:!0,content:s.content,clipRect:s.clipRect||{...s,x:Math.max(0,s.x-(s.content?.width||0)),width:s.width+2*(s.content?.width||0)},icons:a?II(s.icons,s):wI(s.icons)},c={id:o.id+"-text-slide-out",x:s.x,y:r,width:s.width,height:s.height,style:{...o.style},skipCellGridLines:!0,content:o.content,clipRect:o.clipRect||{...s,x:Math.max(0,s.x-(o.content?.width||0)),width:s.width+2*(o.content?.width||0)},icons:a?II(o.icons,s):wI(o.icons)};if(s.content&&o.content&&l.content&&c.content){const e=s.content.y+(i-1)*s.height,t=s.content.y+i*s.height;l.content.y=e,c.content.y=t}return c.style.fillColor=l.style.fillColor=void 0,t.content=void 0,t.icons=a?{}:t.icons,{newBoxes:[l,c]}}}),CI.add("borderFadeIn",{id:"borderFadeIn",easingFn:"easeInCubic",hasAnimation:(e,t)=>Boolean(!e?.border?.bottom&&t?.border?.bottom||!e?.border?.top&&t?.border?.top||!e?.border?.left&&t?.border?.left||!e?.border?.right&&t?.border?.right),updateAnimation:function(e,t,o,s){const i=yI[this.easingFn](e);t.border?.top&&s.border?.top&&!o.border?.top&&(t.border.top.opacity=i),t.border?.bottom&&s.border?.bottom&&!o.border?.bottom&&(t.border.bottom.opacity=i),t.border?.left&&s.border?.left&&!o.border?.left&&(t.border.left.opacity=i),t.border?.right&&s.border?.right&&!o.border?.right&&(t.border.right.opacity=i)}}),CI.add("borderFadeOut",{id:"borderFadeOut",easingFn:"easeOutCubic",hasAnimation:(e,t)=>Boolean(e?.border?.bottom&&!t?.border?.bottom||e?.border?.top&&!t?.border?.top||e?.border?.left&&!t?.border?.left||e?.border?.right&&!t?.border?.right),updateAnimation:function(e,t,o,s){const i=1-yI[this.easingFn](e);t.border||(t.border={}),o.border?.top&&!s.border?.top&&(t.border.top={...o.border.top,opacity:i}),o.border?.bottom&&!s.border?.bottom&&(t.border.bottom={...o.border.bottom,opacity:i}),o.border?.left&&!s.border?.left&&(t.border.left={...o.border.left,opacity:i}),o.border?.right&&!s.border?.right&&(t.border.right={...o.border.right,opacity:i})}}),CI.add("borderColorChange",{id:"borderColorChange",easingFn:"easeOutCubic",hasAnimation:(e,t)=>{const o=e?.border,s=t?.border;return!(!o||!s)&&Boolean(o.bottom?.color!==s.bottom?.color||o.top?.color!==s.top?.color||o.left?.color!==s.left?.color||o.right?.color!==s.right?.color)},updateAnimation:function(e,t,o,s){const i=i=>{const n=o?.border?.[i],r=s?.border?.[i],a=t.border?.[i];if(n&&r&&a){const t=vo([{value:0,color:n.color||"#000000"},{value:1,color:r.color||"#000000"}]);a.color=t(yI[this.easingFn](e))}};i("top"),i("bottom"),i("left"),i("right")}}),CI.add("iconChange",{id:"iconChange",easingFn:"easeOutCubic",hasAnimation:(e,t)=>!xI(t,e)&&Boolean(e?.icons?.center?.svg?.name!==t?.icons?.center?.svg?.name||e?.icons?.left?.svg?.name!==t?.icons?.left?.svg?.name||e?.icons?.right?.svg?.name!==t?.icons?.right?.svg?.name),updateAnimation:function(e,t,o,s){const i=yI[this.easingFn](e),n=s.y+(i-1)*s.height,r=s.y+i*s.height,a=[],l=e=>{const i=o.icons?.[e],l=s.icons?.[e],c={id:`${s.id}-icon-${e}-slide-in`,style:{verticalAlign:s.style.verticalAlign},x:s.x,y:n,width:s.width,height:s.height,skipCellGridLines:!0,icons:{[e]:{...l,clipRect:s}}},h={id:`${s.id}-icon-${e}-slide-out`,style:{verticalAlign:o.style.verticalAlign},x:s.x,y:r,width:s.width,height:s.height,skipCellGridLines:!0,icons:{[e]:{...i,clipRect:s}}};t.icons[e]=wI(s.icons)[e],a.push(c,h)};return l("left"),l("right"),l("center"),{newBoxes:a}}});const yI={linear:e=>e,easeInCubic:e=>e*e*e,easeOutCubic:e=>(e-=1)*e*e+1,easeInOutCubic:e=>(e/=.5)<1?.5*e*e*e:.5*((e-=2)*e*e+2),easeOutQuart:e=>-((e-=1)*e*e*e-1)};function wI(e){return{left:e.left?{...e.left,svg:void 0}:void 0,right:e.right?{...e.right,svg:void 0}:void 0,center:e.center?{...e.center,svg:void 0}:void 0}}function II(e,t){return{left:e.left?{...e.left,clipRect:t}:void 0,right:e.right?{...e.right,clipRect:t}:void 0,center:e.center?{...e.center,clipRect:t}:void 0}}function xI(e,t){const o=(e,t)=>t&&e?!!(e.horizontalAlign!==t.horizontalAlign||e.size!==t.size||e.margin!==t.margin||e.svg&&!t.svg||!e.svg&&t.svg):!!(e&&!t||!e&&t);return o(e?.icons.left,t?.icons.left)||o(e?.icons.right,t?.icons.right)||o(e?.icons.center,t?.icons.center)}class EI extends t.Component{static template="o-spreadsheet-GaugeChartComponent";static props={figureUI:Object,isFullScreen:{type:Boolean,optional:!0}};canvas=t.useRef("chartContainer");animationStore;get runtime(){return this.env.model.getters.getChartRuntime(this.props.figureUI.id)}setup(){this.env.model.getters.isDashboard()&&(this.animationStore=oh(yh));let e,o=null;t.useEffect((()=>(this.env.isDashboard()&&void 0===e&&"gauge"!==this.animationStore?.animationPlayed[this.animationFigureId]||this.env.isDashboard()&&void 0!==e&&!mt(this.runtime,e)?(o=this.drawGaugeWithAnimation(),this.animationStore?.disableAnimationForChart(this.animationFigureId,"gauge")):Oy(this.canvasEl,this.runtime),e=this.runtime,()=>o?.stop())),(()=>{const e=this.canvasEl.getBoundingClientRect();return[e.width,e.height,this.runtime,this.canvas.el,window.devicePixelRatio]}))}drawGaugeWithAnimation(){Oy(this.canvasEl,{...this.runtime,animationValue:0});const e=this.runtime.gaugeValue?.value||0,t=this.runtime.maxValue.value,o=Math.sign(e)*Math.min(Math.abs(e),Math.abs(t));if(0===o)return null;const s=this.runtime.minValue.value,i=new RI(s,o,1e3,(e=>Oy(this.canvasEl,{...this.runtime,animationValue:e})));return i.start(),i}get canvasEl(){return this.canvas.el}get animationFigureId(){return this.props.isFullScreen?this.props.figureUI.id+"-fullscreen":this.props.figureUI.id}}class RI{startValue;endValue;duration;callback;startTime=void 0;animationFrameId=null;constructor(e,t,o,s){this.startValue=e,this.endValue=t,this.duration=o,this.callback=s}start(){this.animationFrameId=requestAnimationFrame(this.animate.bind(this))}stop(){this.animationFrameId&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null)}animate(e){this.startTime||(this.startTime=e);const t=e-this.startTime,o=Math.min(t/this.duration,1),s=this.startValue+(this.endValue-this.startValue)*yI.easeOutQuart(o);this.callback(s),o<1?this.animationFrameId=requestAnimationFrame(this.animate.bind(this)):this.stop()}}class TI extends $C{dataSets;labelRange;background;legendPosition;aggregated;dataSetsHaveTitle;dataSetDesign;axesDesign;type="combo";showValues;hideDataMarkers;constructor(e,t,o){super(e,t,o),this.dataSets=YS(o,e.dataSets,t,e.dataSetsHaveTitle),this.labelRange=fa(o,t,e.labelRange),this.background=e.background,this.legendPosition=e.legendPosition,this.aggregated=e.aggregated,this.dataSetsHaveTitle=e.dataSetsHaveTitle,this.dataSetDesign=e.dataSets,this.axesDesign=e.axesDesign,this.showValues=e.showValues,this.hideDataMarkers=e.hideDataMarkers}static transformDefinition(e,t,o){return QS(e,t,o)}static validateChartDefinition(e,t){return e.checkValidations(t,oC,sC)}getContextCreation(){const e=[];for(const[t,o]of this.dataSets.entries())e.push({...this.dataSetDesign?.[t],dataRange:this.getters.getRangeString(o.dataRange,this.sheetId)});return{...this,range:e,auxiliaryRange:this.labelRange?this.getters.getRangeString(this.labelRange,this.sheetId):void 0}}getDefinition(){return this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange)}getDefinitionWithSpecificDataSets(e,t,o){const s=[];for(const[t,i]of e.entries())s.push({...this.dataSetDesign?.[t],dataRange:this.getters.getRangeString(i.dataRange,o||this.sheetId),type:this.dataSetDesign?.[t]?.type??(t?"line":"bar")});return{type:"combo",dataSetsHaveTitle:!!e.length&&Boolean(e[0].labelCell),background:this.background,dataSets:s,legendPosition:this.legendPosition,labelRange:t?this.getters.getRangeString(t,o||this.sheetId):void 0,title:this.title,aggregated:this.aggregated,axesDesign:this.axesDesign,showValues:this.showValues,hideDataMarkers:this.hideDataMarkers}}getDefinitionForExcel(){if(this.aggregated)return;const e=this.dataSets.map((e=>KS(this.getters,e))).filter((e=>""!==e.range&&e.range!==Js.InvalidReference)),t=JS(this.getters,this.labelRange,iC(this.labelRange,this.dataSets[0],this.dataSetsHaveTitle)),o=this.getDefinition();return{...o,backgroundColor:wy(this.background||m),fontColor:wy(eC(this.background)),dataSets:e,labelRange:t,verticalAxis:nC(o)}}updateRanges(e){const{dataSets:t,labelRange:o,isStale:s}=WS(this.getters,e,this.dataSets,this.labelRange);if(!s)return this;const i=this.getDefinitionWithSpecificDataSets(t,o);return new TI(i,this.sheetId,this.getters)}static getDefinitionFromContextCreation(e){const t=(e.range??[]).map(((e,t)=>({...e,type:t?"line":"bar"})));return{background:e.background,dataSets:t,dataSetsHaveTitle:e.dataSetsHaveTitle??!1,aggregated:e.aggregated,legendPosition:e.legendPosition??"top",title:e.title||{text:""},labelRange:e.auxiliaryRange||void 0,type:"combo",axesDesign:e.axesDesign,showValues:e.showValues,hideDataMarkers:e.hideDataMarkers}}duplicateInDuplicatedSheet(e){const t=qS(this.sheetId,e,this.dataSets),o=ZS(this.sheetId,e,this.labelRange),s=this.getDefinitionWithSpecificDataSets(t,o,e);return new TI(s,e,this.getters)}copyInSheetId(e){const t=this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange,e);return new TI(t,e,this.getters)}}class AI extends $C{dataSets;labelRange;background;legendPosition;aggregated;type="funnel";dataSetsHaveTitle;dataSetDesign;axesDesign;horizontal=!0;showValues;funnelColors;cumulative;constructor(e,t,o){super(e,t,o),this.dataSets=YS(o,e.dataSets,t,e.dataSetsHaveTitle),this.labelRange=fa(o,t,e.labelRange),this.background=e.background,this.legendPosition=e.legendPosition,this.aggregated=e.aggregated,this.dataSetsHaveTitle=e.dataSetsHaveTitle,this.dataSetDesign=e.dataSets,this.axesDesign=e.axesDesign,this.showValues=e.showValues,this.horizontal=!0,this.funnelColors=e.funnelColors,this.cumulative=e.cumulative}static transformDefinition(e,t,o){return QS(e,t,o)}static validateChartDefinition(e,t){return e.checkValidations(t,oC,sC)}static getDefinitionFromContextCreation(e){return{background:e.background,dataSets:e.range??[],dataSetsHaveTitle:e.dataSetsHaveTitle??!1,aggregated:e.aggregated??!1,legendPosition:"none",title:e.title||{text:""},type:"funnel",labelRange:e.auxiliaryRange||void 0,showValues:e.showValues,axesDesign:e.axesDesign,funnelColors:e.funnelColors,horizontal:!0,cumulative:e.cumulative}}getContextCreation(){const e=[];for(const[t,o]of this.dataSets.entries())e.push({...this.dataSetDesign?.[t],dataRange:this.getters.getRangeString(o.dataRange,this.sheetId)});return{...this,range:e,auxiliaryRange:this.labelRange?this.getters.getRangeString(this.labelRange,this.sheetId):void 0}}duplicateInDuplicatedSheet(e){const t=qS(this.sheetId,e,this.dataSets),o=ZS(this.sheetId,e,this.labelRange),s=this.getDefinitionWithSpecificDataSets(t,o,e);return new AI(s,e,this.getters)}copyInSheetId(e){const t=this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange,e);return new AI(t,e,this.getters)}getDefinition(){return this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange)}getDefinitionWithSpecificDataSets(e,t,o){const s=[];for(const[t,i]of e.entries())s.push({...this.dataSetDesign?.[t],dataRange:this.getters.getRangeString(i.dataRange,o||this.sheetId)});return{type:"funnel",dataSetsHaveTitle:!!e.length&&Boolean(e[0].labelCell),background:this.background,dataSets:s,legendPosition:this.legendPosition,labelRange:t?this.getters.getRangeString(t,o||this.sheetId):void 0,title:this.title,aggregated:this.aggregated,horizontal:this.horizontal,axesDesign:this.axesDesign,showValues:this.showValues,funnelColors:this.funnelColors,cumulative:this.cumulative}}getDefinitionForExcel(){}updateRanges(e){const{dataSets:t,labelRange:o,isStale:s}=WS(this.getters,e,this.dataSets,this.labelRange);if(!s)return this;const i=this.getDefinitionWithSpecificDataSets(t,o);return new AI(i,this.sheetId,this.getters)}}function DI(e){return e.dataRange&&!Xr.test(e.dataRange)?"InvalidGaugeDataRange":"Success"}function _I(e,t){return t((t=>t.sectionRule?e(t.sectionRule.rangeMin,"rangeMin"):"Success"),(t=>t.sectionRule?e(t.sectionRule.rangeMax,"rangeMax"):"Success"))}function OI(e,t){if(""===e)switch(t){case"rangeMin":return"EmptyGaugeRangeMin";case"rangeMax":return"EmptyGaugeRangeMax"}return"Success"}function FI(e,t){if(e.startsWith("="))return"Success";if(isNaN(e))switch(t){case"rangeMin":return"GaugeRangeMinNaN";case"rangeMax":return"GaugeRangeMaxNaN";case"lowerInflectionPointValue":return"GaugeLowerInflectionPointNaN";case"upperInflectionPointValue":return"GaugeUpperInflectionPointNaN"}return"Success"}class PI extends $C{dataRange;sectionRule;background;type="gauge";constructor(e,t,o){super(e,t,o),this.dataRange=fa(this.getters,this.sheetId,e.dataRange),this.sectionRule=e.sectionRule,this.background=e.background}static validateChartDefinition(e,t){return e.checkValidations(t,DI,e.chainValidations(_I(OI,e.batchValidations),_I(FI,e.batchValidations)),e.chainValidations((o=FI,(0,e.batchValidations)((e=>e.sectionRule?o(e.sectionRule.lowerInflectionPoint.value,"lowerInflectionPointValue"):"Success"),(e=>e.sectionRule?o(e.sectionRule.upperInflectionPoint.value,"upperInflectionPointValue"):"Success")))));var o}static transformDefinition(e,t,o){let s;if(t.dataRange){const i=US(e,t.dataRange,o);i!==Js.InvalidReference&&(s=i)}return{...t,dataRange:s}}static getDefinitionFromContextCreation(e){return{background:e.background,title:e.title||{text:""},type:"gauge",dataRange:e.range?e.range[0].dataRange:void 0,sectionRule:{colors:{lowerColor:"#EA6175",middleColor:"#FFD86D",upperColor:"#43C5B1"},rangeMin:"0",rangeMax:"100",lowerInflectionPoint:{type:"percentage",value:"15",operator:"<="},upperInflectionPoint:{type:"percentage",value:"40",operator:"<="}}}}duplicateInDuplicatedSheet(e){const t=ZS(this.sheetId,e,this.dataRange),o=VI(this.sectionRule,(t=>this.getters.copyFormulaStringForSheet(this.sheetId,e,t,"moveReference"))),s=this.getDefinitionWithSpecificRanges(t,o,e);return new PI(s,e,this.getters)}copyInSheetId(e){const t=VI(this.sectionRule,(t=>this.getters.copyFormulaStringForSheet(this.sheetId,e,t,"keepSameReference"))),o=this.getDefinitionWithSpecificRanges(this.dataRange,t,e);return new PI(o,e,this.getters)}getDefinition(){return this.getDefinitionWithSpecificRanges(this.dataRange,this.sectionRule)}getDefinitionWithSpecificRanges(e,t,o){return{background:this.background,sectionRule:t,title:this.title,type:"gauge",dataRange:e?this.getters.getRangeString(e,o||this.sheetId):void 0}}getDefinitionForExcel(){}getContextCreation(){return{...this,range:this.dataRange?[{dataRange:this.getters.getRangeString(this.dataRange,this.sheetId)}]:void 0}}updateRanges(e){const t=jS(this.dataRange,e),o=VI(this.sectionRule,(t=>this.getters.adaptFormulaStringDependencies(this.sheetId,t,e))),s=this.getDefinitionWithSpecificRanges(t,o);return new PI(s,this.sheetId,this.getters)}}function MI(e,t){const o=t.getLocale(),s=e.sectionRule.colors;let i,n,r;const a=e.dataRange;if(void 0!==a){const e=t.getEvaluatedCell({sheetId:a.sheetId,col:a.zone.left,row:a.zone.top});e.type===Ts.number&&(i=e.value,n=e.formattedValue,r=e.format)}let l=kI(e.sheetId,e.sectionRule.rangeMin,t),c=kI(e.sheetId,e.sectionRule.rangeMax,t);if(void 0===l||void 0===c)return function(e,t){return{background:t.getStyleOfSingleCellChart(e.background,e.dataRange).background,title:e.title??{text:""},minValue:{value:0,label:""},maxValue:{value:100,label:""},gaugeValue:{value:0,label:Js.GenericError},inflectionValues:[],colors:[]}}(e,t);c<l&&([l,c]=[c,l]);const h=e.sectionRule.lowerInflectionPoint,d=e.sectionRule.upperInflectionPoint,u=NI(e.sheetId,e.sectionRule.lowerInflectionPoint,l,c,t),g=NI(e.sheetId,e.sectionRule.upperInflectionPoint,l,c,t),p=[],m=[];return void 0!==u&&(p.push({value:u,label:bn(u,{locale:o,format:r}),operator:h.operator}),m.push(s.lowerColor)),void 0!==g&&g!==u&&(p.push({value:g,label:bn(g,{locale:o,format:r}),operator:d.operator}),m.push(s.middleColor)),void 0!==g&&void 0!==u&&u>g&&(p.reverse(),m.reverse()),m.push(s.upperColor),{background:t.getStyleOfSingleCellChart(e.background,a).background,title:{...e.title,text:Vo(e.title.text??"")},minValue:{value:l,label:bn(l,{locale:o,format:r})},maxValue:{value:c,label:bn(c,{locale:o,format:r})},gaugeValue:void 0!==i&&n?{value:i,label:n}:void 0,inflectionValues:p,colors:m}}function NI(e,t,o,s,i){const n=kI(e,t.value,i);if(void 0===n)return;return Ze("number"===t.type?n:o+(s-o)*n/100,o,s)}function kI(e,t,o){const s=o.evaluateFormula(e,t);return Ws(s)?void 0:pi(s,o.getLocale())}function VI(e,t){return{...e,rangeMin:t(e.rangeMin),rangeMax:t(e.rangeMax),lowerInflectionPoint:{...e.lowerInflectionPoint,value:t(e.lowerInflectionPoint.value)},upperInflectionPoint:{...e.upperInflectionPoint,value:t(e.upperInflectionPoint.value)}}}class LI extends $C{dataSets;labelRange;background;legendPosition;type="geo";dataSetsHaveTitle;dataSetDesign;colorScale;missingValueColor;region;constructor(e,t,o){super(e,t,o),this.dataSets=YS(o,e.dataSets,t,e.dataSetsHaveTitle),this.labelRange=fa(o,t,e.labelRange),this.background=e.background,this.legendPosition=e.legendPosition,this.dataSetsHaveTitle=e.dataSetsHaveTitle,this.dataSetDesign=e.dataSets,this.colorScale=e.colorScale,this.missingValueColor=e.missingValueColor,this.region=e.region}static transformDefinition(e,t,o){return QS(e,t,o)}static validateChartDefinition(e,t){return e.checkValidations(t,oC,sC)}static getDefinitionFromContextCreation(e){return{background:e.background,dataSets:e.range??[],dataSetsHaveTitle:e.dataSetsHaveTitle??!1,legendPosition:e.legendPosition??"top",title:e.title||{text:""},type:"geo",labelRange:e.auxiliaryRange||void 0}}getContextCreation(){const e=[];for(const[t,o]of this.dataSets.entries())e.push({...this.dataSetDesign?.[t],dataRange:this.getters.getRangeString(o.dataRange,this.sheetId)});return{...this,range:e,auxiliaryRange:this.labelRange?this.getters.getRangeString(this.labelRange,this.sheetId):void 0}}duplicateInDuplicatedSheet(e){const t=qS(this.sheetId,e,this.dataSets),o=ZS(this.sheetId,e,this.labelRange),s=this.getDefinitionWithSpecificDataSets(t,o,e);return new LI(s,e,this.getters)}copyInSheetId(e){const t=this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange,e);return new LI(t,e,this.getters)}getDefinition(){return this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange)}getDefinitionWithSpecificDataSets(e,t,o){const s=[];for(const[t,i]of e.entries())s.push({...this.dataSetDesign?.[t],dataRange:this.getters.getRangeString(i.dataRange,o||this.sheetId)});return{type:"geo",dataSetsHaveTitle:!!e.length&&Boolean(e[0].labelCell),background:this.background,dataSets:s,legendPosition:this.legendPosition,labelRange:t?this.getters.getRangeString(t,o||this.sheetId):void 0,title:this.title,colorScale:this.colorScale,missingValueColor:this.missingValueColor,region:this.region}}getDefinitionForExcel(){}updateRanges(e){const{dataSets:t,labelRange:o,isStale:s}=WS(this.getters,e,this.dataSets,this.labelRange);if(!s)return this;const i=this.getDefinitionWithSpecificDataSets(t,o);return new LI(i,this.sheetId,this.getters)}}class HI extends $C{dataSets;labelRange;background;legendPosition;labelsAsText;stacked;aggregated;type="line";dataSetsHaveTitle;cumulative;dataSetDesign;axesDesign;fillArea;showValues;hideDataMarkers;constructor(e,t,o){super(e,t,o),this.dataSets=YS(this.getters,e.dataSets,t,e.dataSetsHaveTitle),this.labelRange=fa(this.getters,t,e.labelRange),this.background=e.background,this.legendPosition=e.legendPosition,this.labelsAsText=e.labelsAsText,this.stacked=e.stacked,this.aggregated=e.aggregated,this.dataSetsHaveTitle=e.dataSetsHaveTitle,this.cumulative=e.cumulative,this.dataSetDesign=e.dataSets,this.axesDesign=e.axesDesign,this.fillArea=e.fillArea,this.showValues=e.showValues,this.hideDataMarkers=e.hideDataMarkers}static validateChartDefinition(e,t){return e.checkValidations(t,oC,sC)}static transformDefinition(e,t,o){return QS(e,t,o)}static getDefinitionFromContextCreation(e){return{background:e.background,dataSets:e.range??[],dataSetsHaveTitle:e.dataSetsHaveTitle??!1,labelsAsText:e.labelsAsText??!1,legendPosition:e.legendPosition??"top",title:e.title||{text:""},type:"line",labelRange:e.auxiliaryRange||void 0,stacked:e.stacked??!1,aggregated:e.aggregated??!1,cumulative:e.cumulative??!1,axesDesign:e.axesDesign,fillArea:e.fillArea,showValues:e.showValues,hideDataMarkers:e.hideDataMarkers}}getDefinition(){return this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange)}getDefinitionWithSpecificDataSets(e,t,o){const s=[];for(const[t,i]of e.entries())s.push({...this.dataSetDesign?.[t],dataRange:this.getters.getRangeString(i.dataRange,o||this.sheetId)});return{type:"line",dataSetsHaveTitle:!!e.length&&Boolean(e[0].labelCell),background:this.background,dataSets:s,legendPosition:this.legendPosition,labelRange:t?this.getters.getRangeString(t,o||this.sheetId):void 0,title:this.title,labelsAsText:this.labelsAsText,stacked:this.stacked,aggregated:this.aggregated,cumulative:this.cumulative,axesDesign:this.axesDesign,fillArea:this.fillArea,showValues:this.showValues,hideDataMarkers:this.hideDataMarkers}}getContextCreation(){const e=[];for(const[t,o]of this.dataSets.entries())e.push({...this.dataSetDesign?.[t],dataRange:this.getters.getRangeString(o.dataRange,this.sheetId)});return{...this,range:e,auxiliaryRange:this.labelRange?this.getters.getRangeString(this.labelRange,this.sheetId):void 0}}updateRanges(e){const{dataSets:t,labelRange:o,isStale:s}=WS(this.getters,e,this.dataSets,this.labelRange);if(!s)return this;const i=this.getDefinitionWithSpecificDataSets(t,o);return new HI(i,this.sheetId,this.getters)}getDefinitionForExcel(){const e=this.dataSets.map((e=>KS(this.getters,e))).filter((e=>""!==e.range&&e.range!==Js.InvalidReference)),t=JS(this.getters,this.labelRange,iC(this.labelRange,this.dataSets[0],this.dataSetsHaveTitle)),o=this.getDefinition();return{...o,backgroundColor:wy(this.background||m),fontColor:wy(eC(this.background)),dataSets:e,labelRange:t,verticalAxis:nC(o)}}duplicateInDuplicatedSheet(e){const t=qS(this.sheetId,e,this.dataSets),o=ZS(this.sheetId,e,this.labelRange),s=this.getDefinitionWithSpecificDataSets(t,o,e);return new HI(s,e,this.getters)}copyInSheetId(e){const t=this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange,e);return new HI(t,e,this.getters)}}function UI(e,t){const o=e.getDefinition(),s=sw(o,e.dataSets,e.labelRange,t);return{chartJsConfig:{type:"line",data:{labels:s.labels,datasets:SC(o,s)},options:{...Ly,layout:Ew(0,s),scales:Lw(o,s),plugins:{title:tI(o),legend:Aw(o),tooltip:rI(0,s),chartShowValuesPlugin:Kw(o,s)}}},background:e.background||m}}class BI extends $C{dataSets;labelRange;background;legendPosition;type="pie";aggregated;dataSetsHaveTitle;isDoughnut;showValues;pieHolePercentage;constructor(e,t,o){super(e,t,o),this.dataSets=YS(o,e.dataSets,t,e.dataSetsHaveTitle),this.labelRange=fa(o,t,e.labelRange),this.background=e.background,this.legendPosition=e.legendPosition,this.aggregated=e.aggregated,this.dataSetsHaveTitle=e.dataSetsHaveTitle,this.isDoughnut=e.isDoughnut,this.showValues=e.showValues,this.pieHolePercentage=e.pieHolePercentage}static transformDefinition(e,t,o){return QS(e,t,o)}static validateChartDefinition(e,t){return e.checkValidations(t,oC,sC)}static getDefinitionFromContextCreation(e){return{background:e.background,dataSets:e.range??[],dataSetsHaveTitle:e.dataSetsHaveTitle??!1,legendPosition:e.legendPosition??"top",title:e.title||{text:""},type:"pie",labelRange:e.auxiliaryRange||void 0,aggregated:e.aggregated??!1,isDoughnut:!1,showValues:e.showValues}}getDefinition(){return this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange)}getContextCreation(){return{...this,range:this.dataSets.map((e=>({dataRange:this.getters.getRangeString(e.dataRange,this.sheetId)}))),auxiliaryRange:this.labelRange?this.getters.getRangeString(this.labelRange,this.sheetId):void 0}}getDefinitionWithSpecificDataSets(e,t,o){return{type:"pie",dataSetsHaveTitle:!!e.length&&Boolean(e[0].labelCell),background:this.background,dataSets:e.map((e=>({dataRange:this.getters.getRangeString(e.dataRange,o||this.sheetId)}))),legendPosition:this.legendPosition,labelRange:t?this.getters.getRangeString(t,o||this.sheetId):void 0,title:this.title,aggregated:this.aggregated,isDoughnut:this.isDoughnut,showValues:this.showValues,pieHolePercentage:this.pieHolePercentage}}duplicateInDuplicatedSheet(e){const t=qS(this.sheetId,e,this.dataSets),o=ZS(this.sheetId,e,this.labelRange),s=this.getDefinitionWithSpecificDataSets(t,o,e);return new BI(s,e,this.getters)}copyInSheetId(e){const t=this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange,e);return new BI(t,e,this.getters)}getDefinitionForExcel(){const e=this.dataSets.map((e=>KS(this.getters,e))).filter((e=>""!==e.range&&e.range!==Js.InvalidReference)),t=JS(this.getters,this.labelRange,iC(this.labelRange,this.dataSets[0],this.dataSetsHaveTitle));return{...this.getDefinition(),backgroundColor:wy(this.background||m),fontColor:wy(eC(this.background)),dataSets:e,labelRange:t}}updateRanges(e){const{dataSets:t,labelRange:o,isStale:s}=WS(this.getters,e,this.dataSets,this.labelRange);if(!s)return this;const i=this.getDefinitionWithSpecificDataSets(t,o);return new BI(i,this.sheetId,this.getters)}}function zI(e,t){const o=e.getDefinition(),s=iw(o,e.dataSets,e.labelRange,t);return{chartJsConfig:{type:e.isDoughnut?"doughnut":"pie",data:{labels:s.labels,datasets:yC(o,s)},options:{...Ly,cutout:e.isDoughnut&&void 0!==o.pieHolePercentage?o.pieHolePercentage+"%":void 0,layout:Ew(0,s),plugins:{title:tI(o),legend:Dw(o,s),tooltip:aI(0,s),chartShowValuesPlugin:Kw(o,s)}}},background:e.background||m}}class $I extends $C{dataSets;labelRange;background;legendPosition;aggregated;type="pyramid";dataSetsHaveTitle;dataSetDesign;axesDesign;horizontal=!0;stacked=!0;showValues;constructor(e,t,o){super(e,t,o),this.dataSets=YS(o,e.dataSets,t,e.dataSetsHaveTitle),this.labelRange=fa(o,t,e.labelRange),this.background=e.background,this.legendPosition=e.legendPosition,this.aggregated=e.aggregated,this.dataSetsHaveTitle=e.dataSetsHaveTitle,this.dataSetDesign=e.dataSets,this.axesDesign=e.axesDesign,this.showValues=e.showValues}static transformDefinition(e,t,o){return QS(e,t,o)}static validateChartDefinition(e,t){return e.checkValidations(t,oC,sC)}static getDefinitionFromContextCreation(e){return{background:e.background,dataSets:e.range??[],dataSetsHaveTitle:e.dataSetsHaveTitle??!1,aggregated:e.aggregated??!1,legendPosition:e.legendPosition??"top",title:e.title||{text:""},type:"pyramid",labelRange:e.auxiliaryRange||void 0,axesDesign:e.axesDesign,horizontal:!0,stacked:!0,showValues:e.showValues}}getContextCreation(){const e=[];for(const[t,o]of this.dataSets.entries())e.push({...this.dataSetDesign?.[t],dataRange:this.getters.getRangeString(o.dataRange,this.sheetId)});return{...this,range:e,auxiliaryRange:this.labelRange?this.getters.getRangeString(this.labelRange,this.sheetId):void 0}}duplicateInDuplicatedSheet(e){const t=qS(this.sheetId,e,this.dataSets),o=ZS(this.sheetId,e,this.labelRange),s=this.getDefinitionWithSpecificDataSets(t,o,e);return new $I(s,e,this.getters)}copyInSheetId(e){const t=this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange,e);return new $I(t,e,this.getters)}getDefinition(){return this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange)}getDefinitionWithSpecificDataSets(e,t,o){const s=[];for(const[t,i]of e.entries())s.push({...this.dataSetDesign?.[t],dataRange:this.getters.getRangeString(i.dataRange,o||this.sheetId)});return{type:"pyramid",dataSetsHaveTitle:!!e.length&&Boolean(e[0].labelCell),background:this.background,dataSets:s,legendPosition:this.legendPosition,labelRange:t?this.getters.getRangeString(t,o||this.sheetId):void 0,title:this.title,aggregated:this.aggregated,axesDesign:this.axesDesign,horizontal:!0,stacked:!0,showValues:this.showValues}}getDefinitionForExcel(){}updateRanges(e){const{dataSets:t,labelRange:o,isStale:s}=WS(this.getters,e,this.dataSets,this.labelRange);if(!s)return this;const i=this.getDefinitionWithSpecificDataSets(t,o);return new $I(i,this.sheetId,this.getters)}}class GI extends $C{dataSets;labelRange;background;legendPosition;stacked;aggregated;type="radar";dataSetsHaveTitle;dataSetDesign;fillArea;showValues;hideDataMarkers;constructor(e,t,o){super(e,t,o),this.dataSets=YS(o,e.dataSets,t,e.dataSetsHaveTitle),this.labelRange=fa(o,t,e.labelRange),this.background=e.background,this.legendPosition=e.legendPosition,this.stacked=e.stacked,this.aggregated=e.aggregated,this.dataSetsHaveTitle=e.dataSetsHaveTitle,this.dataSetDesign=e.dataSets,this.fillArea=e.fillArea,this.showValues=e.showValues,this.hideDataMarkers=e.hideDataMarkers}static transformDefinition(e,t,o){return QS(e,t,o)}static validateChartDefinition(e,t){return e.checkValidations(t,oC,sC)}static getDefinitionFromContextCreation(e){return{background:e.background,dataSets:e.range??[],dataSetsHaveTitle:e.dataSetsHaveTitle??!1,stacked:e.stacked??!1,aggregated:e.aggregated??!1,legendPosition:e.legendPosition??"top",title:e.title||{text:""},type:"radar",labelRange:e.auxiliaryRange||void 0,fillArea:e.fillArea??!1,showValues:e.showValues??!1,hideDataMarkers:e.hideDataMarkers}}getContextCreation(){const e=[];for(const[t,o]of this.dataSets.entries())e.push({...this.dataSetDesign?.[t],dataRange:this.getters.getRangeString(o.dataRange,this.sheetId)});return{...this,range:e,auxiliaryRange:this.labelRange?this.getters.getRangeString(this.labelRange,this.sheetId):void 0}}duplicateInDuplicatedSheet(e){const t=qS(this.sheetId,e,this.dataSets),o=ZS(this.sheetId,e,this.labelRange),s=this.getDefinitionWithSpecificDataSets(t,o,e);return new GI(s,e,this.getters)}copyInSheetId(e){const t=this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange,e);return new GI(t,e,this.getters)}getDefinition(){return this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange)}getDefinitionWithSpecificDataSets(e,t,o){const s=[];for(const[t,i]of e.entries())s.push({...this.dataSetDesign?.[t],dataRange:this.getters.getRangeString(i.dataRange,o||this.sheetId)});return{type:"radar",dataSetsHaveTitle:!!e.length&&Boolean(e[0].labelCell),background:this.background,dataSets:s,legendPosition:this.legendPosition,labelRange:t?this.getters.getRangeString(t,o||this.sheetId):void 0,title:this.title,stacked:this.stacked,aggregated:this.aggregated,fillArea:this.fillArea,showValues:this.showValues,hideDataMarkers:this.hideDataMarkers}}getDefinitionForExcel(){if(this.aggregated)return;const e=this.dataSets.map((e=>KS(this.getters,e))).filter((e=>""!==e.range&&e.range!==Js.InvalidReference)),t=JS(this.getters,this.labelRange,iC(this.labelRange,this.dataSets[0],this.dataSetsHaveTitle));return{...this.getDefinition(),backgroundColor:wy(this.background||m),fontColor:wy(eC(this.background)),dataSets:e,labelRange:t}}updateRanges(e){const{dataSets:t,labelRange:o,isStale:s}=WS(this.getters,e,this.dataSets,this.labelRange);if(!s)return this;const i=this.getDefinitionWithSpecificDataSets(t,o);return new GI(i,this.sheetId,this.getters)}}class WI extends $C{dataSets;labelRange;background;legendPosition;labelsAsText;aggregated;type="scatter";dataSetsHaveTitle;dataSetDesign;axesDesign;showValues;constructor(e,t,o){super(e,t,o),this.dataSets=YS(this.getters,e.dataSets,t,e.dataSetsHaveTitle),this.labelRange=fa(this.getters,t,e.labelRange),this.background=e.background,this.legendPosition=e.legendPosition,this.labelsAsText=e.labelsAsText,this.aggregated=e.aggregated,this.dataSetsHaveTitle=e.dataSetsHaveTitle,this.dataSetDesign=e.dataSets,this.axesDesign=e.axesDesign,this.showValues=e.showValues}static validateChartDefinition(e,t){return e.checkValidations(t,oC,sC)}static transformDefinition(e,t,o){return QS(e,t,o)}static getDefinitionFromContextCreation(e){return{background:e.background,dataSets:e.range??[],dataSetsHaveTitle:e.dataSetsHaveTitle??!1,labelsAsText:e.labelsAsText??!1,legendPosition:e.legendPosition??"top",title:e.title||{text:""},type:"scatter",labelRange:e.auxiliaryRange||void 0,aggregated:e.aggregated??!1,axesDesign:e.axesDesign,showValues:e.showValues}}getDefinition(){return this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange)}getDefinitionWithSpecificDataSets(e,t,o){const s=[];for(const[t,i]of e.entries())s.push({...this.dataSetDesign?.[t],dataRange:this.getters.getRangeString(i.dataRange,o||this.sheetId)});return{type:"scatter",dataSetsHaveTitle:!!e.length&&Boolean(e[0].labelCell),background:this.background,dataSets:s,legendPosition:this.legendPosition,labelRange:t?this.getters.getRangeString(t,o||this.sheetId):void 0,title:this.title,labelsAsText:this.labelsAsText,aggregated:this.aggregated,axesDesign:this.axesDesign,showValues:this.showValues}}getContextCreation(){const e=[];for(const[t,o]of this.dataSets.entries())e.push({...this.dataSetDesign?.[t],dataRange:this.getters.getRangeString(o.dataRange,this.sheetId)});return{...this,range:e,auxiliaryRange:this.labelRange?this.getters.getRangeString(this.labelRange,this.sheetId):void 0}}updateRanges(e){const{dataSets:t,labelRange:o,isStale:s}=WS(this.getters,e,this.dataSets,this.labelRange);if(!s)return this;const i=this.getDefinitionWithSpecificDataSets(t,o);return new WI(i,this.sheetId,this.getters)}getDefinitionForExcel(){if(this.aggregated)return;const e=this.dataSets.map((e=>KS(this.getters,e))).filter((e=>""!==e.range)),t=JS(this.getters,this.labelRange,iC(this.labelRange,this.dataSets[0],this.dataSetsHaveTitle)),o=this.getDefinition();return{...o,backgroundColor:wy(this.background||m),fontColor:wy(eC(this.background)),dataSets:e,labelRange:t,verticalAxis:nC(o)}}duplicateInDuplicatedSheet(e){const t=qS(this.sheetId,e,this.dataSets),o=ZS(this.sheetId,e,this.labelRange),s=this.getDefinitionWithSpecificDataSets(t,o,e);return new WI(s,e,this.getters)}copyInSheetId(e){const t=this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange,e);return new WI(t,e,this.getters)}}class qI extends $C{dataSets;labelRange;background;legendPosition;type="sunburst";dataSetsHaveTitle;showValues;showLabels;valuesDesign;groupColors;pieHolePercentage;constructor(e,t,o){super(e,t,o),this.dataSets=YS(o,e.dataSets,t,e.dataSetsHaveTitle),this.labelRange=fa(o,t,e.labelRange),this.background=e.background,this.legendPosition=e.legendPosition,this.dataSetsHaveTitle=e.dataSetsHaveTitle,this.showValues=e.showValues,this.showLabels=e.showLabels,this.valuesDesign=e.valuesDesign,this.groupColors=e.groupColors,this.pieHolePercentage=e.pieHolePercentage}static transformDefinition(e,t,o){return QS(e,t,o)}static validateChartDefinition(e,t){return e.checkValidations(t,oC,sC)}static getDefinitionFromContextCreation(e){const t=[];return e.hierarchicalRanges?.length?t.push(...e.hierarchicalRanges):e.auxiliaryRange&&t.push({...e.range?.[0],dataRange:e.auxiliaryRange}),{background:e.background,dataSets:t,dataSetsHaveTitle:e.dataSetsHaveTitle??!1,legendPosition:e.legendPosition??"top",title:e.title||{text:""},type:"sunburst",labelRange:e.range?.[0]?.dataRange,showValues:e.showValues,showLabels:e.showLabels,valuesDesign:e.valuesDesign,groupColors:e.groupColors}}getDefinition(){return this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange)}getContextCreation(){const e=this.dataSets.at(-1)?.dataRange;return{...this,range:this.labelRange?[{dataRange:this.getters.getRangeString(this.labelRange,this.sheetId)}]:[],auxiliaryRange:e?this.getters.getRangeString(e,this.sheetId):void 0,hierarchicalRanges:this.dataSets.map((e=>({dataRange:this.getters.getRangeString(e.dataRange,this.sheetId)})))}}getDefinitionWithSpecificDataSets(e,t,o){return{type:"sunburst",dataSetsHaveTitle:!!e.length&&Boolean(e[0].labelCell),background:this.background,dataSets:e.map((e=>({dataRange:this.getters.getRangeString(e.dataRange,o||this.sheetId)}))),legendPosition:this.legendPosition,labelRange:t?this.getters.getRangeString(t,o||this.sheetId):void 0,title:this.title,showValues:this.showValues,showLabels:this.showLabels,valuesDesign:this.valuesDesign,groupColors:this.groupColors,pieHolePercentage:this.pieHolePercentage}}duplicateInDuplicatedSheet(e){const t=qS(this.sheetId,e,this.dataSets),o=ZS(this.sheetId,e,this.labelRange),s=this.getDefinitionWithSpecificDataSets(t,o,e);return new qI(s,e,this.getters)}copyInSheetId(e){const t=this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange,e);return new qI(t,e,this.getters)}getDefinitionForExcel(){}updateRanges(e){const{dataSets:t,labelRange:o,isStale:s}=WS(this.getters,e,this.dataSets,this.labelRange);if(!s)return this;const i=this.getDefinitionWithSpecificDataSets(t,o);return new qI(i,this.sheetId,this.getters)}}class ZI extends $C{static defaults={background:m,legendPosition:"top",dataSetsHaveTitle:!1,showHeaders:!0,headersColor:"#000000"};dataSets;labelRange;background;legendPosition;type="treemap";dataSetsHaveTitle;showHeaders;headerDesign;showValues;showLabels;valuesDesign;coloringOptions;constructor(e,t,o){super(e,t,o),this.dataSets=YS(o,e.dataSets,t,e.dataSetsHaveTitle),this.labelRange=fa(o,t,e.labelRange),this.background=e.background,this.legendPosition=e.legendPosition,this.dataSetsHaveTitle=e.dataSetsHaveTitle,this.showHeaders=e.showHeaders,this.headerDesign=e.headerDesign,this.showValues=e.showValues,this.showLabels=e.showLabels,this.valuesDesign=e.valuesDesign,this.coloringOptions=e.coloringOptions}static transformDefinition(e,t,o){return QS(e,t,o)}static validateChartDefinition(e,t){return e.checkValidations(t,oC,sC)}static getDefinitionFromContextCreation(e){const t=[];return e.hierarchicalRanges?.length?t.push(...e.hierarchicalRanges):e.auxiliaryRange&&t.push({...e.range?.[0],dataRange:e.auxiliaryRange}),{background:e.background,dataSets:t,dataSetsHaveTitle:e.dataSetsHaveTitle??!1,legendPosition:e.legendPosition??"top",title:e.title||{text:""},type:"treemap",labelRange:e.range?.[0]?.dataRange,showValues:e.showValues,showHeaders:e.showHeaders,headerDesign:e.headerDesign,showLabels:e.showLabels,valuesDesign:e.valuesDesign,coloringOptions:e.treemapColoringOptions}}getContextCreation(){const e=this.dataSets.at(-1)?.dataRange;return{...this,range:this.labelRange?[{dataRange:this.getters.getRangeString(this.labelRange,this.sheetId)}]:[],auxiliaryRange:e?this.getters.getRangeString(e,this.sheetId):void 0,hierarchicalRanges:this.dataSets.map((e=>({dataRange:this.getters.getRangeString(e.dataRange,this.sheetId)})))}}duplicateInDuplicatedSheet(e){const t=qS(this.sheetId,e,this.dataSets),o=ZS(this.sheetId,e,this.labelRange),s=this.getDefinitionWithSpecificDataSets(t,o,e);return new ZI(s,e,this.getters)}copyInSheetId(e){const t=this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange,e);return new ZI(t,e,this.getters)}getDefinition(){return this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange)}getDefinitionWithSpecificDataSets(e,t,o){const s=e.map((e=>({dataRange:this.getters.getRangeString(e.dataRange,o||this.sheetId)})));return{type:"treemap",dataSetsHaveTitle:!!e.length&&Boolean(e[0].labelCell),background:this.background,dataSets:s,legendPosition:this.legendPosition,labelRange:t?this.getters.getRangeString(t,o||this.sheetId):void 0,title:this.title,showValues:this.showValues,showHeaders:this.showHeaders,headerDesign:this.headerDesign,showLabels:this.showLabels,valuesDesign:this.valuesDesign,coloringOptions:this.coloringOptions}}getDefinitionForExcel(){}updateRanges(e){const{dataSets:t,labelRange:o,isStale:s}=WS(this.getters,e,this.dataSets,this.labelRange);if(!s)return this;const i=this.getDefinitionWithSpecificDataSets(t,o);return new ZI(i,this.sheetId,this.getters)}}class jI extends $C{dataSets;labelRange;background;verticalAxisPosition;legendPosition;aggregated;type="waterfall";dataSetsHaveTitle;showSubTotals;firstValueAsSubtotal;showConnectorLines;positiveValuesColor;negativeValuesColor;subTotalValuesColor;dataSetDesign;axesDesign;showValues;constructor(e,t,o){super(e,t,o),this.dataSets=YS(o,e.dataSets,t,e.dataSetsHaveTitle),this.labelRange=fa(o,t,e.labelRange),this.background=e.background,this.verticalAxisPosition=e.verticalAxisPosition,this.legendPosition=e.legendPosition,this.aggregated=e.aggregated,this.dataSetsHaveTitle=e.dataSetsHaveTitle,this.showSubTotals=e.showSubTotals,this.showConnectorLines=e.showConnectorLines,this.positiveValuesColor=e.positiveValuesColor,this.negativeValuesColor=e.negativeValuesColor,this.subTotalValuesColor=e.subTotalValuesColor,this.firstValueAsSubtotal=e.firstValueAsSubtotal,this.dataSetDesign=e.dataSets,this.axesDesign=e.axesDesign,this.showValues=e.showValues}static transformDefinition(e,t,o){return QS(e,t,o)}static validateChartDefinition(e,t){return e.checkValidations(t,oC,sC)}static getDefinitionFromContextCreation(e){return{background:e.background,dataSets:e.range?e.range:[],dataSetsHaveTitle:e.dataSetsHaveTitle??!1,aggregated:e.aggregated??!1,legendPosition:e.legendPosition??"top",title:e.title||{text:""},type:"waterfall",verticalAxisPosition:"left",labelRange:e.auxiliaryRange||void 0,showSubTotals:e.showSubTotals??!1,showConnectorLines:e.showConnectorLines??!0,firstValueAsSubtotal:e.firstValueAsSubtotal??!1,axesDesign:e.axesDesign,showValues:e.showValues}}getContextCreation(){const e=[];for(const[t,o]of this.dataSets.entries())e.push({...this.dataSetDesign?.[t],dataRange:this.getters.getRangeString(o.dataRange,this.sheetId)});return{...this,range:e,auxiliaryRange:this.labelRange?this.getters.getRangeString(this.labelRange,this.sheetId):void 0}}duplicateInDuplicatedSheet(e){const t=qS(this.sheetId,e,this.dataSets),o=ZS(this.sheetId,e,this.labelRange),s=this.getDefinitionWithSpecificDataSets(t,o,e);return new jI(s,e,this.getters)}copyInSheetId(e){const t=this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange,e);return new jI(t,e,this.getters)}getDefinition(){return this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange)}getDefinitionWithSpecificDataSets(e,t,o){const s=[];for(const[t,i]of e.entries())s.push({...this.dataSetDesign?.[t],dataRange:this.getters.getRangeString(i.dataRange,o||this.sheetId)});return{type:"waterfall",dataSetsHaveTitle:!!e.length&&Boolean(e[0].labelCell),background:this.background,dataSets:s,legendPosition:this.legendPosition,verticalAxisPosition:this.verticalAxisPosition,labelRange:t?this.getters.getRangeString(t,o||this.sheetId):void 0,title:this.title,aggregated:this.aggregated,showSubTotals:this.showSubTotals,showConnectorLines:this.showConnectorLines,positiveValuesColor:this.positiveValuesColor,negativeValuesColor:this.negativeValuesColor,subTotalValuesColor:this.subTotalValuesColor,firstValueAsSubtotal:this.firstValueAsSubtotal,axesDesign:this.axesDesign,showValues:this.showValues}}getDefinitionForExcel(){}updateRanges(e){const{dataSets:t,labelRange:o,isStale:s}=WS(this.getters,e,this.dataSets,this.labelRange);if(!s)return this;const i=this.getDefinitionWithSpecificDataSets(t,o);return new jI(i,this.sheetId,this.getters)}}function YI(e,t){const o=e.getDefinition(),s=tw(o,e.dataSets,e.labelRange,t),{labels:i,datasets:n}=bC(o,s);return{chartJsConfig:{type:"bar",data:{labels:i,datasets:n},options:{...Ly,layout:Ew(0,s),scales:Uw(o,s),plugins:{title:tI(o),legend:Fw(o),tooltip:lI(0,s),chartShowValuesPlugin:eI(o,s),waterfallLinesPlugin:{showConnectorLines:o.showConnectorLines}}}},background:e.background||m}}const XI=new n;XI.add("bar",{match:e=>"bar"===e,createChart:(e,t,o)=>new bI(e,t,o),getChartRuntime:SI,validateChartDefinition:bI.validateChartDefinition,transformDefinition:bI.transformDefinition,getChartDefinitionFromContextCreation:bI.getDefinitionFromContextCreation,sequence:10}),XI.add("combo",{match:e=>"combo"===e,createChart:(e,t,o)=>new TI(e,t,o),getChartRuntime:function(e,t){const o=e.getDefinition(),s=tw(o,e.dataSets,e.labelRange,t);return{chartJsConfig:{type:"bar",data:{labels:s.labels,datasets:wC(o,s)},options:{...Ly,layout:Ew(0,s),scales:Vw(o,s),plugins:{title:tI(o),legend:Ow(o),tooltip:nI(o,s),chartShowValuesPlugin:Kw(o,s)}}},background:e.background||m}},validateChartDefinition:TI.validateChartDefinition,transformDefinition:TI.transformDefinition,getChartDefinitionFromContextCreation:TI.getDefinitionFromContextCreation,sequence:15}),XI.add("line",{match:e=>"line"===e,createChart:(e,t,o)=>new HI(e,t,o),getChartRuntime:UI,validateChartDefinition:HI.validateChartDefinition,transformDefinition:HI.transformDefinition,getChartDefinitionFromContextCreation:HI.getDefinitionFromContextCreation,sequence:20}),XI.add("pie",{match:e=>"pie"===e,createChart:(e,t,o)=>new BI(e,t,o),getChartRuntime:zI,validateChartDefinition:BI.validateChartDefinition,transformDefinition:BI.transformDefinition,getChartDefinitionFromContextCreation:BI.getDefinitionFromContextCreation,sequence:30}),XI.add("scorecard",{match:e=>"scorecard"===e,createChart:(e,t,o)=>new XC(e,t,o),getChartRuntime:JC,validateChartDefinition:XC.validateChartDefinition,transformDefinition:XC.transformDefinition,getChartDefinitionFromContextCreation:XC.getDefinitionFromContextCreation,sequence:40}),XI.add("gauge",{match:e=>"gauge"===e,createChart:(e,t,o)=>new PI(e,t,o),getChartRuntime:MI,validateChartDefinition:PI.validateChartDefinition,transformDefinition:PI.transformDefinition,getChartDefinitionFromContextCreation:PI.getDefinitionFromContextCreation,sequence:50}),XI.add("scatter",{match:e=>"scatter"===e,createChart:(e,t,o)=>new WI(e,t,o),getChartRuntime:function(e,t){const o=e.getDefinition(),s=sw(o,e.dataSets,e.labelRange,t);return{chartJsConfig:{type:"line",data:{labels:s.labels,datasets:CC(o,s)},options:{...Ly,layout:Ew(0,s),scales:Hw(o,s),plugins:{title:tI(o),legend:_w(o),tooltip:rI(0,s),chartShowValuesPlugin:Kw(o,s)}}},background:e.background||m}},validateChartDefinition:WI.validateChartDefinition,transformDefinition:WI.transformDefinition,getChartDefinitionFromContextCreation:WI.getDefinitionFromContextCreation,sequence:60}),XI.add("waterfall",{match:e=>"waterfall"===e,createChart:(e,t,o)=>new jI(e,t,o),getChartRuntime:YI,validateChartDefinition:jI.validateChartDefinition,transformDefinition:jI.transformDefinition,getChartDefinitionFromContextCreation:jI.getDefinitionFromContextCreation,sequence:70}),XI.add("pyramid",{match:e=>"pyramid"===e,createChart:(e,t,o)=>new $I(e,t,o),getChartRuntime:function(e,t){const o=e.getDefinition(),s=ow(o,e.dataSets,e.labelRange,t);return{chartJsConfig:{type:"bar",data:{labels:s.labels,datasets:vC(o,s)},options:{...Ly,indexAxis:"y",layout:Ew(0,s),scales:Bw(o,s),plugins:{title:tI(o),legend:Tw(o),tooltip:cI(o,s),chartShowValuesPlugin:Qw(o,s)}}},background:e.background||m}},validateChartDefinition:$I.validateChartDefinition,transformDefinition:$I.transformDefinition,getChartDefinitionFromContextCreation:$I.getDefinitionFromContextCreation,sequence:80,dataSeriesLimit:2}),XI.add("radar",{match:e=>"radar"===e,createChart:(e,t,o)=>new GI(e,t,o),getChartRuntime:function(e,t){const o=e.getDefinition(),s=nw(o,e.dataSets,e.labelRange,t);return{chartJsConfig:{type:"radar",data:{labels:s.labels,datasets:IC(o,s)},options:{...Ly,layout:Ew(0,s),scales:zw(o,s),plugins:{title:tI(o),legend:Pw(o),tooltip:hI(0,s),chartShowValuesPlugin:Kw(o,s)}}},background:e.background||m}},validateChartDefinition:GI.validateChartDefinition,transformDefinition:GI.transformDefinition,getChartDefinitionFromContextCreation:GI.getDefinitionFromContextCreation,sequence:80}),XI.add("geo",{match:e=>"geo"===e,createChart:(e,t,o)=>new LI(e,t,o),getChartRuntime:function(e,t){const o=e.getDefinition(),s=rw(o,e.dataSets,e.labelRange,t);return{chartJsConfig:{type:"choropleth",data:{datasets:xC(o,s)},options:{...Ly,layout:Ew(0,s),scales:$w(o,s),plugins:{title:tI(o),tooltip:dI(0,s),legend:{display:!1}}}},background:e.background||m}},validateChartDefinition:LI.validateChartDefinition,transformDefinition:LI.transformDefinition,getChartDefinitionFromContextCreation:LI.getDefinitionFromContextCreation,sequence:90,dataSeriesLimit:1}),XI.add("funnel",{match:e=>"funnel"===e,createChart:(e,t,o)=>new AI(e,t,o),getChartRuntime:function(e,t){const o=e.getDefinition(),s=aw(o,e.dataSets,e.labelRange,t);return{chartJsConfig:{type:"funnel",data:{labels:s.labels,datasets:EC(o,s)},options:{...Ly,indexAxis:"y",layout:Ew(0,s),scales:Gw(0,s),plugins:{title:tI(o),legend:{display:!1},tooltip:uI(0,s),chartShowValuesPlugin:Kw(o,s)}}},background:e.background||m}},validateChartDefinition:AI.validateChartDefinition,transformDefinition:AI.transformDefinition,getChartDefinitionFromContextCreation:AI.getDefinitionFromContextCreation,sequence:100,dataSeriesLimit:1}),XI.add("sunburst",{match:e=>"sunburst"===e,createChart:(e,t,o)=>new qI(e,t,o),getChartRuntime:function(e,t){const o=e.getDefinition(),s=lw(o,e.dataSets,e.labelRange,t);return{chartJsConfig:{type:"doughnut",data:{datasets:TC(o,s)},options:{cutout:void 0===e.pieHolePercentage?"25%":`${e.pieHolePercentage}%`,...Ly,layout:Ew(0,s),plugins:{title:tI(o),legend:Mw(o),tooltip:gI(0,s),sunburstLabelsPlugin:Jw(o,s),sunburstHoverPlugin:{enabled:!0}}}},background:e.background||m}},validateChartDefinition:qI.validateChartDefinition,transformDefinition:qI.transformDefinition,getChartDefinitionFromContextCreation:qI.getDefinitionFromContextCreation,sequence:30}),XI.add("treemap",{match:e=>"treemap"===e,createChart:(e,t,o)=>new ZI(e,t,o),getChartRuntime:function(e,t){const o=e.getDefinition(),s=lw(o,e.dataSets,e.labelRange,t);return{chartJsConfig:{type:"treemap",data:{labels:s.labels,datasets:OC(o,s)},options:{...Ly,layout:Ew(0,s),plugins:{title:tI(o),legend:{display:!1},tooltip:pI(0,s)}}},background:e.background||m}},validateChartDefinition:ZI.validateChartDefinition,transformDefinition:ZI.transformDefinition,getChartDefinitionFromContextCreation:ZI.getDefinitionFromContextCreation,sequence:100});const KI=new n;KI.add("line",zC),KI.add("bar",zC),KI.add("combo",zC),KI.add("pie",zC),KI.add("gauge",EI),KI.add("scatter",zC),KI.add("scorecard",sy),KI.add("waterfall",zC),KI.add("pyramid",zC),KI.add("radar",zC),KI.add("geo",zC),KI.add("funnel",zC),KI.add("sunburst",zC),KI.add("treemap",zC);const JI={line:Vo("Line"),column:Vo("Column"),bar:Vo("Bar"),area:Vo("Area"),pie:Vo("Pie"),hierarchical:Vo("Hierarchical"),misc:Vo("Miscellaneous")},QI=new n;function ex(e){const t=XI.getAll().sort(((e,t)=>e.sequence-t.sequence));return function(o,s,i){const n=t.find((e=>e.match(s.type)));if(!n)throw new Error(`No builder for this chart: ${s.type}`);return n.createChart(s,i,e)}}function tx(e){const t=XI.getAll().sort(((e,t)=>e.sequence-t.sequence));return function(o){const s=t.find((e=>e.match(o.type)));if(!s)throw new Error("No runtime builder for this chart.");return s.getChartRuntime(o,e)}}function ox(e,t){const o=XI.getAll().find((e=>e.match(t.type)));if(!o)throw new Error("Unknown chart type.");return o.validateChartDefinition(e,t)}function sx(e,t,o){const s=XI.getAll().find((e=>e.match(t.type)));if(!s)throw new Error("Unknown chart type.");return s.transformDefinition(e,t,o)}function ix(e,t){const o=function(e,t){const o=e.getActiveSheetId(),s=wr(t).numberOfCols;if(t.top===t.bottom||s<=2)return;const i=e.getEvaluatedCell({sheetId:o,col:t.right,row:t.top}),n=i.type!==Ts.number,r=s=>{const i=e.getEvaluatedCellsInZone(o,{...t,left:s,right:s,top:t.top+(n?1:0)});return i.every((e=>e.type!==Ts.number))?"string":i.every((e=>e.type!==Ts.text))?"number":void 0};for(let e=t.left;e<t.right;e++){const o=r(e);if(e!==t.right&&"string"!==o)return;if(e===t.right&&"number"!==o)return}const a={...t,right:t.right-1},l={...t,left:t.right};return{title:{},dataSets:[{dataRange:dr(a)}],type:"sunburst",legendPosition:"none",labelRange:dr(l),dataSetsHaveTitle:n}}(t,e);if(o)return o;const s=t.getActiveSheetId();let i=e;const n=1===wr(e).numberOfCols;n||(i={...e,left:e.left+1});const r=dr(t.getUnboundedZone(s,i)),a=[{dataRange:r,yAxisId:"y"}],l=t.getCell({sheetId:s,col:e.left,row:e.top});if(1===Pr(e)&&l?.content)return{type:"scorecard",title:{},background:l.style?.fillColor||void 0,keyValue:dr(e),baselineMode:Ie,baselineColorUp:xe,baselineColorDown:Ee};const c=!!t.getEvaluatedCellsInZone(s,{...i,bottom:i.top}).find((e=>e.type!==Ts.empty&&e.type!==Ts.number));let h;n||(h=dr(t.getUnboundedZone(s,{...e,right:e.left})));const d=i.right===i.left?"none":"top",u={title:{},dataSets:a,labelsAsText:!1,stacked:!1,aggregated:!1,cumulative:!1,labelRange:h,type:"line",dataSetsHaveTitle:c,legendPosition:d},g=new HI(u,s,t);if(uw(u,g.dataSets,g.labelRange,t))return u;const p=YS(t,a,s,c);return n&&fw(t,p[0]).every((e=>"string"==typeof e&&!hi(e)))?{title:{},dataSets:[{dataRange:r}],aggregated:!0,labelRange:r,type:"pie",legendPosition:"top",dataSetsHaveTitle:!1}:{title:{},dataSets:a,labelRange:h,type:"bar",stacked:!1,aggregated:!1,dataSetsHaveTitle:c,legendPosition:d}}QI.add("line",{matcher:e=>"line"===e.type&&!e.stacked&&!e.fillArea,displayName:Vo("Line"),chartType:"line",chartSubtype:"line",subtypeDefinition:{stacked:!1,fillArea:!1},category:"line",preview:"o-spreadsheet-ChartPreview.LINE_CHART"}).add("stacked_line",{matcher:e=>"line"===e.type&&!e.fillArea&&!!e.stacked,displayName:Vo("Stacked Line"),chartType:"line",chartSubtype:"stacked_line",subtypeDefinition:{stacked:!0,fillArea:!1},category:"line",preview:"o-spreadsheet-ChartPreview.STACKED_LINE_CHART"}).add("area",{matcher:e=>"line"===e.type&&!e.stacked&&!!e.fillArea,displayName:Vo("Area"),chartType:"line",chartSubtype:"area",subtypeDefinition:{stacked:!1,fillArea:!0},category:"area",preview:"o-spreadsheet-ChartPreview.AREA_CHART"}).add("stacked_area",{matcher:e=>"line"===e.type&&e.stacked&&!!e.fillArea,displayName:Vo("Stacked Area"),chartType:"line",chartSubtype:"stacked_area",subtypeDefinition:{stacked:!0,fillArea:!0},category:"area",preview:"o-spreadsheet-ChartPreview.STACKED_AREA_CHART"}).add("scatter",{displayName:Vo("Scatter"),chartType:"scatter",chartSubtype:"scatter",category:"misc",preview:"o-spreadsheet-ChartPreview.SCATTER_CHART"}).add("column",{matcher:e=>"bar"===e.type&&!e.stacked&&!e.horizontal,displayName:Vo("Column"),chartType:"bar",chartSubtype:"column",subtypeDefinition:{stacked:!1,horizontal:!1},category:"column",preview:"o-spreadsheet-ChartPreview.COLUMN_CHART"}).add("stacked_column",{matcher:e=>"bar"===e.type&&e.stacked&&!e.horizontal,displayName:Vo("Stacked Column"),chartType:"bar",chartSubtype:"stacked_column",subtypeDefinition:{stacked:!0,horizontal:!1},category:"column",preview:"o-spreadsheet-ChartPreview.STACKED_COLUMN_CHART"}).add("bar",{matcher:e=>"bar"===e.type&&!e.stacked&&!!e.horizontal,displayName:Vo("Bar"),chartType:"bar",chartSubtype:"bar",subtypeDefinition:{horizontal:!0,stacked:!1},category:"bar",preview:"o-spreadsheet-ChartPreview.BAR_CHART"}).add("stacked_bar",{matcher:e=>"bar"===e.type&&e.stacked&&!!e.horizontal,displayName:Vo("Stacked Bar"),chartType:"bar",chartSubtype:"stacked_bar",subtypeDefinition:{horizontal:!0,stacked:!0},category:"bar",preview:"o-spreadsheet-ChartPreview.STACKED_BAR_CHART"}).add("combo",{displayName:Vo("Combo"),chartSubtype:"combo",chartType:"combo",category:"line",preview:"o-spreadsheet-ChartPreview.COMBO_CHART"}).add("pie",{matcher:e=>"pie"===e.type&&!e.isDoughnut,displayName:Vo("Pie"),chartSubtype:"pie",chartType:"pie",subtypeDefinition:{isDoughnut:!1},category:"pie",preview:"o-spreadsheet-ChartPreview.PIE_CHART"}).add("doughnut",{matcher:e=>"pie"===e.type&&!!e.isDoughnut,displayName:Vo("Doughnut"),chartSubtype:"doughnut",chartType:"pie",subtypeDefinition:{isDoughnut:!0},category:"pie",preview:"o-spreadsheet-ChartPreview.DOUGHNUT_CHART"}).add("gauge",{displayName:Vo("Gauge"),chartSubtype:"gauge",chartType:"gauge",category:"misc",preview:"o-spreadsheet-ChartPreview.GAUGE_CHART"}).add("scorecard",{displayName:Vo("Scorecard"),chartSubtype:"scorecard",chartType:"scorecard",category:"misc",preview:"o-spreadsheet-ChartPreview.SCORECARD_CHART"}).add("waterfall",{displayName:Vo("Waterfall"),chartSubtype:"waterfall",chartType:"waterfall",category:"misc",preview:"o-spreadsheet-ChartPreview.WATERFALL_CHART"}).add("pyramid",{displayName:Vo("Population Pyramid"),chartSubtype:"pyramid",chartType:"pyramid",category:"misc",preview:"o-spreadsheet-ChartPreview.POPULATION_PYRAMID_CHART"}).add("radar",{matcher:e=>"radar"===e.type&&!e.fillArea,displayName:Vo("Radar"),chartSubtype:"radar",chartType:"radar",subtypeDefinition:{fillArea:!1},category:"misc",preview:"o-spreadsheet-ChartPreview.RADAR_CHART"}).add("filled_radar",{matcher:e=>"radar"===e.type&&!!e.fillArea,displayName:Vo("Filled Radar"),chartType:"radar",chartSubtype:"filled_radar",subtypeDefinition:{fillArea:!0},category:"misc",preview:"o-spreadsheet-ChartPreview.FILLED_RADAR_CHART"}).add("geo",{displayName:Vo("Geo Chart"),chartSubtype:"geo",chartType:"geo",category:"misc",preview:"o-spreadsheet-ChartPreview.GEO_CHART"}).add("funnel",{displayName:Vo("Funnel"),chartSubtype:"funnel",chartType:"funnel",category:"misc",preview:"o-spreadsheet-ChartPreview.FUNNEL_CHART"}).add("sunburst",{matcher:e=>"sunburst"===e.type,displayName:Vo("Sunburst"),chartSubtype:"sunburst",chartType:"sunburst",category:"hierarchical",preview:"o-spreadsheet-ChartPreview.SUNBURST_CHART"}).add("treemap",{matcher:e=>"treemap"===e.type,displayName:Vo("Tree Map"),chartType:"treemap",chartSubtype:"treemap",category:"hierarchical",preview:"o-spreadsheet-ChartPreview.TREE_MAP_CHART"});var nx=Object.freeze({__proto__:null,AbstractChart:$C,BarChart:bI,CHART_AXIS_CHOICES:lC,CHART_COMMON_OPTIONS:Ly,GaugeChart:PI,LineChart:HI,MOVING_AVERAGE_TREND_LINE_XAXIS_ID:$S,PieChart:BI,SPREADSHEET_TO_EXCEL_TRENDLINE_TYPE_MAPPING:GS,ScorecardChart:XC,TREND_LINE_XAXIS_ID:zS,WaterfallChart:jI,adaptChartRange:jS,chartFactory:ex,chartFontColor:eC,chartMutedFontColor:tC,chartRuntimeFactory:tx,chartToImageFile:Uy,chartToImageUrl:Hy,checkDataset:oC,checkLabelRange:sC,createBarChartRuntime:SI,createDataSets:YS,createGaugeChartRuntime:MI,createLineChartRuntime:UI,createPieChartRuntime:zI,createScorecardChartRuntime:JC,createWaterfallChartRuntime:YI,drawScoreChart:KC,duplicateDataSetsInDuplicatedSheet:qS,duplicateLabelRangeInDuplicatedSheet:ZS,formatChartDatasetValue:rC,formatTickValue:aC,getChartPositionAtCenterOfViewport:function(e,t){const{x:o,y:s}=e.getMainViewportCoordinates(),{scrollX:i,scrollY:n}=e.getActiveSheetScrollInfo(),{width:r,height:a}=e.getVisibleRect(e.getActiveMainViewport());return{x:o+i+Math.max(0,(r-t.width)/2),y:s+n+Math.max(0,(a-t.height)/2)}},getDefinedAxis:nC,getPieColors:cC,getSmartChartDefinition:ix,isTrendLineAxis:dC,shouldRemoveFirstLabel:iC,toExcelDataset:KS,toExcelLabelRange:JS,transformChartDefinitionWithDataSetsWithZone:QS,transformDefinition:sx,truncateLabel:hC,updateChartRangesWithDataSets:WS,validateChartDefinition:ox});function rx(e,t){const{scrollX:o,scrollY:s}=e.getActiveSheetScrollInfo(),i=e.getSheetViewDimension(),n=o+Math.max(0,(i.width-t.width)/2),r=s+Math.max(0,(i.height-t.height)/2);return e.getPositionAnchorOffset({x:n,y:r})}function ax(e,t){const o=ze(t),s=e.getSheetViewDimension(),i=s.width,n=s.height;if(o.width>i){const e=i/o.width;o.width=i,o.height=o.height*e}if(o.height>n){const e=n/o.height;o.height=n,o.width=o.width*e}return o}class lx{xmlString;constructor(e){this.xmlString=e}toString(){return this.xmlString}}const cx=["areaChart","area3DChart","lineChart","line3DChart","stockChart","radarChart","scatterChart","pieChart","pie3DChart","doughnutChart","barChart","bar3DChart","ofPieChart","surfaceChart","surface3DChart","bubbleChart","comboChart","radarChart"];function hx(e,t,o){return{content:(new XMLSerializer).serializeToString(e),path:t,contentType:o}}function dx(e){return String(e).replace(/\&/g,"&amp;").replace(/\</g,"&lt;").replace(/\>/g,"&gt;").replace(/\"/g,"&quot;").replace(/\'/g,"&apos;").replace(/[\x00-\x08\x0B\x0C\x0E-\x1F]/g,"")}function ux(e){return new lx(e.map((([e,t])=>`${e}="${dx(t)}"`)).join(" "))}function gx(e,t="text/xml"){const o=(new DOMParser).parseFromString(e.toString(),t),s=o.querySelector("parsererror");if(s){const t=s.innerHTML,o=parseInt(t.split(":")[0],10),i=e.toString().trim().split("\n"),n=i.slice(Math.max(o-3,0),Math.min(o+2,i.length)).join("\n");throw new Error(`XML string could not be parsed: ${t}\n${n}`)}return o}function px(e){if(e)return{style:e.style,color:{rgb:e.color}}}function mx(e,t){return vx`
9
+ `,Sh.add("chartShowValuesPlugin",{register:e=>e.register(uC),unregister:e=>e.unregister(uC)}),Sh.add("waterfallLinesPlugin",{register:e=>e.register(HC),unregister:e=>e.unregister(HC)}),Sh.add("funnelController",{register:e=>e.register(wh()),unregister:e=>e.unregister(wh())}),Sh.add("funnelElement",{register:e=>e.register(Ih()),unregister:e=>e.unregister(Ih())}),Sh.add("funnelTooltipPositioner",{register:e=>e.Tooltip.positioners.funnelTooltipPositioner=Eh,unregister:e=>e.Tooltip.positioners.funnelTooltipPositioner=void 0}),Sh.add("sunburstLabelsPlugin",{register:e=>e.register(LC),unregister:e=>e.unregister(LC)}),Sh.add("sunburstHoverPlugin",{register:e=>e.register(kC),unregister:e=>e.unregister(kC)});class zC extends t.Component{static template="o-spreadsheet-ChartJsComponent";static props={figureUI:Object,isFullScreen:{type:Boolean,optional:!0}};canvas=t.useRef("graphContainer");chart;currentRuntime;animationStore;currentDevicePixelRatio=window.devicePixelRatio;get background(){return this.chartRuntime.background}get canvasStyle(){return`background-color: ${this.background}`}get chartRuntime(){const e=this.env.model.getters.getChartRuntime(this.props.figureUI.id);if(!("chartJsConfig"in e))throw new Error("Unsupported chart runtime");return e}setup(){this.env.model.getters.isDashboard()&&(this.animationStore=oh(yh)),t.onMounted((()=>{const e=this.chartRuntime;this.currentRuntime=e,this.createChart(ze(e.chartJsConfig))})),t.onWillUnmount((()=>this.chart?.destroy())),t.useEffect((()=>{const e=this.chartRuntime;e!==this.currentRuntime?(e.chartJsConfig.type!==this.currentRuntime.chartJsConfig.type?(this.chart?.destroy(),this.createChart(ze(e.chartJsConfig))):this.updateChartJs(ze(e.chartJsConfig)),this.currentRuntime=e):this.currentDevicePixelRatio!==window.devicePixelRatio&&(this.currentDevicePixelRatio=window.devicePixelRatio,this.updateChartJs(ze(this.currentRuntime.chartJsConfig)))}))}createChart(e){if(this.env.model.getters.isDashboard()&&this.animationStore){const t=this.env.model.getters.getChart(this.props.figureUI.id)?.type;t&&this.animationStore.animationPlayed[this.animationFigureId]!==t&&(e=this.enableAnimationInChartData(e),this.animationStore.disableAnimationForChart(this.animationFigureId,t))}const t=this.canvas.el.getContext("2d");this.chart=new window.Chart(t,e)}updateChartJs(e){if(this.env.model.getters.isDashboard()){const t=this.env.model.getters.getChart(this.props.figureUI.id)?.type;t&&this.hasChartDataChanged()&&this.animationStore&&(e=this.enableAnimationInChartData(e),this.animationStore.disableAnimationForChart(this.animationFigureId,t))}e.data&&e.data.datasets?(this.chart.data=e.data,e.options?.plugins?.title&&(this.chart.config.options.plugins.title=e.options.plugins.title)):this.chart.data.datasets=[],this.chart.config.options=e.options,this.chart.update()}hasChartDataChanged(){return!mt(this.currentRuntime.chartJsConfig.data,this.chartRuntime.chartJsConfig.data)}enableAnimationInChartData(e){return{...e,options:{...e.options,animation:{animateRotate:!0}}}}get animationFigureId(){return this.props.isFullScreen?this.props.figureUI.id+"-fullscreen":this.props.figureUI.id}}class $C{sheetId;title;getters;constructor(e,t,o){this.title=e.title,this.sheetId=t,this.getters=o}static validateChartDefinition(e,t){throw new Error("This method should be implemented by sub class")}static transformDefinition(e,t,o){throw new Error("This method should be implemented by sub class")}static getDefinitionFromContextCreation(e){throw new Error("This method should be implemented by sub class")}}function GC(e,t,o,s,i){if("text"===t||"progress"===t||e?.type!==Ts.number||o?.type!==Ts.number)return;const n=o.value-e.value;return n>0?s:n<0?i:void 0}function WC(e,t,o){if("text"===o||e?.type!==Ts.number||t?.type!==Ts.number)return"neutral";const s=t.value-e.value;return s>0?"up":s<0?"down":"neutral"}function qC(e){return e.keyValue&&!Xr.test(e.keyValue)?"InvalidScorecardKeyValue":"Success"}function ZC(e){return e.baseline&&!Xr.test(e.baseline)?"InvalidScorecardBaseline":"Success"}const jC=new window.Path2D("M8.6 4.8a.5.5 0 0 1 0 .75l-3.9 3.9a.5 .5 0 0 1 -.75 0l-3.8 -3.9a.5 .5 0 0 1 0 -.75l.4-.4a.5.5 0 0 1 .75 0l2.3 2.4v-5.7c0-.25.25-.5.5-.5h.6c.25 0 .5.25.5.5v5.8l2.3 -2.4a.5.5 0 0 1 .75 0z"),YC=new window.Path2D("M8.7 5.5a.5.5 0 0 0 0-.75l-3.8-4a.5.5 0 0 0-.75 0l-3.8 4a.5.5 0 0 0 0 .75l.4.4a.5.5 0 0 0 .75 0l2.3-2.4v5.8c0 .25.25.5.5.5h.6c.25 0 .5-.25.5-.5v-5.8l2.2 2.4a.5.5 0 0 0 .75 0z");let XC=class e extends $C{keyValue;keyDescr;baseline;baselineMode;baselineDescr;progressBar=!1;background;baselineColorUp;baselineColorDown;fontColor;humanize;type="scorecard";constructor(e,t,o){super(e,t,o),this.keyValue=fa(o,t,e.keyValue),this.keyDescr=e.keyDescr,this.baseline=fa(o,t,e.baseline),this.baselineMode=e.baselineMode,this.baselineDescr=e.baselineDescr,this.background=e.background,this.baselineColorUp=e.baselineColorUp??xe,this.baselineColorDown=e.baselineColorDown??Ee,this.humanize=e.humanize??!1}static validateChartDefinition(e,t){return e.checkValidations(t,qC,ZC)}static getDefinitionFromContextCreation(e){return{background:e.background,type:"scorecard",keyValue:e.range?e.range[0].dataRange:void 0,title:e.title||{text:""},baselineMode:Ie,baselineColorUp:xe,baselineColorDown:Ee,baseline:e.auxiliaryRange||""}}static transformDefinition(e,t,o){let s,i;if(t.baseline){const i=US(e,t.baseline,o);i!==Js.InvalidReference&&(s=i)}if(t.keyValue){const s=US(e,t.keyValue,o);s!==Js.InvalidReference&&(i=s)}return{...t,baseline:s,keyValue:i}}duplicateInDuplicatedSheet(t){const o=ZS(this.sheetId,t,this.baseline),s=ZS(this.sheetId,t,this.keyValue),i=this.getDefinitionWithSpecificRanges(o,s,t);return new e(i,t,this.getters)}copyInSheetId(t){const o=this.getDefinitionWithSpecificRanges(this.baseline,this.keyValue,t);return new e(o,t,this.getters)}getDefinition(){return this.getDefinitionWithSpecificRanges(this.baseline,this.keyValue)}getContextCreation(){return{...this,range:this.keyValue?[{dataRange:this.getters.getRangeString(this.keyValue,this.sheetId)}]:void 0,auxiliaryRange:this.baseline?this.getters.getRangeString(this.baseline,this.sheetId):void 0}}getDefinitionWithSpecificRanges(e,t,o){return{baselineColorDown:this.baselineColorDown,baselineColorUp:this.baselineColorUp,baselineMode:this.baselineMode,title:this.title,type:"scorecard",background:this.background,baseline:e?this.getters.getRangeString(e,o||this.sheetId):void 0,baselineDescr:this.baselineDescr,keyValue:t?this.getters.getRangeString(t,o||this.sheetId):void 0,keyDescr:this.keyDescr,humanize:this.humanize}}getDefinitionForExcel(){}updateRanges(t){const o=jS(this.baseline,t),s=jS(this.keyValue,t);if(this.baseline===o&&this.keyValue===s)return this;const i=this.getDefinitionWithSpecificRanges(o,s);return new e(i,this.sheetId,this.getters)}};function KC(e,t){const o=t.getContext("2d"),s=window.devicePixelRatio||1;t.width=s*e.canvas.width,t.height=s*e.canvas.height,o.scale(s,s);const i=e.canvas.width-j;if(o.fillStyle=e.canvas.backgroundColor,o.fillRect(0,0,e.canvas.width,e.canvas.height),e.title){o.font=e.title.style.font,o.fillStyle=e.title.style.color;const t=o.textBaseline;o.textBaseline="middle",o.fillText(za(o,e.title.text,i-e.title.position.x),e.title.position.x,e.title.position.y),o.textBaseline=t}if(e.baseline&&(o.font=e.baseline.style.font,o.fillStyle=e.baseline.style.color,$a(o,e.baseline.text,e.baseline.position,e.baseline.style.underline,e.baseline.style.strikethrough)),e.baselineArrow&&e.baselineArrow.style.size>0){o.save(),o.fillStyle=e.baselineArrow.style.color,o.translate(e.baselineArrow.position.x,e.baselineArrow.position.y);const t=e.baselineArrow.style.size/10;switch(o.scale(t,t),e.baselineArrow.direction){case"down":o.fill(jC);break;case"up":o.fill(YC)}o.restore()}if(e.baselineDescr){const t=e.baselineDescr;o.font=t.style.font,o.fillStyle=t.style.color,o.fillText(za(o,t.text,i-t.position.x),t.position.x,t.position.y)}if(e.key&&(o.font=e.key.style.font,o.fillStyle=e.key.style.color,$a(o,za(o,e.key.text,i-e.key.position.x),e.key.position,e.key.style.underline,e.key.style.strikethrough)),e.keyDescr){const t=e.keyDescr;o.font=e.keyDescr?.style.font??t.style.font,o.fillStyle=t.style.color,o.fillText(za(o,t.text,i-t.position.x),t.position.x,t.position.y)}if(e.progressBar){if(o.fillStyle=e.progressBar.style.backgroundColor,o.beginPath(),o.roundRect(e.progressBar.position.x,e.progressBar.position.y,e.progressBar.dimension.width,e.progressBar.dimension.height,e.progressBar.dimension.height/2),o.fill(),o.fillStyle=e.progressBar.style.color,o.beginPath(),e.progressBar.value>0)o.roundRect(e.progressBar.position.x,e.progressBar.position.y,e.progressBar.dimension.width*Math.max(0,Math.min(1,e.progressBar.value)),e.progressBar.dimension.height,e.progressBar.dimension.height/2);else{const t=e.progressBar.dimension.width*Math.max(0,Math.min(1,-e.progressBar.value));o.roundRect(e.progressBar.position.x+e.progressBar.dimension.width-t,e.progressBar.position.y,t,e.progressBar.dimension.height,e.progressBar.dimension.height/2)}o.fill()}}function JC(e,t){let o,s="";const i=t.getLocale();if(e.keyValue){const n={sheetId:e.keyValue.sheetId,col:e.keyValue.zone.left,row:e.keyValue.zone.top};o=t.getEvaluatedCell(n),s=function(e,t,o){return e?t?Vn(e,o):e.formattedValue??String(e.value??""):""}(o,e.humanize??!1,i)}let n;const r=e.baseline;if(r){const e={sheetId:r.sheetId,col:r.zone.left,row:r.zone.top};n=t.getEvaluatedCell(e)}const{background:a,fontColor:l}=t.getStyleOfSingleCellChart(e.background,e.keyValue),c=function(e,t,o,s,i){if(!e)return"";if("text"===o||t?.type!==Ts.number||e.type!==Ts.number)return s?Vn(e,i):e.formattedValue;let{value:n,format:r}=e;return"progress"===o?(n=t.value/n,r="0.0%"):(n=Math.abs(t.value-n),"percentage"===o&&0!==n&&(n/=e.value),"percentage"===o&&(r="0.0%"),r||(n=Math.round(100*n)/100)),s?Vn({value:n,format:r},i):bn(n,{format:r,locale:i})}(n,o,e.baselineMode,e.humanize??!1,i),h="progress"===e.baselineMode&&Is(c,i)?gi(c,i):0;return{title:{...e.title,text:e.title.text?Vo(e.title.text):""},keyValue:s,keyDescr:e.keyDescr?.text?Vo(e.keyDescr.text):"",baselineDisplay:c,baselineArrow:WC(n,o,e.baselineMode),baselineColor:GC(n,e.baselineMode,o,e.baselineColorUp,e.baselineColorDown),baselineDescr:"progress"!==e.baselineMode&&e.baselineDescr?.text?Vo(e.baselineDescr.text):"",fontColor:l,background:a,baselineStyle:{..."percentage"!==e.baselineMode&&"progress"!==e.baselineMode&&r?t.getCellComputedStyle({sheetId:r.sheetId,col:r.zone.left,row:r.zone.top}):void 0,fontSize:e.baselineDescr?.fontSize,align:e.baselineDescr?.align},baselineDescrStyle:{textColor:e.baselineDescr?.color,...e.baselineDescr},keyValueStyle:{...e.keyValue?t.getCellComputedStyle({sheetId:e.keyValue.sheetId,col:e.keyValue.zone.left,row:e.keyValue.zone.top}):void 0,fontSize:e.keyDescr?.fontSize,align:e.keyDescr?.align},keyValueDescrStyle:{textColor:e.keyDescr?.color,...e.keyDescr},progressBar:"progress"===e.baselineMode?{value:h,color:h>0?e.baselineColorUp:e.baselineColorDown}:void 0}}const QC=.05;function ey(e,t){const o=e||"";return t&&o?" "+o:o}function ty({width:e,height:t},o){return new oy({width:e,height:t},o).computeDesign()}class oy{runtime;context;width;height;constructor({width:e,height:t},o){this.runtime=o;const s=document.createElement("canvas");this.width=s.width=e,this.height=s.height=t,this.context=s.getContext("2d")}computeDesign(){const e={canvas:{width:this.width,height:this.height,backgroundColor:this.backgroundColor}},t=this.getTextStyles();let o=0;if(this.title){let s,i;switch(({height:o,width:i}=this.getFullTextDimensions(this.title,t.title.font)),this.runtime.title.align){case"center":s=(this.width-i)/2;break;case"right":s=this.width-i-j;break;default:s=j}e.title={text:this.title,style:t.title,position:{x:s,y:Y+o/2}}}const s=t.baselineArrow?.size??0;let{height:i,width:n}=this.getTextDimensions(this.baseline,t.baselineValue.font);this.baseline||(i=this.getTextDimensions(this.baselineDescr,t.baselineDescr.font).height);const r=this.getTextDimensions(this.baselineDescr,t.baselineDescr.font).width;let a;switch(this.runtime.baselineStyle?.align){case"right":a=this.width-j-r-n;break;case"left":a=j+s;break;default:a=(this.width-n-r+s)/2}if(this.baseline&&(e.baseline={text:this.baseline,style:t.baselineValue,position:{x:a,y:this.keyValue?this.height*(1-QC*(this.runtime.progressBar?1:2)):this.height-(this.height-o-i)/2-Y}},t.baselineArrow&&!this.runtime.progressBar&&(e.baselineArrow={direction:this.baselineArrow,style:t.baselineArrow,position:{x:e.baseline.position.x-s,y:e.baseline.position.y-(i+s)/2}})),e.baseline&&this.baselineDescr){const o={x:e.baseline.position.x+n,y:e.baseline.position.y};e.baselineDescr={text:this.baselineDescr,style:t.baselineDescr,position:o}}let l=0;this.runtime.progressBar&&(l=.05*this.height,e.progressBar={position:{x:2*j,y:.9*this.height-i-l},dimension:{height:l,width:this.width-4*j},value:this.runtime.progressBar.value,style:{color:this.runtime.progressBar.color,backgroundColor:this.secondaryFontColor}});const{width:c,height:h}=this.getFullTextDimensions(this.keyValue,t.keyValue.font),d=this.getTextDimensions(this.keyDescr,t.keyDescr.font).width;let u;switch(this.runtime.keyValueStyle?.align){case"right":u=this.width-j-d-c;break;case"left":u=j;break;default:u=(this.width-c-d)/2}if(this.keyValue&&(e.key={text:this.keyValue,style:t.keyValue,position:{x:Math.max(j,u),y:.4*this.height+Y/2+(o+h/2)/2}}),e.key&&this.keyDescr){const o={x:e.key.position.x+c,y:e.key.position.y};e.keyDescr={text:this.keyDescr,style:t.keyDescr,position:o}}return e}get title(){return this.runtime.title.text??""}get keyValue(){return this.runtime.keyValue}get keyDescr(){return ey(this.runtime.keyDescr,this.keyValue)}get baseline(){return this.runtime.baselineDisplay}get baselineDescr(){return ey(this.runtime.baselineDescr,this.baseline)}get baselineArrow(){return this.runtime.baselineArrow}get backgroundColor(){return this.runtime.background}get secondaryFontColor(){return tC(this.backgroundColor)}getTextDimensions(e,t){this.context.font=t;const o=this.context.measureText(e);return{width:o.width,height:o.actualBoundingBoxAscent+o.actualBoundingBoxDescent}}getFullTextDimensions(e,t){this.context.font=t;const o=this.context.measureText(e);return{width:o.width,height:o.fontBoundingBoxAscent+o.fontBoundingBoxDescent}}getTextStyles(){const e=this.runtime.keyValueStyle?.fontSize??32,t=Math.floor(.9*e);let o=this.runtime.baselineStyle?.fontSize??16;const s=Math.floor(.9*o);return this.runtime.progressBar&&(o/=1.5),{title:{font:Da(this.runtime.title.fontSize??14,this.runtime.title.bold,this.runtime.title.italic),color:this.runtime.title.color??this.secondaryFontColor},keyValue:{color:this.runtime.keyValueStyle?.textColor||this.runtime.fontColor,font:Da(e,this.runtime.keyValueStyle?.bold,this.runtime.keyValueStyle?.italic),strikethrough:this.runtime.keyValueStyle?.strikethrough,underline:this.runtime.keyValueStyle?.underline},keyDescr:{color:this.runtime.keyValueDescrStyle?.textColor||this.runtime.fontColor,font:Da(t,this.runtime.keyValueDescrStyle?.bold,this.runtime.keyValueDescrStyle?.italic),strikethrough:this.runtime.keyValueDescrStyle?.strikethrough,underline:this.runtime.keyValueDescrStyle?.underline},baselineValue:{font:Da(o,this.runtime.baselineStyle?.bold,this.runtime.baselineStyle?.italic),strikethrough:this.runtime.baselineStyle?.strikethrough,underline:this.runtime.baselineStyle?.underline,color:this.runtime.baselineColor||this.runtime.baselineStyle?.textColor||this.secondaryFontColor},baselineDescr:{font:Da(s,this.runtime.baselineDescrStyle?.bold,this.runtime.baselineDescrStyle?.italic),strikethrough:this.runtime.baselineDescrStyle?.strikethrough,underline:this.runtime.baselineDescrStyle?.underline,color:this.runtime.baselineDescrStyle?.textColor??this.secondaryFontColor},baselineArrow:"neutral"===this.baselineArrow||this.runtime.progressBar?void 0:{size:this.keyValue?.8*o:0,color:this.runtime.baselineColor||this.runtime.baselineStyle?.textColor||this.secondaryFontColor}}}}class sy extends t.Component{static template="o-spreadsheet-ScorecardChart";static props={figureUI:Object};canvas=t.useRef("chartContainer");get runtime(){return this.env.model.getters.getChartRuntime(this.props.figureUI.id)}get title(){const e=this.env.model.getters.getChartDefinition(this.props.figureUI.id).title.text??"";return Vo(e)}setup(){t.useEffect(this.createChart.bind(this),(()=>{const e=this.canvas.el.getBoundingClientRect();return[e.width,e.height,this.runtime,this.canvas.el,window.devicePixelRatio]}))}createChart(){const e=this.canvas.el;KC(ty(e.getBoundingClientRect(),this.runtime),e)}}const iy=/Mac/i,ny=["Shift","Control","Alt","Meta"];function ry(e,t){return!!e&&(!!t.target&&e.contains(t.target))}function ay(){const e=document.querySelector(".o-grid-overlay");if(e){const{top:t,left:o}=e.getBoundingClientRect();return{top:t,left:o}}throw new Error("Can't find spreadsheet position")}function ly(e){return e.el?cy(e.el):{x:0,y:0,width:0,height:0}}function cy(e){const t=e.getBoundingClientRect();return{x:t.x,y:t.y,width:t.width,height:t.height}}function*hy(e){if(yield e,e.hasChildNodes())for(const t of e.childNodes)yield*hy(t)}function dy(e){const{startElement:t,endElement:o,startSelectionOffset:s,endSelectionOffset:i}=function(e){const t=document.getSelection();return{startElement:t.anchorNode||e,startSelectionOffset:t.anchorOffset,endElement:t.focusNode||e,endSelectionOffset:t.focusOffset}}(e);return{start:uy(e,t,s),end:uy(e,o,i)}}function uy(e,t,o){let s=0;const i=hy(e);let n=i.next(),r=!0;for(;!n.done&&n.value!==t;)n.value.hasChildNodes()||n.value.textContent&&(s+=n.value.textContent.length),("P"===n.value.nodeName||"DIV"===n.value.nodeName&&n.value!==e)&&(r?r=!1:s++),n=i.next();if(n.value!==t)return 0;if(n.value.hasChildNodes()){const e=[...n.value.childNodes].slice(0,o);s+=e.reduce(((t,o,s)=>{if(null!==o.textContent){let i=o.textContent.length;return"P"===o.nodeName&&s!==e.length-1&&i++,t+i}return t}),0)}else s+=o;return"P"!==t.nodeName||r||""!==t.textContent||s++,s}const gy=/^[a-zA-Z]$/;function py(e,t="key"){let o="";ny.includes(e.key)||(fy(e)&&(o+="Ctrl+"),e.altKey&&(o+="Alt+"),e.shiftKey&&(o+="Shift+"));const s="key"===t?e.key:e.code;return o+=gy.test(s)?s.toUpperCase():s,o}function my(){return Boolean(iy.test(navigator.userAgent))}function fy(e){return my()||Cy()?e.metaKey:e.ctrlKey}function vy(e){return 1===e.button||fy(e)&&0===e.button}function by(e,t){const o=document.createElement("a");o.href=e,o.download=t,document.body.appendChild(o),o.click(),document.body.removeChild(o)}function Sy(){return/Firefox/i.test(navigator.userAgent)}function Cy(){return/(iPad|iPhone|iPod)/i.test(navigator.userAgent)||"MacIntel"===navigator.platform&&(navigator.maxTouchPoints||1)>1}function yy(){return/Android/i.test(navigator.userAgent)||Cy()||/(webOS|BlackBerry|Windows Phone)/i.test(navigator.userAgent)}function wy(e){return 8===(e=$t(e).replace("#","")).length?e.slice(6)+e.slice(0,6):e}const Iy=30,xy=10,Ey=20,Ry=12,Ty=80,Ay="#F3F2F1",Dy=6,_y=25;function Oy(e,t){const o=e.getBoundingClientRect(),s=window.devicePixelRatio||1;e.width=s*o.width,e.height=s*o.height;const i=e.getContext("2d");i.scale(s,s);const n=function(e,t,o){const s=t.maxValue,i=t.minValue,n=Vy(t,"animated"),r=function(e,t){const o=t?_y:0,s=e.height-Ey-o-xy,i=e.width-2*Iy;let n,r;i>2*s?(n=2*s,r=s):(n=i,r=i/2);const a=o+xy+(s-r)/2;return{x:Iy+(i-n)/2,y:a,width:n,height:r}}(e,t.title.text),a=r.width/6,l=n?(n-i.value)/(s.value-i.value):0,c={x:e.width/2,y:r.y+r.height-r.height/12};let h=Ty;r.height<300&&(h*=r.height/300);const d=r.width/2,u=t.gaugeValue?.label||"-";Oa(o,u,{fontSize:h},"px")>d&&(h=function(e,t,o,s=.25){let i=1;if(o(i)>e)return i;if(o(t)<e)return t;let n=(i+t)/2,r=o(n),a=0;for(;Math.abs(r-e)>s&&a<20;)r>=e?t=(i+t)/2:i=(i+t)/2,n=(i+t)/2,r=o(n),a++;return n}(d,h,(e=>Oa(o,u,{fontSize:e},"px"))));const g={x:r.x+a/2,y:r.y+r.height+Ry},p={x:r.x+r.width-a/2,y:r.y+r.height+Ry},m=tC(t.background),f=function(e,t,o,s){const i=e.maxValue,n=e.minValue,r={x:t.x+t.width/2,y:t.y+t.height},a={fontSize:Ry},l=[],c=[];for(const h of e.inflectionValues){const e=(h.value-n.value)/(i.value-n.value),d=Oa(s,h.label,a,"px"),u=Math.PI-Math.PI*e,g=ky(u,t.height+Dy,r.x,r.y,d+2,Ry),p=c.some((e=>Ny(e,g)))?Ry:0;c.push(g),l.push({rotation:u,label:h.label,fontSize:Ry,color:o,offset:p})}return l}(t,r,m,o);let v=0,b=0,S=0;t.title.text&&({width:b,height:S}=Ma(o,t.title.text,{fontSize:K,...t.title},"px"));switch(t.title.align){case"right":v=e.width-b-j;break;case"center":v=(e.width-b)/2;break;default:v=j}return{width:e.width,height:e.height,title:{label:t.title.text??"",fontSize:t.title.fontSize??K,textPosition:{x:v,y:X+S/2},color:t.title.color??m,bold:t.title.bold,italic:t.title.italic},backgroundColor:t.background,gauge:{rect:r,arcWidth:a,percentage:Ze(l,0,1),color:Fy(t)},inflectionValues:f,gaugeValue:{label:u,textPosition:c,fontSize:h,color:m},minLabel:{label:t.minValue.label,textPosition:g,fontSize:Ry,color:m},maxLabel:{label:t.maxValue.label,textPosition:p,fontSize:Ry,color:m}}}(o,t,i);!function(e,t){e.save(),e.fillStyle=t.backgroundColor,e.fillRect(0,0,t.width,t.height),e.restore()}(i,n),function(e,t){e.save();const o=t.gauge,s=o.rect.x+o.rect.width/2,i=o.rect.y+o.rect.height,n=o.rect.height-o.arcWidth/2;if(n<0)return;const r=1===o.percentage?0:Math.PI*(1+o.percentage);e.strokeStyle=Ay,e.beginPath(),e.lineWidth=o.arcWidth,e.arc(s,i,n,r,0),e.stroke(),e.strokeStyle=o.color,e.beginPath(),e.arc(s,i,n,Math.PI,r),e.stroke(),e.restore()}(i,n),function(e,t){const{x:o,y:s,width:i,height:n}=t.gauge.rect;for(const r of t.inflectionValues){e.save(),e.translate(o+i/2-.5,s+n-.5),e.rotate(Math.PI/2-r.rotation),e.lineWidth=2,e.strokeStyle=tC(t.backgroundColor)+"aa",e.beginPath(),e.moveTo(0,-(n-t.gauge.arcWidth)),e.lineTo(0,-n-3),e.stroke(),e.textAlign="center",e.font=`${r.fontSize}px ${fe}`,e.fillStyle=r.color;const a=-n-Dy-r.offset;e.fillText(r.label,0,a),e.restore()}}(i,n),function(e,t){for(const o of[t.minLabel,t.maxLabel,t.gaugeValue])e.save(),e.textAlign="center",e.fillStyle=o.color,e.font=`${o.fontSize}px ${fe}`,e.fillText(o.label,o.textPosition.x,o.textPosition.y),e.restore()}(i,n),function(e,t){e.save();const o=t.title;e.font=Da(o.fontSize,o.bold,o.italic),e.textBaseline="middle",e.fillStyle=o.color,e.fillText(o.label,o.textPosition.x,o.textPosition.y),e.restore()}(i,n)}function Fy(e){const t=Vy(e,"final");if(void 0===t)return Ay;for(let o=0;o<e.inflectionValues.length;o++){const s=e.inflectionValues[o];if("<"===s.operator&&t<s.value)return e.colors[o];if("<="===s.operator&&t<=s.value)return e.colors[o]}return e.colors.at(-1)}function Py(e){return[{start:e.topLeft,end:e.topRight},{start:e.topRight,end:e.bottomRight},{start:e.bottomRight,end:e.bottomLeft},{start:e.bottomLeft,end:e.topLeft}]}function My(e,t){const o=e.start,s=e.end,i=t.start,n=t.end;function r(e,t,o){return(o.y-e.y)*(t.x-e.x)>(t.y-e.y)*(o.x-e.x)}return r(o,i,n)!==r(s,i,n)&&r(o,s,i)!==r(o,s,n)}function Ny(e,t){const o=Py(e),s=Py(t);for(const e of o)for(const t of s)if(My(e,t))return!0;return!1}function ky(e,t,o,s,i,n){const r=Math.cos(e),a=Math.sin(e),l=r*t,c=a*t,h=a*(i/2),d=r*(i/2),u=r*(t+n),g=a*(t+n);return{bottomLeft:{x:l-h+o,y:s-(c+d)},bottomRight:{x:l+h+o,y:s-(c-d)},topRight:{x:u+h+o,y:s-(g-d)},topLeft:{x:u-h+o,y:s-(g+d)}}}function Vy(e,t){return"animated"===t&&void 0!==e.animationValue?e.animationValue:e.gaugeValue?.value}const Ly={responsive:!0,maintainAspectRatio:!1,elements:{line:{fill:!1},point:{hitRadius:15}},animation:!1,events:["mousemove","mouseout","click","touchstart","touchmove","mouseup"]};function Hy(e,t,o){const s=document.createElement("div");s.style.width=`${t.width}px`,s.style.height=`${t.height}px`;const i=document.createElement("canvas");let n;if(s.append(i),i.setAttribute("width",t.width.toString()),i.setAttribute("height",t.height.toString()),document.body.append(s),"chartJsConfig"in e){const t=ze(e.chartJsConfig);t.plugins=[By];const o=new window.Chart(i,t);n=o.toBase64Image(),o.destroy()}else if("scorecard"===o){KC(ty(t,e),i),n=i.toDataURL()}else"gauge"===o&&(Oy(i,e),n=i.toDataURL());return s.remove(),n}async function Uy(e,t,o){const s=document.createElement("div");s.style.width=`${t.width}px`,s.style.height=`${t.height}px`,s.style.position="fixed",s.style.opacity="0";const i=document.createElement("canvas");s.append(i),i.setAttribute("width",t.width.toString()),i.setAttribute("height",t.height.toString()),document.body.append(s);let n=null;if("chartJsConfig"in e){const t=ze(e.chartJsConfig);t.plugins=[By];const o=new window.Chart(i,t);n=await new Promise((e=>i.toBlob(e,"image/png"))),o.destroy()}else if("scorecard"===o){KC(ty(t,e),i),n=await new Promise((e=>i.toBlob(e,"image/png")))}else"gauge"===o&&(Oy(i,e),n=await new Promise((e=>i.toBlob(e,"image/png"))));return s.remove(),n?new File([n],"chart.png",{type:"image/png"}):void 0}const By={id:"customCanvasBackgroundColor",beforeDraw:e=>{const{ctx:t}=e;t.save(),t.globalCompositeOperation="destination-over",t.fillStyle="#ffffff",t.fillRect(0,0,e.width,e.height),t.restore()}},zy={Errors:{InvalidRange:Vo("The range is invalid"),FirstArgMissing:Vo("The argument is missing. Please provide a value"),SecondArgMissing:Vo("The second argument is missing. Please provide a value"),MinNaN:Vo("The minpoint must be a number"),MidNaN:Vo("The midpoint must be a number"),MaxNaN:Vo("The maxpoint must be a number"),ValueUpperInflectionNaN:Vo("The first value must be a number"),ValueLowerInflectionNaN:Vo("The second value must be a number"),MinBiggerThanMax:Vo("Minimum must be smaller then Maximum"),MinBiggerThanMid:Vo("Minimum must be smaller then Midpoint"),MidBiggerThanMax:Vo("Midpoint must be smaller then Maximum"),LowerBiggerThanUpper:Vo("Lower inflection point must be smaller than upper inflection point"),MinInvalidFormula:Vo("Invalid Minpoint formula"),MaxInvalidFormula:Vo("Invalid Maxpoint formula"),MidInvalidFormula:Vo("Invalid Midpoint formula"),ValueUpperInvalidFormula:Vo("Invalid upper inflection point formula"),ValueLowerInvalidFormula:Vo("Invalid lower inflection point formula"),EmptyRange:Vo("A range needs to be defined"),ValueCellIsInvalidFormula:Vo("At least one of the provided values is an invalid formula"),Unexpected:Vo("The rule is invalid for an unknown reason")},ColorScale:Vo("Color scale"),IconSet:Vo("Icon set"),DataBar:Vo("Data bar")},$y={Series:Vo("Series"),BackgroundColor:Vo("Background color"),StackedBarChart:Vo("Stacked bar chart"),StackedLineChart:Vo("Stacked line chart"),StackedAreaChart:Vo("Stacked area chart"),StackedColumnChart:Vo("Stacked column chart"),CumulativeData:Vo("Cumulative data"),TreatLabelsAsText:Vo("Treat labels as text"),AggregatedChart:Vo("Aggregate"),Errors:{Unexpected:Vo("The chart definition is invalid for an unknown reason"),InvalidDataSet:Vo("The dataset is invalid"),InvalidLabelRange:Vo("Labels are invalid"),InvalidScorecardKeyValue:Vo("The key value is invalid"),InvalidScorecardBaseline:Vo("The baseline value is invalid"),InvalidGaugeDataRange:Vo("The data range is invalid"),EmptyGaugeRangeMin:Vo("A minimum range limit value is needed"),GaugeRangeMinNaN:Vo("The minimum range limit value must be a number"),EmptyGaugeRangeMax:Vo("A maximum range limit value is needed"),GaugeRangeMaxNaN:Vo("The maximum range limit value must be a number"),GaugeLowerInflectionPointNaN:Vo("The lower inflection point value must be a number"),GaugeUpperInflectionPointNaN:Vo("The upper inflection point value must be a number")},GeoChart:{ColorScales:{blues:Vo("Blues"),cividis:Vo("Cividis"),greens:Vo("Greens"),greys:Vo("Greys"),oranges:Vo("Oranges"),purples:Vo("Purples"),rainbow:Vo("Rainbow"),reds:Vo("Reds"),viridis:Vo("Viridis")}}},Gy={Custom:Vo("Custom")},Wy=Vo("Merged cells are preventing this operation. Unmerge those cells and try again."),qy={Errors:{Unexpected:Vo("Cannot split the selection for an unknown reason"),NoSplitSeparatorInSelection:Vo("There is no match for the selected separator in the selection"),MoreThanOneColumnSelected:Vo("Only a selection from a single column can be split"),SplitWillOverwriteContent:Vo("Splitting will overwrite existing content")}},Zy={Errors:{Unexpected:Vo("Cannot remove duplicates for an unknown reason"),MoreThanOneRangeSelected:Vo("Please select only one range of cells"),EmptyTarget:Vo("Please select a range of cells containing values."),NoColumnsProvided:Vo("Please select at latest one column to analyze."),WillRemoveExistingMerge:Vo("This operation is not possible due to a merge. Please remove the merges first than try again.")}},jy={DateIs:{today:Vo("today"),yesterday:Vo("yesterday"),tomorrow:Vo("tomorrow"),lastWeek:Vo("in the past week"),lastMonth:Vo("in the past month"),lastYear:Vo("in the past year")},DateIsBefore:{today:Vo("today"),yesterday:Vo("yesterday"),tomorrow:Vo("tomorrow"),lastWeek:Vo("one week ago"),lastMonth:Vo("one month ago"),lastYear:Vo("one year ago")},CriterionError:{notEmptyValue:Vo("The value must not be empty"),numberValue:Vo("The value must be a number"),dateValue:Vo("The value must be a date"),validRange:Vo("The value must be a valid range"),validFormula:Vo("The formula must be valid")},Errors:{InvalidRange:Vo("The range is invalid."),InvalidDataValidationCriterionValue:Vo("One or more of the provided criteria values are invalid. Please review and correct them."),InvalidNumberOfCriterionValues:Vo("One or more of the provided criteria values are missing."),Unexpected:Vo("The rule is invalid for an unknown reason.")}},Yy={Errors:{Unexpected:Vo("The table zone is invalid for an unknown reason"),TableOverlap:Vo("You cannot create overlapping tables."),NonContinuousTargets:Vo("A table can only be created on a continuous selection."),InvalidRange:Vo("The range is invalid"),TargetOutOfSheet:Vo("The range is out of the sheet")},Checkboxes:{hasFilters:Vo("Filter button"),headerRow:Vo("Header row(s)"),bandedRows:Vo("Banded rows"),firstColumn:Vo("First column"),lastColumn:Vo("Last column"),bandedColumns:Vo("Banded columns"),automaticAutofill:Vo("Automatically autofill formulas"),totalRow:Vo("Total row"),isDynamic:Vo("Auto-adjust to formula result")},Tooltips:{filterWithoutHeader:Vo("Cannot have filters without a header row"),isDynamic:Vo("For tables based on array formulas only")}},Xy={labels:{no_calculations:Vo("No calculations"),"%_of_grand_total":Vo("% of grand total"),"%_of_col_total":Vo("% of column total"),"%_of_row_total":Vo("% of row total"),"%_of":Vo("% of"),"%_of_parent_row_total":Vo("% of parent row total"),"%_of_parent_col_total":Vo("% of parent column total"),"%_of_parent_total":Vo("% of parent total"),difference_from:Vo("Difference from"),"%_difference_from":Vo("% difference from"),running_total:Vo("Running total"),"%_running_total":Vo("% Running total"),rank_asc:Vo("Rank smallest to largest"),rank_desc:Vo("Rank largest to smallest"),index:Vo("Index")},descriptions:{"%_of_grand_total":()=>Vo("Displayed as % of grand total"),"%_of_col_total":()=>Vo("Displayed as % of column total"),"%_of_row_total":()=>Vo("Displayed as % of row total"),"%_of":e=>Vo('Displayed as % of "%s"',e),"%_of_parent_row_total":e=>Vo('Displayed as % of parent row total of "%s"',e),"%_of_parent_col_total":()=>Vo("Displayed as % of parent column total"),"%_of_parent_total":e=>Vo('Displayed as % of parent "%s" total',e),difference_from:e=>Vo('Displayed as difference from "%s"',e),"%_difference_from":e=>Vo('Displayed as % difference from "%s"',e),running_total:e=>Vo('Displayed as running total based on "%s"',e),"%_running_total":e=>Vo('Displayed as % running total based on "%s"',e),rank_asc:e=>Vo('Displayed as rank from smallest to largest based on "%s"',e),rank_desc:e=>Vo('Displayed as rank largest to smallest based on "%s"',e),index:()=>Vo("Displayed as index")},documentation:{no_calculations:Vo("Displays the value that is entered in the field."),"%_of_grand_total":Vo("Displays values as a percentage of the grand total of all the values or data points in the report."),"%_of_col_total":Vo("Displays all the values in each column or series as a percentage of the total for the column or series."),"%_of_row_total":Vo("Displays the value in each row or category as a percentage of the total for the row or category."),"%_of":Vo("Displays values as a percentage of the value of the Base item in the Base field."),"%_of_parent_row_total":Vo("Calculates values as follows:\n(value for the item) / (value for the parent item on rows)"),"%_of_parent_col_total":Vo("Calculates values as follows:\n(value for the item) / (value for the parent item on columns)"),"%_of_parent_total":Vo("Calculates values as follows:\n(value for the item) / (value for the parent item of the selected Base field)"),difference_from:Vo("Displays values as the difference from the value of the Base item in the Base field."),"%_difference_from":Vo("Displays values as the percentage difference from the value of the Base item in the Base field."),running_total:Vo("Displays the value for successive items in the Base field as a running total."),"%_running_total":Vo("Calculates the value as a percentage for successive items in the Base field that are displayed as a running total."),rank_asc:Vo("Displays the rank of selected values in a specific field, listing the smallest item in the field as 1, and each larger value with a higher rank value."),rank_desc:Vo("Displays the rank of selected values in a specific field, listing the largest item in the field as 1, and each smaller value with a higher rank value."),index:Vo("Calculates values as follows:\n((value in cell) x (Grand Total of Grand Totals)) / ((Grand Row Total) x (Grand Column Total))")}},Ky={second:1e3,minute:6e4,hour:36e5,day:864e5,month:2592e6,year:31536e6},Jy={inSeconds:function(e){return Math.floor(e/Ky.second)},inMinutes:function(e){return Math.floor(e/Ky.minute)},inHours:function(e){return Math.floor(e/Ky.hour)},inDays:function(e){return Math.floor(e/Ky.day)},inMonths:function(e){return Math.floor(e/Ky.month)},inYears:function(e){return Math.floor(e/Ky.year)}},Qy=/^((d|dd|m|mm|yyyy|yy|hh|h|ss|a)(-|:|\s|\/))*(d|dd|m|mm|yyyy|yy|hh|h|ss|a)$/i;function ew(e,t,o){const s=function(e){const t=e.indexOf("h");e=t>=0?e.slice(0,t).replace(/m/g,"M")+e.slice(t):e.replace(/m/g,"M");e.includes("a")||(e=e.replace(/h/g,"H"));return e}(t),i=function(e,t,o){const s=e.map((e=>ls(e,o)?.jsDate));if(s.some((e=>void 0===e))||e.length<2)return;const i=s.map((e=>e.getTime())),n=Ot(i)-Ft(i),r=function(e){if(e.includes("s"))return"second";if(e.includes("m"))return"minute";if(e.includes("h")||e.includes("H"))return"hour";if(e.includes("d"))return"day";if(e.includes("M"))return"month";return"year"}(t);if(Ky.second>=Ky[r]&&Jy.inSeconds(n)<180)return"second";if(Ky.minute>=Ky[r]&&Jy.inMinutes(n)<180)return"minute";if(Ky.hour>=Ky[r]&&Jy.inHours(n)<96)return"hour";if(Ky.day>=Ky[r]&&Jy.inDays(n)<90)return"day";if(Ky.month>=Ky[r]&&Jy.inMonths(n)<36)return"month";return"year"}(e,s,o),n={};return i&&(n[i]=s),{parser:s,displayFormats:n,unit:i??!1}}function tw(e,t,o,s){let i=Cw(s,t,o).formattedValues,n=ww(s,t);iC(o,t[0],e.dataSetsHaveTitle||!1)&&i.shift(),({labels:i,dataSetsValues:n}=vw(i,n)),e.aggregated&&({labels:i,dataSetsValues:n}=bw(i,n));const r=yw(s,t,"left"),a=yw(s,t,"right"),l=e.horizontal?{x:r||a}:{y:r,y1:a},c=[];for(const t in n){const{data:o}=n[t],s=e.dataSets?.[t].trend;if(!s?.display||e.horizontal){c.push(void 0);continue}const i=cw(s,o);c.push(i)}return{dataSetsValues:n,trendDataSetsValues:c,axisFormats:l,labels:i,locale:s.getLocale(),topPadding:xw(e,s)}}function ow(e,t,o,s){const i=tw(e,t.slice(0,2),o,s),n=i.dataSetsValues.filter((e=>!e.hidden)),r=[];if(n[0]){const e=n[0].data.map((e=>e>0?e:0));r.push({...n[0],data:e})}if(n[1]){const e=n[1].data.map((e=>e>0?-e:0));r.push({...n[1],data:e})}return{...i,dataSetsValues:r}}function sw(e,t,o,s){const i=function(e,t,o,s){if(function(e,t,o,s){return!e.labelsAsText&&gw(e,t,o,s)}(e,t,o,s)&&function(){if(!window.Chart)return!1;const e="luxon"===new window.Chart._adapters._date({})._id;e||mw||(mw=!0,console.warn("'chartjs-adapter-luxon' time adapter is not installed. Time scale axes are disabled."));return e}())return"time";if(function(e,t,o,s){return!e.labelsAsText&&pw(e,t,o,s)}(e,t,o,s))return"linear";return"category"}(e,t,o,s),n=Cw(s,t,o);let r="linear"===i?n.values:n.formattedValues,a=ww(s,t);const l=iC(o,t[0],e.dataSetsHaveTitle||!1);l&&r.shift(),({labels:r,dataSetsValues:a}=vw(r,a)),"time"===i&&({labels:r,dataSetsValues:a}=function(e,t){if(0===e.length||e.every((e=>!e)))return{labels:e,dataSetsValues:t};const o=[...e],s=ze(t);for(let e=0;e<o.length;e++)if(!o[e]){o[e]=gt(o,e);for(const t of s)t.data[e]=void 0}return{labels:o,dataSetsValues:s}}(r,a)),e.aggregated&&({labels:r,dataSetsValues:a}=bw(r,a)),e.cumulative&&(a=Iw(a,"asc"));const c={y:yw(s,t,"left"),y1:yw(s,t,"right"),x:Sw(s,o,l)},h=[];for(const t in a){const o=e.dataSets?.[t].trend;if(!o?.display){h.push(void 0);continue}const{data:n}=a[t];h.push(hw(o,n,r,i,s.getLocale()))}return{dataSetsValues:a,axisFormats:c,labels:r,locale:s.getLocale(),trendDataSetsValues:h,axisType:i,topPadding:xw(e,s)}}function iw(e,t,o,s){let i=Cw(s,t,o).formattedValues,n=ww(s,t);iC(o,t[0],e.dataSetsHaveTitle||!1)&&i.shift(),({labels:i,dataSetsValues:n}=vw(i,n)),e.aggregated&&({labels:i,dataSetsValues:n}=bw(i,n)),({dataSetsValues:n,labels:i}=function(e,t){const o=Math.max(e.length,...t.map((e=>e.data?.length||0))),s=je(0,o).filter((e=>t.some((t=>"number"==typeof t.data[e]&&t.data[e]>0))));return{labels:s.map((t=>e[t]||"")),dataSetsValues:t.map((e=>({...e,data:s.map((t=>"number"==typeof e.data[t]&&e.data[t]>0?e.data[t]:null))})))}}(i,n));return{dataSetsValues:n,axisFormats:{y:yw(s,t,"left")},labels:i,locale:s.getLocale(),topPadding:xw(e,s)}}function nw(e,t,o,s){let i=Cw(s,t,o).formattedValues,n=ww(s,t);iC(o,t[0],e.dataSetsHaveTitle||!1)&&i.shift(),({labels:i,dataSetsValues:n}=vw(i,n)),e.aggregated&&({labels:i,dataSetsValues:n}=bw(i,n));return{dataSetsValues:n,axisFormats:{r:yw(s,t,"left")||yw(s,t,"right")},labels:i,locale:s.getLocale()}}function rw(e,t,o,s){const i=t.slice(0,1);let n=Cw(s,i,o).formattedValues;iC(o,i[0],e.dataSetsHaveTitle||!1)&&n.shift();let r=ww(s,i);({labels:n,dataSetsValues:r}=bw(n,r));return{dataSetsValues:r,axisFormats:{y:yw(s,i,"left")||yw(s,i,"right")},labels:n,locale:s.getLocale(),availableRegions:s.getGeoChartAvailableRegions(),geoFeatureNameToId:s.geoFeatureNameToId,getGeoJsonFeatures:s.getGeoJsonFeatures}}function aw(e,t,o,s){let i=Cw(s,t,o).formattedValues,n=ww(s,t);iC(o,t[0],e.dataSetsHaveTitle||!1)&&i.shift(),({labels:i,dataSetsValues:n}=vw(i,n)),e.aggregated&&({labels:i,dataSetsValues:n}=bw(i,n)),e.cumulative&&(n=Iw(n,"desc"));return{dataSetsValues:n,axisFormats:{x:yw(s,t,"left")||yw(s,t,"right")},labels:i,locale:s.getLocale()}}function lw(e,t,o,s){let i=Cw(s,t,o).values,n=function(e,t){t=t.filter((t=>!e.isColHidden(t.dataRange.sheetId,t.dataRange.zone.left)));const o=t.map((()=>({data:[],label:""}))),s=t.map((t=>fw(e,t)));if(!s.length)return o;const i=Math.min(...s.map((e=>e.length)));let n=[];const r=t.length-1;for(let e=0;e<i;e++)for(let t=0;t<s.length;t++){let i=s[t][e];null==i&&t!==r&&(i=n[t]),i!==n[t]&&(n=n.slice(0,t),n[t]=i),o[t].data.push(i??null)}return o.filter((e=>e.data.some((e=>null!==e))))}(s,t);const r=iC(o,t[0],e.dataSetsHaveTitle||!1);return r&&i.shift(),({labels:i,dataSetsValues:n}=function(e,t){const o=[],s=[];for(let t=0;t<e.length;t++)Number(e[t])<=0?s.push(t):Number(e[t])>0&&o.push(t);const i=o.length?o:s;return{labels:i.map((t=>e[t])),dataSetsValues:t.map((e=>({...e,data:i.map((t=>e.data[t]))})))}}(i,n)),({labels:i,dataSetsValues:n}=function(e,t){const o=Math.max(e.length,...t.map((e=>e.data?.length||0))),s=e=>null==e||""===e,i=je(0,o).filter((o=>{const i=t.map((e=>e.data?.[o]));if(s(i[0]))return!1;let n=!1;for(const e of i)if(n||=s(e),n&&!s(e))return!1;return e[o]&&!isNaN(Number(e[o]))}));return{labels:i.map((t=>e[t])),dataSetsValues:t.map((e=>({...e,data:i.map((t=>e.data[t]))})))}}(i,n)),{dataSetsValues:n,axisFormats:{y:Sw(s,o,r)},labels:i,locale:s.getLocale()}}function cw(e,t){const o=[],s=[],i=[];for(let e=0;e<t.length;e++)"number"==typeof t[e]&&(o.push(t[e]),s.push(e+1)),i.push(e+1);const n=dw(e,o,s,je(.5,i.length+.55,.2));return n.length?n:void 0}function hw(e,t,o,s,i){const n=[],r=[],a=[],l=t.length;if(l<2)return;switch(s){case"category":for(let e=0;e<l;e++)"number"==typeof t[e]&&(n.push(t[e]),r.push(e+1)),a.push(e+1);break;case"linear":for(let e=0;e<t.length;e++){const s=Number(o[e]);isNaN(s)||("number"==typeof t[e]&&(n.push(t[e]),r.push(s)),a.push(s))}break;case"time":for(let e=0;e<t.length;e++){const s=gi({value:o[e]},i);null!==t[e]&&(n.push(t[e]),r.push(s)),a.push(s)}}const c=Math.min(...a),h=Math.max(...a);if(h===c)return;const d=(h-c)/(5*a.length),u=dw(e,n,r,je(c,h+d/2,d));return u.length?u:void 0}function dw(e,t,o,s){if(t.length<2||o.length<2||0===s.length)return[];const{normalizedLabels:i,normalizedNewLabels:n}=function(e,t,o){let s=[],i=[];if("logarithmic"===o.type){const o=Math.max(...e.map(Math.abs));s=e.map((e=>e/o)),i=t.map((e=>e/o))}else{const o=Math.max(...e),n=Math.min(...e),r=o-n;s=e.map((e=>(e-o)/r)),i=t.map((e=>(e-o)/r))}return{normalizedLabels:s,normalizedNewLabels:i}}(o,s,e);try{switch(e.type){case"polynomial":{const o=e.order;if(!o)return s.map((e=>({x:e,y:NaN})));if(1===o)return hc([t],[i],[n],!0)[0].map(((e,t)=>({x:s[t],y:e})));const r=nc(t,i,o,!0).flat();return n.map(((e,t)=>({x:s[t],y:ac(r,e,o)})))}case"exponential":{const e=[],o=[];for(let s=0;s<t.length;s++)t[s]>0&&(e.push(Math.log(t[s])),o.push(i[s]));return o.length?lc(hc([e],[o],[n],!0))[0].map(((e,t)=>({x:s[t],y:e}))):s.map((e=>({x:e,y:NaN})))}case"logarithmic":return hc([t],cc([i]),cc([n]),!0)[0].map(((e,t)=>({x:s[t],y:e})));case"trailingMovingAverage":return function(e,t,o=Ae){const s=[];for(let e=0;e<o-1;e++)s.push({x:t[e],y:NaN});for(let i=0;i<=e.length-o;i++){let n=0;for(let t=i;t<i+o;t++)n+=e[t];s.push({x:t[i+o-1],y:n/o})}return s}(t,o,e.window);default:return s.map((e=>({x:e,y:NaN})))}}catch(e){return s.map((e=>({x:e,y:NaN})))}}function uw(e,t,o,s){return gw(e,t,o,s)||pw(e,t,o,s)}function gw(e,t,o,s){if(!o||!pw(e,t,o,s))return!1;const i=Sw(s,o,iC(o,t[0],e.dataSetsHaveTitle||!1));return Boolean(i&&Qy.test(i))}function pw(e,t,o,s){if(!o)return!1;const i=s.getRangeValues(o);return iC(o,t[0],e.dataSetsHaveTitle||!1)&&i.shift(),!i.some((e=>isNaN(Number(e))&&e))&&!i.every((e=>!e))}let mw=!1;function fw(e,t){if(t.dataRange){const o=t.labelCell?[t.labelCell.zone]:[],s=er([t.dataRange.zone],o)[0];if(void 0===s)return[];const i=e.getRangeFromZone(t.dataRange.sheetId,s);return e.getRangeValues(i).map((e=>""===e?void 0:e))}return[]}function vw(e,t){const o=je(0,Math.max(e.length,...t.map((e=>e.data?.length||0)))).filter((o=>{const s=e[o],i=t.map((e=>e.data?.[o]));return s||i.some((e=>"number"==typeof e))}));return{labels:o.map((t=>e[t]||"")),dataSetsValues:t.map((e=>({...e,data:o.map((t=>"number"==typeof e.data[t]?e.data[t]:null))})))}}function bw(e,t){const o=new Set(e),s={};o.forEach((e=>{s[e]=new Array(t.length).fill(0)}));for(const o of je(0,e.length)){const n=e[o];for(const e of je(0,t.length))s[n][e]+="number"==typeof(i=t[e].data[o])?i:0}var i;return{labels:Array.from(o),dataSetsValues:t.map(((e,t)=>({...e,data:Array.from(o).map((e=>s[e][t]))})))}}function Sw(e,t,o){if(!t)return;const{sheetId:s,zone:i}=t,n=Er(i).map((t=>e.getEvaluatedCell({sheetId:s,...t}).format));return o&&n.shift(),n.find((e=>void 0!==e))}function Cw(e,t,o){let s={values:[],formattedValues:[]};if(o){const{left:i}=o.zone;if(o.invalidXc||o.invalidSheetName||e.isColHidden(o.sheetId,i)){if(t[0]){s={formattedValues:je(0,fw(e,t[0]).length).map((e=>e.toString())),values:s.formattedValues}}}else s={formattedValues:e.getRangeFormattedValues(o),values:e.getRangeValues(o).map((e=>String(e??"")))}}else if(1===t.length){const o=fw(e,t[0]).length;for(let e=0;e<o;e++)s.formattedValues.push(""),s.values.push("")}else if(t[0]){s={formattedValues:je(0,fw(e,t[0]).length).map((e=>e.toString())),values:s.formattedValues}}return s}function yw(e,t,o){const s=t.filter((e=>"right"===o==!!e.rightYAxis));for(const t of s){const o=e.getRangeFormats(t.dataRange).find((e=>void 0!==e&&!Rn(e)));if(o)return o}}function ww(e,t){const o=[];for(const[s,i]of Object.entries(t)){let t,n=e.isColHidden(i.dataRange.sheetId,i.dataRange.zone.left);if(i.labelCell){const o=i.labelCell,n=o?e.getEvaluatedCell({sheetId:o.sheetId,col:o.zone.left,row:o.zone.top}):void 0;t=n&&o?n.formattedValue:t=`${$y.Series} ${parseInt(s)+1}`}else t=`${$y.Series} ${parseInt(s)+1}`;const r=i.dataRange?fw(e,i):[];r.every((e=>"string"==typeof e&&!hi(e)))&&r.some((e=>""!==e))?r.fill(1):r.every((e=>null==e||!Is(e.toString(),$s)))&&(n=!0),o.push({data:r,label:t,hidden:n})}return o}function Iw(e,t){return e.map((e=>{const o=[];let s=0;const i="asc"===t?Object.keys(e.data):Object.keys(e.data).reverse();for(const t of i)isNaN(parseFloat(e.data[t]))?o[t]=e.data[t]:(s+=parseFloat(e.data[t]),o[t]=s);return{...e,data:o}}))}function xw(e,t){const{title:o,legendPosition:s}=e,i=o&&o.text||"top"===s;return t.isDashboard()&&!i?30:0}function Ew(e,t){return{padding:{left:j,right:j,top:Math.max(X,t.topPadding||0),bottom:Y}}}function Rw(e,t){return{display:"none"!==e.legendPosition,position:"none"!==e.legendPosition?e.legendPosition:void 0}}function Tw(e,t){return{...Nw,...Rw(e),...kw(eC(e.background),{pointStyle:"rect",lineWidth:3})}}function Aw(e,t){const o=e.fillArea,s=o?"rect":"line",i=o?2:3;return{...Nw,...Rw(e),...kw(eC(e.background),{pointStyle:s,lineWidth:i})}}function Dw(e,t){const{dataSetsValues:o}=t,s=Math.max(0,...o.map((e=>e?.data?.length??0))),i=cC(new po(s),o),n=eC(e.background);return{...Rw(e),labels:{usePointStyle:!0,generateLabels:e=>(e.data.labels?.map(((e,t)=>({text:hC(String(e)),strokeStyle:i[t],fillStyle:i[t],pointStyle:"rect",lineWidth:2,fontColor:n})))||[]).filter((e=>e.text)),filter:(e,t)=>!("datasetIndex"in e)||!t.datasets[e.datasetIndex].hidden}}}function _w(e,t){return{...Nw,...Rw(e),...kw(eC(e.background),{pointStyle:"circle",strokeStyle:e.background||"#ffffff",lineWidth:8})}}function Ow(e,t){return{...Nw,...Rw(e),...kw(eC(e.background),{lineWidth:3})}}function Fw(e,t){const o=eC(e.background),s=e.negativeValuesColor||A,i=e.positiveValuesColor||T,n=e.subTotalValuesColor||D;return{...Rw(e),labels:{usePointStyle:!0,generateLabels:()=>{const t=[{text:Vo("Positive values"),fontColor:o,fillStyle:i,strokeStyle:i,pointStyle:"rect"},{text:Vo("Negative values"),fontColor:o,fillStyle:s,strokeStyle:s,pointStyle:"rect"}];return(e.showSubTotals||e.firstValueAsSubtotal)&&t.push({text:Vo("Subtotals"),fontColor:o,fillStyle:n,strokeStyle:n,pointStyle:"rect"}),t},filter:(e,t)=>!("datasetIndex"in e)||!t.datasets[e.datasetIndex].hidden},onClick:()=>{}}}function Pw(e,t){const o=e.fillArea??!1,s=o?"rect":"line",i=o?2:3;return{...Nw,...Rw(e),...kw(eC(e.background),{pointStyle:s,lineWidth:i})}}function Mw(e,t){const o=eC(e.background);return{...Rw(e),labels:{usePointStyle:!0,generateLabels:e=>{const t=e.data.datasets.at(-1);if(!t)return[];return t.groupColors.map((({color:e,label:t})=>({text:hC(t),fontColor:o,fillStyle:e,strokeStyle:e,pointStyle:"rect"})))}}}}const Nw={onHover:e=>{const t=e.native?.target;t&&(t.style.cursor="pointer")},onLeave:e=>{const t=e.native?.target;t&&(t.style.cursor="default")},onClick:(e,t,o)=>{if("click"!==e.type)return;const s=t.datasetIndex;o.legendItems&&void 0!==s&&(o.chart.isDatasetVisible(s)?o.chart.hide(s):o.chart.show(s),e.native.preventDefault(),e.native.stopPropagation())}};function kw(e,t){return{labels:{color:e,usePointStyle:!0,generateLabels:o=>o.data.datasets.map(((s,i)=>dC(s.xAxisID)?{text:hC(s.label),fontColor:e,strokeStyle:s.borderColor,hidden:!o.isDatasetVisible(i),pointStyle:"line",datasetIndex:i,lineWidth:3}:{text:hC(s.label),fontColor:e,strokeStyle:s.borderColor,fillStyle:s.backgroundColor,hidden:!o.isDatasetVisible(i),pointStyle:"line"===s.type?"line":"rect",datasetIndex:i,...t})).filter((e=>e.text)),filter:(e,t)=>!("datasetIndex"in e)||!t.datasets[e.datasetIndex].hidden}}}function Vw(e,t){let o={};const{trendDataSetsValues:s,locale:i,axisFormats:n}=t,r={stacked:e.stacked,locale:i};if(e.horizontal)o.x=Zw(e,"bottom","values",{...r,format:n?.x}),o.y=Zw(e,"left","labels",r);else{o.x=Zw(e,"bottom","labels",r);const t={...r,format:n?.y};o.y=Zw(e,"left","values",t);const s={...r,format:n?.y1};o.y1=Zw(e,"right","values",s)}if(o=bt(o),s&&s.length&&s.some(lt)){const e=Math.max(...s.map((e=>e?.length||0)));o[zS]={...o.x,labels:Array(e).fill(""),offset:!1,display:!1},o[$S]={...o.x,offset:!0,display:!1}}return o}function Lw(e,t){const{locale:o,axisType:s,trendDataSetsValues:i,labels:n,axisFormats:r}=t,a=r?.x,l=e.stacked;let c={x:Zw(e,"bottom","labels",{locale:o}),y:Zw(e,"left","values",{locale:o,stacked:l,format:r?.y}),y1:Zw(e,"right","values",{locale:o,stacked:l,format:r?.y1})};if(c=bt(c),"time"===s&&n&&a){const e={type:"time",time:ew(n,a,o)};Object.assign(c.x,e),c.x.ticks.maxTicksLimit=15}else"linear"===s&&(c.x.type="linear",c.x.ticks.callback=e=>bn(e,{format:a,locale:o}));if(i&&i.length&&i.some(lt)&&(c[zS]={...c.x,display:!1},c[$S]={...c.x,display:!1},"category"===s||"time"===s)){const e=Math.max(...i.map((e=>e?.length||0)));c[zS].type="category",c[zS].labels=je(0,e).map((e=>e.toString())),c[zS].offset=!1,c[$S].type="category",c[$S].offset=!1}return c}function Hw(e,t){const o=Lw(e,t);return{...o,x:{...o.x,grid:{display:!0}}}}function Uw(e,t){const{locale:o,axisFormats:s}=t,i=s?.y||s?.y1;e.dataSets;const n={x:{...Zw(e,"bottom","labels",{locale:o}),grid:{display:!1}},y:{position:e.verticalAxisPosition,ticks:{color:eC(e.background),callback:aC({locale:o,format:i})},grid:{lineWidth:e=>0===e.tick.value?2:1},title:qw(e.axesDesign?.y)}},r=n?.y||n?.y1;return r&&(r.grid={lineWidth:e=>0===e.tick.value?2:1}),n}function Bw(e,t){const{dataSetsValues:o}=t,s=Vw(e,t),i=s.x.ticks.callback;s.x.ticks.callback=e=>i(Math.abs(e));const n=Math.max(...o.map((e=>Math.max(...e.data.map(Math.abs)))));return s.x.suggestedMin=-n,s.x.suggestedMax=n,s}function zw(e,t){const{locale:o,axisFormats:s,dataSetsValues:i}=t,n=Math.min(...i.map((e=>Math.min(...e.data.filter((e=>!isNaN(e)))))));return{r:{beginAtZero:!0,ticks:{callback:aC({format:s?.r,locale:o}),backdropColor:e.background||"#FFFFFF"},pointLabels:{color:eC(e.background),callback:hC},suggestedMin:n<0?n-1:0}}}function $w(e,t){const{locale:o,axisFormats:s,availableRegions:i}=t,n=function(e){switch(e){case"top":return"top-left";case"right":return"top-right";case"bottom":return"bottom-right";case"left":case"none":return"bottom-left"}}(e.legendPosition),r=e.region?i.find((t=>t.id===e.region)):i[0],a=s?.y||s?.y1;return{projection:{projection:Ww(r?.defaultProjection||"mercator"),axis:"x"},color:{axis:"x",display:"none"!==e.legendPosition,border:{color:O},grid:{color:O},ticks:{color:eC(e.background),callback:aC({locale:o,format:a})},legend:{position:n,align:n.includes("right")?"left":"right",margin:Yw(e)},interpolate:jw(e),missing:e.missingValueColor||"#ffffff"}}}function Gw(e,t){const o=t.dataSetsValues[0];return{x:{display:!1},y:{grid:{offset:!1},ticks:{callback:function(e){return hC(this.getLabelForValue(e))}},border:{display:!1}},percentages:{position:"right",border:{display:!1},ticks:{callback:function(e,s,i){const n=o.data?.[s],r=o.data?.[0];return r&&void 0!==n?bn(n/r,{format:"0%",locale:t.locale}):""}},grid:{display:!1}}}}function Ww(e){return"conicConformal"===e?window.ChartGeo.geoConicConformal().rotate([100,0]):e}function qw(e){if(e?.title?.text){const{text:t,color:o,align:s,italic:i,bold:n}=e.title;return{display:!0,text:t,color:o,font:{style:i?"italic":"normal",weight:n?"bold":"normal",size:e.title.fontSize??J},align:"left"===s?"start":"right"===s?"end":"center"}}}function Zw(e,t,o,s){const{useLeftAxis:i,useRightAxis:n}=nC(e);if("left"===t&&!i||"right"===t&&!n)return;const r=eC(e.background);let a;if(a="bottom"===t?e.axesDesign?.x:"left"===t?e.axesDesign?.y:e.axesDesign?.y1,"values"===o){const e=!("right"===t&&i);return{position:t,title:qw(a),grid:{display:e},beginAtZero:!0,stacked:s?.stacked,ticks:{color:r,callback:aC(s)}}}return{ticks:{padding:5,color:r,callback:function(e){return hC(this.getLabelForValue(e))}},grid:{display:!1},stacked:s?.stacked,title:qw(a)}}function jw(e){if(!e.colorScale||"string"==typeof e.colorScale)return e.colorScale||"oranges";const t=[{value:0,color:e.colorScale.minColor}];return e.colorScale.midColor&&t.push({value:.5,color:e.colorScale.midColor}),t.push({value:1,color:e.colorScale.maxColor}),vo(t)}function Yw(e){switch(e.legendPosition){case"top":case"right":return{top:!!e.title.text?X+30:X,left:j,right:j};case"bottom":case"left":case"none":return{left:j,right:j,bottom:Y}}}const Xw={showValues:!1,showLabels:!0,valuesDesign:{align:"center",fontSize:13}};function Kw(e,t){const{axisFormats:o,locale:s}=t;return{horizontal:"horizontal"in e&&e.horizontal,showValues:"showValues"in e&&!!e.showValues,background:e.background,callback:(t,i)=>{const n=function(e,t){if(t.rAxisID)return t.rAxisID;const o="horizontal"in e&&e.horizontal?t.xAxisID:t.yAxisID;return o||"y"}(e,i);return rC(o,s)(t,n)}}}function Jw(e,t){const{axisFormats:o,locale:s}=t;return{callback:rC(o,s),showLabels:e.showLabels??Xw.showLabels,showValues:e.showValues??Xw.showValues,style:{fontSize:e.valuesDesign?.fontSize??Xw.valuesDesign.fontSize,align:e.valuesDesign?.align??Xw.valuesDesign.align,bold:e.valuesDesign?.bold??Xw.valuesDesign.bold,italic:e.valuesDesign?.italic??Xw.valuesDesign.italic,textColor:e.valuesDesign?.color??Xw.valuesDesign.color}}}function Qw(e,t){const{axisFormats:o,locale:s}=t;return{horizontal:!0,showValues:"showValues"in e&&!!e.showValues,background:e.background,callback:(e,t)=>0===(e=Math.abs(Number(e)))?"":rC(o,s)(e,t.xAxisID||"x")}}function eI(e,t){const{axisFormats:o,locale:s,dataSetsValues:i}=t,n=i.reduce(((e,t)=>(e.push((e.at(-1)||-1)+t.data.length+1),e)),[]);return{showValues:"showValues"in e&&!!e.showValues,background:e.background,callback:(t,i,r)=>{const a=i._dataset.data[r],l=a[1]-a[0];let c=l>=0?"+":"";return e.showSubTotals&&n.includes(r)&&"+"===c&&(c=""),`${c}${rC(o,s)(l,i.yAxisID)}`}}}function tI(e){const t=e.title,o=tC(e.background);return{display:!!t.text,text:Vo(t.text),color:t?.color??o,align:"center"===t.align?"center":"right"===t.align?"end":"start",font:{size:e.title.fontSize??K,weight:t.bold?"bold":"normal",style:t.italic?"italic":"normal"},padding:{bottom:"top"===e.legendPosition?0:j}}}const oI='\n<templates>\n <t t-name="o-spreadsheet-CustomTooltip">\n <div\n class="o-chart-custom-tooltip border rounded px-2 py-1 pe-none mw-100 position-absolute text-nowrap shadow opacity-100">\n <table class="overflow-hidden m-0">\n <thead t-if="title">\n <tr>\n <th class="o-tooltip-title align-baseline border-0 text-truncate" t-esc="title" t-attf-style="max-width: {{ labelsMaxWidth }}"/>\n </tr>\n </thead>\n <tbody>\n <tr t-foreach="tooltipItems" t-as="tooltipItem" t-key="tooltipItem_index">\n <td>\n <span\n class="badge ps-2 py-2 rounded-0 align-middle"\n t-attf-style="background-color: {{ tooltipItem.boxColor }}"\n > </span>\n <small\n t-if="tooltipItem.label"\n class="o-tooltip-label d-inline-block text-truncate align-middle smaller ms-2"\n t-esc="tooltipItem.label"\n t-attf-style="max-width: {{ labelsMaxWidth }}"\n />\n </td>\n <td class="o-tooltip-value ps-2 fw-bolder text-end">\n <small class="smaller d-inline-block text-truncate align-middle" t-attf-style="max-width: {{ valuesMaxWidth }}">\n <t t-esc="tooltipItem.value"/>\n <t t-if="tooltipItem.percentage">\n (\n <t t-esc="tooltipItem.percentage"/>\n %)\n </t>\n </small>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </t>\n</templates>\n';let sI;function iI(e,o={}){return function(e,o={}){sI||(sI=new t.App(t.Component,{templates:oI,translateFn:Vo}));const s=sI.getTemplate(e),i=s(o,{}),n=document.createElement("div");return t.blockDom.mount(i,n),n}(e,o).innerHTML}function nI(e,t){return{enabled:!1,external:mI,callbacks:{title:function(e){return e.some((e=>!dC(e.dataset.xAxisID)))?void 0:""},beforeLabel:e=>e.dataset?.label||e.label,label:function(o){const s=e.horizontal;let i=s?o.parsed.x:o.parsed.y;null==i&&(i=o.parsed);const n=s?o.dataset.xAxisID:o.dataset.yAxisID;return rC(t.axisFormats,t.locale)(i,n)}}}}function rI(e,t){const{axisType:o,locale:s,axisFormats:i}=t,n=i?.x,r={enabled:!1,external:mI,callbacks:{}};return r.callbacks.label="linear"===o?e=>{const t=e.parsed.y;let o=dC(e.dataset.xAxisID)?"":e.parsed.x;"string"==typeof o&&Is(o,s)&&(o=gi(o,s));const r=bn(o,{locale:s,format:n}),a=e.dataset.yAxisID||"y",l=bn(t,{locale:s,format:i?.[a]});return r?`(${r}, ${l})`:`${l}`}:function(e){const t=e.parsed.y,o=e.dataset.yAxisID;return rC(i,s)(t,o)},r.callbacks.beforeLabel=e=>e.dataset?.label||e.label,r.callbacks.title=function(e){return"linear"!==o&&e.some((e=>!dC(e.dataset.xAxisID)))?void 0:""},r}function aI(e,t){const{locale:o,axisFormats:s}=t,i=s?.y||s?.y1;return{enabled:!1,external:mI,callbacks:{title:function(e){return e[0].dataset.label},beforeLabel:e=>e.label||e.dataset.label,label:function(e){const t=function(e,t){const o=e.filter((e=>"number"==typeof e)).reduce(((e,t)=>e+t),0);if(!o)return"";const s=e[t]/o*100;return s.toFixed(2)}(e.dataset.data,e.dataIndex),s=e.parsed.y??e.parsed;return`${bn(s,{format:!i&&s>=1e3?"#,##":i,locale:o})} (${t}%)`}}}}function lI(e,t){const{dataSetsValues:o,locale:s,axisFormats:i,labels:n}=t,r=i?.y||i?.y1,a=o.map((e=>e.label));return{enabled:!1,external:mI,callbacks:{beforeLabel:function(e){const t=n.length?Math.floor(e.dataIndex/n.length):0;return a[t]},label:function(e){const[t,o]=e.raw,i=o-t;return bn(i,{format:!r&&Math.abs(i)>1e3?"#,##":r,locale:s})}}}}function cI(e,t){const o=nI(e,t);return{...o,callbacks:{...o.callbacks,label:e=>{const t={...e,parsed:{y:e.parsed.y,x:Math.abs(e.parsed.x)}};return(o?.callbacks?.label)(t)}}}}function hI(e,t){const{locale:o,axisFormats:s}=t;return{enabled:!1,external:mI,callbacks:{beforeLabel:e=>e.dataset?.label||e.label,label:function(e){return bn(e.parsed.r,{format:s?.r,locale:o})}}}}function dI(e,t){const{locale:o,axisFormats:s}=t,i=s?.y||s?.y1;return{enabled:!1,external:mI,filter:function(e){return void 0!==e.raw.value},callbacks:{beforeLabel:e=>e.raw.feature.properties.name,label:function(e){const t=e.raw.value;return bn(t,{format:!i&&Math.abs(t)>=1e3?"#,##":i,locale:o})}}}}function uI(e,t){return{enabled:!1,external:mI,position:"funnelTooltipPositioner",callbacks:{title:()=>"",beforeLabel:e=>e.label,label:function(e){const o=e.parsed.x,s=e.dataset.xAxisID;return rC(t.axisFormats,t.locale)(o,s)}}}}function gI(e,t){const{locale:o,axisFormats:s}=t,i=s?.y||s?.y1;return{enabled:!1,external:mI,filter:function(e){const t=e.raw;return t?.label!==fC},callbacks:{title:()=>"",beforeLabel:e=>e.raw.groups.join(" / "),label:function(e){const t=e.raw.value;return bn(t,{format:!i&&t>=1e3?"#,##":i,locale:o})}}}}function pI(e,t){const{locale:o,axisFormats:s}=t,i=s?.y;return{enabled:!1,external:mI,filter:(e,t,o)=>t===o.length-1,callbacks:{title:()=>"",beforeLabel:e=>{const t=e.raw._data.children[0];if(!t)return"";const o=[];for(let s=0;s<=e.raw.l;s++)o.push(t[s]);return o.join(" / ")},label:e=>{const t=e.raw.v;return bn(t,{format:!i&&t>=1e3?"#,##":i,locale:o})}}}}function mI({chart:e,tooltip:t}){if(e.canvas.parentNode.querySelector("div.o-chart-custom-tooltip")?.remove(),0===t.opacity||0===t.dataPoints.length)return;const o=t.body.map(((e,o)=>{let s=e.before[0],i=e.lines[0];i||(i=s,s="");const n=t.labelColors[o].backgroundColor;return{label:s,value:i,boxColor:"string"==typeof n?eo(n,1):n}})),s=iI("o-spreadsheet-CustomTooltip",{labelsMaxWidth:Math.floor(.5*e.canvas.clientWidth)+"px",valuesMaxWidth:Math.floor(.25*e.canvas.clientWidth)+"px",title:t.title[0],tooltipItems:o}),i=Object.assign(document.createElement("template"),{innerHTML:s}).content.firstChild;e.canvas.parentNode?.appendChild(i),Object.assign(i.style,{left:fI(e,t,i.clientWidth)+"px",top:Math.floor(t.caretY-i.clientHeight/2)+"px"})}function fI(e,t,o){const s=t.caretX;return s+o>e.chartArea.right?Math.max(0,s-o):s}var vI=Object.freeze({__proto__:null,GHOST_SUNBURST_VALUE:fC,INTERACTIVE_LEGEND_CONFIG:Nw,canChartParseLabels:uw,getBarChartData:tw,getBarChartDatasets:vC,getBarChartLegend:Tw,getBarChartScales:Vw,getBarChartTooltip:nI,getChartColorsGenerator:NC,getChartLabelFormat:Sw,getChartLayout:Ew,getChartShowValues:Kw,getChartTitle:tI,getComboChartDatasets:wC,getComboChartLegend:Ow,getData:fw,getFunnelChartData:aw,getFunnelChartDatasets:EC,getFunnelChartScales:Gw,getFunnelChartTooltip:uI,getFunnelLabelColors:RC,getGeoChartData:rw,getGeoChartDatasets:xC,getGeoChartScales:$w,getGeoChartTooltip:dI,getHierarchalChartData:lw,getLineChartData:sw,getLineChartDatasets:SC,getLineChartLegend:Aw,getLineChartScales:Lw,getLineChartTooltip:rI,getPieChartData:iw,getPieChartDatasets:yC,getPieChartLegend:Dw,getPieChartTooltip:aI,getPyramidChartData:ow,getPyramidChartScales:Bw,getPyramidChartShowValues:Qw,getPyramidChartTooltip:cI,getRadarChartData:nw,getRadarChartDatasets:IC,getRadarChartLegend:Pw,getRadarChartScales:zw,getRadarChartTooltip:hI,getScatterChartDatasets:CC,getScatterChartLegend:_w,getScatterChartScales:Hw,getSunburstChartDatasets:TC,getSunburstChartLegend:Mw,getSunburstChartTooltip:gI,getSunburstShowValues:Jw,getTopPaddingForDashboard:xw,getTreeMapChartDatasets:OC,getTreeMapChartTooltip:pI,getTrendDatasetForBarChart:cw,getTrendDatasetForLineChart:hw,getWaterfallChartLegend:Fw,getWaterfallChartScales:Uw,getWaterfallChartShowValues:eI,getWaterfallChartTooltip:lI,getWaterfallDatasetAndLabels:bC,makeDatasetsCumulative:Iw});class bI extends $C{dataSets;labelRange;background;legendPosition;stacked;aggregated;type="bar";dataSetsHaveTitle;dataSetDesign;axesDesign;horizontal;showValues;constructor(e,t,o){super(e,t,o),this.dataSets=YS(o,e.dataSets,t,e.dataSetsHaveTitle),this.labelRange=fa(o,t,e.labelRange),this.background=e.background,this.legendPosition=e.legendPosition,this.stacked=e.stacked,this.aggregated=e.aggregated,this.dataSetsHaveTitle=e.dataSetsHaveTitle,this.dataSetDesign=e.dataSets,this.axesDesign=e.axesDesign,this.horizontal=e.horizontal,this.showValues=e.showValues}static transformDefinition(e,t,o){return QS(e,t,o)}static validateChartDefinition(e,t){return e.checkValidations(t,oC,sC)}static getDefinitionFromContextCreation(e){return{background:e.background,dataSets:e.range??[],dataSetsHaveTitle:e.dataSetsHaveTitle??!1,stacked:e.stacked??!1,aggregated:e.aggregated??!1,legendPosition:e.legendPosition??"top",title:e.title||{text:""},type:"bar",labelRange:e.auxiliaryRange||void 0,axesDesign:e.axesDesign,showValues:e.showValues}}getContextCreation(){const e=[];for(const[t,o]of this.dataSets.entries())e.push({...this.dataSetDesign?.[t],dataRange:this.getters.getRangeString(o.dataRange,this.sheetId)});return{...this,range:e,auxiliaryRange:this.labelRange?this.getters.getRangeString(this.labelRange,this.sheetId):void 0}}duplicateInDuplicatedSheet(e){const t=qS(this.sheetId,e,this.dataSets),o=ZS(this.sheetId,e,this.labelRange),s=this.getDefinitionWithSpecificDataSets(t,o,e);return new bI(s,e,this.getters)}copyInSheetId(e){const t=this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange,e);return new bI(t,e,this.getters)}getDefinition(){return this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange)}getDefinitionWithSpecificDataSets(e,t,o){const s=[];for(const[t,i]of e.entries())s.push({...this.dataSetDesign?.[t],dataRange:this.getters.getRangeString(i.dataRange,o||this.sheetId)});return{type:"bar",dataSetsHaveTitle:!!e.length&&Boolean(e[0].labelCell),background:this.background,dataSets:s,legendPosition:this.legendPosition,labelRange:t?this.getters.getRangeString(t,o||this.sheetId):void 0,title:this.title,stacked:this.stacked,aggregated:this.aggregated,axesDesign:this.axesDesign,horizontal:this.horizontal,showValues:this.showValues}}getDefinitionForExcel(){const e=this.dataSets.map((e=>KS(this.getters,e))).filter((e=>""!==e.range&&e.range!==Js.InvalidReference)),t=JS(this.getters,this.labelRange,iC(this.labelRange,this.dataSets[0],this.dataSetsHaveTitle)),o=this.getDefinition();return{...o,backgroundColor:wy(this.background||m),fontColor:wy(eC(this.background)),dataSets:e,labelRange:t,verticalAxis:nC(o)}}updateRanges(e){const{dataSets:t,labelRange:o,isStale:s}=WS(this.getters,e,this.dataSets,this.labelRange);if(!s)return this;const i=this.getDefinitionWithSpecificDataSets(t,o);return new bI(i,this.sheetId,this.getters)}}function SI(e,t){const o=e.getDefinition(),s=tw(o,e.dataSets,e.labelRange,t);return{chartJsConfig:{type:"bar",data:{labels:s.labels,datasets:vC(o,s)},options:{...Ly,indexAxis:e.horizontal?"y":"x",layout:Ew(0,s),scales:Vw(o,s),plugins:{title:tI(o),legend:Tw(o),tooltip:nI(o,s),chartShowValuesPlugin:Kw(o,s)}}},background:e.background||m}}const CI=new n;CI.add("animatedBackgroundColorChange",{id:"animatedBackgroundColorChange",easingFn:"easeOutCubic",hasAnimation:(e,t)=>e?.style?.fillColor!==t?.style?.fillColor,updateAnimation:function(e,t,o,s){const i=vo([{value:0,color:o.style.fillColor||"#ffffff"},{value:1,color:s.style.fillColor||"#ffffff"}]);t.style.fillColor=i(yI[this.easingFn](e))}}),CI.add("animatedTextColorChange",{id:"animatedTextColorChange",easingFn:"easeOutCubic",hasAnimation:(e,t)=>e?.style?.textColor!==t?.style?.textColor,updateAnimation:function(e,t,o,s){const i=vo([{value:0,color:o.style.textColor||"#000000"},{value:1,color:s.style.textColor||"#000000"}]);t.style.textColor=i(yI[this.easingFn](e))}}),CI.add("animatedDataBar",{id:"animatedDataBar",easingFn:"easeOutCubic",hasAnimation:(e,t)=>e?.dataBarFill?.percentage!==t?.dataBarFill?.percentage,updateAnimation:function(e,t,o,s){const i=o?.dataBarFill?.percentage||0,n=i+((s?.dataBarFill?.percentage||0)-i)*yI[this.easingFn](e);t.dataBarFill={color:s.dataBarFill?.color||o.dataBarFill?.color||"#ffffff",percentage:n}}}),CI.add("textFadeIn",{id:"textFadeIn",easingFn:"easeInCubic",hasAnimation:(e,t)=>{const o=e?.content?.textLines?.join("\n"),s=t?.content?.textLines?.join("\n");return Boolean(!o&&s)},updateAnimation:function(e,t,o,s){t.textOpacity=yI[this.easingFn](e)}}),CI.add("textFadeOut",{id:"textFadeOut",easingFn:"easeOutCubic",hasAnimation:(e,t)=>{const o=e?.content?.textLines?.join("\n"),s=t?.content?.textLines?.join("\n");return Boolean(o&&!s)},updateAnimation:function(e,t,o,s){const i=1-yI[this.easingFn](e),n={...o.style};delete n.fillColor,t.textOpacity=i,t.content=o.content,t.clipRect=o.clipRect,Object.assign(t.style,n)}}),CI.add("iconFadeIn",{id:"iconFadeIn",easingFn:"easeInCubic",hasAnimation:(e,t)=>Boolean(!e?.icons?.left&&t?.icons?.left||!e?.icons?.right&&t?.icons?.right||!e?.icons?.center&&t?.icons?.center),updateAnimation:function(e,t,o,s){const i=yI[this.easingFn](e);t.icons.left&&s.icons.left&&!o.icons.left&&(t.icons.left.opacity=i),t.icons.right&&s.icons.right&&!o.icons.right&&(t.icons.right.opacity=i),t.icons.center&&s.icons.center&&!o.icons.center&&(t.icons.center.opacity=i)}}),CI.add("iconFadeOut",{id:"iconFadeOut",easingFn:"easeOutCubic",hasAnimation:(e,t)=>Boolean(e?.icons?.left&&!t?.icons?.left||e?.icons?.right&&!t?.icons?.right||e?.icons?.center&&!t?.icons?.center),updateAnimation:function(e,t,o,s){const i=1-yI[this.easingFn](e);t.icons||(t.icons={}),o.icons.left&&!s.icons.left&&(t.icons.left={...o.icons.left,opacity:i}),o.icons.right&&!s.icons.right&&(t.icons.right={...o.icons.right,opacity:i}),o.icons.center&&!s.icons.center&&(t.icons.center={...o.icons.center,opacity:i})}}),CI.add("textChange",{id:"textChange",easingFn:"easeOutCubic",hasAnimation:(e,t)=>{const o=e?.content?.textLines?.join("\n"),s=t?.content?.textLines?.join("\n");return Boolean(o&&s&&(o!==s||xI(t,e)))},updateAnimation:function(e,t,o,s){const i=yI[this.easingFn](e),n=s.y+(i-1)*s.height,r=s.y+i*s.height,a=xI(s,o),l={id:s.id+"-text-slide-in",x:s.x,y:n,width:s.width,height:s.height,style:{...s.style},skipCellGridLines:!0,content:s.content?{...s.content}:void 0,clipRect:s.clipRect||{...s,x:Math.max(0,s.x-(s.content?.width||0)),width:s.width+2*(s.content?.width||0)},icons:a?II(s.icons,s):wI(s.icons)},c={id:o.id+"-text-slide-out",x:s.x,y:r,width:s.width,height:s.height,style:{...o.style},skipCellGridLines:!0,content:o.content?{...o.content}:void 0,clipRect:o.clipRect||{...s,x:Math.max(0,s.x-(o.content?.width||0)),width:s.width+2*(o.content?.width||0)},icons:a?II(o.icons,s):wI(o.icons)};if(s.content&&o.content&&l.content&&c.content){const e=s.content.y+(i-1)*s.height,t=s.content.y+i*s.height;l.content.y=e,c.content.y=t}return c.style.fillColor=l.style.fillColor=void 0,t.content=void 0,t.icons=a?{}:t.icons,{newBoxes:[l,c]}}}),CI.add("borderFadeIn",{id:"borderFadeIn",easingFn:"easeInCubic",hasAnimation:(e,t)=>Boolean(!e?.border?.bottom&&t?.border?.bottom||!e?.border?.top&&t?.border?.top||!e?.border?.left&&t?.border?.left||!e?.border?.right&&t?.border?.right),updateAnimation:function(e,t,o,s){const i=yI[this.easingFn](e);t.border?.top&&s.border?.top&&!o.border?.top&&(t.border.top.opacity=i),t.border?.bottom&&s.border?.bottom&&!o.border?.bottom&&(t.border.bottom.opacity=i),t.border?.left&&s.border?.left&&!o.border?.left&&(t.border.left.opacity=i),t.border?.right&&s.border?.right&&!o.border?.right&&(t.border.right.opacity=i)}}),CI.add("borderFadeOut",{id:"borderFadeOut",easingFn:"easeOutCubic",hasAnimation:(e,t)=>Boolean(e?.border?.bottom&&!t?.border?.bottom||e?.border?.top&&!t?.border?.top||e?.border?.left&&!t?.border?.left||e?.border?.right&&!t?.border?.right),updateAnimation:function(e,t,o,s){const i=1-yI[this.easingFn](e);t.border||(t.border={}),o.border?.top&&!s.border?.top&&(t.border.top={...o.border.top,opacity:i}),o.border?.bottom&&!s.border?.bottom&&(t.border.bottom={...o.border.bottom,opacity:i}),o.border?.left&&!s.border?.left&&(t.border.left={...o.border.left,opacity:i}),o.border?.right&&!s.border?.right&&(t.border.right={...o.border.right,opacity:i})}}),CI.add("borderColorChange",{id:"borderColorChange",easingFn:"easeOutCubic",hasAnimation:(e,t)=>{const o=e?.border,s=t?.border;return!(!o||!s)&&Boolean(o.bottom?.color!==s.bottom?.color||o.top?.color!==s.top?.color||o.left?.color!==s.left?.color||o.right?.color!==s.right?.color)},updateAnimation:function(e,t,o,s){const i=i=>{const n=o?.border?.[i],r=s?.border?.[i],a=t.border?.[i];if(n&&r&&a){const t=vo([{value:0,color:n.color||"#000000"},{value:1,color:r.color||"#000000"}]);a.color=t(yI[this.easingFn](e))}};i("top"),i("bottom"),i("left"),i("right")}}),CI.add("iconChange",{id:"iconChange",easingFn:"easeOutCubic",hasAnimation:(e,t)=>!xI(t,e)&&Boolean(e?.icons?.center?.svg?.name!==t?.icons?.center?.svg?.name||e?.icons?.left?.svg?.name!==t?.icons?.left?.svg?.name||e?.icons?.right?.svg?.name!==t?.icons?.right?.svg?.name),updateAnimation:function(e,t,o,s){const i=yI[this.easingFn](e),n=s.y+(i-1)*s.height,r=s.y+i*s.height,a=[],l=e=>{const i=o.icons?.[e],l=s.icons?.[e],c={id:`${s.id}-icon-${e}-slide-in`,style:{verticalAlign:s.style.verticalAlign},x:s.x,y:n,width:s.width,height:s.height,skipCellGridLines:!0,icons:{[e]:{...l,clipRect:s}}},h={id:`${s.id}-icon-${e}-slide-out`,style:{verticalAlign:o.style.verticalAlign},x:s.x,y:r,width:s.width,height:s.height,skipCellGridLines:!0,icons:{[e]:{...i,clipRect:s}}};t.icons[e]=wI(s.icons)[e],a.push(c,h)};return l("left"),l("right"),l("center"),{newBoxes:a}}});const yI={linear:e=>e,easeInCubic:e=>e*e*e,easeOutCubic:e=>(e-=1)*e*e+1,easeInOutCubic:e=>(e/=.5)<1?.5*e*e*e:.5*((e-=2)*e*e+2),easeOutQuart:e=>-((e-=1)*e*e*e-1)};function wI(e){return{left:e.left?{...e.left,svg:void 0}:void 0,right:e.right?{...e.right,svg:void 0}:void 0,center:e.center?{...e.center,svg:void 0}:void 0}}function II(e,t){return{left:e.left?{...e.left,clipRect:t}:void 0,right:e.right?{...e.right,clipRect:t}:void 0,center:e.center?{...e.center,clipRect:t}:void 0}}function xI(e,t){const o=(e,t)=>t&&e?!!(e.horizontalAlign!==t.horizontalAlign||e.size!==t.size||e.margin!==t.margin||e.svg&&!t.svg||!e.svg&&t.svg):!!(e&&!t||!e&&t);return o(e?.icons.left,t?.icons.left)||o(e?.icons.right,t?.icons.right)||o(e?.icons.center,t?.icons.center)}class EI extends t.Component{static template="o-spreadsheet-GaugeChartComponent";static props={figureUI:Object,isFullScreen:{type:Boolean,optional:!0}};canvas=t.useRef("chartContainer");animationStore;get runtime(){return this.env.model.getters.getChartRuntime(this.props.figureUI.id)}setup(){this.env.model.getters.isDashboard()&&(this.animationStore=oh(yh));let e,o=null;t.useEffect((()=>(this.env.isDashboard()&&void 0===e&&"gauge"!==this.animationStore?.animationPlayed[this.animationFigureId]||this.env.isDashboard()&&void 0!==e&&!mt(this.runtime,e)?(o=this.drawGaugeWithAnimation(),this.animationStore?.disableAnimationForChart(this.animationFigureId,"gauge")):Oy(this.canvasEl,this.runtime),e=this.runtime,()=>o?.stop())),(()=>{const e=this.canvasEl.getBoundingClientRect();return[e.width,e.height,this.runtime,this.canvas.el,window.devicePixelRatio]}))}drawGaugeWithAnimation(){Oy(this.canvasEl,{...this.runtime,animationValue:0});const e=this.runtime.gaugeValue?.value||0,t=this.runtime.maxValue.value,o=Math.sign(e)*Math.min(Math.abs(e),Math.abs(t));if(0===o)return null;const s=this.runtime.minValue.value,i=new RI(s,o,1e3,(e=>Oy(this.canvasEl,{...this.runtime,animationValue:e})));return i.start(),i}get canvasEl(){return this.canvas.el}get animationFigureId(){return this.props.isFullScreen?this.props.figureUI.id+"-fullscreen":this.props.figureUI.id}}class RI{startValue;endValue;duration;callback;startTime=void 0;animationFrameId=null;constructor(e,t,o,s){this.startValue=e,this.endValue=t,this.duration=o,this.callback=s}start(){this.animationFrameId=requestAnimationFrame(this.animate.bind(this))}stop(){this.animationFrameId&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null)}animate(e){this.startTime||(this.startTime=e);const t=e-this.startTime,o=Math.min(t/this.duration,1),s=this.startValue+(this.endValue-this.startValue)*yI.easeOutQuart(o);this.callback(s),o<1?this.animationFrameId=requestAnimationFrame(this.animate.bind(this)):this.stop()}}class TI extends $C{dataSets;labelRange;background;legendPosition;aggregated;dataSetsHaveTitle;dataSetDesign;axesDesign;type="combo";showValues;hideDataMarkers;constructor(e,t,o){super(e,t,o),this.dataSets=YS(o,e.dataSets,t,e.dataSetsHaveTitle),this.labelRange=fa(o,t,e.labelRange),this.background=e.background,this.legendPosition=e.legendPosition,this.aggregated=e.aggregated,this.dataSetsHaveTitle=e.dataSetsHaveTitle,this.dataSetDesign=e.dataSets,this.axesDesign=e.axesDesign,this.showValues=e.showValues,this.hideDataMarkers=e.hideDataMarkers}static transformDefinition(e,t,o){return QS(e,t,o)}static validateChartDefinition(e,t){return e.checkValidations(t,oC,sC)}getContextCreation(){const e=[];for(const[t,o]of this.dataSets.entries())e.push({...this.dataSetDesign?.[t],dataRange:this.getters.getRangeString(o.dataRange,this.sheetId)});return{...this,range:e,auxiliaryRange:this.labelRange?this.getters.getRangeString(this.labelRange,this.sheetId):void 0}}getDefinition(){return this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange)}getDefinitionWithSpecificDataSets(e,t,o){const s=[];for(const[t,i]of e.entries())s.push({...this.dataSetDesign?.[t],dataRange:this.getters.getRangeString(i.dataRange,o||this.sheetId),type:this.dataSetDesign?.[t]?.type??(t?"line":"bar")});return{type:"combo",dataSetsHaveTitle:!!e.length&&Boolean(e[0].labelCell),background:this.background,dataSets:s,legendPosition:this.legendPosition,labelRange:t?this.getters.getRangeString(t,o||this.sheetId):void 0,title:this.title,aggregated:this.aggregated,axesDesign:this.axesDesign,showValues:this.showValues,hideDataMarkers:this.hideDataMarkers}}getDefinitionForExcel(){if(this.aggregated)return;const e=this.dataSets.map((e=>KS(this.getters,e))).filter((e=>""!==e.range&&e.range!==Js.InvalidReference)),t=JS(this.getters,this.labelRange,iC(this.labelRange,this.dataSets[0],this.dataSetsHaveTitle)),o=this.getDefinition();return{...o,backgroundColor:wy(this.background||m),fontColor:wy(eC(this.background)),dataSets:e,labelRange:t,verticalAxis:nC(o)}}updateRanges(e){const{dataSets:t,labelRange:o,isStale:s}=WS(this.getters,e,this.dataSets,this.labelRange);if(!s)return this;const i=this.getDefinitionWithSpecificDataSets(t,o);return new TI(i,this.sheetId,this.getters)}static getDefinitionFromContextCreation(e){const t=(e.range??[]).map(((e,t)=>({...e,type:t?"line":"bar"})));return{background:e.background,dataSets:t,dataSetsHaveTitle:e.dataSetsHaveTitle??!1,aggregated:e.aggregated,legendPosition:e.legendPosition??"top",title:e.title||{text:""},labelRange:e.auxiliaryRange||void 0,type:"combo",axesDesign:e.axesDesign,showValues:e.showValues,hideDataMarkers:e.hideDataMarkers}}duplicateInDuplicatedSheet(e){const t=qS(this.sheetId,e,this.dataSets),o=ZS(this.sheetId,e,this.labelRange),s=this.getDefinitionWithSpecificDataSets(t,o,e);return new TI(s,e,this.getters)}copyInSheetId(e){const t=this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange,e);return new TI(t,e,this.getters)}}class AI extends $C{dataSets;labelRange;background;legendPosition;aggregated;type="funnel";dataSetsHaveTitle;dataSetDesign;axesDesign;horizontal=!0;showValues;funnelColors;cumulative;constructor(e,t,o){super(e,t,o),this.dataSets=YS(o,e.dataSets,t,e.dataSetsHaveTitle),this.labelRange=fa(o,t,e.labelRange),this.background=e.background,this.legendPosition=e.legendPosition,this.aggregated=e.aggregated,this.dataSetsHaveTitle=e.dataSetsHaveTitle,this.dataSetDesign=e.dataSets,this.axesDesign=e.axesDesign,this.showValues=e.showValues,this.horizontal=!0,this.funnelColors=e.funnelColors,this.cumulative=e.cumulative}static transformDefinition(e,t,o){return QS(e,t,o)}static validateChartDefinition(e,t){return e.checkValidations(t,oC,sC)}static getDefinitionFromContextCreation(e){return{background:e.background,dataSets:e.range??[],dataSetsHaveTitle:e.dataSetsHaveTitle??!1,aggregated:e.aggregated??!1,legendPosition:"none",title:e.title||{text:""},type:"funnel",labelRange:e.auxiliaryRange||void 0,showValues:e.showValues,axesDesign:e.axesDesign,funnelColors:e.funnelColors,horizontal:!0,cumulative:e.cumulative}}getContextCreation(){const e=[];for(const[t,o]of this.dataSets.entries())e.push({...this.dataSetDesign?.[t],dataRange:this.getters.getRangeString(o.dataRange,this.sheetId)});return{...this,range:e,auxiliaryRange:this.labelRange?this.getters.getRangeString(this.labelRange,this.sheetId):void 0}}duplicateInDuplicatedSheet(e){const t=qS(this.sheetId,e,this.dataSets),o=ZS(this.sheetId,e,this.labelRange),s=this.getDefinitionWithSpecificDataSets(t,o,e);return new AI(s,e,this.getters)}copyInSheetId(e){const t=this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange,e);return new AI(t,e,this.getters)}getDefinition(){return this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange)}getDefinitionWithSpecificDataSets(e,t,o){const s=[];for(const[t,i]of e.entries())s.push({...this.dataSetDesign?.[t],dataRange:this.getters.getRangeString(i.dataRange,o||this.sheetId)});return{type:"funnel",dataSetsHaveTitle:!!e.length&&Boolean(e[0].labelCell),background:this.background,dataSets:s,legendPosition:this.legendPosition,labelRange:t?this.getters.getRangeString(t,o||this.sheetId):void 0,title:this.title,aggregated:this.aggregated,horizontal:this.horizontal,axesDesign:this.axesDesign,showValues:this.showValues,funnelColors:this.funnelColors,cumulative:this.cumulative}}getDefinitionForExcel(){}updateRanges(e){const{dataSets:t,labelRange:o,isStale:s}=WS(this.getters,e,this.dataSets,this.labelRange);if(!s)return this;const i=this.getDefinitionWithSpecificDataSets(t,o);return new AI(i,this.sheetId,this.getters)}}function DI(e){return e.dataRange&&!Xr.test(e.dataRange)?"InvalidGaugeDataRange":"Success"}function _I(e,t){return t((t=>t.sectionRule?e(t.sectionRule.rangeMin,"rangeMin"):"Success"),(t=>t.sectionRule?e(t.sectionRule.rangeMax,"rangeMax"):"Success"))}function OI(e,t){if(""===e)switch(t){case"rangeMin":return"EmptyGaugeRangeMin";case"rangeMax":return"EmptyGaugeRangeMax"}return"Success"}function FI(e,t){if(e.startsWith("="))return"Success";if(isNaN(e))switch(t){case"rangeMin":return"GaugeRangeMinNaN";case"rangeMax":return"GaugeRangeMaxNaN";case"lowerInflectionPointValue":return"GaugeLowerInflectionPointNaN";case"upperInflectionPointValue":return"GaugeUpperInflectionPointNaN"}return"Success"}class PI extends $C{dataRange;sectionRule;background;type="gauge";constructor(e,t,o){super(e,t,o),this.dataRange=fa(this.getters,this.sheetId,e.dataRange),this.sectionRule=e.sectionRule,this.background=e.background}static validateChartDefinition(e,t){return e.checkValidations(t,DI,e.chainValidations(_I(OI,e.batchValidations),_I(FI,e.batchValidations)),e.chainValidations((o=FI,(0,e.batchValidations)((e=>e.sectionRule?o(e.sectionRule.lowerInflectionPoint.value,"lowerInflectionPointValue"):"Success"),(e=>e.sectionRule?o(e.sectionRule.upperInflectionPoint.value,"upperInflectionPointValue"):"Success")))));var o}static transformDefinition(e,t,o){let s;if(t.dataRange){const i=US(e,t.dataRange,o);i!==Js.InvalidReference&&(s=i)}return{...t,dataRange:s}}static getDefinitionFromContextCreation(e){return{background:e.background,title:e.title||{text:""},type:"gauge",dataRange:e.range?e.range[0].dataRange:void 0,sectionRule:{colors:{lowerColor:"#EA6175",middleColor:"#FFD86D",upperColor:"#43C5B1"},rangeMin:"0",rangeMax:"100",lowerInflectionPoint:{type:"percentage",value:"15",operator:"<="},upperInflectionPoint:{type:"percentage",value:"40",operator:"<="}}}}duplicateInDuplicatedSheet(e){const t=ZS(this.sheetId,e,this.dataRange),o=VI(this.sectionRule,(t=>this.getters.copyFormulaStringForSheet(this.sheetId,e,t,"moveReference"))),s=this.getDefinitionWithSpecificRanges(t,o,e);return new PI(s,e,this.getters)}copyInSheetId(e){const t=VI(this.sectionRule,(t=>this.getters.copyFormulaStringForSheet(this.sheetId,e,t,"keepSameReference"))),o=this.getDefinitionWithSpecificRanges(this.dataRange,t,e);return new PI(o,e,this.getters)}getDefinition(){return this.getDefinitionWithSpecificRanges(this.dataRange,this.sectionRule)}getDefinitionWithSpecificRanges(e,t,o){return{background:this.background,sectionRule:t,title:this.title,type:"gauge",dataRange:e?this.getters.getRangeString(e,o||this.sheetId):void 0}}getDefinitionForExcel(){}getContextCreation(){return{...this,range:this.dataRange?[{dataRange:this.getters.getRangeString(this.dataRange,this.sheetId)}]:void 0}}updateRanges(e){const t=jS(this.dataRange,e),o=VI(this.sectionRule,(t=>this.getters.adaptFormulaStringDependencies(this.sheetId,t,e))),s=this.getDefinitionWithSpecificRanges(t,o);return new PI(s,this.sheetId,this.getters)}}function MI(e,t){const o=t.getLocale(),s=e.sectionRule.colors;let i,n,r;const a=e.dataRange;if(void 0!==a){const e=t.getEvaluatedCell({sheetId:a.sheetId,col:a.zone.left,row:a.zone.top});e.type===Ts.number&&(i=e.value,n=e.formattedValue,r=e.format)}let l=kI(e.sheetId,e.sectionRule.rangeMin,t),c=kI(e.sheetId,e.sectionRule.rangeMax,t);if(void 0===l||void 0===c)return function(e,t){return{background:t.getStyleOfSingleCellChart(e.background,e.dataRange).background,title:e.title??{text:""},minValue:{value:0,label:""},maxValue:{value:100,label:""},gaugeValue:{value:0,label:Js.GenericError},inflectionValues:[],colors:[]}}(e,t);c<l&&([l,c]=[c,l]);const h=e.sectionRule.lowerInflectionPoint,d=e.sectionRule.upperInflectionPoint,u=NI(e.sheetId,e.sectionRule.lowerInflectionPoint,l,c,t),g=NI(e.sheetId,e.sectionRule.upperInflectionPoint,l,c,t),p=[],m=[];return void 0!==u&&(p.push({value:u,label:bn(u,{locale:o,format:r}),operator:h.operator}),m.push(s.lowerColor)),void 0!==g&&g!==u&&(p.push({value:g,label:bn(g,{locale:o,format:r}),operator:d.operator}),m.push(s.middleColor)),void 0!==g&&void 0!==u&&u>g&&(p.reverse(),m.reverse()),m.push(s.upperColor),{background:t.getStyleOfSingleCellChart(e.background,a).background,title:{...e.title,text:Vo(e.title.text??"")},minValue:{value:l,label:bn(l,{locale:o,format:r})},maxValue:{value:c,label:bn(c,{locale:o,format:r})},gaugeValue:void 0!==i&&n?{value:i,label:n}:void 0,inflectionValues:p,colors:m}}function NI(e,t,o,s,i){const n=kI(e,t.value,i);if(void 0===n)return;return Ze("number"===t.type?n:o+(s-o)*n/100,o,s)}function kI(e,t,o){const s=o.evaluateFormula(e,t);return Ws(s)?void 0:pi(s,o.getLocale())}function VI(e,t){return{...e,rangeMin:t(e.rangeMin),rangeMax:t(e.rangeMax),lowerInflectionPoint:{...e.lowerInflectionPoint,value:t(e.lowerInflectionPoint.value)},upperInflectionPoint:{...e.upperInflectionPoint,value:t(e.upperInflectionPoint.value)}}}class LI extends $C{dataSets;labelRange;background;legendPosition;type="geo";dataSetsHaveTitle;dataSetDesign;colorScale;missingValueColor;region;constructor(e,t,o){super(e,t,o),this.dataSets=YS(o,e.dataSets,t,e.dataSetsHaveTitle),this.labelRange=fa(o,t,e.labelRange),this.background=e.background,this.legendPosition=e.legendPosition,this.dataSetsHaveTitle=e.dataSetsHaveTitle,this.dataSetDesign=e.dataSets,this.colorScale=e.colorScale,this.missingValueColor=e.missingValueColor,this.region=e.region}static transformDefinition(e,t,o){return QS(e,t,o)}static validateChartDefinition(e,t){return e.checkValidations(t,oC,sC)}static getDefinitionFromContextCreation(e){return{background:e.background,dataSets:e.range??[],dataSetsHaveTitle:e.dataSetsHaveTitle??!1,legendPosition:e.legendPosition??"top",title:e.title||{text:""},type:"geo",labelRange:e.auxiliaryRange||void 0}}getContextCreation(){const e=[];for(const[t,o]of this.dataSets.entries())e.push({...this.dataSetDesign?.[t],dataRange:this.getters.getRangeString(o.dataRange,this.sheetId)});return{...this,range:e,auxiliaryRange:this.labelRange?this.getters.getRangeString(this.labelRange,this.sheetId):void 0}}duplicateInDuplicatedSheet(e){const t=qS(this.sheetId,e,this.dataSets),o=ZS(this.sheetId,e,this.labelRange),s=this.getDefinitionWithSpecificDataSets(t,o,e);return new LI(s,e,this.getters)}copyInSheetId(e){const t=this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange,e);return new LI(t,e,this.getters)}getDefinition(){return this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange)}getDefinitionWithSpecificDataSets(e,t,o){const s=[];for(const[t,i]of e.entries())s.push({...this.dataSetDesign?.[t],dataRange:this.getters.getRangeString(i.dataRange,o||this.sheetId)});return{type:"geo",dataSetsHaveTitle:!!e.length&&Boolean(e[0].labelCell),background:this.background,dataSets:s,legendPosition:this.legendPosition,labelRange:t?this.getters.getRangeString(t,o||this.sheetId):void 0,title:this.title,colorScale:this.colorScale,missingValueColor:this.missingValueColor,region:this.region}}getDefinitionForExcel(){}updateRanges(e){const{dataSets:t,labelRange:o,isStale:s}=WS(this.getters,e,this.dataSets,this.labelRange);if(!s)return this;const i=this.getDefinitionWithSpecificDataSets(t,o);return new LI(i,this.sheetId,this.getters)}}class HI extends $C{dataSets;labelRange;background;legendPosition;labelsAsText;stacked;aggregated;type="line";dataSetsHaveTitle;cumulative;dataSetDesign;axesDesign;fillArea;showValues;hideDataMarkers;constructor(e,t,o){super(e,t,o),this.dataSets=YS(this.getters,e.dataSets,t,e.dataSetsHaveTitle),this.labelRange=fa(this.getters,t,e.labelRange),this.background=e.background,this.legendPosition=e.legendPosition,this.labelsAsText=e.labelsAsText,this.stacked=e.stacked,this.aggregated=e.aggregated,this.dataSetsHaveTitle=e.dataSetsHaveTitle,this.cumulative=e.cumulative,this.dataSetDesign=e.dataSets,this.axesDesign=e.axesDesign,this.fillArea=e.fillArea,this.showValues=e.showValues,this.hideDataMarkers=e.hideDataMarkers}static validateChartDefinition(e,t){return e.checkValidations(t,oC,sC)}static transformDefinition(e,t,o){return QS(e,t,o)}static getDefinitionFromContextCreation(e){return{background:e.background,dataSets:e.range??[],dataSetsHaveTitle:e.dataSetsHaveTitle??!1,labelsAsText:e.labelsAsText??!1,legendPosition:e.legendPosition??"top",title:e.title||{text:""},type:"line",labelRange:e.auxiliaryRange||void 0,stacked:e.stacked??!1,aggregated:e.aggregated??!1,cumulative:e.cumulative??!1,axesDesign:e.axesDesign,fillArea:e.fillArea,showValues:e.showValues,hideDataMarkers:e.hideDataMarkers}}getDefinition(){return this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange)}getDefinitionWithSpecificDataSets(e,t,o){const s=[];for(const[t,i]of e.entries())s.push({...this.dataSetDesign?.[t],dataRange:this.getters.getRangeString(i.dataRange,o||this.sheetId)});return{type:"line",dataSetsHaveTitle:!!e.length&&Boolean(e[0].labelCell),background:this.background,dataSets:s,legendPosition:this.legendPosition,labelRange:t?this.getters.getRangeString(t,o||this.sheetId):void 0,title:this.title,labelsAsText:this.labelsAsText,stacked:this.stacked,aggregated:this.aggregated,cumulative:this.cumulative,axesDesign:this.axesDesign,fillArea:this.fillArea,showValues:this.showValues,hideDataMarkers:this.hideDataMarkers}}getContextCreation(){const e=[];for(const[t,o]of this.dataSets.entries())e.push({...this.dataSetDesign?.[t],dataRange:this.getters.getRangeString(o.dataRange,this.sheetId)});return{...this,range:e,auxiliaryRange:this.labelRange?this.getters.getRangeString(this.labelRange,this.sheetId):void 0}}updateRanges(e){const{dataSets:t,labelRange:o,isStale:s}=WS(this.getters,e,this.dataSets,this.labelRange);if(!s)return this;const i=this.getDefinitionWithSpecificDataSets(t,o);return new HI(i,this.sheetId,this.getters)}getDefinitionForExcel(){const e=this.dataSets.map((e=>KS(this.getters,e))).filter((e=>""!==e.range&&e.range!==Js.InvalidReference)),t=JS(this.getters,this.labelRange,iC(this.labelRange,this.dataSets[0],this.dataSetsHaveTitle)),o=this.getDefinition();return{...o,backgroundColor:wy(this.background||m),fontColor:wy(eC(this.background)),dataSets:e,labelRange:t,verticalAxis:nC(o)}}duplicateInDuplicatedSheet(e){const t=qS(this.sheetId,e,this.dataSets),o=ZS(this.sheetId,e,this.labelRange),s=this.getDefinitionWithSpecificDataSets(t,o,e);return new HI(s,e,this.getters)}copyInSheetId(e){const t=this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange,e);return new HI(t,e,this.getters)}}function UI(e,t){const o=e.getDefinition(),s=sw(o,e.dataSets,e.labelRange,t);return{chartJsConfig:{type:"line",data:{labels:s.labels,datasets:SC(o,s)},options:{...Ly,layout:Ew(0,s),scales:Lw(o,s),plugins:{title:tI(o),legend:Aw(o),tooltip:rI(0,s),chartShowValuesPlugin:Kw(o,s)}}},background:e.background||m}}class BI extends $C{dataSets;labelRange;background;legendPosition;type="pie";aggregated;dataSetsHaveTitle;isDoughnut;showValues;pieHolePercentage;constructor(e,t,o){super(e,t,o),this.dataSets=YS(o,e.dataSets,t,e.dataSetsHaveTitle),this.labelRange=fa(o,t,e.labelRange),this.background=e.background,this.legendPosition=e.legendPosition,this.aggregated=e.aggregated,this.dataSetsHaveTitle=e.dataSetsHaveTitle,this.isDoughnut=e.isDoughnut,this.showValues=e.showValues,this.pieHolePercentage=e.pieHolePercentage}static transformDefinition(e,t,o){return QS(e,t,o)}static validateChartDefinition(e,t){return e.checkValidations(t,oC,sC)}static getDefinitionFromContextCreation(e){return{background:e.background,dataSets:e.range??[],dataSetsHaveTitle:e.dataSetsHaveTitle??!1,legendPosition:e.legendPosition??"top",title:e.title||{text:""},type:"pie",labelRange:e.auxiliaryRange||void 0,aggregated:e.aggregated??!1,isDoughnut:!1,showValues:e.showValues}}getDefinition(){return this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange)}getContextCreation(){return{...this,range:this.dataSets.map((e=>({dataRange:this.getters.getRangeString(e.dataRange,this.sheetId)}))),auxiliaryRange:this.labelRange?this.getters.getRangeString(this.labelRange,this.sheetId):void 0}}getDefinitionWithSpecificDataSets(e,t,o){return{type:"pie",dataSetsHaveTitle:!!e.length&&Boolean(e[0].labelCell),background:this.background,dataSets:e.map((e=>({dataRange:this.getters.getRangeString(e.dataRange,o||this.sheetId)}))),legendPosition:this.legendPosition,labelRange:t?this.getters.getRangeString(t,o||this.sheetId):void 0,title:this.title,aggregated:this.aggregated,isDoughnut:this.isDoughnut,showValues:this.showValues,pieHolePercentage:this.pieHolePercentage}}duplicateInDuplicatedSheet(e){const t=qS(this.sheetId,e,this.dataSets),o=ZS(this.sheetId,e,this.labelRange),s=this.getDefinitionWithSpecificDataSets(t,o,e);return new BI(s,e,this.getters)}copyInSheetId(e){const t=this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange,e);return new BI(t,e,this.getters)}getDefinitionForExcel(){const e=this.dataSets.map((e=>KS(this.getters,e))).filter((e=>""!==e.range&&e.range!==Js.InvalidReference)),t=JS(this.getters,this.labelRange,iC(this.labelRange,this.dataSets[0],this.dataSetsHaveTitle));return{...this.getDefinition(),backgroundColor:wy(this.background||m),fontColor:wy(eC(this.background)),dataSets:e,labelRange:t}}updateRanges(e){const{dataSets:t,labelRange:o,isStale:s}=WS(this.getters,e,this.dataSets,this.labelRange);if(!s)return this;const i=this.getDefinitionWithSpecificDataSets(t,o);return new BI(i,this.sheetId,this.getters)}}function zI(e,t){const o=e.getDefinition(),s=iw(o,e.dataSets,e.labelRange,t);return{chartJsConfig:{type:e.isDoughnut?"doughnut":"pie",data:{labels:s.labels,datasets:yC(o,s)},options:{...Ly,cutout:e.isDoughnut&&void 0!==o.pieHolePercentage?o.pieHolePercentage+"%":void 0,layout:Ew(0,s),plugins:{title:tI(o),legend:Dw(o,s),tooltip:aI(0,s),chartShowValuesPlugin:Kw(o,s)}}},background:e.background||m}}class $I extends $C{dataSets;labelRange;background;legendPosition;aggregated;type="pyramid";dataSetsHaveTitle;dataSetDesign;axesDesign;horizontal=!0;stacked=!0;showValues;constructor(e,t,o){super(e,t,o),this.dataSets=YS(o,e.dataSets,t,e.dataSetsHaveTitle),this.labelRange=fa(o,t,e.labelRange),this.background=e.background,this.legendPosition=e.legendPosition,this.aggregated=e.aggregated,this.dataSetsHaveTitle=e.dataSetsHaveTitle,this.dataSetDesign=e.dataSets,this.axesDesign=e.axesDesign,this.showValues=e.showValues}static transformDefinition(e,t,o){return QS(e,t,o)}static validateChartDefinition(e,t){return e.checkValidations(t,oC,sC)}static getDefinitionFromContextCreation(e){return{background:e.background,dataSets:e.range??[],dataSetsHaveTitle:e.dataSetsHaveTitle??!1,aggregated:e.aggregated??!1,legendPosition:e.legendPosition??"top",title:e.title||{text:""},type:"pyramid",labelRange:e.auxiliaryRange||void 0,axesDesign:e.axesDesign,horizontal:!0,stacked:!0,showValues:e.showValues}}getContextCreation(){const e=[];for(const[t,o]of this.dataSets.entries())e.push({...this.dataSetDesign?.[t],dataRange:this.getters.getRangeString(o.dataRange,this.sheetId)});return{...this,range:e,auxiliaryRange:this.labelRange?this.getters.getRangeString(this.labelRange,this.sheetId):void 0}}duplicateInDuplicatedSheet(e){const t=qS(this.sheetId,e,this.dataSets),o=ZS(this.sheetId,e,this.labelRange),s=this.getDefinitionWithSpecificDataSets(t,o,e);return new $I(s,e,this.getters)}copyInSheetId(e){const t=this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange,e);return new $I(t,e,this.getters)}getDefinition(){return this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange)}getDefinitionWithSpecificDataSets(e,t,o){const s=[];for(const[t,i]of e.entries())s.push({...this.dataSetDesign?.[t],dataRange:this.getters.getRangeString(i.dataRange,o||this.sheetId)});return{type:"pyramid",dataSetsHaveTitle:!!e.length&&Boolean(e[0].labelCell),background:this.background,dataSets:s,legendPosition:this.legendPosition,labelRange:t?this.getters.getRangeString(t,o||this.sheetId):void 0,title:this.title,aggregated:this.aggregated,axesDesign:this.axesDesign,horizontal:!0,stacked:!0,showValues:this.showValues}}getDefinitionForExcel(){}updateRanges(e){const{dataSets:t,labelRange:o,isStale:s}=WS(this.getters,e,this.dataSets,this.labelRange);if(!s)return this;const i=this.getDefinitionWithSpecificDataSets(t,o);return new $I(i,this.sheetId,this.getters)}}class GI extends $C{dataSets;labelRange;background;legendPosition;stacked;aggregated;type="radar";dataSetsHaveTitle;dataSetDesign;fillArea;showValues;hideDataMarkers;constructor(e,t,o){super(e,t,o),this.dataSets=YS(o,e.dataSets,t,e.dataSetsHaveTitle),this.labelRange=fa(o,t,e.labelRange),this.background=e.background,this.legendPosition=e.legendPosition,this.stacked=e.stacked,this.aggregated=e.aggregated,this.dataSetsHaveTitle=e.dataSetsHaveTitle,this.dataSetDesign=e.dataSets,this.fillArea=e.fillArea,this.showValues=e.showValues,this.hideDataMarkers=e.hideDataMarkers}static transformDefinition(e,t,o){return QS(e,t,o)}static validateChartDefinition(e,t){return e.checkValidations(t,oC,sC)}static getDefinitionFromContextCreation(e){return{background:e.background,dataSets:e.range??[],dataSetsHaveTitle:e.dataSetsHaveTitle??!1,stacked:e.stacked??!1,aggregated:e.aggregated??!1,legendPosition:e.legendPosition??"top",title:e.title||{text:""},type:"radar",labelRange:e.auxiliaryRange||void 0,fillArea:e.fillArea??!1,showValues:e.showValues??!1,hideDataMarkers:e.hideDataMarkers}}getContextCreation(){const e=[];for(const[t,o]of this.dataSets.entries())e.push({...this.dataSetDesign?.[t],dataRange:this.getters.getRangeString(o.dataRange,this.sheetId)});return{...this,range:e,auxiliaryRange:this.labelRange?this.getters.getRangeString(this.labelRange,this.sheetId):void 0}}duplicateInDuplicatedSheet(e){const t=qS(this.sheetId,e,this.dataSets),o=ZS(this.sheetId,e,this.labelRange),s=this.getDefinitionWithSpecificDataSets(t,o,e);return new GI(s,e,this.getters)}copyInSheetId(e){const t=this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange,e);return new GI(t,e,this.getters)}getDefinition(){return this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange)}getDefinitionWithSpecificDataSets(e,t,o){const s=[];for(const[t,i]of e.entries())s.push({...this.dataSetDesign?.[t],dataRange:this.getters.getRangeString(i.dataRange,o||this.sheetId)});return{type:"radar",dataSetsHaveTitle:!!e.length&&Boolean(e[0].labelCell),background:this.background,dataSets:s,legendPosition:this.legendPosition,labelRange:t?this.getters.getRangeString(t,o||this.sheetId):void 0,title:this.title,stacked:this.stacked,aggregated:this.aggregated,fillArea:this.fillArea,showValues:this.showValues,hideDataMarkers:this.hideDataMarkers}}getDefinitionForExcel(){if(this.aggregated)return;const e=this.dataSets.map((e=>KS(this.getters,e))).filter((e=>""!==e.range&&e.range!==Js.InvalidReference)),t=JS(this.getters,this.labelRange,iC(this.labelRange,this.dataSets[0],this.dataSetsHaveTitle));return{...this.getDefinition(),backgroundColor:wy(this.background||m),fontColor:wy(eC(this.background)),dataSets:e,labelRange:t}}updateRanges(e){const{dataSets:t,labelRange:o,isStale:s}=WS(this.getters,e,this.dataSets,this.labelRange);if(!s)return this;const i=this.getDefinitionWithSpecificDataSets(t,o);return new GI(i,this.sheetId,this.getters)}}class WI extends $C{dataSets;labelRange;background;legendPosition;labelsAsText;aggregated;type="scatter";dataSetsHaveTitle;dataSetDesign;axesDesign;showValues;constructor(e,t,o){super(e,t,o),this.dataSets=YS(this.getters,e.dataSets,t,e.dataSetsHaveTitle),this.labelRange=fa(this.getters,t,e.labelRange),this.background=e.background,this.legendPosition=e.legendPosition,this.labelsAsText=e.labelsAsText,this.aggregated=e.aggregated,this.dataSetsHaveTitle=e.dataSetsHaveTitle,this.dataSetDesign=e.dataSets,this.axesDesign=e.axesDesign,this.showValues=e.showValues}static validateChartDefinition(e,t){return e.checkValidations(t,oC,sC)}static transformDefinition(e,t,o){return QS(e,t,o)}static getDefinitionFromContextCreation(e){return{background:e.background,dataSets:e.range??[],dataSetsHaveTitle:e.dataSetsHaveTitle??!1,labelsAsText:e.labelsAsText??!1,legendPosition:e.legendPosition??"top",title:e.title||{text:""},type:"scatter",labelRange:e.auxiliaryRange||void 0,aggregated:e.aggregated??!1,axesDesign:e.axesDesign,showValues:e.showValues}}getDefinition(){return this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange)}getDefinitionWithSpecificDataSets(e,t,o){const s=[];for(const[t,i]of e.entries())s.push({...this.dataSetDesign?.[t],dataRange:this.getters.getRangeString(i.dataRange,o||this.sheetId)});return{type:"scatter",dataSetsHaveTitle:!!e.length&&Boolean(e[0].labelCell),background:this.background,dataSets:s,legendPosition:this.legendPosition,labelRange:t?this.getters.getRangeString(t,o||this.sheetId):void 0,title:this.title,labelsAsText:this.labelsAsText,aggregated:this.aggregated,axesDesign:this.axesDesign,showValues:this.showValues}}getContextCreation(){const e=[];for(const[t,o]of this.dataSets.entries())e.push({...this.dataSetDesign?.[t],dataRange:this.getters.getRangeString(o.dataRange,this.sheetId)});return{...this,range:e,auxiliaryRange:this.labelRange?this.getters.getRangeString(this.labelRange,this.sheetId):void 0}}updateRanges(e){const{dataSets:t,labelRange:o,isStale:s}=WS(this.getters,e,this.dataSets,this.labelRange);if(!s)return this;const i=this.getDefinitionWithSpecificDataSets(t,o);return new WI(i,this.sheetId,this.getters)}getDefinitionForExcel(){if(this.aggregated)return;const e=this.dataSets.map((e=>KS(this.getters,e))).filter((e=>""!==e.range)),t=JS(this.getters,this.labelRange,iC(this.labelRange,this.dataSets[0],this.dataSetsHaveTitle)),o=this.getDefinition();return{...o,backgroundColor:wy(this.background||m),fontColor:wy(eC(this.background)),dataSets:e,labelRange:t,verticalAxis:nC(o)}}duplicateInDuplicatedSheet(e){const t=qS(this.sheetId,e,this.dataSets),o=ZS(this.sheetId,e,this.labelRange),s=this.getDefinitionWithSpecificDataSets(t,o,e);return new WI(s,e,this.getters)}copyInSheetId(e){const t=this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange,e);return new WI(t,e,this.getters)}}class qI extends $C{dataSets;labelRange;background;legendPosition;type="sunburst";dataSetsHaveTitle;showValues;showLabels;valuesDesign;groupColors;pieHolePercentage;constructor(e,t,o){super(e,t,o),this.dataSets=YS(o,e.dataSets,t,e.dataSetsHaveTitle),this.labelRange=fa(o,t,e.labelRange),this.background=e.background,this.legendPosition=e.legendPosition,this.dataSetsHaveTitle=e.dataSetsHaveTitle,this.showValues=e.showValues,this.showLabels=e.showLabels,this.valuesDesign=e.valuesDesign,this.groupColors=e.groupColors,this.pieHolePercentage=e.pieHolePercentage}static transformDefinition(e,t,o){return QS(e,t,o)}static validateChartDefinition(e,t){return e.checkValidations(t,oC,sC)}static getDefinitionFromContextCreation(e){const t=[];return e.hierarchicalRanges?.length?t.push(...e.hierarchicalRanges):e.auxiliaryRange&&t.push({...e.range?.[0],dataRange:e.auxiliaryRange}),{background:e.background,dataSets:t,dataSetsHaveTitle:e.dataSetsHaveTitle??!1,legendPosition:e.legendPosition??"top",title:e.title||{text:""},type:"sunburst",labelRange:e.range?.[0]?.dataRange,showValues:e.showValues,showLabels:e.showLabels,valuesDesign:e.valuesDesign,groupColors:e.groupColors}}getDefinition(){return this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange)}getContextCreation(){const e=this.dataSets.at(-1)?.dataRange;return{...this,range:this.labelRange?[{dataRange:this.getters.getRangeString(this.labelRange,this.sheetId)}]:[],auxiliaryRange:e?this.getters.getRangeString(e,this.sheetId):void 0,hierarchicalRanges:this.dataSets.map((e=>({dataRange:this.getters.getRangeString(e.dataRange,this.sheetId)})))}}getDefinitionWithSpecificDataSets(e,t,o){return{type:"sunburst",dataSetsHaveTitle:!!e.length&&Boolean(e[0].labelCell),background:this.background,dataSets:e.map((e=>({dataRange:this.getters.getRangeString(e.dataRange,o||this.sheetId)}))),legendPosition:this.legendPosition,labelRange:t?this.getters.getRangeString(t,o||this.sheetId):void 0,title:this.title,showValues:this.showValues,showLabels:this.showLabels,valuesDesign:this.valuesDesign,groupColors:this.groupColors,pieHolePercentage:this.pieHolePercentage}}duplicateInDuplicatedSheet(e){const t=qS(this.sheetId,e,this.dataSets),o=ZS(this.sheetId,e,this.labelRange),s=this.getDefinitionWithSpecificDataSets(t,o,e);return new qI(s,e,this.getters)}copyInSheetId(e){const t=this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange,e);return new qI(t,e,this.getters)}getDefinitionForExcel(){}updateRanges(e){const{dataSets:t,labelRange:o,isStale:s}=WS(this.getters,e,this.dataSets,this.labelRange);if(!s)return this;const i=this.getDefinitionWithSpecificDataSets(t,o);return new qI(i,this.sheetId,this.getters)}}class ZI extends $C{static defaults={background:m,legendPosition:"top",dataSetsHaveTitle:!1,showHeaders:!0,headersColor:"#000000"};dataSets;labelRange;background;legendPosition;type="treemap";dataSetsHaveTitle;showHeaders;headerDesign;showValues;showLabels;valuesDesign;coloringOptions;constructor(e,t,o){super(e,t,o),this.dataSets=YS(o,e.dataSets,t,e.dataSetsHaveTitle),this.labelRange=fa(o,t,e.labelRange),this.background=e.background,this.legendPosition=e.legendPosition,this.dataSetsHaveTitle=e.dataSetsHaveTitle,this.showHeaders=e.showHeaders,this.headerDesign=e.headerDesign,this.showValues=e.showValues,this.showLabels=e.showLabels,this.valuesDesign=e.valuesDesign,this.coloringOptions=e.coloringOptions}static transformDefinition(e,t,o){return QS(e,t,o)}static validateChartDefinition(e,t){return e.checkValidations(t,oC,sC)}static getDefinitionFromContextCreation(e){const t=[];return e.hierarchicalRanges?.length?t.push(...e.hierarchicalRanges):e.auxiliaryRange&&t.push({...e.range?.[0],dataRange:e.auxiliaryRange}),{background:e.background,dataSets:t,dataSetsHaveTitle:e.dataSetsHaveTitle??!1,legendPosition:e.legendPosition??"top",title:e.title||{text:""},type:"treemap",labelRange:e.range?.[0]?.dataRange,showValues:e.showValues,showHeaders:e.showHeaders,headerDesign:e.headerDesign,showLabels:e.showLabels,valuesDesign:e.valuesDesign,coloringOptions:e.treemapColoringOptions}}getContextCreation(){const e=this.dataSets.at(-1)?.dataRange;return{...this,range:this.labelRange?[{dataRange:this.getters.getRangeString(this.labelRange,this.sheetId)}]:[],auxiliaryRange:e?this.getters.getRangeString(e,this.sheetId):void 0,hierarchicalRanges:this.dataSets.map((e=>({dataRange:this.getters.getRangeString(e.dataRange,this.sheetId)})))}}duplicateInDuplicatedSheet(e){const t=qS(this.sheetId,e,this.dataSets),o=ZS(this.sheetId,e,this.labelRange),s=this.getDefinitionWithSpecificDataSets(t,o,e);return new ZI(s,e,this.getters)}copyInSheetId(e){const t=this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange,e);return new ZI(t,e,this.getters)}getDefinition(){return this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange)}getDefinitionWithSpecificDataSets(e,t,o){const s=e.map((e=>({dataRange:this.getters.getRangeString(e.dataRange,o||this.sheetId)})));return{type:"treemap",dataSetsHaveTitle:!!e.length&&Boolean(e[0].labelCell),background:this.background,dataSets:s,legendPosition:this.legendPosition,labelRange:t?this.getters.getRangeString(t,o||this.sheetId):void 0,title:this.title,showValues:this.showValues,showHeaders:this.showHeaders,headerDesign:this.headerDesign,showLabels:this.showLabels,valuesDesign:this.valuesDesign,coloringOptions:this.coloringOptions}}getDefinitionForExcel(){}updateRanges(e){const{dataSets:t,labelRange:o,isStale:s}=WS(this.getters,e,this.dataSets,this.labelRange);if(!s)return this;const i=this.getDefinitionWithSpecificDataSets(t,o);return new ZI(i,this.sheetId,this.getters)}}class jI extends $C{dataSets;labelRange;background;verticalAxisPosition;legendPosition;aggregated;type="waterfall";dataSetsHaveTitle;showSubTotals;firstValueAsSubtotal;showConnectorLines;positiveValuesColor;negativeValuesColor;subTotalValuesColor;dataSetDesign;axesDesign;showValues;constructor(e,t,o){super(e,t,o),this.dataSets=YS(o,e.dataSets,t,e.dataSetsHaveTitle),this.labelRange=fa(o,t,e.labelRange),this.background=e.background,this.verticalAxisPosition=e.verticalAxisPosition,this.legendPosition=e.legendPosition,this.aggregated=e.aggregated,this.dataSetsHaveTitle=e.dataSetsHaveTitle,this.showSubTotals=e.showSubTotals,this.showConnectorLines=e.showConnectorLines,this.positiveValuesColor=e.positiveValuesColor,this.negativeValuesColor=e.negativeValuesColor,this.subTotalValuesColor=e.subTotalValuesColor,this.firstValueAsSubtotal=e.firstValueAsSubtotal,this.dataSetDesign=e.dataSets,this.axesDesign=e.axesDesign,this.showValues=e.showValues}static transformDefinition(e,t,o){return QS(e,t,o)}static validateChartDefinition(e,t){return e.checkValidations(t,oC,sC)}static getDefinitionFromContextCreation(e){return{background:e.background,dataSets:e.range?e.range:[],dataSetsHaveTitle:e.dataSetsHaveTitle??!1,aggregated:e.aggregated??!1,legendPosition:e.legendPosition??"top",title:e.title||{text:""},type:"waterfall",verticalAxisPosition:"left",labelRange:e.auxiliaryRange||void 0,showSubTotals:e.showSubTotals??!1,showConnectorLines:e.showConnectorLines??!0,firstValueAsSubtotal:e.firstValueAsSubtotal??!1,axesDesign:e.axesDesign,showValues:e.showValues}}getContextCreation(){const e=[];for(const[t,o]of this.dataSets.entries())e.push({...this.dataSetDesign?.[t],dataRange:this.getters.getRangeString(o.dataRange,this.sheetId)});return{...this,range:e,auxiliaryRange:this.labelRange?this.getters.getRangeString(this.labelRange,this.sheetId):void 0}}duplicateInDuplicatedSheet(e){const t=qS(this.sheetId,e,this.dataSets),o=ZS(this.sheetId,e,this.labelRange),s=this.getDefinitionWithSpecificDataSets(t,o,e);return new jI(s,e,this.getters)}copyInSheetId(e){const t=this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange,e);return new jI(t,e,this.getters)}getDefinition(){return this.getDefinitionWithSpecificDataSets(this.dataSets,this.labelRange)}getDefinitionWithSpecificDataSets(e,t,o){const s=[];for(const[t,i]of e.entries())s.push({...this.dataSetDesign?.[t],dataRange:this.getters.getRangeString(i.dataRange,o||this.sheetId)});return{type:"waterfall",dataSetsHaveTitle:!!e.length&&Boolean(e[0].labelCell),background:this.background,dataSets:s,legendPosition:this.legendPosition,verticalAxisPosition:this.verticalAxisPosition,labelRange:t?this.getters.getRangeString(t,o||this.sheetId):void 0,title:this.title,aggregated:this.aggregated,showSubTotals:this.showSubTotals,showConnectorLines:this.showConnectorLines,positiveValuesColor:this.positiveValuesColor,negativeValuesColor:this.negativeValuesColor,subTotalValuesColor:this.subTotalValuesColor,firstValueAsSubtotal:this.firstValueAsSubtotal,axesDesign:this.axesDesign,showValues:this.showValues}}getDefinitionForExcel(){}updateRanges(e){const{dataSets:t,labelRange:o,isStale:s}=WS(this.getters,e,this.dataSets,this.labelRange);if(!s)return this;const i=this.getDefinitionWithSpecificDataSets(t,o);return new jI(i,this.sheetId,this.getters)}}function YI(e,t){const o=e.getDefinition(),s=tw(o,e.dataSets,e.labelRange,t),{labels:i,datasets:n}=bC(o,s);return{chartJsConfig:{type:"bar",data:{labels:i,datasets:n},options:{...Ly,layout:Ew(0,s),scales:Uw(o,s),plugins:{title:tI(o),legend:Fw(o),tooltip:lI(0,s),chartShowValuesPlugin:eI(o,s),waterfallLinesPlugin:{showConnectorLines:o.showConnectorLines}}}},background:e.background||m}}const XI=new n;XI.add("bar",{match:e=>"bar"===e,createChart:(e,t,o)=>new bI(e,t,o),getChartRuntime:SI,validateChartDefinition:bI.validateChartDefinition,transformDefinition:bI.transformDefinition,getChartDefinitionFromContextCreation:bI.getDefinitionFromContextCreation,sequence:10}),XI.add("combo",{match:e=>"combo"===e,createChart:(e,t,o)=>new TI(e,t,o),getChartRuntime:function(e,t){const o=e.getDefinition(),s=tw(o,e.dataSets,e.labelRange,t);return{chartJsConfig:{type:"bar",data:{labels:s.labels,datasets:wC(o,s)},options:{...Ly,layout:Ew(0,s),scales:Vw(o,s),plugins:{title:tI(o),legend:Ow(o),tooltip:nI(o,s),chartShowValuesPlugin:Kw(o,s)}}},background:e.background||m}},validateChartDefinition:TI.validateChartDefinition,transformDefinition:TI.transformDefinition,getChartDefinitionFromContextCreation:TI.getDefinitionFromContextCreation,sequence:15}),XI.add("line",{match:e=>"line"===e,createChart:(e,t,o)=>new HI(e,t,o),getChartRuntime:UI,validateChartDefinition:HI.validateChartDefinition,transformDefinition:HI.transformDefinition,getChartDefinitionFromContextCreation:HI.getDefinitionFromContextCreation,sequence:20}),XI.add("pie",{match:e=>"pie"===e,createChart:(e,t,o)=>new BI(e,t,o),getChartRuntime:zI,validateChartDefinition:BI.validateChartDefinition,transformDefinition:BI.transformDefinition,getChartDefinitionFromContextCreation:BI.getDefinitionFromContextCreation,sequence:30}),XI.add("scorecard",{match:e=>"scorecard"===e,createChart:(e,t,o)=>new XC(e,t,o),getChartRuntime:JC,validateChartDefinition:XC.validateChartDefinition,transformDefinition:XC.transformDefinition,getChartDefinitionFromContextCreation:XC.getDefinitionFromContextCreation,sequence:40}),XI.add("gauge",{match:e=>"gauge"===e,createChart:(e,t,o)=>new PI(e,t,o),getChartRuntime:MI,validateChartDefinition:PI.validateChartDefinition,transformDefinition:PI.transformDefinition,getChartDefinitionFromContextCreation:PI.getDefinitionFromContextCreation,sequence:50}),XI.add("scatter",{match:e=>"scatter"===e,createChart:(e,t,o)=>new WI(e,t,o),getChartRuntime:function(e,t){const o=e.getDefinition(),s=sw(o,e.dataSets,e.labelRange,t);return{chartJsConfig:{type:"line",data:{labels:s.labels,datasets:CC(o,s)},options:{...Ly,layout:Ew(0,s),scales:Hw(o,s),plugins:{title:tI(o),legend:_w(o),tooltip:rI(0,s),chartShowValuesPlugin:Kw(o,s)}}},background:e.background||m}},validateChartDefinition:WI.validateChartDefinition,transformDefinition:WI.transformDefinition,getChartDefinitionFromContextCreation:WI.getDefinitionFromContextCreation,sequence:60}),XI.add("waterfall",{match:e=>"waterfall"===e,createChart:(e,t,o)=>new jI(e,t,o),getChartRuntime:YI,validateChartDefinition:jI.validateChartDefinition,transformDefinition:jI.transformDefinition,getChartDefinitionFromContextCreation:jI.getDefinitionFromContextCreation,sequence:70}),XI.add("pyramid",{match:e=>"pyramid"===e,createChart:(e,t,o)=>new $I(e,t,o),getChartRuntime:function(e,t){const o=e.getDefinition(),s=ow(o,e.dataSets,e.labelRange,t);return{chartJsConfig:{type:"bar",data:{labels:s.labels,datasets:vC(o,s)},options:{...Ly,indexAxis:"y",layout:Ew(0,s),scales:Bw(o,s),plugins:{title:tI(o),legend:Tw(o),tooltip:cI(o,s),chartShowValuesPlugin:Qw(o,s)}}},background:e.background||m}},validateChartDefinition:$I.validateChartDefinition,transformDefinition:$I.transformDefinition,getChartDefinitionFromContextCreation:$I.getDefinitionFromContextCreation,sequence:80,dataSeriesLimit:2}),XI.add("radar",{match:e=>"radar"===e,createChart:(e,t,o)=>new GI(e,t,o),getChartRuntime:function(e,t){const o=e.getDefinition(),s=nw(o,e.dataSets,e.labelRange,t);return{chartJsConfig:{type:"radar",data:{labels:s.labels,datasets:IC(o,s)},options:{...Ly,layout:Ew(0,s),scales:zw(o,s),plugins:{title:tI(o),legend:Pw(o),tooltip:hI(0,s),chartShowValuesPlugin:Kw(o,s)}}},background:e.background||m}},validateChartDefinition:GI.validateChartDefinition,transformDefinition:GI.transformDefinition,getChartDefinitionFromContextCreation:GI.getDefinitionFromContextCreation,sequence:80}),XI.add("geo",{match:e=>"geo"===e,createChart:(e,t,o)=>new LI(e,t,o),getChartRuntime:function(e,t){const o=e.getDefinition(),s=rw(o,e.dataSets,e.labelRange,t);return{chartJsConfig:{type:"choropleth",data:{datasets:xC(o,s)},options:{...Ly,layout:Ew(0,s),scales:$w(o,s),plugins:{title:tI(o),tooltip:dI(0,s),legend:{display:!1}}}},background:e.background||m}},validateChartDefinition:LI.validateChartDefinition,transformDefinition:LI.transformDefinition,getChartDefinitionFromContextCreation:LI.getDefinitionFromContextCreation,sequence:90,dataSeriesLimit:1}),XI.add("funnel",{match:e=>"funnel"===e,createChart:(e,t,o)=>new AI(e,t,o),getChartRuntime:function(e,t){const o=e.getDefinition(),s=aw(o,e.dataSets,e.labelRange,t);return{chartJsConfig:{type:"funnel",data:{labels:s.labels,datasets:EC(o,s)},options:{...Ly,indexAxis:"y",layout:Ew(0,s),scales:Gw(0,s),plugins:{title:tI(o),legend:{display:!1},tooltip:uI(0,s),chartShowValuesPlugin:Kw(o,s)}}},background:e.background||m}},validateChartDefinition:AI.validateChartDefinition,transformDefinition:AI.transformDefinition,getChartDefinitionFromContextCreation:AI.getDefinitionFromContextCreation,sequence:100,dataSeriesLimit:1}),XI.add("sunburst",{match:e=>"sunburst"===e,createChart:(e,t,o)=>new qI(e,t,o),getChartRuntime:function(e,t){const o=e.getDefinition(),s=lw(o,e.dataSets,e.labelRange,t);return{chartJsConfig:{type:"doughnut",data:{datasets:TC(o,s)},options:{cutout:void 0===e.pieHolePercentage?"25%":`${e.pieHolePercentage}%`,...Ly,layout:Ew(0,s),plugins:{title:tI(o),legend:Mw(o),tooltip:gI(0,s),sunburstLabelsPlugin:Jw(o,s),sunburstHoverPlugin:{enabled:!0}}}},background:e.background||m}},validateChartDefinition:qI.validateChartDefinition,transformDefinition:qI.transformDefinition,getChartDefinitionFromContextCreation:qI.getDefinitionFromContextCreation,sequence:30}),XI.add("treemap",{match:e=>"treemap"===e,createChart:(e,t,o)=>new ZI(e,t,o),getChartRuntime:function(e,t){const o=e.getDefinition(),s=lw(o,e.dataSets,e.labelRange,t);return{chartJsConfig:{type:"treemap",data:{labels:s.labels,datasets:OC(o,s)},options:{...Ly,layout:Ew(0,s),plugins:{title:tI(o),legend:{display:!1},tooltip:pI(0,s)}}},background:e.background||m}},validateChartDefinition:ZI.validateChartDefinition,transformDefinition:ZI.transformDefinition,getChartDefinitionFromContextCreation:ZI.getDefinitionFromContextCreation,sequence:100});const KI=new n;KI.add("line",zC),KI.add("bar",zC),KI.add("combo",zC),KI.add("pie",zC),KI.add("gauge",EI),KI.add("scatter",zC),KI.add("scorecard",sy),KI.add("waterfall",zC),KI.add("pyramid",zC),KI.add("radar",zC),KI.add("geo",zC),KI.add("funnel",zC),KI.add("sunburst",zC),KI.add("treemap",zC);const JI={line:Vo("Line"),column:Vo("Column"),bar:Vo("Bar"),area:Vo("Area"),pie:Vo("Pie"),hierarchical:Vo("Hierarchical"),misc:Vo("Miscellaneous")},QI=new n;function ex(e){const t=XI.getAll().sort(((e,t)=>e.sequence-t.sequence));return function(o,s,i){const n=t.find((e=>e.match(s.type)));if(!n)throw new Error(`No builder for this chart: ${s.type}`);return n.createChart(s,i,e)}}function tx(e){const t=XI.getAll().sort(((e,t)=>e.sequence-t.sequence));return function(o){const s=t.find((e=>e.match(o.type)));if(!s)throw new Error("No runtime builder for this chart.");return s.getChartRuntime(o,e)}}function ox(e,t){const o=XI.getAll().find((e=>e.match(t.type)));if(!o)throw new Error("Unknown chart type.");return o.validateChartDefinition(e,t)}function sx(e,t,o){const s=XI.getAll().find((e=>e.match(t.type)));if(!s)throw new Error("Unknown chart type.");return s.transformDefinition(e,t,o)}function ix(e,t){const o=function(e,t){const o=e.getActiveSheetId(),s=wr(t).numberOfCols;if(t.top===t.bottom||s<=2)return;const i=e.getEvaluatedCell({sheetId:o,col:t.right,row:t.top}),n=i.type!==Ts.number,r=s=>{const i=e.getEvaluatedCellsInZone(o,{...t,left:s,right:s,top:t.top+(n?1:0)});return i.every((e=>e.type!==Ts.number))?"string":i.every((e=>e.type!==Ts.text))?"number":void 0};for(let e=t.left;e<t.right;e++){const o=r(e);if(e!==t.right&&"string"!==o)return;if(e===t.right&&"number"!==o)return}const a={...t,right:t.right-1},l={...t,left:t.right};return{title:{},dataSets:[{dataRange:dr(a)}],type:"sunburst",legendPosition:"none",labelRange:dr(l),dataSetsHaveTitle:n}}(t,e);if(o)return o;const s=t.getActiveSheetId();let i=e;const n=1===wr(e).numberOfCols;n||(i={...e,left:e.left+1});const r=dr(t.getUnboundedZone(s,i)),a=[{dataRange:r,yAxisId:"y"}],l=t.getCell({sheetId:s,col:e.left,row:e.top});if(1===Pr(e)&&l?.content)return{type:"scorecard",title:{},background:l.style?.fillColor||void 0,keyValue:dr(e),baselineMode:Ie,baselineColorUp:xe,baselineColorDown:Ee};const c=!!t.getEvaluatedCellsInZone(s,{...i,bottom:i.top}).find((e=>e.type!==Ts.empty&&e.type!==Ts.number));let h;n||(h=dr(t.getUnboundedZone(s,{...e,right:e.left})));const d=i.right===i.left?"none":"top",u={title:{},dataSets:a,labelsAsText:!1,stacked:!1,aggregated:!1,cumulative:!1,labelRange:h,type:"line",dataSetsHaveTitle:c,legendPosition:d},g=new HI(u,s,t);if(uw(u,g.dataSets,g.labelRange,t))return u;const p=YS(t,a,s,c);return n&&fw(t,p[0]).every((e=>"string"==typeof e&&!hi(e)))?{title:{},dataSets:[{dataRange:r}],aggregated:!0,labelRange:r,type:"pie",legendPosition:"top",dataSetsHaveTitle:!1}:{title:{},dataSets:a,labelRange:h,type:"bar",stacked:!1,aggregated:!1,dataSetsHaveTitle:c,legendPosition:d}}QI.add("line",{matcher:e=>"line"===e.type&&!e.stacked&&!e.fillArea,displayName:Vo("Line"),chartType:"line",chartSubtype:"line",subtypeDefinition:{stacked:!1,fillArea:!1},category:"line",preview:"o-spreadsheet-ChartPreview.LINE_CHART"}).add("stacked_line",{matcher:e=>"line"===e.type&&!e.fillArea&&!!e.stacked,displayName:Vo("Stacked Line"),chartType:"line",chartSubtype:"stacked_line",subtypeDefinition:{stacked:!0,fillArea:!1},category:"line",preview:"o-spreadsheet-ChartPreview.STACKED_LINE_CHART"}).add("area",{matcher:e=>"line"===e.type&&!e.stacked&&!!e.fillArea,displayName:Vo("Area"),chartType:"line",chartSubtype:"area",subtypeDefinition:{stacked:!1,fillArea:!0},category:"area",preview:"o-spreadsheet-ChartPreview.AREA_CHART"}).add("stacked_area",{matcher:e=>"line"===e.type&&e.stacked&&!!e.fillArea,displayName:Vo("Stacked Area"),chartType:"line",chartSubtype:"stacked_area",subtypeDefinition:{stacked:!0,fillArea:!0},category:"area",preview:"o-spreadsheet-ChartPreview.STACKED_AREA_CHART"}).add("scatter",{displayName:Vo("Scatter"),chartType:"scatter",chartSubtype:"scatter",category:"misc",preview:"o-spreadsheet-ChartPreview.SCATTER_CHART"}).add("column",{matcher:e=>"bar"===e.type&&!e.stacked&&!e.horizontal,displayName:Vo("Column"),chartType:"bar",chartSubtype:"column",subtypeDefinition:{stacked:!1,horizontal:!1},category:"column",preview:"o-spreadsheet-ChartPreview.COLUMN_CHART"}).add("stacked_column",{matcher:e=>"bar"===e.type&&e.stacked&&!e.horizontal,displayName:Vo("Stacked Column"),chartType:"bar",chartSubtype:"stacked_column",subtypeDefinition:{stacked:!0,horizontal:!1},category:"column",preview:"o-spreadsheet-ChartPreview.STACKED_COLUMN_CHART"}).add("bar",{matcher:e=>"bar"===e.type&&!e.stacked&&!!e.horizontal,displayName:Vo("Bar"),chartType:"bar",chartSubtype:"bar",subtypeDefinition:{horizontal:!0,stacked:!1},category:"bar",preview:"o-spreadsheet-ChartPreview.BAR_CHART"}).add("stacked_bar",{matcher:e=>"bar"===e.type&&e.stacked&&!!e.horizontal,displayName:Vo("Stacked Bar"),chartType:"bar",chartSubtype:"stacked_bar",subtypeDefinition:{horizontal:!0,stacked:!0},category:"bar",preview:"o-spreadsheet-ChartPreview.STACKED_BAR_CHART"}).add("combo",{displayName:Vo("Combo"),chartSubtype:"combo",chartType:"combo",category:"line",preview:"o-spreadsheet-ChartPreview.COMBO_CHART"}).add("pie",{matcher:e=>"pie"===e.type&&!e.isDoughnut,displayName:Vo("Pie"),chartSubtype:"pie",chartType:"pie",subtypeDefinition:{isDoughnut:!1},category:"pie",preview:"o-spreadsheet-ChartPreview.PIE_CHART"}).add("doughnut",{matcher:e=>"pie"===e.type&&!!e.isDoughnut,displayName:Vo("Doughnut"),chartSubtype:"doughnut",chartType:"pie",subtypeDefinition:{isDoughnut:!0},category:"pie",preview:"o-spreadsheet-ChartPreview.DOUGHNUT_CHART"}).add("gauge",{displayName:Vo("Gauge"),chartSubtype:"gauge",chartType:"gauge",category:"misc",preview:"o-spreadsheet-ChartPreview.GAUGE_CHART"}).add("scorecard",{displayName:Vo("Scorecard"),chartSubtype:"scorecard",chartType:"scorecard",category:"misc",preview:"o-spreadsheet-ChartPreview.SCORECARD_CHART"}).add("waterfall",{displayName:Vo("Waterfall"),chartSubtype:"waterfall",chartType:"waterfall",category:"misc",preview:"o-spreadsheet-ChartPreview.WATERFALL_CHART"}).add("pyramid",{displayName:Vo("Population Pyramid"),chartSubtype:"pyramid",chartType:"pyramid",category:"misc",preview:"o-spreadsheet-ChartPreview.POPULATION_PYRAMID_CHART"}).add("radar",{matcher:e=>"radar"===e.type&&!e.fillArea,displayName:Vo("Radar"),chartSubtype:"radar",chartType:"radar",subtypeDefinition:{fillArea:!1},category:"misc",preview:"o-spreadsheet-ChartPreview.RADAR_CHART"}).add("filled_radar",{matcher:e=>"radar"===e.type&&!!e.fillArea,displayName:Vo("Filled Radar"),chartType:"radar",chartSubtype:"filled_radar",subtypeDefinition:{fillArea:!0},category:"misc",preview:"o-spreadsheet-ChartPreview.FILLED_RADAR_CHART"}).add("geo",{displayName:Vo("Geo Chart"),chartSubtype:"geo",chartType:"geo",category:"misc",preview:"o-spreadsheet-ChartPreview.GEO_CHART"}).add("funnel",{displayName:Vo("Funnel"),chartSubtype:"funnel",chartType:"funnel",category:"misc",preview:"o-spreadsheet-ChartPreview.FUNNEL_CHART"}).add("sunburst",{matcher:e=>"sunburst"===e.type,displayName:Vo("Sunburst"),chartSubtype:"sunburst",chartType:"sunburst",category:"hierarchical",preview:"o-spreadsheet-ChartPreview.SUNBURST_CHART"}).add("treemap",{matcher:e=>"treemap"===e.type,displayName:Vo("Tree Map"),chartType:"treemap",chartSubtype:"treemap",category:"hierarchical",preview:"o-spreadsheet-ChartPreview.TREE_MAP_CHART"});var nx=Object.freeze({__proto__:null,AbstractChart:$C,BarChart:bI,CHART_AXIS_CHOICES:lC,CHART_COMMON_OPTIONS:Ly,GaugeChart:PI,LineChart:HI,MOVING_AVERAGE_TREND_LINE_XAXIS_ID:$S,PieChart:BI,SPREADSHEET_TO_EXCEL_TRENDLINE_TYPE_MAPPING:GS,ScorecardChart:XC,TREND_LINE_XAXIS_ID:zS,WaterfallChart:jI,adaptChartRange:jS,chartFactory:ex,chartFontColor:eC,chartMutedFontColor:tC,chartRuntimeFactory:tx,chartToImageFile:Uy,chartToImageUrl:Hy,checkDataset:oC,checkLabelRange:sC,createBarChartRuntime:SI,createDataSets:YS,createGaugeChartRuntime:MI,createLineChartRuntime:UI,createPieChartRuntime:zI,createScorecardChartRuntime:JC,createWaterfallChartRuntime:YI,drawScoreChart:KC,duplicateDataSetsInDuplicatedSheet:qS,duplicateLabelRangeInDuplicatedSheet:ZS,formatChartDatasetValue:rC,formatTickValue:aC,getChartPositionAtCenterOfViewport:function(e,t){const{x:o,y:s}=e.getMainViewportCoordinates(),{scrollX:i,scrollY:n}=e.getActiveSheetScrollInfo(),{width:r,height:a}=e.getVisibleRect(e.getActiveMainViewport());return{x:o+i+Math.max(0,(r-t.width)/2),y:s+n+Math.max(0,(a-t.height)/2)}},getDefinedAxis:nC,getPieColors:cC,getSmartChartDefinition:ix,isTrendLineAxis:dC,shouldRemoveFirstLabel:iC,toExcelDataset:KS,toExcelLabelRange:JS,transformChartDefinitionWithDataSetsWithZone:QS,transformDefinition:sx,truncateLabel:hC,updateChartRangesWithDataSets:WS,validateChartDefinition:ox});function rx(e,t){const{scrollX:o,scrollY:s}=e.getActiveSheetScrollInfo(),i=e.getSheetViewDimension(),n=o+Math.max(0,(i.width-t.width)/2),r=s+Math.max(0,(i.height-t.height)/2);return e.getPositionAnchorOffset({x:n,y:r})}function ax(e,t){const o=ze(t),s=e.getSheetViewDimension(),i=s.width,n=s.height;if(o.width>i){const e=i/o.width;o.width=i,o.height=o.height*e}if(o.height>n){const e=n/o.height;o.height=n,o.width=o.width*e}return o}class lx{xmlString;constructor(e){this.xmlString=e}toString(){return this.xmlString}}const cx=["areaChart","area3DChart","lineChart","line3DChart","stockChart","radarChart","scatterChart","pieChart","pie3DChart","doughnutChart","barChart","bar3DChart","ofPieChart","surfaceChart","surface3DChart","bubbleChart","comboChart","radarChart"];function hx(e,t,o){return{content:(new XMLSerializer).serializeToString(e),path:t,contentType:o}}function dx(e){return String(e).replace(/\&/g,"&amp;").replace(/\</g,"&lt;").replace(/\>/g,"&gt;").replace(/\"/g,"&quot;").replace(/\'/g,"&apos;").replace(/[\x00-\x08\x0B\x0C\x0E-\x1F]/g,"")}function ux(e){return new lx(e.map((([e,t])=>`${e}="${dx(t)}"`)).join(" "))}function gx(e,t="text/xml"){const o=(new DOMParser).parseFromString(e.toString(),t),s=o.querySelector("parsererror");if(s){const t=s.innerHTML,o=parseInt(t.split(":")[0],10),i=e.toString().trim().split("\n"),n=i.slice(Math.max(o-3,0),Math.min(o+2,i.length)).join("\n");throw new Error(`XML string could not be parsed: ${t}\n${n}`)}return o}function px(e){if(e)return{style:e.style,color:{rgb:e.color}}}function mx(e,t){return vx`
10
10
  <Override ContentType="${t}" PartName="${e}" />
11
11
  `}function fx(e){return new lx(e.join("\n"))}function vx(e,...t){const o=[e[0]];for(let s=0;s<t.length;s++){const i=t[s]instanceof lx?t[s]:dx(t[s]);o.push(i+e[s+1])}return new lx(dt(o))}function bx(e){return e.replace(/NAMESPACE.*NAMESPACE(.*)/,"$1")}function Sx(e){return e.replaceAll(/([a-zA-Z0-9]+):([a-zA-Z0-9]+)/g,"NAMESPACE$1NAMESPACE$2")}function Cx(e,t,s){return o([{id:"edit",name:Vo("Edit"),sequence:1,execute:()=>{s.model.dispatch("SELECT_FIGURE",{figureId:e}),s.openSidePanel("ChartPanel")},icon:"o-spreadsheet-Icon.EDIT",isEnabled:e=>!e.isSmall},yx(e,s),wx(e,s),{id:"copy_as_image",name:Vo("Copy as image"),icon:"o-spreadsheet-Icon.COPY_AS_IMAGE",sequence:4,execute:async()=>{const t=s.model.getters.getFigureSheetId(e),o=s.model.getters.getFigure(t,e),i=s.model.getters.getChartType(e),n=s.model.getters.getChartRuntime(e),r=`<img src="${dx(Hy(n,o,i))}" />`,a=await Uy(n,o,i);s.clipboard.write({"text/html":r,"image/png":a}),s.notifyUser({sticky:!1,type:"success",text:Vo("Chart copied to clipboard")})},isReadonlyAllowed:!0},{id:"download",name:Vo("Download"),icon:"o-spreadsheet-Icon.DOWNLOAD",sequence:6,execute:async()=>{const t=s.model.getters.getFigureSheetId(e),o=s.model.getters.getFigure(t,e),i=s.model.getters.getChartType(e);by(Hy(s.model.getters.getChartRuntime(e),o,i),"chart")},isReadonlyAllowed:!0},Ix(e,t,s)]).filter((e=>!s.model.getters.isReadonly()||e.isReadonlyAllowed))}function yx(e,t,o){return{id:"copy",name:Vo("Copy"),sequence:2,description:"Ctrl+C",execute:async()=>{t.model.dispatch("SELECT_FIGURE",{figureId:e}),t.model.dispatch("COPY");const s=await t.model.getters.getClipboardTextAndImageContent();await t.clipboard.write(s),o&&t.notifyUser({sticky:!1,type:"success",text:o})},icon:"o-spreadsheet-Icon.CLIPBOARD"}}function wx(e,t){return{id:"cut",name:Vo("Cut"),sequence:3,description:"Ctrl+X",execute:async()=>{t.model.dispatch("SELECT_FIGURE",{figureId:e}),t.model.dispatch("CUT"),await t.clipboard.write(await t.model.getters.getClipboardTextAndImageContent())},icon:"o-spreadsheet-Icon.CUT"}}function Ix(e,t,o){return{id:"delete",name:Vo("Delete"),sequence:10,execute:()=>{o.model.dispatch("DELETE_FIGURE",{sheetId:o.model.getters.getActiveSheetId(),figureId:e}),t()},icon:"o-spreadsheet-Icon.TRASH"}}class xx extends hh{mutators=["toggleFullScreenChart"];fullScreenFigure=void 0;toggleFullScreenChart(e){this.fullScreenFigure?.id===e?this.fullScreenFigure=void 0:this.makeFullScreen(e)}makeFullScreen(e){const t=this.getters.getActiveSheetId(),o=this.getters.getFigure(t,e);o&&(this.fullScreenFigure={...o,x:0,y:0,width:0,height:0})}}mh`
12
12
  .o-menu {
@@ -267,7 +267,7 @@
267
267
  max-width: 300px;
268
268
  }
269
269
  }
270
- `;class rE extends t.Component{static template="o-spreadsheet-SpeechBubble";static props={content:String,anchorRect:Object};static components={};spreadsheetRect=Ax();bubbleRef=t.useRef("bubble");setup(){t.useEffect((()=>{const e=this.bubbleRef.el;if(!e)return;const t=this.props.anchorRect,o=cy(e),s=t.x+t.width/2-o.width/2-this.spreadsheetRect.x,i=t.y-o.height-7-this.spreadsheetRect.y;e.style.left=`${s}px`,e.style.top=`${i}px`}))}}class aE{lastId=0;add(e){this.lastId++;const t=this.lastId;return new Promise(((o,s)=>{e.then((e=>{this.lastId===t&&o(e)})).catch((e=>{this.lastId===t&&s(e)}))}))}}const lE=new n;function cE(e,t,o){const{x:s,y:i,width:n,height:r}=o;if(n<0||r<0)return;const l=t.color||a,{ctx:c}=e;c.save(),t.noBorder||(t.dashed&&c.setLineDash([5,3]),c.strokeStyle=l,t.thinLine?(c.lineWidth=1,c.strokeRect(s,i,n,r)):(c.lineWidth=2,c.strokeRect(s+.5,i+.5,n,r))),t.noFill||(c.fillStyle=eo($t(l),t.fillAlpha??.12),c.fillRect(s,i,n,r)),c.restore()}class hE extends hh{mutators=["register","unRegister"];providers=[];constructor(e){super(e),this.onDispose((()=>{this.providers=[]}))}get renderingLayers(){return["Highlights"]}get highlights(){const e=this.getters.getActiveSheetId();return this.providers.flatMap((e=>e.highlights)).filter((t=>t.range.sheetId===e)).map((e=>{const{numberOfRows:t,numberOfCols:o}=wr(e.range.zone),s=t*o==1?this.getters.expandZone(e.range.sheetId,e.range.zone):e.range.unboundedZone;return{...e,range:this.model.getters.getRangeFromZone(e.range.sheetId,s)}}))}register(e){this.providers.push(e)}unRegister(e){this.providers=this.providers.filter((t=>t!==e))}drawLayer(e,t){if("Highlights"===t)for(const t of this.highlights){cE(e,t,this.getters.getVisibleRect(t.range.zone))}}}class dE{mutators=["notifyUser","raiseError","askConfirmation","updateNotificationCallbacks"];notifyUser=e=>window.alert(e.text);askConfirmation=(e,t,o)=>{window.confirm(e)?t():o?.()};raiseError=(e,t)=>{window.alert(e),t?.()};updateNotificationCallbacks(e){this.notifyUser=e.notifyUser||this.notifyUser,this.raiseError=e.raiseError||this.raiseError,this.askConfirmation=e.askConfirmation||this.askConfirmation}}class uE extends hh{mutators=["useProvider","moveSelection","hide","selectIndex"];selectedIndex=void 0;provider;get selectedProposal(){if(void 0!==this.selectedIndex&&void 0!==this.provider)return this.provider.proposals[this.selectedIndex]}useProvider(e){this.provider=e,this.selectedIndex=e.autoSelectFirstProposal?0:void 0}hide(){this.provider=void 0,this.selectedIndex=void 0}selectIndex(e){this.selectedIndex=e}moveSelection(e){this.provider&&(void 0!==this.selectedIndex?"previous"===e?(this.selectedIndex--,this.selectedIndex<0&&(this.selectedIndex=this.provider.proposals.length-1)):this.selectedIndex=(this.selectedIndex+1)%this.provider.proposals.length:this.selectedIndex=0)}}const gE="#000000",pE="#3da4ab",mE={OPERATOR:pE,NUMBER:"#02c39a",STRING:"#00a82d",FUNCTION:gE,DEBUGGER:pE,LEFT_PAREN:gE,RIGHT_PAREN:gE,ARG_SEPARATOR:gE,ORPHAN_RIGHT_PAREN:"#ff0000"};class fE extends hh{mutators=["startEdition","setCurrentContent","stopEdition","stopComposerRangeSelection","cancelEdition","cycleReferences","hideHelp","autoCompleteOrStop","insertAutoCompleteValue","moveAutoCompleteSelection","selectAutoCompleteIndex","toggleEditionMode","changeComposerCursorSelection","replaceComposerCursorSelection","hoverToken"];col=0;row=0;editionMode="inactive";sheetId="";_currentContent="";currentTokens=[];selectionStart=0;selectionEnd=0;initialContent="";colorIndexByRange={};autoComplete=new uE(this.get);hoveredTokens=[];hoveredContentEvaluation="";autoCompleteKeepLast=new aE;notificationStore=this.get(dE);highlightStore=this.get(hE);constructor(e){super(e),this.highlightStore.register(this),this.onDispose((()=>{this.highlightStore.unRegister(this)}))}handleEvent(e){this.hideHelp();const t=this.getters.getActiveSheetId();let o;if(o=e.options.unbounded?this.getters.getUnboundedZone(t,e.anchor.zone):e.anchor.zone,"newAnchor"===e.mode)"selecting"===this.editionMode&&this.insertSelectedRange(o);else"selecting"===this.editionMode?this.replaceSelectedRange(o):this.updateComposerRange(e.previousAnchor.zone,o)}changeComposerCursorSelection(e,t){this.isSelectionValid(this._currentContent.length,e,t)&&(this.selectionStart=e,this.selectionEnd=t,this.computeFormulaCursorContext(),this.computeParenthesisRelatedToCursor(),this.updateAutoCompleteProvider())}stopComposerRangeSelection(){this.isSelectingRange&&(this.editionMode="editing")}startEdition(e,t){if(t){const o=e||this.getComposerContent(this.getters.getActivePosition());if(!this.isSelectionValid(o.length,t.start,t.end))return}const{col:o,row:s}=this.getters.getActivePosition();this.model.dispatch("SELECT_FIGURE",{figureId:null}),this.model.dispatch("SCROLL_TO_CELL",{col:o,row:s}),"inactive"!==this.editionMode&&e?this.setContent(e,t):this._startEdition(e,t),this.updateTokenColor(),this.computeFormulaCursorContext(),this.computeParenthesisRelatedToCursor(),this.updateAutoCompleteProvider()}cancelEdition(){this.resetContent(),this.cancelEditionAndActivateSheet()}setCurrentContent(e,t){t&&!this.isSelectionValid(e.length,t.start,t.end)||(this.setContent(e,t,!0),this.updateTokenColor(),this.computeFormulaCursorContext(),this.computeParenthesisRelatedToCursor())}replaceComposerCursorSelection(e){this.replaceSelection(e)}handle(e){switch(e.type){case"SELECT_FIGURE":e.figureId&&(this.resetContent(),this.cancelEditionAndActivateSheet());break;case"START_CHANGE_HIGHLIGHT":const{left:t,top:o}=e.zone;this.isSelectingRange&&(this.editionMode="editing"),this.model.selection.resetAnchor(this,{cell:{col:t,row:o},zone:e.zone})}}get currentContent(){return"inactive"===this.editionMode?this.getComposerContent(this.getters.getActivePosition()):this._currentContent}get composerSelection(){return{start:this.selectionStart,end:this.selectionEnd}}get isSelectingRange(){return"selecting"===this.editionMode}get showSelectionIndicator(){return this.isSelectingRange&&this.canStartComposerRangeSelection()}get tokenAtCursor(){const e=Math.min(this.selectionStart,this.selectionEnd),t=Math.max(this.selectionStart,this.selectionEnd);return e===t&&0===t?void 0:this.currentTokens.find((o=>o.start<=e&&o.end>=t))}get autoCompleteProposals(){return this.autoComplete.provider?.proposals||[]}get autoCompleteSelectedIndex(){return this.autoComplete.selectedIndex}get isAutoCompleteDisplayed(){return!!this.autoComplete.provider}cycleReferences(){const e=this.getters.getLocale(),t=mv(this.composerSelection,this._currentContent,e);void 0!==t&&this.setCurrentContent(t.content,t.selection)}toggleEditionMode(){if("inactive"===this.editionMode)return;const e=Math.min(this.selectionStart,this.selectionEnd),t=Math.max(this.selectionStart,this.selectionEnd),o=[...this.currentTokens].reverse().find((o=>o.end>=e&&t>=o.start&&"REFERENCE"===o.type));if("editing"===this.editionMode&&o){const e=this.getters.getActiveSheetId(),{sheetName:t,xc:s}=ta(o.value),i=this.getters.getSheetIdByName(t);i&&i!==e&&this.model.dispatch("ACTIVATE_SHEET",{sheetIdFrom:e,sheetIdTo:i}),this.selectionStart=this.selectionEnd=o.end;const n=this.getters.getRangeFromSheetXC(this.sheetId,s).zone;this.captureSelection(n),this.editionMode="selecting"}else this.editionMode="editing"}hoverToken(e){this.currentTokens.forEach((e=>e.isInHoverContext=void 0));const t=[...this.currentTokens];if(void 0===e||["ARG_SEPARATOR","SPACE"].includes(t[e].type))return this.hoveredContentEvaluation="",void(this.hoveredTokens=[]);const o=this.getNumberOfMissingParenthesis(t);o>0&&t.push(...Array(o).fill({value:")",type:"RIGHT_PAREN"}));let s=t;if(0!==e){const o=this.getRelatedTokens(t,e),i=t.filter((e=>!o.includes(e)&&"SPACE"!==e.type));s=1===i.length&&i[0]===t[0]?t:o}s.forEach((e=>e.isInHoverContext=!0));let i=s.map((e=>e.value)).join("");Vt(i)||(i=`=${i}`);const n=Cl(i,this.getters.getLocale()),r=this.getters.evaluateFormulaResult(this.sheetId,n);this.hoveredTokens=s,this.hoveredContentEvaluation=this.evaluationResultToDisplayString(r)}getRelatedTokens(e,t){try{const o=ov(e);let s;for(const e of iv(o))if(t>=e.tokenStartIndex&&t<=e.tokenEndIndex)s=e;else if(t<e.tokenStartIndex)break;return s?e.slice(s.tokenStartIndex,s.tokenEndIndex+1):e}catch(t){if(t instanceof ei)return e;throw t}}evaluationResultToDisplayString(e){const t=this.getters.getLocale();if(Ws(e)){const o=","===t.decimalSeparator?"/":",";return`{${Mi(e).map((e=>e.map((e=>this.cellValueToDisplayString(e))).join(o))).join(";")}}`}return this.cellValueToDisplayString(e)}cellValueToDisplayString(e){const t=e.value;switch(typeof t){case"number":return bn(t,{locale:this.getters.getLocale(),format:e.format});case"string":return hi(t)?t:`"${t}"`;case"boolean":return t?"TRUE":"FALSE"}return"0"}captureSelection(e,t,o){this.model.selection.capture(this,{cell:{col:t||e.left,row:o||e.right},zone:e},{handleEvent:this.handleEvent.bind(this),release:()=>{this._stopEdition()}})}isSelectionValid(e,t,o){return t>=0&&t<=e&&o>=0&&o<=e}startComposerRangeSelection(){if(this.sheetId===this.getters.getActiveSheetId()){const e=Dr({col:this.col,row:this.row});this.model.selection.resetAnchor(this,{cell:{col:this.col,row:this.row},zone:e})}this.editionMode="selecting"}_startEdition(e,t){const o=this.getters.getActiveCell(),s=this.getters.getLocale();e&&o.format?.includes("%")&&Is(e,s)&&(t=t||{start:e.length,end:e.length},e=`${e}%`);const{col:i,row:n,sheetId:r}=this.getters.getActivePosition();this.col=i,this.sheetId=r,this.row=n,this.initialContent=this.getComposerContent({sheetId:r,col:i,row:n}),this.editionMode="editing",this.setContent(e||this.initialContent,t),this.colorIndexByRange={};const a=Dr({col:this.col,row:this.row});this.captureSelection(a,i,n)}_stopEdition(){if("inactive"!==this.editionMode){this.cancelEditionAndActivateSheet();let e=this.getCurrentCanonicalContent();if(!(this.initialContent!==e))return;if(e&&Vt(e)){const t=this.getNumberOfMissingParenthesis(this.currentTokens);t>0&&(e+=dt(new Array(t).fill(")")))}this.confirmEdition(e)}}getCurrentCanonicalContent(){return Cl(this._currentContent,this.getters.getLocale())}cancelEditionAndActivateSheet(){if("inactive"===this.editionMode)return;this._cancelEdition();this.getters.getActiveSheetId()!==this.sheetId&&this.model.dispatch("ACTIVATE_SHEET",{sheetIdFrom:this.getters.getActiveSheetId(),sheetIdTo:this.sheetId})}_cancelEdition(){"inactive"!==this.editionMode&&(this.editionMode="inactive",this.model.selection.release(this),this.colorIndexByRange={},this.hoveredTokens=[],this.hoveredContentEvaluation="")}resetContent(){this.setContent(this.initialContent||"")}setContent(e,t,o){const s=this._currentContent!==e;if(this._currentContent=e,t?(this.selectionStart=t.start,this.selectionEnd=t.end):this.selectionStart=this.selectionEnd=e.length,s||"inactive"!==this.editionMode){const t=this.getters.getLocale();this.currentTokens=Vt(e)?hv(e,t):[],this.currentTokens.length>100&&o&&this.notificationStore.raiseError(Vo("This formula has over 100 parts. It can't be processed properly, consider splitting it into multiple cells"))}this.canStartComposerRangeSelection()&&this.startComposerRangeSelection(),this.updateAutoCompleteProvider()}getAutoCompleteProviders(){return lE.getAll()}insertSelectedRange(e){const t=Math.min(this.selectionStart,this.selectionEnd),o=this.getZoneReference(e);this.canStartComposerRangeSelection()?this.insertText(o,t):this.insertText(","+o,t)}replaceSelectedRange(e){const t=this.getZoneReference(e),o=this.tokenAtCursor,s="REFERENCE"===o?.type?o.start:this.selectionStart;this.replaceText(t,s,this.selectionEnd)}updateComposerRange(e,t){const o=this.getters.getActiveSheetId(),s=this.tokenAtCursor,i=(s?[s,...this.currentTokens]:this.currentTokens).filter((e=>"REFERENCE"===e.type)).find((t=>{const{xc:s,sheetName:i}=ta(t.value),n=i||this.getters.getSheetName(this.sheetId);if(!la(this.getters.getSheetName(o),n))return!1;const r=this.getters.getRangeFromSheetXC(o,s);return br(this.getters.expandZone(o,r.zone),e)}));if(!i)return;const n=this.getters.getRangeFromSheetXC(o,i.value);this.selectionStart=i.start,this.selectionEnd=this.selectionStart+i.value.length;const r=this.getters.getRangeFromZone(o,t),a=this.getRangeReference(r,n.parts);this.replaceSelection(a)}getZoneReference(e){const t=this.sheetId,o=this.getters.getActiveSheetId(),s=this.getters.getRangeFromZone(o,e);return this.getters.getSelectionRangeString(s,t)}getRangeReference(e,t){const o={...e,parts:[...t]};return this.getters.getSelectionRangeString(o,this.sheetId)}replaceSelection(e){const t=Math.min(this.selectionStart,this.selectionEnd),o=Math.max(this.selectionStart,this.selectionEnd);this.replaceText(e,t,o)}replaceText(e,t,o){this._currentContent=this._currentContent.slice(0,t)+this._currentContent.slice(o,this._currentContent.length),this.insertText(e,t)}insertText(e,t){const o=this._currentContent.slice(0,t)+e+this._currentContent.slice(t),s=t+e.length;this.setCurrentContent(o,{start:s,end:s})}updateTokenColor(){this.updateRangeColor();for(let e=0;e<this.currentTokens.length;e++)this.currentTokens[e].color=this.getTokenColor(this.currentTokens[e])}getTokenColor(e){if("REFERENCE"===e.type){const{xc:t,sheetName:o}=ta(e.value);return this.rangeColor(t,o)||gE}if("SYMBOL"===e.type){const t=e.value.toUpperCase();if("TRUE"===t||"FALSE"===t)return mE.NUMBER;if(t in CS.content)return mE.FUNCTION}return["LEFT_PAREN","RIGHT_PAREN"].includes(e.type)&&""===e.parenthesesCode?mE.ORPHAN_RIGHT_PAREN:mE[e.type]||gE}rangeColor(e,t){const o=t?this.model.getters.getSheetIdByName(t):this.sheetId,s=this.highlights.find((t=>{if(t.range.sheetId!==o)return!1;let s=this.model.getters.getRangeFromSheetXC(o,e).zone;return s=1===Pr(s)?this.model.getters.expandZone(o,s):s,br(s,t.range.zone)}));return s&&s.color?s.color:void 0}computeFormulaCursorContext(){for(let e=0;e<this.currentTokens.length;e++)this.currentTokens[e].isBlurred=!1;if(this.selectionStart!==this.selectionEnd)return;const e=this.getParenthesesCodeAfterCursor(),t=[...this.currentTokens].reverse().find((t=>e.startsWith(t.parenthesesCode)&&"SYMBOL"===t.type));if(t)for(let e=0;e<this.currentTokens.length;e++)(this.currentTokens[e].parenthesesCode||"").startsWith(t.parenthesesCode||"")||(this.currentTokens[e].isBlurred=!0)}getParenthesesCodeAfterCursor(){const e=this.tokenAtCursor?.parenthesesCode||"";return"RIGHT_PAREN"===this.tokenAtCursor?.type?e.slice(0,-1)||"":e}computeParenthesisRelatedToCursor(){for(let e=0;e<this.currentTokens.length;e++)this.currentTokens[e].isParenthesisLinkedToCursor=!1;const e=this.tokenAtCursor;if(e&&""!==e.parenthesesCode&&["LEFT_PAREN","RIGHT_PAREN"].includes(e.type))for(let t=0;t<this.currentTokens.length;t++){const o=this.currentTokens[t];["LEFT_PAREN","RIGHT_PAREN"].includes(o.type)&&o.parenthesesCode===e.parenthesesCode&&o!==e&&(this.currentTokens[t].isParenthesisLinkedToCursor=!0,this.tokenAtCursor.isParenthesisLinkedToCursor=!0)}}updateRangeColor(){if(!Vt(this._currentContent)||"inactive"===this.editionMode)return;const e=this.sheetId,t=this.getReferencedRanges().map((t=>this.getters.getRangeString(t,e))),o={};for(const e of t)void 0!==this.colorIndexByRange[e]&&(o[e]=this.colorIndexByRange[e]);const s=new Set(Object.values(o));let i=0;const n=()=>{for(;s.has(i);)i++;return s.add(i),i};for(const e of t){const t=e in o?o[e]:n();o[e]=t}this.colorIndexByRange=o}get highlights(){if(!Vt(this.currentContent)||"inactive"===this.editionMode)return[];const e=this.sheetId,t=e=>{const t=this.colorIndexByRange[e];return Ut[t%Ut.length]};return this.getReferencedRanges().map((o=>{const s=this.getters.getRangeString(o,e),{numberOfRows:i,numberOfCols:n}=wr(o.zone),r=i*n==1?this.getters.expandZone(o.sheetId,o.zone):o.unboundedZone;return{range:this.model.getters.getRangeFromZone(o.sheetId,r),color:t(s),interactive:!0}}))}getReferencedRanges(){const e=this.sheetId;return this.currentTokens.filter((e=>"REFERENCE"===e.type)).map((t=>this.getters.getRangeFromSheetXC(e,t.value))).filter((e=>!e.invalidSheetName&&!e.invalidXc))}async updateAutoCompleteProvider(){this.autoComplete.hide();const e=await this.autoCompleteKeepLast.add(this.findAutocompleteProvider());e&&(this.autoComplete.useProvider(e),this.model.trigger("update"))}async findAutocompleteProvider(){const e=this.currentContent,t=Vt(e)?this.tokenAtCursor:{type:"STRING",value:e};if("inactive"===this.editionMode||!t||["TRUE","FALSE"].includes(t.value.toUpperCase())||!this.canStartComposerRangeSelection()&&!["SYMBOL","STRING","UNKNOWN"].includes(t.type))return;const o={composer:this,getters:this.getters},s=this.getAutoCompleteProviders().sort(((e,t)=>(e.sequence??1/0)-(t.sequence??1/0))).map((s=>({...s,getProposals:s.getProposals.bind(o,t,e),selectProposal:s.selectProposal.bind(o,t)})));for(const e of s){let o=await e.getProposals();const s=o?.find((e=>e.text===t.value)),i=t.value.replace(/[ ,\(\)]/g,"");if(this._currentContent===this.initialContent&&e.displayAllOnInitialContent&&o?.length)return{proposals:o,selectProposal:e.selectProposal,autoSelectFirstProposal:e.autoSelectFirstProposal??!1};if(s&&this._currentContent!==this.initialContent)return;if(i&&o&&!["ARG_SEPARATOR","LEFT_PAREN","OPERATOR"].includes(t.type)){const e=Ra(i,o,(e=>e.fuzzySearchKey||e.text));s&&!e.length||(o=e)}if(e.maxDisplayedProposals&&(o=o?.slice(0,e.maxDisplayedProposals)),o?.length)return{proposals:o,selectProposal:e.selectProposal,autoSelectFirstProposal:e.autoSelectFirstProposal??!1}}}hideHelp(){this.autoComplete.hide()}autoCompleteOrStop(e){if("inactive"!==this.editionMode){const t=this.autoComplete;if(t.provider&&void 0!==t.selectedIndex){const e=t.provider.proposals[t.selectedIndex]?.text;if(e)return void this.autoComplete.provider?.selectProposal(e)}this.stopEdition(e)}}insertAutoCompleteValue(e){this.autoComplete.provider?.selectProposal(e)}selectAutoCompleteIndex(e){this.autoComplete.selectIndex(Ze(0,e,10))}moveAutoCompleteSelection(e){this.autoComplete.moveSelection(e)}canStartComposerRangeSelection(){if(Vt(this._currentContent)){const e=this.tokenAtCursor;if(!e)return!1;const t=this.currentTokens.map((e=>e.start)).indexOf(e.start);let o=t,s=e;for(;!["ARG_SEPARATOR","LEFT_PAREN","OPERATOR"].includes(s.type)||tl.includes(s.value);){if("SPACE"!==s.type||o<1)return!1;o--,s=this.currentTokens[o]}for(o=t+1,s=this.currentTokens[o];s&&!["ARG_SEPARATOR","RIGHT_PAREN","OPERATOR"].includes(s.type);){if("SPACE"!==s.type)return!1;o++,s=this.currentTokens[o]}return!0}return!1}getNumberOfMissingParenthesis(e){return e.filter((e=>"LEFT_PAREN"===e.type)).length-e.filter((e=>"RIGHT_PAREN"===e.type)).length}}const vE=CS.content,bE=300,SE="selector-flag",CE="highlight-parenthesis-flag",yE="highlight-flag";mh`
270
+ `;class rE extends t.Component{static template="o-spreadsheet-SpeechBubble";static props={content:String,anchorRect:Object};static components={};spreadsheetRect=Ax();bubbleRef=t.useRef("bubble");setup(){t.useEffect((()=>{const e=this.bubbleRef.el;if(!e)return;const t=this.props.anchorRect,o=cy(e),s=t.x+t.width/2-o.width/2-this.spreadsheetRect.x,i=t.y-o.height-7-this.spreadsheetRect.y;e.style.left=`${s}px`,e.style.top=`${i}px`}))}}class aE{lastId=0;add(e){this.lastId++;const t=this.lastId;return new Promise(((o,s)=>{e.then((e=>{this.lastId===t&&o(e)})).catch((e=>{this.lastId===t&&s(e)}))}))}}const lE=new n;function cE(e,t,o){const{x:s,y:i,width:n,height:r}=o;if(n<0||r<0)return;const l=t.color||a,{ctx:c}=e;c.save(),t.noBorder||(t.dashed&&c.setLineDash([5,3]),c.strokeStyle=l,t.thinLine?(c.lineWidth=1,c.strokeRect(s,i,n,r)):(c.lineWidth=2,c.strokeRect(s+.5,i+.5,n,r))),t.noFill||(c.fillStyle=eo($t(l),t.fillAlpha??.12),c.fillRect(s,i,n,r)),c.restore()}class hE extends hh{mutators=["register","unRegister"];providers=[];constructor(e){super(e),this.onDispose((()=>{this.providers=[]}))}get renderingLayers(){return["Highlights"]}get highlights(){const e=this.getters.getActiveSheetId();return this.providers.flatMap((e=>e.highlights)).filter((t=>t.range.sheetId===e)).map((e=>{const{numberOfRows:t,numberOfCols:o}=wr(e.range.zone),s=t*o==1?this.getters.expandZone(e.range.sheetId,e.range.zone):e.range.unboundedZone;return{...e,range:this.model.getters.getRangeFromZone(e.range.sheetId,s)}}))}register(e){this.providers.push(e)}unRegister(e){this.providers=this.providers.filter((t=>t!==e))}drawLayer(e,t){if("Highlights"===t)for(const t of this.highlights){cE(e,t,this.getters.getVisibleRect(t.range.zone))}}}class dE{mutators=["notifyUser","raiseError","askConfirmation","updateNotificationCallbacks"];notifyUser=e=>window.alert(e.text);askConfirmation=(e,t,o)=>{window.confirm(e)?t():o?.()};raiseError=(e,t)=>{window.alert(e),t?.()};updateNotificationCallbacks(e){this.notifyUser=e.notifyUser||this.notifyUser,this.raiseError=e.raiseError||this.raiseError,this.askConfirmation=e.askConfirmation||this.askConfirmation}}class uE extends hh{mutators=["useProvider","moveSelection","hide","selectIndex"];selectedIndex=void 0;provider;get selectedProposal(){if(void 0!==this.selectedIndex&&void 0!==this.provider)return this.provider.proposals[this.selectedIndex]}useProvider(e){this.provider=e,this.selectedIndex=e.autoSelectFirstProposal?0:void 0}hide(){this.provider=void 0,this.selectedIndex=void 0}selectIndex(e){this.selectedIndex=e}moveSelection(e){this.provider&&(void 0!==this.selectedIndex?"previous"===e?(this.selectedIndex--,this.selectedIndex<0&&(this.selectedIndex=this.provider.proposals.length-1)):this.selectedIndex=(this.selectedIndex+1)%this.provider.proposals.length:this.selectedIndex=0)}}const gE="#000000",pE="#3da4ab",mE={OPERATOR:pE,NUMBER:"#02c39a",STRING:"#00a82d",FUNCTION:gE,DEBUGGER:pE,LEFT_PAREN:gE,RIGHT_PAREN:gE,ARG_SEPARATOR:gE,ORPHAN_RIGHT_PAREN:"#ff0000"};class fE extends hh{mutators=["startEdition","setCurrentContent","stopEdition","stopComposerRangeSelection","cancelEdition","cycleReferences","hideHelp","autoCompleteOrStop","insertAutoCompleteValue","moveAutoCompleteSelection","selectAutoCompleteIndex","toggleEditionMode","changeComposerCursorSelection","replaceComposerCursorSelection","hoverToken"];col=0;row=0;editionMode="inactive";sheetId="";_currentContent="";currentTokens=[];selectionStart=0;selectionEnd=0;initialContent="";colorIndexByRange={};autoComplete=new uE(this.get);hoveredTokens=[];hoveredContentEvaluation="";autoCompleteKeepLast=new aE;notificationStore=this.get(dE);highlightStore=this.get(hE);constructor(e){super(e),this.highlightStore.register(this),this.onDispose((()=>{this.highlightStore.unRegister(this)}))}handleEvent(e){this.hideHelp();const t=this.getters.getActiveSheetId();let o;if(o=e.options.unbounded?this.getters.getUnboundedZone(t,e.anchor.zone):e.anchor.zone,"newAnchor"===e.mode)"selecting"===this.editionMode&&this.insertSelectedRange(o);else"selecting"===this.editionMode?this.replaceSelectedRange(o):this.updateComposerRange(e.previousAnchor.zone,o)}changeComposerCursorSelection(e,t){this.isSelectionValid(this._currentContent.length,e,t)&&(this.selectionStart=e,this.selectionEnd=t,this.computeFormulaCursorContext(),this.computeParenthesisRelatedToCursor(),this.updateAutoCompleteProvider())}stopComposerRangeSelection(){this.isSelectingRange&&(this.editionMode="editing")}startEdition(e,t){if(t){const o=e||this.getComposerContent(this.getters.getActivePosition());if(!this.isSelectionValid(o.length,t.start,t.end))return}const{col:o,row:s}=this.getters.getActivePosition();this.model.dispatch("SELECT_FIGURE",{figureId:null}),this.model.dispatch("SCROLL_TO_CELL",{col:o,row:s}),"inactive"!==this.editionMode&&e?this.setContent(e,t):this._startEdition(e,t),this.updateTokenColor(),this.computeFormulaCursorContext(),this.computeParenthesisRelatedToCursor(),this.updateAutoCompleteProvider()}cancelEdition(){this.resetContent(),this.cancelEditionAndActivateSheet()}setCurrentContent(e,t){t&&!this.isSelectionValid(e.length,t.start,t.end)||(this.setContent(e,t,!0),this.updateTokenColor(),this.computeFormulaCursorContext(),this.computeParenthesisRelatedToCursor())}replaceComposerCursorSelection(e){this.replaceSelection(e)}handle(e){switch(e.type){case"SELECT_FIGURE":e.figureId&&(this.resetContent(),this.cancelEditionAndActivateSheet());break;case"START_CHANGE_HIGHLIGHT":const{left:t,top:o}=e.zone;this.isSelectingRange&&(this.editionMode="editing"),this.model.selection.resetAnchor(this,{cell:{col:t,row:o},zone:e.zone})}}get currentContent(){return"inactive"===this.editionMode?this.getComposerContent(this.getters.getActivePosition()):this._currentContent}get composerSelection(){return{start:this.selectionStart,end:this.selectionEnd}}get isSelectingRange(){return"selecting"===this.editionMode}get showSelectionIndicator(){return this.isSelectingRange&&this.canStartComposerRangeSelection()}get tokenAtCursor(){const e=Math.min(this.selectionStart,this.selectionEnd),t=Math.max(this.selectionStart,this.selectionEnd);return e===t&&0===t?void 0:this.currentTokens.find((o=>o.start<=e&&o.end>=t))}get autoCompleteProposals(){return this.autoComplete.provider?.proposals||[]}get autoCompleteSelectedIndex(){return this.autoComplete.selectedIndex}get isAutoCompleteDisplayed(){return!!this.autoComplete.provider}cycleReferences(){const e=this.getters.getLocale(),t=mv(this.composerSelection,this._currentContent,e);void 0!==t&&this.setCurrentContent(t.content,t.selection)}toggleEditionMode(){if("inactive"===this.editionMode)return;const e=Math.min(this.selectionStart,this.selectionEnd),t=Math.max(this.selectionStart,this.selectionEnd),o=[...this.currentTokens].reverse().find((o=>o.end>=e&&t>=o.start&&"REFERENCE"===o.type));if("editing"===this.editionMode&&o){const e=this.getters.getActiveSheetId(),{sheetName:t,xc:s}=ta(o.value),i=this.getters.getSheetIdByName(t);i&&i!==e&&this.model.dispatch("ACTIVATE_SHEET",{sheetIdFrom:e,sheetIdTo:i}),this.selectionStart=this.selectionEnd=o.end;const n=this.getters.getRangeFromSheetXC(this.sheetId,s).zone;this.captureSelection(n),this.editionMode="selecting"}else this.editionMode="editing"}hoverToken(e){this.currentTokens.forEach((e=>e.isInHoverContext=void 0));const t=[...this.currentTokens];if(void 0===e||["ARG_SEPARATOR","SPACE"].includes(t[e].type))return this.hoveredContentEvaluation="",void(this.hoveredTokens=[]);const o=this.getNumberOfMissingParenthesis(t);o>0&&t.push(...Array(o).fill({value:")",type:"RIGHT_PAREN"}));let s=t;if(0!==e){const o=this.getRelatedTokens(t,e),i=t.filter((e=>!o.includes(e)&&"SPACE"!==e.type));s=1===i.length&&i[0]===t[0]?t:o}s.forEach((e=>e.isInHoverContext=!0));let i=s.map((e=>e.value)).join("");Vt(i)||(i=`=${i}`);const n=Cl(i,this.getters.getLocale()),r=this.getters.evaluateFormulaResult(this.sheetId,n);this.hoveredTokens=s,this.hoveredContentEvaluation=this.evaluationResultToDisplayString(r)}getRelatedTokens(e,t){try{const o=ov(e);let s;for(const e of iv(o))if(t>=e.tokenStartIndex&&t<=e.tokenEndIndex)s=e;else if(t<e.tokenStartIndex)break;return s?e.slice(s.tokenStartIndex,s.tokenEndIndex+1):e}catch(t){if(t instanceof ei)return e;throw t}}evaluationResultToDisplayString(e){const t=this.getters.getLocale();if(Ws(e)){const o=","===t.decimalSeparator?"/":",";return`{${Mi(e).map((e=>e.map((e=>this.cellValueToDisplayString(e))).join(o))).join(";")}}`}return this.cellValueToDisplayString(e)}cellValueToDisplayString(e){const t=e.value;switch(typeof t){case"number":return bn(t,{locale:this.getters.getLocale(),format:e.format});case"string":return hi(t)?t:`"${t}"`;case"boolean":return t?"TRUE":"FALSE"}return"0"}captureSelection(e,t,o){this.model.selection.capture(this,{cell:{col:t??e.left,row:o??e.right},zone:e},{handleEvent:this.handleEvent.bind(this),release:()=>{this._stopEdition()}})}isSelectionValid(e,t,o){return t>=0&&t<=e&&o>=0&&o<=e}startComposerRangeSelection(){if(this.sheetId===this.getters.getActiveSheetId()){const e=Dr({col:this.col,row:this.row});this.model.selection.resetAnchor(this,{cell:{col:this.col,row:this.row},zone:e})}this.editionMode="selecting"}_startEdition(e,t){const o=this.getters.getActiveCell(),s=this.getters.getLocale();e&&o.format?.includes("%")&&Is(e,s)&&(t=t||{start:e.length,end:e.length},e=`${e}%`);const{col:i,row:n,sheetId:r}=this.getters.getActivePosition();this.col=i,this.sheetId=r,this.row=n,this.initialContent=this.getComposerContent({sheetId:r,col:i,row:n}),this.editionMode="editing",this.setContent(e||this.initialContent,t),this.colorIndexByRange={};const a=Dr({col:this.col,row:this.row});this.captureSelection(a,i,n)}_stopEdition(){if("inactive"!==this.editionMode){this.cancelEditionAndActivateSheet();let e=this.getCurrentCanonicalContent();if(!(this.initialContent!==e))return;if(e&&Vt(e)){const t=this.getNumberOfMissingParenthesis(this.currentTokens);t>0&&(e+=dt(new Array(t).fill(")")))}this.confirmEdition(e)}}getCurrentCanonicalContent(){return Cl(this._currentContent,this.getters.getLocale())}cancelEditionAndActivateSheet(){if("inactive"===this.editionMode)return;this._cancelEdition();this.getters.getActiveSheetId()!==this.sheetId&&this.model.dispatch("ACTIVATE_SHEET",{sheetIdFrom:this.getters.getActiveSheetId(),sheetIdTo:this.sheetId})}_cancelEdition(){"inactive"!==this.editionMode&&(this.editionMode="inactive",this.model.selection.release(this),this.colorIndexByRange={},this.hoveredTokens=[],this.hoveredContentEvaluation="")}resetContent(){this.setContent(this.initialContent||"")}setContent(e,t,o){const s=this._currentContent!==e;if(this._currentContent=e,t?(this.selectionStart=t.start,this.selectionEnd=t.end):this.selectionStart=this.selectionEnd=e.length,s||"inactive"!==this.editionMode){const t=this.getters.getLocale();this.currentTokens=Vt(e)?hv(e,t):[],this.currentTokens.length>100&&o&&this.notificationStore.raiseError(Vo("This formula has over 100 parts. It can't be processed properly, consider splitting it into multiple cells"))}this.canStartComposerRangeSelection()&&this.startComposerRangeSelection(),this.updateAutoCompleteProvider()}getAutoCompleteProviders(){return lE.getAll()}insertSelectedRange(e){const t=Math.min(this.selectionStart,this.selectionEnd),o=this.getZoneReference(e);this.canStartComposerRangeSelection()?this.insertText(o,t):this.insertText(","+o,t)}replaceSelectedRange(e){const t=this.getZoneReference(e),o=this.tokenAtCursor,s="REFERENCE"===o?.type?o.start:this.selectionStart;this.replaceText(t,s,this.selectionEnd)}updateComposerRange(e,t){const o=this.getters.getActiveSheetId(),s=this.tokenAtCursor,i=(s?[s,...this.currentTokens]:this.currentTokens).filter((e=>"REFERENCE"===e.type)).find((t=>{const{xc:s,sheetName:i}=ta(t.value),n=i||this.getters.getSheetName(this.sheetId);if(!la(this.getters.getSheetName(o),n))return!1;const r=this.getters.getRangeFromSheetXC(o,s);return br(this.getters.expandZone(o,r.zone),e)}));if(!i)return;const n=this.getters.getRangeFromSheetXC(o,i.value);this.selectionStart=i.start,this.selectionEnd=this.selectionStart+i.value.length;const r=this.getters.getRangeFromZone(o,t),a=this.getRangeReference(r,n.parts);this.replaceSelection(a)}getZoneReference(e){const t=this.sheetId,o=this.getters.getActiveSheetId(),s=this.getters.getRangeFromZone(o,e);return this.getters.getSelectionRangeString(s,t)}getRangeReference(e,t){const o={...e,parts:[...t]};return this.getters.getSelectionRangeString(o,this.sheetId)}replaceSelection(e){const t=Math.min(this.selectionStart,this.selectionEnd),o=Math.max(this.selectionStart,this.selectionEnd);this.replaceText(e,t,o)}replaceText(e,t,o){this._currentContent=this._currentContent.slice(0,t)+this._currentContent.slice(o,this._currentContent.length),this.insertText(e,t)}insertText(e,t){const o=this._currentContent.slice(0,t)+e+this._currentContent.slice(t),s=t+e.length;this.setCurrentContent(o,{start:s,end:s})}updateTokenColor(){this.updateRangeColor();for(let e=0;e<this.currentTokens.length;e++)this.currentTokens[e].color=this.getTokenColor(this.currentTokens[e])}getTokenColor(e){if("REFERENCE"===e.type){const{xc:t,sheetName:o}=ta(e.value);return this.rangeColor(t,o)||gE}if("SYMBOL"===e.type){const t=e.value.toUpperCase();if("TRUE"===t||"FALSE"===t)return mE.NUMBER;if(t in CS.content)return mE.FUNCTION}return["LEFT_PAREN","RIGHT_PAREN"].includes(e.type)&&""===e.parenthesesCode?mE.ORPHAN_RIGHT_PAREN:mE[e.type]||gE}rangeColor(e,t){const o=t?this.model.getters.getSheetIdByName(t):this.sheetId,s=this.highlights.find((t=>{if(t.range.sheetId!==o)return!1;let s=this.model.getters.getRangeFromSheetXC(o,e).zone;return s=1===Pr(s)?this.model.getters.expandZone(o,s):s,br(s,t.range.zone)}));return s&&s.color?s.color:void 0}computeFormulaCursorContext(){for(let e=0;e<this.currentTokens.length;e++)this.currentTokens[e].isBlurred=!1;if(this.selectionStart!==this.selectionEnd)return;const e=this.getParenthesesCodeAfterCursor(),t=[...this.currentTokens].reverse().find((t=>e.startsWith(t.parenthesesCode)&&"SYMBOL"===t.type));if(t)for(let e=0;e<this.currentTokens.length;e++)(this.currentTokens[e].parenthesesCode||"").startsWith(t.parenthesesCode||"")||(this.currentTokens[e].isBlurred=!0)}getParenthesesCodeAfterCursor(){const e=this.tokenAtCursor?.parenthesesCode||"";return"RIGHT_PAREN"===this.tokenAtCursor?.type?e.slice(0,-1)||"":e}computeParenthesisRelatedToCursor(){for(let e=0;e<this.currentTokens.length;e++)this.currentTokens[e].isParenthesisLinkedToCursor=!1;const e=this.tokenAtCursor;if(e&&""!==e.parenthesesCode&&["LEFT_PAREN","RIGHT_PAREN"].includes(e.type))for(let t=0;t<this.currentTokens.length;t++){const o=this.currentTokens[t];["LEFT_PAREN","RIGHT_PAREN"].includes(o.type)&&o.parenthesesCode===e.parenthesesCode&&o!==e&&(this.currentTokens[t].isParenthesisLinkedToCursor=!0,this.tokenAtCursor.isParenthesisLinkedToCursor=!0)}}updateRangeColor(){if(!Vt(this._currentContent)||"inactive"===this.editionMode)return;const e=this.sheetId,t=this.getReferencedRanges().map((t=>this.getters.getRangeString(t,e))),o={};for(const e of t)void 0!==this.colorIndexByRange[e]&&(o[e]=this.colorIndexByRange[e]);const s=new Set(Object.values(o));let i=0;const n=()=>{for(;s.has(i);)i++;return s.add(i),i};for(const e of t){const t=e in o?o[e]:n();o[e]=t}this.colorIndexByRange=o}get highlights(){if(!Vt(this.currentContent)||"inactive"===this.editionMode)return[];const e=this.sheetId,t=e=>{const t=this.colorIndexByRange[e];return Ut[t%Ut.length]};return this.getReferencedRanges().map((o=>{const s=this.getters.getRangeString(o,e),{numberOfRows:i,numberOfCols:n}=wr(o.zone),r=i*n==1?this.getters.expandZone(o.sheetId,o.zone):o.unboundedZone;return{range:this.model.getters.getRangeFromZone(o.sheetId,r),color:t(s),interactive:!0}}))}getReferencedRanges(){const e=this.sheetId;return this.currentTokens.filter((e=>"REFERENCE"===e.type)).map((t=>this.getters.getRangeFromSheetXC(e,t.value))).filter((e=>!e.invalidSheetName&&!e.invalidXc))}async updateAutoCompleteProvider(){this.autoComplete.hide();const e=await this.autoCompleteKeepLast.add(this.findAutocompleteProvider());e&&(this.autoComplete.useProvider(e),this.model.trigger("update"))}async findAutocompleteProvider(){const e=this.currentContent,t=Vt(e)?this.tokenAtCursor:{type:"STRING",value:e};if("inactive"===this.editionMode||!t||["TRUE","FALSE"].includes(t.value.toUpperCase())||!this.canStartComposerRangeSelection()&&!["SYMBOL","STRING","UNKNOWN"].includes(t.type))return;const o={composer:this,getters:this.getters},s=this.getAutoCompleteProviders().sort(((e,t)=>(e.sequence??1/0)-(t.sequence??1/0))).map((s=>({...s,getProposals:s.getProposals.bind(o,t,e),selectProposal:s.selectProposal.bind(o,t)})));for(const e of s){let o=await e.getProposals();const s=o?.find((e=>e.text===t.value)),i=t.value.replace(/[ ,\(\)]/g,"");if(this._currentContent===this.initialContent&&e.displayAllOnInitialContent&&o?.length)return{proposals:o,selectProposal:e.selectProposal,autoSelectFirstProposal:e.autoSelectFirstProposal??!1};if(s&&this._currentContent!==this.initialContent)return;if(i&&o&&!["ARG_SEPARATOR","LEFT_PAREN","OPERATOR"].includes(t.type)){const e=Ra(i,o,(e=>e.fuzzySearchKey||e.text));s&&!e.length||(o=e)}if(e.maxDisplayedProposals&&(o=o?.slice(0,e.maxDisplayedProposals)),o?.length)return{proposals:o,selectProposal:e.selectProposal,autoSelectFirstProposal:e.autoSelectFirstProposal??!1}}}hideHelp(){this.autoComplete.hide()}autoCompleteOrStop(e){if("inactive"!==this.editionMode){const t=this.autoComplete;if(t.provider&&void 0!==t.selectedIndex){const e=t.provider.proposals[t.selectedIndex]?.text;if(e)return void this.autoComplete.provider?.selectProposal(e)}this.stopEdition(e)}}insertAutoCompleteValue(e){this.autoComplete.provider?.selectProposal(e)}selectAutoCompleteIndex(e){this.autoComplete.selectIndex(Ze(0,e,10))}moveAutoCompleteSelection(e){this.autoComplete.moveSelection(e)}canStartComposerRangeSelection(){if(Vt(this._currentContent)){const e=this.tokenAtCursor;if(!e)return!1;const t=this.currentTokens.map((e=>e.start)).indexOf(e.start);let o=t,s=e;for(;!["ARG_SEPARATOR","LEFT_PAREN","OPERATOR"].includes(s.type)||tl.includes(s.value);){if("SPACE"!==s.type||o<1)return!1;o--,s=this.currentTokens[o]}for(o=t+1,s=this.currentTokens[o];s&&!["ARG_SEPARATOR","RIGHT_PAREN","OPERATOR"].includes(s.type);){if("SPACE"!==s.type)return!1;o++,s=this.currentTokens[o]}return!0}return!1}getNumberOfMissingParenthesis(e){return e.filter((e=>"LEFT_PAREN"===e.type)).length-e.filter((e=>"RIGHT_PAREN"===e.type)).length}}const vE=CS.content,bE=300,SE="selector-flag",CE="highlight-parenthesis-flag",yE="highlight-flag";mh`
271
271
  .o-composer-container {
272
272
  .o-composer {
273
273
  overflow-y: auto;
@@ -1012,7 +1012,7 @@
1012
1012
  height: ${te}px;
1013
1013
  }
1014
1014
  }
1015
- `;class zP extends t.Component{static props={onOpenContextMenu:Function};static template="o-spreadsheet-HeadersOverlay";static components={ColResizer:UP,RowResizer:BP};selectAll(){this.env.model.selection.selectAll()}}class $P extends hh{fingerprints;hoveredTables;hoveredIcon;lastRenderBoxes=new Map;preventNewAnimationsInNextFrame=!1;zonesWithPreventedAnimationsInNextFrame=[];animations=new Map;constructor(e){super(e),this.getters=e(ah).getters,this.fingerprints=e(ND),this.hoveredTables=e(FP),this.hoveredIcon=e(PP)}handle(e){switch(e.type){case"START":case"ACTIVATE_SHEET":case"ADD_COLUMNS_ROWS":case"REMOVE_COLUMNS_ROWS":this.animations.clear(),this.preventNewAnimationsInNextFrame=!0;break;case"RESIZE_COLUMNS_ROWS":this.preventNewAnimationsInNextFrame=!0;break;case"REDO":this.zonesWithPreventedAnimationsInNextFrame=[];break;case"UNDO":for(const t of e.commands)if("ADD_COLUMNS_ROWS"===t.type||"REMOVE_COLUMNS_ROWS"===t.type||"RESIZE_COLUMNS_ROWS"===t.type){this.animations.clear(),this.preventNewAnimationsInNextFrame=!0;break}break;case"PASTE":this.zonesWithPreventedAnimationsInNextFrame.push(...this.getters.getSelectedZones());break;case"UPDATE_CELL":const t=this.getters.getCommandZones(e);this.zonesWithPreventedAnimationsInNextFrame.push(...t)}}get renderingLayers(){return["Background","Headers"]}drawLayer(e,t,o){switch(t){case"Background":this.drawGlobalBackground(e);const t=this.lastRenderBoxes;this.lastRenderBoxes=new Map;for(const{zone:s,rect:i}of this.getters.getAllActiveViewportsZonesAndRect()){const{ctx:n}=e;n.save(),n.beginPath(),n.rect(i.x,i.y,i.width,i.height),n.clip();const r=this.getGridBoxes(s),a=this.getBoxesWithAnimations(r,t,o);this.drawBackground(e,a),this.drawOverflowingCellBackground(e,a),this.drawCellBackground(e,a),this.drawBorders(e,a),this.drawTexts(e,a),this.drawIcon(e,a),n.restore()}this.drawFrozenPanes(e),this.preventNewAnimationsInNextFrame=!1,this.zonesWithPreventedAnimationsInNextFrame=[];break;case"Headers":this.getters.isDashboard()||(this.drawHeaders(e),this.drawFrozenPanesHeaders(e))}}drawGlobalBackground(e){const{ctx:t}=e,{width:o,height:s}=this.getters.getSheetViewDimensionWithHeaders();t.fillStyle="#ffffff",t.fillRect(0,0,o+r,s+r)}drawBackground(e,t){const{ctx:o,thinLineWidth:s}=e,i=!this.getters.isDashboard()&&this.getters.getGridLinesVisibility(this.getters.getActiveSheetId()),n=i?.1*s:0;if(i)for(const e of t)e.skipCellGridLines||(o.strokeStyle="#E2E3E3",o.lineWidth=s,o.strokeRect(e.x+n,e.y+n,e.width-2*n,e.height-2*n))}drawCellBackground(e,t){const{ctx:o}=e;for(const e of t){const t=e.style;if(t.fillColor&&"#ffffff"!==t.fillColor&&(o.fillStyle=t.fillColor||"#ffffff",o.fillRect(e.x,e.y,e.width,e.height)),e.dataBarFill){o.fillStyle=e.dataBarFill.color;const t=e.dataBarFill.percentage,s=e.width*(t/100);o.fillRect(e.x,e.y,s,e.height)}if(e?.chip){o.save(),o.beginPath(),o.rect(e.x,e.y,e.width,e.height),o.clip();const t=e.chip;o.fillStyle=t.color;const s=10;o.beginPath(),o.roundRect(t.x,t.y,t.width,t.height,s),o.fill(),o.restore()}e.overlayColor&&(o.fillStyle=e.overlayColor,o.fillRect(e.x,e.y,e.width,e.height)),e.isError&&(o.fillStyle="red",o.beginPath(),o.moveTo(e.x+e.width-5,e.y),o.lineTo(e.x+e.width,e.y),o.lineTo(e.x+e.width,e.y+5),o.fill())}}drawOverflowingCellBackground(e,t){const{ctx:o,thinLineWidth:s}=e;for(const e of t)if(e.content&&e.isOverflow){const t=e.content.align||"left";let i,n;const r=e.y+s/2,a=e.height-s,l=Math.min(e.clipRect?.width||1/0,e.content.width);"left"===t?(i=e.x+s/2,n=l-2*s):"right"===t?(i=e.x+e.width-s/2,n=2*s-l):(i=(e.clipRect?.x||e.x+e.width/2-e.content.width/2)+s/2,n=l-2*s),o.fillStyle="#ffffff",o.fillRect(i,r,n,a)}}drawBorders(e,t){const{ctx:o}=e;for(const e of t){const t=e.border;if(t){const{x:o,y:i,width:n,height:r}=e;t.left&&s(t.left,o,i,o,i+r),t.top&&s(t.top,o,i,o+n,i),t.right&&s(t.right,o+n,i,o+n,i+r),t.bottom&&s(t.bottom,o,i+r,o+n,i+r)}}function s({color:e,style:t,opacity:s},i,n,r,a){switch(o.globalAlpha=s??1,o.strokeStyle=e,t){case"medium":o.lineWidth=2,n+=(i+=n===a?-.5:.5)===(r+=n===a?1.5:.5)?-.5:.5,a+=i===r?1.5:.5;break;case"thick":o.lineWidth=3,n===a&&(i--,r++),i===r&&(n--,a++);break;case"dashed":o.lineWidth=1,o.setLineDash([1,3]);break;case"dotted":o.lineWidth=1,n===a&&(i+=.5,r+=.5),i===r&&(n+=.5,a+=.5),o.setLineDash([1,1]);break;default:o.lineWidth=1}o.beginPath(),o.moveTo(i,n),o.lineTo(r,a),o.stroke(),o.lineWidth=1,o.setLineDash([]),o.globalAlpha=1}}drawTexts(e,t){const{ctx:o}=e;let s;o.textBaseline="top";for(const e of t)if(e.content){o.globalAlpha=e.textOpacity??1;const t=e.style||{},i=e.content.align||"left",n=ka(t);if(n!==s&&(s=n,o.font=n),o.fillStyle=t.textColor||"#000",o.textAlign=i,e.clipRect){o.save(),o.beginPath();const{x:t,y:s,width:i,height:n}=e.clipRect;o.rect(t,s,i,n),o.clip()}const r=e.content.x;let a=e.content.y;for(const s of e.content.textLines)$a(o,s,{x:r,y:a},t.underline,t.strikethrough),a+=re+e.content.fontSizePx;e.clipRect&&o.restore(),o.globalAlpha=1}}drawIcon(e,t){const{ctx:o}=e;for(const e of t)for(const t of Object.values(e.icons)){if(!t)continue;const s=mt({id:t.type,position:t.position},this.hoveredIcon.hoveredIcon)&&t.hoverSvg||t.svg;if(!s)continue;o.save(),o.beginPath();const i=t.clipRect||e;o.rect(i.x,i.y,i.width,i.height),o.clip();const n=t.size,{x:r,y:a}=this.getters.getCellIconRect(t,e);o.translate(r,a),o.scale(n/s.width,n/s.height);for(const e of s.paths)o.fillStyle=e.fillColor,o.fill(ZR(e.path));o.restore()}}drawHeaders(e){const{ctx:t,thinLineWidth:o}=e,s=this.getters.getSheetViewVisibleCols(),i=s[0],n=this.getters.getSheetViewVisibleRows(),r=n[0],{width:a,height:l}=this.getters.getSheetViewDimensionWithHeaders(),g=this.getters.getSelectedZones(),p=function(e){const t=new Set;for(const o of er(e))for(const e of je(o.left,o.right+1))t.add(e);return t}(g),m=function(e){const t=new Set;for(const o of er(e))for(const e of je(o.top,o.bottom+1))t.add(e);return t}(g),f=this.getters.getActiveSheetId(),v=this.getters.getNumberCols(f),b=this.getters.getNumberRows(f),S=this.getters.getActiveCols(),C=this.getters.getActiveRows();t.font=`400 11px ${fe}`,t.textAlign="center",t.textBaseline="middle",t.lineWidth=o,t.strokeStyle="#333";for(const e of s){const o={left:e,right:e,top:0,bottom:b-1},{x:s,width:i}=this.getters.getVisibleRect(o),n=S.has(e),r=p.has(e);t.fillStyle=n?d:r?h:c,t.fillRect(s,0,i,te)}for(const e of n){const o={top:e,bottom:e,left:0,right:v-1},{y:s,height:i}=this.getters.getVisibleRect(o),n=C.has(e),r=m.has(e);t.fillStyle=n?d:r?h:c,t.fillRect(0,s,oe,i)}t.beginPath(),t.moveTo(oe,0),t.lineTo(oe,l),t.moveTo(0,te),t.lineTo(a,te),t.strokeStyle="#C0C0C0",t.stroke();for(const e of s){const o=Co(e);t.fillStyle=S.has(e)?"#fff":u;const s={left:e,right:e,top:r,bottom:r},{x:i,width:n}=this.getters.getRect(s),{x:a,width:l}=this.getters.getVisibleRect(s);t.save(),t.beginPath(),t.rect(a,0,l,te),t.clip(),t.fillText(o,i+n/2,13),t.restore(),t.beginPath(),t.moveTo(i+n,0),t.lineTo(i+n,te),t.stroke()}for(const e of n){t.fillStyle=C.has(e)?"#fff":u;const o={top:e,bottom:e,left:i,right:i},{y:s,height:n}=this.getters.getRect(o),{y:r,height:a}=this.getters.getVisibleRect(o);t.save(),t.beginPath(),t.rect(0,r,oe,a),t.clip(),t.fillText(String(e+1),24,s+n/2),t.restore(),t.beginPath(),t.moveTo(0,s+n),t.lineTo(oe,s+n),t.stroke()}}drawFrozenPanesHeaders(e){const{ctx:t,thinLineWidth:o}=e,{x:s,y:i}=this.getters.getMainViewportCoordinates(),n=this.getters.isDashboard()?0:oe,r=this.getters.isDashboard()?0:te;t.lineWidth=6*o,t.strokeStyle=x,t.beginPath(),s&&(t.moveTo(n+s,0),t.lineTo(n+s,r)),i&&(t.moveTo(0,r+i),t.lineTo(n,r+i)),t.stroke()}drawFrozenPanes(e){const{ctx:t,thinLineWidth:o}=e,{x:s,y:i}=this.getters.getMainViewportCoordinates(),n=this.getters.getSheetViewVisibleCols(),r=n[0],a=n[n.length-1],l=this.getters.getSheetViewVisibleRows(),c={left:r,right:a,top:l[0],bottom:l[l.length-1]},h=this.getters.getVisibleRect(c),d=this.getters.isDashboard()?0:oe,u=this.getters.isDashboard()?0:te;t.lineWidth=6*o,t.strokeStyle="#DADFE8",t.beginPath(),s&&(t.moveTo(d+s,u),t.lineTo(d+s,h.height+u)),i&&(t.moveTo(d,u+i),t.lineTo(h.width+d,u+i)),t.stroke()}findNextEmptyCol(e,t,o){const s=this.getters.getActiveSheetId();let i=e;for(;i<t;){const e={sheetId:s,col:i+1,row:o},t=this.getters.getEvaluatedCell(e),n=this.getters.getCellComputedBorder(e),r=this.getters.doesCellHaveGridIcon(e);if(t.type!==Ts.empty||this.getters.isInMerge(e)||n?.left||r)return i;i++}return i}findPreviousEmptyCol(e,t,o){const s=this.getters.getActiveSheetId();let i=e;for(;i>t;){const e={sheetId:s,col:i-1,row:o},t=this.getters.getEvaluatedCell(e),n=this.getters.getCellComputedBorder(e),r=this.getters.doesCellHaveGridIcon(e);if(t.type!==Ts.empty||this.getters.isInMerge(e)||n?.right||r)return i;i--}return i}computeCellAlignment(e,t){const o=this.getters.getCell(e);if(o?.isFormula&&this.getters.shouldShowFormulas())return"left";const{align:s}=this.getters.getCellStyle(e),i=this.getters.getEvaluatedCell(e);return t&&i.type===Ts.number?"center"!==s?"left":s:s||i.defaultAlign}createZoneBox(e,t,o){const{left:s,right:i}=o,n=t.left,r=t.top,a={sheetId:e,col:n,row:r},l=this.getters.getEvaluatedCell(a),c=this.getters.shouldShowFormulas(),{x:h,y:d,width:u,height:g}=this.getters.getRect(t),p=this.getters.getDataValidationChipStyle(a);let m=this.getters.getCellComputedStyle(a);if(this.fingerprints.isEnabled){const e=this.fingerprints.colors.get(a);m={...m,fillColor:e}}p?.textColor&&(m={...m,textColor:p.textColor});const f=this.fingerprints.isEnabled?void 0:this.getters.getConditionalDataBar(a),v=this.getters.getCellIcons(a),b={left:v.find((e=>"left"===e?.horizontalAlign)),right:v.find((e=>"right"===e?.horizontalAlign)),center:v.find((e=>"center"===e?.horizontalAlign))},S={id:dr(t),x:h,y:d,width:u,height:g,border:this.getters.getCellComputedBorder(a)||void 0,style:m,dataBarFill:f,overlayColor:this.hoveredTables.overlayColors.get(a),isError:l.type===Ts.error&&!!l.message||this.getters.isDataValidationInvalid(a),icons:b,disabledAnimation:this.zonesWithPreventedAnimationsInNextFrame.some((e=>yr(t,e)||Sr(t,e)))},C=Va(S.style);if(l.type===Ts.empty||S.icons.center)return S;const y=m.wrapping||"overflow",w="wrap"===y&&!c,I=u-2*re,x=this.getters.getCellMultiLineText(a,{maxWidth:I,wrapText:w}),E=Math.max(...x.map((e=>this.getters.getTextWidth(e,m)+re))),R=p?5:0,T=(S.icons.left?S.icons.left.size+S.icons.left.margin:0)+R,A=(S.icons.right?S.icons.right.size+S.icons.right.margin:0)+R,D=T+E+A,_=this.computeCellAlignment(a,D>u),O=x.length,F=Math.round(this.getters.computeTextYCoordinate(S,C,m.verticalAlign,O));let P=S.x;P+="left"===_?re+T:"right"===_?S.width-re-A:S.width/2,P=Math.round(P);const M=Ta(C,O);if(S.content={textLines:x,width:"overflow"===y?E:u,align:_,x:P,y:F,fontSizePx:C},p?.fillColor){const e=T,t=5;S.chip={color:p.fillColor,width:S.width-e-t,height:M+2,x:S.x+e,y:F-2}}const N=D>u||C>g;if(S.icons.left||S.icons.right||S.chip)S.clipRect={x:S.x+T,y:S.y,width:Math.max(0,u-T-A),height:g};else if(N&&"overflow"===y){let e,o;switch(this.getters.isInMerge(a)?(e=this.getters.getMerge(a).right,o=n):(e=S.border?.right?t.right:this.findNextEmptyCol(n,i,r),o=S.border?.left?t.left:this.findPreviousEmptyCol(n,s,r),S.isOverflow=!0),_){case"left":{const o=Dr({col:e,row:r}),{x:s,y:i,width:n,height:a}=this.getters.getVisibleRect(fr(t,o));(n<D||C>a||x.length>1)&&(S.clipRect={x:s,y:i,width:n,height:a});break}case"right":{const e=Dr({col:o,row:r}),{x:s,y:i,width:n,height:a}=this.getters.getVisibleRect(fr(t,e));(n<D||C>a||x.length>1)&&(S.clipRect={x:s,y:i,width:n,height:a});break}case"center":{const s={...t,left:o,right:e},{x:i,y:n,height:r,width:a}=this.getters.getVisibleRect(s),l=D/2,c=S.x+S.width/2;if(i+a<c+l||i>c-l||C>r||x.length>1){const e=i>c-l?i:c-l,t=i+a-e;S.clipRect={x:e,y:n,width:t,height:r}}break}}}else("clip"===y||"wrap"===y||x.length>1)&&(S.clipRect={x:S.x,y:S.y,width:u,height:g});return S}getGridBoxes(e){const t=[],o=this.getters.getSheetViewVisibleCols().filter((t=>t>=e.left&&t<=e.right)),s=o[0],i=o[o.length-1],n=this.getters.getSheetViewVisibleRows().filter((t=>t>=e.top&&t<=e.bottom)),r={left:s,right:i,top:n[0],bottom:n[n.length-1]},a=this.getters.getActiveSheetId();for(const e of n)for(const s of o){const o={sheetId:a,col:s,row:e};this.getters.isInMerge(o)||t.push(this.createZoneBox(a,Dr(o),r))}for(const e of this.getters.getMerges(a))if(!this.getters.isMergeHidden(a,e)&&Sr(e,r)){const o=this.createZoneBox(a,e,r),s=this.getters.getCellComputedBorder({sheetId:a,col:e.right,row:e.bottom});o.border={...o.border,bottom:s?s.bottom:void 0,right:s?s.right:void 0},o.isMerge=!0,t.push(o)}return t}getBoxesWithAnimations(e,t,o){return this.updateAnimationsProgress(o),this.addNewAnimations(e,t,o),this.animations.size>0?(this.renderer.startAnimation("grid_renderer_animation"),this.updateBoxesWithAnimations(e)):(this.renderer.stopAnimation("grid_renderer_animation"),e)}updateBoxesWithAnimations(e){const t=[];for(const o of e){const e=this.animations.get(o.id);if(!e){t.push(o);continue}const s=ze(o);t.push(s);for(const i of e.animationTypes){const n=CI.get(i).updateAnimation(e.progress,s,e.oldBox,o);n&&t.push(...n.newBoxes)}}return t}updateAnimationsProgress(e){if(void 0!==e)for(const t of this.animations.keys()){const o=this.animations.get(t);if(void 0===o.startTime){o.startTime=e;continue}const s=e-o.startTime,i=Math.min(1,s/200);i>=1&&this.animations.delete(t),o.progress=i}}addNewAnimations(e,t,o){for(const s of e){this.lastRenderBoxes.set(s.id,s);const e=t.get(s.id);if(this.preventNewAnimationsInNextFrame||!e||s.disabledAnimation)continue;const i=[];for(const t of CI.getAll())t.hasAnimation(e,s)&&i.push(t.id);const n=i.length>0?{animationTypes:i,oldBox:e,progress:0,startTime:o}:void 0;n&&this.animations.set(s.id,n)}}}function GP(e,o,s){const i=t.useRef(e);t.useEffect((function(){const e=i.el,t=window.devicePixelRatio||1,o=e.getContext("2d",{alpha:!1}),r={ctx:o,dpr:t,thinLineWidth:.4*t},{width:a,height:l}=s();if(e.style.width=`${a}px`,e.style.height=`${l}px`,e.width=a*t,e.height=l*t,e.setAttribute("style",`width:${a}px;height:${l}px;`),0===a||0===l)return;o.translate(-.5,-.5),o.scale(t,t),n.draw(r)}));const n=oh(ch);oh($P)}function WP(e,t,o){let s=0,i=0,n=0,r=0,a=!1,l=0,c=null;function h(){if(Math.abs(n)<.05&&(n=0),Math.abs(r)<.05&&(r=0),!n&&!r)return;const e=Date.now(),o=Math.abs(e-l);t(1*(n*o),1*(r*o)),l=e,n*=.95,r*=.95,requestAnimationFrame(h)}DP(e,"touchstart",(function(e){a=!0,({clientX:s,clientY:i}=e.touches[0]),n=0,r=0}),{capture:!1}),DP(e,"touchmove",(function(e){if(!a)return;c&&(clearTimeout(c),c=null);const h=Date.now(),{clientX:d,clientY:u}=e.touches[0],g=s-d,p=i-u,m=h-l;if(!m)return;n=g/m,r=p/m,s=d,i=u,l=h,o()&&(e.cancelable&&e.preventDefault(),e.stopPropagation());c=setTimeout((()=>{n=0,r=0}),100),t(1*g,1*p)}),{capture:!1}),DP(e,"touchend",(function(e){a=!1,s=i=0,c&&clearTimeout(c);n*=1.2,r*=1.2,requestAnimationFrame(h)}),{capture:!1})}function qP(e){function t(e,t){return e*(0===t?1:ie)}return o=>{const s=t(o.shiftKey&&!my()?o.deltaY:o.deltaX,o.deltaMode),i=t(o.shiftKey&&!my()?o.deltaX:o.deltaY,o.deltaMode);e(s,i)}}mh`
1015
+ `;class zP extends t.Component{static props={onOpenContextMenu:Function};static template="o-spreadsheet-HeadersOverlay";static components={ColResizer:UP,RowResizer:BP};selectAll(){this.env.model.selection.selectAll()}}class $P extends hh{fingerprints;hoveredTables;hoveredIcon;lastRenderBoxes=new Map;preventNewAnimationsInNextFrame=!1;zonesWithPreventedAnimationsInNextFrame=[];animations=new Map;constructor(e){super(e),this.getters=e(ah).getters,this.fingerprints=e(ND),this.hoveredTables=e(FP),this.hoveredIcon=e(PP)}handle(e){switch(e.type){case"START":case"ACTIVATE_SHEET":case"ADD_COLUMNS_ROWS":case"REMOVE_COLUMNS_ROWS":this.animations.clear(),this.preventNewAnimationsInNextFrame=!0;break;case"RESIZE_COLUMNS_ROWS":this.preventNewAnimationsInNextFrame=!0;break;case"REDO":this.zonesWithPreventedAnimationsInNextFrame=[];break;case"UNDO":for(const t of e.commands)if("ADD_COLUMNS_ROWS"===t.type||"REMOVE_COLUMNS_ROWS"===t.type||"RESIZE_COLUMNS_ROWS"===t.type){this.animations.clear(),this.preventNewAnimationsInNextFrame=!0;break}break;case"PASTE":this.zonesWithPreventedAnimationsInNextFrame.push(...this.getters.getSelectedZones());break;case"UPDATE_CELL":const t=this.getters.getCommandZones(e);this.zonesWithPreventedAnimationsInNextFrame.push(...t)}}get renderingLayers(){return["Background","Headers"]}drawLayer(e,t,o){switch(t){case"Background":this.drawGlobalBackground(e);const t=this.lastRenderBoxes;this.lastRenderBoxes=new Map;for(const{zone:s,rect:i}of this.getters.getAllActiveViewportsZonesAndRect()){const{ctx:n}=e;n.save(),n.beginPath(),n.rect(i.x,i.y,i.width,i.height),n.clip();const r=this.getGridBoxes(s),a=this.getBoxesWithAnimations(r,t,o);this.drawBackground(e,a),this.drawOverflowingCellBackground(e,a),this.drawCellBackground(e,a),this.drawBorders(e,a),this.drawTexts(e,a),this.drawIcon(e,a),n.restore()}this.drawFrozenPanes(e),this.preventNewAnimationsInNextFrame=!1,this.zonesWithPreventedAnimationsInNextFrame=[];break;case"Headers":this.getters.isDashboard()||(this.drawHeaders(e),this.drawFrozenPanesHeaders(e))}}drawGlobalBackground(e){const{ctx:t}=e,{width:o,height:s}=this.getters.getSheetViewDimensionWithHeaders();t.fillStyle="#ffffff",t.fillRect(0,0,o+r,s+r)}drawBackground(e,t){const{ctx:o,thinLineWidth:s}=e,i=!this.getters.isDashboard()&&this.getters.getGridLinesVisibility(this.getters.getActiveSheetId()),n=i?.1*s:0;if(i)for(const e of t)e.skipCellGridLines||(o.strokeStyle="#E2E3E3",o.lineWidth=s,o.strokeRect(e.x+n,e.y+n,e.width-2*n,e.height-2*n))}drawCellBackground(e,t){const{ctx:o}=e;for(const e of t){const t=e.style;if(t.fillColor&&"#ffffff"!==t.fillColor&&(o.fillStyle=t.fillColor||"#ffffff",o.fillRect(e.x,e.y,e.width,e.height)),e.dataBarFill){o.fillStyle=e.dataBarFill.color;const t=e.dataBarFill.percentage,s=e.width*(t/100);o.fillRect(e.x,e.y,s,e.height)}if(e?.chip){o.save(),o.beginPath(),o.rect(e.x,e.y,e.width,e.height),o.clip();const t=e.chip;o.fillStyle=t.color;const s=10;o.beginPath(),o.roundRect(t.x,t.y,t.width,t.height,s),o.fill(),o.restore()}e.overlayColor&&(o.fillStyle=e.overlayColor,o.fillRect(e.x,e.y,e.width,e.height)),e.isError&&(o.fillStyle="red",o.beginPath(),o.moveTo(e.x+e.width-5,e.y),o.lineTo(e.x+e.width,e.y),o.lineTo(e.x+e.width,e.y+5),o.fill())}}drawOverflowingCellBackground(e,t){const{ctx:o,thinLineWidth:s}=e;for(const e of t)if(e.content&&e.isOverflow){const t=e.content.align||"left";let i,n;const r=e.y+s/2,a=e.height-s,l=Math.min(e.clipRect?.width||1/0,e.content.width);"left"===t?(i=e.x+s/2,n=l-2*s):"right"===t?(i=e.x+e.width-s/2,n=2*s-l):(i=(e.clipRect?.x||e.x+e.width/2-e.content.width/2)+s/2,n=l-2*s),o.fillStyle="#ffffff",o.fillRect(i,r,n,a)}}drawBorders(e,t){const{ctx:o}=e;for(const e of t){const t=e.border;if(t){const{x:o,y:i,width:n,height:r}=e;t.left&&s(t.left,o,i,o,i+r),t.top&&s(t.top,o,i,o+n,i),t.right&&s(t.right,o+n,i,o+n,i+r),t.bottom&&s(t.bottom,o,i+r,o+n,i+r)}}function s({color:e,style:t,opacity:s},i,n,r,a){switch(o.globalAlpha=s??1,o.strokeStyle=e,t){case"medium":o.lineWidth=2,n+=(i+=n===a?-.5:.5)===(r+=n===a?1.5:.5)?-.5:.5,a+=i===r?1.5:.5;break;case"thick":o.lineWidth=3,n===a&&(i--,r++),i===r&&(n--,a++);break;case"dashed":o.lineWidth=1,o.setLineDash([1,3]);break;case"dotted":o.lineWidth=1,n===a&&(i+=.5,r+=.5),i===r&&(n+=.5,a+=.5),o.setLineDash([1,1]);break;default:o.lineWidth=1}o.beginPath(),o.moveTo(i,n),o.lineTo(r,a),o.stroke(),o.lineWidth=1,o.setLineDash([]),o.globalAlpha=1}}drawTexts(e,t){const{ctx:o}=e;let s;o.textBaseline="top";for(const e of t)if(e.content){o.globalAlpha=e.textOpacity??1;const t=e.style||{},i=e.content.align||"left",n=ka(t);if(n!==s&&(s=n,o.font=n),o.fillStyle=t.textColor||"#000",o.textAlign=i,e.clipRect){o.save(),o.beginPath();const{x:t,y:s,width:i,height:n}=e.clipRect;o.rect(t,s,i,n),o.clip()}const r=e.content.x;let a=e.content.y;for(const s of e.content.textLines)$a(o,s,{x:r,y:a},t.underline,t.strikethrough),a+=re+e.content.fontSizePx;e.clipRect&&o.restore(),o.globalAlpha=1}}drawIcon(e,t){const{ctx:o}=e;for(const e of t)for(const t of Object.values(e.icons)){if(!t)continue;const s=mt({id:t.type,position:t.position},this.hoveredIcon.hoveredIcon)&&t.hoverSvg||t.svg;if(!s)continue;o.save(),o.globalAlpha=t.opacity??1,o.beginPath();const i=t.clipRect||e;o.rect(i.x,i.y,i.width,i.height),o.clip();const n=t.size,{x:r,y:a}=this.getters.getCellIconRect(t,e);o.translate(r,a),o.scale(n/s.width,n/s.height);for(const e of s.paths)o.fillStyle=e.fillColor,o.fill(ZR(e.path));o.restore()}}drawHeaders(e){const{ctx:t,thinLineWidth:o}=e,s=this.getters.getSheetViewVisibleCols(),i=s[0],n=this.getters.getSheetViewVisibleRows(),r=n[0],{width:a,height:l}=this.getters.getSheetViewDimensionWithHeaders(),g=this.getters.getSelectedZones(),p=function(e){const t=new Set;for(const o of er(e))for(const e of je(o.left,o.right+1))t.add(e);return t}(g),m=function(e){const t=new Set;for(const o of er(e))for(const e of je(o.top,o.bottom+1))t.add(e);return t}(g),f=this.getters.getActiveSheetId(),v=this.getters.getNumberCols(f),b=this.getters.getNumberRows(f),S=this.getters.getActiveCols(),C=this.getters.getActiveRows();t.font=`400 11px ${fe}`,t.textAlign="center",t.textBaseline="middle",t.lineWidth=o,t.strokeStyle="#333";for(const e of s){const o={left:e,right:e,top:0,bottom:b-1},{x:s,width:i}=this.getters.getVisibleRect(o),n=S.has(e),r=p.has(e);t.fillStyle=n?d:r?h:c,t.fillRect(s,0,i,te)}for(const e of n){const o={top:e,bottom:e,left:0,right:v-1},{y:s,height:i}=this.getters.getVisibleRect(o),n=C.has(e),r=m.has(e);t.fillStyle=n?d:r?h:c,t.fillRect(0,s,oe,i)}t.beginPath(),t.moveTo(oe,0),t.lineTo(oe,l),t.moveTo(0,te),t.lineTo(a,te),t.strokeStyle="#C0C0C0",t.stroke();for(const e of s){const o=Co(e);t.fillStyle=S.has(e)?"#fff":u;const s={left:e,right:e,top:r,bottom:r},{x:i,width:n}=this.getters.getRect(s),{x:a,width:l}=this.getters.getVisibleRect(s);t.save(),t.beginPath(),t.rect(a,0,l,te),t.clip(),t.fillText(o,i+n/2,13),t.restore(),t.beginPath(),t.moveTo(i+n,0),t.lineTo(i+n,te),t.stroke()}for(const e of n){t.fillStyle=C.has(e)?"#fff":u;const o={top:e,bottom:e,left:i,right:i},{y:s,height:n}=this.getters.getRect(o),{y:r,height:a}=this.getters.getVisibleRect(o);t.save(),t.beginPath(),t.rect(0,r,oe,a),t.clip(),t.fillText(String(e+1),24,s+n/2),t.restore(),t.beginPath(),t.moveTo(0,s+n),t.lineTo(oe,s+n),t.stroke()}}drawFrozenPanesHeaders(e){const{ctx:t,thinLineWidth:o}=e,{x:s,y:i}=this.getters.getMainViewportCoordinates(),n=this.getters.isDashboard()?0:oe,r=this.getters.isDashboard()?0:te;t.lineWidth=6*o,t.strokeStyle=x,t.beginPath(),s&&(t.moveTo(n+s,0),t.lineTo(n+s,r)),i&&(t.moveTo(0,r+i),t.lineTo(n,r+i)),t.stroke()}drawFrozenPanes(e){const{ctx:t,thinLineWidth:o}=e,{x:s,y:i}=this.getters.getMainViewportCoordinates(),n=this.getters.getSheetViewVisibleCols(),r=n[0],a=n[n.length-1],l=this.getters.getSheetViewVisibleRows(),c={left:r,right:a,top:l[0],bottom:l[l.length-1]},h=this.getters.getVisibleRect(c),d=this.getters.isDashboard()?0:oe,u=this.getters.isDashboard()?0:te;t.lineWidth=6*o,t.strokeStyle="#DADFE8",t.beginPath(),s&&(t.moveTo(d+s,u),t.lineTo(d+s,h.height+u)),i&&(t.moveTo(d,u+i),t.lineTo(h.width+d,u+i)),t.stroke()}findNextEmptyCol(e,t,o){const s=this.getters.getActiveSheetId();let i=e;for(;i<t;){const e={sheetId:s,col:i+1,row:o},t=this.getters.getEvaluatedCell(e),n=this.getters.getCellComputedBorder(e),r=this.getters.doesCellHaveGridIcon(e);if(t.type!==Ts.empty||this.getters.isInMerge(e)||n?.left||r)return i;i++}return i}findPreviousEmptyCol(e,t,o){const s=this.getters.getActiveSheetId();let i=e;for(;i>t;){const e={sheetId:s,col:i-1,row:o},t=this.getters.getEvaluatedCell(e),n=this.getters.getCellComputedBorder(e),r=this.getters.doesCellHaveGridIcon(e);if(t.type!==Ts.empty||this.getters.isInMerge(e)||n?.right||r)return i;i--}return i}computeCellAlignment(e,t){const o=this.getters.getCell(e);if(o?.isFormula&&this.getters.shouldShowFormulas())return"left";const{align:s}=this.getters.getCellStyle(e),i=this.getters.getEvaluatedCell(e);return t&&i.type===Ts.number?"center"!==s?"left":s:s||i.defaultAlign}createZoneBox(e,t,o){const{left:s,right:i}=o,n=t.left,r=t.top,a={sheetId:e,col:n,row:r},l=this.getters.getEvaluatedCell(a),c=this.getters.shouldShowFormulas(),{x:h,y:d,width:u,height:g}=this.getters.getRect(t),p=this.getters.getDataValidationChipStyle(a);let m=this.getters.getCellComputedStyle(a);if(this.fingerprints.isEnabled){const e=this.fingerprints.colors.get(a);m={...m,fillColor:e}}p?.textColor&&(m={...m,textColor:p.textColor});const f=this.fingerprints.isEnabled?void 0:this.getters.getConditionalDataBar(a),v=this.getters.getCellIcons(a),b={left:v.find((e=>"left"===e?.horizontalAlign)),right:v.find((e=>"right"===e?.horizontalAlign)),center:v.find((e=>"center"===e?.horizontalAlign))},S={id:dr(t),x:h,y:d,width:u,height:g,border:this.getters.getCellComputedBorder(a)||void 0,style:m,dataBarFill:f,overlayColor:this.hoveredTables.overlayColors.get(a),isError:l.type===Ts.error&&!!l.message||this.getters.isDataValidationInvalid(a),icons:b,disabledAnimation:this.zonesWithPreventedAnimationsInNextFrame.some((e=>yr(t,e)||Sr(t,e)))},C=Va(S.style);if(l.type===Ts.empty||S.icons.center)return S;const y=m.wrapping||"overflow",w="wrap"===y&&!c,I=u-2*re,x=this.getters.getCellMultiLineText(a,{maxWidth:I,wrapText:w}),E=Math.max(...x.map((e=>this.getters.getTextWidth(e,m)+re))),R=p?5:0,T=(S.icons.left?S.icons.left.size+S.icons.left.margin:0)+R,A=(S.icons.right?S.icons.right.size+S.icons.right.margin:0)+R,D=T+E+A,_=this.computeCellAlignment(a,D>u),O=x.length,F=Math.round(this.getters.computeTextYCoordinate(S,C,m.verticalAlign,O));let P=S.x;P+="left"===_?re+T:"right"===_?S.width-re-A:S.width/2,P=Math.round(P);const M=Ta(C,O);if(S.content={textLines:x,width:"overflow"===y?E:u,align:_,x:P,y:F,fontSizePx:C},p?.fillColor){const e=T,t=5;S.chip={color:p.fillColor,width:S.width-e-t,height:M+2,x:S.x+e,y:F-2}}const N=D>u||C>g;if(S.icons.left||S.icons.right||S.chip)S.clipRect={x:S.x+T,y:S.y,width:Math.max(0,u-T-A),height:g};else if(N&&"overflow"===y){let e,o;switch(this.getters.isInMerge(a)?(e=this.getters.getMerge(a).right,o=n):(e=S.border?.right?t.right:this.findNextEmptyCol(n,i,r),o=S.border?.left?t.left:this.findPreviousEmptyCol(n,s,r),S.isOverflow=!0),_){case"left":{const o=Dr({col:e,row:r}),{x:s,y:i,width:n,height:a}=this.getters.getVisibleRect(fr(t,o));(n<D||C>a||x.length>1)&&(S.clipRect={x:s,y:i,width:n,height:a});break}case"right":{const e=Dr({col:o,row:r}),{x:s,y:i,width:n,height:a}=this.getters.getVisibleRect(fr(t,e));(n<D||C>a||x.length>1)&&(S.clipRect={x:s,y:i,width:n,height:a});break}case"center":{const s={...t,left:o,right:e},{x:i,y:n,height:r,width:a}=this.getters.getVisibleRect(s),l=D/2,c=S.x+S.width/2;if(i+a<c+l||i>c-l||C>r||x.length>1){const e=i>c-l?i:c-l,t=i+a-e;S.clipRect={x:e,y:n,width:t,height:r}}break}}}else("clip"===y||"wrap"===y||x.length>1)&&(S.clipRect={x:S.x,y:S.y,width:u,height:g});return S}getGridBoxes(e){const t=[],o=this.getters.getSheetViewVisibleCols().filter((t=>t>=e.left&&t<=e.right)),s=o[0],i=o[o.length-1],n=this.getters.getSheetViewVisibleRows().filter((t=>t>=e.top&&t<=e.bottom)),r={left:s,right:i,top:n[0],bottom:n[n.length-1]},a=this.getters.getActiveSheetId();for(const e of n)for(const s of o){const o={sheetId:a,col:s,row:e};this.getters.isInMerge(o)||t.push(this.createZoneBox(a,Dr(o),r))}for(const e of this.getters.getMerges(a))if(!this.getters.isMergeHidden(a,e)&&Sr(e,r)){const o=this.createZoneBox(a,e,r),s=this.getters.getCellComputedBorder({sheetId:a,col:e.right,row:e.bottom});o.border={...o.border,bottom:s?s.bottom:void 0,right:s?s.right:void 0},o.isMerge=!0,t.push(o)}return t}getBoxesWithAnimations(e,t,o){return this.updateAnimationsProgress(o),this.addNewAnimations(e,t,o),this.animations.size>0?(this.renderer.startAnimation("grid_renderer_animation"),this.updateBoxesWithAnimations(e)):(this.renderer.stopAnimation("grid_renderer_animation"),e)}updateBoxesWithAnimations(e){const t=[];for(const o of e){const e=this.animations.get(o.id);if(!e){t.push(o);continue}const s=ze(o);t.push(s);for(const i of e.animationTypes){const n=CI.get(i).updateAnimation(e.progress,s,e.oldBox,o);n&&t.push(...n.newBoxes)}}return t}updateAnimationsProgress(e){if(void 0!==e)for(const t of this.animations.keys()){const o=this.animations.get(t);if(void 0===o.startTime){o.startTime=e;continue}const s=e-o.startTime,i=Math.min(1,s/200);i>=1&&this.animations.delete(t),o.progress=i}}addNewAnimations(e,t,o){for(const s of e){this.lastRenderBoxes.set(s.id,s);const e=t.get(s.id);if(this.preventNewAnimationsInNextFrame||!e||s.disabledAnimation)continue;const i=[];for(const t of CI.getAll())t.hasAnimation(e,s)&&i.push(t.id);const n=i.length>0?{animationTypes:i,oldBox:e,progress:0,startTime:o}:void 0;n&&this.animations.set(s.id,n)}}}function GP(e,o,s){const i=t.useRef(e);t.useEffect((function(){const e=i.el,t=window.devicePixelRatio||1,o=e.getContext("2d",{alpha:!1}),r={ctx:o,dpr:t,thinLineWidth:.4*t},{width:a,height:l}=s();if(e.style.width=`${a}px`,e.style.height=`${l}px`,e.width=a*t,e.height=l*t,e.setAttribute("style",`width:${a}px;height:${l}px;`),0===a||0===l)return;o.translate(-.5,-.5),o.scale(t,t),n.draw(r)}));const n=oh(ch);oh($P)}function WP(e,t,o){let s=0,i=0,n=0,r=0,a=!1,l=0,c=null;function h(){if(Math.abs(n)<.05&&(n=0),Math.abs(r)<.05&&(r=0),!n&&!r)return;const e=Date.now(),o=Math.abs(e-l);t(1*(n*o),1*(r*o)),l=e,n*=.95,r*=.95,requestAnimationFrame(h)}DP(e,"touchstart",(function(e){a=!0,({clientX:s,clientY:i}=e.touches[0]),n=0,r=0}),{capture:!1}),DP(e,"touchmove",(function(e){if(!a)return;c&&(clearTimeout(c),c=null);const h=Date.now(),{clientX:d,clientY:u}=e.touches[0],g=s-d,p=i-u,m=h-l;if(!m)return;n=g/m,r=p/m,s=d,i=u,l=h,o()&&(e.cancelable&&e.preventDefault(),e.stopPropagation());c=setTimeout((()=>{n=0,r=0}),100),t(1*g,1*p)}),{capture:!1}),DP(e,"touchend",(function(e){a=!1,s=i=0,c&&clearTimeout(c);n*=1.2,r*=1.2,requestAnimationFrame(h)}),{capture:!1})}function qP(e){function t(e,t){return e*(0===t?1:ie)}return o=>{const s=t(o.shiftKey&&!my()?o.deltaY:o.deltaX,o.deltaMode),i=t(o.shiftKey&&!my()?o.deltaX:o.deltaY,o.deltaMode);e(s,i)}}mh`
1016
1016
  .o-border {
1017
1017
  position: absolute;
1018
1018
  &:hover {
@@ -1517,7 +1517,7 @@
1517
1517
  color: #6aa84f;
1518
1518
  }
1519
1519
  }
1520
- `;class JM extends t.Component{static template="o-spreadsheet-ConditionalFormattingEditor";static props={editedCf:Object,onCancel:Function,onSave:Function};static components={SelectionInput:$E,IconPicker:ZM,ColorPickerWidget:aM,ConditionalFormatPreviewList:KM,Section:ME,RoundColorPicker:NE,StandaloneComposer:xE,BadgeSelection:nM,ValidationMessages:TP,SelectMenu:ZE};icons=GR;iconSets=WR;getTextDecoration=fh;colorNumberString=Bt;state;setup(){switch(this.state=t.useState({errors:[],currentCFType:this.props.editedCf.rule.type,ranges:this.props.editedCf.ranges,rules:this.getDefaultRules()}),this.props.editedCf.rule.type){case"CellIsRule":this.state.rules.cellIs=this.props.editedCf.rule;break;case"ColorScaleRule":this.state.rules.colorScale=this.props.editedCf.rule;break;case"IconSetRule":this.state.rules.iconSet=this.props.editedCf.rule;break;case"DataBarRule":this.state.rules.dataBar=this.props.editedCf.rule}t.useExternalListener(window,"click",this.closeMenus)}get isRangeValid(){return this.state.errors.includes("EmptyRange")}get errorMessages(){return this.state.errors.map((e=>zy.Errors[e]||zy.Errors.Unexpected))}get cfTypesValues(){return[{value:"CellIsRule",label:Vo("Single color")},{value:"ColorScaleRule",label:Vo("Color scale")},{value:"IconSetRule",label:Vo("Icon set")},{value:"DataBarRule",label:Vo("Data bar")}]}updateConditionalFormat(e){const t=e.ranges||this.state.ranges;if(this.state.ranges.some((e=>!e.match(Xr))))return e.suppressErrors||(this.state.errors=["InvalidRange"]),["InvalidRange"];const o=this.env.model.getters.getActiveSheetId(),s=this.env.model.getters.getLocale(),i=e.rule||this.getEditedRule(this.state.currentCFType),n=this.env.model.dispatch("ADD_CONDITIONAL_FORMAT",{cf:{rule:Al(i,s),id:this.props.editedCf.id},ranges:t.map((e=>this.env.model.getters.getRangeDataFromXc(o,e))),sheetId:o}).reasons.filter((e=>"NoChanges"!==e));return e.suppressErrors||(this.state.errors=n),n}getEditedRule(e){switch(e){case"CellIsRule":return this.state.rules.cellIs;case"ColorScaleRule":return this.state.rules.colorScale;case"IconSetRule":return this.state.rules.iconSet;case"DataBarRule":return this.state.rules.dataBar}}onSave(){0===this.updateConditionalFormat({}).length&&this.props.onSave()}getDefaultRules(){return{cellIs:{type:"CellIsRule",operator:"isNotEmpty",values:[],style:{fillColor:"#b6d7a8"}},colorScale:{type:"ColorScaleRule",minimum:{type:"value",color:IT("EFF7FF")},midpoint:void 0,maximum:{type:"value",color:6989903}},iconSet:{type:"IconSetRule",icons:{upper:"arrowGood",middle:"arrowNeutral",lower:"arrowBad"},upperInflectionPoint:{type:"percentage",value:"66",operator:"gt"},lowerInflectionPoint:{type:"percentage",value:"33",operator:"gt"}},dataBar:{type:"DataBarRule",color:14281427}}}changeRuleType(e){this.state.currentCFType!==e&&(this.state.errors=[],this.state.currentCFType=e,this.updateConditionalFormat({rule:this.getEditedRule(e),suppressErrors:!0}))}onRangeUpdate(e){this.state.ranges=e}onRangeConfirmed(){this.updateConditionalFormat({ranges:this.state.ranges})}toggleMenu(e){const t=this.state.openedMenu===e;this.closeMenus(),t||(this.state.openedMenu=e)}closeMenus(){this.state.openedMenu=void 0}get isValue1Invalid(){return this.state.errors.includes("FirstArgMissing")||this.state.errors.includes("ValueCellIsInvalidFormula")}get isValue2Invalid(){return this.state.errors.includes("SecondArgMissing")}toggleStyle(e){const t=this.state.rules.cellIs.style;t[e]=!t[e],this.updateConditionalFormat({rule:this.state.rules.cellIs}),this.closeMenus()}onKeydown(e){if("F4"===e.key){const t=e.target,o=mv({start:t.selectionStart??0,end:t.selectionEnd??0},t.value,this.env.model.getters.getLocale());if(!o)return;t.value=o.content,t.setSelectionRange(o.selection.start,o.selection.end),t.dispatchEvent(new Event("input"))}}setColor(e,t){this.state.rules.cellIs.style[e]=t,this.updateConditionalFormat({rule:this.state.rules.cellIs}),this.closeMenus()}editOperator(e){this.state.rules.cellIs.operator=e,this.updateConditionalFormat({rule:this.state.rules.cellIs,suppressErrors:!0}),this.closeMenus()}get cfCriterionMenuItems(){return qE((e=>this.editOperator(e)),Us)}get selectedCriterionName(){return Zx.get(this.state.rules.cellIs.operator).name}get criterionComponent(){return WE.get(this.state.rules.cellIs.operator).component}get genericCriterion(){return{type:this.state.rules.cellIs.operator,values:this.state.rules.cellIs.values}}onRuleValuesChanged(e){this.state.rules.cellIs.values=e.values,this.updateConditionalFormat({rule:{...this.state.rules.cellIs,values:e.values}})}isValueInvalid(e){switch(e){case"minimum":return this.state.errors.includes("MinInvalidFormula")||this.state.errors.includes("MinBiggerThanMid")||this.state.errors.includes("MinBiggerThanMax")||this.state.errors.includes("MinNaN");case"midpoint":return this.state.errors.includes("MidInvalidFormula")||this.state.errors.includes("MidNaN")||this.state.errors.includes("MidBiggerThanMax");case"maximum":return this.state.errors.includes("MaxInvalidFormula")||this.state.errors.includes("MaxNaN");default:return!1}}setColorScaleColor(e,t){if(!Gt(t))return;const o=this.state.rules.colorScale[e];o&&(o.color=zt(t)),this.updateConditionalFormat({rule:this.state.rules.colorScale}),this.closeMenus()}getPreviewGradient(){const e=this.state.rules.colorScale,t=Bt(e.minimum.color),o=Bt(e.midpoint?.color||v),s=Bt(e.maximum.color),i="background-image: linear-gradient(to right, ";return void 0===e.midpoint?i+t+", "+s+")":i+t+", "+o+", "+s+")"}getThresholdColor(e){return Bt(e?e.color:v)}onMidpointChange(e){const t=e.target.value,o=this.state.rules.colorScale;o.midpoint="none"===t?void 0:{color:v,value:"",...o.midpoint,type:t},this.updateConditionalFormat({rule:o,suppressErrors:!0})}updateThresholdType(e,t){this.state.rules.colorScale[e].type=t,this.updateConditionalFormat({rule:this.state.rules.colorScale,suppressErrors:!0})}updateThresholdValue(e,t){this.state.rules.colorScale[e].value=t,this.updateConditionalFormat({rule:this.state.rules.colorScale})}isInflectionPointInvalid(e){switch(e){case"lowerInflectionPoint":return this.state.errors.includes("ValueLowerInflectionNaN")||this.state.errors.includes("ValueLowerInvalidFormula")||this.state.errors.includes("LowerBiggerThanUpper");case"upperInflectionPoint":return this.state.errors.includes("ValueUpperInflectionNaN")||this.state.errors.includes("ValueUpperInvalidFormula")||this.state.errors.includes("LowerBiggerThanUpper");default:return!0}}reverseIcons(){const e=this.state.rules.iconSet.icons,t=e.upper;e.upper=e.lower,e.lower=t,this.updateConditionalFormat({rule:this.state.rules.iconSet})}setIconSet(e){const t=this.state.rules.iconSet.icons;t.upper=this.iconSets[e].good,t.middle=this.iconSets[e].neutral,t.lower=this.iconSets[e].bad,this.updateConditionalFormat({rule:this.state.rules.iconSet})}setIcon(e,t){this.state.rules.iconSet.icons[e]=t,this.updateConditionalFormat({rule:this.state.rules.iconSet})}setInflectionOperator(e,t){this.state.rules.iconSet[e].operator=t,this.updateConditionalFormat({rule:this.state.rules.iconSet})}setInflectionValue(e,t){this.state.rules.iconSet[e].value=t,this.updateConditionalFormat({rule:this.state.rules.iconSet})}setInflectionType(e,t,o){this.state.rules.iconSet[e].type=t,this.updateConditionalFormat({rule:this.state.rules.iconSet,suppressErrors:!0})}getColorScaleComposerProps(e){const t=this.state.rules.colorScale[e];if(!t)throw new Error("Threshold not found");const o=this.isValueInvalid(e);return{onConfirm:e=>{t.value=e,this.updateConditionalFormat({rule:this.state.rules.colorScale})},composerContent:t.value||"",placeholder:Vo("Formula"),defaultStatic:!0,invalid:o,class:"o-sidePanel-composer",defaultRangeSheetId:this.env.model.getters.getActiveSheetId()}}getColorIconSetComposerProps(e){const t=this.state.rules.iconSet[e],o=this.isInflectionPointInvalid(e);return{onConfirm:e=>{t.value=e,this.updateConditionalFormat({rule:this.state.rules.iconSet})},composerContent:t.value||"",placeholder:Vo("Formula"),defaultStatic:!0,invalid:o,class:"o-sidePanel-composer",defaultRangeSheetId:this.env.model.getters.getActiveSheetId()}}getRangeValues(){return[this.state.rules.dataBar.rangeValues||""]}updateDataBarColor(e){Gt(e)&&(this.state.rules.dataBar.color=Number.parseInt(e.slice(1),16),this.updateConditionalFormat({rule:this.state.rules.dataBar}))}onDataBarRangeUpdate(e){this.state.rules.dataBar.rangeValues=e[0]}onDataBarRangeChange(){this.updateConditionalFormat({rule:this.state.rules.dataBar})}}class QM extends t.Component{static template="o-spreadsheet-ConditionalFormattingPanel";static props={selection:{type:Object,optional:!0},onCloseSidePanel:Function};static components={ConditionalFormatPreviewList:KM,ConditionalFormattingEditor:JM,Section:ME};activeSheetId;originalEditedCf=void 0;state=t.useState({mode:"list"});setup(){this.activeSheetId=this.env.model.getters.getActiveSheetId();const e=this.env.model.getters.getActiveSheetId(),o=this.env.model.getters.getRulesSelection(e,this.props.selection||[]);if(1===o.length){const e=this.conditionalFormats.find((e=>e.id===o[0]));e&&this.editConditionalFormat(e)}t.onWillUpdateProps((e=>{const t=this.env.model.getters.getActiveSheetId();if(t!==this.activeSheetId)this.activeSheetId=t,this.switchToList();else if(e.selection!==this.props.selection){const t=this.env.model.getters.getActiveSheetId(),o=this.env.model.getters.getRulesSelection(t,e.selection||[]);if(1===o.length){const e=this.conditionalFormats.find((e=>e.id===o[0]));e&&this.editConditionalFormat(e)}else this.switchToList()}}))}get conditionalFormats(){return this.env.model.getters.getConditionalFormats(this.env.model.getters.getActiveSheetId()).map((e=>({...e,rule:Dl(e.rule,this.env.model.getters.getLocale())})))}switchToList(){this.state.mode="list",this.state.editedCfId=void 0,this.originalEditedCf=void 0}addConditionalFormat(){const e=this.env.model.uuidGenerator.smallUuid();this.env.model.dispatch("ADD_CONDITIONAL_FORMAT",{sheetId:this.activeSheetId,ranges:this.env.model.getters.getSelectedZones().map((e=>this.env.model.getters.getRangeDataFromZone(this.activeSheetId,e))),cf:{id:e,rule:{type:"CellIsRule",operator:"isNotEmpty",style:{fillColor:"#b6d7a8"},values:[]}}}),this.state.editedCfId=e,this.state.mode="edit",this.originalEditedCf=void 0}editConditionalFormat(e){this.state.mode="edit",this.state.editedCfId=e.id,this.originalEditedCf=e}cancelEdition(){this.originalEditedCf?this.env.model.dispatch("ADD_CONDITIONAL_FORMAT",{sheetId:this.activeSheetId,ranges:this.originalEditedCf.ranges.map((e=>this.env.model.getters.getRangeDataFromXc(this.activeSheetId,e))),cf:this.originalEditedCf}):this.state.editedCfId&&this.env.model.dispatch("REMOVE_CONDITIONAL_FORMAT",{sheetId:this.activeSheetId,id:this.state.editedCfId}),this.switchToList()}get editedCF(){return this.conditionalFormats.find((e=>e.id===this.state.editedCfId))}}const eN=new n;mh`
1520
+ `;class JM extends t.Component{static template="o-spreadsheet-ConditionalFormattingEditor";static props={editedCf:Object,onCancel:Function,onSave:Function};static components={SelectionInput:$E,IconPicker:ZM,ColorPickerWidget:aM,ConditionalFormatPreviewList:KM,Section:ME,RoundColorPicker:NE,StandaloneComposer:xE,BadgeSelection:nM,ValidationMessages:TP,SelectMenu:ZE};icons=GR;iconSets=WR;getTextDecoration=fh;colorNumberString=Bt;state;setup(){switch(this.state=t.useState({errors:[],currentCFType:this.props.editedCf.rule.type,ranges:this.props.editedCf.ranges,rules:this.getDefaultRules()}),this.props.editedCf.rule.type){case"CellIsRule":this.state.rules.cellIs=this.props.editedCf.rule;break;case"ColorScaleRule":this.state.rules.colorScale=this.props.editedCf.rule;break;case"IconSetRule":this.state.rules.iconSet=this.props.editedCf.rule;break;case"DataBarRule":this.state.rules.dataBar=this.props.editedCf.rule}t.useExternalListener(window,"click",this.closeMenus)}get isRangeValid(){return this.state.errors.includes("EmptyRange")}get errorMessages(){return this.state.errors.map((e=>zy.Errors[e]||zy.Errors.Unexpected))}get cfTypesValues(){return[{value:"CellIsRule",label:Vo("Single color")},{value:"ColorScaleRule",label:Vo("Color scale")},{value:"IconSetRule",label:Vo("Icon set")},{value:"DataBarRule",label:Vo("Data bar")}]}updateConditionalFormat(e){const t=e.ranges||this.state.ranges;if(this.state.ranges.some((e=>!e.match(Xr))))return e.suppressErrors||(this.state.errors=["InvalidRange"]),["InvalidRange"];const o=this.env.model.getters.getActiveSheetId(),s=this.env.model.getters.getLocale(),i=e.rule||this.getEditedRule(this.state.currentCFType),n=this.env.model.dispatch("ADD_CONDITIONAL_FORMAT",{cf:{rule:Al(i,s),id:this.props.editedCf.id},ranges:t.map((e=>this.env.model.getters.getRangeDataFromXc(o,e))),sheetId:o}).reasons.filter((e=>"NoChanges"!==e));return e.suppressErrors||(this.state.errors=n),n}getEditedRule(e){switch(e){case"CellIsRule":return this.state.rules.cellIs;case"ColorScaleRule":return this.state.rules.colorScale;case"IconSetRule":return this.state.rules.iconSet;case"DataBarRule":return this.state.rules.dataBar}}onSave(){0===this.updateConditionalFormat({}).length&&this.props.onSave()}getDefaultRules(){return{cellIs:{type:"CellIsRule",operator:"isNotEmpty",values:[],style:{fillColor:"#b6d7a8"}},colorScale:{type:"ColorScaleRule",minimum:{type:"value",color:IT("EFF7FF")},midpoint:void 0,maximum:{type:"value",color:6989903}},iconSet:{type:"IconSetRule",icons:{upper:"arrowGood",middle:"arrowNeutral",lower:"arrowBad"},upperInflectionPoint:{type:"percentage",value:"66",operator:"gt"},lowerInflectionPoint:{type:"percentage",value:"33",operator:"gt"}},dataBar:{type:"DataBarRule",color:14281427}}}changeRuleType(e){this.state.currentCFType!==e&&(this.state.errors=[],this.state.currentCFType=e,this.updateConditionalFormat({rule:this.getEditedRule(e),suppressErrors:!0}))}onRangeUpdate(e){this.state.ranges=e}onRangeConfirmed(){this.updateConditionalFormat({ranges:this.state.ranges})}toggleMenu(e){const t=this.state.openedMenu===e;this.closeMenus(),t||(this.state.openedMenu=e)}closeMenus(){this.state.openedMenu=void 0}get isValue1Invalid(){return this.state.errors.includes("FirstArgMissing")||this.state.errors.includes("ValueCellIsInvalidFormula")}get isValue2Invalid(){return this.state.errors.includes("SecondArgMissing")}toggleStyle(e){const t=this.state.rules.cellIs.style;t[e]=!t[e],this.updateConditionalFormat({rule:this.state.rules.cellIs}),this.closeMenus()}onKeydown(e){if("F4"===e.key){const t=e.target,o=mv({start:t.selectionStart??0,end:t.selectionEnd??0},t.value,this.env.model.getters.getLocale());if(!o)return;t.value=o.content,t.setSelectionRange(o.selection.start,o.selection.end),t.dispatchEvent(new Event("input"))}}setColor(e,t){this.state.rules.cellIs.style[e]=t,this.updateConditionalFormat({rule:this.state.rules.cellIs}),this.closeMenus()}editOperator(e){this.state.rules.cellIs.operator=e,this.updateConditionalFormat({rule:this.state.rules.cellIs,suppressErrors:!0}),this.closeMenus()}get cfCriterionMenuItems(){return qE((e=>this.editOperator(e)),Us)}get selectedCriterionName(){return Zx.get(this.state.rules.cellIs.operator).name}get criterionComponent(){return WE.get(this.state.rules.cellIs.operator).component}get genericCriterion(){return{type:this.state.rules.cellIs.operator,values:this.state.rules.cellIs.values}}onRuleValuesChanged(e){this.state.rules.cellIs.values=e.values,this.updateConditionalFormat({rule:{...this.state.rules.cellIs,values:e.values}})}isValueInvalid(e){switch(e){case"minimum":return this.state.errors.includes("MinInvalidFormula")||this.state.errors.includes("MinBiggerThanMid")||this.state.errors.includes("MinBiggerThanMax")||this.state.errors.includes("MinNaN");case"midpoint":return this.state.errors.includes("MidInvalidFormula")||this.state.errors.includes("MidNaN")||this.state.errors.includes("MidBiggerThanMax");case"maximum":return this.state.errors.includes("MaxInvalidFormula")||this.state.errors.includes("MaxNaN");default:return!1}}setColorScaleColor(e,t){if(!Gt(t))return;const o=this.state.rules.colorScale[e];o&&(o.color=zt(t)),this.updateConditionalFormat({rule:this.state.rules.colorScale}),this.closeMenus()}getPreviewGradient(){const e=this.state.rules.colorScale,t=Bt(e.minimum.color),o=Bt(e.midpoint?.color||v),s=Bt(e.maximum.color),i="background-image: linear-gradient(to right, ";return void 0===e.midpoint?i+t+", "+s+")":i+t+", "+o+", "+s+")"}getThresholdColor(e){return Bt(e?e.color:v)}onMidpointChange(e){const t=e.target.value,o=this.state.rules.colorScale;o.midpoint="none"===t?void 0:{color:v,value:"",...o.midpoint,type:t},this.updateConditionalFormat({rule:o,suppressErrors:!0})}updateThresholdType(e,t){this.state.rules.colorScale[e].type=t,this.updateConditionalFormat({rule:this.state.rules.colorScale,suppressErrors:!0})}updateThresholdValue(e,t){this.state.rules.colorScale[e].value=t,this.updateConditionalFormat({rule:this.state.rules.colorScale})}isInflectionPointInvalid(e){switch(e){case"lowerInflectionPoint":return this.state.errors.includes("ValueLowerInflectionNaN")||this.state.errors.includes("ValueLowerInvalidFormula")||this.state.errors.includes("LowerBiggerThanUpper");case"upperInflectionPoint":return this.state.errors.includes("ValueUpperInflectionNaN")||this.state.errors.includes("ValueUpperInvalidFormula")||this.state.errors.includes("LowerBiggerThanUpper");default:return!0}}reverseIcons(){const e=this.state.rules.iconSet.icons,t=e.upper;e.upper=e.lower,e.lower=t,this.updateConditionalFormat({rule:this.state.rules.iconSet})}setIconSet(e){const t=this.state.rules.iconSet.icons;t.upper=this.iconSets[e].good,t.middle=this.iconSets[e].neutral,t.lower=this.iconSets[e].bad,this.updateConditionalFormat({rule:this.state.rules.iconSet})}setIcon(e,t){this.state.rules.iconSet.icons[e]=t,this.updateConditionalFormat({rule:this.state.rules.iconSet})}setInflectionOperator(e,t){this.state.rules.iconSet[e].operator=t,this.updateConditionalFormat({rule:this.state.rules.iconSet})}setInflectionValue(e,t){this.state.rules.iconSet[e].value=t,this.updateConditionalFormat({rule:this.state.rules.iconSet})}setInflectionType(e,t,o){this.state.rules.iconSet[e].type=t,this.updateConditionalFormat({rule:this.state.rules.iconSet,suppressErrors:!0})}getColorScaleComposerProps(e){const t=this.state.rules.colorScale[e];if(!t)throw new Error("Threshold not found");const o=this.isValueInvalid(e);return{onConfirm:e=>{t.value=e,this.updateConditionalFormat({rule:this.state.rules.colorScale})},composerContent:t.value||"",placeholder:Vo("Formula"),defaultStatic:!0,invalid:o,class:"o-sidePanel-composer",defaultRangeSheetId:this.env.model.getters.getActiveSheetId()}}getColorIconSetComposerProps(e){const t=this.state.rules.iconSet[e],o=this.isInflectionPointInvalid(e);return{onConfirm:e=>{t.value=e,this.updateConditionalFormat({rule:this.state.rules.iconSet})},composerContent:t.value||"",placeholder:Vo("Formula"),defaultStatic:!0,invalid:o,class:"o-sidePanel-composer",defaultRangeSheetId:this.env.model.getters.getActiveSheetId()}}getRangeValues(){return[this.state.rules.dataBar.rangeValues||""]}updateDataBarColor(e){Gt(e)&&(this.state.rules.dataBar.color=Number.parseInt(e.slice(1),16),this.updateConditionalFormat({rule:this.state.rules.dataBar}))}onDataBarRangeUpdate(e){this.state.rules.dataBar.rangeValues=e[0]}onDataBarRangeChange(){this.updateConditionalFormat({rule:this.state.rules.dataBar})}}class QM extends t.Component{static template="o-spreadsheet-ConditionalFormattingPanel";static props={selection:{type:Object,optional:!0},onCloseSidePanel:Function};static components={ConditionalFormatPreviewList:KM,ConditionalFormattingEditor:JM,Section:ME};activeSheetId;originalEditedCf=void 0;state=t.useState({mode:"list"});setup(){this.activeSheetId=this.env.model.getters.getActiveSheetId();const e=this.env.model.getters.getActiveSheetId(),o=this.env.model.getters.getRulesSelection(e,this.props.selection||[]);if(1===o.length){const e=this.conditionalFormats.find((e=>e.id===o[0]));e&&this.editConditionalFormat(e)}t.onWillUpdateProps((e=>{const t=this.env.model.getters.getActiveSheetId();if(t!==this.activeSheetId)this.activeSheetId=t,this.switchToList();else if(e.selection!==this.props.selection){const t=this.env.model.getters.getActiveSheetId(),o=this.env.model.getters.getRulesSelection(t,e.selection||[]);if(1===o.length){const e=this.conditionalFormats.find((e=>e.id===o[0]));e&&this.editConditionalFormat(e)}else this.switchToList()}else this.editedCF||this.switchToList()}))}get conditionalFormats(){return this.env.model.getters.getConditionalFormats(this.env.model.getters.getActiveSheetId()).map((e=>({...e,rule:Dl(e.rule,this.env.model.getters.getLocale())})))}switchToList(){this.state.mode="list",this.state.editedCfId=void 0,this.originalEditedCf=void 0}addConditionalFormat(){const e=this.env.model.uuidGenerator.smallUuid();this.env.model.dispatch("ADD_CONDITIONAL_FORMAT",{sheetId:this.activeSheetId,ranges:this.env.model.getters.getSelectedZones().map((e=>this.env.model.getters.getRangeDataFromZone(this.activeSheetId,e))),cf:{id:e,rule:{type:"CellIsRule",operator:"isNotEmpty",style:{fillColor:"#b6d7a8"},values:[]}}}),this.state.editedCfId=e,this.state.mode="edit",this.originalEditedCf=void 0}editConditionalFormat(e){this.state.mode="edit",this.state.editedCfId=e.id,this.originalEditedCf=e}cancelEdition(){this.originalEditedCf?this.env.model.dispatch("ADD_CONDITIONAL_FORMAT",{sheetId:this.activeSheetId,ranges:this.originalEditedCf.ranges.map((e=>this.env.model.getters.getRangeDataFromXc(this.activeSheetId,e))),cf:this.originalEditedCf}):this.state.editedCfId&&this.env.model.dispatch("REMOVE_CONDITIONAL_FORMAT",{sheetId:this.activeSheetId,id:this.state.editedCfId}),this.switchToList()}get editedCF(){return this.conditionalFormats.find((e=>e.id===this.state.editedCfId))}}const eN=new n;mh`
1521
1521
  .o-custom-currency {
1522
1522
  .o-format-proposals {
1523
1523
  color: black;
@@ -1871,11 +1871,11 @@
1871
1871
  background: #e7f2f6;
1872
1872
  }
1873
1873
  }
1874
- `;class xk extends t.Component{static template="o_spreadsheet.PivotHTMLRenderer";static components={Checkbox:YE};static props={pivotId:String,onCellClicked:Function};pivot=this.env.model.getters.getPivot(this.props.pivotId);data={columns:[],rows:[],values:[]};state=t.useState({showMissingValuesOnly:!1});setup(){const e=this.pivot.getExpandedTableStructure(),t=this.env.model.getters.getPivotFormulaId(this.props.pivotId);this.data={columns:this._buildColHeaders(t,e),rows:this._buildRowHeaders(t,e),values:this._buildValues(t,e)}}get tracker(){return this.env.model.getters.getPivotPresenceTracker(this.props.pivotId)}getTableData(){if(!this.state.showMissingValuesOnly)return this.data;const e=this.getColumnsIndexes(),t=this.getRowsIndexes();return{columns:this.buildColumnsMissing(e),rows:this.buildRowsMissing(t),values:this.buildValuesMissing(e,t)}}addRecursiveRow(e){const t=this.pivot.getExpandedTableStructure().rows,o=[...t[e].values];if(o.length<=1)return[e];o.pop();const s=t.findIndex((e=>JSON.stringify(e.values)===JSON.stringify(o)));return[e].concat(this.addRecursiveRow(s))}buildColumnsMissing(e){const t=[];for(const e of this.data.columns){const o=[];for(const t in e)for(let s=0;s<e[t].span;s++)o.push(parseInt(t,10));t.push(o)}for(let o=t[t.length-1].length;o>=0;o--)if(!e.includes(o))for(const e of t)e.splice(o,1);const o=[];for(const e in t){const s=[];let i,n=1;for(let o=0;o<t[e].length;o++)i!==t[e][o]?(void 0!==i&&s.push(Object.assign({},this.data.columns[e][i],{span:n})),i=t[e][o],n=1):n++;void 0!==i&&s.push(Object.assign({},this.data.columns[e][i],{span:n})),o.push(s)}return o}buildRowsMissing(e){return e.map((e=>this.data.rows[e]))}buildValuesMissing(e,t){const o=e.map((()=>[]));for(const s of t)for(const t in e)o[t].push(this.data.values[e[t]][s]);return o}getColumnsIndexes(){const e=new Set;for(let t=0;t<this.data.columns.length;t++){const o=[];for(let e=0;e<this.data.columns[t].length;e++)for(let s=0;s<this.data.columns[t][e].span;s++)o.push(this.data.columns[t][e]);for(let t=0;t<o.length;t++)o[t].isMissing&&e.add(t)}for(let t=0;t<this.data.columns[this.data.columns.length-1].length;t++){this.data.values[t].find((e=>e.isMissing))&&e.add(t)}return Array.from(e).sort(((e,t)=>e-t))}getRowsIndexes(){const e=new Set;for(let t=0;t<this.data.rows.length;t++){this.data.rows[t].isMissing&&e.add(t);for(const o of this.data.values)o[t].isMissing&&this.addRecursiveRow(t).forEach((t=>e.add(t)))}return Array.from(e).sort(((e,t)=>e-t))}_buildColHeaders(e,t){const o=[];for(const s of t.columns){const t=[];for(const o of s){const s=[];for(let e=0;e<o.fields.length;e++)s.push({value:o.fields[e]},{value:o.values[e]});const i=this.pivot.parseArgsToPivotDomain(s),n=this.env.model.getters.getLocale();if("measure"===i.at(-1)?.field){const{value:s,format:r}=this.pivot.getPivotMeasureValue(Si(i.at(-1).value),i);t.push({formula:`=PIVOT.HEADER(${Nc(e,i).join(",")})`,value:bn(s,{format:r,locale:n}),span:o.width,isMissing:!this.tracker?.isHeaderPresent(i)})}else{const{value:s,format:r}=this.pivot.getPivotHeaderValueAndFormat(i);t.push({formula:`=PIVOT.HEADER(${Nc(e,i).join(",")})`,value:bn(s,{format:r,locale:n}),span:o.width,isMissing:!this.tracker?.isHeaderPresent(i)})}}o.push(t)}const s=o[o.length-1];return o[o.length-1]=s.map((e=>(e.isMissing||(e.style="color: #756f6f;"),e))),o}_buildRowHeaders(e,t){const o=[];for(const s of t.rows){const t=[];for(let e=0;e<s.fields.length;e++)t.push({value:s.fields[e]},{value:s.values[e]});const i=this.pivot.parseArgsToPivotDomain(t),{value:n,format:r}=this.pivot.getPivotHeaderValueAndFormat(i),a=this.env.model.getters.getLocale(),l={formula:`=PIVOT.HEADER(${Nc(e,i).join(",")})`,value:bn(n,{format:r,locale:a}),isMissing:!this.tracker?.isHeaderPresent(i)};s.indent>1&&(l.style=`padding-left: ${s.indent-10}px`),o.push(l)}return o}_buildValues(e,t){const o=[];for(const s of t.columns.at(-1)||[]){const i=[],n=Si(s.values[s.values.length-1]);for(const o of t.rows){const t=[];for(let e=0;e<o.fields.length;e++)t.push({value:o.fields[e]},{value:o.values[e]});for(let e=0;e<s.fields.length-1;e++)t.push({value:s.fields[e]},{value:s.values[e]});const r=this.pivot.parseArgsToPivotDomain(t),{value:a,format:l}=this.pivot.getPivotCellValueAndFormat(n,r),c=this.env.model.getters.getLocale();i.push({formula:`=PIVOT.VALUE(${Nc(e,r,n).join(",")})`,value:bn(a,{format:l,locale:c}),isMissing:!this.tracker?.isValuePresent(n,r)})}o.push(i)}return o}}class Ek{static getters=[];history;constructor(e){this.history=Object.assign(Object.create(e),{update:e.addChange.bind(e,this),selectCell:()=>{}})}exportForExcel(e){}allowDispatch(e){return"Success"}beforeHandle(e){}handle(e){}finalize(){}batchValidations(...e){return t=>e.map((e=>e.call(this,t))).flat()}chainValidations(...e){return t=>{for(const o of e){let e=o.call(this,t);Array.isArray(e)||(e=[e]);const s=e.filter((e=>"Success"!==e));if(s.length)return s}return"Success"}}checkValidations(e,...t){return this.batchValidations(...t)(e)}}class Rk extends Ek{getters;dispatch;canDispatch;constructor({getters:e,stateObserver:t,range:o,dispatch:s,canDispatch:i}){super(t),o.addRangeProvider(this.adaptRanges.bind(this)),this.getters=e,this.dispatch=s,this.canDispatch=i}import(e){}export(e){}adaptRanges(e,t,o){}garbageCollectExternalResources(){}}class Tk{id;format;style;sheetId;getRangeString;isFormula=!0;compiledFormula;constructor(e,t,o,s,i,n,r){this.id=e,this.format=o,this.style=s,this.sheetId=n,this.getRangeString=r;let a=0;const l=t.tokens.map((e=>{if("REFERENCE"===e.type){const e=a++;return new Ak(i,e,this.sheetId,this.getRangeString)}return e}));this.compiledFormula={...t,dependencies:i,tokens:l}}get content(){return dt(this.compiledFormula.tokens.map((e=>e.value)))}get contentWithFixedReferences(){let e=0;return dt(this.compiledFormula.tokens.map((t=>{if("REFERENCE"===t.type){const t=e++;return this.getRangeString(this.compiledFormula.dependencies[t],this.sheetId,{useBoundedReference:!0})}return t.value})))}}class Ak{ranges;rangeIndex;sheetId;getRangeString;type="REFERENCE";constructor(e,t,o,s){this.ranges=e,this.rangeIndex=t,this.sheetId=o,this.getRangeString=s}get value(){const e=this.ranges[this.rangeIndex];return this.getRangeString(e,this.sheetId)}}function Dk(e){return""===e?NaN:Number(e)}function _k(e){return Object.entries(e).map((([e,t])=>t?Ok(parseInt(e,10),t):void 0)).filter(lt).map((e=>Oo(e.left,e.top)+":"+Oo(e.right,e.bottom)))}function Ok(e,t){return{...t.zone,id:e}}class Fk{getters;providers=[];constructor(e){this.getters=e}static getters=["adaptFormulaStringDependencies","copyFormulaStringForSheet","extendRange","getRangeString","getRangeFromSheetXC","createAdaptedRanges","getRangeData","getRangeDataFromXc","getRangeDataFromZone","getRangeFromRangeData","getRangeFromZone","getRangesUnion","recomputeRanges","isRangeValid","removeRangesSheetPrefix"];allowDispatch(e){return"MOVE_RANGES"===e.type?1===e.target.length?"Success":"InvalidZones":"Success"}beforeHandle(e){}handle(e){const t=ba(e);t?.applyChange&&this.executeOnAllRanges(t.applyChange,t.sheetId,t.sheetName)}finalize(){}verifyRangeRemoved(e){return t=>{const o=e(t);return"NONE"===o.changeType||cr(o.range.zone)?o:{range:o.range,changeType:"REMOVE"}}}executeOnAllRanges(e,t,o){const s=this.verifyRangeRemoved(e);for(const e of this.providers)e(s,t,o)}addRangeProvider(e){this.providers.push(e)}createAdaptedRanges(e,t,o,s){return e.map((e=>{if(!cr(e.zone))return e;const i=e.prefixSheet?e.sheetId:s,n=ga(e),r=ua(e),a={...e.unboundedZone,left:n&&!e.unboundedZone.hasHeader?e.unboundedZone.left:e.unboundedZone.left+(e.parts[0].colFixed?0:t),right:n?e.unboundedZone.right:e.unboundedZone.right+((e.parts[1]||e.parts[0]).colFixed?0:t),top:r&&!e.unboundedZone.hasHeader?e.unboundedZone.top:e.unboundedZone.top+(e.parts[0].rowFixed?0:o),bottom:r?e.unboundedZone.bottom:e.unboundedZone.bottom+((e.parts[1]||e.parts[0]).rowFixed?0:o)};return function(e){if(hr(e.zone))return e;const t={...e.unboundedZone},o={...e.zone};let s=e.parts;if(void 0!==t.right&&t.right<t.left){const e=t.right;t.right=t.left,t.left=e,o.right=o.left,o.left=e,s=[{colFixed:s[1]?.colFixed||!1,rowFixed:s[0]?.rowFixed||!1},{colFixed:s[0]?.colFixed||!1,rowFixed:s[1]?.rowFixed||!1}]}if(void 0!==t.bottom&&t.bottom<t.top){const e=t.bottom;t.bottom=t.top,t.top=e,o.bottom=o.top,o.top=e,s=[{colFixed:s[0]?.colFixed||!1,rowFixed:s[1]?.rowFixed||!1},{colFixed:s[1]?.colFixed||!1,rowFixed:s[0]?.rowFixed||!1}]}return{unboundedZone:t,zone:o,parts:s,invalidXc:e.invalidXc,prefixSheet:e.prefixSheet,invalidSheetName:e.invalidSheetName,sheetId:e.sheetId}}(ca({...e,sheetId:i,zone:a},this.getters.getSheetSize))}))}removeRangesSheetPrefix(e,t){return t.map((t=>t.prefixSheet&&t.sheetId===e?{...t,prefixSheet:!1}:t))}extendRange(e,t,o){const s="COL"===t?e.zone.right+o:e.zone.right,i="ROW"===t?e.zone.bottom+o:e.zone.bottom,n={left:e.zone.left,top:e.zone.top,right:ga(e)?void 0:s,bottom:ua(e)?void 0:i};return ca({...e,zone:n},this.getters.getSheetSize)}getRangeFromSheetXC(e,t){if(!Xr.test(t)||!this.getters.tryGetSheet(e))return da(t);const{sheetName:o}=ta(t);return ha({xc:t,sheetId:this.getters.getSheetIdByName(o)||e,invalidSheetName:o&&!this.getters.getSheetIdByName(o)?o:void 0},this.getters.getSheetSize)}getRangeString(e,t,o={useBoundedReference:!1,useFixedReference:!1}){return e?e.invalidXc?e.invalidXc:this.getters.tryGetSheet(e.sheetId)?pa(e,t,this.getters.getSheetName,o):Js.InvalidReference:Js.InvalidReference}getRangeDataFromXc(e,t){const o=this.getters.getRangeFromSheetXC(e,t);return this.getRangeDataFromZone(o.sheetId,o.unboundedZone)}getRangeDataFromZone(e,t){return{_sheetId:e,_zone:t=this.getters.getUnboundedZone(e,t)}}getRangeData(e){return this.getRangeDataFromZone(e.sheetId,e.unboundedZone)}getRangeFromZone(e,t){return ca({sheetId:e,zone:t,parts:[{colFixed:!1,rowFixed:!1},{colFixed:!1,rowFixed:!1}],prefixSheet:!1},this.getters.getSheetSize)}recomputeRanges(e,t){const o=e.map((e=>e.unboundedZone)),s=t.map((e=>e.unboundedZone));return er(o,s).map((t=>this.getRangeFromZone(e[0].sheetId,t)))}getRangeFromRangeData(e){if(!this.getters.tryGetSheet(e._sheetId))return da(Js.InvalidReference);return ca({prefixSheet:!1,zone:e._zone,sheetId:e._sheetId,invalidSheetName:void 0,parts:[{colFixed:!1,rowFixed:!1},{colFixed:!1,rowFixed:!1}]},this.getters.getSheetSize)}isRangeValid(e){if(!e)return!1;const{xc:t,sheetName:o}=ta(e);return null!==t.match(Xr)&&(!o||void 0!==this.getters.getSheetIdByName(o))}getRangesUnion(e){const t=e.map((e=>e.unboundedZone)),o=function(...e){return{top:Math.min(...e.map((e=>e.top))),left:Math.min(...e.map((e=>e.left))),bottom:e.some((e=>void 0===e.bottom))?void 0:Math.max(...e.map((e=>e.bottom))),right:e.some((e=>void 0===e.right))?void 0:Math.max(...e.map((e=>e.right)))}}(...t);return this.getRangeFromZone(e[0].sheetId,o)}adaptFormulaStringDependencies(e,t,o){if(!t.startsWith("="))return t;const s=PS(t),i=s.dependencies.map((t=>{const s=this.getters.getRangeFromSheetXC(e,t),i=o(s);return"NONE"===i.changeType?s:i.range}));return this.getters.getFormulaString(e,s.tokens,i)}copyFormulaStringForSheet(e,t,o,s){if(!o.startsWith("="))return o;const i=PS(o),n=i.dependencies.map((o=>{const i=this.getters.getRangeFromSheetXC(e,o);return"keepSameReference"===s?i:ma(e,t,i)}));return this.getters.getFormulaString(t,i.tokens,n)}}function Pk(e,t){if(!e)return;const o=t(e);switch(o.changeType){case"NONE":return e;case"REMOVE":return;default:return o.range}}class Mk extends Ek{getters;constructor({getters:e,stateObserver:t}){super(t),this.getters=e}}const Nk=new n;Nk.add("pivots",(e=>{for(const t of e.getPivotIds()){const o=e.getPivot(t);YN.get(o.type).onIterationEndEvaluation(o)}}));const kk=CS.mapping;function Vk(e,t,o){return new Lk(e,t,o).getParameters()}class Lk{getters;computeCell;evalContext;rangeCache={};constructor(e,t,o){this.getters=t,this.computeCell=o,this.evalContext=Object.assign(Object.create(kk),e,{getters:this.getters,locale:this.getters.getLocale()})}getParameters(){return{referenceDenormalizer:this.refFn.bind(this),ensureRange:this.range.bind(this),evalContext:this.evalContext}}refFn(e,t){const o=this.getRangeError(e);if(o)return o;if(t){return{value:oa(this.getters.getSheetName(e.sheetId),dr(e.zone))}}const s={sheetId:e.sheetId,col:e.zone.left,row:e.zone.top};return this.computeCell(s)}range(e){const t=this.getRangeError(e);if(t)return[[t]];const o=e.sheetId,s=e.zone,i=vr(s,this.getters.getSheetZone(o));if(!i)return[[]];const{top:n,left:r,bottom:a,right:l}=s,c=`${o}-${n}-${r}-${a}-${l}`;if(c in this.rangeCache)return this.rangeCache[c];const h=i.bottom-i.top+1,d=i.right-i.left+1,u=new Array(d);for(let e=i.left;e<=i.right;e++){const t=e-i.left;u[t]=new Array(h);for(let s=i.top;s<=i.bottom;s++){const n=s-i.top;u[t][n]=this.computeCell({sheetId:o,col:e,row:s})}}return this.rangeCache[c]=u,u}getRangeError(e){return cr(e.zone)?e.invalidSheetName?new ei(Vo("Invalid sheet name: %s",e.invalidSheetName)):void 0:new si}}function Hk(e,t,o,s,i){Uk(e,t,o||0,s||e.length-1,i||zk)}function Uk(e,t,o,s,i){for(;s>o;){if(s-o>600){var n=s-o+1,r=t-o+1,a=Math.log(n),l=.5*Math.exp(2*a/3),c=.5*Math.sqrt(a*l*(n-l)/n)*(r-n/2<0?-1:1);Uk(e,t,Math.max(o,Math.floor(t-r*l/n+c)),Math.min(s,Math.floor(t+(n-r)*l/n+c)),i)}var h=e[t],d=o,u=s;for(Bk(e,o,t),i(e[s],h)>0&&Bk(e,o,s);d<u;){for(Bk(e,d,u),d++,u--;i(e[d],h)<0;)d++;for(;i(e[u],h)>0;)u--}0===i(e[o],h)?Bk(e,o,u):Bk(e,++u,s),u<=t&&(o=u+1),t<=u&&(s=u-1)}}function Bk(e,t,o){var s=e[t];e[t]=e[o],e[o]=s}function zk(e,t){return e<t?-1:e>t?1:0}class $k{constructor(e=9){this._maxEntries=Math.max(4,e),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()}all(){return this._all(this.data,[])}search(e){let t=this.data;const o=[];if(!eV(e,t))return o;const s=this.toBBox,i=[];for(;t;){for(let n=0;n<t.children.length;n++){const r=t.children[n],a=t.leaf?s(r):r;eV(e,a)&&(t.leaf?o.push(r):Qk(e,a)?this._all(r,o):i.push(r))}t=i.pop()}return o}collides(e){let t=this.data;if(!eV(e,t))return!1;const o=[];for(;t;){for(let s=0;s<t.children.length;s++){const i=t.children[s],n=t.leaf?this.toBBox(i):i;if(eV(e,n)){if(t.leaf||Qk(e,n))return!0;o.push(i)}}t=o.pop()}return!1}load(e){if(!e||!e.length)return this;if(e.length<this._minEntries){for(let t=0;t<e.length;t++)this.insert(e[t]);return this}let t=this._build(e.slice(),0,e.length-1,0);if(this.data.children.length)if(this.data.height===t.height)this._splitRoot(this.data,t);else{if(this.data.height<t.height){const e=this.data;this.data=t,t=e}this._insert(t,this.data.height-t.height-1,!0)}else this.data=t;return this}insert(e){return e&&this._insert(e,this.data.height-1),this}clear(){return this.data=tV([]),this}remove(e,t){if(!e)return this;let o=this.data;const s=this.toBBox(e),i=[],n=[];let r,a,l;for(;o||i.length;){if(o||(o=i.pop(),a=i[i.length-1],r=n.pop(),l=!0),o.leaf){const s=Gk(e,o.children,t);if(-1!==s)return o.children.splice(s,1),i.push(o),this._condense(i),this}l||o.leaf||!Qk(o,s)?a?(r++,o=a.children[r],l=!1):o=null:(i.push(o),n.push(r),r=0,a=o,o=o.children[0])}return this}toBBox(e){return e}compareMinX(e,t){return e.minX-t.minX}compareMinY(e,t){return e.minY-t.minY}toJSON(){return this.data}fromJSON(e){return this.data=e,this}_all(e,t){const o=[];for(;e;)e.leaf?t.push(...e.children):o.push(...e.children),e=o.pop();return t}_build(e,t,o,s){const i=o-t+1;let n,r=this._maxEntries;if(i<=r)return n=tV(e.slice(t,o+1)),Wk(n,this.toBBox),n;s||(s=Math.ceil(Math.log(i)/Math.log(r)),r=Math.ceil(i/Math.pow(r,s-1))),n=tV([]),n.leaf=!1,n.height=s;const a=Math.ceil(i/r),l=a*Math.ceil(Math.sqrt(r));oV(e,t,o,l,this.compareMinX);for(let i=t;i<=o;i+=l){const t=Math.min(i+l-1,o);oV(e,i,t,a,this.compareMinY);for(let o=i;o<=t;o+=a){const i=Math.min(o+a-1,t);n.children.push(this._build(e,o,i,s-1))}}return Wk(n,this.toBBox),n}_chooseSubtree(e,t,o,s){for(;s.push(t),!t.leaf&&s.length-1!==o;){let o,s=1/0,r=1/0;for(let a=0;a<t.children.length;a++){const l=t.children[a],c=Xk(l),h=(i=e,n=l,(Math.max(n.maxX,i.maxX)-Math.min(n.minX,i.minX))*(Math.max(n.maxY,i.maxY)-Math.min(n.minY,i.minY))-c);h<r?(r=h,s=c<s?c:s,o=l):h===r&&c<s&&(s=c,o=l)}t=o||t.children[0]}var i,n;return t}_insert(e,t,o){const s=o?e:this.toBBox(e),i=[],n=this._chooseSubtree(s,this.data,t,i);for(n.children.push(e),Zk(n,s);t>=0&&i[t].children.length>this._maxEntries;)this._split(i,t),t--;this._adjustParentBBoxes(s,i,t)}_split(e,t){const o=e[t],s=o.children.length,i=this._minEntries;this._chooseSplitAxis(o,i,s);const n=this._chooseSplitIndex(o,i,s),r=tV(o.children.splice(n,o.children.length-n));r.height=o.height,r.leaf=o.leaf,Wk(o,this.toBBox),Wk(r,this.toBBox),t?e[t-1].children.push(r):this._splitRoot(o,r)}_splitRoot(e,t){this.data=tV([e,t]),this.data.height=e.height+1,this.data.leaf=!1,Wk(this.data,this.toBBox)}_chooseSplitIndex(e,t,o){let s,i=1/0,n=1/0;for(let r=t;r<=o-t;r++){const t=qk(e,0,r,this.toBBox),a=qk(e,r,o,this.toBBox),l=Jk(t,a),c=Xk(t)+Xk(a);l<i?(i=l,s=r,n=c<n?c:n):l===i&&c<n&&(n=c,s=r)}return s||o-t}_chooseSplitAxis(e,t,o){const s=e.leaf?this.compareMinX:jk,i=e.leaf?this.compareMinY:Yk;this._allDistMargin(e,t,o,s)<this._allDistMargin(e,t,o,i)&&e.children.sort(s)}_allDistMargin(e,t,o,s){e.children.sort(s);const i=this.toBBox,n=qk(e,0,t,i),r=qk(e,o-t,o,i);let a=Kk(n)+Kk(r);for(let s=t;s<o-t;s++){const t=e.children[s];Zk(n,e.leaf?i(t):t),a+=Kk(n)}for(let s=o-t-1;s>=t;s--){const t=e.children[s];Zk(r,e.leaf?i(t):t),a+=Kk(r)}return a}_adjustParentBBoxes(e,t,o){for(let s=o;s>=0;s--)Zk(t[s],e)}_condense(e){for(let t,o=e.length-1;o>=0;o--)0===e[o].children.length?o>0?(t=e[o-1].children,t.splice(t.indexOf(e[o]),1)):this.clear():Wk(e[o],this.toBBox)}}function Gk(e,t,o){if(!o)return t.indexOf(e);for(let s=0;s<t.length;s++)if(o(e,t[s]))return s;return-1}function Wk(e,t){qk(e,0,e.children.length,t,e)}function qk(e,t,o,s,i){i||(i=tV(null)),i.minX=1/0,i.minY=1/0,i.maxX=-1/0,i.maxY=-1/0;for(let n=t;n<o;n++){const t=e.children[n];Zk(i,e.leaf?s(t):t)}return i}function Zk(e,t){return e.minX=Math.min(e.minX,t.minX),e.minY=Math.min(e.minY,t.minY),e.maxX=Math.max(e.maxX,t.maxX),e.maxY=Math.max(e.maxY,t.maxY),e}function jk(e,t){return e.minX-t.minX}function Yk(e,t){return e.minY-t.minY}function Xk(e){return(e.maxX-e.minX)*(e.maxY-e.minY)}function Kk(e){return e.maxX-e.minX+(e.maxY-e.minY)}function Jk(e,t){const o=Math.max(e.minX,t.minX),s=Math.max(e.minY,t.minY),i=Math.min(e.maxX,t.maxX),n=Math.min(e.maxY,t.maxY);return Math.max(0,i-o)*Math.max(0,n-s)}function Qk(e,t){return e.minX<=t.minX&&e.minY<=t.minY&&t.maxX<=e.maxX&&t.maxY<=e.maxY}function eV(e,t){return t.minX<=e.maxX&&t.minY<=e.maxY&&t.maxX>=e.minX&&t.maxY>=e.minY}function tV(e){return{children:e,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function oV(e,t,o,s,i){const n=[t,o];for(;n.length;){if((o=n.pop())-(t=n.pop())<=s)continue;const r=t+Math.ceil((o-t)/s/2)*s;Hk(e,r,t,o,i),n.push(t,r,r,o)}}class sV{rTrees={};constructor(e=[]){const t={};for(const o of e){const e=o.boundingBox.sheetId;t[e]||(t[e]=[]),t[e].push(o)}for(const e in t)this.rTrees[e]=new iV,this.rTrees[e].load(t[e])}insert(e){const t=e.boundingBox.sheetId;this.rTrees[t]||(this.rTrees[t]=new iV),this.rTrees[t].insert(e)}search({zone:e,sheetId:t}){return this.rTrees[t]?this.rTrees[t].search({minX:e.left,minY:e.top,maxX:e.right,maxY:e.bottom}):[]}remove(e){const t=e.boundingBox.sheetId;this.rTrees[t]&&this.rTrees[t].remove(e,this.rtreeItemComparer)}rtreeItemComparer(e,t){return e.data===t.data&&e.boundingBox.sheetId===t.boundingBox.sheetId&&e.boundingBox?.zone.left===t.boundingBox.zone.left&&e.boundingBox?.zone.top===t.boundingBox.zone.top&&e.boundingBox?.zone.right===t.boundingBox.zone.right&&e.boundingBox?.zone.bottom===t.boundingBox.zone.bottom}}class iV extends $k{toBBox({boundingBox:e}){const t=e.zone;return{minX:t.left,minY:t.top,maxX:t.right,maxY:t.bottom}}compareMinX(e,t){return e.boundingBox.zone.left-t.boundingBox.zone.left}compareMinY(e,t){return e.boundingBox.zone.top-t.boundingBox.zone.top}}class nV{createEmptyPositionSet;dependencies=new MD;rTree;constructor(e,t=[]){this.createEmptyPositionSet=e,this.rTree=new sV(t)}removeAllDependencies(e){const t=this.dependencies.get(e);if(t){for(const e of t)this.rTree.remove(e);this.dependencies.delete(e)}}addDependencies(e,t){const o=t.map((({sheetId:t,zone:o})=>({data:e,boundingBox:{zone:o,sheetId:t}})));for(const e of o)this.rTree.insert(e);const s=this.dependencies.get(e);s?s.push(...o):this.dependencies.set(e,o)}getCellsDependingOn(e){const t=this.createEmptyPositionSet(),o=Array.from(e).reverse();for(;o.length>0;){const e=o.pop(),s=e.zone,i=e.sheetId;for(let e=s.left;e<=s.right;e++)for(let o=s.top;o<=s.bottom;o++)t.add({sheetId:i,col:e,row:o});const n=this.rTree.search(e).map((e=>e.data)),r={};for(const e of n)t.has(e)||(r[e.sheetId]||(r[e.sheetId]=[]),r[e.sheetId].push(Dr(e)));for(const e in r){const t=er(r[e],[]);o.push(...t.map((t=>({sheetId:e,zone:t}))))}}for(const o of e){const e=o.zone,s=o.sheetId;for(let o=e.left;o<=e.right;o++)for(let i=e.top;i<=e.bottom;i++)t.delete({sheetId:s,col:o,row:i})}return t}}class rV extends Uint32Array{columnOffset=0;cols=0;rows=0;static create(e,t){const o=function(e){if(0===e)return-1/0;if(e<0)return NaN;return 32-Math.clz32(--e)}(t),s=new this((e<<o>>5)+1);return s.columnOffset=o,s.cols=t,s.rows=e,s}getValue(e){const[t,o]=this.getCoordinates(e);return this[t]>>o&1}setValue(e,t){const[o,s]=this.getCoordinates(e),i=0===(this[o]>>s&1)&&1===t;return this[o]=this[o]&~(1<<s)|t<<s,i}isEmpty(){return!this.some((e=>0!==e))}fillAllPositions(){this.fill(-1>>>0)}clear(){this.fill(0)}getCoordinates(e){const{row:t,col:o}=e,s=(t<<this.columnOffset)+o,i=s>>5;return[i,s-(i<<5)]}}class aV{sheets={};insertions=[];maxSize=0;constructor(e){for(const t in e){const o=e[t].cols,s=e[t].rows;this.maxSize+=o*s,this.sheets[t]=rV.create(s,o)}}add(e){this.sheets[e.sheetId].setValue(e,1)&&this.insertions.push(e)}addMany(e){for(const t of e)this.add(t)}delete(e){this.sheets[e.sheetId].setValue(e,0)}deleteMany(e){for(const t of e)this.delete(t)}has(e){return 1===this.sheets[e.sheetId].getValue(e)}clear(){const e=[...this];this.insertions=[];for(const e in this.sheets)this.sheets[e].clear();return e}isEmpty(){if(0===this.insertions.length)return!0;for(const e in this.sheets)if(!this.sheets[e].isEmpty())return!1;return!0}fillAllPositions(){this.insertions=new Array(this.maxSize);let e=0;for(const t in this.sheets){const o=this.sheets[t];o.fillAllPositions();for(let s=0;s<o.rows;s++)for(let i=0;i<o.cols;i++)this.insertions[e++]={sheetId:t,row:s,col:i}}}*[Symbol.iterator](){for(const e of this.insertions)1===this.sheets[e.sheetId].getValue(e)&&(yield e)}}class lV{resultsToArrayFormulas=new sV;arrayFormulasToResults=new MD;searchFormulaPositionsSpreadingOn(e,t){return this.resultsToArrayFormulas.search({sheetId:e,zone:t}).map((e=>e.data))||cV}getArrayResultZone(e){return this.arrayFormulasToResults.get(e)}removeNode(e){this.resultsToArrayFormulas.remove({boundingBox:{sheetId:e.sheetId,zone:Dr(e)},data:e}),this.arrayFormulasToResults.delete(e)}addRelation({arrayFormulaPosition:e,resultZone:t}){this.resultsToArrayFormulas.insert({boundingBox:{sheetId:e.sheetId,zone:t},data:e}),this.arrayFormulasToResults.set(e,t)}isArrayFormula(e){return this.arrayFormulasToResults.has(e)}}const cV=[],hV=Object.freeze(Zn(new oi)),dV=Object.freeze(Zn({value:null}));class uV{context;getters;compilationParams;evaluatedCells=new MD;formulaDependencies=ut(new nV(this.createEmptyPositionSet.bind(this)));blockedArrayFormulas=new aV({});spreadingRelations=new lV;constructor(e,t){this.context=e,this.getters=t,this.compilationParams=Vk(this.context,this.getters,this.computeAndSave.bind(this))}getEvaluatedCell(e){return this.evaluatedCells.get(e)||dV}getSpreadZone(e,t={ignoreSpillError:!1}){const o=this.spreadingRelations.getArrayResultZone(e);if(!o)return;const s=this.evaluatedCells.get(e);return s?.type!==Ts.error||t.ignoreSpillError&&s?.value===Js.SpilledBlocked?fr(Dr(e),o):Dr(e)}getEvaluatedPositions(){return this.evaluatedCells.keys()}getEvaluatedPositionsInSheet(e){return this.evaluatedCells.keysForSheet(e)}getArrayFormulaSpreadingOn(e){if(this.getEvaluatedCell(e).type===Ts.empty)return;const t=this.spreadingRelations.searchFormulaPositionsSpreadingOn(e.sheetId,Dr(e));return Array.from(t).find((e=>!this.blockedArrayFormulas.has(e)))}updateDependencies(e){this.formulaDependencies().removeAllDependencies(e);const t=this.getDirectDependencies(e);this.formulaDependencies().addDependencies(e,t)}addDependencies(e,t){this.formulaDependencies().addDependencies(e,t);for(const e of t){const t=e.sheetId,{left:o,bottom:s,right:i,top:n}=e.zone;for(let e=o;e<=i;e++)for(let o=n;o<=s;o++)this.computeAndSave({sheetId:t,col:e,row:o})}}updateCompilationParameters(){this.compilationParams=Vk(this.context,this.getters,this.computeAndSave.bind(this)),this.compilationParams.evalContext.updateDependencies=this.updateDependencies.bind(this),this.compilationParams.evalContext.addDependencies=this.addDependencies.bind(this),this.compilationParams.evalContext.lookupCaches={forwardSearch:new Map,reverseSearch:new Map}}createEmptyPositionSet(){const e={};for(const t of this.getters.getSheetIds())e[t]={rows:this.getters.getNumberRows(t),cols:this.getters.getNumberCols(t)};return new aV(e)}evaluateCells(e){const t=performance.now(),o=this.createEmptyPositionSet();o.addMany(e);const s=this.getArrayFormulasImpactedByChangesOf(e);o.addMany(this.getCellsDependingOn(e)),o.addMany(s),o.addMany(this.getCellsDependingOn(s)),this.evaluate(o),console.debug("evaluate Cells",performance.now()-t,"ms")}getArrayFormulasImpactedByChangesOf(e){const t=this.createEmptyPositionSet();for(const o of e){const e=this.getters.getCell(o)?.content,s=this.getArrayFormulaSpreadingOn(o);void 0!==s&&t.add(s),e||t.add(o)}const o=xr(t);for(const e in o)for(const s of o[e])t.addMany(this.getArrayFormulasBlockedBy(e,s));return t}buildDependencyGraph(){this.blockedArrayFormulas=this.createEmptyPositionSet(),this.spreadingRelations=new lV,this.formulaDependencies=ut((()=>{const e=[...this.getAllCells()].flatMap((e=>this.getDirectDependencies(e).filter((e=>!e.invalidSheetName&&!e.invalidXc)).map((t=>({data:e,boundingBox:{zone:t.zone,sheetId:t.sheetId}})))));return new nV(this.createEmptyPositionSet.bind(this),e)}))}evaluateAllCells(){const e=performance.now();this.evaluatedCells=new MD,this.evaluate(this.getAllCells()),console.debug("evaluate all cells",performance.now()-e,"ms")}evaluateFormulaResult(e,t){const o=PS(t),s=o.dependencies.map((t=>this.getters.getRangeFromSheetXC(e,t)));return this.updateCompilationParameters(),this.evaluateCompiledFormula(e,{...o,dependencies:s})}evaluateCompiledFormula(e,t,o){try{const s=mV(t,this.compilationParams,e,this.buildSafeGetSymbolValue(o),this.compilationParams.evalContext.__originCellPosition);return Ws(s)?Pi(s,pV):pV(s)}catch(e){return yS(e,"")}}getAllCells(){const e=this.createEmptyPositionSet();return e.fillAllPositions(),e}getArrayFormulasBlockedBy(e,t){const o=this.createEmptyPositionSet(),s=this.spreadingRelations.searchFormulaPositionsSpreadingOn(e,t);o.addMany(s);const i=[...s].filter((e=>!this.blockedArrayFormulas.has(e)));return i.length&&o.deleteMany(i),o.addMany(this.getCellsDependingOn(o)),o}nextPositionsToUpdate=new aV({});cellsBeingComputed=new Set;symbolsBeingComputed=new Set;evaluate(e){this.cellsBeingComputed=new Set,this.nextPositionsToUpdate=e;let t=0;for(;!this.nextPositionsToUpdate.isEmpty()&&t++<30;){this.updateCompilationParameters();const e=this.nextPositionsToUpdate.clear();for(let t=0;t<e.length;++t)this.evaluatedCells.delete(e[t]);for(let t=0;t<e.length;++t){const o=e[t];if(this.nextPositionsToUpdate.has(o))continue;const s=this.computeCell(o);s!==dV&&this.evaluatedCells.set(o,s)}Nk.getAll().forEach((e=>e(this.getters)))}t>=30&&console.warn("Maximum iteration reached while evaluating cells")}computeCell(e){const t=this.evaluatedCells.get(e);if(t)return t;this.blockedArrayFormulas.has(e)||this.invalidateSpreading(e),this.spreadingRelations.isArrayFormula(e)&&this.spreadingRelations.removeNode(e);const o=this.getters.getCell(e);if(void 0===o)return dV;const s=o.id,i={format:o.format,locale:this.getters.getLocale()};try{return this.cellsBeingComputed.has(s)?hV:(this.cellsBeingComputed.add(s),o.isFormula?this.computeFormulaCell(e,o):Wn(o,i))}catch(e){return e.value=e?.value||Js.GenericError,e.message=e?.message||IS,Zn(e)}finally{this.cellsBeingComputed.delete(s)}}computeAndSave(e){const t=this.computeCell(e);return this.evaluatedCells.has(e)||this.evaluatedCells.set(e,t),t}computeFormulaCell(e,t){const o=mV(t.compiledFormula,this.compilationParams,e.sheetId,this.buildSafeGetSymbolValue(),e);if(!Ws(o)){const s=Zn(pV(o),this.getters.getLocale(),t);return s.type===Ts.error&&(s.errorOriginPosition=o.errorOriginPosition??e),s}this.assertSheetHasEnoughSpaceToSpreadFormulaResult(e,o);const s=o.length,i=o[0].length,n={top:e.row,bottom:e.row+i-1,left:e.col,right:e.col+s-1};return this.spreadingRelations.addRelation({resultZone:n,arrayFormulaPosition:e}),this.assertNoMergedCellsInSpreadZone(e,o),gV(s,i,this.checkCollision(e)),gV(s,i,this.spreadValues(e,o)),this.invalidatePositionsDependingOnSpread(e.sheetId,n),Zn(pV(o[0][0]),this.getters.getLocale(),t)}invalidatePositionsDependingOnSpread(e,t){const o=this.formulaDependencies().getCellsDependingOn(function(e){const{top:t,left:o,bottom:s,right:i}=e;if(1===Pr(e))return[];const n={top:t+1,bottom:s,left:o,right:o};if(i===o)return[n];const r={top:t,bottom:s,left:o+1,right:i};return t===s?[r]:[n,r]}(t).map((t=>({sheetId:e,zone:t}))));o.delete({sheetId:e,col:t.left,row:t.top}),this.nextPositionsToUpdate.addMany(o)}assertSheetHasEnoughSpaceToSpreadFormulaResult({sheetId:e,col:t,row:o},s){const i=this.getters.getNumberCols(e),n=this.getters.getNumberRows(e),r=t+s.length<=i,a=o+s[0].length<=n;if(!r||!a){if(r)throw new ri(Vo("Result couldn't be automatically expanded. Please insert more rows."));if(a)throw new ri(Vo("Result couldn't be automatically expanded. Please insert more columns."));throw new ri(Vo("Result couldn't be automatically expanded. Please insert more columns and rows."))}}assertNoMergedCellsInSpreadZone({sheetId:e,col:t,row:o},s){if(0!==this.getters.getMergesInZone(e,{top:o,bottom:o+s[0].length-1,left:t,right:t+s.length-1}).length)throw new ri(Vo("Merged cells found in the spill zone. Please unmerge cells before using array formulas."))}checkCollision(e){const{sheetId:t,col:o,row:s}=e;return(i,n)=>{const r={sheetId:t,col:i+o,row:n+s},a=this.getters.getCell(r);if(a?.content||this.getters.getEvaluatedCell(r).type!==Ts.empty)throw this.blockedArrayFormulas.add(e),new ri(Vo("Array result was not expanded because it would overwrite data in %s.",Oo(r.col,r.row)));this.blockedArrayFormulas.delete(e)}}spreadValues({sheetId:e,col:t,row:o},s){return(i,n)=>{const r={sheetId:e,col:i+t,row:n+o},a=this.getters.getCell(r),l=Zn(pV(s[i][n]),this.getters.getLocale(),a);l.type===Ts.error&&(l.errorOriginPosition=s[i][n].errorOriginPosition??r),this.evaluatedCells.set(r,l)}}invalidateSpreading(e){const t=this.spreadingRelations.getArrayResultZone(e);if(!t)return;for(let o=t.left;o<=t.right;o++)for(let s=t.top;s<=t.bottom;s++){const t={sheetId:e.sheetId,col:o,row:s},i=this.getters.getCell(t)?.content;i||this.evaluatedCells.delete(t)}const o=e.sheetId;this.invalidatePositionsDependingOnSpread(o,t),this.nextPositionsToUpdate.addMany(this.getArrayFormulasBlockedBy(o,t))}buildSafeGetSymbolValue(e){return t=>{if(this.symbolsBeingComputed.has(t))return hV;this.symbolsBeingComputed.add(t);try{const o=e?.(t);return o||new ti(Vo("Invalid formula"))}finally{this.symbolsBeingComputed.delete(t)}}}getDirectDependencies(e){const t=this.getters.getCell(e);return t?.isFormula?t.compiledFormula.dependencies:[]}getCellsDependingOn(e){const t=[],o=xr(e);for(const e in o)t.push(...o[e].map((t=>({sheetId:e,zone:t}))));return this.formulaDependencies().getCellsDependingOn(t)}}function gV(e,t,o){for(let s=0;s<e;++s)for(let e=0;e<t;++e)0===s&&0===e||o(s,e)}function pV(e){return null===e.value||void 0===e.value?{...e,value:0}:e}function mV(e,t,o,s,i){return t.evalContext.__originCellPosition=i,t.evalContext.__originSheetId=o,e.execute(e.dependencies,t.referenceDenormalizer,t.ensureRange,s,t.evalContext)}const fV=/"(#[0-9a-fA-F]{6})"/g;const vV={isValid:!0};const bV=new n;function SV(e,t){const o=t.model.getters.getPivotCellFromPosition(e),s=t.model.getters.getPivotIdFromPosition(e);if(!s||"HEADER"!==o.type)return;const i=t.model.getters.getPivotCoreDefinition(s),n=i.collapsedDomains?.[o.dimension]?[...i.collapsedDomains[o.dimension]]:[],r=n.findIndex((e=>mt(e,o.domain)));-1!==r?n.splice(r,1):n.push(o.domain);const a=i.collapsedDomains?{...i.collapsedDomains}:{COL:[],ROW:[]};a[o.dimension]=n,t.model.dispatch("UPDATE_PIVOT",{pivotId:s,pivot:{...i,collapsedDomains:a}})}bV.add("data_validation_checkbox",((e,t)=>{if(e.isCellValidCheckbox(t)){const o=!!e.getEvaluatedCell(t).value;return{svg:o?BR:HR,hoverSvg:o?BR:UR,priority:2,horizontalAlign:"center",size:17,margin:2,position:t,type:"data_validation_checkbox",onClick:(e,t)=>{const s=t.model.getters.getCell(e);if(t.model.getters.isReadonly()||!!s?.isFormula)return;const i=o?"FALSE":"TRUE";t.model.dispatch("UPDATE_CELL",{...e,content:i})}}}})),bV.add("data_validation_chip_icon",((e,t)=>{const o=e.getDataValidationChipStyle(t);if(o){const s=e.getCellComputedStyle(t);return{svg:VR(o),hoverSvg:LR(o),priority:10,horizontalAlign:"right",size:Va(s),margin:4,position:t,onClick:(e,t)=>{const{col:o,row:s}=e;t.model.selection.selectCell(o,s),t.startCellEdition()},type:"data_validation_chip_icon"}}})),bV.add("data_validation_list_icon",((e,t)=>{if(!e.isReadonly()&&e.cellHasListDataValidationIcon(t)){const s=e.getCellComputedStyle(t);return{svg:(o=s,{name:"CARET_DOWN",width:512,height:512,paths:[{fillColor:o.textColor||N,path:"M120 195 h270 l-135 130"}]}),hoverSvg:NR(s),priority:2,horizontalAlign:"right",size:17,margin:2,position:t,onClick:(e,t)=>{const{col:o,row:s}=e;t.model.selection.selectCell(o,s),t.startCellEdition()},type:"data_validation_list_icon"}}var o})),bV.add("filter_icon",((e,t)=>{if(e.isFilterHeader(t)){const o=e.isFilterActive(t),s=Zt(e.getCellComputedStyle(t).fillColor||"#fff")<.45;return{type:"filter_icon",svg:$R(o,s,!1),hoverSvg:$R(o,s,!0),priority:3,horizontalAlign:"right",size:17,margin:2,position:t,onClick:(e,t)=>{const o=t.getStore(Bx),s=o.persistentCellPopover;s.isOpen&&s.col===e.col&&s.row===e.row&&"FilterMenu"===s.type?o.close():o.open(e,"FilterMenu")}}}})),bV.add("conditional_formatting",((e,t)=>{const o=e.getConditionalIcon(t);if(o){const s=e.getCellStyle(t);return{type:"conditional_formatting",svg:GR[o].svg,priority:1,horizontalAlign:"left",size:Va(s),margin:4,position:t}}})),bV.add("pivot_collapse",((e,t)=>{if(!e.isSpillPivotFormula(t))return;const o=e.getPivotCellFromPosition(t),s=e.getPivotIdFromPosition(t);if("HEADER"===o.type&&s&&o.domain.length){const i=e.getPivotCoreDefinition(s),n=e.isDashboard(),r="COL"===o.dimension?i.columns:i.rows,a=!n&&o.domain.length!==r.length,l=(i.collapsedDomains?.[o.dimension]??[]).some((e=>mt(e,o.domain))),c="ROW"===o.dimension?15*(o.domain.length-1):0;return{type:"pivot_collapse",priority:4,horizontalAlign:"left",size:a||!n&&"ROW"===o.dimension&&i.rows.length>1?12:0,margin:a?4+c:c,svg:a?zR(l,!1):void 0,hoverSvg:a?zR(l,!0):void 0,position:t,onClick:SV}}}));const CV="0.00%";function yV(e){return class extends e{getters;cache={};rankAsc={};rankDesc={};runningTotal={};runningTotalInPercent={};constructor(e,t){super(e,t),this.getters=t.getters}init(e){this.cache={},this.rankAsc={},this.rankDesc={},this.runningTotal={},this.runningTotalInPercent={},super.init(e)}getPivotCellValueAndFormat(e,t){return this.getMeasureDisplayValue(e,t)}_getPivotCellValueAndFormat(e,t){const o=`${e}-${t.map((e=>e.field+"="+e.value)).join(",")}`;if(this.cache[o])return this.cache[o];const s=this.getMeasure(e),i=s.computedBy?this.computeMeasure(s,t):super.getPivotCellValueAndFormat(e,t);return s.format?this.cache[o]={...i,format:s.format}:this.cache[o]=i,this.cache[o]}computeMeasure(e,t){if(!e.computedBy)return{value:0};const{columns:o,rows:s}=super.definition;if(o.length+s.length!==t.length){const o=this.getValuesToAggregate(e,t),s=Dc[e.aggregator];if(!s)return{value:0};try{return s([o],this.getters.getLocale())}catch(t){return yS(t,e.aggregator.toUpperCase())}}const i=this.getters.getMeasureCompiledFormula(e),n=this.getters.evaluateCompiledFormula(e.computedBy.sheetId,i,(e=>{const{columns:o,rows:s}=this.definition;if(o.find((t=>t.nameWithGranularity===e))){const{colDomain:o}=RO(this,t),s=o.findIndex((t=>t.field===e));return this.getPivotHeaderValueAndFormat(o.slice(0,s+1))}if(s.find((t=>t.nameWithGranularity===e))){const{rowDomain:o}=RO(this,t),s=o.findIndex((t=>t.field===e));return this.getPivotHeaderValueAndFormat(o.slice(0,s+1))}return this.getPivotCellValueAndFormat(e,t)}));return Ws(n)?n[0][0]:n}getValuesToAggregate(e,t){const{rowDomain:o,colDomain:s}=RO(this,t),i=super.getExpandedTableStructure(),n=[];if(0===s.length&&o.length<this.definition.rows.length&&this.definition.rows.length&&this.definition.columns.length){const t=this.treeToLeafDomains(i.getColTree()),s=this.getSubTreeMatchingDomain(i.getRowTree(),o),r=this.treeToLeafDomains(s);for(const s of t)for(const t of r)n.push(this._getPivotCellValueAndFormat(e.id,o.concat(t).concat(s)));return n}if(o.length===this.definition.rows.length&&0===s.length){const t=i.getColTree(),r=this.getSubTreeMatchingDomain(t,s),a=this.treeToLeafDomains(r,s);for(const t of a)n.push(this._getPivotCellValueAndFormat(e.id,o.concat(t)));return n}if(o.length===this.definition.rows.length&&s.length&&s.length<this.definition.columns.length){const t=this.getSubTreeMatchingDomain(i.getColTree(),s),r=this.treeToLeafDomains(t,s);for(const t of r)n.push(this._getPivotCellValueAndFormat(e.id,o.concat(t)));return n}{const t=i.getRowTree(),r=this.getSubTreeMatchingDomain(t,o),a=this.treeToLeafDomains(r,o);for(const t of a)n.push(this._getPivotCellValueAndFormat(e.id,t.concat(s)));return n}}getSubTreeMatchingDomain(e,t,o=0){if(o>t.length)return[];if(t.length===o)return e;for(const s of e){const e=Lc(this.definition.getDimension(s.field),t[o]?.value);if(s.field===t[o]?.field&&s.value===e)return this.getSubTreeMatchingDomain(s.children,t,o+1)}return e}treeToLeafDomains(e,t=[]){const o=[];for(const s of e){const e=this.definition.getDimension(s.field),i=[...t,{field:s.field,value:s.value,type:e.type}];0===s.children.length?o.push(i):o.push(...this.treeToLeafDomains(s.children,i))}return o}getMeasureDisplayValue(e,t){const o=this.getMeasure(e),s=this._getPivotCellValueAndFormat(e,t);if(!o.display||"no_calculations"===o.display.type||s.message)return s;const i=o.display.fieldNameWithGranularity;if(i&&!this.isFieldInPivot(i))return{value:Js.NotAvailable,message:Vo('Field "%s" not found in pivot for measure display calculation',i)};try{const e=o.display;switch(e.type){case"%_of_grand_total":return this.asPercentOfGrandTotal(s,o);case"%_of_col_total":return this.asPercentOfColumnTotal(s,o,t);case"%_of_row_total":return this.asPercentOfRowTotal(s,o,t);case"%_of_parent_row_total":return this.asPercentOfParentRowTotal(s,o,t);case"%_of_parent_col_total":return this.asPercentOfParentColumnTotal(s,o,t);case"index":return this.asIndex(s,o,t);case"%_of_parent_total":return this.asPercentOfParentTotal(s,o,t,e);case"running_total":return this.asRunningTotal(s,o,t,e,"running_total");case"%_running_total":return this.asRunningTotal(s,o,t,e,"%_running_total");case"rank_asc":return this.asRank(s,o,t,e,"asc");case"rank_desc":return this.asRank(s,o,t,e,"desc");case"%_of":return this.asPercentOf(s,o,t,e);case"difference_from":return this.asDifferenceFrom(s,o,t,e);case"%_difference_from":return this.asDifferenceFromInPercent(s,o,t,e)}return s}catch(e){return yS(e,"COMPUTE_MEASURE_DISPLAY_VALUE")}}asPercentOfGrandTotal(e,t){const o=this.getGrandTotal(t.id);return 0===o?{value:Js.DivisionByZero}:{value:this.measureValueToNumber(e)/o,format:CV}}asPercentOfRowTotal(e,t,o){const s=this.getRowTotal(t.id,o);return 0===s?{value:Js.DivisionByZero}:{value:this.measureValueToNumber(e)/s,format:CV}}asPercentOfColumnTotal(e,t,o){const s=this.getColumnTotal(t.id,o);return 0===s?{value:Js.DivisionByZero}:{value:this.measureValueToNumber(e)/s,format:CV}}asPercentOfParentRowTotal(e,t,o){const s=function(e,t){const{colDomain:o,rowDomain:s}=RO(e,t);return[...o,...s.slice(0,s.length-1)]}(this,o),i=this.measureValueToNumber(this._getPivotCellValueAndFormat(t.id,s));return 0===i?{value:""}:{value:this.measureValueToNumber(e)/i,format:CV}}asPercentOfParentColumnTotal(e,t,o){const s=function(e,t){const{colDomain:o,rowDomain:s}=RO(e,t);return[...o.slice(0,o.length-1),...s]}(this,o),i=this.measureValueToNumber(this._getPivotCellValueAndFormat(t.id,s));return 0===i?{value:""}:{value:this.measureValueToNumber(e)/i,format:CV}}asPercentOfParentTotal(e,t,o,s){const{fieldNameWithGranularity:i}=s;if(!i)return e;if(!OO(i,o))return{value:""};const n=function(e,t,o){let{rowDomain:s,colDomain:i}=RO(e,o);if("row"===FO(e,t)){const e=s.findIndex((e=>e.field===t));if(-1===e)return o;s=s.slice(0,e+1)}else{const e=i.findIndex((e=>e.field===t));if(-1===e)return o;i=i.slice(0,e+1)}return[...s,...i]}(this,i,o),r=this._getPivotCellValueAndFormat(t.id,n),a=this.measureValueToNumber(r);return 0===a?{value:""}:{value:this.measureValueToNumber(e)/a,format:CV}}asIndex(e,t,o){const s=this.measureValueToNumber(e),i=this.getRowTotal(t.id,o),n=this.getColumnTotal(t.id,o),r=this.getGrandTotal(t.id);return 0===i||0===n?{value:Js.DivisionByZero}:{value:s*r/(n*i),format:void 0}}asRunningTotal(e,t,o,s,i){const{fieldNameWithGranularity:n}=s;if(!n)return e;const r="running_total"===i?this.runningTotal:this.runningTotalInPercent;let a=r[t.id]?.[n];a||(a=this.computeRunningTotal(t,n,i),r[t.id]||(r[t.id]={}),r[t.id][n]=a);const{rowDomain:l,colDomain:c}=RO(this,o),h=PO(c),d=PO(l),u=a[h]?.[d];return{value:u??"",format:"running_total"===i?e.format:CV}}asPercentOf(e,t,o,s){const{fieldNameWithGranularity:i,value:n}=s;if(void 0===n||!i)return e;if(!OO(i,o))return{value:""};const r=this.getComparisonValue(t,o,i,n),a=this.strictMeasureValueToNumber(e);return 0===r||"sameValue"===r&&0===a?{value:Js.DivisionByZero}:!r||"sameValue"===r&&!a?{value:""}:"sameValue"===r?{value:1,format:CV}:void 0===a?{value:Js.NullError}:{value:a/r,format:CV}}asDifferenceFrom(e,t,o,s){const{fieldNameWithGranularity:i,value:n}=s;if(void 0===n||!i)return e;if(!OO(i,o))return{value:""};const r=this.getComparisonValue(t,o,i,n)||0;return"sameValue"===r?{value:""}:{value:this.measureValueToNumber(e)-r,format:e.format}}asDifferenceFromInPercent(e,t,o,s){const{fieldNameWithGranularity:i,value:n}=s;if(void 0===n||!i)return e;if(!OO(i,o))return{value:""};const r=this.getComparisonValue(t,o,i,n),a=this.strictMeasureValueToNumber(e);return 0===r?{value:Js.DivisionByZero}:r&&"sameValue"!==r?void 0===a?{value:Js.NullError}:{value:(a-r)/r,format:CV}:{value:""}}asRank(e,t,o,s,i){const{fieldNameWithGranularity:n}=s;if(!n)return e;if(!OO(n,o))return{value:""};const r="asc"===i?this.rankAsc:this.rankDesc;let a=r[t.id]?.[n];a||(a=this.computeRank(t,n,i),r[t.id]||(r[t.id]={}),r[t.id][n]=a);const{rowDomain:l,colDomain:c}=RO(this,o),h=PO(c),d=PO(l),u=a[h]?.[d];return{value:u??""}}computeRank(e,t,o){const s={},i=FO(this,t),n="row"===i?"column":"row";let r=this.getPivotValueCells(e.id);"column"===i&&(r=Mi(r));for(const a of r){const r=PO(TO(this,n,a[0].domain)),l=a.map((t=>({...t,value:this.strictMeasureValueToNumber(this._getPivotCellValueAndFormat(e.id,t.domain)),rowDomain:TO(this,i,t.domain)}))).filter((e=>OO(t,e.rowDomain))),c=Object.groupBy(l,(e=>NO(e.rowDomain,t)));for(const e in c)c[e]=Mt(c[e]||[],(e=>e.value)).filter((e=>void 0!==e.value)).sort(((e,t)=>"asc"===o?e.value-t.value:t.value-e.value));s[r]={};for(const e of l){const o=PO(TO(this,i,e.domain)),n=c[NO(e.rowDomain,t)];if(!n)continue;const a=n.findIndex((t=>t.value===e.value));-1!==a&&(s[r][o]=a+1)}}return"row"===i?s:Nt(s)}computeRunningTotal(e,t,o){const s={},i=FO(this,t),n="row"===i?"column":"row";let r=this.getPivotValueCells(e.id);"column"===i&&(r=Mi(r));for(const a of r){const r=PO(TO(this,n,a[0].domain));s[r]={};const l={},c=a.map((t=>({...t,rowDomain:TO(this,i,t.domain),value:this.measureValueToNumber(this._getPivotCellValueAndFormat(e.id,t.domain))}))).filter((e=>OO(t,e.rowDomain)));for(const e of c){const o=PO(e.rowDomain),i=kO(e.rowDomain,t),n=(l[i]||0)+e.value;l[i]=n,s[r][o]=n}if("%_running_total"===o)for(const e of c){const o=e.rowDomain,i=PO(o),n=kO(o,t),a=s[r][i]||0,c=l[n];s[r][i]=c?a/c:void 0}}return"row"===i?s:Nt(s)}getGrandTotal(e){const t=this._getPivotCellValueAndFormat(e,[]);return this.measureValueToNumber(t)}getRowTotal(e,t){const o=RO(this,t).rowDomain,s=this._getPivotCellValueAndFormat(e,o);return this.measureValueToNumber(s)}getColumnTotal(e,t){const o=RO(this,t).colDomain,s=this._getPivotCellValueAndFormat(e,o);return this.measureValueToNumber(s)}isFieldInPivot(e){return this.definition.columns.some((t=>t.nameWithGranularity===e))||this.definition.rows.some((t=>t.nameWithGranularity===e))}getComparisonValue(e,t,o,s){const i=s===xO||s===EO?function(e,t,o,s){const i=FO(e,o),n="row"===i?e.getExpandedTableStructure().getRowTree():e.getExpandedTableStructure().getColTree(),r=DO(TO(e,i,t),n,o),a=r?.map((e=>e.value))??[],l=function(e,t){const o=t.find((t=>t.field===e));return o?.value}(o,t);if(void 0===l)return;const c=a.indexOf(l);if(void 0===l||-1===c)return;return _O(t,o,a[Ze(c+(s===xO?-1:1),0,a.length-1)])}(this,t,o,s):_O(t,o,s);if(mt(i,t))return"sameValue";if(!i||!function(e,t){for(const o of t)if(void 0===e.definition.rows.find((e=>e.nameWithGranularity===o.field))&&void 0===e.definition.columns.find((e=>e.nameWithGranularity===o.field)))return!1;const{rowDomain:o,colDomain:s}=RO(e,t);return AO(o,e.getExpandedTableStructure().getRowTree())&&AO(s,e.getExpandedTableStructure().getColTree())}(this,i))throw new ii;const n=this._getPivotCellValueAndFormat(e.id,i);return this.strictMeasureValueToNumber(n)}getPivotValueCells(e){return this.getCollapsedTableStructure().getPivotCells().map((t=>t.filter((t=>"VALUE"===t.type&&t.measure===e)))).filter((e=>e.length>0))}measureValueToNumber(e){if("number"==typeof e.value)return e.value;if(!e.value)return 0;throw new Error(`Value ${e.value} is not a number`)}strictMeasureValueToNumber(e){if("number"==typeof e.value)return e.value;if(e.value)throw new Error(`Value ${e.value} is not a number`)}getCollapsedTableStructure(){const e=super.getCollapsedTableStructure();return this.sortTableStructure(e),e}getExpandedTableStructure(){const e=super.getExpandedTableStructure();return this.sortTableStructure(e),e}sortTableStructure(e){if(!this.definition.sortedColumn||e.isSorted)return;const t=this.definition.sortedColumn.measure;Wc(this.definition.sortedColumn,this)&&e.sort(t,this.definition.sortedColumn,((e,t)=>this._getPivotCellValueAndFormat(e,t)))}}}const wV=["ADD_PIVOT","UPDATE_PIVOT"];function IV(e){return wV.includes(e.type)}const xV=new n;xV.add("ALPHANUMERIC_INCREMENT_MODIFIER",{apply:(e,t)=>{e.current+=e.increment;const o=`${e.prefix}${e.current.toString().padStart(e.numberPostfixLength||0,"0")}`;return{cellData:{border:t.border,style:t.cell&&t.cell.style,format:t.cell&&t.cell.format,content:o},tooltip:{props:{content:o}}}}}).add("INCREMENT_MODIFIER",{apply:(e,t,o)=>{e.current+=e.increment;const s=e.current.toString(),i=o.getLocale(),n=bn(e.current,{format:t.cell?.format,locale:i});return{cellData:{border:t.border,style:t.cell&&t.cell.style,format:t.cell&&t.cell.format,content:s},tooltip:s?{props:{content:n}}:void 0}}}).add("DATE_INCREMENT_MODIFIER",{apply:(e,t,o)=>{const s=Ii(e.current,o.getLocale());s.setFullYear(s.getFullYear()+e.increment.years||0),s.setMonth(s.getMonth()+e.increment.months||0),s.setDate(s.getDate()+e.increment.days||0);const i=ds(s);e.current=i;const n=o.getLocale(),r=bn(i,{format:t.cell?.format,locale:n});return{cellData:{border:t.border,style:t.cell&&t.cell.style,format:t.cell&&t.cell.format,content:i.toString()},tooltip:i?{props:{content:r}}:void 0}}}).add("COPY_MODIFIER",{apply:(e,t,o)=>{const s=t.cell?.content||"",i={locale:o.getLocale(),format:t.cell?.format};return{cellData:{border:t.border,style:t.cell&&t.cell.style,format:t.cell&&t.cell.format,content:s},tooltip:s?{props:{content:t.cell?Wn(t.cell,i).formattedValue:""}}:void 0}}}).add("FORMULA_MODIFIER",{apply:(e,t,o,s)=>{e.current+=e.increment;let i=0,n=0;switch(s){case"up":i=0,n=-e.current;break;case"down":i=0,n=e.current;break;case"left":i=-e.current,n=0;break;case"right":i=e.current,n=0}const r=t.cell;if(!r||!r.isFormula)return{cellData:{}};const a=t.sheetId,l=o.getTranslatedCellFormula(a,i,n,r.compiledFormula.tokens);return{cellData:{border:t.border,style:r.style,format:r.format,content:l},tooltip:l?{props:{content:l}}:void 0}}});const EV=new n,RV=/(\d+)$/,TV=/^(.*\D+)/,AV=/^(.*\D+)(\d+)$/;function DV(e,t,o){let s=[],i=!1;for(const n of t){n===e&&(i=!0);const t=void 0===n||n.isFormula?void 0:Wn(n,{locale:$s,format:n.format});if(t&&o(t))s.push(t);else{if(i)return s;s=[]}}return s}function _V(e){let t=1;return e.length>=2&&(t=function(e){const t=[];let o=e[0];for(let s=1;s<e.length;s++){const i=e[s];t.push(i-o),o=i}return t.reduce(((e,t)=>e+t),0)/t.length}(e)*e.length),t}function OV(e){if(e.length<2)return 1;const t=e.map((e=>Ii(e,$s))),o=function(e){if(e.length<2)return[{years:0,months:0,days:0}];const t=e.map(((t,o)=>{if(0===o)return{years:0,months:0,days:0};const s=Zo.fromTimestamp(e[o-1].getTime()),i=Ss(s,t),n=vs(s,t)%12;s.setFullYear(s.getFullYear()+i),s.setMonth(s.getMonth()+n);return{years:i,months:n,days:bs(s,t)}}));return t.slice(1)}(t),s=(i=o).length<2?i[0]||{years:0,months:0,days:0}:i.every((e=>e.years===i[0].years&&e.months===i[0].months&&e.days===i[0].days))?i[0]:void 0;var i;if(void 0===s)return;const n=1===Object.values(s).filter((e=>0!==e)).length,r=Object.values(s).every((e=>0===e));if(!n||r){const o=t.map(((e,o)=>{if(0===o)return 0;const s=t[o-1];return Math.floor(e.getTime())-Math.floor(s.getTime())})).slice(1);if(o.every((e=>e===o[0])))return e.length*(e[1]-e[0])}return{years:s.years*e.length,months:s.months*e.length,days:s.days*e.length}}EV.add("simple_value_copy",{condition:(e,t)=>!(1!==t.length||e.isFormula||e.format&&Rn(e.format)),generateRule:()=>({type:"COPY_MODIFIER"}),sequence:10}).add("increment_alphanumeric_value",{condition:e=>!e.isFormula&&Wn(e,{locale:$s}).type===Ts.text&&AV.test(e.content),generateRule:(e,t,o)=>{const s=parseInt(e.content.match(RV)[0]),i=e.content.match(TV)[0],n=e.content.length-i.length,r=DV(e,t,(e=>e.type===Ts.text&&AV.test(e.value))).filter((e=>i===(e.value??"").toString().match(TV)[0])).map((e=>parseInt((e.value??"").toString().match(RV)[0])));let a=_V(r);return["up","left"].includes(o)&&1===r.length&&(a=-a),{type:"ALPHANUMERIC_INCREMENT_MODIFIER",prefix:i,current:s,increment:a,numberPostfixLength:n}},sequence:15}).add("copy_text",{condition:e=>!e.isFormula&&Wn(e,{locale:$s}).type===Ts.text,generateRule:()=>({type:"COPY_MODIFIER"}),sequence:20}).add("update_formula",{condition:e=>e.isFormula,generateRule:(e,t)=>({type:"FORMULA_MODIFIER",increment:t.length,current:0}),sequence:30}).add("increment_dates",{condition:(e,t)=>!e.isFormula&&Wn(e,{locale:$s}).type===Ts.number&&!!e.format&&Rn(e.format),generateRule:(e,t)=>{const o=OV(DV(e,t,(e=>e.type===Ts.number&&!!e.format&&Rn(e.format))).map((e=>Number(e.value))));if(void 0===o)return{type:"COPY_MODIFIER"};const s=Wn(e,{locale:$s});return"object"==typeof o?{type:"DATE_INCREMENT_MODIFIER",increment:o,current:s.type===Ts.number?s.value:0}:{type:"INCREMENT_MODIFIER",increment:o,current:s.type===Ts.number?s.value:0}},sequence:25}).add("increment_number",{condition:e=>!e.isFormula&&Wn(e,{locale:$s}).type===Ts.number,generateRule:(e,t,o)=>{const s=DV(e,t,(e=>e.type===Ts.number&&!Rn(e.format||""))).map((e=>Number(e.value)));let i=_V(s);["up","left"].includes(o)&&1===s.length&&(i=-i);const n=Wn(e,{locale:$s});return{type:"INCREMENT_MODIFIER",increment:i,current:n.type===Ts.number?n.value:0}},sequence:40});class FV extends Ek{static layers=[];getters;ui;selection;dispatch;canDispatch;constructor({getters:e,stateObserver:t,dispatch:o,canDispatch:s,uiActions:i,selection:n}){super(t),this.getters=e,this.ui=i,this.selection=n,this.dispatch=o,this.canDispatch=s}drawLayer(e,t){}}class PV{cells;getters;index=0;direction;constructor(e,t,o){this.cells=e,this.getters=t,this.direction=o}next(){const e=this.cells[this.index++%this.cells.length],t=e.rule,{cellData:o,tooltip:s}=xV.get(t.type).apply(t,e.data,this.getters,this.direction);return{cellData:o,tooltip:s,origin:{col:e.data.col,row:e.data.row}}}}const MV=new class extends n{addTransformation(e,t,o){this.content[e]||(this.content[e]=new Map);for(const s of t)this.content[e].set(s,o);return this}getTransformation(e,t){return this.content[t]&&this.content[t].get(e)}};const NV=new class extends n{add(e,t){return super.add(e,t),this}replace(e,t){return super.replace(e,t),this}get(e){return this.content[e]}};function kV(e,t){if("SPREADSHEET"!==e.pivot.type)return e;if(e.pivot.dataSet?.sheetId!==t.sheetId)return e;const o=Yc(e.pivot.dataSet.zone,t),s=o?{...e.pivot.dataSet,zone:o}:void 0;return{...e,pivot:{...e.pivot,dataSet:s}}}function VV(e,t){if(e.sheetId!==t.sheetId)return e;if(("FREEZE_COLUMNS"===e.type?"COL":"ROW")!==t.dimension)return e;let o=e.quantity;if("REMOVE_COLUMNS_ROWS"===t.type){const e=[...t.elements].sort(((e,t)=>t-e));for(const t of e)o>t&&o--}if("ADD_COLUMNS_ROWS"===t.type){o=o>("before"===t.position?t.base-1:t.base)?o+t.quantity:o}return o>0?{...e,quantity:o}:void 0}function LV(e,t){if(e.sheetId!==t.sheetId)return e;const o=Yc(e.zone,t);if(!o)return;const s=e.newTableRange?Xc(e.newTableRange,t):void 0;return{...e,newTableRange:s,zone:o}}function HV(e,t){if(e.sheetId!==t.sheetId||e.dimension!==t.dimension)return e;let o;if("REMOVE_COLUMNS_ROWS"===t.type)o=na(t.elements,[e.base])[0];else if("ADD_COLUMNS_ROWS"===t.type){o=ia(pt(t.position,t.base),t.quantity,[e.base])[0]}return void 0!==o?{...e,base:o}:void 0}function UV(e,t){if(e.sheetId!==t.sheetId||e.dimension!==t.dimension)return e;const o=je(e.start,e.end+1);let s=[];if("REMOVE_COLUMNS_ROWS"===t.type)s=na(t.elements,o);else if("ADD_COLUMNS_ROWS"===t.type){s=ia(pt(t.position,t.base),t.quantity,o)}return 0!==s.length?{...e,start:Math.min(...s),end:Math.max(...s)}:void 0}function BV(e,t){return(e=ze(e)).pivot.measures.map((e=>{e.computedBy&&(e.computedBy.formula=HS(e.computedBy.sheetId,e.computedBy.formula,t))})),e}function zV(e,t){return{...e,definition:sx(e.sheetId,e.definition,t)}}MV.addTransformation("ADD_COLUMNS_ROWS",["ADD_COLUMNS_ROWS"],HV),MV.addTransformation("REMOVE_COLUMNS_ROWS",["ADD_COLUMNS_ROWS"],HV),MV.addTransformation("DELETE_SHEET",["MOVE_RANGES"],(function(e,t){const o=t.sheetId;if(e.targetSheetId===o||e.sheetId===o)return;return e})),MV.addTransformation("DELETE_FIGURE",["UPDATE_FIGURE","UPDATE_CHART"],(function(e,t){if(e.figureId===t.figureId)return;return e})),MV.addTransformation("CREATE_SHEET",["CREATE_SHEET"],(function(e,t){e.sheetId===t.sheetId&&(e={...e,sheetId:`${e.sheetId}~`});if(e.name===t.name)return{...e,name:e.name?.match(/\d+/)?e.name.replace(/\d+/,(e=>(parseInt(e)+1).toString())):`${e.name}~`,position:e.position+1};return e})),MV.addTransformation("ADD_MERGE",["ADD_MERGE","REMOVE_MERGE"],(function(e,t){if(e.sheetId!==t.sheetId)return e;const o=[];for(const s of e.target)t.target.every((e=>!Sr(s,e)))&&o.push(s);if(o.length)return{...e,target:o};return})),MV.addTransformation("ADD_COLUMNS_ROWS",["FREEZE_COLUMNS","FREEZE_ROWS"],VV),MV.addTransformation("REMOVE_COLUMNS_ROWS",["FREEZE_COLUMNS","FREEZE_ROWS"],VV),MV.addTransformation("ADD_COLUMNS_ROWS",["UPDATE_TABLE"],LV),MV.addTransformation("REMOVE_COLUMNS_ROWS",["UPDATE_TABLE"],LV),MV.addTransformation("REMOVE_TABLE_STYLE",["CREATE_TABLE","UPDATE_TABLE"],(function(e,t){if(e.config?.styleId!==t.tableStyleId)return e;return{...e,config:{...e.config,styleId:mR.styleId}}})),MV.addTransformation("ADD_COLUMNS_ROWS",["GROUP_HEADERS","UNGROUP_HEADERS","FOLD_HEADER_GROUP","UNFOLD_HEADER_GROUP"],UV),MV.addTransformation("REMOVE_COLUMNS_ROWS",["GROUP_HEADERS","UNGROUP_HEADERS","FOLD_HEADER_GROUP","UNFOLD_HEADER_GROUP"],UV),MV.addTransformation("REMOVE_PIVOT",["RENAME_PIVOT","DUPLICATE_PIVOT","INSERT_PIVOT","UPDATE_PIVOT"],(function(e,t){if(e.pivotId===t.pivotId)return;return e})),MV.addTransformation("DELETE_SHEET",["ADD_PIVOT","UPDATE_PIVOT"],(function(e,t){if("SPREADSHEET"!==e.pivot.type)return e;if(e.pivot.dataSet?.sheetId===t.sheetId)return{...e,pivot:{...e.pivot,dataSet:void 0}};return e})),MV.addTransformation("ADD_COLUMNS_ROWS",["ADD_PIVOT","UPDATE_PIVOT"],kV),MV.addTransformation("REMOVE_COLUMNS_ROWS",["ADD_PIVOT","UPDATE_PIVOT"],kV),NV.add("UPDATE_CELL",(function(e,t){const o=e.content&&HS(e.sheetId,e.content,t);return{...e,content:o}})),NV.add("ADD_CONDITIONAL_FORMAT",(function(e,t){const o=e.cf.rule;if(e={...e,cf:{...e.cf}},"CellIsRule"===o.type)e.cf.rule={...o,values:o.values.map((o=>HS(e.sheetId,o,t)))};else if("ColorScaleRule"===o.type){const{minimum:s,maximum:i,midpoint:n}=o;e.cf.rule={...o,minimum:{...s,value:s.value&&HS(e.sheetId,s.value,t)},maximum:{...i,value:i.value&&HS(e.sheetId,i.value,t)},midpoint:n?{...n,value:HS(e.sheetId,n.value,t)}:void 0}}else if("IconSetRule"===o.type){const{upperInflectionPoint:s,lowerInflectionPoint:i}=o;e.cf.rule={...o,upperInflectionPoint:{...s,value:HS(e.sheetId,s.value,t)},lowerInflectionPoint:{...i,value:HS(e.sheetId,i.value,t)}}}else"DataBarRule"===o.type&&(e.cf.rule={...o,rangeValues:o.rangeValues?US(e.sheetId,o.rangeValues,t):void 0});return e})),NV.add("ADD_DATA_VALIDATION_RULE",(function(e,t){return(e={...e,rule:{...e.rule,criterion:{...e.rule.criterion}}}).rule.criterion.values=e.rule.criterion.values.map((o=>HS(e.sheetId,o,t))),e})),NV.add("ADD_PIVOT",BV),NV.add("UPDATE_PIVOT",BV),NV.add("CREATE_CHART",zV),NV.add("UPDATE_CHART",zV);const $V=[{match:function(e){return"sheetId"in e},fn:qV},{match:function(e){return"target"in e&&"sheetId"in e},fn:function(e,t){const o=qV(e,t);if("SKIP_TRANSFORMATION"!==o)return"IGNORE_COMMAND"===o?"IGNORE_COMMAND":e;const s=[];for(const o of e.target){const e=Yc(o,t);e&&s.push(e)}if(!s.length)return"IGNORE_COMMAND";return{...e,target:s}}},{match:function(e){return"sheetId"in e&&"zone"in e},fn:function(e,t){const o=qV(e,t);if("SKIP_TRANSFORMATION"!==o)return"IGNORE_COMMAND"===o?"IGNORE_COMMAND":e;const s=Yc(e.zone,t);if(s)return{...e,zone:s};return"IGNORE_COMMAND"}},{match:function(e){return"col"in e&&"row"in e&&"sheetId"in e},fn:function(e,t){const o=qV(e,t);if("SKIP_TRANSFORMATION"!==o)return"IGNORE_COMMAND"===o?"IGNORE_COMMAND":e;if("ADD_COLUMNS_ROWS"===t.type||"REMOVE_COLUMNS_ROWS"===t.type)return function(e,t){const o="COL"===t.dimension?"col":"row";let s=e[o];if("REMOVE_COLUMNS_ROWS"===t.type){const e=[...t.elements].sort(((e,t)=>t-e));if(e.includes(s))return"IGNORE_COMMAND";for(const t of e)s>=t&&s--}"ADD_COLUMNS_ROWS"===t.type&&(s>t.base||s===t.base&&"before"===t.position)&&(s+=t.quantity);return{...e,[o]:s}}(e,t);if("ADD_MERGE"===t.type)return function(e,t){for(const o of t.target){if(!(e.col===o.left&&e.row===o.top)&&Cr(e.col,e.row,o))return"IGNORE_COMMAND"}return e}(e,t);return"SKIP_TRANSFORMATION"}},{match:function(e){return"dimension"in e&&"sheetId"in e&&"elements"in e},fn:function(e,t){const o=qV(e,t);if("SKIP_TRANSFORMATION"!==o)return"IGNORE_COMMAND"===o?"IGNORE_COMMAND":e;if("ADD_COLUMNS_ROWS"!==t.type&&"REMOVE_COLUMNS_ROWS"!==t.type)return"SKIP_TRANSFORMATION";if(t.dimension!==e.dimension)return e;let s=[];if("REMOVE_COLUMNS_ROWS"===t.type)s=na(t.elements,e.elements);else if("ADD_COLUMNS_ROWS"===t.type){s=ia(pt(t.position,t.base),t.quantity,e.elements)}if(0===s.length)return"IGNORE_COMMAND";return{...e,elements:s}}},{match:function(e){return"ranges"in e},fn:function(e,t){if(!("sheetId"in t))return e;const o=e.ranges.map((e=>Xc(e,t))).filter(lt);if(!o.length)return"IGNORE_COMMAND";return{...e,ranges:o}}}];function GV(e,t){const o=MV.getTransformation(e.type,t.type),s=o?o(e,t):function(e,t){for(const{match:o,fn:s}of $V)if(o(e)){const o=s(e,t);if("SKIP_TRANSFORMATION"===o)continue;if("IGNORE_COMMAND"===o)return;e=o}return e}(e,t);return s?function(e,t){const o=NV.get(e.type);if(!o)return e;const s=ba(t);if(s)return o(e,s);return e}(s,t):s}function WV(e,t){let o=[...e];const s=new Set(MV.getKeys());for(const e of t)s.has(e.type)&&(o=o.reduce(((t,o)=>{const s=GV(o,e);return s&&t.push(s),t}),[]));return o}function qV(e,t){if(!("sheetId"in t))return e;const o="DELETE_SHEET"===t.type&&t.sheetId;return e.sheetId===o?"IGNORE_COMMAND":"CREATE_SHEET"===e.type||"CREATE_SHEET"===t.type||e.sheetId!==t.sheetId?e:"SKIP_TRANSFORMATION"}class ZV{rootCommand;timestamp;id;clientId;_commands=[];_changes=[];constructor(e,t,o,s,i,n){this.rootCommand=s,this.timestamp=n,this.id=e,this.clientId=t,this._commands=[...o],this._changes=i?[...i]:[]}setChanges(e){this._changes=e}get commands(){return this._commands}get changes(){return this._changes}}class jV extends Error{}class YV extends Kc{revisions;transportService;serverRevisionId;clients={};clientId="local";debouncedMove;pendingMessages=[];awaitingClientPosition;waitingAck=!1;waitingUndoRedoAck=!1;isReplayingInitialRevisions=!1;processedRevisions=new Set;lastRevisionMessage=void 0;uuidGenerator=new Wa;lastLocalOperation;constructor(e,t,o=Se){super(),this.revisions=e,this.transportService=t,this.serverRevisionId=o,this.debouncedMove=ht(this._move.bind(this),200)}canApplyOptimisticUpdate(){return!this.waitingUndoRedoAck}save(e,t,o){if(!t.length||!o.length||!this.canApplyOptimisticUpdate())return;const s=new ZV(this.uuidGenerator.uuidv4(),this.clientId,t,e,o,Date.now());this.revisions.append(s.id,s),"REQUEST_REDO"!==e.type&&(this.lastLocalOperation=s),this.trigger("new-local-state-update",{id:s.id}),this.sendUpdateMessage({type:"REMOTE_REVISION",version:1,serverRevisionId:this.serverRevisionId,nextRevisionId:s.id,clientId:s.clientId,commands:s.commands})}undo(e){this.waitingUndoRedoAck=!0,this.sendUpdateMessage({type:"REVISION_UNDONE",version:1,serverRevisionId:this.serverRevisionId,nextRevisionId:this.uuidGenerator.uuidv4(),undoneRevisionId:e})}redo(e){this.waitingUndoRedoAck=!0,this.sendUpdateMessage({type:"REVISION_REDONE",version:1,serverRevisionId:this.serverRevisionId,nextRevisionId:this.uuidGenerator.uuidv4(),redoneRevisionId:e})}move(e){this.debouncedMove(e)}join(e){e?(this.clients[e.id]=e,this.clientId=e.id):(this.clients.local={id:"local",name:"local"},this.clientId="local"),this.transportService.onNewMessage(this.clientId,this.onMessageReceived.bind(this)),this.awaitingClientPosition&&(this._move(this.awaitingClientPosition),this.awaitingClientPosition=void 0)}loadInitialMessages(e){const t=performance.now(),o=e.reduce(((e,t)=>e+("REMOTE_REVISION"===t.type?t.commands.length:1)),0);this.isReplayingInitialRevisions=!0;for(const t of e)this.onMessageReceived(t);this.isReplayingInitialRevisions=!1,console.debug("Replayed",o,"commands in",performance.now()-t,"ms")}async leave(e){e&&1===Object.keys(this.clients).length&&this.lastRevisionMessage&&"SNAPSHOT_CREATED"!==this.lastRevisionMessage?.type&&await this.snapshot(e()),delete this.clients[this.clientId],this.transportService.leave(this.clientId),this.transportService.sendMessage({type:"CLIENT_LEFT",clientId:this.clientId,version:1})}async snapshot(e){if(0!==this.pendingMessages.length)return;const t=this.uuidGenerator.uuidv4();await this.transportService.sendMessage({type:"SNAPSHOT",nextRevisionId:t,serverRevisionId:this.serverRevisionId,data:{...e,revisionId:t},version:1})}getCurrentClient(){return this.getClient(this.clientId)}getClient(e){const t=this.clients[e];if(!t)throw new jV("The client left the session");return t}getConnectedClients(){return new Set(Object.values(this.clients).filter(lt))}getRevisionId(){return this.serverRevisionId}isFullySynchronized(){return 0===this.pendingMessages.length}getLastLocalNonEmptyRevision(){return this.lastLocalOperation}_move(e){if(!this.clients[this.clientId])return void(this.awaitingClientPosition=e);const t=this.clients[this.clientId]?.position;if(t?.col===e.col&&t.row===e.row&&t.sheetId===e.sheetId)return;const o=t?"CLIENT_MOVED":"CLIENT_JOINED",s=this.getCurrentClient();this.clients[this.clientId]={...s,position:e},this.transportService.sendMessage({type:o,version:1,client:{...s,position:e}})}onMessageReceived(e){if(!this.isAlreadyProcessed(e))if(this.isWrongServerRevisionId(e))this.trigger("unexpected-revision-id");else{switch(e.type){case"CLIENT_MOVED":this.onClientMoved(e);break;case"CLIENT_JOINED":this.onClientJoined(e);break;case"CLIENT_LEFT":this.onClientLeft(e);break;case"REVISION_REDONE":this.revisions.redo(e.redoneRevisionId,e.nextRevisionId,e.serverRevisionId),this.trigger("revision-redone",{revisionId:e.redoneRevisionId,commands:this.revisions.get(e.redoneRevisionId).commands});break;case"REVISION_UNDONE":this.revisions.undo(e.undoneRevisionId,e.nextRevisionId,e.serverRevisionId),this.trigger("revision-undone",{revisionId:e.undoneRevisionId,commands:this.revisions.get(e.undoneRevisionId).commands});break;case"REMOTE_REVISION":const{clientId:t,commands:o,timestamp:s}=e,i=new ZV(e.nextRevisionId,t,o,void 0,void 0,s);if(i.clientId!==this.clientId){this.revisions.insert(i.id,i,e.serverRevisionId);const t=this.pendingMessages.filter((e=>"REMOTE_REVISION"===e.type)).map((e=>e.commands)).flat();this.trigger("remote-revision-received",{commands:WV(o,t)})}break;case"SNAPSHOT_CREATED":{const t=new ZV(e.nextRevisionId,"server",[],void 0,void 0,Date.now());this.revisions.insert(t.id,t,e.serverRevisionId),this.dropPendingHistoryMessages(),this.trigger("snapshot"),this.lastLocalOperation=void 0;break}}this.acknowledge(e),this.trigger("collaborative-event-received")}}onClientMoved(e){e.client.id!==this.clientId&&(this.clients[e.client.id]=e.client)}onClientJoined(e){if(e.client.id!==this.clientId){this.clients[e.client.id]=e.client;const t=this.clients[this.clientId];if(t){const{position:e}=t;e&&this.transportService.sendMessage({type:"CLIENT_MOVED",version:1,client:{...t,position:e}})}}}onClientLeft(e){e.clientId!==this.clientId&&delete this.clients[e.clientId]}sendUpdateMessage(e){this.pendingMessages.push(e),this.waitingAck||this.sendPendingMessage()}sendPendingMessage(){let e=this.pendingMessages[0];if(e){if("REMOTE_REVISION"===e.type){let t=this.revisions.get(e.nextRevisionId);0===t.commands.length&&(this.revisions.rebase(t.id),t=this.revisions.get(e.nextRevisionId)),e={...e,clientId:t.clientId,commands:t.commands}}if(this.isReplayingInitialRevisions)throw new Error(`Trying to send a new revision while replaying initial revision. This can lead to endless dispatches every time the spreadsheet is open.\n ${JSON.stringify(e)}`);this.waitingAck=!0,this.transportService.sendMessage({...e,serverRevisionId:this.serverRevisionId})}}acknowledge(e){switch("REVISION_UNDONE"!==e.type&&"REVISION_REDONE"!==e.type||(this.waitingUndoRedoAck=!1),e.type){case"REMOTE_REVISION":case"REVISION_REDONE":case"SNAPSHOT_CREATED":this.waitingAck=!1,this.pendingMessages=this.pendingMessages.filter((t=>t.nextRevisionId!==e.nextRevisionId)),this.serverRevisionId=e.nextRevisionId,this.processedRevisions.add(e.nextRevisionId),this.lastRevisionMessage=e,this.sendPendingMessage();break;case"REVISION_UNDONE":{this.waitingAck=!1,this.pendingMessages=this.pendingMessages.filter((t=>t.nextRevisionId!==e.nextRevisionId));const t=this.pendingMessages.findIndex((e=>"REMOTE_REVISION"===e.type));-1!==t&&this.revisions.rebase(this.pendingMessages[t].nextRevisionId),this.serverRevisionId=e.nextRevisionId,this.processedRevisions.add(e.nextRevisionId),this.sendPendingMessage();break}}}isAlreadyProcessed(e){if("CLIENT_MOVED"===e.type&&e.client.id===this.clientId)return!0;switch(e.type){case"REMOTE_REVISION":case"REVISION_REDONE":case"REVISION_UNDONE":case"SNAPSHOT_CREATED":return this.processedRevisions.has(e.nextRevisionId);default:return!1}}isWrongServerRevisionId(e){switch(e.type){case"REMOTE_REVISION":case"REVISION_REDONE":case"REVISION_UNDONE":case"SNAPSHOT_CREATED":return e.serverRevisionId!==this.serverRevisionId;default:return!1}}dropPendingHistoryMessages(){this.waitingUndoRedoAck=!1,this.pendingMessages=this.pendingMessages.filter((({type:e})=>"REVISION_REDONE"!==e&&"REVISION_UNDONE"!==e))}}const XV=new Set(["HIDE_COLUMNS_ROWS","UNHIDE_COLUMNS_ROWS","UNFOLD_HEADER_GROUP","UNGROUP_HEADERS","FOLD_HEADER_GROUP","FOLD_ALL_HEADER_GROUPS","UNFOLD_ALL_HEADER_GROUPS","FOLD_HEADER_GROUPS_IN_ZONE","UNFOLD_HEADER_GROUPS_IN_ZONE","CREATE_TABLE","UPDATE_TABLE","UPDATE_FILTER","REMOVE_TABLE","RESIZE_TABLE","CREATE_TABLE_STYLE","REMOVE_TABLE_STYLE"]);function KV(e){return XV.has(e.type)}const JV=[QV,function(e,t){return"target"in t&&Array.isArray(t.target)?{...ze(t),target:e.getSelectedZones()}:t},tL,function(e,t){return"ranges"in t?{...ze(t),ranges:e.getSelectedZones().map((t=>e.getRangeDataFromZone(e.getActiveSheetId(),t)))}:t}];function QV(e,t){return"sheetId"in t?{...ze(t),sheetId:e.getActiveSheetId()}:t}function eL(e,t){return"zone"in t?{...ze(t),zone:e.getSelectedZone()}:t}function tL(e,t){if(!("row"in t)||!("col"in t))return t;const{col:o,row:s}=e.getActivePosition();return{...ze(t),col:o,row:s}}const oL=new Wa;function sL(e,t){const o=e.getSelectedZone();return{...QV(e,t),elements:"COL"===t.dimension?je(o.left,o.right+1):je(o.top,o.bottom+1)}}function iL(e,t){const o=e.getSelectedZone();return{...ze(t),zone:o}}function nL(e,t){const o=ze(t),s=e.getSelectedZone(),{top:i,bottom:n,left:r,right:a}=s;return"cols"in o?o.cols=je(r,a+1):"rows"in o&&(o.rows=je(i,n+1)),o}function rL(e,t){const o=e.getSelectedZone();return{...QV(e,t),start:"COL"===t.dimension?o.left:o.top,end:"COL"===t.dimension?o.right:o.bottom}}const aL=new n;aL.add("UPDATE_CELL",cL),aL.add("CLEAR_CELL",cL),aL.add("CLEAR_CELLS",cL),aL.add("DELETE_CONTENT",cL),aL.add("ADD_MERGE",cL),aL.add("REMOVE_MERGE",cL),aL.add("SET_FORMATTING",cL),aL.add("CLEAR_FORMATTING",cL),aL.add("SET_BORDER",cL),aL.add("CREATE_TABLE",cL),aL.add("REMOVE_TABLE",cL),aL.add("HIDE_SHEET",cL),aL.add("ADD_COLUMNS_ROWS",(function(e,t){const o=e.getActivePosition();return{...QV(e,t),base:"COL"===t.dimension?o.col:o.row}})),aL.add("REMOVE_COLUMNS_ROWS",sL),aL.add("HIDE_COLUMNS_ROWS",sL),aL.add("RESIZE_COLUMNS_ROWS",sL),aL.add("CREATE_SHEET",(function(e,t){const o=ze(t);o.sheetId=oL.smallUuid();const s=t.name||e.getSheet(e.getActiveSheetId()).name,i=s.match(/(.+?)\d*$/)?.[1]||s;return o.name=e.getNextSheetName(i),o})),aL.add("CREATE_FIGURE",(function(e,t){const o=tL(e,QV(e,t));return o.figureId=oL.smallUuid(),o})),aL.add("CREATE_CHART",(function(e,t){return{...QV(e,t),figureId:oL.smallUuid()}})),aL.add("CREATE_IMAGE",(function(e,t){return{...QV(e,t),figureId:oL.smallUuid()}})),aL.add("GROUP_HEADERS",rL),aL.add("UNGROUP_HEADERS",rL),aL.add("UNFOLD_HEADER_GROUPS_IN_ZONE",eL),aL.add("FOLD_HEADER_GROUPS_IN_ZONE",eL);const lL=new n;function cL(e,t){let o=ze(t);for(const t of JV)o=t(e,o);return o}function hL(e,t){if(e.rootCommand&&"object"==typeof e.rootCommand)return ks(e.rootCommand)?function(e,t){if(!t)return;if(!aL.contains(t.type))return;return aL.get(t.type)(e,t)}(t,e.rootCommand):function(e,t,o){if(!lL.contains(t.type))return;return lL.get(t.type)(e,t,o)}(t,e.rootCommand,e.commands)}lL.add("PASTE",(function(e,t){return{type:"REPEAT_PASTE",pasteOption:ze(t.pasteOption),target:e.getSelectedZones()}})),lL.add("INSERT_CELL",iL),lL.add("DELETE_CELL",iL),lL.add("AUTORESIZE_COLUMNS",nL),lL.add("AUTORESIZE_ROWS",nL),lL.add("SORT_CELLS",(function(e,t){const o=e.getSelectedZone();return{...QV(e,t),col:o.left,row:o.top,zone:o}})),lL.add("SUM_SELECTION",cL),lL.add("SET_DECIMAL",cL),lL.add("DELETE_UNFILTERED_CONTENT",cL);class dL{trackedValues=new Set;domainToArray(e){return e.flatMap((e=>[e.field,Si(e.value)]))}isValuePresent(e,t){const o=JSON.stringify({measure:e,domain:this.domainToArray(t)});return this.trackedValues.has(o)}isHeaderPresent(e){const t=JSON.stringify({domain:this.domainToArray(e)});return this.trackedValues.has(t)}trackValue(e,t){const o=JSON.stringify({measure:e,domain:this.domainToArray(t)});this.trackedValues.add(o)}trackHeader(e){const t=JSON.stringify({domain:this.domainToArray(e)});this.trackedValues.add(t)}}const uL=5242880;const gL={filterType:"criterion",type:"none",values:[]};class pL{getters;sheetId;boundaries;top;bottom;left;right;offsetX;offsetY;canScrollVertically;canScrollHorizontally;viewportWidth;viewportHeight;offsetCorrectionX;offsetCorrectionY;constructor(e,t,o,s,i,n){if(this.getters=e,this.sheetId=t,this.boundaries=o,s.width<0||s.height<0)throw new Error("Viewport size cannot be negative");this.viewportWidth=s.height&&s.width,this.viewportHeight=s.width&&s.height,this.top=o.top,this.bottom=o.bottom,this.left=o.left,this.right=o.right,this.offsetX=n.x,this.offsetY=n.y,this.canScrollVertically=i.canScrollVertically,this.canScrollHorizontally=i.canScrollHorizontally,this.offsetCorrectionX=this.getters.getColDimensions(this.sheetId,this.boundaries.left).start,this.offsetCorrectionY=this.getters.getRowDimensions(this.sheetId,this.boundaries.top).start,this.adjustViewportOffsetX(),this.adjustViewportOffsetY()}getMaxSize(){const e=this.getters.findLastVisibleColRowIndex(this.sheetId,"COL",{first:this.boundaries.left,last:this.boundaries.right}),t=this.getters.findLastVisibleColRowIndex(this.sheetId,"ROW",{first:this.boundaries.top,last:this.boundaries.bottom}),{end:o}=this.getters.getColDimensions(this.sheetId,e),{end:s}=this.getters.getRowDimensions(this.sheetId,t);let i=o-this.offsetCorrectionX;this.canScrollHorizontally&&(i=Math.max(i,this.viewportWidth));let n=s-this.offsetCorrectionY;return this.canScrollVertically&&(n=Math.max(n,this.viewportHeight),s+he>n&&!this.getters.isReadonly()&&(n+=he)),{width:i,height:n}}getColIndex(e){return e<this.offsetCorrectionX||e>this.offsetCorrectionX+this.viewportWidth?-1:this.searchHeaderIndex("COL",e-this.offsetCorrectionX+this.snapCorrection.x,this.left)}getRowIndex(e){return e<this.offsetCorrectionY||e>this.offsetCorrectionY+this.viewportHeight?-1:this.searchHeaderIndex("ROW",e-this.offsetCorrectionY+this.snapCorrection.y,this.top)}adjustPosition(e){const t=this.sheetId,o=this.getters.getMainCellPosition({sheetId:t,...e}),{col:s,row:i}=this.getters.getNextVisibleCellPosition(o);Cr(s,this.boundaries.top,this.boundaries)&&this.adjustPositionX(s),Cr(this.boundaries.left,i,this.boundaries)&&this.adjustPositionY(i)}adjustPositionX(e){const t=this.sheetId,{start:o,end:s}=this.getters.getColDimensions(t,e);this.offsetX+this.viewportWidth+this.offsetCorrectionX<s?this.offsetX=s-this.viewportWidth:this.offsetX+this.offsetCorrectionX>o&&(this.offsetX=o-this.offsetCorrectionX),this.adjustViewportZoneX()}adjustPositionY(e){const t=this.sheetId,{start:o,end:s}=this.getters.getRowDimensions(t,e);this.offsetY+this.viewportHeight+this.offsetCorrectionY<s?this.offsetY=s-this.viewportHeight:this.offsetY+this.offsetCorrectionY>o&&(this.offsetY=o-this.offsetCorrectionY),this.adjustViewportZoneY()}willNewOffsetScrollViewport(e,t){return this.canScrollHorizontally&&this.offsetX!==e||this.canScrollVertically&&this.offsetY!==t}setViewportOffset(e,t){this.setViewportOffsetX(e),this.setViewportOffsetY(t)}adjustViewportZone(){this.adjustViewportZoneX(),this.adjustViewportZoneY()}getVisibleRect(e){const t=vr(e,this),o=this.snapCorrection.x,s=this.snapCorrection.y;if(t){return{x:this.getters.getColRowOffset("COL",this.left,t.left)+this.offsetCorrectionX-(this.left!==t.left?o:0),y:this.getters.getColRowOffset("ROW",this.top,t.top)+this.offsetCorrectionY-(this.top!==t.top?s:0),width:Math.min(this.getters.getColRowOffset("COL",t.left,t.right+1)-(this.left===t.left?o:0),this.viewportWidth),height:Math.min(this.getters.getColRowOffset("ROW",t.top,t.bottom+1)-(this.top===t.top?s:0),this.viewportHeight)}}}getFullRect(e){const t=vr(e,this.boundaries),o=this.snapCorrection.x,s=this.snapCorrection.y;if(t){return{x:this.getters.getColRowOffset("COL",this.left,e.left)+this.offsetCorrectionX-o,y:this.getters.getColRowOffset("ROW",this.top,e.top)+this.offsetCorrectionY-s,width:this.getters.getColRowOffset("COL",e.left,e.right+1),height:this.getters.getColRowOffset("ROW",e.top,e.bottom+1)}}}isVisible(e,t){return t<=this.bottom&&t>=this.top&&e>=this.left&&e<=this.right&&!this.getters.isColHidden(this.sheetId,e)&&!this.getters.isRowHidden(this.sheetId,t)}searchHeaderIndex(e,t,o=0){if(this.viewportWidth<=0||this.viewportHeight<=0)return-1;const s=this.sheetId,i=this.getters.getNumberHeaders(s,e);let n=o,r=i;for(;n<=r&&n!==i&&-1!==r;){const i=Math.floor((n+r)/2),a=this.getters.getColRowOffset(e,o,i),l=this.getters.getHeaderSize(s,e,i);if(t>=a&&t<a+l)return i;t>=a+l?n=i+1:r=i-1}return-1}setViewportOffsetX(e){this.canScrollHorizontally&&(this.offsetX=e,this.adjustViewportZoneX())}setViewportOffsetY(e){this.canScrollVertically&&(this.offsetY=e,this.adjustViewportZoneY())}adjustViewportOffsetX(){if(this.canScrollHorizontally){const{width:e}=this.getMaxSize();this.viewportWidth+this.offsetX>e&&(this.offsetX=Math.max(0,e-this.viewportWidth))}this.adjustViewportZoneX()}adjustViewportOffsetY(){if(this.canScrollVertically){const{height:e}=this.getMaxSize();this.viewportHeight+this.offsetY>e&&(this.offsetY=Math.max(0,e-this.viewportHeight))}this.adjustViewportZoneY()}adjustViewportZoneX(){this.left=this.searchHeaderIndex("COL",this.offsetX,this.boundaries.left),this.right=Math.min(this.boundaries.right,this.searchHeaderIndex("COL",Math.max(this.viewportWidth+this.snapCorrection.x-.1),this.left)),this.viewportWidth&&(-1===this.left&&(this.left=this.boundaries.left),-1===this.right&&(this.right=this.boundaries.right))}adjustViewportZoneY(){this.top=this.searchHeaderIndex("ROW",this.offsetY,this.boundaries.top),this.bottom=Math.min(this.boundaries.bottom,this.searchHeaderIndex("ROW",Math.max(this.viewportHeight+this.snapCorrection.y-.1,0),this.top)),this.viewportHeight&&(-1===this.top&&(this.top=this.boundaries.top),-1===this.bottom&&(this.bottom=this.boundaries.bottom))}get snapCorrection(){return{x:Math.abs(this.offsetX-this.getters.getColRowOffset("COL",this.boundaries.left,Math.max(0,this.left))),y:Math.abs(this.offsetY-this.getters.getColRowOffset("ROW",this.boundaries.top,Math.max(0,this.top)))}}}const mL=(new n).add("settings",class extends Rk{static getters=["getLocale"];locale=$s;allowDispatch(e){return"UPDATE_LOCALE"===e.type?Sl(e.locale)?"Success":"InvalidLocale":"Success"}handle(e){if("UPDATE_LOCALE"===e.type){const t=this.locale,o=e.locale;this.history.update("locale",o),this.changeCellsDateFormatWithLocale(t,o)}}getLocale(){return this.locale}changeCellsDateFormatWithLocale(e,t){for(const o of this.getters.getSheetIds())for(const[s,i]of Object.entries(this.getters.getCells(o))){let o;if(i.format===e.dateFormat&&(o=t.dateFormat),i.format===e.timeFormat&&(o=t.timeFormat),i.format===Pl(e)&&(o=Pl(t)),o){const{col:e,row:t,sheetId:i}=this.getters.getCellPosition(s);this.dispatch("UPDATE_CELL",{col:e,row:t,sheetId:i,format:o})}}}import(e){this.locale=e.settings?.locale??$s}export(e){e.settings={locale:this.locale}}}).add("sheet",class extends Rk{static getters=["getSheetName","tryGetSheetName","getSheet","tryGetSheet","getSheetIdByName","getSheetIds","getVisibleSheetIds","isSheetVisible","doesHeaderExist","doesHeadersExist","getCell","getCellPosition","getColsZone","getRowCells","getRowsZone","getNumberCols","getNumberRows","getNumberHeaders","getGridLinesVisibility","getNextSheetName","getSheetSize","getSheetZone","getPaneDivisions","checkZonesExistInSheet","getCommandZones","getUnboundedZone","checkElementsIncludeAllNonFrozenHeaders","getDuplicateSheetName"];sheetIdsMapName={};orderedSheetIds=[];sheets={};cellPosition={};allowDispatch(e){const t=this.chainValidations(this.checkSheetExists,this.checkZonesAreInSheet)(e);if("Success"!==t)return t;switch(e.type){case"HIDE_SHEET":return 1===this.getVisibleSheetIds().length?"NotEnoughSheets":"Success";case"CREATE_SHEET":return this.checkValidations(e,this.checkSheetName,this.checkSheetPosition);case"DUPLICATE_SHEET":return this.sheets[e.sheetIdTo]?"DuplicatedSheetId":this.orderedSheetIds.map(this.getSheetName.bind(this)).includes(e.sheetNameTo)?"DuplicatedSheetName":"Success";case"MOVE_SHEET":try{const t=this.orderedSheetIds.findIndex((t=>t===e.sheetId));return this.findIndexOfTargetSheet(t,e.delta),"Success"}catch(e){return"WrongSheetMove"}case"RENAME_SHEET":return this.isRenameAllowed(e);case"COLOR_SHEET":return!e.color||Gt(e.color)?"Success":"InvalidColor";case"DELETE_SHEET":return this.getVisibleSheetIds().length>1?"Success":"NotEnoughSheets";case"ADD_COLUMNS_ROWS":return this.doesHeaderExist(e.sheetId,e.dimension,e.base)?e.quantity<=0?"InvalidQuantity":"Success":"InvalidHeaderIndex";case"REMOVE_COLUMNS_ROWS":{const t=Ft(e.elements),o=Ot(e.elements);return t<0||!this.doesHeaderExist(e.sheetId,e.dimension,o)?"InvalidHeaderIndex":this.checkElementsIncludeAllNonFrozenHeaders(e.sheetId,e.dimension,e.elements)?"NotEnoughElements":"Success"}case"FREEZE_ROWS":return this.checkValidations(e,this.checkRowFreezeQuantity,this.checkRowFreezeOverlapMerge);case"FREEZE_COLUMNS":return this.checkValidations(e,this.checkColFreezeQuantity,this.checkColFreezeOverlapMerge);default:return"Success"}}handle(e){switch(e.type){case"SET_GRID_LINES_VISIBILITY":this.setGridLinesVisibility(e.sheetId,e.areGridLinesVisible);break;case"CREATE_SHEET":const t=this.createSheet(e.sheetId,e.name||this.getNextSheetName(),e.cols||26,e.rows||100,e.position);this.history.update("sheetIdsMapName",t.name,t.id);break;case"MOVE_SHEET":this.moveSheet(e.sheetId,e.delta);break;case"RENAME_SHEET":this.renameSheet(this.sheets[e.sheetId],e.newName);break;case"COLOR_SHEET":this.history.update("sheets",e.sheetId,"color",e.color);break;case"HIDE_SHEET":this.hideSheet(e.sheetId);break;case"SHOW_SHEET":this.showSheet(e.sheetId);break;case"DUPLICATE_SHEET":this.duplicateSheet(e.sheetId,e.sheetIdTo,e.sheetNameTo);break;case"DELETE_SHEET":this.deleteSheet(this.sheets[e.sheetId]);break;case"REMOVE_COLUMNS_ROWS":"COL"===e.dimension?this.removeColumns(this.sheets[e.sheetId],[...e.elements]):this.removeRows(this.sheets[e.sheetId],[...e.elements]);break;case"ADD_COLUMNS_ROWS":"COL"===e.dimension?this.addColumns(this.sheets[e.sheetId],e.base,e.position,e.quantity):this.addRows(this.sheets[e.sheetId],e.base,e.position,e.quantity);break;case"UPDATE_CELL_POSITION":this.updateCellPosition(e);break;case"FREEZE_COLUMNS":this.setPaneDivisions(e.sheetId,e.quantity,"COL");break;case"FREEZE_ROWS":this.setPaneDivisions(e.sheetId,e.quantity,"ROW");break;case"UNFREEZE_ROWS":this.setPaneDivisions(e.sheetId,0,"ROW");break;case"UNFREEZE_COLUMNS":this.setPaneDivisions(e.sheetId,0,"COL");break;case"UNFREEZE_COLUMNS_ROWS":this.setPaneDivisions(e.sheetId,0,"COL"),this.setPaneDivisions(e.sheetId,0,"ROW")}}import(e){for(const t of e.sheets)this.sheetIdsMapName[t.name]=t.id;for(const t of e.sheets){const e=t.name||"Sheet"+(Object.keys(this.sheets).length+1),{colNumber:o,rowNumber:s}=this.getImportedSheetSize(t),i={id:t.id,name:e,numberOfCols:o,rows:sa(s),areGridLinesVisible:void 0===t.areGridLinesVisible||t.areGridLinesVisible,isVisible:t.isVisible,panes:{xSplit:t.panes?.xSplit||0,ySplit:t.panes?.ySplit||0},color:t.color};this.orderedSheetIds.push(i.id),this.sheets[i.id]=i}}exportSheets(e){e.sheets=this.orderedSheetIds.filter(lt).map((e=>{const t=this.sheets[e],o={id:t.id,name:t.name,colNumber:t.numberOfCols,rowNumber:this.getters.getNumberRows(t.id),rows:{},cols:{},merges:[],cells:{},styles:{},formats:{},borders:{},conditionalFormats:[],dataValidationRules:[],figures:[],tables:[],areGridLinesVisible:void 0===t.areGridLinesVisible||t.areGridLinesVisible,isVisible:t.isVisible,color:t.color};return(t.panes.xSplit||t.panes.ySplit)&&(o.panes=t.panes),o}))}export(e){this.exportSheets(e)}exportForExcel(e){this.exportSheets(e)}getGridLinesVisibility(e){return this.getSheet(e).areGridLinesVisible}tryGetSheet(e){return this.sheets[e]}getSheet(e){const t=this.sheets[e];if(!t)throw new Error(`Sheet ${e} not found.`);return t}isSheetVisible(e){return this.getSheet(e).isVisible}getSheetName(e){return this.getSheet(e).name}tryGetSheetName(e){return this.tryGetSheet(e)?.name}getSheetIdByName(e){if(e){const t=$e(e);for(const e in this.sheetIdsMapName)if(la(e,t))return this.sheetIdsMapName[e]}}getSheetIds(){return this.orderedSheetIds}getVisibleSheetIds(){return this.orderedSheetIds.filter(this.isSheetVisible.bind(this))}doesHeaderExist(e,t,o){return"COL"===t?o>=0&&o<this.getNumberCols(e):o>=0&&o<this.getNumberRows(e)}doesHeadersExist(e,t,o){return o.every((o=>this.doesHeaderExist(e,t,o)))}getCell({sheetId:e,col:t,row:o}){const s=this.tryGetSheet(e),i=s?.rows[o]?.cells[t];if(void 0!==i)return this.getters.getCellById(i)}getColsZone(e,t,o){return{top:0,bottom:this.getNumberRows(e)-1,left:t,right:o}}getRowCells(e,t){return Object.values(this.getSheet(e).rows[t]?.cells).filter(lt)}getRowsZone(e,t,o){return{top:t,bottom:o,left:0,right:this.getSheet(e).numberOfCols-1}}getCellPosition(e){const t=this.cellPosition[e];if(!t)throw new Error(`asking for a cell position that doesn't exist, cell id: ${e}`);return t}getNumberCols(e){return this.getSheet(e).numberOfCols}getNumberRows(e){return this.getSheet(e).rows.length}getNumberHeaders(e,t){return"COL"===t?this.getNumberCols(e):this.getNumberRows(e)}getNextSheetName(e="Sheet"){return ra(this.orderedSheetIds.map(this.getSheetName.bind(this)),e)}getSheetSize(e){return{numberOfRows:this.getNumberRows(e),numberOfCols:this.getNumberCols(e)}}getSheetZone(e){return{top:0,left:0,bottom:this.getNumberRows(e)-1,right:this.getNumberCols(e)-1}}getUnboundedZone(e,t){if(void 0===t.bottom||void 0===t.right)return t;const o=0===t.left&&t.right===this.getNumberCols(e)-1,s=0===t.top&&t.bottom===this.getNumberRows(e)-1;return{...t,bottom:s?void 0:t.bottom,right:o&&!s?void 0:t.right}}getPaneDivisions(e){return this.getSheet(e).panes}setPaneDivisions(e,t,o){const s={...this.getPaneDivisions(e)};"COL"===o?s.xSplit=t:"ROW"===o&&(s.ySplit=t),this.history.update("sheets",e,"panes",s)}checkElementsIncludeAllNonFrozenHeaders(e,t,o){const s=this.getters.getPaneDivisions(e),i="ROW"===t?s.ySplit:s.xSplit,n=this.getters.getNumberHeaders(e,t);if(!i)return!1;return vt(o,je(i,n))}getCommandZones(e){const t=[];return"zone"in e&&t.push(e.zone),"target"in e&&t.push(...e.target),"ranges"in e&&t.push(...e.ranges.map((e=>this.getters.getRangeFromRangeData(e).zone))),"col"in e&&void 0!==e.col&&"row"in e&&void 0!==e.row&&t.push({top:e.row,left:e.col,bottom:e.row,right:e.col}),t}checkZonesExistInSheet(e,t){if(!t.every(cr))return"InvalidRange";if(t.length){const o=this.getSheetZone(e);return t.every((e=>yr(e,o)))?"Success":"TargetOutOfSheet"}return"Success"}updateCellPosition(e){const{sheetId:t,cellId:o,col:s,row:i}=e;o?this.setNewPosition(o,t,s,i):this.clearPosition(t,s,i)}setNewPosition(e,t,o,s){const i=this.cellPosition[e];i&&this.clearPosition(t,i.col,i.row),this.history.update("cellPosition",e,{row:s,col:o,sheetId:t}),this.history.update("sheets",t,"rows",s,"cells",o,e)}clearPosition(e,t,o){const s=this.sheets[e]?.rows[o].cells[t];s&&(this.history.update("cellPosition",s,void 0),this.history.update("sheets",e,"rows",o,"cells",t,void 0))}setGridLinesVisibility(e,t){this.history.update("sheets",e,"areGridLinesVisible",t)}createSheet(e,t,o,s,i){const n={id:e,name:t,numberOfCols:o,rows:sa(s),areGridLinesVisible:!0,isVisible:!0,panes:{xSplit:0,ySplit:0}},r=this.orderedSheetIds.slice();r.splice(i,0,n.id);const a=this.sheets;return this.history.update("orderedSheetIds",r),this.history.update("sheets",Object.assign({},a,{[n.id]:n})),n}moveSheet(e,t){const o=this.orderedSheetIds.slice(),s=o.findIndex((t=>t===e)),i=o.splice(s,1),n=this.findIndexOfTargetSheet(s,t);o.splice(n,0,i[0]),this.history.update("orderedSheetIds",o)}findIndexOfTargetSheet(e,t){for(;0!==t&&0<=e&&e<=this.orderedSheetIds.length;)t>0?(e++,this.isSheetVisible(this.orderedSheetIds[e])&&t--):t<0&&(e--,this.isSheetVisible(this.orderedSheetIds[e])&&t++);if(0===t)return e;throw new Error("There is not enough visible sheets")}checkSheetName(e){const t=this.getters.tryGetSheetName(e.sheetId),o="RENAME_SHEET"===e.type?e.newName:e.name;if(void 0!==t&&o===t)return"UnchangedSheetName";const{orderedSheetIds:s,sheets:i}=this,n=o&&o.trim().toLowerCase();return s.find((t=>la(i[t]?.name,n)&&t!==e.sheetId))?"DuplicatedSheetName":_e.test(n)?"ForbiddenCharactersInSheetName":"Success"}checkSheetPosition(e){const{orderedSheetIds:t}=this;return e.position>t.length||e.position<0?"WrongSheetPosition":"Success"}checkRowFreezeQuantity(e){return e.quantity>=1&&e.quantity<this.getNumberRows(e.sheetId)?"Success":"InvalidFreezeQuantity"}checkColFreezeQuantity(e){return e.quantity>=1&&e.quantity<this.getNumberCols(e.sheetId)?"Success":"InvalidFreezeQuantity"}checkRowFreezeOverlapMerge(e){const t=this.getters.getMerges(e.sheetId);for(const o of t)if(o.top<e.quantity&&e.quantity<=o.bottom)return"MergeOverlap";return"Success"}checkColFreezeOverlapMerge(e){const t=this.getters.getMerges(e.sheetId);for(const o of t)if(o.left<e.quantity&&e.quantity<=o.right)return"MergeOverlap";return"Success"}isRenameAllowed(e){return e.newName&&e.newName.trim().toLowerCase()?this.checkSheetName(e):"MissingSheetName"}renameSheet(e,t){const o=e.name;this.history.update("sheets",e.id,"name",t.trim());const s=Object.assign({},this.sheetIdsMapName);delete s[o],s[t]=e.id,this.history.update("sheetIdsMapName",s)}hideSheet(e){this.history.update("sheets",e,"isVisible",!1)}showSheet(e){this.history.update("sheets",e,"isVisible",!0)}duplicateSheet(e,t,o){const s=ze(this.getSheet(e));s.id=t,s.name=o;for(let e=0;e<=s.numberOfCols;e++)for(let t=0;t<=s.rows.length;t++)s.rows[t]&&(s.rows[t].cells[e]=void 0);const i=this.orderedSheetIds.slice(),n=i.indexOf(e);i.splice(n+1,0,s.id),this.history.update("orderedSheetIds",i),this.history.update("sheets",Object.assign({},this.sheets,{[s.id]:s}));for(const t of Object.values(this.getters.getCells(e))){const{col:e,row:o}=this.getCellPosition(t.id);this.dispatch("UPDATE_CELL",{sheetId:s.id,col:e,row:o,content:t.content,format:t.format,style:t.style})}const r=Object.assign({},this.sheetIdsMapName);r[s.name]=s.id,this.history.update("sheetIdsMapName",r)}getDuplicateSheetName(e){return aa(e,this.orderedSheetIds.map(this.getSheetName.bind(this)))}deleteSheet(e){const t=e.name,o=Object.assign({},this.sheets);delete o[e.id],this.history.update("sheets",o);const s=this.orderedSheetIds.slice(),i=s.indexOf(e.id);s.splice(i,1),this.history.update("orderedSheetIds",s);const n=Object.assign({},this.sheetIdsMapName);delete n[t],this.history.update("sheetIdsMapName",n)}removeColumns(e,t){t.sort(((e,t)=>t-e));for(const o of t)this.moveCellOnColumnsDeletion(e,o);const o=this.sheets[e.id].numberOfCols;this.history.update("sheets",e.id,"numberOfCols",o-t.length);const s=t.filter((t=>t<e.panes.xSplit)).length;s&&this.setPaneDivisions(e.id,e.panes.xSplit-s,"COL")}removeRows(e,t){t.sort(((e,t)=>t-e));for(const o of Ye(t)){const t=o[o.length-1],s=o[0];this.moveCellOnRowsDeletion(e,t,s),this.updateRowsStructureOnDeletion(e,t,s)}const o=t.filter((t=>t<e.panes.ySplit)).length;o&&this.setPaneDivisions(e.id,e.panes.ySplit-o,"ROW")}addColumns(e,t,o,s){const i="before"===o?t:t+1;this.moveCellsOnAddition(e,i,s,"columns");const n=this.sheets[e.id].numberOfCols;this.history.update("sheets",e.id,"numberOfCols",n+s),i<e.panes.xSplit&&this.setPaneDivisions(e.id,e.panes.xSplit+s,"COL")}addRows(e,t,o,s){const i="before"===o?t:t+1;this.addEmptyRows(e,s),this.moveCellsOnAddition(e,i,s,"rows"),i<e.panes.ySplit&&this.setPaneDivisions(e.id,e.panes.ySplit+s,"ROW")}moveCellOnColumnsDeletion(e,t){this.dispatch("CLEAR_CELLS",{sheetId:e.id,target:[{left:t,top:0,right:t,bottom:e.rows.length-1}]});for(let o=0;o<e.rows.length;o++){const s=e.rows[o];for(const i in s.cells){const n=Number(i),r=s.cells[i];r&&n>t&&this.setNewPosition(r,e.id,n-1,o)}}}moveCellsOnAddition(e,t,o,s){const i=[];for(let n=0;n<e.rows.length;n++){const r=e.rows[n];if("rows"!==s||n>=t)for(const a in r.cells){const l=Number(a),c=r.cells[a];c&&("rows"===s||l>=t)&&i.push({sheetId:e.id,cellId:c,col:l+("columns"===s?o:0),row:n+("rows"===s?o:0),type:"UPDATE_CELL_POSITION"})}}for(const e of i.reverse())this.updateCellPosition(e)}moveCellOnRowsDeletion(e,t,o){this.dispatch("CLEAR_CELLS",{sheetId:e.id,target:[{left:0,top:t,right:this.getters.getNumberCols(e.id),bottom:o}]});const s=o-t+1;for(let t=0;t<e.rows.length;t++){const i=e.rows[t];if(t>o)for(const o in i.cells){const n=Number(o),r=i.cells[o];r&&this.setNewPosition(r,e.id,n,t-s)}}}updateRowsStructureOnDeletion(e,t,o){const s=[],i=e.rows.map((e=>e.cells)).reverse();for(const n in e.rows){const e=Number(n);e>=t&&e<=o||s.push({cells:i.pop()})}this.history.update("sheets",e.id,"rows",s)}addEmptyRows(e,t){const o=e.rows.slice();for(let e=0;e<t;e++)o.push({cells:{}});this.history.update("sheets",e.id,"rows",o)}getImportedSheetSize(e){const t=Object.keys(e.cells).map(_o);let o=e.rowNumber,s=e.colNumber;for(const{col:e,row:i}of t)o=Math.max(o,i+1),s=Math.max(s,e+1);return{rowNumber:o,colNumber:s}}checkSheetExists(e){return"CREATE_SHEET"!==e.type&&"sheetId"in e&&void 0===this.sheets[e.sheetId]?"InvalidSheetId":"CREATE_SHEET"===e.type&&void 0!==this.sheets[e.sheetId]?"DuplicatedSheetId":"Success"}checkZonesAreInSheet(e){return"sheetId"in e?"ranges"in e&&e.ranges.some((e=>""!==e._sheetId&&!this.getters.tryGetSheet(e._sheetId)))?"InvalidSheetId":this.checkZonesExistInSheet(e.sheetId,this.getCommandZones(e)):"Success"}}).add("header grouping",class extends Rk{static getters=["getHeaderGroups","getGroupsLayers","getVisibleGroupLayers","getHeaderGroup","getHeaderGroupsInZone","isGroupFolded","isRowFolded","isColFolded"];groups={};allowDispatch(e){switch(e.type){case"GROUP_HEADERS":{const{start:t,end:o,sheetId:s}=e;if(!this.getters.tryGetSheet(s))return"InvalidSheetId";if(!this.getters.doesHeadersExist(e.sheetId,e.dimension,[t,o]))return"InvalidHeaderGroupStartEnd";if(t>o)return"InvalidHeaderGroupStartEnd";if(this.findGroupWithStartEnd(e.sheetId,e.dimension,t,o))return"HeaderGroupAlreadyExists";break}case"UNGROUP_HEADERS":{const{start:t,end:o,sheetId:s}=e;if(!this.getters.tryGetSheet(s))return"InvalidSheetId";if(!this.getters.doesHeadersExist(e.sheetId,e.dimension,[t,o]))return"InvalidHeaderGroupStartEnd";if(t>o)return"InvalidHeaderGroupStartEnd";break}case"UNFOLD_HEADER_GROUP":case"FOLD_HEADER_GROUP":if(!this.getters.tryGetSheet(e.sheetId))return"InvalidSheetId";const t=this.findGroupWithStartEnd(e.sheetId,e.dimension,e.start,e.end);if(!t)return"UnknownHeaderGroup";if(je(0,this.getters.getNumberHeaders(e.sheetId,e.dimension)).every((o=>o>=t.start&&o<=t.end||this.getters.isHeaderHiddenByUser(e.sheetId,e.dimension,o))))return"NotEnoughElements"}return"Success"}handle(e){switch(e.type){case"CREATE_SHEET":this.history.update("groups",e.sheetId,{ROW:[],COL:[]});break;case"GROUP_HEADERS":this.groupHeaders(e.sheetId,e.dimension,e.start,e.end);break;case"UNGROUP_HEADERS":this.unGroupHeaders(e.sheetId,e.dimension,e.start,e.end);break;case"DUPLICATE_SHEET":{const t=ze(this.groups[e.sheetId]);this.history.update("groups",e.sheetIdTo,t);break}case"DELETE_SHEET":{const t={...this.groups};delete t[e.sheetId],this.history.update("groups",t);break}case"ADD_COLUMNS_ROWS":const t=pt(e.position,e.base);this.moveGroupsOnHeaderInsertion(e.sheetId,e.dimension,t,e.quantity);break;case"REMOVE_COLUMNS_ROWS":this.moveGroupsOnHeaderDeletion(e.sheetId,e.dimension,e.elements);break;case"UNFOLD_HEADER_GROUP":{const t=this.findGroupWithStartEnd(e.sheetId,e.dimension,e.start,e.end);t&&this.unfoldHeaderGroup(e.sheetId,e.dimension,t);break}case"FOLD_HEADER_GROUP":{const t=this.findGroupWithStartEnd(e.sheetId,e.dimension,e.start,e.end);t&&this.foldHeaderGroup(e.sheetId,e.dimension,t);break}case"UNFOLD_ALL_HEADER_GROUPS":{const t=this.getters.getHeaderGroups(e.sheetId,e.dimension);for(const o of t)this.unfoldHeaderGroup(e.sheetId,e.dimension,o);break}case"FOLD_ALL_HEADER_GROUPS":{const t=this.getters.getHeaderGroups(e.sheetId,e.dimension);for(const o of t)this.foldHeaderGroup(e.sheetId,e.dimension,o);break}case"FOLD_HEADER_GROUPS_IN_ZONE":case"UNFOLD_HEADER_GROUPS_IN_ZONE":{const t="UNFOLD_HEADER_GROUPS_IN_ZONE"===e.type?"unfold":"fold",o=this.getGroupsLayers(e.sheetId,e.dimension);"fold"===t&&o.reverse();const s=o.flat(),i="ROW"===e.dimension?e.zone.top:e.zone.left,n="ROW"===e.dimension?e.zone.bottom:e.zone.right,r=new Set;for(let e=i;e<=n;e++){const o=s.filter((t=>t.start-1<=e&&e<=t.end));for(const e of o)if(!("fold"===t&&e.isFolded||"unfold"===t&&!e.isFolded)){r.add(e);break}}for(const o of r)"unfold"===t?this.unfoldHeaderGroup(e.sheetId,e.dimension,o):this.foldHeaderGroup(e.sheetId,e.dimension,o);break}}}getHeaderGroups(e,t){return this.groups[e][t]}getHeaderGroup(e,t,o,s){return this.getHeaderGroups(e,t).find((e=>e.start===o&&e.end===s))}getHeaderGroupsInZone(e,t,o){return this.getHeaderGroups(e,t).filter((e=>{const s="ROW"===t?o.top:o.left,i="ROW"===t?o.bottom:o.right;return this.doGroupOverlap(e,s,i)}))}getGroupsLayers(e,t){const o=this.getHeaderGroups(e,t);return this.bricksFallingAlgorithm(o,0,0)}getVisibleGroupLayers(e,t){const o=this.getGroupsLayers(e,t);for(const s of o)for(let o=s.length-1;o>=0;o--){const i=s[o];if(0===i.start)continue;je(i.start-1,i.end+1).every((o=>this.getters.isHeaderHiddenByUser(e,t,o)))&&s.splice(o,1)}return o.filter((e=>e.length>0))}isGroupFolded(e,t,o,s){return this.getHeaderGroup(e,t,o,s)?.isFolded||!1}isRowFolded(e,t){return this.getters.getHeaderGroups(e,"ROW").some((e=>e.start<=t&&t<=e.end&&e.isFolded))}isColFolded(e,t){return this.getters.getHeaderGroups(e,"COL").some((e=>e.start<=t&&t<=e.end&&e.isFolded))}getGroupId(e){return`${e.start}-${e.end}}`}bricksFallingAlgorithm(e,t,o,s=0){const i={};for(const t of e)i[this.getGroupId(t)]=t.isFolded;const n={};for(const t of e)for(let e=t.start;e<=t.end;e++)n[e]=n[e]?n[e]+1:1;for(let e=t;e<=o;e++)n[e]=n[e]?n[e]+s:s;const r=Math.max(...Object.values(n),0),a=Array.from({length:r},(()=>[])),l=Math.max(o,...e.map((e=>e.end)));for(let o=Math.min(t,...e.map((e=>e.start)));o<=l;o++){const e=n[o]||0;for(let t=0;t<e;t++){const e=a[t].at(-1);if(e&&It([e.end,o]))e.end++;else{const e={start:o,end:o};a[t].push(e)}}}for(const e of a)for(const t of e)t.isFolded=i[this.getGroupId(t)];return a}groupHeaders(e,t,o,s){const i=this.getHeaderGroups(e,t),n=this.bricksFallingAlgorithm(i,o,s,1).flat();this.history.update("groups",e,t,this.removeDuplicateGroups(n))}unGroupHeaders(e,t,o,s){const i=this.getHeaderGroups(e,t),n=this.bricksFallingAlgorithm(i,o,s,-1).flat();this.history.update("groups",e,t,this.removeDuplicateGroups(n))}moveGroupsOnHeaderInsertion(e,t,o,s){const i=this.groups[e][t];for(let n=0;n<i.length;n++){const r=i[n],[a,l]=ia(o,s,[r.start,r.end]);a===r.start&&l===r.end||this.history.update("groups",e,t,n,{...r,start:a,end:l})}}moveGroupsOnHeaderDeletion(e,t,o){const s=this.getHeaderGroups(e,t),i=[];for(const e of s){const t=na(o,je(e.start,e.end+1));0!==t.length&&i.push({...e,start:Math.min(...t),end:Math.max(...t)})}this.history.update("groups",e,t,this.bricksFallingAlgorithm(i,0,0).flat())}doGroupOverlap(e,t,o){return e.start<=o&&e.end>=t}removeDuplicateGroups(e){const t={};for(const o of e)t[this.getGroupId(o)]=o;return Object.values(t)}findGroupWithStartEnd(e,t,o,s){return this.getHeaderGroups(e,t).find((e=>e.start===o&&e.end===s))}foldHeaderGroup(e,t,o){const s=this.getGroupIndex(e,t,o.start,o.end);if(void 0===s)return;this.history.update("groups",e,t,s,"isFolded",!0);const i=this.getters.getHeaderGroups(e,t);for(let s=0;s<i.length;s++){const n=i[s];n.start===o.start&&n.end<=o.end&&this.history.update("groups",e,t,s,"isFolded",!0)}}unfoldHeaderGroup(e,t,o){const s=this.getGroupIndex(e,t,o.start,o.end);if(void 0===s)return;this.history.update("groups",e,t,s,"isFolded",!1);const i=this.getters.getHeaderGroups(e,t);for(let s=0;s<i.length;s++){const n=i[s];n.start===o.start&&n.end>=o.end&&this.history.update("groups",e,t,s,"isFolded",!1)}}getGroupIndex(e,t,o,s){const i=this.groups[e][t].findIndex((e=>e.start===o&&e.end===s));return-1===i?void 0:i}import(e){for(const t of e.sheets)if(this.groups[t.id]={ROW:[],COL:[]},t.headerGroups)for(const e of["ROW","COL"])for(const o of t.headerGroups[e]||[])this.groups[t.id][e].push({...o})}export(e){for(const t of e.sheets)t.headerGroups=this.groups[t.id]}exportForExcel(e){for(const t of e.sheets)for(const e of["ROW","COL"]){const o=this.getGroupsLayers(t.id,e);for(let s=0;s<o.length;s++){const i=o[s];for(const o of i){for(let i=o.start;i<=o.end;i++){const n=TT(t,e,i);n.outlineLevel=s+1,o.isFolded&&(n.isHidden=!0)}if(o.isFolded){TT(t,e,o.end+1).collapsed=!0}}}}}}).add("header visibility",class extends Rk{static getters=["checkElementsIncludeAllVisibleHeaders","getHiddenColsGroups","getHiddenRowsGroups","isHeaderHiddenByUser","isRowHiddenByUser","isColHiddenByUser"];hiddenHeaders={};allowDispatch(e){switch(e.type){case"HIDE_COLUMNS_ROWS":{if(!this.getters.tryGetSheet(e.sheetId))return"InvalidSheetId";const t="COL"===e.dimension?this.getHiddenColsGroups(e.sheetId):this.getHiddenRowsGroups(e.sheetId),o="COL"===e.dimension?this.getters.getNumberCols(e.sheetId):this.getters.getNumberRows(e.sheetId);return new Set((t||[]).flat().concat(e.elements)).size>=o?"TooManyHiddenElements":Ft(e.elements)<0||Ot(e.elements)>o?"InvalidHeaderIndex":"Success"}case"REMOVE_COLUMNS_ROWS":return this.getters.tryGetSheet(e.sheetId)?this.checkElementsIncludeAllVisibleHeaders(e.sheetId,e.dimension,e.elements)?"NotEnoughElements":"Success":"InvalidSheetId"}return"Success"}handle(e){switch(e.type){case"CREATE_SHEET":const t={COL:Array(this.getters.getNumberCols(e.sheetId)).fill(!1),ROW:Array(this.getters.getNumberRows(e.sheetId)).fill(!1)};this.history.update("hiddenHeaders",e.sheetId,t);break;case"DUPLICATE_SHEET":this.history.update("hiddenHeaders",e.sheetIdTo,ze(this.hiddenHeaders[e.sheetId]));break;case"DELETE_SHEET":this.history.update("hiddenHeaders",e.sheetId,void 0);break;case"REMOVE_COLUMNS_ROWS":{const t=[...this.hiddenHeaders[e.sheetId][e.dimension]];for(const o of[...e.elements].sort(((e,t)=>t-e)))t.splice(o,1);this.history.update("hiddenHeaders",e.sheetId,e.dimension,t);break}case"ADD_COLUMNS_ROWS":{const t=[...this.hiddenHeaders[e.sheetId][e.dimension]],o=pt(e.position,e.base);t.splice(o,0,...Array(e.quantity).fill(!1)),this.history.update("hiddenHeaders",e.sheetId,e.dimension,t);break}case"HIDE_COLUMNS_ROWS":for(const t of e.elements)this.history.update("hiddenHeaders",e.sheetId,e.dimension,t,!0);break;case"UNHIDE_COLUMNS_ROWS":for(const t of e.elements)this.history.update("hiddenHeaders",e.sheetId,e.dimension,t,!1)}}checkElementsIncludeAllVisibleHeaders(e,t,o){return vt(o,this.getAllVisibleHeaders(e,t))}isHeaderHiddenByUser(e,t,o){return"COL"===t?this.isColHiddenByUser(e,o):this.isRowHiddenByUser(e,o)}isRowHiddenByUser(e,t){return this.hiddenHeaders[e].ROW[t]||this.getters.isRowFolded(e,t)}isColHiddenByUser(e,t){return this.hiddenHeaders[e].COL[t]||this.getters.isColFolded(e,t)}getHiddenColsGroups(e){const t=[[]],o=this.hiddenHeaders[e].COL;for(let e=0;e<o.length;e++){o[e]?t[t.length-1].push(e):0!==t[t.length-1].length&&t.push([])}return 0===t[t.length-1].length&&t.pop(),t}getHiddenRowsGroups(e){const t=[[]],o=this.hiddenHeaders[e].ROW;for(let e=0;e<o.length;e++){o[e]?t[t.length-1].push(e):0!==t[t.length-1].length&&t.push([])}return 0===t[t.length-1].length&&t.pop(),t}getAllVisibleHeaders(e,t){const o=je(0,this.getters.getNumberHeaders(e,t)),s=[];return this.getters.getHeaderGroups(e,t).forEach((e=>{e.isFolded&&s.push(...je(e.start,e.end+1))})),o.filter((o=>!this.hiddenHeaders[e][t][o]&&!s.includes(o)))}import(e){for(const t of e.sheets){this.hiddenHeaders[t.id]={COL:[],ROW:[]};for(let e=0;e<t.rowNumber;e++)this.hiddenHeaders[t.id].ROW[e]=Boolean(t.rows[e]?.isHidden);for(let e=0;e<t.colNumber;e++)this.hiddenHeaders[t.id].COL[e]=Boolean(t.cols[e]?.isHidden)}}exportForExcel(e){this.exportData(e,!0)}export(e){this.exportData(e)}exportData(e,t=!1){for(const o of e.sheets){void 0===o.rows&&(o.rows={});for(let e=0;e<this.getters.getNumberRows(o.id);e++)(t||this.hiddenHeaders[o.id].ROW[e])&&(void 0===o.rows[e]&&(o.rows[e]={}),o.rows[e].isHidden||=this.hiddenHeaders[o.id].ROW[e]);void 0===o.cols&&(o.cols={});for(let e=0;e<this.getters.getNumberCols(o.id);e++)(t||this.hiddenHeaders[o.id].COL[e])&&(void 0===o.cols[e]&&(o.cols[e]={}),o.cols[e].isHidden||=this.hiddenHeaders[o.id].COL[e])}}}).add("tables",class extends Rk{static getters=["getCoreTable","getCoreTables","getCoreTableMatchingTopLeft"];tables={};nextTableId=1;adaptRanges(e,t,o){const s=t?[t]:this.getters.getSheetIds();for(const t of s)for(const o of this.getCoreTables(t))this.applyRangeChangeOnTable(t,o,e)}allowDispatch(e){switch(e.type){case"CREATE_TABLE":if(e.ranges.some((t=>!this.getters.tryGetSheet(t._sheetId)||t._sheetId!==e.sheetId)))return"InvalidSheetId";const t=e.ranges.map((e=>this.getters.getRangeFromRangeData(e).zone));return Nr(t)?this.checkValidations(e,(e=>this.getTablesOverlappingZones(e.sheetId,t).length?"TableOverlap":"Success"),(e=>this.checkTableConfigUpdateIsValid(e.config))):"NonContinuousTargets";case"UPDATE_TABLE":return this.getCoreTableMatchingTopLeft(e.sheetId,e.zone)?this.checkValidations(e,this.checkUpdatedTableZoneIsValid,(e=>this.checkTableConfigUpdateIsValid(e.config))):"TableNotFound";case"ADD_MERGE":for(const t of this.getCoreTables(e.sheetId)){const o=t.range.zone;for(const t of e.target)if(Sr(o,t))return"MergeInTable"}}return"Success"}handle(e){switch(e.type){case"CREATE_SHEET":this.history.update("tables",e.sheetId,{});break;case"DELETE_SHEET":{const t={...this.tables};delete t[e.sheetId],this.history.update("tables",t);break}case"DUPLICATE_SHEET":{const t={};for(const o of this.getCoreTables(e.sheetId))t[o.id]="dynamic"===o.type?this.copyDynamicTableForSheet(e.sheetIdTo,o):this.copyStaticTableForSheet(e.sheetIdTo,o);this.history.update("tables",e.sheetIdTo,t);break}case"CREATE_TABLE":{const t=e.ranges.map((e=>this.getters.getRangeFromRangeData(e))),o=this.getters.getRangesUnion(t),s=this.getters.getMergesInZone(e.sheetId,o.zone);s.length&&this.dispatch("REMOVE_MERGE",{sheetId:e.sheetId,target:s});const i=this.consumeNextId(),n=e.config||mR,r="dynamic"===e.tableType?this.createDynamicTable(i,o,n):this.createStaticTable(i,e.tableType,o,n);this.history.update("tables",e.sheetId,r.id,r);break}case"REMOVE_TABLE":{const t={};for(const o of this.getCoreTables(e.sheetId))e.target.every((e=>!vr(o.range.zone,e)))&&(t[o.id]=o);this.history.update("tables",e.sheetId,t);break}case"UPDATE_TABLE":this.updateTable(e);break;case"UPDATE_CELL":{const t=e.sheetId;for(const o of this.getCoreTables(t)){if("dynamic"===o.type)continue;const s=this.canUpdateCellCmdExtendTable(e,o);"down"===s?this.extendTableDown(t,o):"right"===s&&this.extendTableRight(t,o)}break}case"DELETE_CONTENT":{const t={...this.tables[e.sheetId]};for(const o in t){const s=t[o];s&&e.target.some((e=>yr(s.range.zone,e)))&&this.dispatch("REMOVE_TABLE",{sheetId:e.sheetId,target:[s.range.zone]})}break}}}getCoreTables(e){return this.tables[e]?Object.values(this.tables[e]).filter(lt):[]}getCoreTable({sheetId:e,col:t,row:o}){return this.getCoreTables(e).find((e=>Cr(t,o,e.range.zone)))}getTablesOverlappingZones(e,t){return this.getCoreTables(e).filter((e=>t.some((t=>Sr(e.range.zone,t)))))}extendTableDown(e,t){const o=this.getters.extendRange(t.range,"ROW",1);this.history.update("tables",e,t.id,this.updateStaticTable(t,o))}extendTableRight(e,t){const o=this.getters.extendRange(t.range,"COL",1);this.history.update("tables",e,t.id,this.updateStaticTable(t,o))}canUpdateCellCmdExtendTable({content:e,sheetId:t,col:o,row:s},i){if(!e)return"none";const n=i.range.zone;let r="none";if(n.bottom+1===s&&o>=n.left&&o<=n.right?r="down":n.right+1===o&&s>=n.top&&s<=n.bottom&&(r="right"),"none"===r)return"none";const a="down"===r?{...n,bottom:n.bottom+1,top:n.bottom+1}:{...n,right:n.right+1,left:n.right+1};for(let e=a.top;e<=a.bottom;e++)for(let o=a.left;o<=a.right;o++){const s={sheetId:t,col:o,row:e},i=this.getters.getCell(s)?.content;if(i||this.getters.isInMerge(s)||this.getTablesOverlappingZones(t,[Dr(s)]).length)return"none"}return r}getCoreTableMatchingTopLeft(e,t){for(const o of this.getCoreTables(e)){const e=o.range.zone;if(e.left===t.left&&e.top===t.top)return o}}checkUpdatedTableZoneIsValid(e){if(!e.newTableRange)return"Success";const t=this.getters.getRangeFromRangeData(e.newTableRange).zone,o=this.getters.checkZonesExistInSheet(e.sheetId,[t]);if("Success"!==o)return o;const s=this.getCoreTableMatchingTopLeft(e.sheetId,e.zone);if(!s)return"TableNotFound";return this.getTablesOverlappingZones(e.sheetId,[t]).filter((e=>e.id!==s.id)).length?"TableOverlap":"Success"}checkTableConfigUpdateIsValid(e){return e&&(void 0!==e.numberOfHeaders&&e.numberOfHeaders<0||e.hasFilters&&0===e.numberOfHeaders)?"InvalidTableConfig":"Success"}createStaticTable(e,t,o,s,i){const n=o.zone;if(!i){i=[];for(const e of je(n.left,n.right+1)){const t={...n,left:e,right:e},r=this.consumeNextId();i.push(this.createFilterFromZone(r,o.sheetId,t,s))}}return{id:e,range:o,filters:i,config:s,type:t}}createDynamicTable(e,t,o){const s=_r(t.zone);return{id:e,range:this.getters.getRangeFromZone(t.sheetId,s),config:o,type:"dynamic"}}updateTable(e){const t=this.getCoreTableMatchingTopLeft(e.sheetId,e.zone);if(!t)return;const o=e.newTableRange?this.getters.getRangeFromRangeData(e.newTableRange):void 0;if(o){const t=this.getters.getMergesInZone(e.sheetId,o.zone);this.dispatch("REMOVE_MERGE",{sheetId:e.sheetId,target:t})}const s=o||t.range,i=this.updateTableConfig(e.config,t.config),n=e.tableType??t.type;if("dynamic"===n&&"dynamic"!==t.type||"dynamic"!==n&&"dynamic"===t.type){const o="dynamic"===n?this.createDynamicTable(t.id,s,i):this.createStaticTable(t.id,n,s,i);this.history.update("tables",e.sheetId,t.id,o)}else{const o="dynamic"===t.type?this.updateDynamicTable(t,s,i):this.updateStaticTable(t,s,i,n);this.history.update("tables",e.sheetId,t.id,o)}}updateStaticTable(e,t,o,s=e.type){if("dynamic"===s)throw new Error("Cannot use updateStaticTable to update a dynamic table");const i=t||e.range,n=i.zone,r=this.updateTableConfig(o,e.config),a=r||e.config,l=[];if(t||r&&"numberOfHeaders"in r)for(const t of je(n.left,n.right+1)){const o=n.top===e.range.zone.top?e.filters.find((e=>e.col===t)):void 0,s={...n,left:t,right:t},r=o?.id||this.consumeNextId();l.push(this.createFilterFromZone(r,i.sheetId,s,a))}return{...e,range:i,config:a,filters:l.length?l:e.filters,type:s}}updateDynamicTable(e,t,o){const s=t?this.getters.getRangeFromZone(t.sheetId,_r(t.zone)):e.range,i=o||e.config;return{...e,range:s,config:i}}updateTableConfig(e,t){if(!e)return t;const o={...t,...e};return 0===e.numberOfHeaders?o.hasFilters=!1:!0===e.hasFilters&&(o.numberOfHeaders||=1),o}createFilterFromZone(e,t,o,s){return d_(e,this.getters.getRangeFromZone(t,o),s,this.getters.getRangeFromZone)}copyStaticTableForSheet(e,t){const o=this.getters.getRangeFromZone(e,t.range.zone),s=t.filters.map((o=>{const s=this.getters.getRangeFromZone(e,o.rangeWithHeaders.zone);return d_(o.id,s,t.config,this.getters.getRangeFromZone)}));return{id:t.id,range:o,filters:s,config:ze(t.config),type:t.type}}copyDynamicTableForSheet(e,t){const o=this.getters.getRangeFromZone(e,t.range.zone);return{id:t.id,range:o,config:ze(t.config),type:"dynamic"}}applyRangeChangeOnTable(e,t,o){const s=o(t.range);let i;switch(s.changeType){case"REMOVE":return void this.history.update("tables",e,t.id,void 0);case"NONE":return;default:i=s.range}if("dynamic"===t.type){const o=this.updateDynamicTable(t,i);return void this.history.update("tables",e,t.id,o)}const n=[];for(const e of t.filters){const s=o(e.rangeWithHeaders);switch(s.changeType){case"REMOVE":continue;case"NONE":n.push(e);break;default:const o=s.range,i=d_(e.id,o,t.config,this.getters.getRangeFromZone);n.push(i)}}const r=i.zone;if(n.length<wr(r).numberOfCols){for(let o=r.left;o<=r.right;o++)if(!n.find((e=>e.col===o))){const s=this.consumeNextId(),i={...r,left:o,right:o};n.push(this.createFilterFromZone(s,e,i,t.config))}n.sort(((e,t)=>e.col-t.col))}const a=this.createStaticTable(t.id,t.type,i,t.config,n);this.history.update("tables",e,t.id,a)}consumeNextId(){const e=`${this.nextTableId}`;return this.history.update("nextTableId",this.nextTableId+1),e}import(e){for(const t of e.sheets)for(const e of t.tables||[]){const o=this.consumeNextId(),s=e.config||mR,i=this.getters.getRangeFromSheetXC(t.id,e.range),n=e.type||"static",r="dynamic"===n?this.createDynamicTable(o,i,s):this.createStaticTable(o,n,i,s);this.history.update("tables",t.id,r.id,r)}}export(e){for(const t of e.sheets)for(const e of this.getCoreTables(t.id)){const o={range:dr(e.range.zone),type:e.type};mt(e.config,mR)||(o.config=e.config),t.tables.push(o)}}exportForExcel(e){for(const t of e.sheets)for(const e of this.getCoreTables(t.id)){const o=dr(e.range.zone);t.tables.push({range:o,filters:[],config:e.config})}}}).add("dataValidation",class extends Rk{static getters=["cellHasListDataValidationIcon","getDataValidationRule","getDataValidationRules","getValidationRuleForCell"];rules={};adaptRanges(e,t,o){const s=t?[t]:Object.keys(this.rules);for(const t of s)this.adaptDVRanges(t,e);this.adaptDVFormulas(e)}adaptDVFormulas(e){for(const t in this.rules){for(let o=this.rules[t].length-1;o>=0;o--){const s=this.rules[t][o];for(let i=0;i<s.criterion.values.length;i++){const n=this.getters.adaptFormulaStringDependencies(t,s.criterion.values[i],e);this.history.update("rules",t,o,"criterion","values",i,n)}}}}adaptDVRanges(e,t){for(let o=this.rules[e].length-1;o>=0;o--){const s=this.rules[e][o];for(let i=s.ranges.length-1;i>=0;i--){const n=t(s.ranges[i]);switch(n.changeType){case"REMOVE":if(1===s.ranges.length)this.removeDataValidationRule(e,s.id);else{const t=s.ranges.slice();t.splice(i,1),this.history.update("rules",e,o,"ranges",t)}break;case"RESIZE":case"MOVE":case"CHANGE":this.history.update("rules",e,o,"ranges",i,n.range)}}}}allowDispatch(e){switch(e.type){case"ADD_DATA_VALIDATION_RULE":return this.getters.tryGetSheet(e.sheetId)?e.ranges.some((e=>!this.getters.tryGetSheet(e._sheetId)))?"InvalidSheetId":this.checkValidations(e,this.chainValidations(this.checkEmptyRange,this.checkValidRange,this.checkCriterionTypeIsValid,this.checkCriterionHasValidNumberOfValues,this.checkCriterionValuesAreValid)):"InvalidSheetId";case"REMOVE_DATA_VALIDATION_RULE":if(!this.getters.tryGetSheet(e.sheetId))return"InvalidSheetId";if(!this.rules[e.sheetId].find((t=>t.id===e.id)))return"UnknownDataValidationRule"}return"Success"}handle(e){switch(e.type){case"CREATE_SHEET":this.history.update("rules",e.sheetId,[]);break;case"DUPLICATE_SHEET":{const t=ze(this.rules[e.sheetId]).map((t=>({...t,ranges:t.ranges.map((t=>ma(e.sheetId,e.sheetIdTo,t)))})));this.history.update("rules",e.sheetIdTo,t);break}case"DELETE_SHEET":{const t={...this.rules};delete t[e.sheetId],this.history.update("rules",t);break}case"REMOVE_DATA_VALIDATION_RULE":this.removeDataValidationRule(e.sheetId,e.id);break;case"ADD_DATA_VALIDATION_RULE":{const t=e.ranges.map((e=>this.getters.getRangeFromRangeData(e)));this.addDataValidationRule(e.sheetId,{...e.rule,ranges:t});break}case"DELETE_CONTENT":{const t=er(e.target),o=e.sheetId;for(const e of t)for(let t=e.top;t<=e.bottom;t++)for(let s=e.left;s<=e.right;s++){const e=this.getValidationRuleForCell({sheetId:o,col:s,row:t});if(e&&("isBoolean"===e.criterion.type||"isValueInList"===e.criterion.type&&!this.getters.getCell({sheetId:o,col:s,row:t})?.content)){const e=this.rules[o],i=[this.getters.getRangeFromSheetXC(o,Oo(s,t))],n=this.removeRangesFromRules(o,i,e);this.history.update("rules",o,n)}}}}}getDataValidationRules(e){return this.rules[e]}getDataValidationRule(e,t){return this.rules[e].find((e=>e.id===t))}getValidationRuleForCell({sheetId:e,col:t,row:o}){if(this.rules[e])for(const s of this.rules[e])for(const e of s.ranges)if(Cr(t,o,e.zone))return s}cellHasListDataValidationIcon(e){const t=this.getValidationRuleForCell(e);return!!t&&!("isValueInList"!==t.criterion.type&&"isValueInRange"!==t.criterion.type||"arrow"!==t.criterion.displayStyle&&"chip"!==t.criterion.displayStyle)}addDataValidationRule(e,t){const o=this.rules[e];"isBoolean"===t.criterion.type?this.setCenterStyleToBooleanCells(t):"isValueInList"===t.criterion.type&&(t.criterion.values=Array.from(new Set(t.criterion.values)));const s=this.removeRangesFromRules(e,t.ranges,o,t.id),i=s.findIndex((e=>e.id===t.id));-1!==i?(s[i]=t,this.history.update("rules",e,s)):this.history.update("rules",e,[...s,t])}removeRangesFromRules(e,t,o,s){o=ze(o);for(const e of o)e.id!==s&&(e.ranges=this.getters.recomputeRanges(e.ranges,t));return o.filter((e=>e.ranges.length>0))}removeDataValidationRule(e,t){const o=this.rules[e].filter((e=>e.id!==t));this.history.update("rules",e,o)}setCenterStyleToBooleanCells(e){for(const t of va(e.ranges)){const e=this.getters.getCell(t),o={...e?.style,align:e?.style?.align??"center",verticalAlign:e?.style?.verticalAlign??"middle"};this.dispatch("UPDATE_CELL",{...t,style:o})}}checkEmptyRange(e){return e.ranges.length?"Success":"EmptyRange"}import(e){for(const t of e.sheets)if(this.rules[t.id]=[],t.dataValidationRules)for(const e of t.dataValidationRules)this.rules[t.id].push({...e,ranges:e.ranges.map((e=>this.getters.getRangeFromSheetXC(t.id,e)))})}export(e){if(e.sheets)for(const t of e.sheets){t.dataValidationRules=[];for(const e of this.rules[t.id])t.dataValidationRules.push({...e,ranges:e.ranges.map((e=>this.getters.getRangeString(e,t.id)))})}}exportForExcel(e){if(e.sheets)for(const t of e.sheets){t.dataValidationRules=[];for(const e of this.rules[t.id]){const o={...ze(e),ranges:e.ranges.map((e=>this.getters.getRangeString(e,t.id,{useBoundedReference:!0})))};"isValueInRange"===e.criterion.type&&(o.criterion.values=e.criterion.values.map((e=>{const o=this.getters.getRangeFromSheetXC(t.id,e);return this.getters.getRangeString(o,t.id,{useBoundedReference:!0,useFixedReference:!0})}))),t.dataValidationRules.push(o)}}}checkCriterionTypeIsValid(e){return Zx.contains(e.rule.criterion.type)?"Success":"UnknownDataValidationCriterionType"}checkCriterionHasValidNumberOfValues(e){const t=e.rule.criterion,o=Zx.get(t.type).numberOfValues(t);return void 0!==o&&t.values.length!==o?"InvalidNumberOfCriterionValues":"Success"}checkCriterionValuesAreValid(e){const t=e.rule.criterion,o=Zx.get(t.type);return t.values.some((e=>"onlyFormulas"===o.allowedValues&&!e.startsWith("=")||(e.startsWith("=")?"onlyLiterals"===o.allowedValues||PS(e).isBadExpression:!o.isCriterionValueValid(e))))?"InvalidDataValidationCriterionValue":"Success"}checkValidRange(e){const t=e.ranges.map((e=>this.getters.getRangeFromRangeData(e))),o=t.map((t=>this.getters.getRangeString(t,e.sheetId)));return o.some((e=>!this.getters.isRangeValid(e)))?"InvalidRange":"Success"}}).add("cell",class extends Rk{static getters=["zoneToXC","getCells","getTranslatedCellFormula","getCellStyle","getCellById","getFormulaString","getFormulaMovedInSheet"];nextId=1;cells={};adaptRanges(e,t,o){for(const s of Object.keys(this.cells))for(const i of Object.values(this.cells[s]||{}))if(i.isFormula)for(const n of i.compiledFormula.dependencies)if(!t||n.sheetId===t||o&&n.invalidSheetName===o){const t=e(n);"NONE"!==t.changeType&&this.history.update("cells",s,i.id,"compiledFormula","dependencies",i.compiledFormula.dependencies.indexOf(n),t.range)}}allowDispatch(e){switch(e.type){case"UPDATE_CELL":return this.checkValidations(e,this.checkCellOutOfSheet,this.checkUselessUpdateCell);case"CLEAR_CELL":return this.checkValidations(e,this.checkCellOutOfSheet,this.checkUselessClearCell);case"UPDATE_CELL_POSITION":return!e.cellId||this.cells[e.sheetId]?.[e.cellId]?"Success":"InvalidCellId";default:return"Success"}}handle(e){switch(e.type){case"SET_FORMATTING":"style"in e&&this.setStyle(e.sheetId,e.target,e.style),"format"in e&&void 0!==e.format&&this.setFormatter(e.sheetId,e.target,e.format);break;case"CLEAR_FORMATTING":this.clearFormatting(e.sheetId,e.target);break;case"ADD_COLUMNS_ROWS":"COL"===e.dimension?this.handleAddColumnsRows(e,this.copyColumnStyle.bind(this)):this.handleAddColumnsRows(e,this.copyRowStyle.bind(this));break;case"UPDATE_CELL":this.updateCell(e.sheetId,e.col,e.row,e);break;case"CLEAR_CELL":this.dispatch("UPDATE_CELL",{sheetId:e.sheetId,col:e.col,row:e.row,content:"",style:null,format:""});break;case"CLEAR_CELLS":this.clearCells(e.sheetId,e.target);break;case"DELETE_CONTENT":this.clearZones(e.sheetId,e.target);break;case"DELETE_SHEET":this.history.update("cells",e.sheetId,void 0)}}clearZones(e,t){for(const o of er(t))for(let t=o.left;t<=o.right;t++)for(let s=o.top;s<=o.bottom;s++){const o=this.getters.getCell({sheetId:e,col:t,row:s});(o?.isFormula||o?.content)&&this.dispatch("UPDATE_CELL",{sheetId:e,content:"",col:t,row:s})}}setFormatter(e,t,o){for(const s of er(t))for(let t=s.top;t<=s.bottom;t++)for(let i=s.left;i<=s.right;i++)this.dispatch("UPDATE_CELL",{sheetId:e,col:i,row:t,format:o})}clearFormatting(e,t){for(const o of er(t))for(let t=o.left;t<=o.right;t++)for(let s=o.top;s<=o.bottom;s++)this.dispatch("UPDATE_CELL",{sheetId:e,col:t,row:s,style:null,format:""})}clearCells(e,t){for(const o of t)for(let t=o.left;t<=o.right;t++)for(let s=o.top;s<=o.bottom;s++)this.dispatch("UPDATE_CELL",{sheetId:e,col:t,row:s,content:"",style:null,format:""})}handleAddColumnsRows(e,t){let o,s;"before"===e.position?(o=je(e.base,e.base+e.quantity),s=e.base+e.quantity):(o=je(e.base+1,e.base+e.quantity+1),s=e.base),t(e.sheetId,s,o)}import(e){for(const t of e.sheets){const o=t.id,s=new MD;for(const e in t.cells)if(t.cells[e]){const{col:o,row:i}=_o(e),n={sheetId:t.id,col:o,row:i};s.set(n,{content:t.cells[e]})}for(const[e,o]of[["style",t.styles],["format",t.formats]])for(const[i,n]of Br(t.id,o)){const t=s.get(i);t?t[e]=n:s.set(i,{[e]:n})}for(const i of s.keysForSheet(o)){const o=s.get(i);if(o?.content||o?.format||o?.style){const s=this.importCell(t.id,o?.content,o?.style?e.styles[o?.style]:void 0,o?.format?e.formats[o?.format]:void 0);this.history.update("cells",t.id,s.id,s),this.dispatch("UPDATE_CELL_POSITION",{cellId:s.id,...i})}}}}export(e){const t={},o={};for(const s of e.sheets){const e=[],i=[],n={},r=Object.keys(this.cells[s.id]||{}).map((e=>this.getters.getCellPosition(e))).sort(((e,t)=>e.col===t.col?e.row-t.row:e.col-t.col));for(const s of r){const r=this.getters.getCell(s),a=Oo(s.col,s.row),l=this.removeDefaultStyleValues(r.style);if(Object.keys(l).length){const o=Hr(l,t);e[o]??=[],e[o].push(s)}if(r.format){const e=Hr(r.format,o);i[e]??=[],i[e].push(s)}r.content&&(n[a]=r.content)}s.styles=Ur(e),s.formats=Ur(i),s.cells=n}e.styles=t,e.formats=o}importCell(e,t,o,s){const i=this.getNextUid();return this.createCell(i,t||"",s,o,e)}exportForExcel(e){this.export(e);const t=[];for(const o in e.formats||[])$n(e.formats[o])||(t.push(Number(o)),delete e.formats[o]);if(t.length)for(const o of e.sheets)for(const e in o.formats){const s=o.formats[e];s&&t.includes(s)&&delete o.formats[e]}}removeDefaultStyleValues(e){const t={...e};for(const e in de)t[e]===de[e]&&delete t[e];return t}getCells(e){return this.cells[e]||{}}getCellById(e){const t=this.getters.getCellPosition(e);return this.cells[t.sheetId][e]}getFormulaString(e,t,o,s=!1){if(!o.length)return dt(t.map((e=>e.value)));let i=0;return dt(t.map((t=>{if("REFERENCE"===t.type){const t=o[i++];return this.getters.getRangeString(t,e,{useBoundedReference:s})}return t.value})))}getTranslatedCellFormula(e,t,o,s){const i=this.getters.createAdaptedRanges(MS(s).dependencies.map((t=>this.getters.getRangeFromSheetXC(e,t))),t,o,e);return this.getFormulaString(e,s,i)}getFormulaMovedInSheet(e,t,o){const s=MS(o).dependencies.map((t=>this.getters.getRangeFromSheetXC(e,t))),i=this.getters.removeRangesSheetPrefix(t,s);return this.getFormulaString(t,o,i)}getCellStyle(e){return this.getters.getCell(e)?.style||{}}zoneToXC(e,t,o=[{colFixed:!1,rowFixed:!1}]){const s=Oo((t=this.getters.expandZone(e,t)).left,t.top,o[0]),i=Oo(t.right,t.bottom,o.length>1?o[1]:o[0]),n=this.getters.getMainCellPosition({sheetId:e,col:t.left,row:t.top}),r=this.getters.getMainCellPosition({sheetId:e,col:t.right,row:t.bottom}),a=n.col===r.col&&n.row===r.row;return s===i||a?s:s+":"+i}setStyle(e,t,o){for(const s of er(t))for(let t=s.left;t<=s.right;t++)for(let i=s.top;i<=s.bottom;i++){const s=this.getters.getCell({sheetId:e,col:t,row:i});this.dispatch("UPDATE_CELL",{sheetId:e,col:t,row:i,style:o?{...s?.style,...o}:void 0})}}copyColumnStyle(e,t,o){for(let s=0;s<this.getters.getNumberRows(e);s++){const i=this.getFormat(e,t,s);if(i.style||i.format)for(const t of o)this.dispatch("UPDATE_CELL",{sheetId:e,col:t,row:s,...i})}}copyRowStyle(e,t,o){for(let s=0;s<this.getters.getNumberCols(e);s++){const i=this.getFormat(e,s,t);if(i.style||i.format)for(const t of o)this.dispatch("UPDATE_CELL",{sheetId:e,col:s,row:t,...i})}}getFormat(e,t,o){const s={},i=this.getters.getMainCellPosition({sheetId:e,col:t,row:o}),n=this.getters.getCell(i);return n&&(n.style&&(s.style=n.style),n.format&&(s.format=n.format)),s}getNextUid(){const e=this.nextId.toString();return this.history.update("nextId",this.nextId+1),e}updateCell(e,t,o,s){const i=this.getters.getCell({sheetId:e,col:t,row:o}),n="content"in s||"formula"in s,r=n?wt(s?.content):i?.content||"";let a;a=void 0!==s.style?s.style||void 0:i?i.style:void 0;const l="format"in s?s.format:i&&i.format;if((n&&!r&&!s.formula||!n&&(!i||""===i.content))&&!a&&!l)return void(i&&(this.history.update("cells",e,i.id,void 0),this.dispatch("UPDATE_CELL_POSITION",{cellId:void 0,col:t,row:o,sheetId:e})));const c=i?.id||this.getNextUid(),h=this.createCell(c,r,l,a,e);this.history.update("cells",e,h.id,h),this.dispatch("UPDATE_CELL_POSITION",{cellId:h.id,col:t,row:o,sheetId:e})}createCell(e,t,o,s,i){return t.startsWith("=")?this.createFormulaCell(e,t,o,s,i):this.createLiteralCell(e,t,o,s)}createLiteralCell(e,t,o,s){const i=this.getters.getLocale(),n=qn(t,i);return Gn(o=o||("number"==typeof n?_n(t,i)||On(t):void 0))||hi(t)||(t=Si(n)),{id:e,content:t,style:s,format:o,isFormula:!1,parsedValue:n}}createFormulaCell(e,t,o,s,i){const n=PS(t);return n.dependencies.length?this.createFormulaCellWithDependencies(e,n,o,s,i):{id:e,content:t,style:s,format:o,isFormula:!0,compiledFormula:{...n,dependencies:[]}}}createFormulaCellWithDependencies(e,t,o,s,i){const n=[];for(const e of t.dependencies)n.push(this.getters.getRangeFromSheetXC(i,e));return new Tk(e,t,o,s,n,i,this.getters.getRangeString)}checkCellOutOfSheet(e){const{sheetId:t,col:o,row:s}=e;if(!this.getters.tryGetSheet(t))return"InvalidSheetId";return Cr(o,s,this.getters.getSheetZone(t))?"Success":"TargetOutOfSheet"}checkUselessClearCell(e){const t=this.getters.getCell(e);return t&&(t.content||t.style||t.format)?"Success":"NoChanges"}checkUselessUpdateCell(e){const t=this.getters.getCell(e),o="style"in e,s="format"in e;return("content"in e||"formula"in e)&&t?.content!==e.content||o&&!mt(t?.style,e.style)||s&&t?.format!==e.format?"Success":"NoChanges"}}).add("merge",class extends Rk{static getters=["isInMerge","isInSameMerge","isMergeHidden","getMainCellPosition","expandZone","doesIntersectMerge","doesColumnsHaveCommonMerges","doesRowsHaveCommonMerges","getMerges","getMerge","getMergesInZone","isSingleCellOrMerge","getSelectionRangeString","isMainCellPosition"];nextId=1;merges={};mergeCellMap={};allowDispatch(e){const t="force"in e&&!!e.force;switch(e.type){case"ADD_MERGE":return t?this.checkValidations(e,this.checkFrozenPanes):this.checkValidations(e,this.checkDestructiveMerge,this.checkOverlap,this.checkFrozenPanes);case"UPDATE_CELL":return this.checkMergedContentUpdate(e);case"REMOVE_MERGE":return this.checkMergeExists(e);default:return"Success"}}handle(e){switch(e.type){case"CREATE_SHEET":case"DELETE_SHEET":this.history.update("merges",e.sheetId,{}),this.history.update("mergeCellMap",e.sheetId,{});break;case"DUPLICATE_SHEET":const t=this.merges[e.sheetId];if(!t)break;for(const o of Object.values(t).filter(lt))this.addMerge(e.sheetIdTo,o.zone);break;case"ADD_MERGE":for(const t of e.target)this.addMerge(e.sheetId,t);break;case"REMOVE_MERGE":for(const t of e.target)this.removeMerge(e.sheetId,t)}}adaptRanges(e,t,o){const s=t?[t]:Object.keys(this.merges);for(const t of s)this.applyRangeChangeOnSheet(t,e)}getMerges(e){return Object.keys(this.merges[e]||{}).map((t=>this.getMergeById(e,parseInt(t,10)))).filter(lt)}getMerge({sheetId:e,col:t,row:o}){const s=this.mergeCellMap[e],i=s?t in s&&s[t]?.[o]:void 0;return i?this.getMergeById(e,i):void 0}getMergesInZone(e,t){const o=this.mergeCellMap[e];if(!o)return[];const s=new Set;for(let e=t.left;e<=t.right;e++)for(let i=t.top;i<=t.bottom;i++){const t=o[e]?.[i];t&&s.add(t)}return Array.from(s).map((t=>this.getMergeById(e,t))).filter(lt)}getSelectionRangeString(e,t){const o=this.getters.expandZone(e.sheetId,e.zone),s=ca({...e,zone:{...o,bottom:ua(e)?void 0:o.bottom,right:ga(e)?void 0:o.right}},this.getters.getSheetSize),i=this.getters.getRangeString(s,t);if(this.isSingleCellOrMerge(e.sheetId,e.zone)){const{sheetName:e,xc:t}=ta(i);return oa(e,t.split(":")[0])}return i}doesIntersectMerge(e,t){for(const o of this.getMerges(e))if(Sr(t,o))return!0;return!1}doesColumnsHaveCommonMerges(e,t,o){const s=this.getters.getSheet(e);for(let i=0;i<this.getters.getNumberRows(e);i++)if(this.isInSameMerge(s.id,t,i,o,i))return!0;return!1}doesRowsHaveCommonMerges(e,t,o){const s=this.getters.getSheet(e);for(let i=0;i<=this.getters.getNumberCols(e);i++)if(this.isInSameMerge(s.id,i,t,i,o))return!0;return!1}expandZone(e,t){const{left:o,right:s,top:i,bottom:n}=t;let r={left:o,right:s,top:i,bottom:n};for(const t in this.merges[e]){const o=this.getMergeById(e,parseInt(t));o&&Sr(o,r)&&(r=fr(o,r))}return br(r,t)?r:this.expandZone(e,r)}isInSameMerge(e,t,o,s,i){const n=this.getMerge({sheetId:e,col:t,row:o}),r=this.getMerge({sheetId:e,col:s,row:i});return!(!n||!r)&&br(n,r)}isInMerge({sheetId:e,col:t,row:o}){const s=this.mergeCellMap[e];return!!s&&(t in s&&Boolean(s[t]?.[o]))}getMainCellPosition(e){const t=this.getMerge(e);return t?{sheetId:e.sheetId,col:t.left,row:t.top}:e}isMergeHidden(e,t){const o=this.getters.getHiddenColsGroups(e),s=this.getters.getHiddenRowsGroups(e);for(const e of o)if(t.left>=e[0]&&t.right<=e[e.length-1])return!0;for(const e of s)if(t.top>=e[0]&&t.bottom<=e[e.length-1])return!0;return!1}isSingleCellOrMerge(e,t){const o=this.getMerge({sheetId:e,col:t.left,row:t.top});if(o)return br(t,o);const{numberOfCols:s,numberOfRows:i}=wr(t);return 1===s&&1===i}isMainCellPosition(e){return mt(this.getMainCellPosition(e),e)}isMergeDestructive(e,t){let{left:o,right:s,top:i,bottom:n}=t;s=Ze(s,0,this.getters.getNumberCols(e)-1),n=Ze(n,0,this.getters.getNumberRows(e)-1);for(let t=i;t<=n;t++)for(let n=o;n<=s;n++)if(n!==o||t!==i){const o=this.getters.getCell({sheetId:e,col:n,row:t});if(o&&""!==o.content)return!0}return!1}getMergeById(e,t){const o=this.merges[e]?.[t];return void 0!==o?Ok(t,o):void 0}checkDestructiveMerge({sheetId:e,target:t}){if(!this.getters.tryGetSheet(e))return"Success";return t.some((t=>this.isMergeDestructive(e,t)))?"MergeIsDestructive":"Success"}checkOverlap({target:e}){for(const t of e)for(const o of e)if(t!==o&&Sr(t,o))return"MergeOverlap";return"Success"}checkFrozenPanes({sheetId:e,target:t}){if(!this.getters.tryGetSheet(e))return"Success";const{xSplit:o,ySplit:s}=this.getters.getPaneDivisions(e);return Mr(t,o,s)?"FrozenPaneOverlap":"Success"}checkMergedContentUpdate(e){const{col:t,row:o,content:s}=e;if(void 0===s)return"Success";const{col:i,row:n}=this.getMainCellPosition(e);return i===t&&n===o?"Success":"CellIsMerged"}checkMergeExists(e){const{sheetId:t,target:o}=e;for(const e of o){const{left:o,top:s}=e,i=this.getMerge({sheetId:t,col:o,row:s});if(void 0===i||!br(e,i))return"InvalidTarget"}return"Success"}addMerge(e,t){let{left:o,right:s,top:i,bottom:n}=t;s=Ze(s,0,this.getters.getNumberCols(e)-1),n=Ze(n,0,this.getters.getNumberRows(e)-1);if(Oo(o,i)===Oo(s,n))return;const r=this.getters.getCell({sheetId:e,col:o,row:i}),a=this.nextId++;this.history.update("merges",e,a,this.getters.getRangeFromSheetXC(e,dr({left:o,top:i,right:s,bottom:n})));const l=new Set;for(let t=i;t<=n;t++)for(let n=o;n<=s;n++){n===o&&t===i||this.dispatch("UPDATE_CELL",{sheetId:e,col:n,row:t,style:r?r.style:null,content:""});const s=this.getMerge({sheetId:e,col:n,row:t});s&&l.add(s.id),this.history.update("mergeCellMap",e,n,t,a)}for(const t of l){const{top:o,bottom:s,left:i,right:n}=this.getMergeById(e,t);for(let t=o;t<=s;t++)for(let o=i;o<=n;o++){const s={sheetId:e,col:o,row:t},i=this.getMerge(s);i&&i.id===a||(this.history.update("mergeCellMap",e,o,t,void 0),this.dispatch("CLEAR_CELL",s))}this.history.update("merges",e,t,void 0)}}removeMerge(e,t){const{left:o,top:s,bottom:i,right:n}=t,r=this.getMerge({sheetId:e,col:o,row:s});if(void 0!==r&&br(t,r)){this.history.update("merges",e,r.id,void 0);for(let t=s;t<=i;t++)for(let s=o;s<=n;s++)this.history.update("mergeCellMap",e,s,t,void 0)}}applyRangeChangeOnSheet(e,t){const o=Object.entries(this.merges[e]||{});for(const[s,i]of o)if(i){const o=i.zone,n=t(i);switch(n.changeType){case"NONE":break;case"REMOVE":this.removeMerge(e,o);break;default:const{numberOfCols:t,numberOfRows:i}=wr(n.range.zone);1===t&&1===i?this.removeMerge(e,o):this.history.update("merges",e,parseInt(s,10),n.range)}}this.history.update("mergeCellMap",e,{});for(const t of this.getMerges(e))for(const{col:o,row:s}of Er(t))this.history.update("mergeCellMap",e,o,s,t.id)}import(e){const t=e.sheets||[];for(const e of t)this.history.update("merges",e.id,{}),this.history.update("mergeCellMap",e.id,{}),e.merges&&this.importMerges(e.id,e.merges)}importMerges(e,t){for(const o of t)this.addMerge(e,ar(o))}export(e){for(const t of e.sheets){const e=this.merges[t.id];e&&t.merges.push(..._k(e))}}exportForExcel(e){this.export(e)}}).add("headerSize",class extends Rk{static getters=["getUserRowSize","getColSize"];sizes={};handle(e){switch(e.type){case"CREATE_SHEET":this.history.update("sizes",e.sheetId,{COL:Array(this.getters.getNumberCols(e.sheetId)).fill(void 0),ROW:Array(this.getters.getNumberRows(e.sheetId)).fill(void 0)});break;case"DUPLICATE_SHEET":this.history.update("sizes",e.sheetIdTo,ze(this.sizes[e.sheetId]));break;case"DELETE_SHEET":const t={...this.sizes};delete t[e.sheetId],this.history.update("sizes",t);break;case"REMOVE_COLUMNS_ROWS":{const t=Et(this.sizes[e.sheetId][e.dimension],e.elements);this.history.update("sizes",e.sheetId,e.dimension,t);break}case"ADD_COLUMNS_ROWS":{const t=[...this.sizes[e.sheetId][e.dimension]],o=pt(e.position,e.base),s=t[e.base];t.splice(o,0,...Array(e.quantity).fill(s)),this.history.update("sizes",e.sheetId,e.dimension,t);break}case"RESIZE_COLUMNS_ROWS":if("ROW"===e.dimension)for(const t of e.elements)this.history.update("sizes",e.sheetId,e.dimension,t,e.size||void 0);else for(const t of e.elements)this.history.update("sizes",e.sheetId,e.dimension,t,e.size||void 0)}}getColSize(e,t){return Math.round(this.sizes[e]?.COL[t]||se)}getUserRowSize(e,t){const o=this.sizes[e]?.ROW[t];return o?Math.round(o):void 0}import(e){for(const t of e.sheets){const e={COL:Array(t.colNumber).fill(void 0),ROW:Array(t.rowNumber).fill(void 0)};for(const[o,s]of Object.entries(t.rows))s.size&&(e.ROW[o]=s.size);for(const[o,s]of Object.entries(t.cols))s.size&&(e.COL[o]=s.size);this.sizes[t.id]=e}}exportForExcel(e){this.exportData(e,!0)}export(e){this.exportData(e)}exportData(e,t=!1){for(const o of e.sheets){void 0===o.rows&&(o.rows={});for(const e of je(0,this.getters.getNumberRows(o.id)))(t||this.sizes[o.id].ROW[e])&&(o.rows[e]={...o.rows[e],size:this.getUserRowSize(o.id,e)??ie});void 0===o.cols&&(o.cols={});for(const e of je(0,this.getters.getNumberCols(o.id)))(t||this.sizes[o.id].COL[e])&&(o.cols[e]={...o.cols[e],size:this.getColSize(o.id,e)})}}}).add("borders",class extends Rk{static getters=["getCellBorder","getBordersColors"];borders={};allowDispatch(e){return"SET_BORDER"===e.type?this.checkBordersUnchanged(e):"Success"}handle(e){switch(e.type){case"ADD_MERGE":for(const t of e.target)this.addBordersToMerge(e.sheetId,t);break;case"DUPLICATE_SHEET":const t=this.borders[e.sheetId];if(t){const o=t.slice().map((e=>e?.slice().map((e=>ze(e)))));this.history.update("borders",e.sheetIdTo,o)}break;case"DELETE_SHEET":const o={...this.borders};delete o[e.sheetId],this.history.update("borders",o);break;case"SET_BORDER":this.setBorder(e.sheetId,e.col,e.row,e.border);break;case"SET_BORDERS_ON_TARGET":for(const t of e.target)for(let o=t.top;o<=t.bottom;o++)for(let s=t.left;s<=t.right;s++)this.setBorder(e.sheetId,s,o,e.border);break;case"SET_ZONE_BORDERS":if(e.border){const t=e.target.map((t=>this.getters.expandZone(e.sheetId,t)));this.setBorders(e.sheetId,t,e.border.position,""===e.border.color?void 0:{style:e.border.style||ve,color:e.border.color||be})}break;case"CLEAR_FORMATTING":this.clearBorders(e.sheetId,e.target);break;case"REMOVE_COLUMNS_ROWS":const s=[...e.elements].sort(((e,t)=>t-e));for(const t of Ye(s))if("COL"===e.dimension){const o=this.getters.getColsZone(e.sheetId,t[t.length-1],t[0]);this.clearInsideBorders(e.sheetId,[o]),this.shiftBordersHorizontally(e.sheetId,t[0]+1,-t.length)}else{const o=this.getters.getRowsZone(e.sheetId,t[t.length-1],t[0]);this.clearInsideBorders(e.sheetId,[o]),this.shiftBordersVertically(e.sheetId,t[0]+1,-t.length)}break;case"ADD_COLUMNS_ROWS":"COL"===e.dimension?this.handleAddColumns(e):this.handleAddRows(e)}}handleAddColumns(e){let t,o;"before"===e.position?(this.shiftBordersHorizontally(e.sheetId,e.base,e.quantity),t=e.base-1,o=e.base+e.quantity):(this.shiftBordersHorizontally(e.sheetId,e.base+1,e.quantity),t=e.base,o=e.base+e.quantity+1),this.ensureColumnBorderContinuity(e.sheetId,t,o)}handleAddRows(e){let t,o;"before"===e.position?(this.shiftBordersVertically(e.sheetId,e.base,e.quantity),t=e.base-1,o=e.base+e.quantity):(this.shiftBordersVertically(e.sheetId,e.base+1,e.quantity),t=e.base,o=e.base+e.quantity+1),this.ensureRowBorderContinuity(e.sheetId,t,o)}getCellBorder({sheetId:e,col:t,row:o}){const s=this.borders[e]?.[t]?.[o];return s?.top||s?.bottom||s?.left||s?.right?ze(s):null}getBordersColors(e){const t=[],o=this.borders[e];if(o)for(const e of o.filter(lt))for(const o of e)if(o)for(const e of["top","bottom","left","right"]){const s=o[e]?.color;s&&t.push(s)}return t}ensureColumnBorderContinuity(e,t,o){const s=je(t+1,o);for(let i=0;i<this.getters.getNumberRows(e);i++){const n=this.getCellBorder({sheetId:e,col:t,row:i}),r=this.getCellBorder({sheetId:e,col:o,row:i});if(n&&r){const t=this.getCommonSides(n,r);for(const o of s)this.addBorder(e,o,i,t)}}}ensureRowBorderContinuity(e,t,o){const s=je(t+1,o);for(let i=0;i<this.getters.getNumberCols(e);i++){const n=this.getCellBorder({sheetId:e,col:i,row:t}),r=this.getCellBorder({sheetId:e,col:i,row:o});if(n&&r){const t=this.getCommonSides(n,r);for(const o of s)this.addBorder(e,i,o,t)}}}getCommonSides(e,t){const o={};for(const s of["top","bottom","left","right"])e[s]&&mt(e[s],t[s])&&(o[s]=e[s]);return o}getColumnsWithBorders(e){const t=this.borders[e];return t?Object.keys(t).map((e=>parseInt(e,10))):[]}getRowsWithBorders(e){const t=this.borders[e]?.filter(lt);if(!t)return[];const o=new Set;for(const e of t)for(const t in e)o.add(parseInt(t,10));return Array.from(o)}getRowsRange(e){return this.borders[e]?je(0,this.getters.getNumberRows(e)+1):[]}shiftBordersHorizontally(e,t,o){this.borders[e]&&this.getColumnsWithBorders(e).filter((e=>e>=t)).sort(((e,t)=>o<0?e-t:t-e)).forEach((t=>{this.moveBordersOfColumn(e,t,o)}))}shiftBordersVertically(e,t,o){this.borders[e]&&(o<0&&this.moveBordersOfRow(e,t,o,{destructive:!1}),this.getRowsWithBorders(e).filter((e=>e>=t)).sort(((e,t)=>o<0?e-t:t-e)).forEach((t=>{this.moveBordersOfRow(e,t,o)})))}moveBordersOfRow(e,t,o,{destructive:s}={destructive:!0}){const i=this.borders[e];i&&this.getColumnsWithBorders(e).forEach((n=>{const r=i[n]?.[t+o],a=i[n]?.[t];this.history.update("borders",e,n,t+o,s?a:a||r),this.history.update("borders",e,n,t,void 0)}))}moveBordersOfColumn(e,t,o,{destructive:s}={destructive:!0}){const i=this.borders[e];i&&this.getRowsRange(e).forEach((n=>{const r=i[t+o]?.[n],a=i[t]?.[n];this.history.update("borders",e,t+o,n,s?a:a||r),s&&this.history.update("borders",e,t,n,void 0)}))}setBorder(e,t,o,s,i=!0){const n=this.getters.getNumberCols(e)-1,r=this.getters.getNumberRows(e)-1;!i&&this.borders[e]?.[t]?.[o]?.left||(this.history.update("borders",e,t,o,"left",s?.left),s?.left&&t>0&&!mt(this.borders[e]?.[t-1]?.[o]?.right,s?.left)&&this.history.update("borders",e,t-1,o,"right",void 0)),!i&&this.borders[e]?.[t]?.[o]?.top||(this.history.update("borders",e,t,o,"top",s?.top),s?.top&&o>0&&!mt(this.borders[e]?.[t]?.[o-1]?.bottom,s?.top)&&this.history.update("borders",e,t,o-1,"bottom",void 0)),!i&&this.borders[e]?.[t]?.[o]?.right||(this.history.update("borders",e,t,o,"right",s?.right),s?.right&&t<n&&!mt(this.borders[e]?.[t+1]?.[o]?.left,s?.right)&&this.history.update("borders",e,t+1,o,"left",void 0)),!i&&this.borders[e]?.[t]?.[o]?.bottom||(this.history.update("borders",e,t,o,"bottom",s?.bottom),s?.bottom&&o<r&&!mt(this.borders[e]?.[t]?.[o+1]?.top,s?.bottom)&&this.history.update("borders",e,t,o+1,"top",void 0))}clearBorders(e,t,o=!1){const s=this.getters.getNumberCols(e)-1,i=this.getters.getNumberRows(e)-1;for(const n of er(t))for(let t=n.top;t<=n.bottom;t++){o&&(n.left>0&&this.history.update("borders",e,n.left-1,t,"right",void 0),n.right<s&&this.history.update("borders",e,n.right+1,t,"left",void 0));for(let s=n.left;s<=n.right;s++)this.history.update("borders",e,s,t,void 0),o&&(n.top>0&&this.history.update("borders",e,s,n.top-1,"bottom",void 0),n.bottom<i&&this.history.update("borders",e,s,n.bottom+1,"top",void 0))}}clearInsideBorders(e,t){for(const o of t)for(let t=o.top;t<=o.bottom;t++)for(let s=o.left;s<=o.right;s++)this.history.update("borders",e,s,t,void 0)}addBorder(e,t,o,s){this.setBorder(e,t,o,{...this.getCellBorder({sheetId:e,col:t,row:o}),...s})}setBorders(e,t,o,s){if("clear"===o)return this.clearBorders(e,t,!0);for(const i of er(t)){if("all"===o)for(let t=i.top;t<=i.bottom;t++)for(let o=i.left;o<=i.right;o++)this.addBorder(e,o,t,{top:s,right:s,bottom:s,left:s});if("h"===o||"hv"===o){if(i.top===i.bottom)continue;for(let t=i.left;t<=i.right;t++){this.addBorder(e,t,i.top,{bottom:s});for(let o=i.top+1;o<i.bottom;o++)this.addBorder(e,t,o,{top:s,bottom:s});this.addBorder(e,t,i.bottom,{top:s})}}if("v"===o||"hv"===o){if(i.left===i.right)continue;for(let t=i.top;t<=i.bottom;t++){this.addBorder(e,i.left,t,{right:s});for(let o=i.left+1;o<i.right;o++)this.addBorder(e,o,t,{left:s,right:s});this.addBorder(e,i.right,t,{left:s})}}if("left"===o||"external"===o)for(let t=i.top;t<=i.bottom;t++)this.addBorder(e,i.left,t,{left:s});if("right"===o||"external"===o)for(let t=i.top;t<=i.bottom;t++)this.addBorder(e,i.right,t,{right:s});if("top"===o||"external"===o)for(let t=i.left;t<=i.right;t++)this.addBorder(e,t,i.top,{top:s});if("bottom"===o||"external"===o)for(let t=i.left;t<=i.right;t++)this.addBorder(e,t,i.bottom,{bottom:s})}}addBordersToMerge(e,t){const{left:o,right:s,top:i,bottom:n}=t,r=this.getCellBorder({sheetId:e,col:o,row:i}),a=this.getCellBorder({sheetId:e,col:s,row:n});this.clearBorders(e,[t]),r?.top&&this.setBorders(e,[{...t,bottom:i}],"top",r.top),r?.left&&this.setBorders(e,[{...t,right:o}],"left",r.left),a?.bottom?this.setBorders(e,[{...t,top:n}],"bottom",a.bottom):r?.bottom&&this.setBorders(e,[{...t,top:n}],"bottom",r.bottom),a?.right?this.setBorders(e,[{...t,left:s}],"right",a.right):r?.right&&this.setBorders(e,[{...t,left:s}],"right",r.right)}checkBordersUnchanged(e){const t=this.getCellBorder(e),o=!(e.border?.bottom||e.border?.left||e.border?.right||e.border?.top);return!t&&o||mt(t,e.border)?"NoChanges":"Success"}import(e){if(Object.keys(e.borders||{}).length)for(const t of e.sheets)for(const[o,s]of Br(t.id,t.borders)){const{sheetId:t,col:i,row:n}=o,r=e.borders[s];this.setBorder(t,i,n,r,!1)}for(const t of e.sheets)if(t.merges)for(const e of t.merges)this.addBordersToMerge(t.id,ar(e))}export(e){const t={};for(const o of e.sheets){const e={};for(let s=0;s<o.colNumber;s++)for(let i=0;i<o.rowNumber;i++){const n=this.getCellBorder({sheetId:o.id,col:s,row:i});if(n){const r=Hr(n,t),a={sheetId:o.id,col:s,row:i};e[r]??=[],e[r].push(a)}}o.borders=Ur(e)}e.borders=t}exportForExcel(e){this.export(e)}}).add("conditional formatting",class extends Rk{static getters=["getConditionalFormats","getRulesSelection","getRulesByCell","getAdaptedCfRanges"];cfRules={};adaptCFFormulas(e){for(const t in this.cfRules)for(const o of this.cfRules[t])if("DataBarRule"===o.rule.type&&o.rule.rangeValues){const s=e(o.rule.rangeValues);switch(s.changeType){case"REMOVE":this.history.update("cfRules",t,this.cfRules[t].indexOf(o),"rule","rangeValues",void 0);break;case"RESIZE":case"MOVE":case"CHANGE":this.history.update("cfRules",t,this.cfRules[t].indexOf(o),"rule","rangeValues",s.range)}}else if("CellIsRule"===o.rule.type)for(let s=0;s<o.rule.values.length;s++)this.history.update("cfRules",t,this.cfRules[t].indexOf(o),"rule","values",s,this.getters.adaptFormulaStringDependencies(t,o.rule.values[s],e));else if("IconSetRule"===o.rule.type)for(const s of["lowerInflectionPoint","upperInflectionPoint"])"formula"===o.rule[s].type&&this.history.update("cfRules",t,this.cfRules[t].indexOf(o),"rule",s,"value",this.getters.adaptFormulaStringDependencies(t,o.rule[s].value,e));else if("ColorScaleRule"===o.rule.type)for(const s of["minimum","maximum","midpoint"]){const i=o.rule[s];"formula"===i?.type&&i?.value&&this.history.update("cfRules",t,this.cfRules[t].indexOf(o),"rule",s,"value",this.getters.adaptFormulaStringDependencies(t,i.value,e))}}adaptCFRanges(e,t){for(const o of this.cfRules[e])for(const s of o.ranges){const i=t(s);switch(i.changeType){case"REMOVE":const t=o.ranges.slice();t.splice(o.ranges.indexOf(s),1),t.length>=1?this.history.update("cfRules",e,this.cfRules[e].indexOf(o),"ranges",t):this.removeConditionalFormatting(o.id,e);break;case"RESIZE":case"MOVE":case"CHANGE":this.history.update("cfRules",e,this.cfRules[e].indexOf(o),"ranges",o.ranges.indexOf(s),i.range)}}}adaptRanges(e,t,o){const s=t?[t]:Object.keys(this.cfRules);for(const t of s)this.adaptCFRanges(t,e);this.adaptCFFormulas(e)}allowDispatch(e){switch(e.type){case"ADD_CONDITIONAL_FORMAT":return e.ranges.some((e=>!this.getters.tryGetSheet(e._sheetId)))?"InvalidSheetId":this.checkValidations(e,this.checkCFRule,this.checkEmptyRange,this.checkCFHasChanged);case"CHANGE_CONDITIONAL_FORMAT_PRIORITY":return this.checkValidPriorityChange(e.cfId,e.delta,e.sheetId)}return"Success"}handle(e){switch(e.type){case"CREATE_SHEET":this.cfRules[e.sheetId]=[];break;case"DUPLICATE_SHEET":this.history.update("cfRules",e.sheetIdTo,[]);for(const t of this.getConditionalFormats(e.sheetId))this.addConditionalFormatting(t,e.sheetIdTo);break;case"DELETE_SHEET":const t=Object.assign({},this.cfRules);delete t[e.sheetId],this.history.update("cfRules",t);break;case"ADD_CONDITIONAL_FORMAT":const o={...e.cf,ranges:e.ranges.map((t=>this.getters.getRangeString(this.getters.getRangeFromRangeData(t),e.sheetId)))};this.addConditionalFormatting(o,e.sheetId);break;case"REMOVE_CONDITIONAL_FORMAT":this.removeConditionalFormatting(e.id,e.sheetId);break;case"CHANGE_CONDITIONAL_FORMAT_PRIORITY":this.changeCFPriority(e.cfId,e.delta,e.sheetId)}}import(e){for(const t of e.sheets)this.cfRules[t.id]=t.conditionalFormats.map((e=>this.mapToConditionalFormatInternal(t.id,e)))}export(e){if(e.sheets)for(const t of e.sheets)this.cfRules[t.id]&&(t.conditionalFormats=this.cfRules[t.id].map((e=>this.mapToConditionalFormat(t.id,e))))}exportForExcel(e){if(e.sheets)for(const t of e.sheets)this.cfRules[t.id]&&(t.conditionalFormats=this.cfRules[t.id].map((e=>this.mapToConditionalFormat(t.id,e,{useBoundedReference:!0}))))}getConditionalFormats(e){return this.cfRules[e]?.map((t=>this.mapToConditionalFormat(e,t)))||[]}getRulesSelection(e,t){const o=new Set;return t.forEach((t=>{this.getRulesByZone(e,t).forEach((e=>{o.add(e)}))})),Array.from(o)}getRulesByZone(e,t){const o=new Set;for(let s=t.top;s<=t.bottom;s++)for(let i=t.left;i<=t.right;i++){this.getRulesByCell(e,i,s).forEach((e=>{o.add(e.id)}))}return o}getRulesByCell(e,t,o){const s=[];for(const i of this.cfRules[e])for(const e of i.ranges)Cr(t,o,e.zone)&&s.push(i);return new Set(s.map((t=>this.mapToConditionalFormat(e,t))))}getAdaptedCfRanges(e,t,o,s){if(0===o.length&&0===s.length)return;const i=this.getters.getConditionalFormats(e),n=i.findIndex((e=>e.id===t.id));let r=[];n>-1&&(r=i[n].ranges.map(rr));const a=er(r,s);return er([...o,...a],[]).map((t=>this.getters.getRangeDataFromZone(e,t)))}mapToConditionalFormat(e,t,{useBoundedReference:o}={useBoundedReference:!1}){const s=t.ranges.map((t=>this.getters.getRangeString(t,e,{useBoundedReference:o})));return"DataBarRule"!==t.rule.type?{...t,rule:{...t.rule},ranges:s}:{...t,rule:{...t.rule,rangeValues:t.rule.rangeValues&&this.getters.getRangeString(t.rule.rangeValues,e,{useBoundedReference:o})},ranges:s}}mapToConditionalFormatInternal(e,t){const o=t.ranges.map((t=>this.getters.getRangeFromSheetXC(e,t)));return"DataBarRule"!==t.rule.type?{...t,rule:{...t.rule},ranges:o}:{...t,rule:{...t.rule,rangeValues:t.rule.rangeValues?this.getters.getRangeFromSheetXC(e,t.rule.rangeValues):void 0},ranges:o}}addConditionalFormatting(e,t){const o=this.cfRules[t].slice(),s=o.findIndex((t=>t.id===e.id)),i=this.mapToConditionalFormatInternal(t,e);s>-1?o.splice(s,1,i):o.push(i),this.history.update("cfRules",t,o)}checkValidPriorityChange(e,t,o){if(!this.cfRules[o])return"InvalidSheetId";const s=this.cfRules[o].findIndex((t=>t.id===e));if(-1===s)return"InvalidConditionalFormatId";const i=s-t;return i<0||i>=this.cfRules[o].length?"InvalidConditionalFormatId":"Success"}checkEmptyRange(e){return e.ranges.length?"Success":"EmptyRange"}checkCFRule(e){const t=e.cf.rule;switch(t.type){case"CellIsRule":return this.checkValidations(t,this.checkOperatorArgsNumber,this.checkCFValues);case"ColorScaleRule":return this.checkValidations(t,this.chainValidations(this.checkThresholds(this.checkFormulaCompilation)),this.chainValidations(this.checkThresholds(this.checkNaN),this.batchValidations(this.checkMinBiggerThanMax,this.checkMinBiggerThanMid,this.checkMidBiggerThanMax)));case"IconSetRule":return this.checkValidations(t,this.chainValidations(this.checkInflectionPoints(this.checkNaN),this.checkLowerBiggerThanUpper),this.chainValidations(this.checkInflectionPoints(this.checkFormulaCompilation)))}return"Success"}checkCFHasChanged(e){const t=this.mapToConditionalFormatInternal(e.sheetId,{...e.cf,ranges:e.ranges.map((t=>this.getters.getRangeString(this.getters.getRangeFromRangeData(t),e.sheetId)))}),o=this.cfRules[e.sheetId]?.find((t=>t.id===e.cf.id));return o&&mt(t,o)?"NoChanges":"Success"}checkOperatorArgsNumber(e){const t=Zx.get(e.operator).numberOfValues({type:e.operator,values:e.values});if(void 0===t||t>2)throw new Error("Checking more than 2 arguments is currently not supported. Add the appropriate CommandResult if you want to.");const o=[],s=e=>void 0===e||""===e;return t>=1&&s(e.values[0])&&o.push("FirstArgMissing"),t>=2&&s(e.values[1])&&o.push("SecondArgMissing"),o.length?o:"Success"}checkNaN(e,t){if(["number","percentage","percentile"].includes(e.type)&&(""===e.value||isNaN(e.value)))switch(t){case"min":return"MinNaN";case"max":return"MaxNaN";case"mid":return"MidNaN";case"upperInflectionPoint":return"ValueUpperInflectionNaN";case"lowerInflectionPoint":return"ValueLowerInflectionNaN"}return"Success"}checkFormulaCompilation(e,t){if("formula"!==e.type)return"Success";if(PS(e.value||"").isBadExpression)switch(t){case"min":return"MinInvalidFormula";case"max":return"MaxInvalidFormula";case"mid":return"MidInvalidFormula";case"upperInflectionPoint":return"ValueUpperInvalidFormula";case"lowerInflectionPoint":return"ValueLowerInvalidFormula"}return"Success"}checkThresholds(e){return this.batchValidations((t=>e(t.minimum,"min")),(t=>e(t.maximum,"max")),(t=>t.midpoint?e(t.midpoint,"mid"):"Success"))}checkInflectionPoints(e){return this.batchValidations((t=>e(t.lowerInflectionPoint,"lowerInflectionPoint")),(t=>e(t.upperInflectionPoint,"upperInflectionPoint")))}checkLowerBiggerThanUpper(e){const t=e.lowerInflectionPoint.value,o=e.upperInflectionPoint.value;return["number","percentage","percentile"].includes(e.lowerInflectionPoint.type)&&e.lowerInflectionPoint.type===e.upperInflectionPoint.type&&Number(t)>Number(o)?"LowerBiggerThanUpper":"Success"}checkMinBiggerThanMax(e){const t=e.minimum.value,o=e.maximum.value;return["number","percentage","percentile"].includes(e.minimum.type)&&e.minimum.type===e.maximum.type&&Dk(t)>=Dk(o)?"MinBiggerThanMax":"Success"}checkMidBiggerThanMax(e){const t=e.midpoint?.value,o=e.maximum.value;return e.midpoint&&["number","percentage","percentile"].includes(e.midpoint.type)&&e.midpoint.type===e.maximum.type&&Dk(t)>=Dk(o)?"MidBiggerThanMax":"Success"}checkMinBiggerThanMid(e){const t=e.minimum.value,o=e.midpoint?.value;return e.midpoint&&["number","percentage","percentile"].includes(e.midpoint.type)&&e.minimum.type===e.midpoint.type&&Dk(t)>=Dk(o)?"MinBiggerThanMid":"Success"}checkCFValues(e){for(const t of e.values){if(!t.startsWith("="))continue;if(PS(t||"").isBadExpression)return"ValueCellIsInvalidFormula"}return"Success"}removeConditionalFormatting(e,t){const o=this.cfRules[t].findIndex((t=>t.id===e));if(-1!==o){const e=this.cfRules[t].slice();e.splice(o,1),this.history.update("cfRules",t,e)}}changeCFPriority(e,t,o){const s=this.cfRules[o].findIndex((t=>t.id===e)),i=this.cfRules[o][s],n=s-t,r=[...this.cfRules[o]];r.splice(s,1),r.splice(n,0,i),this.history.update("cfRules",o,r)}}).add("figures",class extends Rk{static getters=["getFigures","getFigure","getFigureSheetId"];figures={};insertionOrders=[];adaptRanges(e,t){if(t)for(const o of this.getFigures(t)){const s=e(this.getters.getRangeFromZone(t,{left:o.col,right:o.col,top:o.row,bottom:o.row}));if("MOVE"===s.changeType)this.history.update("figures",t,o.id,"col",s.range.zone.right),this.history.update("figures",t,o.id,"row",s.range.zone.bottom);else if("REMOVE"===s.changeType){const s=e(this.getters.getRangeFromZone(t,{left:0,right:o.col-1,top:0,bottom:o.row-1}));let{offset:i,col:n,row:r}=o;"NONE"!==s.changeType&&(n=s.range.zone.right+1,r=s.range.zone.bottom+1),({offset:i,col:n,row:r}=this.getPositionInSheet(t,{...o,col:n,row:r})),this.history.update("figures",t,o.id,"offset",i),this.history.update("figures",t,o.id,"col",n),this.history.update("figures",t,o.id,"row",r)}}}allowDispatch(e){switch(e.type){case"CREATE_FIGURE":return this.checkValidations(e,this.checkFigureDuplicate,this.checkFigureAnchorOffset);case"UPDATE_FIGURE":return this.checkValidations(e,this.checkFigureExists,this.checkFigureAnchorOffset);case"DELETE_FIGURE":return this.checkFigureExists(e);default:return"Success"}}beforeHandle(e){if("DELETE_SHEET"===e.type)this.getters.getFigures(e.sheetId).forEach((t=>{this.dispatch("DELETE_FIGURE",{figureId:t.id,sheetId:e.sheetId})}))}handle(e){switch(e.type){case"CREATE_SHEET":this.figures[e.sheetId]={};break;case"DELETE_SHEET":this.deleteSheet(e.sheetId);break;case"CREATE_FIGURE":const t={id:e.figureId,col:e.col,row:e.row,offset:e.offset,width:e.size.width,height:e.size.height,tag:e.tag};this.addFigure(t,e.sheetId);break;case"UPDATE_FIGURE":this.updateFigure(e);break;case"DELETE_FIGURE":this.removeFigure(e.figureId,e.sheetId);break;case"REMOVE_COLUMNS_ROWS":"COL"===e.dimension?this.onColRemove(e.sheetId):this.onRowRemove(e.sheetId)}}onColRemove(e){const t=this.getters.getNumberCols(e),o=new Array(t+1);o[t]=0;for(let s=t-1;s>=0;s--)o[s]=o[s+1]+this.getters.getColSize(e,s);for(const t of this.getFigures(e))if(t.offset.x+t.width>o[t.col]){let s=t.offset.x,i=t.col;for(s=Math.min(s,o[i]-t.width);s<0&&i>0;)i--,s=o[i]-t.width;s!==t.offset.x&&this.history.update("figures",e,t.id,"offset",{x:Math.max(s,0),y:t.offset.y}),i!==t.col&&this.history.update("figures",e,t.id,"col",i)}}onRowRemove(e){const t=this.getters.getNumberRows(e),o=new Array(t+1);o[t]=0;for(let s=t-1;s>=0;s--)o[s]=o[s+1]+(this.getters.getUserRowSize(e,s)??ie);for(const t of this.getFigures(e))if(t.offset.y+t.height>o[t.row]){let s=t.offset.y,i=t.row;for(let t=this.getters.getUserRowSize(e,i)??ie;t<s;t=this.getters.getUserRowSize(e,i)??ie)i+=1,s-=t;for(s=Math.min(s,o[i]-t.height);s<0&&i>0;)i--,s=o[i]-t.height;s!==t.offset.y&&this.history.update("figures",e,t.id,"offset",{x:t.offset.x,y:Math.max(0,s)}),i!==t.row&&this.history.update("figures",e,t.id,"row",i)}else t.offset.y+t.height>o[0]&&this.history.update("figures",e,t.id,"offset",{x:t.offset.x,y:Math.max(o[0]-t.height,0)})}getPositionInSheet(e,t){const{numberOfRows:o,numberOfCols:s}=this.getters.getSheetSize(e);let i,n,r=0,a=0,{col:l,row:c}=t;const h={...t.offset};for(i=o;r<t.height&&i>0;i--)r+=this.getters.getUserRowSize(e,i-1)??ie;for(c>i?(c=i,h.y=Math.max(r-t.height,0)):c===i&&(h.y=Ze(h.y,0,Math.max(r-t.height,0))),n=s;a<t.width&&n>0;n--)a+=this.getters.getColSize(e,n-1);return l>n?(l=n,h.x=Math.max(a-t.width,0)):n===l&&(h.x=Ze(h.x,0,Math.max(a-t.width,0))),{col:l,row:c,offset:h}}updateFigure(e){if(!("figureId"in e)||!("sheetId"in e))return;const{figureId:t,sheetId:o,...s}=e,i={...this.getFigure(o,t),...s};for(const[e,t]of Object.entries(s))switch(e){case"offset":this.history.update("figures",o,i.id,e,t);break;case"col":case"row":case"width":case"height":void 0!==t&&this.history.update("figures",o,i.id,e,t)}}addFigure(e,t){this.history.update("figures",t,e.id,e),this.history.update("insertionOrders",this.insertionOrders.length,e.id)}deleteSheet(e){this.history.update("insertionOrders",this.insertionOrders.filter((t=>!this.figures[e]?.[t]))),this.history.update("figures",e,void 0)}removeFigure(e,t){this.history.update("insertionOrders",this.insertionOrders.filter((t=>t!==e))),this.history.update("figures",t,e,void 0)}checkFigureExists(e){return void 0===this.figures[e.sheetId]?.[e.figureId]?"FigureDoesNotExist":"Success"}checkFigureDuplicate(e){return Object.values(this.figures).find((t=>t?.[e.figureId]))?"DuplicatedFigureId":"Success"}checkFigureAnchorOffset(e){return e.col<0||e.row<0||e.offset&&(e.offset.x<0||e.offset.y<0)?"WrongSheetPosition":"Success"}getFigures(e){const t=[];for(const o of this.insertionOrders){const s=this.figures[e]?.[o];s&&t.push(s)}return t}getFigure(e,t){return this.figures[e]?.[t]}getFigureSheetId(e){return Object.keys(this.figures).find((t=>void 0!==this.figures[t]?.[e]))}import(e){for(const t of e.sheets)for(const e of t.figures)this.addFigure(e,t.id)}export(e){for(const t of e.sheets)for(const e of this.getFigures(t.id)){const o=void 0;t.figures.push({...e,data:o})}}exportForExcel(e){return this.export(e)}}).add("chart",class extends Rk{static getters=["isChartDefined","getChartDefinition","getChartType","getChartIds","getChart","getContextCreationChart"];charts={};createChart=ex(this.getters);validateChartDefinition=e=>ox(this,e.definition);adaptRanges(e){for(const[t,o]of Object.entries(this.charts))this.history.update("charts",t,o?.updateRanges(e))}allowDispatch(e){switch(e.type){case"CREATE_CHART":return this.checkValidations(e,this.chainValidations(this.validateChartDefinition,this.checkChartDuplicate));case"UPDATE_CHART":return this.checkValidations(e,this.chainValidations(this.validateChartDefinition,this.checkChartExists,this.checkChartChanged));default:return"Success"}}handle(e){switch(e.type){case"CREATE_CHART":this.addFigure(e.figureId,e.sheetId,e.col,e.row,e.offset,e.size),this.addChart(e.figureId,e.definition);break;case"UPDATE_CHART":this.addChart(e.figureId,e.definition);break;case"DUPLICATE_SHEET":{const t=this.getters.getFigures(e.sheetId);for(const o of t)if("chart"===o.tag){const t=o.id.split(we).pop(),s=`${e.sheetIdTo}${we}${t}`,i=this.charts[o.id]?.duplicateInDuplicatedSheet(e.sheetIdTo);i&&this.dispatch("CREATE_CHART",{figureId:s,col:o.col,row:o.row,offset:o.offset,size:{width:o.width,height:o.height},definition:i.getDefinition(),sheetId:e.sheetIdTo})}break}case"DELETE_FIGURE":this.history.update("charts",e.figureId,void 0);break;case"DELETE_SHEET":for(const t of this.getChartIds(e.sheetId))this.history.update("charts",t,void 0)}}getContextCreationChart(e){return this.charts[e]?.getContextCreation()}getChart(e){return this.charts[e]}getChartType(e){const t=this.charts[e]?.type;if(!t)throw new Error("Chart not defined.");return t}isChartDefined(e){return e in this.charts&&void 0!==this.charts}getChartIds(e){return Object.entries(this.charts).filter((([,t])=>t?.sheetId===e)).map((([e])=>e))}getChartDefinition(e){const t=this.charts[e]?.getDefinition();if(!t)throw new Error(`There is no chart with the given figureId: ${e}`);return t}import(e){for(const t of e.sheets)if(t.figures)for(const e of t.figures)"chart"===e.tag&&(this.charts[e.id]=this.createChart(e.id,e.data,t.id))}export(e){if(e.sheets)for(const t of e.sheets){const e=this.getters.getFigures(t.id),o=[];for(const t of e){const e=t;if(e&&"chart"===e.tag){const t=this.charts[e.id]?.getDefinition();t&&(e.data=t,o.push(e))}else o.push(e)}t.figures=o}}addFigure(e,t,o,s,i,n={width:536,height:335}){this.dispatch("CREATE_FIGURE",{sheetId:t,figureId:e,col:o,row:s,offset:i,size:n,tag:"chart"})}addChart(e,t){const o=this.getters.getFigureSheetId(e);o&&this.history.update("charts",e,this.createChart(e,t,o))}checkChartDuplicate(e){return this.getters.getFigureSheetId(e.figureId)?"DuplicatedChartId":"Success"}checkChartExists(e){return this.isChartDefined(e.figureId)?"Success":"ChartDoesNotExist"}checkChartChanged(e){return mt(this.getChartDefinition(e.figureId),e.definition)?"NoChanges":"Success"}}).add("image",class extends Rk{static getters=["getImage","getImagePath","getImageSize"];fileStore;images={};syncedImages=new Set;constructor(e){super(e),this.fileStore=e.external.fileStore}allowDispatch(e){return"CREATE_IMAGE"===e.type&&this.getters.getFigure(e.sheetId,e.figureId)?"InvalidFigureId":"Success"}handle(e){switch(e.type){case"CREATE_IMAGE":this.addFigure(e.figureId,e.sheetId,e.col,e.row,e.offset,e.size),this.history.update("images",e.sheetId,e.figureId,e.definition),this.syncedImages.add(e.definition.path);break;case"DUPLICATE_SHEET":{const t=this.getters.getFigures(e.sheetId);for(const o of t)if("image"===o.tag){const t=o.id.split(we).pop(),s=`${e.sheetIdTo}${we}${t}`,i=this.getImage(o.id);if(i){const t={width:o.width,height:o.height};this.dispatch("CREATE_IMAGE",{sheetId:e.sheetIdTo,figureId:s,offset:o.offset,col:o.col,row:o.row,size:t,definition:ze(i)})}}break}case"DELETE_FIGURE":this.history.update("images",e.sheetId,e.figureId,void 0);break;case"DELETE_SHEET":this.history.update("images",e.sheetId,void 0)}}garbageCollectExternalResources(){const e=new Set(this.getAllImages().map((e=>e.path)));for(const t of this.syncedImages)e.has(t)||this.fileStore?.delete(t)}getImage(e){for(const t of Object.values(this.images))if(t&&t[e])return t[e];throw new Error(`There is no image with the given figureId: ${e}`)}getImagePath(e){return this.getImage(e).path}getImageSize(e){return this.getImage(e).size}addFigure(e,t,o,s,i,n){this.dispatch("CREATE_FIGURE",{sheetId:t,figureId:e,col:o,row:s,offset:i,size:n,tag:"image"})}import(e){for(const t of e.sheets){const e=(t.figures||[]).filter((e=>"image"===e.tag));for(const o of e)this.history.update("images",t.id,o.id,o.data),this.syncedImages.add(o.data.path)}}export(e){for(const t of e.sheets){const e=t.figures.filter((e=>"image"===e.tag));for(const o of e)o.data=this.images[t.id]?.[o.id]}}exportForExcel(e){for(const t of e.sheets){t.images||(t.images=[]);const e=this.getters.getFigures(t.id),o=[];for(const t of e)if("image"===t?.tag){const e=this.getImage(t.id);e&&o.push({...t,data:ze(e)})}t.images=[...t.images,...o]}}getAllImages(){const e=[];for(const t in this.images)e.push(...Object.values(this.images[t]||{}).filter(lt));return e}}).add("pivot_core",class extends Rk{static getters=["getPivotCoreDefinition","getPivotDisplayName","getPivotId","getPivotFormulaId","getPivotIds","getMeasureCompiledFormula","getPivotName","isExistingPivot"];nextFormulaId=1;pivots={};formulaIds={};compiledMeasureFormulas={};allowDispatch(e){switch(e.type){case"ADD_PIVOT":return this.checkValidations(e.pivot,this.checkDuplicatedMeasureIds,this.checkSortedColumnInMeasures);case"UPDATE_PIVOT":return e.pivotId in this.pivots?mt(e.pivot,this.pivots[e.pivotId]?.definition)?"NoChanges":""===e.pivot.name?"EmptyName":this.checkValidations(e.pivot,this.checkDuplicatedMeasureIds,this.checkSortedColumnInMeasures):"PivotIdNotFound";case"RENAME_PIVOT":if(!(e.pivotId in this.pivots))return"PivotIdNotFound";if(""===e.name)return"EmptyName";break;case"REMOVE_PIVOT":case"DUPLICATE_PIVOT":case"INSERT_PIVOT":case"DUPLICATE_PIVOT":if(!(e.pivotId in this.pivots))return"PivotIdNotFound"}return"Success"}handle(e){switch(e.type){case"ADD_PIVOT":{const{pivotId:t,pivot:o}=e;this.addPivot(t,o);break}case"INSERT_PIVOT":{const{sheetId:t,col:o,row:s,pivotId:i,table:n}=e,r={sheetId:t,col:o,row:s},{cols:a,rows:l,measures:c,fieldsType:h}=n,d=new VN(a,l,c,h||{}),u=this.getPivotFormulaId(i);this.insertPivot(r,u,d);break}case"RENAME_PIVOT":this.history.update("pivots",e.pivotId,"definition","name",e.name);break;case"REMOVE_PIVOT":{const t={...this.pivots};delete t[e.pivotId];const o=this.getPivotFormulaId(e.pivotId);this.history.update("formulaIds",o,void 0),this.history.update("pivots",t);break}case"DUPLICATE_PIVOT":{const{pivotId:t,newPivotId:o}=e,s=ze(this.getPivotCore(t).definition);s.name=e.duplicatedPivotName??s.name+" (copy)",this.addPivot(o,s);break}case"UPDATE_PIVOT":this.history.update("pivots",e.pivotId,"definition",ze(e.pivot)),this.compileCalculatedMeasures(e.pivot.measures)}}adaptRanges(e,t,o){for(const t in this.compiledMeasureFormulas)for(const o in this.compiledMeasureFormulas[t]){const s=this.compiledMeasureFormulas[t][o],i=[];for(const t of s.dependencies){const o=e(t);"NONE"===o.changeType?i.push(t):i.push(o.range)}const n=this.getters.getFormulaString(t,s.tokens,i);n!==o&&this.replaceMeasureFormula(t,o,n)}}getPivotDisplayName(e){return`(#${this.getPivotFormulaId(e)}) ${this.getPivotName(e)}`}getPivotName(e){return this.getPivotCore(e).definition.name}getPivotCoreDefinition(e){return this.getPivotCore(e).definition}getPivotId(e){return this.formulaIds[e]}getPivotFormulaId(e){return this.getPivotCore(e).formulaId}getPivotIds(){return Object.keys(this.pivots)}isExistingPivot(e){return e in this.pivots}getMeasureCompiledFormula(e){if(!e.computedBy)throw new Error(`Measure ${e.fieldName} is not computed by formula`);const t=e.computedBy.sheetId;return this.compiledMeasureFormulas[t][e.computedBy.formula]}addPivot(e,t,o=this.nextFormulaId.toString()){this.history.update("pivots",e,{definition:ze(t),formulaId:o}),this.compileCalculatedMeasures(t.measures),this.history.update("formulaIds",o,e),this.history.update("nextFormulaId",this.nextFormulaId+1)}compileCalculatedMeasures(e){for(const t of e)if(t.computedBy){const e=t.computedBy.sheetId,o=this.compileMeasureFormula(t.computedBy.sheetId,t.computedBy.formula);this.history.update("compiledMeasureFormulas",e,t.computedBy.formula,o)}}insertPivot(e,t,o){this.resizeSheet(e.sheetId,e,o);const s=o.getPivotCells();for(let o=0;o<s.length;o++)for(let i=0;i<s[o].length;i++){const n=s[o][i];this.dispatch("UPDATE_CELL",{sheetId:e.sheetId,col:e.col+o,row:e.row+i,content:Vc(t,n)})}}resizeSheet(e,{col:t,row:o},s){const i=s.getNumberOfDataColumns()+1,n=this.getters.getNumberCols(e),r=n-t;r<i&&this.dispatch("ADD_COLUMNS_ROWS",{dimension:"COL",base:n-1,sheetId:e,sheetName:this.getters.getSheetName(e),quantity:i-r,position:"after"});const a=s.columns.length+s.rows.length,l=this.getters.getNumberRows(e),c=l-o;c<a&&this.dispatch("ADD_COLUMNS_ROWS",{dimension:"ROW",base:l-1,sheetId:e,sheetName:this.getters.getSheetName(e),quantity:a-c,position:"after"})}getPivotCore(e){const t=this.pivots[e];if(!t)throw new Error(`Pivot with id ${e} not found`);return t}compileMeasureFormula(e,t){const o=PS(t),s=o.dependencies.map((t=>this.getters.getRangeFromSheetXC(e,t)));return{...o,dependencies:s}}replaceMeasureFormula(e,t,o){this.history.update("compiledMeasureFormulas",e,t,void 0),this.history.update("compiledMeasureFormulas",e,o,this.compileMeasureFormula(e,o));for(const s in this.pivots){const i=this.pivots[s];if(i)for(const n of i.definition.measures)if(n.computedBy?.formula===t){const t=i.definition.measures.indexOf(n);this.history.update("pivots",s,"definition","measures",t,"computedBy",{formula:o,sheetId:e})}}}checkSortedColumnInMeasures(e){const t=e.measures.map((e=>e.id));return e.sortedColumn&&!t.includes(e.sortedColumn.measure)?"InvalidDefinition":"Success"}checkDuplicatedMeasureIds(e){const t=new Set(e.measures.map((e=>e.id)));return e.measures.length!==t.size?"InvalidDefinition":"Success"}import(e){if(e.pivots)for(const[t,o]of Object.entries(e.pivots))this.addPivot(t,o,o.formulaId);this.history.update("nextFormulaId",e.pivotNextId||_c(this.pivots)+1)}export(e){e.pivots={};for(const t in this.pivots)e.pivots[t]={...this.getPivotCoreDefinition(t),formulaId:this.getPivotFormulaId(t)};e.pivotNextId=this.nextFormulaId}}).add("spreadsheet_pivot_core",class extends Rk{allowDispatch(e){switch(e.type){case"ADD_PIVOT":case"UPDATE_PIVOT":const t=e.pivot;return this.checkDataSetValidity(t)}return"Success"}adaptRanges(e){for(const t of this.getters.getPivotIds()){const o=this.getters.getPivotCoreDefinition(t);if("SPREADSHEET"===o.type&&o.dataSet){const{sheetId:s,zone:i}=o.dataSet,n=Pk(this.getters.getRangeFromZone(s,i),e),r=n&&{sheetId:n.sheetId,zone:n.zone};this.dispatch("UPDATE_PIVOT",{pivotId:t,pivot:{...o,dataSet:r}})}}}checkDataSetValidity(e){if("SPREADSHEET"===e.type&&e.dataSet){const{zone:t,sheetId:o}=e.dataSet;return o&&this.getters.tryGetSheet(o)&&t&&cr(t)?this.getters.checkZonesExistInSheet(o,[t]):"InvalidDataSet"}return"Success"}}).add("tableStyle",class extends Rk{static getters=["getNewCustomTableStyleName","getTableStyle","getTableStyles","isTableStyleEditable"];styles={};allowDispatch(e){switch(e.type){case"CREATE_TABLE":case"UPDATE_TABLE":if(e.config?.styleId&&!this.styles[e.config.styleId])return"InvalidTableConfig";break;case"CREATE_TABLE_STYLE":if(!FR[e.templateName])return"InvalidTableStyle";try{$t(e.primaryColor)}catch(e){return"InvalidTableStyle"}}return"Success"}handle(e){switch(e.type){case"CREATE_TABLE_STYLE":const t=PR(e.tableStyleName,e.templateName,e.primaryColor);this.history.update("styles",e.tableStyleId,t);break;case"REMOVE_TABLE_STYLE":const o={...this.styles};delete o[e.tableStyleId],this.history.update("styles",o);for(const t of this.getters.getSheetIds())for(const o of this.getters.getCoreTables(t))o.config.styleId===e.tableStyleId&&this.dispatch("UPDATE_TABLE",{sheetId:t,zone:o.range.zone,config:{styleId:mR.styleId}})}}getTableStyle(e){if(!this.styles[e])throw new Error(`Table style ${e} does not exist`);return this.styles[e]}getTableStyles(){return this.styles}getNewCustomTableStyleName(){return kt(Vo("Custom Table Style"),Object.values(this.styles).map((e=>e.displayName)),{compute:(e,t)=>`${e} ${t}`,start:2})}isTableStyleEditable(e){return!OR[e]}import(e){for(const e in OR)this.styles[e]=OR[e];for(const t in e.customTableStyles){const o=e.customTableStyles[t];this.styles[t]=PR(o.displayName,o.templateName,o.primaryColor)}}export(e){const t={};for(const e in this.styles)OR[e]||(t[e]={displayName:this.styles[e].displayName,templateName:this.styles[e].templateName,primaryColor:this.styles[e].primaryColor});e.customTableStyles=t}}),fL=(new n).add("ui_sheet",class extends FV{static getters=["getCellWidth","getTextWidth","getCellText","getCellMultiLineText","getContiguousZone","computeTextYCoordinate"];ctx=document.createElement("canvas").getContext("2d");allowDispatch(e){return this.chainValidations(this.checkSheetExists,this.checkZonesAreInSheet)(e)}handle(e){switch(e.type){case"AUTORESIZE_COLUMNS":for(const t of e.cols){const o=this.getColMaxWidth(e.sheetId,t);0!==o&&this.dispatch("RESIZE_COLUMNS_ROWS",{elements:[t],dimension:"COL",size:o,sheetId:e.sheetId})}break;case"AUTORESIZE_ROWS":this.autoResizeRows(e.sheetId,e.rows);break;case"DELETE_UNFILTERED_CONTENT":const t=[];for(const o of e.target){const s=Ye(je(o.top,o.bottom+1).filter((t=>!this.getters.isRowFiltered(e.sheetId,t))));for(const e of s)t.push({...o,top:e[0],bottom:e[e.length-1]})}this.dispatch("DELETE_CONTENT",{sheetId:e.sheetId,target:t})}}getCellWidth(e){const t=this.getters.getCellComputedStyle(e);let o=0;const s=this.getters.getEvaluatedCell(e).formattedValue;if(s){const e=Ha(this.ctx,s,t,void 0);o+=Math.max(...e.map((e=>Oa(this.ctx,e,t))))}for(const t of this.getters.getCellIcons(e))o+=t.margin+t.size;if(this.getters.getDataValidationChipStyle(e)&&(o+=10),0===o)return 0;if(o+=2*le,"wrap"===t.wrapping){const t=this.getters.getColSize(this.getters.getActiveSheetId(),e.col);return Math.min(t,o)}return o}getTextWidth(e,t){return Oa(this.ctx,e,t)}getCellText(e,t){const o=this.getters.getCell(e),s=this.getters.getLocale();if(t?.showFormula&&o?.isFormula)return El(o.content,s);if(t?.showFormula&&!o?.content)return"";{const i=this.getters.getEvaluatedCell(e),n=t?.availableWidth?{availableWidth:t.availableWidth,measureText:e=>Oa(this.ctx,e,o?.style||{})}:void 0;return bn(i.value,{format:i.format,locale:s,formatWidth:n})}}getCellMultiLineText(e,t){const o=this.getters.getCellStyle(e),s=this.getters.getCellText(e,{showFormula:this.getters.shouldShowFormulas(),availableWidth:t.maxWidth});return Ha(this.ctx,s,o,t.wrapText?t.maxWidth:void 0)}computeTextYCoordinate(e,t,o=ue,s=1){const i=e.y+1,n=Ta(t,s);if(e.height>n+2*re){if("middle"===o)return Math.ceil(i+(e.height-n)/2);if("bottom"===o)return i+e.height-n-re}return i+re}getContiguousZone(e,t){const o=t=>{for(const o of je(t.left,t.right+1)){if(!this.isCellEmpty({sheetId:e,col:o,row:t.top-1}))return{...t,top:t.top-1};if(!this.isCellEmpty({sheetId:e,col:o,row:t.bottom+1}))return{...t,bottom:t.bottom+1}}for(const o of je(t.top,t.bottom+1)){if(!this.isCellEmpty({sheetId:e,col:t.left-1,row:o}))return{...t,left:t.left-1};if(!this.isCellEmpty({sheetId:e,col:t.right+1,row:o}))return{...t,right:t.right+1}}return t};let s=!1,i=t;do{s=!1;const e=o(i);br(i,e)||(s=!0,i=e)}while(s);return i}isCellEmpty(e){const t=this.getters.getMainCellPosition(e);return this.getters.getEvaluatedCell(t).type===Ts.empty}getColMaxWidth(e,t){const o=Er(this.getters.getColsZone(e,t,t)).map((t=>this.getCellWidth({sheetId:e,...t})));return Math.max(0,Ot(o))}checkSheetExists(e){return"sheetId"in e&&void 0===this.getters.tryGetSheet(e.sheetId)?"InvalidSheetId":"Success"}checkZonesAreInSheet(e){const t="sheetId"in e?e.sheetId:this.getters.tryGetActiveSheetId();if("ranges"in e&&e.ranges.some((e=>!this.getters.tryGetSheet(e._sheetId))))return"InvalidSheetId";const o=this.getters.getCommandZones(e);return!t&&o.length>0?"NoActiveSheet":t&&o.length>0?this.getters.checkZonesExistInSheet(t,o):"Success"}autoResizeRows(e,t){const o=[];for(const s of t){let t=0;for(const o of this.getters.getRowCells(e,s)){const s=this.getters.getCellById(o);if(!s)continue;const i=this.getters.getCellPosition(s.id),n=this.getters.getColSize(e,i.col);if(s.isFormula||this.getters.getArrayFormulaSpreadingOn(i)){const e=this.getters.getEvaluatedCell(i).formattedValue,o=Aa(this.ctx,e,s?.style,n);o>t&&o>ie&&(t=o)}else{const e=s.content,o=Aa(this.ctx,e,s?.style,n);o>=t&&o>ie&&(t=0)}}o.push(t||null)}const s=new Map(o.map((e=>[e,[]])));for(let e=0;e<o.length;e++)s.get(o[e])?.push(t[e]);for(const[t,o]of s)this.dispatch("RESIZE_COLUMNS_ROWS",{elements:o,dimension:"ROW",size:t,sheetId:e})}}).add("ui_options",class extends FV{static getters=["shouldShowFormulas"];showFormulas=!1;handle(e){if("SET_FORMULA_VISIBILITY"===e.type)this.showFormulas=e.show}shouldShowFormulas(){return this.showFormulas}}).add("autofill",class extends FV{static layers=["Autofill"];static getters=["getAutofillTooltip"];autofillZone;steps;lastCellSelected={};direction;tooltip;allowDispatch(e){if("AUTOFILL_SELECT"===e.type){const t=this.getters.getActiveSheetId();return this.lastCellSelected.col=-1===e.col?this.lastCellSelected.col:Ze(e.col,0,this.getters.getNumberCols(t)),this.lastCellSelected.row=-1===e.row?this.lastCellSelected.row:Ze(e.row,0,this.getters.getNumberRows(t)),void 0!==this.lastCellSelected.col&&void 0!==this.lastCellSelected.row?"Success":"InvalidAutofillSelection"}return"Success"}handle(e){switch(e.type){case"AUTOFILL":this.autofill(!0);break;case"AUTOFILL_SELECT":this.select(e.col,e.row);break;case"AUTOFILL_AUTO":this.autofillAuto()}}getAutofillTooltip(){return this.tooltip}autofill(e){if(!this.autofillZone||!this.steps||void 0===this.direction)return void(this.tooltip=void 0);const t=this.getters.getSelectedZone(),o=this.autofillZone,s=[];switch(this.direction){case"down":for(let e=t.left;e<=t.right;e++){const i=[];for(let o=t.top;o<=t.bottom;o++)i.push(Oo(e,o));const n=this.createGenerator(i);for(let t=o.top;t<=o.bottom;t++)s.push(this.computeNewCell(n,e,t))}break;case"up":for(let e=t.left;e<=t.right;e++){const i=[];for(let o=t.bottom;o>=t.top;o--)i.push(Oo(e,o));const n=this.createGenerator(i);for(let t=o.bottom;t>=o.top;t--)s.push(this.computeNewCell(n,e,t))}break;case"left":for(let e=t.top;e<=t.bottom;e++){const i=[];for(let o=t.right;o>=t.left;o--)i.push(Oo(o,e));const n=this.createGenerator(i);for(let t=o.right;t>=o.left;t--)s.push(this.computeNewCell(n,t,e))}break;case"right":for(let e=t.top;e<=t.bottom;e++){const i=[];for(let o=t.left;o<=t.right;o++)i.push(Oo(o,e));const n=this.createGenerator(i);for(let t=o.left;t<=o.right;t++)s.push(this.computeNewCell(n,t,e))}}if(e){const e={},t={},o={},i=this.getters.getActiveSheetId();for(const n of s)this.collectBordersData(n,e),this.autofillMerge(i,n),this.autofillCell(i,n),this.collectConditionalFormatsData(i,n,t),this.collectDataValidationsData(i,n,o);this.autofillBorders(i,e),this.autofillConditionalFormats(i,t),this.autofillDataValidations(i,o),this.autofillZone=void 0,this.selection.resizeAnchorZone(this.direction,this.steps),this.lastCellSelected={},this.direction=void 0,this.steps=0,this.tooltip=void 0}}collectBordersData(e,t){const o=JSON.stringify(e.border);o in t||(t[o]=[]),t[o].push(Dr({col:e.col,row:e.row}))}collectConditionalFormatsData(e,t,o){const{originCol:s,originRow:i,col:n,row:r}=t,a=this.getters.getRulesByCell(e,s,i),l=Oo(n,r);for(const e of a)e.id in o||(o[e.id]=[]),o[e.id].push(l)}collectDataValidationsData(e,t,o){const{originCol:s,originRow:i,col:n,row:r}=t,a={sheetId:e,col:s,row:i},l=this.getters.getValidationRuleForCell(a);l&&(l.id in o||(o[l.id]=[]),o[l.id].push(Dr({col:n,row:r})))}autofillCell(e,t){this.dispatch("UPDATE_CELL",{sheetId:e,col:t.col,row:t.row,content:t.content||"",style:t.style||null,format:t.format||""}),this.dispatch("AUTOFILL_CELL",t)}autofillBorders(e,t){for(const o in t){const s="undefined"===o?void 0:JSON.parse(o);this.dispatch("SET_BORDERS_ON_TARGET",{sheetId:e,border:s,target:er(t[o])})}}autofillConditionalFormats(e,t){for(const o in t){const s=t[o],i=this.getters.getConditionalFormats(e).find((e=>e.id===o));if(!i)continue;const n=this.getters.getAdaptedCfRanges(e,i,s.map(ar),[]);n&&this.dispatch("ADD_CONDITIONAL_FORMAT",{cf:{id:i.id,rule:i.rule,stopIfTrue:i.stopIfTrue},ranges:n,sheetId:e})}}autofillDataValidations(e,t){for(const o in t){const s=t[o],i=this.getters.getDataValidationRule(e,o);if(!i)continue;const n=i.ranges.map((e=>e.zone)),r=er(n.concat(s),[]);this.dispatch("ADD_DATA_VALIDATION_RULE",{rule:i,ranges:r.map((t=>this.getters.getRangeDataFromZone(e,t))),sheetId:e})}}select(e,t){const o=this.getters.getSelectedZone();if(Cr(e,t,o))this.autofillZone=void 0;else{switch(this.direction=this.getDirection(e,t),this.direction){case"up":this.saveZone(t,o.top-1,o.left,o.right),this.steps=o.top-t;break;case"down":this.saveZone(o.bottom+1,t,o.left,o.right),this.steps=t-o.bottom;break;case"left":this.saveZone(o.top,o.bottom,e,o.left-1),this.steps=o.left-e;break;case"right":this.saveZone(o.top,o.bottom,o.right+1,e),this.steps=e-o.right}this.autofill(!1)}}autofillAuto(){const e=this.getters.getActivePosition(),t=this.getters.getTable(e);let o=t?t.range.zone.bottom:this.getAutofillAutoLastRow();const s=this.getters.getSelectedZone();for(let t=s.bottom+1;t<=o;t++)if(this.getters.getEvaluatedCell({...e,row:t}).type!==Ts.empty){o=t-1;break}o>s.bottom&&(this.select(e.col,o),this.autofill(!0))}getAutofillAutoLastRow(){const e=this.getters.getSelectedZone(),t=this.getters.getActiveSheetId();let o=e.left,s=e.bottom;if(o>0){let e={sheetId:t,col:o-1,row:s};for(;this.getters.getEvaluatedCell(e).type!==Ts.empty;)s+=1,e={sheetId:t,col:o-1,row:s}}if(s===e.bottom&&(o=e.right,o<=this.getters.getNumberCols(t))){let e={sheetId:t,col:o+1,row:s};for(;this.getters.getEvaluatedCell(e).type!==Ts.empty;)s+=1,e={sheetId:t,col:o+1,row:s}}return s-1}computeNewCell(e,t,o){const{cellData:s,tooltip:i,origin:n}=e.next(),{content:r,style:a,border:l,format:c}=s;return this.tooltip=i,{originCol:n.col,originRow:n.row,col:t,row:o,content:r,style:a,border:l,format:c}}getRule(e,t){const o=EV.getAll().sort(((e,t)=>e.sequence-t.sequence)).find((o=>o.condition(e,t)));return o&&this.direction&&o.generateRule(e,t,this.direction)}createGenerator(e){const t=[],o=[],s=this.getters.getActiveSheetId();for(const t of e){const{col:e,row:i}=_o(t),n=this.getters.getCell({sheetId:s,col:e,row:i});o.push({col:e,row:i,cell:n,sheetId:s})}const i=o.map((e=>e.cell));for(const e of o){let o={type:"COPY_MODIFIER"};if(e&&e.cell){o=this.getRule(e.cell,i)||o}const s=this.getters.getCellBorder(e)||void 0;t.push({data:{...e,border:s},rule:o})}return new PV(t,this.getters,this.direction)}saveZone(e,t,o,s){this.autofillZone={top:e,bottom:t,left:o,right:s}}getDirection(e,t){const o=this.getters.getSelectedZone(),s={up:{number:o.top-t,value:"up"},down:{number:t-o.bottom,value:"down"},left:{number:o.left-e,value:"left"},right:{number:e-o.right,value:"right"}};if(1===Object.values(s).map((e=>e.number>0?1:0)).reduce(((e,t)=>e+t)))return Object.values(s).find((e=>e.number>0?1:0)).value;const i=s.up.number>0?"up":"down",n=s.left.number>0?"left":"right";return Math.abs(s[i].number)>=Math.abs(s[n].number)?s[i].value:s[n].value}autofillMerge(e,t){const{originCol:o,originRow:s,col:i,row:n}=t,r={sheetId:e,col:i,row:n},a={sheetId:e,col:o,row:s};if(this.getters.isInMerge(r)&&!this.getters.isInMerge(a)){const t=this.getters.getMerge(r);t&&this.dispatch("REMOVE_MERGE",{sheetId:e,target:[t]})}const l=this.getters.getMerge(a);l?.left===o&&l?.top===s&&this.dispatch("ADD_MERGE",{sheetId:e,target:[{top:n,bottom:n+l.bottom-l.top,left:i,right:i+l.right-l.left}]})}drawLayer(e){if(!this.autofillZone)return;const{ctx:t,thinLineWidth:o}=e,{x:s,y:i,width:n,height:r}=this.getters.getVisibleRect(this.autofillZone);n>0&&r>0&&(t.strokeStyle="black",t.lineWidth=o,t.setLineDash([3]),t.strokeRect(s,i,n,r),t.setLineDash([]))}}).add("sort",class extends FV{allowDispatch(e){return"SORT_CELLS"===e.type?Cr(e.col,e.row,e.zone)?this.checkValidations(e,this.checkMerge,this.checkMergeSizes,this.checkArrayFormulaInSortZone):"InvalidSortAnchor":"Success"}handle(e){if("SORT_CELLS"===e.type)this.sortZone(e.sheetId,e,e.zone,e.sortDirection,e.sortOptions||{})}checkMerge({sheetId:e,zone:t}){if(!this.getters.doesIntersectMerge(e,t))return"Success";return Er(t).some((({col:t,row:o})=>!this.getters.isInMerge({sheetId:e,col:t,row:o})))?"InvalidSortZone":"Success"}checkMergeSizes({sheetId:e,zone:t}){if(!this.getters.doesIntersectMerge(e,t))return"Success";const o=this.getters.getMerges(e).filter((e=>Sr(e,t))),s=wr(o[0]),[i,n]=[s.numberOfCols,s.numberOfRows];return o.every((e=>{const[t,o]=[e.right-e.left+1,e.bottom-e.top+1];return t===i&&o===n}))?"Success":"InvalidSortZone"}checkArrayFormulaInSortZone({sheetId:e,zone:t}){return Er(t).some((({col:t,row:o})=>this.getters.getArrayFormulaSpreadingOn({sheetId:e,col:t,row:o})))?"SortZoneWithArrayFormulas":"Success"}hasHeader(e,t){if(1===t[0].length)return!1;let o=t.map((t=>t.map((({col:t,row:o})=>this.getters.getEvaluatedCell({sheetId:e,col:t,row:o}).type))));return o[0][0]===Ts.empty&&(o=o.slice(1)),!o.some((e=>e[0]===Ts.empty))&&!!o.some((e=>e[1]!==Ts.empty&&e[0]!==e[1]))}sortZone(e,t,o,s,i){const[n,r]=this.mainCellsSteps(e,o),a=this.getters.getMainCellPosition({sheetId:e,col:t.col,row:t.row}).col,l=Object.assign({},o);let c=this.mainCells(e,o);!i.sortHeaders&&this.hasHeader(e,c)&&(l.top+=r),c=this.mainCells(e,l);const h=function(e,t,o){const s=e.map(((e,t)=>({index:t,type:e.type,value:e.value})));return(o?s.map((e=>e.type===Ts.empty?{...e,type:Ts.number,value:0}:e)):s).sort(zp(t))}(c[a-l.left].map((e=>this.getters.getEvaluatedCell(e))),s,Boolean(i.emptyCellAsZero)),d=h.map((e=>e.index)),[u,g]=[c.length,c[0].length],p=[];for(let e=0;e<u;e++)for(let t=0;t<g;t++){const{col:o,row:s,sheetId:i}=c[e][d[t]],a=this.getters.getCell({sheetId:i,col:o,row:s}),h=l.left+e*n,u=l.top+t*r,g={sheetId:i,col:h,row:u,content:""};if(a){let e=a.content;if(a.isFormula){const t=this.getters.getCellPosition(a.id);e=this.getters.getTranslatedCellFormula(i,0,u-t.row,a.compiledFormula.tokens)}g.style=a.style,g.content=e,g.format=a.format}p.push(g)}p.forEach((e=>this.dispatch("UPDATE_CELL",e)))}mainCellsSteps(e,t){const o=this.getters.getMerge({sheetId:e,col:t.left,row:t.top});return[o?o.right-o.left+1:1,o?o.bottom-o.top+1:1]}mainCells(e,t){const[o,s]=this.mainCellsSteps(e,t),i=[],n=je(t.left,t.right+1,o),r=je(t.top,t.bottom+1,s);for(const t of n){const o=[];i.push(o);for(const s of r)o.push({sheetId:e,col:t,row:s})}return i}}).add("automatic_sum",class extends FV{static getters=["getAutomaticSums"];handle(e){if("SUM_SELECTION"===e.type){const e=this.getters.getActiveSheetId(),{zones:t,anchor:o}=this.getters.getSelection();for(const s of t){const t=this.getAutomaticSums(e,s,o.cell);this.dispatchCellUpdates(e,t)}}}getAutomaticSums(e,t,o){return this.shouldFindData(e,t)?this.sumAdjacentData(e,t,o):this.sumData(e,t)}sumData(e,t){const o=this.dimensionsToSum(e,t),s=this.sumDimensions(e,t,o).filter((({zone:t})=>!this.getters.isEmpty(e,t)));return o.has("ROW")&&o.has("COL")&&s.push(this.sumTotal(t)),s}sumAdjacentData(e,t,o){const{col:s,row:i}=Cr(o.col,o.row,t)?o:{col:t.left,row:t.top},n=this.findAdjacentData(e,s,i);return n?this.getters.isSingleCellOrMerge(e,t)||Ir(fr(n,t))?[{position:{col:s,row:i},zone:n}]:this.sumDimensions(e,fr(n,t),this.transpose(this.dimensionsToSum(e,t))):[]}findAdjacentData(e,t,o){const s=this.getters.getSheet(e),i=this.getters.getMainCellPosition({sheetId:e,col:t,row:o}),n=this.findSuitableZoneToSum(s,i.col,i.row);if(n)return this.getters.expandZone(e,n)}findSuitableZoneToSum(e,t,o){const s=this.getters.getEvaluatedCell({sheetId:e.id,col:t,row:o-1}),i=this.getters.getEvaluatedCell({sheetId:e.id,col:t-1,row:o});if(this.isNumber(i)&&!this.isNumber(s))return this.findHorizontalZone(e,t,o);const n=this.findVerticalZone(e,t,o);if(this.isZoneValid(n))return n;const r=this.findHorizontalZone(e,t,o);return this.isZoneValid(r)?r:void 0}findVerticalZone(e,t,o){const s={top:0,bottom:o-1,left:t,right:t},i=this.reduceZoneStart(e,s,s.bottom);return{...s,top:i}}findHorizontalZone(e,t,o){const s={top:o,bottom:o,left:0,right:t-1},i=this.reduceZoneStart(e,s,s.right);return{...s,left:i}}reduceZoneStart(e,t,o){const s=this.getters.getEvaluatedCellsInZone(e.id,t),i=je(o,-1,-1),n=Ot(i.filter((e=>s[e]&&!s[e].isAutoSummable))),r=Ye(i.filter((e=>this.isNumber(s[e]))))[0]||[];return Ot(r)<n?1/0:Ft(r)}shouldFindData(e,t){return this.getters.isEmpty(e,t)||this.getters.isSingleCellOrMerge(e,t)}isNumber(e){return e.type===Ts.number&&!(e.format&&Rn(e.format))}isZoneValid(e){return e.bottom>=e.top&&e.right>=e.left}lastColIsEmpty(e,t){return this.getters.isEmpty(e,{...t,left:t.right})}lastRowIsEmpty(e,t){return this.getters.isEmpty(e,{...t,top:t.bottom})}dimensionsToSum(e,t){const o=new Set;return Ir(t)?(o.add(1===wr(t).numberOfCols?"COL":"ROW"),o):(this.lastColIsEmpty(e,t)&&o.add("ROW"),this.lastRowIsEmpty(e,t)&&o.add("COL"),0===o.size&&o.add("COL"),o)}sumDimensions(e,t,o){return[...o.has("COL")?this.sumColumns(t,e):[],...o.has("ROW")?this.sumRows(t,e):[]]}sumTotal(e){const{bottom:t,right:o}=e;return{position:{col:o,row:t},zone:{...e,top:t,right:o-1}}}sumColumns(e,t){const o=this.nextEmptyRow(t,{...e,bottom:e.bottom-1});return e={...e,bottom:Math.min(e.bottom,o.bottom-1)},Er(o).map((t=>({position:t,zone:{...e,right:t.col,left:t.col}})))}sumRows(e,t){const o=this.nextEmptyCol(t,{...e,right:e.right-1});return e={...e,right:Math.min(e.right,o.right-1)},Er(o).map((t=>({position:t,zone:{...e,top:t.row,bottom:t.row}})))}dispatchCellUpdates(e,t){for(const o of t){const{col:t,row:s}=o.position;this.dispatch("UPDATE_CELL",{sheetId:e,col:t,row:s,content:`=SUM(${this.getters.zoneToXC(e,o.zone)})`})}}nextEmptyRow(e,t){let o=t.bottom+1;const{left:s,right:i}=t;for(;!this.getters.isEmpty(e,{bottom:o,top:o,left:s,right:i});)o++;return{...t,top:o,bottom:o}}nextEmptyCol(e,t){let o=t.right+1;const{top:s,bottom:i}=t;for(;!this.getters.isEmpty(e,{left:o,right:o,top:s,bottom:i});)o++;return{...t,left:o,right:o}}transpose(e){return new Set([...e.values()].map((e=>"COL"===e?"ROW":"COL")))}}).add("format",class extends FV{handle(e){switch(e.type){case"SET_DECIMAL":this.setDecimal(e.sheetId,e.target,e.step);break;case"SET_FORMATTING_WITH_PIVOT":this.setContextualFormat(e.sheetId,e.target,e.format)}}setContextualFormat(e,t,o){const s=[],i={};for(const o of er(t))for(let t=o.left;t<=o.right;t++)for(let n=o.top;n<=o.bottom;n++){const o={sheetId:e,col:t,row:n},r=this.getters.getPivotCellFromPosition(o);if(this.isSpilledPivotValueFormula(o,r)){s.push(o);const e=this.getters.getPivotIdFromPosition(o)||"";i[e]??=new Set,i[e].add(r.measure)}}const n=er(s.map(Dr));for(const e in i){const t=i[e],s=this.getters.getPivotCoreDefinition(e);this.dispatch("UPDATE_PIVOT",{pivotId:e,pivot:{...s,measures:s.measures.map((e=>t.has(e.id)?{...e,format:o}:e))}})}this.dispatch("SET_FORMATTING",{sheetId:e,target:n,format:""}),this.dispatch("SET_FORMATTING",{sheetId:e,target:er(t,n),format:o})}isSpilledPivotValueFormula(e,t){const o=this.getters.getCell(e);return"VALUE"===t.type&&!o?.isFormula}setDecimal(e,t,o){const s={};for(const i of er(t))for(const t of Er(i)){const i=this.getCellNumberFormat({sheetId:e,...t});if(void 0!==i){const e=Bn(i,o);s[e]=s[e]||[],s[e].push(t)}}for(const t in s){const o=er(s[t].map((e=>Dr(e))));this.setContextualFormat(e,o,t)}}getCellNumberFormat(e){for(const t of[e]){const e=this.getters.getEvaluatedCell(t);if(!(e.type!==Ts.number||e.format&&Rn(e.format)))return e.format||Dn(e.value)}}}).add("insert_pivot",class extends FV{static getters=[];allowDispatch(e){if("DUPLICATE_PIVOT_IN_NEW_SHEET"===e.type){if(!this.getters.isExistingPivot(e.pivotId))return"PivotIdNotFound";if(!this.getters.getPivot(e.pivotId).isValid())return"PivotInError"}return"Success"}handle(e){switch(e.type){case"INSERT_NEW_PIVOT":this.insertNewPivot(e.pivotId,e.newSheetId);break;case"DUPLICATE_PIVOT_IN_NEW_SHEET":this.duplicatePivotInNewSheet(e.pivotId,e.newPivotId,e.newSheetId);break;case"INSERT_PIVOT_WITH_TABLE":this.insertPivotWithTable(e.sheetId,e.col,e.row,e.pivotId,e.table,e.pivotMode);break;case"SPLIT_PIVOT_FORMULA":this.splitPivotFormula(e.sheetId,e.col,e.row,e.pivotId)}}insertNewPivot(e,t){1===Pr(this.getters.getSelectedZone())&&this.selection.selectTableAroundSelection();const o=this.getters.getActiveSheetId();this.dispatch("ADD_PIVOT",{pivotId:e,pivot:{dataSet:{zone:this.getters.getSelectedZone(),sheetId:o},columns:[],rows:[],measures:[],name:Vo("New pivot"),type:"SPREADSHEET"}});const s=this.getters.getSheetIds().findIndex((e=>e===o))+1,i=this.getters.getPivotFormulaId(e);this.dispatch("CREATE_SHEET",{sheetId:t,name:Vo("Pivot #%(formulaId)s",{formulaId:i}),position:s}),this.dispatch("ACTIVATE_SHEET",{sheetIdFrom:o,sheetIdTo:t});const n=this.getters.getPivot(e);this.insertPivotWithTable(t,0,0,e,n.getCollapsedTableStructure().export(),"dynamic")}duplicatePivotInNewSheet(e,t,o){this.dispatch("DUPLICATE_PIVOT",{pivotId:e,newPivotId:t,duplicatedPivotName:Vo("%s (copy)",this.getters.getPivotCoreDefinition(e).name)});const s=this.getters.getActiveSheetId(),i=this.getters.getSheetIds().indexOf(s)+1,n=this.getters.getPivotFormulaId(t),r=this.getters.getPivotName(t);if(this.dispatch("CREATE_SHEET",{sheetId:o,name:this.getPivotDuplicateSheetName(Vo("%(newPivotName)s (Pivot #%(formulaId)s)",{newPivotName:r,formulaId:n})),position:i}).isSuccessful){this.dispatch("ACTIVATE_SHEET",{sheetIdFrom:s,sheetIdTo:o});const i=this.getters.getPivot(e);this.insertPivotWithTable(o,0,0,t,i.getCollapsedTableStructure().export(),"dynamic")}}getPivotDuplicateSheetName(e){const t=this.getters.getSheetIds().map((e=>this.getters.getSheetName(e)));return kt(qe(e),t)}insertPivotWithTable(e,t,o,s,i,n){const{cols:r,rows:a,measures:l,fieldsType:c}=i,h=new VN(r,a,l,c||{}),d=h.columns.length-1;this.resizeSheet(e,t,o,h);const u=this.getters.getPivotFormulaId(s);let g;"dynamic"===n?(this.dispatch("UPDATE_CELL",{sheetId:e,col:t,row:o,content:`=PIVOT(${u})`}),g={left:t,right:t,top:o,bottom:o}):(this.dispatch("INSERT_PIVOT",{sheetId:e,col:t,row:o,pivotId:s,table:h.export()}),g={left:t,right:t+h.getNumberOfDataColumns(),top:o,bottom:o+d+h.rows.length}),this.dispatch("CREATE_TABLE",{tableType:n,sheetId:e,ranges:[this.getters.getRangeDataFromZone(e,g)],config:{...Ve,numberOfHeaders:d}})}resizeSheet(e,t,o,s){const i=s.getNumberOfDataColumns()+1,n=this.getters.getNumberCols(e),r=n-t;r<i&&this.dispatch("ADD_COLUMNS_ROWS",{dimension:"COL",base:n-1,sheetId:e,sheetName:this.getters.getSheetName(e),quantity:i-r,position:"after"});const a=s.columns.length+s.rows.length,l=this.getters.getNumberRows(e),c=l-o;c<a&&this.dispatch("ADD_COLUMNS_ROWS",{dimension:"ROW",base:l-1,sheetId:e,sheetName:this.getters.getSheetName(e),quantity:a-c,position:"after"})}splitPivotFormula(e,t,o,s){const i=this.getters.getSpreadZone({sheetId:e,col:t,row:o});if(!i)return;const n=this.getters.getPivotFormulaId(s),r=new Map;for(let t=i.left;t<=i.right;t++)for(let o=i.top;o<=i.bottom;o++){const s={sheetId:e,col:t,row:o};r.set(s,this.getters.getPivotCellFromPosition(s))}for(const[e,t]of r)this.dispatch("UPDATE_CELL",{...e,content:Vc(n,t)});const a=this.getters.getCoreTable({sheetId:e,col:t,row:o});if("dynamic"===a?.type){const s=Dr({col:t,row:o}),n=this.getters.getRangeDataFromZone(e,i);this.dispatch("UPDATE_TABLE",{sheetId:e,zone:s,newTableRange:n,tableType:"static"})}}}).add("pivot_presence",class extends FV{static getters=["getPivotPresenceTracker"];trackPresencePivotId;tracker;handle(e){switch(e.type){case"PIVOT_START_PRESENCE_TRACKING":this.tracker=new dL,this.trackPresencePivotId=e.pivotId;break;case"PIVOT_STOP_PRESENCE_TRACKING":this.trackPresencePivotId=void 0}}getPivotPresenceTracker(e){if(this.trackPresencePivotId===e){if(!this.tracker)throw new Error("Tracker not initialized");return this.tracker}}}).add("split_to_columns",class extends FV{static getters=["getAutomaticSeparator"];allowDispatch(e){return"SPLIT_TEXT_INTO_COLUMNS"===e.type?this.chainValidations(this.batchValidations(this.checkSingleColSelected,this.checkNonEmptySelector),this.batchValidations(this.checkNotOverwritingContent,this.checkSeparatorInSelection))(e):"Success"}handle(e){if("SPLIT_TEXT_INTO_COLUMNS"===e.type)this.splitIntoColumns(e)}getAutomaticSeparator(){const e=this.getters.getSelectedCells();for(const t of e)if(t.value&&t.type===Ts.text){const e=this.getAutoSeparatorForString(t.value);if(e)return e}return" "}getAutoSeparatorForString(e){const t=[Ne,";",","," ","."];for(const o of t)if(e.includes(o))return o}splitIntoColumns({separator:e,addNewColumns:t}){const o=this.getters.getSelectedZone(),s=this.getters.getActiveSheetId(),i=this.getSplittedCols(o,e);t&&this.addColsToAvoidCollisions(o,i),this.removeMergesInSplitZone(o,i),this.addColumnsToNotOverflowSheet(o,i);for(let e=0;e<i.length;e++){const t=o.top+e,n=i[e],r=o.left,a=this.getters.getCell({sheetId:s,col:r,row:t});if(1!==n.length||n[0]!==a?.content)for(const[e,o]of n.entries())this.dispatch("UPDATE_CELL",{sheetId:s,col:r+e,row:t,content:Cl(o,this.getters.getLocale()),format:"",style:a?.style||null})}}getSplittedCols(e,t){if(!t)throw new Error("Separator cannot be empty");const o=this.getters.getActiveSheetId(),s=[];for(const i of je(e.top,e.bottom+1)){const n=this.getters.getEvaluatedCell({sheetId:o,col:e.left,row:i}).formattedValue;s.push(this.splitAndRemoveTrailingEmpty(n,t))}return s}splitAndRemoveTrailingEmpty(e,t){const o=e.split(t);for(;o.length>1&&""===o[o.length-1];)o.pop();return o}willSplittedColsOverwriteContent(e,t){const o=this.getters.getActiveSheetId();for(const s of je(e.top,e.bottom+1)){const i=t[s-e.top];for(let t=1;t<i.length;t++){const i=this.getters.getCell({sheetId:o,col:e.left+t,row:s});if(i&&i.content)return!0}}return!1}removeMergesInSplitZone(e,t){const o=this.getters.getActiveSheetId(),s=Math.max(...t.map((e=>e.length))),i={...e,right:e.left+s-1},n=this.getters.getMergesInZone(o,i);this.dispatch("REMOVE_MERGE",{sheetId:o,target:n})}addColsToAvoidCollisions(e,t){const o=this.getters.getActiveSheetId();let s=0;for(const i of je(e.top,e.bottom+1)){const n={sheetId:o,col:e.left,row:i},r=t[i-e.top],a=this.getColsToAddToAvoidCollision(n,r);s=Math.max(s,a)}s&&this.dispatch("ADD_COLUMNS_ROWS",{dimension:"COL",base:e.left,sheetId:o,sheetName:this.getters.getSheetName(o),quantity:s,position:"after"})}getColsToAddToAvoidCollision(e,t){const o=t.length;for(let t=1;t<o;t++){const s=e.col+t,i=this.getters.getCell({...e,col:s});if(i&&i.content)return o-t}return 0}addColumnsToNotOverflowSheet(e,t){const o=this.getters.getActiveSheetId(),s=Math.max(...t.map((e=>e.length-1))),i=this.getters.getNumberCols(o)-1;e.left+s>i&&this.dispatch("ADD_COLUMNS_ROWS",{dimension:"COL",base:i,sheetId:o,sheetName:this.getters.getSheetName(o),quantity:e.left+s-i,position:"after"})}checkSingleColSelected(){return this.getters.isSingleColSelected()?"Success":"MoreThanOneColumnSelected"}checkNonEmptySelector(e){return""===e.separator?"EmptySplitSeparator":"Success"}checkNotOverwritingContent(e){if(e.addNewColumns||e.force)return"Success";const t=this.getters.getSelectedZones()[0],o=this.getSplittedCols(t,e.separator);return this.willSplittedColsOverwriteContent(t,o)?"SplitWillOverwriteContent":"Success"}checkSeparatorInSelection({separator:e}){const t=this.getters.getSelectedCells();for(const o of t)if(o.formattedValue.includes(e))return"Success";return"NoSplitSeparatorInSelection"}}).add("collaborative",class extends FV{static getters=["getClientsToDisplay","getClient","getCurrentClient","getConnectedClients","isFullySynchronized"];static layers=["Selection"];colors=new fo(12);session;constructor(e){super(e),this.session=e.session}isPositionValid(e){return e.row<this.getters.getNumberRows(e.sheetId)&&e.col<this.getters.getNumberCols(e.sheetId)}getClient(e){return this.session.getClient(e)}getCurrentClient(){return this.session.getCurrentClient()}getConnectedClients(){return[...this.session.getConnectedClients()].map((e=>({...e,color:this.colors.get(e.id)})))}isFullySynchronized(){return this.session.isFullySynchronized()}getClientsToDisplay(){try{this.getters.getCurrentClient()}catch(e){if(e instanceof jV)return[];throw e}const e=this.getters.getActiveSheetId(),t=[];for(const o of this.getters.getConnectedClients())o.id!==this.getters.getCurrentClient().id&&o.position&&o.position.sheetId===e&&this.isPositionValid(o.position)&&t.push({...o,position:o.position});return t}drawLayer(e){if(this.getters.isDashboard())return;const{ctx:t,thinLineWidth:o}=e,s=this.getters.getActiveSheetId();for(const e of this.getClientsToDisplay()){const{row:i,col:n}=e.position,r=this.getters.expandZone(s,{top:i,bottom:i,left:n,right:n}),{x:a,y:l,width:c,height:h}=this.getters.getVisibleRect(r);if(c<=0||h<=0)continue;const d=e.color;t.fillStyle=`${d}10`,t.lineWidth=4*o,t.strokeStyle=d,t.globalCompositeOperation="multiply",t.fillRect(a,l,c,h),t.globalCompositeOperation="source-over",t.strokeRect(a,l,c,h),t.font=`bold ${me+1}px ${fe}`}}}).add("history",class extends FV{static getters=["canUndo","canRedo"];undoStack=[];redoStack=[];session;constructor(e){super(e),this.session=e.session,this.session.on("new-local-state-update",this,this.onNewLocalStateUpdate),this.session.on("snapshot",this,(()=>{this.undoStack=[],this.redoStack=[]}))}allowDispatch(e){switch(e.type){case"REQUEST_UNDO":if(!this.canUndo())return"EmptyUndoStack";break;case"REQUEST_REDO":if(!this.canRedo())return"EmptyRedoStack"}return"Success"}handle(e){switch(e.type){case"REQUEST_UNDO":case"REQUEST_REDO":this.requestHistoryChange("REQUEST_UNDO"===e.type?"UNDO":"REDO")}}finalize(){}requestHistoryChange(e){const t="UNDO"===e?this.undoStack.pop():this.redoStack.pop();if(t)"UNDO"===e?(this.session.undo(t),this.redoStack.push(t)):(this.session.redo(t),this.undoStack.push(t));else{const e=this.getPossibleRevisionToRepeat();if(!e)return;const t=hL(e,this.getters);if(!t)return;if(!Array.isArray(t))return void this.dispatch(t.type,t);for(const e of t)this.dispatch(e.type,e)}}canUndo(){return this.undoStack.length>0}canRedo(){if(this.redoStack.length>0)return!0;const e=this.getPossibleRevisionToRepeat();return!(!(t=e)||!t.rootCommand||"object"!=typeof t.rootCommand)&&(ks(t.rootCommand)?aL.contains(t.rootCommand.type):lL.contains(t.rootCommand.type));var t}onNewLocalStateUpdate({id:e}){this.undoStack.push(e),this.redoStack=[],this.undoStack.length>99&&this.undoStack.shift()}getPossibleRevisionToRepeat(){return this.session.getLastLocalNonEmptyRevision()}}).add("data_cleanup",class extends FV{allowDispatch(e){return"REMOVE_DUPLICATES"===e.type?this.checkValidations(e,this.chainValidations(this.checkSingleRangeSelected,this.checkNoMergeInZone,this.checkRangeContainsValues,this.checkColumnsIncludedInZone),this.chainValidations(this.checkNoColumnProvided,this.checkColumnsAreUnique)):"Success"}handle(e){switch(e.type){case"REMOVE_DUPLICATES":this.removeDuplicates(e.columns,e.hasHeader);break;case"TRIM_WHITESPACE":this.trimWhitespace()}}removeDuplicates(e,t){const o=this.getters.getActiveSheetId(),s=this.getters.getSelectedZone();t&&(s.top+=1);const i=this.getUniqueRowsIndexes(o,s.top,s.bottom,e),n=i.length;if(n===wr(s).numberOfRows)return void this.notifyRowsRemovedAndRemaining(0,n);const r=i.map((e=>({left:s.left,top:e,right:s.right,bottom:e}))),a=new qc(this.getters,this.dispatch),l=a.copy(Za(o,r));if(!l)return;this.dispatch("CLEAR_CELLS",{target:[s],sheetId:o});const c={left:s.left,top:s.top,right:s.left,bottom:s.top};a.paste({zones:[c],sheetId:o},l,{isCutOperation:!1});const h={left:s.left,top:s.top-(t?1:0),right:s.right,bottom:s.top+n-1};this.selection.selectZone({cell:{col:h.left,row:h.top},zone:h});const d=s.bottom-s.top+1-n;this.notifyRowsRemovedAndRemaining(d,n)}getUniqueRowsIndexes(e,t,o,s){const i=new Map;for(const n of je(t,o+1)){const t=s.map((t=>this.getters.getEvaluatedCell({sheetId:e,col:t,row:n}).value));!Object.values(i).some((e=>mt(e,t)))&&(i[n]=t)}return Object.keys(i).map((e=>parseInt(e)))}notifyRowsRemovedAndRemaining(e,t){this.ui.notifyUI({type:"info",text:Vo("%s duplicate rows found and removed.\n%s unique rows remain.",e.toString(),t.toString()),sticky:!1})}checkSingleRangeSelected(){return 1!==this.getters.getSelectedZones().length?"MoreThanOneRangeSelected":"Success"}checkNoMergeInZone(){const e=this.getters.getActiveSheetId(),t=this.getters.getSelectedZone();return this.getters.getMergesInZone(e,t).length>0?"WillRemoveExistingMerge":"Success"}checkRangeContainsValues(e){const t=this.getters.getActiveSheetId(),o=this.getters.getSelectedZone();e.hasHeader&&(o.top+=1);return this.getters.getEvaluatedCellsInZone(t,o).every((e=>"empty"===e.type))?"EmptyTarget":"Success"}checkNoColumnProvided(e){return 0===e.columns.length?"NoColumnsProvided":"Success"}checkColumnsIncludedInZone(e){const t=this.getters.getSelectedZone();return e.columns.some((e=>e<t.left||e>t.right))?"ColumnsNotIncludedInZone":"Success"}checkColumnsAreUnique(e){return e.columns.length!==new Set(e.columns).size?"DuplicatesColumnsSelected":"Success"}trimWhitespace(){const e=er(this.getters.getSelectedZones()),t=this.getters.getActiveSheetId();let o=0;for(const{col:s,row:i}of e.map(Er).flat()){const e=this.getters.getCell({col:s,row:i,sheetId:t});if(!e)continue;const n=At(e.content);n!==e.content&&(o+=1,this.dispatch("UPDATE_CELL",{sheetId:t,col:s,row:i,content:n}))}const s=o?Vo("Trimmed whitespace from %s cells.",o):Vo("No selected cells had whitespace trimmed.");this.ui.notifyUI({type:"info",text:s,sticky:!1})}}).add("table_autofill",class extends FV{handle(e){if("AUTOFILL_TABLE_COLUMN"===e.type){const t=this.getters.getCoreTable(e),o=this.getters.getCell(e);if(!t?.config.automaticAutofill||"dynamic"===t.type||!o?.isFormula)return;const{col:s,row:i}=e,n=function(e,t){const o=t.numberOfHeaders,s={...e,top:e.top+o};return s.top<=s.bottom?s:void 0}(t.range.zone,t.config);if(n&&Cr(s,i,n)){const t=e.autofillRowStart??n.top,o=e.autofillRowEnd??n.bottom,s={...n,top:t,bottom:o};this.autofillTableZone(e,s)}}}autofillTableZone(e,t){if(t.top===t.bottom)return;const{col:o,row:s,sheetId:i}=e;for(let e=t.top;e<=t.bottom;e++)if(e!==s&&this.getters.getEvaluatedCell({col:o,row:e,sheetId:i}).type!==Ts.empty)return;const n={zone:this.getters.getSelectedZone(),cell:this.getters.getActivePosition()};this.selection.selectCell(o,s),this.dispatch("AUTOFILL_SELECT",{col:o,row:t.bottom}),this.dispatch("AUTOFILL"),this.selection.selectCell(o,s),this.dispatch("AUTOFILL_SELECT",{col:o,row:t.top}),this.dispatch("AUTOFILL"),this.selection.selectZone(n)}}).add("table_ui_resize",class extends FV{allowDispatch(e){if("RESIZE_TABLE"===e.type){const t=this.getters.getCoreTableMatchingTopLeft(e.sheetId,e.zone);if(!t)return"TableNotFound";const o=t.range.zone,s=this.getters.getRangeFromRangeData(e.newTableRange).zone;return s.top!==o.top||s.left!==o.left?"InvalidTableResize":this.canDispatch("UPDATE_TABLE",{...e}).reasons}return"Success"}handle(e){switch(e.type){case"RESIZE_TABLE":{const t=this.getters.getCoreTableMatchingTopLeft(e.sheetId,e.zone);if(this.dispatch("UPDATE_TABLE",{...e}),!t)return;const o=this.getters.getRangeFromRangeData(e.newTableRange).zone;if(this.selection.selectCell(o.right,o.bottom),!t.config.automaticAutofill)return;const s=t.range.zone;if(o.bottom>=s.bottom){for(let t=o.left;t<=o.right;t++){const i={col:t,row:s.bottom,sheetId:e.sheetId};this.getters.getCell(i)?.content.startsWith("=")&&this.dispatch("AUTOFILL_TABLE_COLUMN",{...i,autofillRowStart:s.bottom,autofillRowEnd:o.bottom})}break}}}}}).add("datavalidation_insert",class extends FV{handle(e){if("ADD_DATA_VALIDATION_RULE"===e.type)if("isBoolean"===e.rule.criterion.type){const t=e.ranges.map((e=>this.getters.getRangeFromRangeData(e)));for(const e of va(t)){const t=this.getters.getCell(e),o=this.getters.getEvaluatedCell(e);if(t?.content)if(t?.content&&o.type===Ts.empty){let o;if(t.content.startsWith("=")){const s=this.getters.evaluateFormula(e.sheetId,t.content);o=(Ws(s)?s[0][0]:s)?.toString()}else o=t.content;o&&Ke(o)||this.dispatch("UPDATE_CELL",{...e,content:"FALSE"})}else o.type!==Ts.boolean&&this.dispatch("UPDATE_CELL",{...e,content:"FALSE"});else this.dispatch("UPDATE_CELL",{...e,content:"FALSE"})}}}}).add("checkbox_toggle",class extends FV{static getters=["hasBooleanValidationInZones"];handle(e){if("TOGGLE_CHECKBOX"===e.type)this.toggleCheckbox(e.sheetId,e.target)}hasBooleanValidationInZones(e){const t=this.getters.getActiveSheetId();for(const o of e)for(let e=o.left;e<=o.right;e++)for(let s=o.top;s<=o.bottom;s++)if(this.getters.isCellValidCheckbox({col:e,row:s,sheetId:t}))return!0;return!1}toggleCheckbox(e,t){for(const o of t)for(let t=o.left;t<=o.right;t++)for(let s=o.top;s<=o.bottom;s++){const o={col:t,row:s,sheetId:e};if(this.getters.isCellValidCheckbox(o)){const e=this.getters.getEvaluatedCell(o).value?"FALSE":"TRUE";this.dispatch("UPDATE_CELL",{...o,content:e})}}}}).add("geo_features",class extends FV{static getters=["getGeoJsonFeatures","geoFeatureNameToId","getGeoChartAvailableRegions"];geoJsonService;geoJsonCache={};constructor(e){super(e),this.geoJsonService=e.external.geoJsonService}getGeoChartAvailableRegions(){return this.geoJsonService?this.geoJsonService.getAvailableRegions()||[]:(console.error("No geoJsonService provided to the model"),[])}getGeoJsonFeatures(e){if(!this.geoJsonService)return void console.error("No geoJsonService provided to the model");const t=this.geoJsonCache[e];return t instanceof Promise?void 0:void 0!==t?t??void 0:void(this.geoJsonCache[e]=new Promise((async t=>{const o=await(this.geoJsonService?.getTopoJson(e));this.geoJsonCache[e]=this.convertToGeoJson(o),this.dispatch("EVALUATE_CHARTS"),t()})))}geoFeatureNameToId(e,t){if(this.geoJsonService)return this.geoJsonService.geoFeatureNameToId(e,t);console.error("No geoJsonService provided to the model")}convertToGeoJson(e){if(!e)return null;if("Topology"===e.type){const t=window.ChartGeo.topojson.feature(e,Object.values(e.objects)[0]);return"FeatureCollection"===t.type?t.features:[t]}if("FeatureCollection"===e.type)return e.features;throw new Error("Invalid TopoJSON")}}),vL=(new n).add("selection",class extends FV{static layers=["Selection"];static getters=["getActiveSheet","getActiveSheetId","getActiveSheetName","getActiveCell","getActiveCols","getActiveRows","getCurrentStyle","getSelectedZones","getSelectedZone","getSelectedCells","getSelectedFigureId","getSelection","getActivePosition","getSheetPosition","isSingleColSelected","getElementsFromSelection","tryGetActiveSheetId","isGridSelectionActive","getSelectecUnboundedZone"];gridSelection={anchor:{cell:{col:0,row:0},zone:{top:0,left:0,bottom:0,right:0}},zones:[{top:0,left:0,bottom:0,right:0}]};selectedFigureId=null;sheetsData={};moveClient;isUnbounded;activeSheet=null;constructor(e){super(e),this.moveClient=e.moveClient,this.isUnbounded=!1}allowDispatch(e){switch(e.type){case"ACTIVATE_SHEET":try{if(!this.getters.getSheet(e.sheetIdTo).isVisible)return"SheetIsHidden";break}catch(e){return"InvalidSheetId"}case"MOVE_COLUMNS_ROWS":return this.isMoveElementAllowed(e)}return"Success"}handleEvent(e){const t=e.anchor;let o=[];switch(this.isUnbounded=e.options?.unbounded||!1,e.mode){case"overrideSelection":o=[t.zone];break;case"updateAnchor":o=[...this.gridSelection.zones];const s=o.findIndex((t=>br(t,e.previousAnchor.zone)));s>=0&&(o[s]=t.zone);break;case"newAnchor":o=[...this.gridSelection.zones,t.zone]}this.setSelectionMixin(e.anchor,o),this.selection.resetDefaultAnchor(this,ze(this.gridSelection.anchor));const{col:s,row:i}=this.gridSelection.anchor.cell;this.moveClient({sheetId:this.getters.getActiveSheetId(),col:s,row:i}),this.selectedFigureId=null}handle(e){switch(e.type){case"ACTIVATE_SHEET":this.selectedFigureId=null;break;case"DELETE_FIGURE":this.selectedFigureId===e.figureId&&(this.selectedFigureId=null);break;case"DELETE_SHEET":this.selectedFigureId&&this.getters.getFigure(e.sheetId,this.selectedFigureId)&&(this.selectedFigureId=null)}switch(e.type){case"START":const t=this.getters.getVisibleSheetIds()[0];this.activateSheet(t,t);const{col:o,row:s}=this.getters.getNextVisibleCellPosition({sheetId:t,col:0,row:0});this.selectCell(o,s),this.selection.registerAsDefault(this,this.gridSelection.anchor,{handleEvent:this.handleEvent.bind(this)}),this.moveClient({sheetId:t,col:0,row:0});break;case"ACTIVATE_SHEET":this.activateSheet(e.sheetIdFrom,e.sheetIdTo);break;case"REMOVE_COLUMNS_ROWS":{const t=this.getters.getActiveSheetId();if(e.sheetId===t){"COL"===e.dimension?this.onColumnsRemoved(e):this.onRowsRemoved(e);const{col:o,row:s}=this.gridSelection.anchor.cell;this.moveClient({sheetId:t,col:o,row:s})}break}case"ADD_COLUMNS_ROWS":{const t=this.getters.getActiveSheetId();if(e.sheetId===t){this.onAddElements(e);const{col:o,row:s}=this.gridSelection.anchor.cell;this.moveClient({sheetId:t,col:o,row:s})}break}case"MOVE_COLUMNS_ROWS":e.sheetId===this.getActiveSheetId()&&this.onMoveElements(e);break;case"SELECT_FIGURE":this.selectedFigureId=e.figureId;break;case"ACTIVATE_NEXT_SHEET":this.activateNextSheet("right");break;case"ACTIVATE_PREVIOUS_SHEET":this.activateNextSheet("left");break;case"HIDE_SHEET":e.sheetId===this.getActiveSheetId()&&this.dispatch("ACTIVATE_SHEET",{sheetIdFrom:e.sheetId,sheetIdTo:this.getters.getVisibleSheetIds()[0]});break;case"UNDO":case"REDO":case"DELETE_SHEET":const i=Object.keys(this.sheetsData).filter((e=>!this.getters.tryGetSheet(e)));for(const e of i)delete this.sheetsData[e];for(const e in this.sheetsData){const t=this.clipSelection(e,this.sheetsData[e].gridSelection);this.sheetsData[e]={gridSelection:ze(t)}}this.fallbackToVisibleSheet();const n=this.getters.getActiveSheetId();this.gridSelection.zones=this.gridSelection.zones.map((e=>this.getters.expandZone(n,e))),this.gridSelection.anchor.zone=this.getters.expandZone(n,this.gridSelection.anchor.zone),this.setSelectionMixin(this.gridSelection.anchor,this.gridSelection.zones),this.selectedFigureId=null}}finalize(){this.fallbackToVisibleSheet(),this.selection.resetDefaultAnchor(this,ze(this.gridSelection.anchor))}isGridSelectionActive(){return this.selection.isListening(this)}getActiveSheet(){return this.activeSheet}getActiveSheetId(){return this.activeSheet.id}getActiveSheetName(){return this.activeSheet.name}tryGetActiveSheetId(){return this.activeSheet?.id}getActiveCell(){return this.getters.getEvaluatedCell(this.getActivePosition())}getActiveCols(){const e=new Set;for(const t of this.gridSelection.zones)if(0===t.top&&t.bottom===this.getters.getNumberRows(this.getters.getActiveSheetId())-1)for(let o=t.left;o<=t.right;o++)e.add(o);return e}getActiveRows(){const e=new Set,t=this.getters.getActiveSheetId();for(const o of this.gridSelection.zones)if(0===o.left&&o.right===this.getters.getNumberCols(t)-1)for(let t=o.top;t<=o.bottom;t++)e.add(t);return e}getCurrentStyle(){const e=this.getters.getSelectedZone(),t=this.getters.getActiveSheetId();return this.getters.getCellStyle({sheetId:t,col:e.left,row:e.top})}getSelectedZones(){return ze(this.gridSelection.zones)}getSelectedZone(){return ze(this.gridSelection.anchor.zone)}getSelectecUnboundedZone(){return ze(this.isUnbounded?this.getters.getUnboundedZone(this.activeSheet.id,this.gridSelection.anchor.zone):this.gridSelection.anchor.zone)}getSelection(){return ze(this.gridSelection)}getSelectedCells(){const e=this.getters.getActiveSheetId(),t=[];for(const o of this.gridSelection.zones)t.push(...this.getters.getEvaluatedCellsInZone(e,o));return t}getSelectedFigureId(){return this.selectedFigureId}getActivePosition(){return this.getters.getMainCellPosition({sheetId:this.getActiveSheetId(),col:this.gridSelection.anchor.cell.col,row:this.gridSelection.anchor.cell.row})}getSheetPosition(e){if(e===this.getters.getActiveSheetId())return this.getActivePosition();{const t=this.sheetsData[e];return t?{sheetId:e,col:t.gridSelection.anchor.cell.col,row:t.gridSelection.anchor.cell.row}:this.getters.getNextVisibleCellPosition({sheetId:e,col:0,row:0})}}isSingleColSelected(){const e=this.getters.getSelectedZones();return 1===e.length&&e[0].left===e[0].right}getElementsFromSelection(e){if("COL"===e&&0===this.getters.getActiveCols().size)return[];if("ROW"===e&&0===this.getters.getActiveRows().size)return[];const t=this.getters.getSelectedZones();let o=[];const s="COL"===e?"left":"top",i="COL"===e?"right":"bottom";for(const e of t){const t=Array.from({length:e[i]-e[s]+1},((t,o)=>e[s]+o));o=o.concat(t)}return[...new Set(o)].sort()}activateSheet(e,t){if(this.setActiveSheet(t),this.sheetsData[e]={gridSelection:ze(this.gridSelection)},t in this.sheetsData)Object.assign(this,this.sheetsData[t]),this.selection.resetDefaultAnchor(this,ze(this.gridSelection.anchor));else{const{col:e,row:o}=this.getters.getNextVisibleCellPosition({sheetId:t,col:0,row:0});this.selectCell(e,o)}const{col:o,row:s}=this.gridSelection.anchor.cell;this.moveClient({sheetId:this.activeSheet.id,col:o,row:s})}setSelectionMixin(e,t){const{anchor:o,zones:s}=this.clipSelection(this.getters.getActiveSheetId(),{anchor:e,zones:t});this.gridSelection.anchor=o,this.gridSelection.zones=function(e){return e.reverse().filter(((e,t,o)=>t===o.findIndex((t=>t.top===e.top&&t.bottom===e.bottom&&t.left===e.left&&t.right===e.right)))).reverse()}(s)}selectCell(e,t){const o=this.getters.getActiveSheetId(),s=this.getters.expandZone(o,{left:e,right:e,top:t,bottom:t});this.setSelectionMixin({zone:s,cell:{col:e,row:t}},[s])}setActiveSheet(e){this.activeSheet=this.getters.getSheet(e)}activateNextSheet(e){const t=this.getters.getSheetIds(),o=(t.findIndex((e=>e===this.activeSheet.id))+("left"===e?t.length-1:1))%t.length;this.dispatch("ACTIVATE_SHEET",{sheetIdFrom:this.getActiveSheetId(),sheetIdTo:t[o]})}onColumnsRemoved(e){const{cell:t,zone:o}=this.gridSelection.anchor,s=pr(o,"left",[...e.elements]);let i={left:t.col,right:t.col,top:t.row,bottom:t.row};i=pr(i,"left",[...e.elements]);const n={cell:{col:i.left,row:i.top},zone:s},r=this.gridSelection.zones.map((t=>pr(t,"left",[...e.elements])));this.setSelectionMixin(n,r)}onRowsRemoved(e){const{cell:t,zone:o}=this.gridSelection.anchor,s=pr(o,"top",[...e.elements]);let i={left:t.col,right:t.col,top:t.row,bottom:t.row};i=pr(i,"top",[...e.elements]);const n={cell:{col:i.left,row:i.top},zone:s},r=this.gridSelection.zones.map((t=>pr(t,"top",[...e.elements])));this.setSelectionMixin(n,r)}onAddElements(e){const t="COL"===e.dimension?"left":"top",o=gr(this.gridSelection.anchor.zone,t,e.base,e.position,e.quantity),s=this.gridSelection.zones.map((o=>gr(o,t,e.base,e.position,e.quantity))),i={cell:{col:o.left,row:o.top},zone:o};this.setSelectionMixin(i,s)}onMoveElements(e){const t=e.elements.length,o=this.getFiguresUpdates(e);this.dispatch("ADD_COLUMNS_ROWS",{dimension:e.dimension,sheetId:e.sheetId,sheetName:e.sheetName,base:e.base,quantity:t,position:e.position});const s="COL"===e.dimension,i=e.elements[0],n=e.elements[t-1],r=e.base<i,a=r&&s?t:0,l=r&&!s?t:0,c=[{left:s?i+a:0,right:s?n+a:this.getters.getNumberCols(e.sheetId)-1,top:s?0:i+l,bottom:s?this.getters.getNumberRows(e.sheetId)-1:n+l}],h=this.getActiveSheetId(),d=r?e.base:e.base+1,u=[{left:s?d:0,right:s?d+t-1:this.getters.getNumberCols(e.sheetId)-1,top:s?0:d,bottom:s?this.getters.getNumberRows(e.sheetId)-1:d+t-1}];for(const e of jc.cellHandlers.getAll()){const t=new e(this.getters,this.dispatch),o=t.copy(Za(h,c));o&&t.paste({zones:u,sheetId:h},o,{isCutOperation:!0})}const g=u[0],p=g.left,m=g.top;this.setSelectionMixin({zone:g,cell:{col:p,row:m}},[g]);const f=r?e.elements.map((e=>e+t)):e.elements;let v=r?e.base:e.base+1;const b={};for(const t of f){const o=this.getters.getHeaderSize(e.sheetId,e.dimension,t);o!==this.getters.getHeaderSize(e.sheetId,e.dimension,v)&&(b[o]??=[],b[o].push(v),v+=1)}for(const t in b)this.dispatch("RESIZE_COLUMNS_ROWS",{dimension:e.dimension,sheetId:e.sheetId,size:parseInt(t,10),elements:b[t]});this.dispatch("REMOVE_COLUMNS_ROWS",{dimension:e.dimension,sheetId:e.sheetId,sheetName:e.sheetName,elements:f}),this.applyFigureUpdates(o)}getFiguresUpdates(e){const t=[],o={},s=e.elements[0]<e.base?e.base-e.elements.length+1:e.base;for(let t=0;t<e.elements.length;t++)o[e.elements[t]]=s+t;for(const s of this.getters.getFigures(e.sheetId))"COL"===e.dimension&&s.col in o&&t.push({type:"UPDATE_FIGURE",sheetId:e.sheetId,figureId:s.id,col:o[s.col],row:s.row}),"ROW"===e.dimension&&s.row in o&&t.push({type:"UPDATE_FIGURE",sheetId:e.sheetId,figureId:s.id,row:o[s.row],col:s.col});return t}applyFigureUpdates(e){for(const t of e)this.dispatch(t.type,{...t})}isMoveElementAllowed(e){const t="COL"===e.dimension,o=e.elements[0],s=e.elements[e.elements.length-1],i=e.sheetId,n=t?this.getters.doesColumnsHaveCommonMerges:this.getters.doesRowsHaveCommonMerges;if(n(i,o-1,o)||n(i,s,s+1)||n(i,e.base-1,e.base))return"WillRemoveExistingMerge";const r=[e.base,...e.elements],a=t?this.getters.getNumberCols(i):this.getters.getNumberRows(i);return r.some((e=>e<0||e>=a))?"InvalidHeaderIndex":"Success"}fallbackToVisibleSheet(){if(!this.getters.tryGetSheet(this.getters.getActiveSheetId())){const e=this.getters.getVisibleSheetIds();if(this.activeSheet=this.getters.getSheet(e[0]),this.activeSheet.id in this.sheetsData){const{anchor:e}=this.clipSelection(this.activeSheet.id,this.sheetsData[this.activeSheet.id].gridSelection);this.selectCell(e.cell.col,e.cell.row)}else this.selectCell(0,0);const{col:t,row:o}=this.gridSelection.anchor.cell;this.moveClient({sheetId:this.getters.getActiveSheetId(),col:t,row:o})}}clipSelection(e,t){const o=this.getters.getNumberCols(e)-1,s=this.getters.getNumberRows(e)-1;return{zones:t.zones.map((e=>({left:Ze(e.left,0,o),right:Ze(e.right,0,o),top:Ze(e.top,0,s),bottom:Ze(e.bottom,0,s)}))),anchor:{cell:{col:Ze(t.anchor.cell.col,0,o),row:Ze(t.anchor.cell.row,0,s)},zone:{left:Ze(t.anchor.zone.left,0,o),right:Ze(t.anchor.zone.right,0,o),top:Ze(t.anchor.zone.top,0,s),bottom:Ze(t.anchor.zone.bottom,0,s)}}}}drawLayer(e){if(this.getters.isDashboard())return;const{ctx:t,thinLineWidth:o}=e,s=this.getSelectedZones();t.fillStyle="#f3f7fe";const i=1===s.length&&s[0].left===s[0].right&&s[0].top===s[0].bottom;t.fillStyle=i?"#f3f7fe":"#e9f0ff",t.strokeStyle=p,t.lineWidth=1.5*o;for(const e of s){const{x:o,y:s,width:i,height:n}=this.getters.getVisibleRect(e);t.globalCompositeOperation="multiply",t.fillRect(o,s,i,n),t.globalCompositeOperation="source-over",t.strokeRect(o,s,i,n)}t.globalCompositeOperation="source-over";const n=this.getActivePosition();let r;t.strokeStyle=p,t.lineWidth=3*o,r=this.getters.isInMerge(n)?this.getters.getMerge(n):Dr(n);const{x:a,y:l,width:c,height:h}=this.getters.getVisibleRect(r);c>0&&h>0&&t.strokeRect(a,l,c,h)}}).add("evaluation_filter",class extends FV{static getters=["getFilterValue","getFilterHiddenValues","getFilterCriterionValue","getFirstTableInSelection","isRowFiltered","isFilterActive"];filterValues={};hiddenRows={};isEvaluationDirty=!1;allowDispatch(e){if("UPDATE_FILTER"===e.type)if(!this.getters.getFilterId(e))return"FilterNotFound";return"Success"}handle(e){switch(e.type){case"UNDO":case"REDO":case"UPDATE_CELL":case"EVALUATE_CELLS":case"ACTIVATE_SHEET":case"REMOVE_TABLE":case"ADD_COLUMNS_ROWS":case"REMOVE_COLUMNS_ROWS":case"UPDATE_TABLE":this.isEvaluationDirty=!0;break;case"START":for(const e of this.getters.getSheetIds())this.filterValues[e]={};break;case"CREATE_SHEET":this.filterValues[e.sheetId]={};break;case"HIDE_COLUMNS_ROWS":case"UNHIDE_COLUMNS_ROWS":case"GROUP_HEADERS":case"UNGROUP_HEADERS":case"FOLD_HEADER_GROUP":case"UNFOLD_HEADER_GROUP":case"FOLD_ALL_HEADER_GROUPS":case"UNFOLD_ALL_HEADER_GROUPS":case"FOLD_HEADER_GROUPS_IN_ZONE":case"UNFOLD_HEADER_GROUPS_IN_ZONE":this.updateHiddenRows(e.sheetId);break;case"UPDATE_FILTER":this.updateFilter(e),this.updateHiddenRows(e.sheetId);break;case"DUPLICATE_SHEET":this.filterValues[e.sheetIdTo]=ze(this.filterValues[e.sheetId])}}finalize(){if(this.isEvaluationDirty){for(const e of this.getters.getSheetIds())this.updateHiddenRows(e);this.isEvaluationDirty=!1}}isRowFiltered(e,t){return!!this.hiddenRows[e]?.has(t)}getFilterValue(e){const t=this.getters.getFilterId(e),o=e.sheetId;return t?this.filterValues[o]?.[t]:void 0}getFilterHiddenValues(e){const t=this.getters.getFilterId(e),o=e.sheetId;if(!t||!this.filterValues[o])return[];const s=this.filterValues[o][t]||[];return"values"===s.filterType?s.hiddenValues:[]}getFilterCriterionValue(e){const t=this.getters.getFilterId(e),o=e.sheetId;if(!t||!this.filterValues[o])return gL;const s=this.filterValues[o][t];return s&&"criterion"===s.filterType?s:gL}isFilterActive(e){const t=this.getters.getFilterId(e);if(!t)return!1;const o=e.sheetId,s=this.filterValues[o]?.[t];return!!s&&("values"===s.filterType?s.hiddenValues.length>0:"none"!==s.type)}getFirstTableInSelection(){const e=this.getters.getActiveSheetId(),t=this.getters.getSelectedZones();return this.getters.getTablesOverlappingZones(e,t)[0]}updateFilter({col:e,row:t,value:o,sheetId:s}){const i=this.getters.getFilterId({sheetId:s,col:e,row:t});i&&(this.filterValues[s]||(this.filterValues[s]={}),this.filterValues[s][i]=o)}updateHiddenRows(e){const t=this.getters.getFilters(e).sort(((e,t)=>e.rangeWithHeaders.zone.top-t.rangeWithHeaders.zone.top)),o=new Set;for(const s of t){const t=this.filterValues[e]?.[s.id],i=s.filteredRange?.zone;if(t&&i&&!o.has(s.rangeWithHeaders.zone.top)&&!this.getters.isRowHiddenByUser(e,s.rangeWithHeaders.zone.top))if("values"===t.filterType){const n=t.hiddenValues?.map(Ua);if(!n)continue;const r=new Set(n);for(let t=i.top;t<=i.bottom;t++){const i=this.getCellValueAsString(e,s.col,t);r.has(i)&&o.add(t)}}else{if("none"===t.type)continue;const n=Zx.get(t.type),r=t.values.map((t=>t.startsWith("=")?this.getters.evaluateFormula(e,t)??"":qn(t,$s)));if(r.some(Ws))continue;const a={type:t.type,values:r,dateValue:t.dateValue};for(let t=i.top;t<=i.bottom;t++){const i={sheetId:e,col:s.col,row:t},r=this.getters.getEvaluatedCell(i).value??"";n.isValueValid(r,a,this.getters,e)||o.add(t)}}}this.hiddenRows[e]=o}getCellValueAsString(e,t,o){return this.getters.getEvaluatedCell({sheetId:e,col:t,row:o}).formattedValue.toLowerCase()}exportForExcel(e){for(const t of e.sheets){const e=t.id;for(const o of t.tables){const s=ar(o.range),i=[],n=[];for(const o of je(0,wr(s).numberOfCols)){const r={sheetId:t.id,col:s.left+o,row:s.top},a=this.getFilterHiddenValues(r),l=this.getters.getFilter(r),c=l?.filteredRange?Er(l.filteredRange.zone).map((t=>this.getters.getEvaluatedCell({sheetId:e,...t}).formattedValue)):[];if(a.length){const e=c.filter((e=>e)).filter((e=>!a.includes(e)));i.push({colId:o,displayedValues:[...new Set(e)],displayBlanks:!a.includes("")&&c.some((e=>!e))})}const h=this.getters.getEvaluatedCell(r).formattedValue,d=this.getUniqueColNameForExcel(o,h,n);n.push(d);const u=Oo(r.col,r.row);t.cells[u]=d,t.cellValues[u]=d}o.filters=i}}}getUniqueColNameForExcel(e,t,o){return t||(t=`Column${e}`),kt(t,o,{compute:(e,o)=>t+String(o),start:2})}}).add("header_visibility_ui",class extends FV{static getters=["getNextVisibleCellPosition","findVisibleHeader","findLastVisibleColRowIndex","findFirstVisibleColRowIndex","isRowHidden","isColHidden","isHeaderHidden"];isRowHidden(e,t){return this.getters.isRowHiddenByUser(e,t)||this.getters.isRowFiltered(e,t)}isColHidden(e,t){return this.getters.isColHiddenByUser(e,t)}isHeaderHidden(e,t,o){return"COL"===t?this.isColHidden(e,o):this.isRowHidden(e,o)}getNextVisibleCellPosition({sheetId:e,col:t,row:o}){return{sheetId:e,col:this.findVisibleHeader(e,"COL",t,this.getters.getNumberCols(e)-1),row:this.findVisibleHeader(e,"ROW",o,this.getters.getNumberRows(e)-1)}}findVisibleHeader(e,t,o,s){if(o<=s)for(let i=o;i<=s;i++)if(this.getters.doesHeaderExist(e,t,i)&&!this.isHeaderHidden(e,t,i))return i;if(o>s)for(let i=o;i>=s;i--)if(this.getters.doesHeaderExist(e,t,i)&&!this.isHeaderHidden(e,t,i))return i}findLastVisibleColRowIndex(e,t,{last:o,first:s}){return je(o,s,-1).find((o=>!this.isHeaderHidden(e,t,o)))||s}findFirstVisibleColRowIndex(e,t){const o=this.getters.getNumberHeaders(e,t);for(let s=0;s<o;s++){if("COL"===t&&!this.isColHidden(e,s))return s;if("ROW"===t&&!this.isRowHidden(e,s))return s}}exportForExcel(e){for(const t of e.sheets)for(const[e,o]of Object.entries(t.rows))o.isHidden=this.isRowHidden(t.id,Number(e))}}).add("cell_computed_style",class extends FV{static getters=["getCellComputedBorder","getCellComputedStyle"];styles={};borders={};handle(e){if(Ds.has(e.type)||"UPDATE_CELL"===e.type||"SET_FORMATTING"===e.type||"ADD_DATA_VALIDATION_RULE"===e.type||"REMOVE_DATA_VALIDATION_RULE"===e.type||"EVALUATE_CELLS"===e.type)return this.styles={},void(this.borders={});KV(e)?"sheetId"in e?(delete this.styles[e.sheetId],delete this.borders[e.sheetId]):(this.styles={},this.borders={}):Fs.has(e.type)?this.styles={}:Ps.has(e.type)&&(this.borders={})}getCellComputedBorder(e){const{sheetId:t,row:o,col:s}=e;return void 0!==this.borders[t]?.[o]?.[s]||(this.borders[t]||(this.borders[t]={}),this.borders[t][o]||(this.borders[t][o]={}),this.borders[t][o][s]||(this.borders[t][o][s]=this.computeCellBorder(e))),this.borders[t][o][s]}getCellComputedStyle(e){const{sheetId:t,row:o,col:s}=e;return void 0!==this.styles[t]?.[o]?.[s]||(this.styles[t]||(this.styles[t]={}),this.styles[t][o]||(this.styles[t][o]={}),this.styles[t][o][s]||(this.styles[t][o][s]=this.computeCellStyle(e))),this.styles[t][o][s]}computeCellBorder(e){const t=this.getters.getCellBorder(e)||{},o={...bt(this.getters.getCellTableBorder(e)||{}),...bt(t)};return ct(o)?null:o}computeCellStyle(e){const t=this.getters.getCell(e),o=this.getters.getCellConditionalFormatStyle(e),s=this.getters.getCellTableStyle(e),i=this.getters.getDataValidationCellStyle(e),n={...bt(s),...bt(i),...bt(t?.style),...bt(o)};return this.getters.getEvaluatedCell(e).link&&!n.textColor&&(n.textColor=b),n}}).add("table_computed_style",class extends FV{static getters=["getCellTableStyle","getCellTableBorder"];tableStyles={};handle(e){Ds.has(e.type)||"UPDATE_CELL"===e.type&&("content"in e||"format"in e)||"EVALUATE_CELLS"===e.type?this.tableStyles={}:KV(e)&&("sheetId"in e?delete this.tableStyles[e.sheetId]:this.tableStyles={})}finalize(){for(const e of this.getters.getSheetIds()){this.tableStyles[e]||(this.tableStyles[e]={});for(const t of this.getters.getTables(e))this.tableStyles[e][t.id]||(this.tableStyles[e][t.id]=this.computeTableStyle(e,t))}}getCellTableStyle(e){const t=this.getters.getTable(e);if(t)return this.tableStyles[e.sheetId][t.id]().styles[e.col]?.[e.row]}getCellTableBorder(e){const t=this.getters.getTable(e);if(t)return this.tableStyles[e.sheetId][t.id]().borders[e.col]?.[e.row]}computeTableStyle(e,t){return ut((()=>{const{config:o,numberOfCols:s,numberOfRows:i}=this.getTableRuntimeConfig(e,t),n=g_(o,this.getters.getTableStyle(t.config.styleId),s,i),r=this.getTableMapping(e,t),a={borders:{},styles:{}};for(let e=0;e<s;e++){const t=r.colMapping[e];a.borders[t]={},a.styles[t]={};for(let o=0;o<i;o++){const s=r.rowMapping[o];a.borders[t][s]=n.borders[e][o],a.styles[t][s]=n.styles[e][o]}}return a}))}getTableRuntimeConfig(e,t){const o=t.range.zone,s={...t.config};let i=o.right-o.left+1,n=o.bottom-o.top+1;for(let i=o.top;i<=o.bottom;i++)this.getters.isRowHidden(e,i)&&(n--,i-o.top<t.config.numberOfHeaders&&(s.numberOfHeaders--,s.numberOfHeaders<0&&(s.numberOfHeaders=0)),i===o.bottom&&(s.totalRow=!1));for(let t=o.left;t<=o.right;t++)this.getters.isColHidden(e,t)&&(i--,t===o.left&&(s.firstColumn=!1),t===o.right&&(s.lastColumn=!1));return{config:s,numberOfCols:i,numberOfRows:n}}getTableMapping(e,t){const o={},s={};let i=0,n=0;const r=t.range.zone;for(let t=r.left;t<=r.right;t++)if(!this.getters.isColHidden(e,t)){o[i]=t,i++;for(let t=r.top;t<=r.bottom;t++)this.getters.isRowHidden(e,t)||(s[n]=t,n++)}return{colMapping:o,rowMapping:s}}}).add("header_positions",class extends FV{static getters=["getColDimensions","getRowDimensions","getColRowOffset"];headerPositions={};isDirty=!0;handle(e){switch(Ds.has(e.type)&&(this.headerPositions={},this.isDirty=!0),e.type){case"START":for(const e of this.getters.getSheetIds())this.headerPositions[e]=this.computeHeaderPositionsOfSheet(e);break;case"UPDATE_CELL":case"UPDATE_FILTER":case"UPDATE_TABLE":case"REMOVE_TABLE":this.headerPositions={},this.isDirty=!0;break;case"REMOVE_COLUMNS_ROWS":case"RESIZE_COLUMNS_ROWS":case"HIDE_COLUMNS_ROWS":case"ADD_COLUMNS_ROWS":case"UNHIDE_COLUMNS_ROWS":case"FOLD_HEADER_GROUP":case"UNFOLD_HEADER_GROUP":case"FOLD_HEADER_GROUPS_IN_ZONE":case"UNFOLD_HEADER_GROUPS_IN_ZONE":case"UNFOLD_ALL_HEADER_GROUPS":case"FOLD_ALL_HEADER_GROUPS":case"UNGROUP_HEADERS":case"GROUP_HEADERS":case"CREATE_SHEET":this.getters.tryGetSheet(e.sheetId)&&(this.headerPositions[e.sheetId]=this.computeHeaderPositionsOfSheet(e.sheetId));break;case"DUPLICATE_SHEET":this.headerPositions[e.sheetIdTo]=ze(this.headerPositions[e.sheetId])}}finalize(){for(const e of this.getters.getSheetIds())!this.isDirty&&this.headerPositions[e]||(this.headerPositions[e]=this.computeHeaderPositionsOfSheet(e));this.isDirty=!1}getColDimensions(e,t){const o=this.headerPositions[e].COL[t],s=this.getters.getColSize(e,t);return{start:o,size:s,end:o+(this.getters.isColHidden(e,t)?0:s)}}getRowDimensions(e,t){const o=this.headerPositions[e].ROW[t],s=this.getters.getRowSize(e,t);return{start:o,size:s,end:o+(this.getters.isRowHidden(e,t)?0:s)}}getColRowOffset(e,t,o,s=this.getters.getActiveSheetId()){const i=this.headerPositions[s][e][t];return this.headerPositions[s][e][o]-i}computeHeaderPositionsOfSheet(e){return{COL:this.computePositions(e,"COL"),ROW:this.computePositions(e,"ROW")}}computePositions(e,t){const o={};let s=0;for(let i=0;i<this.getters.getNumberHeaders(e,t)+1;i++)o[i]=s,this.getters.isHeaderHidden(e,t,i)||(s+=this.getters.getHeaderSize(e,t,i));return o}}).add("viewport",class extends FV{static getters=["getColIndex","getRowIndex","getActiveMainViewport","getSheetViewDimension","getSheetViewDimensionWithHeaders","getMainViewportRect","isVisibleInViewport","getEdgeScrollCol","getEdgeScrollRow","getVisibleFigures","getVisibleRect","getVisibleRectWithoutHeaders","getVisibleCellPositions","getColRowOffsetInViewport","getMainViewportCoordinates","getActiveSheetScrollInfo","getSheetViewVisibleCols","getSheetViewVisibleRows","getFrozenSheetViewRatio","isPixelPositionVisible","getColDimensionsInViewport","getRowDimensionsInViewport","getAllActiveViewportsZonesAndRect","getRect","getFigureUI","getPositionAnchorOffset","getGridOffset"];viewports={};sheetViewWidth=Me();sheetViewHeight=Me();gridOffsetX=0;gridOffsetY=0;sheetsWithDirtyViewports=new Set;shouldAdjustViewports=!1;allowDispatch(e){switch(e.type){case"SET_VIEWPORT_OFFSET":return this.chainValidations(this.checkScrollingDirection,this.checkIfViewportsWillChange)(e);case"RESIZE_SHEETVIEW":return this.chainValidations(this.checkValuesAreDifferent,this.checkPositiveDimension)(e);default:return"Success"}}handleEvent(e){const t=this.getters.getActiveSheetId();if(e.options.scrollIntoView){let{col:o,row:s}=Ar(e.previousAnchor.zone,e.anchor.zone);if("updateAnchor"===e.mode){const i=e.previousAnchor.zone,n=e.anchor.zone,{top:r,bottom:a,left:l,right:c}=this.getMainInternalViewport(t);i.left===n.left&&i.right===n.right&&(o=l>o||o>c?l:o),i.top===n.top&&i.bottom===n.bottom&&(s=r>s||s>a?r:s)}o=Math.min(o,this.getters.getNumberCols(t)-1),s=Math.min(s,this.getters.getNumberRows(t)-1),this.sheetsWithDirtyViewports.has(t)||this.refreshViewport(this.getters.getActiveSheetId(),{col:o,row:s})}}handle(e){if(Ds.has(e.type))for(const e of this.getters.getSheetIds())this.sheetsWithDirtyViewports.add(e);switch(e.type){case"START":this.selection.observe(this,{handleEvent:this.handleEvent.bind(this)}),this.resetViewports(this.getters.getActiveSheetId());break;case"UNDO":case"REDO":this.cleanViewports();for(const e of this.getters.getSheetIds())this.sheetsWithDirtyViewports.add(e);this.shouldAdjustViewports=!0;break;case"RESIZE_SHEETVIEW":this.resizeSheetView(e.height,e.width,e.gridOffsetX,e.gridOffsetY);break;case"SET_VIEWPORT_OFFSET":this.setSheetViewOffset(e.offsetX,e.offsetY);break;case"SHIFT_VIEWPORT_DOWN":const t=this.getters.getActiveSheetId(),{top:o,viewportHeight:s,offsetCorrectionY:i}=this.getMainInternalViewport(t),n=this.getters.getRowDimensions(t,o);this.shiftVertically(n.start+s-i);break;case"SHIFT_VIEWPORT_UP":{const e=this.getters.getActiveSheetId(),{top:t,viewportHeight:o,offsetCorrectionY:s}=this.getMainInternalViewport(e),i=this.getters.getRowDimensions(e,t);this.shiftVertically(i.end-s-o);break}case"REMOVE_TABLE":case"UPDATE_TABLE":case"UPDATE_FILTER":case"UNFREEZE_ROWS":case"UNFREEZE_COLUMNS":case"FREEZE_COLUMNS":case"FREEZE_ROWS":case"UNFREEZE_COLUMNS_ROWS":case"REMOVE_COLUMNS_ROWS":case"RESIZE_COLUMNS_ROWS":case"HIDE_COLUMNS_ROWS":case"ADD_COLUMNS_ROWS":case"UNHIDE_COLUMNS_ROWS":case"UNGROUP_HEADERS":case"GROUP_HEADERS":case"FOLD_HEADER_GROUP":case"UNFOLD_HEADER_GROUP":case"FOLD_HEADER_GROUPS_IN_ZONE":case"UNFOLD_HEADER_GROUPS_IN_ZONE":case"UNFOLD_ALL_HEADER_GROUPS":case"FOLD_ALL_HEADER_GROUPS":this.sheetsWithDirtyViewports.add(e.sheetId);break;case"UPDATE_CELL":if("content"in e||"format"in e||void 0!==e.style?.fontSize)for(const e of this.getters.getSheetIds())this.sheetsWithDirtyViewports.add(e);break;case"DELETE_SHEET":this.cleanViewports(),this.sheetsWithDirtyViewports.delete(e.sheetId);break;case"ACTIVATE_SHEET":this.sheetsWithDirtyViewports.add(e.sheetIdTo);break;case"SCROLL_TO_CELL":this.refreshViewport(this.getters.getActiveSheetId(),{col:e.col,row:e.row})}}finalize(){for(const e of this.sheetsWithDirtyViewports)if(this.resetViewports(e),this.shouldAdjustViewports){const t=this.getters.getSheetPosition(e);this.getSubViewports(e).forEach((e=>{e.adjustPosition(t)}))}this.sheetsWithDirtyViewports=new Set,this.shouldAdjustViewports=!1,this.setViewports()}setViewports(){const e=this.getters.getSheetIds();for(const t of e)this.viewports[t]?.bottomRight||this.resetViewports(t)}getColIndex(e){const t=this.getters.getActiveSheetId();return Math.max(...this.getSubViewports(t).map((t=>t.getColIndex(e))))}getRowIndex(e){const t=this.getters.getActiveSheetId();return Math.max(...this.getSubViewports(t).map((t=>t.getRowIndex(e))))}getSheetViewDimensionWithHeaders(){return{width:this.sheetViewWidth+this.gridOffsetX,height:this.sheetViewHeight+this.gridOffsetY}}getSheetViewDimension(){return{width:this.sheetViewWidth,height:this.sheetViewHeight}}getGridOffset(){return{x:this.gridOffsetX,y:this.gridOffsetY}}getActiveMainViewport(){const e=this.getters.getActiveSheetId();return this.getMainViewport(e)}getActiveSheetScrollInfo(){const e=this.getters.getActiveSheetId(),t=this.getMainInternalViewport(e);return{scrollX:t.offsetX,scrollY:t.offsetY}}getSheetViewVisibleCols(){const e=this.getters.getActiveSheetId(),t=this.getSubViewports(e);return[...new Set(t.map((e=>je(e.left,e.right+1))).flat())].filter((t=>t>=0&&!this.getters.isHeaderHidden(e,"COL",t)))}getSheetViewVisibleRows(){const e=this.getters.getActiveSheetId(),t=this.getSubViewports(e);return[...new Set(t.map((e=>je(e.top,e.bottom+1))).flat())].filter((t=>t>=0&&!this.getters.isHeaderHidden(e,"ROW",t)))}getVisibleCellPositions(){const e=this.getSheetViewVisibleCols(),t=this.getSheetViewVisibleRows(),o=this.getters.getActiveSheetId(),s=[];for(const i of e)for(const e of t){const t={sheetId:o,col:i,row:e},n=this.getters.getMainCellPosition(t);n.row===e&&n.col===i&&s.push(t)}return s}getMainViewportRect(){const e=this.getters.getActiveSheetId(),t=this.getMainInternalViewport(e),{xSplit:o,ySplit:s}=this.getters.getPaneDivisions(e),{width:i,height:n}=t.getMaxSize();return{x:this.getters.getColDimensions(e,o).start,y:this.getters.getRowDimensions(e,s).start,width:i,height:n}}getMaximumSheetOffset(){const e=this.getters.getActiveSheetId(),{width:t,height:o}=this.getMainViewportRect(),s=this.getMainInternalViewport(e);return{maxOffsetX:Math.max(0,t-s.viewportWidth),maxOffsetY:Math.max(0,o-s.viewportHeight)}}getColRowOffsetInViewport(e,t,o){if(o<t)return-this.getColRowOffsetInViewport(e,o,t);const s=this.getters.getActiveSheetId(),i="COL"===e?this.getters.getSheetViewVisibleCols():this.getters.getSheetViewVisibleRows(),n=i.findIndex((e=>t>=e));let r=i.findIndex((e=>o<=e));r=-1===r?i.length:r;const a=i.slice(n,r);let l=0;for(const t of a)l+=this.getters.getHeaderSize(s,e,t);return l}isVisibleInViewport({sheetId:e,col:t,row:o}){return this.getSubViewports(e).some((e=>e.isVisible(t,o)))}getEdgeScrollCol(e,t,o){let s=!1,i=0,n=0;const{xSplit:r}=this.getters.getPaneDivisions(this.getters.getActiveSheetId()),{width:a}=this.getSheetViewDimension(),{x:l}=this.getMainViewportCoordinates(),c=this.getActiveSheetScrollInfo().scrollX;return e>a?(s=!0,n=$r(e-a),i=1):e<l&&o>=l&&c>0?(s=!0,n=$r(l-e),i=-1):r&&t<l&&e>l&&(s=!0,n=$r(e),i="reset"),{canEdgeScroll:s,direction:i,delay:n}}getEdgeScrollRow(e,t,o){let s=!1,i=0,n=0;const{ySplit:r}=this.getters.getPaneDivisions(this.getters.getActiveSheetId()),{height:a}=this.getSheetViewDimension(),{y:l}=this.getMainViewportCoordinates(),c=this.getActiveSheetScrollInfo().scrollY;return e>a?(s=!0,n=$r(e-a),i=1):e<l&&o>=l&&c>0?(s=!0,n=$r(l-e),i=-1):r&&t<l&&e>l&&(s=!0,n=$r(e),i="reset"),{canEdgeScroll:s,direction:i,delay:n}}getVisibleRect(e){const t=this.getVisibleRectWithoutHeaders(e);return{...t,x:t.x+this.gridOffsetX,y:t.y+this.gridOffsetY}}getVisibleRectWithoutHeaders(e){const t=this.getters.getActiveSheetId();return this.mapViewportsToRect(t,(t=>t.getVisibleRect(e)))}getRect(e){const t=this.getters.getActiveSheetId(),o=this.mapViewportsToRect(t,(t=>t.getFullRect(e)));return{...o,x:o.x+this.gridOffsetX,y:o.y+this.gridOffsetY}}getRectWithoutHeaders(e){const t=this.getters.getActiveSheetId();return this.mapViewportsToRect(t,(t=>t.getFullRect(e)))}getMainViewportCoordinates(){const e=this.getters.getActiveSheetId(),{xSplit:t,ySplit:o}=this.getters.getPaneDivisions(e);return{x:this.getters.getColDimensions(e,t).start,y:this.getters.getRowDimensions(e,o).start}}getColDimensionsInViewport(e,t){const{top:o}=this.getMainInternalViewport(e),s={left:t,right:t,top:o,bottom:o},{x:i,width:n}=this.getVisibleRect(s),r=i-this.gridOffsetX;return{start:r,size:n,end:r+n}}getRowDimensionsInViewport(e,t){const{left:o}=this.getMainInternalViewport(e),s={left:0,right:o,top:t,bottom:t},{y:i,height:n}=this.getVisibleRect(s),r=i-this.gridOffsetY;return{start:r,size:n,end:r+n}}getAllActiveViewportsZonesAndRect(){const e=this.getters.getActiveSheetId();return this.getSubViewports(e).map((e=>({zone:e,rect:{x:e.offsetCorrectionX+this.gridOffsetX,y:e.offsetCorrectionY+this.gridOffsetY,...e.getMaxSize()}})))}ensureMainViewportExist(e){this.viewports[e]||this.resetViewports(e)}getSubViewports(e){return this.ensureMainViewportExist(e),Object.values(this.viewports[e]).filter(lt)}checkPositiveDimension(e){return e.width<0||e.height<0?"InvalidViewportSize":"Success"}checkValuesAreDifferent(e){const{height:t,width:o}=this.getSheetViewDimension();return e.gridOffsetX===this.gridOffsetX&&e.gridOffsetY===this.gridOffsetY&&e.width===o&&e.height===t?"ValuesNotChanged":"Success"}checkScrollingDirection({offsetX:e,offsetY:t}){const o=this.getMainInternalViewport(this.getters.getActiveSheetId());return!o.canScrollHorizontally&&e>0||!o.canScrollVertically&&t>0?"InvalidScrollingDirection":"Success"}checkIfViewportsWillChange({offsetX:e,offsetY:t}){const o=this.getters.getActiveSheetId(),{maxOffsetX:s,maxOffsetY:i}=this.getMaximumSheetOffset();return this.getSubViewports(o).some((o=>o.willNewOffsetScrollViewport(Ze(e,0,s),Ze(t,0,i))))?"Success":"ViewportScrollLimitsReached"}getMainViewport(e){const t=this.getMainInternalViewport(e);return{top:t.top,left:t.left,bottom:t.bottom,right:t.right}}getMainInternalViewport(e){return this.ensureMainViewportExist(e),this.viewports[e].bottomRight}cleanViewports(){const e={};for(const t of this.getters.getSheetIds())e[t]=this.viewports[t];this.viewports=e}resizeSheetView(e,t,o=0,s=0){this.sheetViewHeight=e,this.sheetViewWidth=t,this.gridOffsetX=o,this.gridOffsetY=s,this.recomputeViewports()}recomputeViewports(){for(const e of this.getters.getSheetIds())this.resetViewports(e)}setSheetViewOffset(e,t){const o=this.getters.getActiveSheetId(),{maxOffsetX:s,maxOffsetY:i}=this.getMaximumSheetOffset();this.getSubViewports(o).forEach((o=>o.setViewportOffset(Ze(e,0,s),Ze(t,0,i))))}getViewportOffset(e){return{x:this.viewports[e]?.bottomRight.offsetX||0,y:this.viewports[e]?.bottomRight.offsetY||0}}resetViewports(e){if(!this.getters.tryGetSheet(e))return;const{xSplit:t,ySplit:o}=this.getters.getPaneDivisions(e),s=this.getters.getNumberCols(e),i=this.getters.getNumberRows(e),n=Math.min(this.getters.getColRowOffset("COL",0,t,e),this.sheetViewWidth),r=Math.min(this.getters.getColRowOffset("ROW",0,o,e),this.sheetViewHeight),a=Math.max(this.sheetViewWidth-n,0),l=Math.max(this.sheetViewHeight-r,0),{xRatio:c,yRatio:h}=this.getFrozenSheetViewRatio(e),d=c<1,u=h<1,g=this.getViewportOffset(e),p={topLeft:o&&t&&new pL(this.getters,e,{left:0,right:t-1,top:0,bottom:o-1},{width:n,height:r},{canScrollHorizontally:!1,canScrollVertically:!1},{x:0,y:0})||void 0,topRight:o&&new pL(this.getters,e,{left:t,right:s-1,top:0,bottom:o-1},{width:a,height:r},{canScrollHorizontally:d,canScrollVertically:!1},{x:d?g.x:0,y:0})||void 0,bottomLeft:t&&new pL(this.getters,e,{left:0,right:t-1,top:o,bottom:i-1},{width:n,height:l},{canScrollHorizontally:!1,canScrollVertically:u},{x:0,y:u?g.y:0})||void 0,bottomRight:new pL(this.getters,e,{left:t,right:s-1,top:o,bottom:i-1},{width:a,height:l},{canScrollHorizontally:d,canScrollVertically:u},{x:d?g.x:0,y:u?g.y:0})};this.viewports[e]=p}refreshViewport(e,t){this.getSubViewports(e).forEach((e=>{e.adjustViewportZone(),e.adjustPosition(t)}))}shiftVertically(e){const t=this.getters.getActiveSheetId(),{top:o}=this.getMainInternalViewport(t),{scrollX:s}=this.getActiveSheetScrollInfo();this.setSheetViewOffset(s,e);const{anchor:i}=this.getters.getSelection();if(i.cell.row>=this.getters.getPaneDivisions(t).ySplit){const e=this.getMainInternalViewport(t).top-o;this.selection.selectCell(i.cell.col,i.cell.row+e)}}getColIndexLeftOfMainViewport(e){if(e>=0)return-1;const t=this.getters.getActiveSheetId();let o=this.getActiveMainViewport().left,s=-this.getActiveSheetScrollInfo().scrollX-this.getters.getColRowOffset("COL",o,0);for(;e<s;o--)s-=this.getters.getColSize(t,o-1);return Math.max(o,0)}getRowIndexTopOfMainViewport(e){if(e>=0)return-1;const t=this.getters.getActiveSheetId();let o=this.getActiveMainViewport().top,s=-this.getActiveSheetScrollInfo().scrollY-this.getters.getColRowOffset("ROW",o,0);for(;e<s;o--)s-=this.getters.getRowSize(t,o-1);return Math.max(o,0)}getVisibleFigures(){const e=this.getters.getActiveSheetId(),t=[],o=this.getters.getFigures(e),{scrollX:s,scrollY:i}=this.getters.getActiveSheetScrollInfo(),{x:n,y:r}=this.getMainViewportCoordinates(),{width:a,height:l}=this.getters.getSheetViewDimensionWithHeaders();for(const c of o){const o=this.getFigureUI(e,c),{x:h,y:d}=o;h>=n&&(h+c.width<s+n||h>a+s+n)||(d>=r&&(d+c.height<i+r||d>l+i+r)||t.push(o))}return t}getFigureUI(e,t){const o=t.offset.x+this.getters.getColDimensions(e,t.col).start,s=t.offset.y+this.getters.getRowDimensions(e,t.row).start;return{...t,x:o,y:s}}getPositionAnchorOffset(e){const{scrollX:t,scrollY:o}=this.getters.getActiveSheetScrollInfo(),s=e.x-t,i=e.y-o,n=s>=0?this.getColIndex(s):this.getColIndexLeftOfMainViewport(s),r=i>=0?this.getRowIndex(i):this.getRowIndexTopOfMainViewport(i),{x:a,y:l}=this.getRect(Dr({col:n,row:r}));return{col:n,row:r,offset:{x:Math.max(s-a+this.gridOffsetX,0),y:Math.max(i-l+this.gridOffsetY,0)}}}isPixelPositionVisible(e){const{scrollX:t,scrollY:o}=this.getters.getActiveSheetScrollInfo(),{x:s,y:i}=this.getters.getMainViewportCoordinates(),{width:n,height:r}=this.getters.getSheetViewDimension();return!(e.x>=s&&(e.x<s+t||e.x>n+t+s))&&!(e.y>=i&&(e.y<i+o||e.y>r+o+i))}getFrozenSheetViewRatio(e){const{xSplit:t,ySplit:o}=this.getters.getPaneDivisions(e),s=this.getters.getColDimensions(e,t).start,i=this.getters.getRowDimensions(e,o).start;return{xRatio:s/(this.sheetViewWidth+this.gridOffsetX),yRatio:i/(this.sheetViewHeight+this.gridOffsetY)}}mapViewportsToRect(e,t){let o=1/0,s=1/0,i=0,n=0,r=!1;for(const a of this.getSubViewports(e)){const e=t(a);e&&(r=!0,o=Math.min(o,e.x),s=Math.min(s,e.y),i=Math.max(i,e.x+e.width),n=Math.max(n,e.y+e.height))}return r?{x:o,y:s,width:i-o,height:n-s}:{x:0,y:0,width:0,height:0}}}).add("clipboard",class extends FV{static layers=["Clipboard"];static getters=["getClipboardTextAndImageContent","getClipboardId","getClipboardTextContent","isCutOperation"];status="invisible";originSheetId;copiedData;_isCutOperation=!1;clipboardId=(new Wa).uuidv4();fileStore;uuidGenerator;constructor(e){super(e),this.fileStore=e.external.fileStore,this.uuidGenerator=new Wa}allowDispatch(e){switch(e.type){case"CUT":const t=this.getters.getSelectedZones();return this.isCutAllowedOn(t);case"PASTE_FROM_OS_CLIPBOARD":{const t=this.convertTextToClipboardData(e.clipboardContent.text??""),o=e.pasteOption;return this.isPasteAllowed(e.target,t,{pasteOption:o,isCutOperation:!1})}case"PASTE":{if(!this.copiedData)return"EmptyClipboard";const t=e.pasteOption;return this.isPasteAllowed(e.target,this.copiedData,{pasteOption:t,isCutOperation:this._isCutOperation})}case"COPY_PASTE_CELLS_ABOVE":{const e=this.getters.getSelectedZones();if(e.length>1||0===e[0].top&&0===e[0].bottom)return"InvalidCopyPasteSelection";break}case"COPY_PASTE_CELLS_ON_LEFT":{const e=this.getters.getSelectedZones();if(e.length>1||0===e[0].left&&0===e[0].right)return"InvalidCopyPasteSelection";break}case"INSERT_CELL":{const{cut:t,paste:o}=this.getInsertCellsTargets(e.zone,e.shiftDimension),s=this.copy(t);return this.isPasteAllowed(o,s,{isCutOperation:!0})}case"DELETE_CELL":{const{cut:t,paste:o}=this.getDeleteCellsTargets(e.zone,e.shiftDimension),s=this.copy(t);return this.isPasteAllowed(o,s,{isCutOperation:!0})}}return"Success"}handle(e){switch(e.type){case"COPY":case"CUT":const t=this.getters.getSelectedZones();this.status="visible",this.originSheetId=this.getters.getActiveSheetId(),this._isCutOperation="CUT"===e.type,this.copiedData=this.copy(t);break;case"PASTE_FROM_OS_CLIPBOARD":{this._isCutOperation=!1;const t=e.clipboardContent.data;if(e.clipboardContent.imageData){const t=this.getters.getActiveSheetId(),o=this.uuidGenerator.uuidv4(),s=e.clipboardContent.imageData,i=ax(this.getters,s.size);this.dispatch("CREATE_IMAGE",{definition:s,size:i,col:e.target[0].left,row:e.target[0].top,offset:{x:0,y:0},sheetId:t,figureId:o})}this.copiedData=t||this.convertTextToClipboardData(e.clipboardContent.text??"");const o=e.pasteOption;this.paste(e.target,this.copiedData,{pasteOption:o,selectTarget:!0,isCutOperation:!1}),this.status="invisible",this.copiedData=void 0;break}case"PASTE":{const t=e.pasteOption;this.paste(e.target,this.copiedData,{pasteOption:t,selectTarget:!0,isCutOperation:this._isCutOperation}),this.status="invisible",this._isCutOperation&&(this.copiedData=void 0,this._isCutOperation=!1);break}case"COPY_PASTE_CELLS_ABOVE":{const e=this.getters.getSelectedZone(),t=e.top!==e.bottom,o={...e,bottom:t?e.top:e.top-1,top:t?e.top:e.top-1};this.originSheetId=this.getters.getActiveSheetId();const s=this.copy([o]);this.paste([e],s,{isCutOperation:!1,selectTarget:!0})}break;case"COPY_PASTE_CELLS_ON_LEFT":{const e=this.getters.getSelectedZone(),t=e.left!==e.right,o={...e,right:t?e.left:e.left-1,left:t?e.left:e.left-1};this.originSheetId=this.getters.getActiveSheetId();const s=this.copy([o]);this.paste([e],s,{isCutOperation:!1,selectTarget:!0})}break;case"CLEAN_CLIPBOARD_HIGHLIGHT":this.status="invisible";break;case"DELETE_CELL":{const{cut:t,paste:o}=this.getDeleteCellsTargets(e.zone,e.shiftDimension);if(!cr(t[0])){this.dispatch("CLEAR_CELLS",{target:[e.zone],sheetId:this.getters.getActiveSheetId()});break}const s=this.copy(t);this.paste(o,s,{isCutOperation:!0});break}case"INSERT_CELL":{const{cut:t,paste:o}=this.getInsertCellsTargets(e.zone,e.shiftDimension),s=this.copy(t);this.paste(o,s,{isCutOperation:!0});break}case"ADD_COLUMNS_ROWS":if(this.status="invisible",!this._isCutOperation||e.sheetId!==this.copiedData?.sheetId)return;this.isColRowDirtyingClipboard("before"===e.position?e.base:e.base+1,e.dimension)&&(this.copiedData=void 0);break;case"REMOVE_COLUMNS_ROWS":if(this.status="invisible",!this._isCutOperation||e.sheetId!==this.copiedData?.sheetId)return;for(const t of e.elements){if(this.isColRowDirtyingClipboard(t,e.dimension)){this.copiedData=void 0;break}}this.status="invisible";break;case"REPEAT_PASTE":this.paste(e.target,this.copiedData,{isCutOperation:!1,pasteOption:e.pasteOption,selectTarget:!0});break;case"DELETE_SHEET":if(!this._isCutOperation)return;this.originSheetId===e.sheetId&&(this.copiedData=void 0,this.status="invisible");break;default:ks(e)&&(this.status="invisible")}}convertTextToClipboardData(e){const t=this.selectClipboardHandlers({figureId:!0}).concat(this.selectClipboardHandlers({})),o={};for(const{handlerName:s,handler:i}of t){const t=i.convertTextToClipboardData(e);o[s]=t;const n=["sheetId","cells","zones","figureId"];for(const e of n)t&&e in t&&(o[e]=t[e])}return o}selectClipboardHandlers(e){const t="figureId"in e?jc.figureHandlers:jc.cellHandlers;return t.getKeys().map((e=>({handlerName:e,handler:new(t.get(e))(this.getters,this.dispatch)})))}isCutAllowedOn(e){const t=this.getClipboardData(e);for(const{handler:e}of this.selectClipboardHandlers(t)){const o=e.isCutAllowed(t);if("Success"!==o)return o}return"Success"}isPasteAllowed(e,t,o){for(const{handler:s}of this.selectClipboardHandlers(t)){const i=s.isPasteAllowed(this.getters.getActiveSheetId(),e,t,{...o});if("Success"!==i)return i}return"Success"}isColRowDirtyingClipboard(e,t){if(!this.copiedData||!this.copiedData.zones)return!1;const{zones:o}=this.copiedData;for(const s of o){if("COL"===t&&e<=s.right)return!0;if("ROW"===t&&e<=s.bottom)return!0}return!1}copy(e){const t={},o=this.getClipboardData(e);for(const{handlerName:e,handler:s}of this.selectClipboardHandlers(o)){const i=s.copy(o,this._isCutOperation);t[e]=i;const n=["sheetId","cells","zones","figureId"];for(const e of n)i&&e in i&&(t[e]=i[e])}return t}paste(e,t,o){if(!t)return;const s=this.getters.getActiveSheetId(),i=this.selectClipboardHandlers(t),{target:n,zone:r,selectedZones:a}=Ka(s,e,t,i,o);void 0!==r&&this.addMissingDimensions(s,r.right-r.left+1,r.bottom-r.top+1,r.left,r.top),Xa(i,t,n,o),o?.selectTarget&&Ja(this.selection,e,a)}addMissingDimensions(e,t,o,s,i){const n=o+i-this.getters.getNumberRows(e);n>0&&this.dispatch("ADD_COLUMNS_ROWS",{dimension:"ROW",base:this.getters.getNumberRows(e)-1,sheetId:e,sheetName:this.getters.getSheetName(e),quantity:n,position:"after"});const r=t+s-this.getters.getNumberCols(e);r>0&&this.dispatch("ADD_COLUMNS_ROWS",{dimension:"COL",base:this.getters.getNumberCols(e)-1,sheetId:e,sheetName:this.getters.getSheetName(e),quantity:r,position:"after"})}getClipboardTextContent(){return this.getPlainTextContent()}getClipboardId(){return this.clipboardId}async getClipboardTextAndImageContent(){const e=await this.getImageContent(),t=e?.type,o={[As.PlainText]:this.getPlainTextContent(),[As.Html]:await this.getHTMLContent()};return t&&e&&(o[t]=e),o}getSheetData(){const e={version:tD(),clipboardId:this.clipboardId};return this.copiedData&&"figureId"in this.copiedData?e:{...e,...this.copiedData}}getPlainTextContent(){return this.copiedData?.cells&&this.copiedData.cells.map((e=>e.map((e=>this.getters.shouldShowFormulas()&&e?.tokens?.length?e?.content||"":e.evaluatedCell?.formattedValue||"")).join("\t"))).join("\n")||"\t"}async getHTMLContent(){let e="";const t=this.copiedData?.cells;if(t)if(1===t.length&&1===t[0].length)e=`${this.getters.getCellText(t[0][0].position)}`;else{if(!t[0][0])return"";{let o='<table border="1" style="border-collapse:collapse">';for(const e of t){o+="<tr>";for(const t of e){if(!t)continue;o+=`<td style="${bh(vh(this.getters.getCellComputedStyle(t.position)))}">`+dx(this.getters.getCellText(t.position))+"</td>"}o+="</tr>"}o+="</table>",e=o}}else if(this.copiedData?.figureId){const t=this.copiedData.figureId,o=this.getters.getFigureSheetId(t);e="image"===this.getters.getFigure(o,t).tag?await this.craftImageHTML(t):"\t"}else e="\t";return`<div data-osheet-clipboard='${dx(JSON.stringify(this.getSheetData()))}'>${e}</div>`}readFileAsDataURL(e){return new Promise((t=>{const o=new FileReader;o.onload=()=>t(o.result),o.readAsDataURL(e)}))}async craftImageHTML(e){if(!this.fileStore)return"\t";const t=this.getters.getImage(e).path,o=await(this.fileStore?.getFile(t))||null;if(o){return`<img src="${dx(await this.readFileAsDataURL(o))}" />`}return"\t"}async getImageContent(){const e=this.copiedData?.figureId;if(!e)return;const t=this.getters.getFigureSheetId(e);let o;if("image"===this.getters.getFigure(t,e).tag){if(!this.fileStore)return;const t=this.getters.getImage(e).path;if(o=await(this.fileStore?.getFile(t)),"image/png"!==o.type){if(o.size>uL)return void this.ui.notifyUI({text:Vo("The file you are trying to copy is too large (>%sMB).\nIt will not be added to your OS clipboard.\nYou can download it directly instead.",Math.round(5)),sticky:!1,type:"warning"});o=await async function(e){return new Promise(((t,o)=>{const s=new Image;s.addEventListener("load",(()=>{const e=document.createElement("canvas");e.width=s.width,e.height=s.height;const o=e.getContext("2d");o?.drawImage(s,0,0),e.toBlob(t,"image/png")})),s.addEventListener("error",o),s.src=e}))}(t)}}return o?o instanceof File?o:new File([o],"image.png",{type:"image/png"}):void 0}isCutOperation(){return this._isCutOperation??!1}getDeleteCellsTargets(e,t){const o=this.getters.getActiveSheetId();let s;return s="COL"===t?{...e,left:e.right+1,right:this.getters.getNumberCols(o)-1}:{...e,top:e.bottom+1,bottom:this.getters.getNumberRows(o)-1},{cut:[s],paste:[e]}}getInsertCellsTargets(e,t){const o=this.getters.getActiveSheetId();let s,i;return"COL"===t?(s={...e,right:this.getters.getNumberCols(o)-1},i={...e,left:e.right+1,right:e.right+1}):(s={...e,bottom:this.getters.getNumberRows(o)-1},i={...e,top:e.bottom+1,bottom:this.getters.getNumberRows(o)-1}),{cut:[s],paste:[i]}}getClipboardData(e){const t=this.getters.getActiveSheetId(),o=this.getters.getSelectedFigureId();if(o)return{figureId:o,sheetId:t};const s=Za(t,e);return this._isCutOperation||(s.rowsIndexes=s.rowsIndexes.filter((e=>!this.getters.isRowFiltered(t,e)))),s}drawLayer(e){if("visible"!==this.status||!this.copiedData)return;const{sheetId:t,zones:o}=this.copiedData;if(t!==this.getters.getActiveSheetId()||!o||!o.length)return;const{ctx:s,thinLineWidth:i}=e;s.setLineDash([8,5]),s.strokeStyle=p,s.lineWidth=3.3*i;for(const e of o){const{x:t,y:o,width:i,height:n}=this.getters.getVisibleRect(e);i>0&&n>0&&s.strokeRect(t,o,i,n)}}}),bL=(new n).add("evaluation",class extends Mk{static getters=["evaluateFormula","evaluateFormulaResult","evaluateCompiledFormula","getCorrespondingFormulaCell","getRangeFormattedValues","getRangeValues","getRangeFormats","getEvaluatedCell","getEvaluatedCells","getEvaluatedCellsInZone","getEvaluatedCellsPositions","getSpreadZone","getArrayFormulaSpreadingOn","isEmpty"];shouldRebuildDependenciesGraph=!0;evaluator;positionsToUpdate=[];constructor(e){super(e),this.evaluator=new uV(e.custom,this.getters)}beforeHandle(e){(Ds.has(e.type)||Os.has(e.type))&&(this.shouldRebuildDependenciesGraph=!0)}handle(e){switch(e.type){case"UPDATE_CELL":if(!("content"in e)&&!("format"in e)||this.shouldRebuildDependenciesGraph)return;const t={sheetId:e.sheetId,row:e.row,col:e.col};this.positionsToUpdate.push(t),"content"in e&&this.evaluator.updateDependencies(t);break;case"EVALUATE_CELLS":this.evaluator.evaluateAllCells()}}finalize(){this.shouldRebuildDependenciesGraph?(this.evaluator.buildDependencyGraph(),this.evaluator.evaluateAllCells(),this.shouldRebuildDependenciesGraph=!1):this.positionsToUpdate.length&&this.evaluator.evaluateCells(this.positionsToUpdate),this.positionsToUpdate=[]}evaluateFormula(e,t){const o=this.evaluateFormulaResult(e,t);return Ws(o)?Pi(o,(e=>e.value)):o.value}evaluateFormulaResult(e,t){return this.evaluator.evaluateFormulaResult(e,t)}evaluateCompiledFormula(e,t,o){return this.evaluator.evaluateCompiledFormula(e,t,o)}getRangeFormattedValues(e){return void 0===this.getters.tryGetSheet(e.sheetId)?[]:this.mapVisiblePositions(e,(e=>this.getters.getEvaluatedCell(e).formattedValue))}getRangeValues(e){return void 0===this.getters.tryGetSheet(e.sheetId)?[]:this.mapVisiblePositions(e,(e=>this.getters.getEvaluatedCell(e).value))}getRangeFormats(e){const t=this.getters.tryGetSheet(e.sheetId);return void 0===t?[]:this.getters.getEvaluatedCellsInZone(t.id,e.zone).map((e=>e.format))}getEvaluatedCell(e){return this.evaluator.getEvaluatedCell(e)}getEvaluatedCells(e){return this.evaluator.getEvaluatedPositionsInSheet(e).map((e=>this.getEvaluatedCell(e)))}getEvaluatedCellsPositions(e){return this.evaluator.getEvaluatedPositionsInSheet(e)}getEvaluatedCellsInZone(e,t){return Er(t).map((({col:t,row:o})=>this.getters.getEvaluatedCell({sheetId:e,col:t,row:o})))}getSpreadZone(e,t={ignoreSpillError:!1}){return this.evaluator.getSpreadZone(e,t)}getArrayFormulaSpreadingOn(e){return this.evaluator.getArrayFormulaSpreadingOn(e)}isEmpty(e,t){return Er(t).map((({col:t,row:o})=>this.getEvaluatedCell({sheetId:e,col:t,row:o}))).every((e=>e.type===Ts.empty))}mapVisiblePositions(e,t){const{sheetId:o,zone:s}=e;return Er(s).reduce(((e,s)=>{const{col:i,row:n}=s;return this.getters.isColHidden(o,i)||this.getters.isRowHidden(o,n)||e.push(t({sheetId:o,...s})),e}),[])}exportForExcel(e){for(const t of e.sheets)t.cellValues={},t.formulaSpillRanges={};for(const t of this.evaluator.getEvaluatedPositions()){const o=this.evaluator.getEvaluatedCell(t),s=Oo(t.col,t.row),i=o.value;let n,r=!1,a=!0;const l=e.sheets.find((e=>e.id===t.sheetId)),c=this.getCorrespondingFormulaCell(t);if(c){const h=this.getters.getCell(t);if(a=VS(c.compiledFormula.tokens),r=a&&h?.content===c.content,!a&&""!==i){n=(i??"").toString();const t=o.format;if(t){const o=Hr(t,e.formats);l.formats[s]=o}}}const h=l.cells[s];let d;d=a&&r&&c instanceof Tk?c.contentWithFixedReferences:a?h:n,l.cells[s]=d,l.cellValues[s]="error"!==o.type?i:void 0;const u=this.getSpreadZone(t);u&&(l.formulaSpillRanges[s]=this.getters.getRangeString(this.getters.getRangeFromZone(t.sheetId,u),t.sheetId))}}getCorrespondingFormulaCell(e){const t=this.getters.getCell(e);if(t&&t.isFormula)return t.compiledFormula.isBadExpression?void 0:t;if(t&&t.content)return;const o=this.getArrayFormulaSpreadingOn(e);if(void 0===o)return;const s=this.getters.getCell(o);return s?.isFormula?s:void 0}}).add("evaluation_chart",class extends Mk{static getters=["getChartRuntime","getStyleOfSingleCellChart"];charts={};createRuntimeChart=tx(this.getters);handle(e){if(Ds.has(e.type)||Fs.has(e.type)||_s.has(e.type))for(const e in this.charts)this.charts[e]=void 0;switch(e.type){case"UPDATE_CHART":case"CREATE_CHART":case"DELETE_FIGURE":this.charts[e.figureId]=void 0;break;case"DELETE_SHEET":for(const e in this.charts)this.getters.isChartDefined(e)||(this.charts[e]=void 0)}}getChartRuntime(e){if(!this.charts[e]){const t=this.getters.getChart(e);if(!t)throw new Error(`No chart for the given id: ${e}`);this.charts[e]=this.createRuntimeChart(t)}return this.charts[e]}getStyleOfSingleCellChart(e,t){if(e)return{background:e,fontColor:eC(e)};if(!t)return{background:m,fontColor:eC(m)};const o=t.zone.left,s=t.zone.top,i=t.sheetId,n=this.getters.getCellComputedStyle({sheetId:i,col:o,row:s}),r=n.fillColor||m;return{background:r,fontColor:n.textColor||eC(r)}}exportForExcel(e){for(const t of e.sheets){t.images||(t.images=[]);const e=this.getters.getFigures(t.id),o=[];for(const s of e){if(!s||"chart"!==s.tag)continue;const e=s.id,i=this.getters.getChart(e)?.getDefinitionForExcel();if(i)o.push({...s,data:i});else{if(!this.getters.getChart(e))continue;const o=this.getters.getChartType(e),i=Hy(this.getters.getChartRuntime(e),s,o);i&&t.images.push({...s,tag:"image",data:{mimetype:"image/png",path:i,size:{width:s.width,height:s.height}}})}}t.charts=o}}}).add("evaluation_cf",class extends Mk{static getters=["getConditionalIcon","getCellConditionalFormatStyle","getConditionalDataBar"];isStale=!0;computedStyles={};computedIcons={};computedDataBars={};handle(e){(Ds.has(e.type)||Fs.has(e.type)||"UPDATE_CELL"===e.type&&("content"in e||"format"in e))&&(this.isStale=!0)}finalize(){if(this.isStale){for(const e of this.getters.getSheetIds())this.computedStyles[e]=ut((()=>this.getComputedStyles(e))),this.computedIcons[e]=ut((()=>this.getComputedIcons(e))),this.computedDataBars[e]=ut((()=>this.getComputedDataBars(e)));this.isStale=!1}}getCellConditionalFormatStyle(e){const{sheetId:t,col:o,row:s}=e,i=this.computedStyles[t]();return i&&i[o]?.[s]}getConditionalIcon({sheetId:e,col:t,row:o}){const s=this.computedIcons[e]();return s&&s[t]?.[o]}getConditionalDataBar({sheetId:e,col:t,row:o}){const s=this.computedDataBars[e]();return s&&s[t]?.[o]}getComputedStyles(e){const t={};for(const o of this.getters.getConditionalFormats(e).reverse())switch(o.rule.type){case"ColorScaleRule":for(const s of o.ranges)this.applyColorScale(e,s,o.rule,t);break;case"CellIsRule":const s=o.rule.values.map((e=>e.startsWith("=")?PS(e):void 0));for(const i of o.ranges){const n=this.getters.getRangeFromSheetXC(e,i).zone;for(let i=n.top;i<=n.bottom;i++)for(let r=n.left;r<=n.right;r++){const a={sheetId:e,col:r,row:i},l=o.rule.values.map(((t,o)=>{const a=s[o];return a?this.getters.getTranslatedCellFormula(e,r-n.left,i-n.top,a.tokens):t}));this.getRuleResultForTarget(a,{...o.rule,values:l})&&(t[r]||(t[r]=[]),t[r][i]=Object.assign(t[r]?.[i]||{},o.rule.style))}}}return t}getComputedIcons(e){const t={};for(const o of this.getters.getConditionalFormats(e).reverse())if("IconSetRule"===o.rule.type)for(const s of o.ranges)this.applyIcon(e,s,o.rule,t);return t}getComputedDataBars(e){const t={};for(const o of this.getters.getConditionalFormats(e).reverse())if("DataBarRule"===o.rule.type)for(const s of o.ranges)this.applyDataBar(e,s,o.rule,t);return t}parsePoint(e,t,o,s){const i=this.getters.getEvaluatedCellsInZone(e,this.getters.getRangeFromSheetXC(e,t).zone).filter((e=>e.type===Ts.number)).map((e=>e.value));switch(o.type){case"value":return"max"===s?Ot(i):Ft(i);case"number":return Number(o.value);case"percentage":const t=Ft(i);return t+(Ot(i)-t)*Number(o.value)/100;case"percentile":return Rs(i,Number(o.value)/100,!0);case"formula":const n=o.value&&this.getters.evaluateFormula(e,o.value);return"number"==typeof n?n:null;default:return null}}applyIcon(e,t,o,s){const i=this.parsePoint(e,t,o.lowerInflectionPoint),n=this.parsePoint(e,t,o.upperInflectionPoint);if(null===i||null===n||i>n)return;const r=this.getters.getRangeFromSheetXC(e,t).zone,a=[o.icons.upper,o.icons.middle,o.icons.lower];for(let t=r.top;t<=r.bottom;t++)for(let l=r.left;l<=r.right;l++){const r=this.getters.getEvaluatedCell({sheetId:e,col:l,row:t});if(r.type!==Ts.number)continue;const c=this.computeIcon(r.value,n,o.upperInflectionPoint.operator,i,o.lowerInflectionPoint.operator,a);s[l]||(s[l]=[]),s[l][t]=c}}computeIcon(e,t,o,s,i,n){return"ge"===o&&e>=t||"gt"===o&&e>t?n[0]:"ge"===i&&e>=s||"gt"===i&&e>s?n[1]:n[2]}applyDataBar(e,t,o,s){const i=this.getters.getRangeFromSheetXC(e,o.rangeValues||t),n=Ot(this.getters.getEvaluatedCellsInZone(e,i.zone).filter((e=>e.type===Ts.number)).map((e=>e.value)));if(n<=0)return;const r=o.color,a=this.getters.getRangeFromSheetXC(e,t).zone,l=i.zone;for(let t=a.top;t<=a.bottom;t++)for(let o=a.left;o<=a.right;o++){const i=o-a.left+l.left,c=t-a.top+l.top,h=this.getters.getEvaluatedCell({sheetId:e,col:i,row:c});!Cr(i,c,l)||h.type!==Ts.number||h.value<=0||(s[o]||(s[o]=[]),s[o][t]={color:Bt(r),percentage:100*h.value/n})}}applyColorScale(e,t,o,s){const i=this.parsePoint(e,t,o.minimum,"min"),n=o.midpoint?this.parsePoint(e,t,o.midpoint):null,r=this.parsePoint(e,t,o.maximum,"max");if(null===i||null===r||i>=r||n&&(i>=n||n>=r))return;const a=this.getters.getRangeFromSheetXC(e,t).zone,l=[{value:i,color:o.minimum.color}];o.midpoint&&n&&l.push({value:n,color:o.midpoint.color}),l.push({value:r,color:o.maximum.color});const c=vo(l);for(let t=a.top;t<=a.bottom;t++)for(let o=a.left;o<=a.right;o++){const n=this.getters.getEvaluatedCell({sheetId:e,col:o,row:t});if(n.type===Ts.number){const e=Ze(n.value,i,r);s[o]||(s[o]=[]),s[o][t]=s[o]?.[t]||{},s[o][t].fillColor=c(e)}}}getRuleResultForTarget(e,t){const o=this.getters.getEvaluatedCell(e);if(o.type===Ts.error)return!1;const{sheetId:s}=e,i=Zx.get(t.operator),n=t.values.map((e=>e.startsWith("=")?this.getters.evaluateFormula(s,e)??"":qn(e,$s)));if(n.some(Ws))return!1;const r={type:t.operator,values:n};return i.isValueValid(o.value??"",r,this.getters,s)}}).add("row_size",class extends Mk{static getters=["getRowSize","getHeaderSize","getMaxAnchorOffset"];tallestCellInRow={};ctx=document.createElement("canvas").getContext("2d");handle(e){switch(e.type){case"START":for(const e of this.getters.getSheetIds())this.initializeSheet(e);break;case"CREATE_SHEET":this.initializeSheet(e.sheetId);break;case"DUPLICATE_SHEET":{const t=ze(this.tallestCellInRow[e.sheetId]);this.history.update("tallestCellInRow",e.sheetIdTo,t);break}case"DELETE_SHEET":const t={...this.tallestCellInRow};delete t[e.sheetId],this.history.update("tallestCellInRow",t);break;case"REMOVE_COLUMNS_ROWS":{if("COL"===e.dimension)return;const t=Et(this.tallestCellInRow[e.sheetId],e.elements);this.history.update("tallestCellInRow",e.sheetId,t);break}case"ADD_COLUMNS_ROWS":{if("COL"===e.dimension)return;const t=pt(e.position,e.base),o=Array(e.quantity).fill(void 0),s=Rt(this.tallestCellInRow[e.sheetId],o,t);this.history.update("tallestCellInRow",e.sheetId,s);break}case"RESIZE_COLUMNS_ROWS":{const t=e.sheetId;if("ROW"===e.dimension)for(const o of e.elements){const e=this.getRowTallestCell(t,o);this.history.update("tallestCellInRow",t,o,e)}else for(const o of je(0,this.getters.getNumberRows(t)))for(const s of e.elements)this.updateRowSizeForCellChange(t,o,s)}break;case"UPDATE_CELL":this.updateRowSizeForCellChange(e.sheetId,e.row,e.col);break;case"ADD_MERGE":case"REMOVE_MERGE":for(const t of e.target)for(const o of Er(t))this.updateRowSizeForCellChange(e.sheetId,o.row,o.col)}}getRowSize(e,t){return Math.round(this.getters.getUserRowSize(e,t)??this.tallestCellInRow[e][t]?.size??ie)}getMaxAnchorOffset(e,t,o){let{numberOfRows:s,numberOfCols:i}=this.getters.getSheetSize(e),n=0;for(;n<t&&s>0;s--)n+=this.getRowSize(e,s-1);let r=0;for(;r<o&&i>0;i--)r+=this.getters.getColSize(e,i-1);return{col:i,row:s,offset:{x:r-o,y:n-t}}}getHeaderSize(e,t,o){return this.getters.isHeaderHidden(e,t,o)?0:"ROW"===t?this.getRowSize(e,o):this.getters.getColSize(e,o)}updateRowSizeForCellChange(e,t,o){const s=this.tallestCellInRow[e]?.[t];if(s?.cell.col===o){const o=this.getRowTallestCell(e,t);this.history.update("tallestCellInRow",e,t,o)}const i=this.getCellHeight({sheetId:e,col:o,row:t});if(!(i<=ie)&&(!s&&i>ie||s&&i>s.size)){const s={cell:{sheetId:e,col:o,row:t},size:i};this.history.update("tallestCellInRow",e,t,s)}}initializeSheet(e){const t=[];for(let o=0;o<this.getters.getNumberRows(e);o++){const s=this.getRowTallestCell(e,o);t.push(s)}this.history.update("tallestCellInRow",e,t)}getCellHeight(e){if(this.isInMultiRowMerge(e))return ie;const t=this.getters.getCell(e),o=this.getters.getColSize(e.sheetId,e.col);return function(e,t,o){return t&&(t.isFormula||t.content)?Aa(e,t.isFormula?"":t.content,t.style,o):ie}(this.ctx,t,o)}isInMultiRowMerge(e){const t=this.getters.getMerge(e);return!!t&&t.bottom!==t.top}getRowTallestCell(e,t){if(void 0!==this.getters.getUserRowSize(e,t))return;const o=this.getters.getRowCells(e,t);let s,i=0;for(let e=0;e<o.length;e++){const t=this.getters.getCellById(o[e]);if(!t)continue;const n=this.getters.getCellPosition(t.id),r=this.getCellHeight(n);r>i&&r>ie&&(i=r,s={cell:n,size:r})}return s&&s.size>ie?s:void 0}}).add("data_validation_ui",class extends Mk{static getters=["getDataValidationInvalidCriterionValueMessage","getInvalidDataValidationMessage","getValidationResultForCellValue","getDataValidationRangeValues","isCellValidCheckbox","getDataValidationCellStyle","getDataValidationChipStyle","isDataValidationInvalid"];validationResults={};handle(e){if(Ds.has(e.type)||"EVALUATE_CELLS"===e.type||"UPDATE_CELL"===e.type&&("content"in e||"format"in e))this.validationResults={};else switch(e.type){case"ADD_DATA_VALIDATION_RULE":case"REMOVE_DATA_VALIDATION_RULE":delete this.validationResults[e.sheetId]}}isDataValidationInvalid(e){return!this.getValidationResultForCell(e).isValid}getDataValidationCellStyle(e){if(!this.hasChip(e))return this.getDataValidationStyle(e)}getDataValidationChipStyle(e){if(this.hasChip(e))return this.getDataValidationStyle(e)??{fillColor:F}}getInvalidDataValidationMessage(e){const t=this.getValidationResultForCell(e);return t.isValid?void 0:t.error}getDataValidationInvalidCriterionValueMessage(e,t){const o=Zx.get(e);return t.startsWith("=")?"onlyLiterals"===o.allowedValues?Vo("The value must not be a formula"):this.isValidFormula(t)?void 0:jy.CriterionError.validFormula:"onlyFormulas"===o.allowedValues?Vo("The value must be a formula"):o.isCriterionValueValid(t)?void 0:o.criterionValueErrorString}getDataValidationRangeValues(e,t){const o=this.getters.getRangeFromSheetXC(e,String(t.values[0]));return this.getters.getRangeValues(o).map((e=>e?.toString())).filter(lt)}isCellValidCheckbox(e){if(!this.getters.isMainCellPosition(e))return!1;const t=this.getters.getValidationRuleForCell(e);return!(!t||"isBoolean"!==t.criterion.type)&&this.getValidationResultForCell(e).isValid}getValidationResultForCellValue(e,t){const o=this.getters.getValidationRuleForCell(t);if(!o)return vV;const s=this.getRuleErrorForCellValue(e,t,o);return s?{error:s,rule:o,isValid:!1}:vV}hasChip(e){const t=this.getters.getValidationRuleForCell(e);return("isValueInList"===t?.criterion.type||"isValueInRange"===t?.criterion.type)&&"chip"===t.criterion.displayStyle}getDataValidationStyle(e){const t=this.getters.getValidationRuleForCell(e);if(!t||this.isDataValidationInvalid(e))return;const o=this.getters.getEvaluatedCell(e),s=this.getValueColor(t,o.value);if(!s)return;return{fillColor:s,textColor:so(s)}}getValueColor(e,t){if("isValueInList"===e.criterion.type||"isValueInRange"===e.criterion.type)for(const o in e.criterion.colors)if(o.toLowerCase()===String(t).toLowerCase())return e.criterion.colors[o]}isValidFormula(e){return!PS(e).isBadExpression}getValidationResultForCell(e){const{col:t,row:o,sheetId:s}=e;return this.validationResults[s]||(this.validationResults[s]=this.computeSheetValidationResults(s)),this.validationResults[s][t]?.[o]?.()||vV}computeSheetValidationResults(e){const t={},o=this.getters.getDataValidationRules(e).map((e=>e.ranges));for(const e of va(o.flat())){const{col:o,row:s}=e;t[o]||(t[o]=[]),t[o][s]=ut((()=>{const t=this.getters.getEvaluatedCell(e);return t.type===Ts.empty?vV:this.getValidationResultForCellValue(t.value,e)}))}return t}getRuleErrorForCellValue(e,t,o){const{sheetId:s}=t,i=o.criterion,n=Zx.get(i.type),r=this.getCellOffsetInRule(t,o),a=this.getEvaluatedCriterionValues(s,r,i);if(a.some(Ws))return;const l={...i,values:a};return n.isValueValid(e,l,this.getters,s)?void 0:n.getErrorString(l,this.getters,s)}getCellOffsetInRule(e,t){const o=t.ranges.find((t=>Cr(e.col,e.row,t.zone)));if(!o)throw new Error("The cell is not in any range of the rule");return{col:e.col-o.zone.left,row:e.row-o.zone.top}}getEvaluatedCriterionValues(e,t,o){return o.values.map((o=>{if(!o.startsWith("="))return qn(o,$s);const s=PS(o),i=this.getters.getTranslatedCellFormula(e,t.col,t.row,s.tokens);return this.getters.evaluateFormula(e,i)}))}}).add("dynamic_tables",class extends Mk{static getters=["canCreateDynamicTableOnZones","doesZonesContainFilter","getFilter","getFilters","getTable","getTables","getTablesOverlappingZones","getFilterId","getFilterHeaders","isFilterHeader"];tables={};handle(e){if(Ds.has(e.type)||"UPDATE_CELL"===e.type&&("content"in e||"format"in e)||"EVALUATE_CELLS"===e.type)this.tables={};else switch(e.type){case"CREATE_TABLE":case"REMOVE_TABLE":case"UPDATE_TABLE":case"DELETE_CONTENT":this.tables={}}}finalize(){for(const e of this.getters.getSheetIds())this.tables[e]||(this.tables[e]=this.computeTables(e))}computeTables(e){const t=[],o=this.getters.getCoreTables(e);for(const e of o)"dynamic"!==e.type&&t.push(e);const s=[...t];for(const i of o){if("dynamic"!==i.type)continue;const o=this.coreTableToTable(e,i);let n=o.range.zone;for(const e of s)Sr(n,e.range.zone)&&(n={...n,right:e.range.zone.left-1});t.push({...o,range:this.getters.getRangeFromZone(e,n)})}return t}getFilters(e){return this.getTables(e).filter((e=>e.config.hasFilters)).map((e=>e.filters)).flat()}getTables(e){return this.tables[e]||[]}getFilter(e){const t=this.getTable(e);if(t&&t.config.hasFilters)return t.filters.find((t=>t.col===e.col))}getFilterId(e){return this.getFilter(e)?.id}getTable({sheetId:e,col:t,row:o}){return this.getTables(e).find((e=>Cr(t,o,e.range.zone)))}getTablesOverlappingZones(e,t){return this.getTables(e).filter((e=>t.some((t=>Sr(e.range.zone,t)))))}doesZonesContainFilter(e,t){return this.getTablesOverlappingZones(e,t).some((e=>e.config.hasFilters))}getFilterHeaders(e){const t=[];for(const o of this.getTables(e)){if(!o.config.hasFilters)continue;const s=o.range.zone,i=s.top;for(let o=s.left;o<=s.right;o++)t.push({sheetId:e,col:o,row:i})}return t}isFilterHeader({sheetId:e,col:t,row:o}){return this.getFilterHeaders(e).some((e=>e.col===t&&e.row===o))}canCreateDynamicTableOnZones(e,t){if(!Nr(t))return!1;const o=fr(...t),s={col:o.left,row:o.top,sheetId:e},i=this.getters.getArrayFormulaSpreadingOn(s);if(!i)return!1;if(mt(i,s)&&1===Pr(o))return!0;return mt(o,this.getters.getSpreadZone(i))}coreTableToTable(e,t){if("dynamic"!==t.type)return t;const o=t.range.zone,s={sheetId:e,col:o.left,row:o.top},i=this.getters.getSpreadZone(s)??t.range.zone,n=this.getters.getRangeFromZone(e,i),r=this.getDynamicTableFilters(e,t,i);return{id:t.id,range:n,filters:r,config:t.config}}getDynamicTableFilters(e,t,o){const s=[],{top:i,bottom:n,left:r,right:a}=o;for(let o=r;o<=a;o++){const a=o-r,l={left:o,right:o,top:i,bottom:n},c=d_(this.getDynamicTableFilterId(t.id,a),this.getters.getRangeFromZone(e,l),t.config,this.getters.getRangeFromZone);s.push(c)}return s}getDynamicTableFilterId(e,t){return e+"_"+t}exportForExcel(e){for(const t of e.sheets)for(const e of t.tables){const o=ar(e.range),s={sheetId:t.id,col:o.left,row:o.top},i=this.getters.getCoreTable(s),n=this.getTable(s);"dynamic"===i?.type&&n&&(e.range=dr(n.range.zone))}}}).add("custom_colors",class extends Mk{customColors={};shouldUpdateColors=!0;static getters=["getCustomColors"];constructor(e){super(e),this.tryToAddColors(e.customColors??[])}handle(e){switch(e.type){case"START":for(const e of this.getters.getSheetIds())for(const t of this.getters.getChartIds(e))this.tryToAddColors(this.getChartColors(t));break;case"UPDATE_CHART":case"CREATE_CHART":this.tryToAddColors(this.getChartColors(e.figureId));break;case"UPDATE_CELL":case"ADD_CONDITIONAL_FORMAT":case"SET_BORDER":case"SET_ZONE_BORDERS":case"SET_FORMATTING":case"CREATE_TABLE":case"UPDATE_TABLE":this.history.update("shouldUpdateColors",!0)}}finalize(){this.shouldUpdateColors&&(this.history.update("shouldUpdateColors",!1),this.tryToAddColors(this.computeCustomColors()))}getCustomColors(){return function(e){const t=[{leadColor:qt(255,0,0),colors:[]},{leadColor:qt(255,128,0),colors:[]},{leadColor:qt(128,128,0),colors:[]},{leadColor:qt(128,255,0),colors:[]},{leadColor:qt(0,255,0),colors:[]},{leadColor:qt(0,255,128),colors:[]},{leadColor:qt(0,255,255),colors:[]},{leadColor:qt(0,127,255),colors:[]},{leadColor:qt(0,0,255),colors:[]},{leadColor:qt(127,0,255),colors:[]},{leadColor:qt(128,0,128),colors:[]},{leadColor:qt(255,0,128),colors:[]}];for(const o of e.map(Yt)){let e=500,s=0;t.forEach(((t,i)=>{const n=(r=o,a=t.leadColor,Math.sqrt(Math.pow(r.r-a.r,2)+Math.pow(r.g-a.g,2)+Math.pow(r.b-a.b,2)));var r,a;e>n&&(e=n,s=i)})),t[s].colors.push(o)}return t.map((e=>e.colors.sort(((e,t)=>Kt(e).s-Kt(t).s)))).flat().map(jt)}(Object.keys(this.customColors))}computeCustomColors(){let e=[];for(const t of this.getters.getSheetIds())e=e.concat(this.getColorsFromCells(t),this.getFormattingColors(t),this.getTableColors(t));return[...new Set([...e])]}getColorsFromCells(e){const t=Object.values(this.getters.getCells(e)),o=new Set;for(const e of t)e.style?.textColor&&o.add(e.style.textColor),e.style?.fillColor&&o.add(e.style.fillColor);for(const t of this.getters.getBordersColors(e))o.add(t);return[...o]}getFormattingColors(e){const t=this.getters.getConditionalFormats(e),o=[];for(const e of t){const t=e.rule;"CellIsRule"===t.type?(o.push(t.style.textColor),o.push(t.style.fillColor)):"ColorScaleRule"===t.type&&(o.push(Bt(t.minimum.color)),o.push(t.midpoint?Bt(t.midpoint.color):void 0),o.push(Bt(t.maximum.color)))}return o.filter(lt)}getChartColors(e){const t=this.getters.getChart(e);if(void 0===t)return[];return[...JSON.stringify(t.getDefinition()).matchAll(fV)].map((e=>e[1]))}getTableColors(e){return this.getters.getTables(e).flatMap((e=>{const t=e.config,o=this.getters.getTableStyle(t.styleId);return[this.getTableStyleElementColors(o.wholeTable),t.numberOfHeaders>0?this.getTableStyleElementColors(o.headerRow):[],t.totalRow?this.getTableStyleElementColors(o.totalRow):[],t.bandedColumns?this.getTableStyleElementColors(o.firstColumnStripe):[],t.bandedColumns?this.getTableStyleElementColors(o.secondColumnStripe):[],t.bandedRows?this.getTableStyleElementColors(o.firstRowStripe):[],t.bandedRows?this.getTableStyleElementColors(o.secondRowStripe):[],t.firstColumn?this.getTableStyleElementColors(o.firstColumn):[],t.lastColumn?this.getTableStyleElementColors(o.lastColumn):[]].flat()}))}getTableStyleElementColors(e){return e?[e.style?.fillColor,e.style?.textColor,e.border?.bottom?.color,e.border?.top?.color,e.border?.left?.color,e.border?.right?.color,e.border?.horizontal?.color,e.border?.vertical?.color].filter(lt):[]}tryToAddColors(e){for(const t of e){if(!Gt(t))continue;const e=$t(t);t&&!ee.includes(e)&&this.history.update("customColors",e,!0)}}}).add("pivot_ui",class extends Mk{static getters=["getPivot","getFirstPivotFunction","getPivotIdFromPosition","getPivotCellFromPosition","generateNewCalculatedMeasureName","isPivotUnused","isSpillPivotFormula"];pivots={};unusedPivots;custom;constructor(e){super(e),this.custom=e.custom}beforeHandle(e){if("START"===e.type)for(const e of this.getters.getPivotIds())this.setupPivot(e)}handle(e){if(Ds.has(e.type))for(const e of this.getters.getPivotIds())YN.get(this.getters.getPivotCoreDefinition(e).type).externalData||this.setupPivot(e,{recreate:!0});switch(e.type){case"REFRESH_PIVOT":this.refreshPivot(e.id);break;case"ADD_PIVOT":this.setupPivot(e.pivotId);break;case"DUPLICATE_PIVOT":this.setupPivot(e.newPivotId);break;case"UPDATE_PIVOT":this.setupPivot(e.pivotId,{recreate:!0});break;case"DELETE_SHEET":case"UPDATE_CELL":this.unusedPivots=void 0;break;case"UNDO":case"REDO":{this.unusedPivots=void 0;const t=e.commands.filter(IV);for(const e of t){const t=e.pivotId;this.getters.isExistingPivot(t)&&this.setupPivot(t,{recreate:!0})}break}case"UPDATE_LOCALE":!function(){for(const e in ZN)ZN[e].set.clear(),ZN[e].values={}}()}}getPivotIdFromPosition(e){const t=this.getters.getCorrespondingFormulaCell(e);if(t&&t.isFormula){const o=this.getFirstPivotFunction(e.sheetId,t.compiledFormula.tokens);if(o){const e=o.args[0]?.toString();return e&&this.getters.getPivotId(e)}}}isSpillPivotFormula(e){const t=this.getters.getCorrespondingFormulaCell(e);if(t&&t.isFormula){const o=this.getFirstPivotFunction(e.sheetId,t.compiledFormula.tokens);return"PIVOT"===o?.functionName}return!1}getFirstPivotFunction(e,t){const o=FN(t);if(!o)return;const{functionName:s,args:i}=o;return{functionName:s,args:i.map((t=>{if("EMPTY"===t.type)return;if("STRING"===t.type||"BOOLEAN"===t.type||"NUMBER"===t.type)return t.value;const o=av(t);return this.getters.evaluateFormula(e,o)}))}}getPivotCellFromPosition(e){const t=this.getters.getCorrespondingFormulaCell(e);if(!t||!t.isFormula||0===PN(t.compiledFormula.tokens))return LN;const o=this.getters.getCellPosition(t.id),s=this.getters.getFirstPivotFunction(e.sheetId,t.compiledFormula.tokens);if(!s)return LN;const{functionName:i,args:n}=s,r=n[0];if(!r)return LN;const a=this.getters.getPivotId(r.toString());if(!a)return LN;const l=this.getPivot(a);if(!l.isValid())return LN;if("PIVOT"===i&&!t.content.replaceAll(" ","").toUpperCase().startsWith("=PIVOT"))return LN;if("PIVOT"===i){const t=jl(n[2]),s=void 0===t||wi(t),i=jl(n[3]),r=jl(n[5]),a=void 0===r||wi(r),c={displayColumnHeaders:void 0===i||wi(i),displayTotals:s,displayMeasuresRow:a},h=l.getCollapsedTableStructure().getPivotCells(c),d=e.col-o.col,u=e.row-o.row;return h[d][u]}try{if("PIVOT.HEADER"===i&&"measure"===n.at(-2)){return{type:"MEASURE_HEADER",domain:l.parseArgsToPivotDomain(n.slice(1,-2).map((e=>({value:e})))),measure:n.at(-1)?.toString()||""}}if("PIVOT.HEADER"===i){const e=l.parseArgsToPivotDomain(n.slice(1).map((e=>({value:e}))));return{type:"HEADER",domain:e,dimension:RO(l,e).colDomain.length?"COL":"ROW"}}const[e,...t]=n.slice(1);return{type:"VALUE",domain:l.parseArgsToPivotDomain(t.map((e=>({value:e})))),measure:e?.toString()||""}}catch(e){return LN}}generateNewCalculatedMeasureName(e){const t=e.map((e=>e.fieldName));return kt(Vo("Calculated measure 1"),t,{compute:(e,t)=>Vo("Calculated measure %s",t)})}getPivot(e){if(!this.getters.isExistingPivot(e))throw new Error(`pivot ${e} not found`);return this.pivots[e]}isPivotUnused(e){return this._getUnusedPivots().includes(e)}refreshPivot(e){this.getters.getPivot(e).init({reload:!0})}setupPivot(e,{recreate:t}={recreate:!1}){const o=this.getters.getPivotCoreDefinition(e);if(e in this.pivots)t&&this.pivots[e].onDefinitionChange(o);else{const t=yV(YN.get(o.type).ui);this.pivots[e]=new t(this.custom,{definition:o,getters:this.getters})}}_getUnusedPivots(){if(void 0!==this.unusedPivots)return this.unusedPivots;const e=new Set(this.getters.getPivotIds());for(const t of this.getters.getSheetIds())for(const o in this.getters.getCells(t)){const t=this.getters.getCellPosition(o),s=this.getPivotIdFromPosition(t);if(s&&(e.delete(s),!e.size))return this.unusedPivots=[],[]}return this.unusedPivots=[...e],this.unusedPivots}}).add("cell_icon",class extends Mk{static getters=["doesCellHaveGridIcon","getCellIcons","getCellIconRect"];cellIconsCache={};handle(e){"SET_VIEWPORT_OFFSET"!==e.type&&(this.cellIconsCache={})}getCellIcons(e){return this.cellIconsCache[e.sheetId]||(this.cellIconsCache[e.sheetId]={}),this.cellIconsCache[e.sheetId][e.col]||(this.cellIconsCache[e.sheetId][e.col]={}),this.cellIconsCache[e.sheetId][e.col][e.row]||(this.cellIconsCache[e.sheetId][e.col][e.row]=this.computeCellIcons(e)),this.cellIconsCache[e.sheetId][e.col][e.row]}getCellIconRect(e,t){const o=e.position,s=this.getters.getCell(o);return{x:this.getIconHorizontalPosition(t,e.horizontalAlign,e),y:this.getters.computeTextYCoordinate(t,e.size,s?.style?.verticalAlign),width:e.size,height:e.size}}getIconHorizontalPosition(e,t,o){const s=e.x,i=e.x+e.width;switch(t){case"right":return i-o.margin-o.size;case"left":return s+o.margin;default:const e=Math.floor((i-s-o.size)/2);return i-o.size-e}}computeCellIcons(e){const t={left:void 0,right:void 0,center:void 0},o=bV.getAll();for(const s of o){const o=s(this.getters,e);o&&(!t[o.horizontalAlign]||o.priority>t[o.horizontalAlign].priority)&&(t[o.horizontalAlign]=o)}if(t.center&&(t.left||t.right)){const e=Math.max(t.left?.priority||0,t.right?.priority||0);t.center.priority<e?t.center=void 0:(t.left=void 0,t.right=void 0)}return Object.values(t).filter(lt)}doesCellHaveGridIcon(e){return Boolean(this.getCellIcons(e).length)}});lE.add("dataValidation",{displayAllOnInitialContent:!0,getProposals(e,t){if(Vt(t))return[];if(!this.composer.currentEditedCell)return[];const o=this.composer.currentEditedCell,s=this.getters.getValidationRuleForCell(o);if(!s||"isValueInList"!==s.criterion.type&&"isValueInRange"!==s.criterion.type)return[];const i=this.composer.currentEditedCell.sheetId,n="isValueInRange"===s.criterion.type?Array.from(new Set(this.getters.getDataValidationRangeValues(i,s.criterion))):s.criterion.values;if(!("chip"===s.criterion.displayStyle))return n.map((e=>({text:e})));const r=s.criterion.colors;return n.map((e=>{const t=r?.[e];return{text:e,htmlContent:[{value:e,color:t?so(t):void 0,backgroundColor:t||F,classes:["badge rounded-pill fs-6 fw-normal w-100 mt-1 text-start"]}]}}))},selectProposal(e,t){this.composer.setCurrentContent(t),this.composer.stopEdition()}}),lE.add("functions",{sequence:100,autoSelectFirstProposal:!0,maxDisplayedProposals:10,getProposals(e){if("SYMBOL"!==e.type)return[];const t=e.value;if(!Vt(this.composer.currentContent))return[];const o=Object.entries(CS.content).filter((([e,{hidden:t}])=>!t)).map((([e,{description:o}])=>({text:e,description:o,htmlContent:fN(t,e,E,"o-semi-bold")}))).sort(((e,t)=>e.text.length-t.text.length||e.text.localeCompare(t.text)));return o},selectProposal(e,t){let o=e.end,s=e.end;["SYMBOL","FUNCTION"].includes(e.type)&&(o=e.start);const i=this.composer.currentTokens;t+="(";const n=i.map((e=>e.start)).indexOf(e.start);if(n+1<i.length){const e=i[n+1];"LEFT_PAREN"===e?.type&&s++}this.composer.changeComposerCursorSelection(o,s),this.composer.replaceComposerCursorSelection(t)}}),lE.add("pivot_ids",{sequence:50,autoSelectFirstProposal:!0,getProposals(e){const t=e.functionContext;if(!t||!["PIVOT.VALUE","PIVOT.HEADER","PIVOT"].includes(t.parent.toUpperCase())||0!==t.argPosition)return;const o=this.getters.getPivotIds();return o.includes(e.value)?void 0:o.map((e=>{const t=this.getters.getPivotCoreDefinition(e),o=`${this.getters.getPivotFormulaId(e)}`;return{text:o,description:t.name,htmlContent:[{value:o,color:mE.NUMBER}],fuzzySearchKey:o+t.name,alwaysExpanded:!0}})).filter(lt)},selectProposal:_N}),lE.add("pivot_measures",{sequence:50,autoSelectFirstProposal:!0,getProposals(e){const t=e.functionContext;if("PIVOT.VALUE"!==t?.parent.toUpperCase()||1!==t.argPosition)return[];const o=ON(e),s=this.getters.getPivotId(o);if(!s||!this.getters.isExistingPivot(s))return[];const i=this.getters.getPivot(s);return i.init(),i.isValid()?i.definition.measures.map((e=>{if("__count"===e.fieldName){const e='"__count"';return{text:e,description:Vo("Count"),htmlContent:[{value:e,color:mE.STRING}],fuzzySearchKey:Vo("Count")+e}}return function(e){const t=`"${e.id}"`,o=e.displayName+e.fieldName+t;return{text:t,description:e.displayName,htmlContent:[{value:t,color:mE.STRING}],fuzzySearchKey:o}}(e)})).filter(lt):[]},selectProposal:DN}),lE.add("pivot_group_fields",{sequence:50,autoSelectFirstProposal:!0,getProposals(e){const t=e.functionContext;if(!t||!function(e){const t=e.functionContext;return"PIVOT.VALUE"===t?.parent.toUpperCase()&&t.argPosition>=2&&t.argPosition%2==0}(e)&&!function(e){const t=e.functionContext;return"PIVOT.HEADER"===t?.parent.toUpperCase()&&t.argPosition>=1&&t.argPosition%2==1}(e))return;const o=ON(e),s=this.getters.getPivotId(o);if(!s||!this.getters.isExistingPivot(s))return;const i=this.getters.getPivot(s);i.init();const n=i.getFields(),{columns:r,rows:a}=i.definition;let l=t.args;"PIVOT.VALUE"===t?.parent.toUpperCase()?(l=l.filter(((e,t)=>t%2==0)),l=l.slice(1,t.argPosition)):l=l.filter(((e,t)=>t%2==1));const c=l.map((e=>e?.value)).filter(lt),h=r.map((e=>e.nameWithGranularity)),d=a.map((e=>e.nameWithGranularity)),u=[];let g=["ARG_SEPARATOR","SPACE"].includes(e.type)?c.at(-1):c.at(-2);const p=wk.get(i.type);if(p&&g?.startsWith("#")&&(g=g.slice(1)),void 0===g&&(u.push(h[0]),u.push(d[0])),d.includes(g)){const e=d[d.indexOf(g)+1];u.push(e),u.push(h[0])}if(h.includes(g)){const e=h[h.indexOf(g)+1];u.push(e)}const m=u.filter(lt);return m.map((e=>{const[t,o]=e.split(":"),s=n[t];return s?AN(s,o):void 0})).concat(m.map((e=>{if(!p)return;const t=e.split(":")[0],o=n[t];if(!o)return;const s=`"#${e}"`;return{text:s,description:Vo("%s (positional)",o.string)+(o.help?` (${o.help})`:""),htmlContent:[{value:s,color:mE.STRING}],fuzzySearchKey:o.string+s}}))).filter(lt)},selectProposal:DN}),lE.add("pivot_group_values",{sequence:50,autoSelectFirstProposal:!0,getProposals(e){const t=e.functionContext;if(!t||!e||!function(e){const t=e.functionContext;return"PIVOT.VALUE"===t?.parent.toUpperCase()&&t.argPosition>=2&&t.argPosition%2==1}(e)&&!function(e){const t=e.functionContext;return"PIVOT.HEADER"===t?.parent.toUpperCase()&&t.argPosition>=1&&t.argPosition%2==0}(e))return;const o=ON(e),s=this.getters.getPivotId(o);if(!s||!this.getters.isExistingPivot(s))return;const i=this.getters.getPivot(s);if(!i.isValid())return;const n=t.argPosition,r=e.functionContext?.args[n-1]?.value;if(!r)return;let a;try{a=i.definition.getDimension(r)}catch(e){return}return"month_number"===a.granularity?Object.values(fn).map(((e,t)=>({text:`${t+1}`,fuzzySearchKey:e.toString(),description:e.toString(),htmlContent:[{value:`${t+1}`,color:mE.NUMBER}]}))):"quarter_number"===a.granularity?[1,2,3,4].map((e=>({text:`${e}`,fuzzySearchKey:`${e}`,description:Vo("Quarter %s",e),htmlContent:[{value:`${e}`,color:mE.NUMBER}]}))):"day_of_month"===a.granularity?je(1,32).map((e=>({text:`${e}`,fuzzySearchKey:`${e}`,description:"",htmlContent:[{value:`${e}`,color:mE.NUMBER}]}))):"iso_week_number"===a.granularity?je(0,54).map((e=>({text:`${e}`,fuzzySearchKey:`${e}`,description:"",htmlContent:[{value:`${e}`,color:mE.NUMBER}]}))):"day_of_week"===a.granularity?je(1,8).map((e=>({text:`${e}`,fuzzySearchKey:`${e}`,description:"",htmlContent:[{value:`${e}`,color:mE.NUMBER}]}))):"hour_number"===a.granularity?je(0,24).map((e=>({text:`${e}`,fuzzySearchKey:`${e}`,description:"",htmlContent:[{value:`${e}`,color:mE.NUMBER}]}))):"minute_number"===a.granularity?je(0,60).map((e=>({text:`${e}`,fuzzySearchKey:`${e}`,description:"",htmlContent:[{value:`${e}`,color:mE.NUMBER}]}))):"second_number"===a.granularity?je(0,60).map((e=>({text:`${e}`,fuzzySearchKey:`${e}`,description:"",htmlContent:[{value:`${e}`,color:mE.NUMBER}]}))):i.getPossibleFieldValues(a).map((({value:e,label:t})=>{const o="string"==typeof e,s=o?`"${e}"`:e.toString(),i=t===e?"":t;return{text:s,description:i,htmlContent:[{value:s,color:o?mE.STRING:mE.NUMBER}],fuzzySearchKey:s+i}}))},selectProposal:DN}),lE.add("sheet_names",{sequence:150,autoSelectFirstProposal:!0,getProposals(e){return"SYMBOL"===e.type||"UNKNOWN"===e.type&&e.value.startsWith("'")?this.getters.getSheetIds().map((e=>{const t=We(this.getters.getSheetName(e));return{text:t,fuzzySearchKey:t.startsWith("'")?t:"'"+t}})):[]},selectProposal(e,t){const o=e.start,s=e.end;this.composer.changeComposerCursorSelection(o,s),this.composer.replaceComposerCursorSelection(t+"!")}});const SL=new n;SL.add("link",{condition:(e,t)=>!!t.getEvaluatedCell(e).link,execute:(e,t,o)=>Wo(t.model.getters.getEvaluatedCell(e).link,t,o),title:(e,t)=>{const o=t.getEvaluatedCell(e).link;return o?o.isExternal?Vo("Go to url: %(url)s",{url:o.url}):Vo("Go to %(label)s",{label:o.label}):""},sequence:5});const CL=(new n).add("ADD_COLUMNS_ROWS",(function(e){const t=[];let o=e.base;"after"===e.position&&o++;for(let s=0;s<e.quantity;s++)t.push(s+o);return[{type:"REMOVE_COLUMNS_ROWS",dimension:e.dimension,elements:t,sheetId:e.sheetId,sheetName:e.sheetName}]})).add("REMOVE_COLUMNS_ROWS",(function(e){const t=[],o=[...e.elements].sort(((e,t)=>e-t));for(const s of Ye(o)){const o=0===s[0]?0:s[0]-1,i=0===s[0]?"before":"after";t.push({type:"ADD_COLUMNS_ROWS",dimension:e.dimension,quantity:s.length,base:o,sheetId:e.sheetId,sheetName:e.sheetName,position:i})}return t})).add("ADD_MERGE",(function(e){return[{type:"REMOVE_MERGE",sheetId:e.sheetId,target:e.target}]})).add("REMOVE_MERGE",(function(e){return[{type:"ADD_MERGE",sheetId:e.sheetId,target:e.target}]})).add("CREATE_SHEET",(function(e){return[{type:"DELETE_SHEET",sheetId:e.sheetId,sheetName:e.name}]})).add("DELETE_SHEET",(function(e){return[{type:"CREATE_SHEET",sheetId:e.sheetId,position:1,name:e.sheetName}]})).add("DUPLICATE_SHEET",(function(e){return[{type:"DELETE_SHEET",sheetId:e.sheetIdTo,sheetName:""}]})).add("CREATE_FIGURE",(function(e){return[{type:"DELETE_FIGURE",figureId:e.figureId,sheetId:e.sheetId}]})).add("CREATE_CHART",(function(e){return[{type:"DELETE_FIGURE",figureId:e.figureId,sheetId:e.sheetId}]})).add("HIDE_COLUMNS_ROWS",(function(e){return[{type:"UNHIDE_COLUMNS_ROWS",sheetId:e.sheetId,dimension:e.dimension,elements:e.elements}]})).add("UNHIDE_COLUMNS_ROWS",(function(e){return[{type:"HIDE_COLUMNS_ROWS",sheetId:e.sheetId,dimension:e.dimension,elements:e.elements}]})).add("CREATE_TABLE_STYLE",(function(e){return[{type:"REMOVE_TABLE_STYLE",tableStyleId:e.tableStyleId}]})).add("ADD_PIVOT",(function(e){return[{type:"REMOVE_PIVOT",pivotId:e.pivotId}]}));for(const e of Ns.values())CL.contains(e)||CL.add(e,yL);function yL(e){return[e]}const wL=new n;wL.add("format_number_automatic",{...nF,id:"format_number_automatic",sequence:10}).add("format_number_plain_text",{...rF,id:"format_number_plain_text",sequence:15,separator:!0}).add("format_number_number",{...aF,id:"format_number_number",sequence:20}).add("format_number_percent",{...cF,id:"format_number_percent",sequence:30,separator:!0}).add("format_number_currency",{...hF,id:"format_number_currency",sequence:40}).add("format_number_accounting",{...uF,id:"format_number_accounting",sequence:45}).add("format_number_currency_rounded",{...dF,id:"format_number_currency_rounded",sequence:50}).add("format_custom_currency",{...pF,id:"format_custom_currency",sequence:60,separator:!0}).add("format_number_date",{...mF,id:"format_number_date",sequence:70}).add("format_number_time",{...fF,id:"format_number_time",sequence:80}).add("format_number_date_time",{...vF,id:"format_number_date_time",sequence:90}).add("format_number_duration",{...bF,id:"format_number_duration",sequence:100,separator:!0}).add("more_formats",{...yF,id:"more_formats",sequence:120});const IL=xt((e=>Rn(e)?"date":e.includes("[$")?"currency":"number")),xL={name:Vo("More formats"),icon:"o-spreadsheet-Icon.NUMBER_FORMATS",children:[e=>{const t=function(e){const t=new Set(wL.getAll().map((t=>"function"==typeof t.format?t.format(e):t.format))),o=new Map;for(const s of e.model.getters.getSheetIds()){const i=e.model.getters.getEvaluatedCells(s);for(const e in i){const s=i[e];if(s.format&&!o.has(s.format)&&!t.has(s.format)){const e=IL(s.format);"date"!==e&&"currency"!==e||o.set(s.format,iF({descriptionValue:"currency"===e?1e3:gF,format:s.format,name:s.format}))}}}return[...o.values()]}(e).map((e=>({...e,sequence:110})));return t.length>0&&(t[t.length-1].separator=!0),o([...wL.getAll(),...t])}]};const EL=new hR;EL.add("file",{name:Vo("File"),sequence:10}).addChild("settings",["file"],{name:Vo("Settings"),sequence:200,execute:e=>e.openSidePanel("Settings"),isEnabled:e=>!e.isSmall,icon:"o-spreadsheet-Icon.COG"}).add("edit",{name:Vo("Edit"),sequence:20}).addChild("undo",["edit"],{...y_,sequence:10}).addChild("redo",["edit"],{...w_,sequence:20,separator:!0}).addChild("copy",["edit"],{...I_,sequence:30}).addChild("cut",["edit"],{...x_,sequence:40}).addChild("paste",["edit"],{...E_,sequence:50}).addChild("paste_special",["edit"],{...R_,sequence:60,separator:!0}).addChild("paste_special_value",["edit","paste_special"],{...T_,sequence:10}).addChild("paste_special_format",["edit","paste_special"],{...A_,sequence:20}).addChild("edit_table",["edit"],{...B_,isVisible:AD,sequence:60}).addChild("find_and_replace",["edit"],{...D_,sequence:65,separator:!0}).addChild("delete",["edit"],{name:Vo("Delete"),icon:"o-spreadsheet-Icon.TRASH",sequence:70}).addChild("edit_delete_cell_values",["edit","delete"],{...__,sequence:10}).addChild("edit_delete_row",["edit","delete"],{...O_,sequence:20}).addChild("edit_delete_column",["edit","delete"],{...M_,sequence:30}).addChild("edit_delete_cell_shift_up",["edit","delete"],{...L_,sequence:40}).addChild("edit_delete_cell_shift_left",["edit","delete"],{...H_,sequence:50}).addChild("edit_unhide_columns",["edit"],{...HD,sequence:80}).addChild("edit_unhide_rows",["edit"],{...zD,sequence:80}).add("view",{name:Vo("View"),sequence:30}).addChild("unfreeze_panes",["view"],{...$D,sequence:4}).addChild("freeze_panes",["view"],{...GD,sequence:5}).addChild("unfreeze_rows",["view","freeze_panes"],{...WD,sequence:5}).addChild("freeze_first_row",["view","freeze_panes"],{...qD,sequence:10}).addChild("freeze_second_row",["view","freeze_panes"],{...ZD,sequence:15}).addChild("freeze_current_row",["view","freeze_panes"],{...jD,sequence:20,separator:!0}).addChild("unfreeze_columns",["view","freeze_panes"],{...YD,sequence:25}).addChild("freeze_first_col",["view","freeze_panes"],{...XD,sequence:30}).addChild("freeze_second_col",["view","freeze_panes"],{...KD,sequence:35}).addChild("freeze_current_col",["view","freeze_panes"],{...JD,sequence:40}).addChild("group_headers",["view"],{name:Vo("Group"),sequence:15,separator:!0,icon:"o-spreadsheet-Icon.PLUS_IN_BOX",isVisible:_D}).addChild("group_columns",["view","group_headers"],{...o_,sequence:5}).addChild("ungroup_columns",["view","group_headers"],{...i_,isVisible:e=>l_(e,"COL"),sequence:10}).addChild("group_rows",["view","group_headers"],{...s_,sequence:15}).addChild("ungroup_rows",["view","group_headers"],{...n_,isVisible:e=>l_(e,"ROW"),sequence:20}).addChild("show",["view"],{name:Vo("Show"),sequence:1,icon:"o-spreadsheet-Icon.SHOW"}).addChild("view_gridlines",["view","show"],{...QD,sequence:5}).addChild("view_formulas",["view","show"],{...t_,sequence:10}).addChild("view_irregularity_map",["view"],{...e_,sequence:40,separator:!0}).add("insert",{name:Vo("Insert"),sequence:40}).addChild("insert_row",["insert"],{...W_,sequence:10}).addChild("insert_row_before",["insert","insert_row"],{...Z_,sequence:10}).addChild("insert_row_after",["insert","insert_row"],{...X_,sequence:20}).addChild("insert_column",["insert"],{...K_,sequence:20}).addChild("insert_column_before",["insert","insert_column"],{...Q_,sequence:10}).addChild("insert_column_after",["insert","insert_column"],{...oO,sequence:20}).addChild("insert_cell",["insert"],{...sO,sequence:30}).addChild("insert_cell_down",["insert","insert_cell"],{...iO,name:Vo("Shift down"),sequence:10}).addChild("insert_cell_right",["insert","insert_cell"],{...nO,name:Vo("Shift right"),sequence:20}).addChild("insert_sheet",["insert"],{...CO,sequence:40,separator:!0}).addChild("insert_chart",["insert"],{...rO,sequence:50}).addChild("insert_pivot",["insert"],{...aO,sequence:52}).addChild("insert_image",["insert"],{...lO,sequence:55}).addChild("insert_table",["insert"],{...cO,sequence:57}).addChild("insert_function",["insert"],{...hO,sequence:60}).addChild("insert_function_sum",["insert","insert_function"],{...dO,sequence:0}).addChild("insert_function_average",["insert","insert_function"],{...uO,sequence:10}).addChild("insert_function_count",["insert","insert_function"],{...gO,sequence:20}).addChild("insert_function_max",["insert","insert_function"],{...pO,sequence:30}).addChild("insert_function_min",["insert","insert_function"],{...mO,sequence:40,separator:!0}).addChild("categorie_function_all",["insert","insert_function"],{...fO,sequence:50}).addChild("categories_function_list",["insert","insert_function"],(()=>{const e=CS.content;return[...new Set(CS.getAll().filter((e=>!e.hidden)).map((e=>e.category)))].filter(lt).sort().map(((t,o)=>{const s=Object.keys(e).filter((o=>e[o].category===t&&!e[o].hidden));return{name:t,children:yO(s)}}))})).addChild("insert_link",["insert"],{...vO,separator:!0,sequence:70}).addChild("insert_checkbox",["insert"],{...bO,sequence:80}).addChild("insert_dropdown",["insert"],{...SO,separator:!0,sequence:90}).add("format",{name:Vo("Format"),sequence:50}).addChild("format_number",["format"],{...xL,name:Vo("Number"),sequence:10,separator:!0}).addChild("format_bold",["format"],{...PF,sequence:20}).addChild("format_italic",["format"],{...MF,sequence:30}).addChild("format_underline",["format"],{...NF,sequence:40}).addChild("format_strikethrough",["format"],{...kF,sequence:50,separator:!0}).addChild("format_font_size",["format"],{...VF,sequence:60,separator:!0}).addChild("format_alignment",["format"],{...LF,sequence:70}).addChild("format_alignment_left",["format","format_alignment"],{...UF,sequence:10}).addChild("format_alignment_center",["format","format_alignment"],{...BF,sequence:20}).addChild("format_alignment_right",["format","format_alignment"],{...zF,sequence:30,separator:!0}).addChild("format_alignment_top",["format","format_alignment"],{...GF,sequence:40}).addChild("format_alignment_middle",["format","format_alignment"],{...WF,sequence:50}).addChild("format_alignment_bottom",["format","format_alignment"],{...qF,sequence:60,separator:!0}).addChild("format_wrapping",["format"],{...ZF,sequence:80,separator:!0}).addChild("format_wrapping_overflow",["format","format_wrapping"],{...YF,sequence:10}).addChild("format_wrapping_wrap",["format","format_wrapping"],{...XF,sequence:20}).addChild("format_wrapping_clip",["format","format_wrapping"],{...KF,sequence:30}).addChild("format_cf",["format"],{...JF,sequence:90,separator:!0}).addChild("format_clearFormat",["format"],{...QF,sequence:100,separator:!0}).add("data",{name:Vo("Data"),sequence:60}).addChild("sort_range",["data"],{...ZO,sequence:10,separator:!0}).addChild("sort_ascending",["data","sort_range"],{...jO,sequence:10}).addChild("sort_descending",["data","sort_range"],{...JO,sequence:20}).addChild("data_cleanup",["data"],{...YO,sequence:15}).addChild("remove_duplicates",["data","data_cleanup"],{...XO,sequence:10}).addChild("trim_whitespace",["data","data_cleanup"],{...KO,sequence:20}).addChild("split_to_columns",["data"],{...tF,sequence:20}).addChild("data_validation",["data"],{name:Vo("Data Validation"),execute:e=>{e.openSidePanel("DataValidation")},isEnabled:e=>!e.isSmall,icon:"o-spreadsheet-Icon.DATA_VALIDATION",sequence:30,separator:!0}).addChild("add_remove_data_filter",["data"],{...QO,sequence:40,separator:!0}).addChild("data_sources_data",["data"],(e=>e.model.getters.getPivotIds().map(((t,o)=>{const s={get highlights(){return gN(e.model.getters,t)}};return{id:`item_pivot_${e.model.getters.getPivotFormulaId(t)}`,name:e.model.getters.getPivotDisplayName(t),sequence:50+o,isReadonlyAllowed:!0,execute:e=>e.openSidePanel("PivotSidePanel",{pivotId:t}),isEnabled:e=>!e.isSmall,onStartHover:e=>e.getStore(hE).register(s),onStopHover:e=>e.getStore(hE).unRegister(s),icon:"o-spreadsheet-Icon.PIVOT",separator:o===e.model.getters.getPivotIds().length-1,secondaryIcon:e=>e.model.getters.isPivotUnused(t)?"o-spreadsheet-Icon.UNUSED_PIVOT_WARNING":void 0}})))).addChild("reinsert_dynamic_pivot",["data"],oF).addChild("reinsert_static_pivot",["data"],sF);const RL=new class extends n{mapping={};uuidGenerator=new Wa;replace(e,t){const o={...t,id:this.uuidGenerator.uuidv4()};return super.replace(e,o)}getAllOrdered(){return this.getAll().sort(((e,t)=>e.sequence-t.sequence))}};class TL{listeners=[];async sendMessage(e){for(const{callback:t}of this.listeners)t(e)}onNewMessage(e,t){this.listeners.push({id:e,callback:t})}leave(e){this.listeners=this.listeners.filter((t=>t.id!==e))}}class AL{fileStore;constructor(e){this.fileStore=e}async requestImage(){const e=await this.userImageUpload(),t=await this.fileStore.upload(e);return{path:t,size:await this.getImageOriginalSize(t),mimetype:e.type}}async uploadFile(e){const t=await this.fileStore.upload(e);return{path:t,size:await this.getImageOriginalSize(t),mimetype:e.type}}userImageUpload(){return new Promise(((e,t)=>{const o=document.createElement("input");o.setAttribute("type","file"),o.setAttribute("accept","image/*"),o.addEventListener("change",(async()=>{null===o.files||1!==o.files.length?t():e(o.files[0])})),o.click()}))}getImageOriginalSize(e){return new Promise(((t,o)=>{const s=new Image;s.addEventListener("load",(()=>{const e={width:s.width,height:s.height};t(e)})),s.addEventListener("error",o),s.src=e}))}}const DL=[{transform:"scale(0)"},{transform:"scale(0.8)",offset:.33},{opacity:"0",transform:"scale(1)",offset:1}];mh`
1874
+ `;class xk extends t.Component{static template="o_spreadsheet.PivotHTMLRenderer";static components={Checkbox:YE};static props={pivotId:String,onCellClicked:Function};pivot=this.env.model.getters.getPivot(this.props.pivotId);data={columns:[],rows:[],values:[]};state=t.useState({showMissingValuesOnly:!1});setup(){const e=this.pivot.getExpandedTableStructure(),t=this.env.model.getters.getPivotFormulaId(this.props.pivotId);this.data={columns:this._buildColHeaders(t,e),rows:this._buildRowHeaders(t,e),values:this._buildValues(t,e)}}get tracker(){return this.env.model.getters.getPivotPresenceTracker(this.props.pivotId)}getTableData(){if(!this.state.showMissingValuesOnly)return this.data;const e=this.getColumnsIndexes(),t=this.getRowsIndexes();return{columns:this.buildColumnsMissing(e),rows:this.buildRowsMissing(t),values:this.buildValuesMissing(e,t)}}addRecursiveRow(e){const t=this.pivot.getExpandedTableStructure().rows,o=[...t[e].values];if(o.length<=1)return[e];o.pop();const s=t.findIndex((e=>JSON.stringify(e.values)===JSON.stringify(o)));return[e].concat(this.addRecursiveRow(s))}buildColumnsMissing(e){const t=[];for(const e of this.data.columns){const o=[];for(const t in e)for(let s=0;s<e[t].span;s++)o.push(parseInt(t,10));t.push(o)}for(let o=t[t.length-1].length;o>=0;o--)if(!e.includes(o))for(const e of t)e.splice(o,1);const o=[];for(const e in t){const s=[];let i,n=1;for(let o=0;o<t[e].length;o++)i!==t[e][o]?(void 0!==i&&s.push(Object.assign({},this.data.columns[e][i],{span:n})),i=t[e][o],n=1):n++;void 0!==i&&s.push(Object.assign({},this.data.columns[e][i],{span:n})),o.push(s)}return o}buildRowsMissing(e){return e.map((e=>this.data.rows[e]))}buildValuesMissing(e,t){const o=e.map((()=>[]));for(const s of t)for(const t in e)o[t].push(this.data.values[e[t]][s]);return o}getColumnsIndexes(){const e=new Set;for(let t=0;t<this.data.columns.length;t++){const o=[];for(let e=0;e<this.data.columns[t].length;e++)for(let s=0;s<this.data.columns[t][e].span;s++)o.push(this.data.columns[t][e]);for(let t=0;t<o.length;t++)o[t].isMissing&&e.add(t)}for(let t=0;t<this.data.columns[this.data.columns.length-1].length;t++){this.data.values[t].find((e=>e.isMissing))&&e.add(t)}return Array.from(e).sort(((e,t)=>e-t))}getRowsIndexes(){const e=new Set;for(let t=0;t<this.data.rows.length;t++){this.data.rows[t].isMissing&&e.add(t);for(const o of this.data.values)o[t].isMissing&&this.addRecursiveRow(t).forEach((t=>e.add(t)))}return Array.from(e).sort(((e,t)=>e-t))}_buildColHeaders(e,t){const o=[];for(const s of t.columns){const t=[];for(const o of s){const s=[];for(let e=0;e<o.fields.length;e++)s.push({value:o.fields[e]},{value:o.values[e]});const i=this.pivot.parseArgsToPivotDomain(s),n=this.env.model.getters.getLocale();if("measure"===i.at(-1)?.field){const{value:s,format:r}=this.pivot.getPivotMeasureValue(Si(i.at(-1).value),i);t.push({formula:`=PIVOT.HEADER(${Nc(e,i).join(",")})`,value:bn(s,{format:r,locale:n}),span:o.width,isMissing:!this.tracker?.isHeaderPresent(i)})}else{const{value:s,format:r}=this.pivot.getPivotHeaderValueAndFormat(i);t.push({formula:`=PIVOT.HEADER(${Nc(e,i).join(",")})`,value:bn(s,{format:r,locale:n}),span:o.width,isMissing:!this.tracker?.isHeaderPresent(i)})}}o.push(t)}const s=o[o.length-1];return o[o.length-1]=s.map((e=>(e.isMissing||(e.style="color: #756f6f;"),e))),o}_buildRowHeaders(e,t){const o=[];for(const s of t.rows){const t=[];for(let e=0;e<s.fields.length;e++)t.push({value:s.fields[e]},{value:s.values[e]});const i=this.pivot.parseArgsToPivotDomain(t),{value:n,format:r}=this.pivot.getPivotHeaderValueAndFormat(i),a=this.env.model.getters.getLocale(),l={formula:`=PIVOT.HEADER(${Nc(e,i).join(",")})`,value:bn(n,{format:r,locale:a}),isMissing:!this.tracker?.isHeaderPresent(i)};s.indent>1&&(l.style=`padding-left: ${s.indent-10}px`),o.push(l)}return o}_buildValues(e,t){const o=[];for(const s of t.columns.at(-1)||[]){const i=[],n=Si(s.values[s.values.length-1]);for(const o of t.rows){const t=[];for(let e=0;e<o.fields.length;e++)t.push({value:o.fields[e]},{value:o.values[e]});for(let e=0;e<s.fields.length-1;e++)t.push({value:s.fields[e]},{value:s.values[e]});const r=this.pivot.parseArgsToPivotDomain(t),{value:a,format:l}=this.pivot.getPivotCellValueAndFormat(n,r),c=this.env.model.getters.getLocale();i.push({formula:`=PIVOT.VALUE(${Nc(e,r,n).join(",")})`,value:bn(a,{format:l,locale:c}),isMissing:!this.tracker?.isValuePresent(n,r)})}o.push(i)}return o}}class Ek{static getters=[];history;constructor(e){this.history=Object.assign(Object.create(e),{update:e.addChange.bind(e,this),selectCell:()=>{}})}exportForExcel(e){}allowDispatch(e){return"Success"}beforeHandle(e){}handle(e){}finalize(){}batchValidations(...e){return t=>e.map((e=>e.call(this,t))).flat()}chainValidations(...e){return t=>{for(const o of e){let e=o.call(this,t);Array.isArray(e)||(e=[e]);const s=e.filter((e=>"Success"!==e));if(s.length)return s}return"Success"}}checkValidations(e,...t){return this.batchValidations(...t)(e)}}class Rk extends Ek{getters;dispatch;canDispatch;constructor({getters:e,stateObserver:t,range:o,dispatch:s,canDispatch:i}){super(t),o.addRangeProvider(this.adaptRanges.bind(this)),this.getters=e,this.dispatch=s,this.canDispatch=i}import(e){}export(e){}adaptRanges(e,t,o){}garbageCollectExternalResources(){}}class Tk{id;format;style;sheetId;getRangeString;isFormula=!0;compiledFormula;constructor(e,t,o,s,i,n,r){this.id=e,this.format=o,this.style=s,this.sheetId=n,this.getRangeString=r;let a=0;const l=t.tokens.map((e=>{if("REFERENCE"===e.type){const e=a++;return new Ak(i,e,this.sheetId,this.getRangeString)}return e}));this.compiledFormula={...t,dependencies:i,tokens:l}}get content(){return dt(this.compiledFormula.tokens.map((e=>e.value)))}get contentWithFixedReferences(){let e=0;return dt(this.compiledFormula.tokens.map((t=>{if("REFERENCE"===t.type){const t=e++;return this.getRangeString(this.compiledFormula.dependencies[t],this.sheetId,{useBoundedReference:!0})}return t.value})))}}class Ak{ranges;rangeIndex;sheetId;getRangeString;type="REFERENCE";constructor(e,t,o,s){this.ranges=e,this.rangeIndex=t,this.sheetId=o,this.getRangeString=s}get value(){const e=this.ranges[this.rangeIndex];return this.getRangeString(e,this.sheetId)}}function Dk(e){return""===e?NaN:Number(e)}function _k(e){return Object.entries(e).map((([e,t])=>t?Ok(parseInt(e,10),t):void 0)).filter(lt).map((e=>Oo(e.left,e.top)+":"+Oo(e.right,e.bottom)))}function Ok(e,t){return{...t.zone,id:e}}class Fk{getters;providers=[];constructor(e){this.getters=e}static getters=["adaptFormulaStringDependencies","copyFormulaStringForSheet","extendRange","getRangeString","getRangeFromSheetXC","createAdaptedRanges","getRangeData","getRangeDataFromXc","getRangeDataFromZone","getRangeFromRangeData","getRangeFromZone","getRangesUnion","recomputeRanges","isRangeValid","removeRangesSheetPrefix"];allowDispatch(e){return"MOVE_RANGES"===e.type?1===e.target.length?"Success":"InvalidZones":"Success"}beforeHandle(e){}handle(e){const t=ba(e);t?.applyChange&&this.executeOnAllRanges(t.applyChange,t.sheetId,t.sheetName)}finalize(){}verifyRangeRemoved(e){return t=>{const o=e(t);return"NONE"===o.changeType||cr(o.range.zone)?o:{range:o.range,changeType:"REMOVE"}}}executeOnAllRanges(e,t,o){const s=this.verifyRangeRemoved(e);for(const e of this.providers)e(s,t,o)}addRangeProvider(e){this.providers.push(e)}createAdaptedRanges(e,t,o,s){return e.map((e=>{if(!cr(e.zone))return e;const i=e.prefixSheet?e.sheetId:s,n=ga(e),r=ua(e),a={...e.unboundedZone,left:n&&!e.unboundedZone.hasHeader?e.unboundedZone.left:e.unboundedZone.left+(e.parts[0].colFixed?0:t),right:n?e.unboundedZone.right:e.unboundedZone.right+((e.parts[1]||e.parts[0]).colFixed?0:t),top:r&&!e.unboundedZone.hasHeader?e.unboundedZone.top:e.unboundedZone.top+(e.parts[0].rowFixed?0:o),bottom:r?e.unboundedZone.bottom:e.unboundedZone.bottom+((e.parts[1]||e.parts[0]).rowFixed?0:o)};return function(e){if(hr(e.zone))return e;const t={...e.unboundedZone},o={...e.zone};let s=e.parts;if(void 0!==t.right&&t.right<t.left){const e=t.right;t.right=t.left,t.left=e,o.right=o.left,o.left=e,s=[{colFixed:s[1]?.colFixed||!1,rowFixed:s[0]?.rowFixed||!1},{colFixed:s[0]?.colFixed||!1,rowFixed:s[1]?.rowFixed||!1}]}if(void 0!==t.bottom&&t.bottom<t.top){const e=t.bottom;t.bottom=t.top,t.top=e,o.bottom=o.top,o.top=e,s=[{colFixed:s[0]?.colFixed||!1,rowFixed:s[1]?.rowFixed||!1},{colFixed:s[1]?.colFixed||!1,rowFixed:s[0]?.rowFixed||!1}]}return{unboundedZone:t,zone:o,parts:s,invalidXc:e.invalidXc,prefixSheet:e.prefixSheet,invalidSheetName:e.invalidSheetName,sheetId:e.sheetId}}(ca({...e,sheetId:i,zone:a},this.getters.getSheetSize))}))}removeRangesSheetPrefix(e,t){return t.map((t=>t.prefixSheet&&t.sheetId===e?{...t,prefixSheet:!1}:t))}extendRange(e,t,o){const s="COL"===t?e.zone.right+o:e.zone.right,i="ROW"===t?e.zone.bottom+o:e.zone.bottom,n={left:e.zone.left,top:e.zone.top,right:ga(e)?void 0:s,bottom:ua(e)?void 0:i};return ca({...e,zone:n},this.getters.getSheetSize)}getRangeFromSheetXC(e,t){if(!Xr.test(t)||!this.getters.tryGetSheet(e))return da(t);const{sheetName:o}=ta(t);return ha({xc:t,sheetId:this.getters.getSheetIdByName(o)||e,invalidSheetName:o&&!this.getters.getSheetIdByName(o)?o:void 0},this.getters.getSheetSize)}getRangeString(e,t,o={useBoundedReference:!1,useFixedReference:!1}){return e?e.invalidXc?e.invalidXc:this.getters.tryGetSheet(e.sheetId)?pa(e,t,this.getters.getSheetName,o):Js.InvalidReference:Js.InvalidReference}getRangeDataFromXc(e,t){const o=this.getters.getRangeFromSheetXC(e,t);return this.getRangeDataFromZone(o.sheetId,o.unboundedZone)}getRangeDataFromZone(e,t){return{_sheetId:e,_zone:t=this.getters.getUnboundedZone(e,t)}}getRangeData(e){return this.getRangeDataFromZone(e.sheetId,e.unboundedZone)}getRangeFromZone(e,t){return ca({sheetId:e,zone:t,parts:[{colFixed:!1,rowFixed:!1},{colFixed:!1,rowFixed:!1}],prefixSheet:!1},this.getters.getSheetSize)}recomputeRanges(e,t){const o=e.map((e=>e.unboundedZone)),s=t.map((e=>e.unboundedZone));return er(o,s).map((t=>this.getRangeFromZone(e[0].sheetId,t)))}getRangeFromRangeData(e){if(!this.getters.tryGetSheet(e._sheetId))return da(Js.InvalidReference);return ca({prefixSheet:!1,zone:e._zone,sheetId:e._sheetId,invalidSheetName:void 0,parts:[{colFixed:!1,rowFixed:!1},{colFixed:!1,rowFixed:!1}]},this.getters.getSheetSize)}isRangeValid(e){if(!e)return!1;const{xc:t,sheetName:o}=ta(e);return null!==t.match(Xr)&&(!o||void 0!==this.getters.getSheetIdByName(o))}getRangesUnion(e){const t=e.map((e=>e.unboundedZone)),o=function(...e){return{top:Math.min(...e.map((e=>e.top))),left:Math.min(...e.map((e=>e.left))),bottom:e.some((e=>void 0===e.bottom))?void 0:Math.max(...e.map((e=>e.bottom))),right:e.some((e=>void 0===e.right))?void 0:Math.max(...e.map((e=>e.right)))}}(...t);return this.getRangeFromZone(e[0].sheetId,o)}adaptFormulaStringDependencies(e,t,o){if(!t.startsWith("="))return t;const s=PS(t),i=s.dependencies.map((t=>{const s=this.getters.getRangeFromSheetXC(e,t),i=o(s);return"NONE"===i.changeType?s:i.range}));return this.getters.getFormulaString(e,s.tokens,i)}copyFormulaStringForSheet(e,t,o,s){if(!o.startsWith("="))return o;const i=PS(o),n=i.dependencies.map((o=>{const i=this.getters.getRangeFromSheetXC(e,o);return"keepSameReference"===s?i:ma(e,t,i)}));return this.getters.getFormulaString(t,i.tokens,n)}}function Pk(e,t){if(!e)return;const o=t(e);switch(o.changeType){case"NONE":return e;case"REMOVE":return;default:return o.range}}class Mk extends Ek{getters;constructor({getters:e,stateObserver:t}){super(t),this.getters=e}}const Nk=new n;Nk.add("pivots",(e=>{for(const t of e.getPivotIds()){const o=e.getPivot(t);YN.get(o.type).onIterationEndEvaluation(o)}}));const kk=CS.mapping;function Vk(e,t,o){return new Lk(e,t,o).getParameters()}class Lk{getters;computeCell;evalContext;rangeCache={};constructor(e,t,o){this.getters=t,this.computeCell=o,this.evalContext=Object.assign(Object.create(kk),e,{getters:this.getters,locale:this.getters.getLocale()})}getParameters(){return{referenceDenormalizer:this.refFn.bind(this),ensureRange:this.range.bind(this),evalContext:this.evalContext}}refFn(e,t){const o=this.getRangeError(e);if(o)return o;if(t){return{value:oa(this.getters.getSheetName(e.sheetId),dr(e.zone))}}const s={sheetId:e.sheetId,col:e.zone.left,row:e.zone.top};return this.computeCell(s)}range(e){const t=this.getRangeError(e);if(t)return[[t]];const o=e.sheetId,s=e.zone,i=vr(s,this.getters.getSheetZone(o));if(!i)return[[]];const{top:n,left:r,bottom:a,right:l}=s,c=`${o}-${n}-${r}-${a}-${l}`;if(c in this.rangeCache)return this.rangeCache[c];const h=i.bottom-i.top+1,d=i.right-i.left+1,u=new Array(d);for(let e=i.left;e<=i.right;e++){const t=e-i.left;u[t]=new Array(h);for(let s=i.top;s<=i.bottom;s++){const n=s-i.top;u[t][n]=this.computeCell({sheetId:o,col:e,row:s})}}return this.rangeCache[c]=u,u}getRangeError(e){return cr(e.zone)?e.invalidSheetName?new ei(Vo("Invalid sheet name: %s",e.invalidSheetName)):void 0:new si}}function Hk(e,t,o,s,i){Uk(e,t,o||0,s||e.length-1,i||zk)}function Uk(e,t,o,s,i){for(;s>o;){if(s-o>600){var n=s-o+1,r=t-o+1,a=Math.log(n),l=.5*Math.exp(2*a/3),c=.5*Math.sqrt(a*l*(n-l)/n)*(r-n/2<0?-1:1);Uk(e,t,Math.max(o,Math.floor(t-r*l/n+c)),Math.min(s,Math.floor(t+(n-r)*l/n+c)),i)}var h=e[t],d=o,u=s;for(Bk(e,o,t),i(e[s],h)>0&&Bk(e,o,s);d<u;){for(Bk(e,d,u),d++,u--;i(e[d],h)<0;)d++;for(;i(e[u],h)>0;)u--}0===i(e[o],h)?Bk(e,o,u):Bk(e,++u,s),u<=t&&(o=u+1),t<=u&&(s=u-1)}}function Bk(e,t,o){var s=e[t];e[t]=e[o],e[o]=s}function zk(e,t){return e<t?-1:e>t?1:0}class $k{constructor(e=9){this._maxEntries=Math.max(4,e),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()}all(){return this._all(this.data,[])}search(e){let t=this.data;const o=[];if(!eV(e,t))return o;const s=this.toBBox,i=[];for(;t;){for(let n=0;n<t.children.length;n++){const r=t.children[n],a=t.leaf?s(r):r;eV(e,a)&&(t.leaf?o.push(r):Qk(e,a)?this._all(r,o):i.push(r))}t=i.pop()}return o}collides(e){let t=this.data;if(!eV(e,t))return!1;const o=[];for(;t;){for(let s=0;s<t.children.length;s++){const i=t.children[s],n=t.leaf?this.toBBox(i):i;if(eV(e,n)){if(t.leaf||Qk(e,n))return!0;o.push(i)}}t=o.pop()}return!1}load(e){if(!e||!e.length)return this;if(e.length<this._minEntries){for(let t=0;t<e.length;t++)this.insert(e[t]);return this}let t=this._build(e.slice(),0,e.length-1,0);if(this.data.children.length)if(this.data.height===t.height)this._splitRoot(this.data,t);else{if(this.data.height<t.height){const e=this.data;this.data=t,t=e}this._insert(t,this.data.height-t.height-1,!0)}else this.data=t;return this}insert(e){return e&&this._insert(e,this.data.height-1),this}clear(){return this.data=tV([]),this}remove(e,t){if(!e)return this;let o=this.data;const s=this.toBBox(e),i=[],n=[];let r,a,l;for(;o||i.length;){if(o||(o=i.pop(),a=i[i.length-1],r=n.pop(),l=!0),o.leaf){const s=Gk(e,o.children,t);if(-1!==s)return o.children.splice(s,1),i.push(o),this._condense(i),this}l||o.leaf||!Qk(o,s)?a?(r++,o=a.children[r],l=!1):o=null:(i.push(o),n.push(r),r=0,a=o,o=o.children[0])}return this}toBBox(e){return e}compareMinX(e,t){return e.minX-t.minX}compareMinY(e,t){return e.minY-t.minY}toJSON(){return this.data}fromJSON(e){return this.data=e,this}_all(e,t){const o=[];for(;e;)e.leaf?t.push(...e.children):o.push(...e.children),e=o.pop();return t}_build(e,t,o,s){const i=o-t+1;let n,r=this._maxEntries;if(i<=r)return n=tV(e.slice(t,o+1)),Wk(n,this.toBBox),n;s||(s=Math.ceil(Math.log(i)/Math.log(r)),r=Math.ceil(i/Math.pow(r,s-1))),n=tV([]),n.leaf=!1,n.height=s;const a=Math.ceil(i/r),l=a*Math.ceil(Math.sqrt(r));oV(e,t,o,l,this.compareMinX);for(let i=t;i<=o;i+=l){const t=Math.min(i+l-1,o);oV(e,i,t,a,this.compareMinY);for(let o=i;o<=t;o+=a){const i=Math.min(o+a-1,t);n.children.push(this._build(e,o,i,s-1))}}return Wk(n,this.toBBox),n}_chooseSubtree(e,t,o,s){for(;s.push(t),!t.leaf&&s.length-1!==o;){let o,s=1/0,r=1/0;for(let a=0;a<t.children.length;a++){const l=t.children[a],c=Xk(l),h=(i=e,n=l,(Math.max(n.maxX,i.maxX)-Math.min(n.minX,i.minX))*(Math.max(n.maxY,i.maxY)-Math.min(n.minY,i.minY))-c);h<r?(r=h,s=c<s?c:s,o=l):h===r&&c<s&&(s=c,o=l)}t=o||t.children[0]}var i,n;return t}_insert(e,t,o){const s=o?e:this.toBBox(e),i=[],n=this._chooseSubtree(s,this.data,t,i);for(n.children.push(e),Zk(n,s);t>=0&&i[t].children.length>this._maxEntries;)this._split(i,t),t--;this._adjustParentBBoxes(s,i,t)}_split(e,t){const o=e[t],s=o.children.length,i=this._minEntries;this._chooseSplitAxis(o,i,s);const n=this._chooseSplitIndex(o,i,s),r=tV(o.children.splice(n,o.children.length-n));r.height=o.height,r.leaf=o.leaf,Wk(o,this.toBBox),Wk(r,this.toBBox),t?e[t-1].children.push(r):this._splitRoot(o,r)}_splitRoot(e,t){this.data=tV([e,t]),this.data.height=e.height+1,this.data.leaf=!1,Wk(this.data,this.toBBox)}_chooseSplitIndex(e,t,o){let s,i=1/0,n=1/0;for(let r=t;r<=o-t;r++){const t=qk(e,0,r,this.toBBox),a=qk(e,r,o,this.toBBox),l=Jk(t,a),c=Xk(t)+Xk(a);l<i?(i=l,s=r,n=c<n?c:n):l===i&&c<n&&(n=c,s=r)}return s||o-t}_chooseSplitAxis(e,t,o){const s=e.leaf?this.compareMinX:jk,i=e.leaf?this.compareMinY:Yk;this._allDistMargin(e,t,o,s)<this._allDistMargin(e,t,o,i)&&e.children.sort(s)}_allDistMargin(e,t,o,s){e.children.sort(s);const i=this.toBBox,n=qk(e,0,t,i),r=qk(e,o-t,o,i);let a=Kk(n)+Kk(r);for(let s=t;s<o-t;s++){const t=e.children[s];Zk(n,e.leaf?i(t):t),a+=Kk(n)}for(let s=o-t-1;s>=t;s--){const t=e.children[s];Zk(r,e.leaf?i(t):t),a+=Kk(r)}return a}_adjustParentBBoxes(e,t,o){for(let s=o;s>=0;s--)Zk(t[s],e)}_condense(e){for(let t,o=e.length-1;o>=0;o--)0===e[o].children.length?o>0?(t=e[o-1].children,t.splice(t.indexOf(e[o]),1)):this.clear():Wk(e[o],this.toBBox)}}function Gk(e,t,o){if(!o)return t.indexOf(e);for(let s=0;s<t.length;s++)if(o(e,t[s]))return s;return-1}function Wk(e,t){qk(e,0,e.children.length,t,e)}function qk(e,t,o,s,i){i||(i=tV(null)),i.minX=1/0,i.minY=1/0,i.maxX=-1/0,i.maxY=-1/0;for(let n=t;n<o;n++){const t=e.children[n];Zk(i,e.leaf?s(t):t)}return i}function Zk(e,t){return e.minX=Math.min(e.minX,t.minX),e.minY=Math.min(e.minY,t.minY),e.maxX=Math.max(e.maxX,t.maxX),e.maxY=Math.max(e.maxY,t.maxY),e}function jk(e,t){return e.minX-t.minX}function Yk(e,t){return e.minY-t.minY}function Xk(e){return(e.maxX-e.minX)*(e.maxY-e.minY)}function Kk(e){return e.maxX-e.minX+(e.maxY-e.minY)}function Jk(e,t){const o=Math.max(e.minX,t.minX),s=Math.max(e.minY,t.minY),i=Math.min(e.maxX,t.maxX),n=Math.min(e.maxY,t.maxY);return Math.max(0,i-o)*Math.max(0,n-s)}function Qk(e,t){return e.minX<=t.minX&&e.minY<=t.minY&&t.maxX<=e.maxX&&t.maxY<=e.maxY}function eV(e,t){return t.minX<=e.maxX&&t.minY<=e.maxY&&t.maxX>=e.minX&&t.maxY>=e.minY}function tV(e){return{children:e,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function oV(e,t,o,s,i){const n=[t,o];for(;n.length;){if((o=n.pop())-(t=n.pop())<=s)continue;const r=t+Math.ceil((o-t)/s/2)*s;Hk(e,r,t,o,i),n.push(t,r,r,o)}}class sV{rTrees={};constructor(e=[]){const t={};for(const o of e){const e=o.boundingBox.sheetId;t[e]||(t[e]=[]),t[e].push(o)}for(const e in t)this.rTrees[e]=new iV,this.rTrees[e].load(t[e])}insert(e){const t=e.boundingBox.sheetId;this.rTrees[t]||(this.rTrees[t]=new iV),this.rTrees[t].insert(e)}search({zone:e,sheetId:t}){return this.rTrees[t]?this.rTrees[t].search({minX:e.left,minY:e.top,maxX:e.right,maxY:e.bottom}):[]}remove(e){const t=e.boundingBox.sheetId;this.rTrees[t]&&this.rTrees[t].remove(e,this.rtreeItemComparer)}rtreeItemComparer(e,t){return e.data===t.data&&e.boundingBox.sheetId===t.boundingBox.sheetId&&e.boundingBox?.zone.left===t.boundingBox.zone.left&&e.boundingBox?.zone.top===t.boundingBox.zone.top&&e.boundingBox?.zone.right===t.boundingBox.zone.right&&e.boundingBox?.zone.bottom===t.boundingBox.zone.bottom}}class iV extends $k{toBBox({boundingBox:e}){const t=e.zone;return{minX:t.left,minY:t.top,maxX:t.right,maxY:t.bottom}}compareMinX(e,t){return e.boundingBox.zone.left-t.boundingBox.zone.left}compareMinY(e,t){return e.boundingBox.zone.top-t.boundingBox.zone.top}}class nV{createEmptyPositionSet;dependencies=new MD;rTree;constructor(e,t=[]){this.createEmptyPositionSet=e,this.rTree=new sV(t)}removeAllDependencies(e){const t=this.dependencies.get(e);if(t){for(const e of t)this.rTree.remove(e);this.dependencies.delete(e)}}addDependencies(e,t){const o=t.map((({sheetId:t,zone:o})=>({data:e,boundingBox:{zone:o,sheetId:t}})));for(const e of o)this.rTree.insert(e);const s=this.dependencies.get(e);s?s.push(...o):this.dependencies.set(e,o)}getCellsDependingOn(e){const t=this.createEmptyPositionSet(),o=Array.from(e).reverse();for(;o.length>0;){const e=o.pop(),s=e.zone,i=e.sheetId;for(let e=s.left;e<=s.right;e++)for(let o=s.top;o<=s.bottom;o++)t.add({sheetId:i,col:e,row:o});const n=this.rTree.search(e).map((e=>e.data)),r={};for(const e of n)t.has(e)||(r[e.sheetId]||(r[e.sheetId]=[]),r[e.sheetId].push(Dr(e)));for(const e in r){const t=er(r[e],[]);o.push(...t.map((t=>({sheetId:e,zone:t}))))}}for(const o of e){const e=o.zone,s=o.sheetId;for(let o=e.left;o<=e.right;o++)for(let i=e.top;i<=e.bottom;i++)t.delete({sheetId:s,col:o,row:i})}return t}}class rV extends Uint32Array{columnOffset=0;cols=0;rows=0;static create(e,t){const o=function(e){if(0===e)return-1/0;if(e<0)return NaN;return 32-Math.clz32(--e)}(t),s=new this((e<<o>>5)+1);return s.columnOffset=o,s.cols=t,s.rows=e,s}getValue(e){const[t,o]=this.getCoordinates(e);return this[t]>>o&1}setValue(e,t){const[o,s]=this.getCoordinates(e),i=0===(this[o]>>s&1)&&1===t;return this[o]=this[o]&~(1<<s)|t<<s,i}isEmpty(){return!this.some((e=>0!==e))}fillAllPositions(){this.fill(-1>>>0)}clear(){this.fill(0)}getCoordinates(e){const{row:t,col:o}=e,s=(t<<this.columnOffset)+o,i=s>>5;return[i,s-(i<<5)]}}class aV{sheets={};insertions=[];maxSize=0;constructor(e){for(const t in e){const o=e[t].cols,s=e[t].rows;this.maxSize+=o*s,this.sheets[t]=rV.create(s,o)}}add(e){this.sheets[e.sheetId].setValue(e,1)&&this.insertions.push(e)}addMany(e){for(const t of e)this.add(t)}delete(e){this.sheets[e.sheetId].setValue(e,0)}deleteMany(e){for(const t of e)this.delete(t)}has(e){return 1===this.sheets[e.sheetId].getValue(e)}clear(){const e=[...this];this.insertions=[];for(const e in this.sheets)this.sheets[e].clear();return e}isEmpty(){if(0===this.insertions.length)return!0;for(const e in this.sheets)if(!this.sheets[e].isEmpty())return!1;return!0}fillAllPositions(){this.insertions=new Array(this.maxSize);let e=0;for(const t in this.sheets){const o=this.sheets[t];o.fillAllPositions();for(let s=0;s<o.rows;s++)for(let i=0;i<o.cols;i++)this.insertions[e++]={sheetId:t,row:s,col:i}}}*[Symbol.iterator](){for(const e of this.insertions)1===this.sheets[e.sheetId].getValue(e)&&(yield e)}}class lV{resultsToArrayFormulas=new sV;arrayFormulasToResults=new MD;searchFormulaPositionsSpreadingOn(e,t){return this.resultsToArrayFormulas.search({sheetId:e,zone:t}).map((e=>e.data))||cV}getArrayResultZone(e){return this.arrayFormulasToResults.get(e)}removeNode(e){this.resultsToArrayFormulas.remove({boundingBox:{sheetId:e.sheetId,zone:Dr(e)},data:e}),this.arrayFormulasToResults.delete(e)}addRelation({arrayFormulaPosition:e,resultZone:t}){this.resultsToArrayFormulas.insert({boundingBox:{sheetId:e.sheetId,zone:t},data:e}),this.arrayFormulasToResults.set(e,t)}isArrayFormula(e){return this.arrayFormulasToResults.has(e)}}const cV=[],hV=Object.freeze(Zn(new oi)),dV=Object.freeze(Zn({value:null}));class uV{context;getters;compilationParams;evaluatedCells=new MD;formulaDependencies=ut(new nV(this.createEmptyPositionSet.bind(this)));blockedArrayFormulas=new aV({});spreadingRelations=new lV;constructor(e,t){this.context=e,this.getters=t,this.compilationParams=Vk(this.context,this.getters,this.computeAndSave.bind(this))}getEvaluatedCell(e){return this.evaluatedCells.get(e)||dV}getSpreadZone(e,t={ignoreSpillError:!1}){const o=this.spreadingRelations.getArrayResultZone(e);if(!o)return;const s=this.evaluatedCells.get(e);return s?.type!==Ts.error||t.ignoreSpillError&&s?.value===Js.SpilledBlocked?fr(Dr(e),o):Dr(e)}getEvaluatedPositions(){return this.evaluatedCells.keys()}getEvaluatedPositionsInSheet(e){return this.evaluatedCells.keysForSheet(e)}getArrayFormulaSpreadingOn(e){if(this.getEvaluatedCell(e).type===Ts.empty)return;const t=this.spreadingRelations.searchFormulaPositionsSpreadingOn(e.sheetId,Dr(e));return Array.from(t).find((e=>!this.blockedArrayFormulas.has(e)))}updateDependencies(e){this.formulaDependencies().removeAllDependencies(e);const t=this.getDirectDependencies(e);this.formulaDependencies().addDependencies(e,t)}addDependencies(e,t){this.formulaDependencies().addDependencies(e,t);for(const e of t){const t=e.sheetId,{left:o,bottom:s,right:i,top:n}=e.zone;for(let e=o;e<=i;e++)for(let o=n;o<=s;o++)this.computeAndSave({sheetId:t,col:e,row:o})}}updateCompilationParameters(){this.compilationParams=Vk(this.context,this.getters,this.computeAndSave.bind(this)),this.compilationParams.evalContext.updateDependencies=this.updateDependencies.bind(this),this.compilationParams.evalContext.addDependencies=this.addDependencies.bind(this),this.compilationParams.evalContext.lookupCaches={forwardSearch:new Map,reverseSearch:new Map}}createEmptyPositionSet(){const e={};for(const t of this.getters.getSheetIds())e[t]={rows:this.getters.getNumberRows(t),cols:this.getters.getNumberCols(t)};return new aV(e)}evaluateCells(e){const t=performance.now(),o=this.createEmptyPositionSet();o.addMany(e);const s=this.getArrayFormulasImpactedByChangesOf(e);o.addMany(this.getCellsDependingOn(e)),o.addMany(s),o.addMany(this.getCellsDependingOn(s)),this.evaluate(o),console.debug("evaluate Cells",performance.now()-t,"ms")}getArrayFormulasImpactedByChangesOf(e){const t=this.createEmptyPositionSet();for(const o of e){const e=this.getters.getCell(o)?.content,s=this.getArrayFormulaSpreadingOn(o);void 0!==s&&t.add(s),e||t.add(o)}const o=xr(t);for(const e in o)for(const s of o[e])t.addMany(this.getArrayFormulasBlockedBy(e,s));return t}buildDependencyGraph(){this.blockedArrayFormulas=this.createEmptyPositionSet(),this.spreadingRelations=new lV,this.formulaDependencies=ut((()=>{const e=[...this.getAllCells()].flatMap((e=>this.getDirectDependencies(e).filter((e=>!e.invalidSheetName&&!e.invalidXc)).map((t=>({data:e,boundingBox:{zone:t.zone,sheetId:t.sheetId}})))));return new nV(this.createEmptyPositionSet.bind(this),e)}))}evaluateAllCells(){const e=performance.now();this.evaluatedCells=new MD,this.evaluate(this.getAllCells()),console.debug("evaluate all cells",performance.now()-e,"ms")}evaluateFormulaResult(e,t){const o=PS(t),s=o.dependencies.map((t=>this.getters.getRangeFromSheetXC(e,t)));return this.updateCompilationParameters(),this.evaluateCompiledFormula(e,{...o,dependencies:s})}evaluateCompiledFormula(e,t,o){try{const s=mV(t,this.compilationParams,e,this.buildSafeGetSymbolValue(o),this.compilationParams.evalContext.__originCellPosition);return Ws(s)?Pi(s,pV):pV(s)}catch(e){return yS(e,"")}}getAllCells(){const e=this.createEmptyPositionSet();return e.fillAllPositions(),e}getArrayFormulasBlockedBy(e,t){const o=this.createEmptyPositionSet(),s=this.spreadingRelations.searchFormulaPositionsSpreadingOn(e,t);o.addMany(s);const i=[...s].filter((e=>!this.blockedArrayFormulas.has(e)));return i.length&&o.deleteMany(i),o.addMany(this.getCellsDependingOn(o)),o}nextPositionsToUpdate=new aV({});cellsBeingComputed=new Set;symbolsBeingComputed=new Set;evaluate(e){this.cellsBeingComputed=new Set,this.nextPositionsToUpdate=e;let t=0;for(;!this.nextPositionsToUpdate.isEmpty()&&t++<30;){this.updateCompilationParameters();const e=this.nextPositionsToUpdate.clear();for(let t=0;t<e.length;++t)this.evaluatedCells.delete(e[t]);for(let t=0;t<e.length;++t){const o=e[t];if(this.nextPositionsToUpdate.has(o))continue;const s=this.computeCell(o);s!==dV&&this.evaluatedCells.set(o,s)}Nk.getAll().forEach((e=>e(this.getters)))}t>=30&&console.warn("Maximum iteration reached while evaluating cells")}computeCell(e){const t=this.evaluatedCells.get(e);if(t)return t;this.blockedArrayFormulas.has(e)||this.invalidateSpreading(e),this.spreadingRelations.isArrayFormula(e)&&this.spreadingRelations.removeNode(e);const o=this.getters.getCell(e);if(void 0===o)return dV;const s=o.id,i={format:o.format,locale:this.getters.getLocale()};try{return this.cellsBeingComputed.has(s)?hV:(this.cellsBeingComputed.add(s),o.isFormula?this.computeFormulaCell(e,o):Wn(o,i))}catch(e){return e.value=e?.value||Js.GenericError,e.message=e?.message||IS,Zn(e)}finally{this.cellsBeingComputed.delete(s)}}computeAndSave(e){const t=this.computeCell(e);return this.evaluatedCells.has(e)||this.evaluatedCells.set(e,t),t}computeFormulaCell(e,t){const o=mV(t.compiledFormula,this.compilationParams,e.sheetId,this.buildSafeGetSymbolValue(),e);if(!Ws(o)){const s=Zn(pV(o),this.getters.getLocale(),t);return s.type===Ts.error&&(s.errorOriginPosition=o.errorOriginPosition??e),s}this.assertSheetHasEnoughSpaceToSpreadFormulaResult(e,o);const s=o.length,i=o[0].length,n={top:e.row,bottom:e.row+i-1,left:e.col,right:e.col+s-1};return this.spreadingRelations.addRelation({resultZone:n,arrayFormulaPosition:e}),this.assertNoMergedCellsInSpreadZone(e,o),gV(s,i,this.checkCollision(e)),gV(s,i,this.spreadValues(e,o)),this.invalidatePositionsDependingOnSpread(e.sheetId,n),Zn(pV(o[0][0]),this.getters.getLocale(),t)}invalidatePositionsDependingOnSpread(e,t){const o=this.formulaDependencies().getCellsDependingOn(function(e){const{top:t,left:o,bottom:s,right:i}=e;if(1===Pr(e))return[];const n={top:t+1,bottom:s,left:o,right:o};if(i===o)return[n];const r={top:t,bottom:s,left:o+1,right:i};return t===s?[r]:[n,r]}(t).map((t=>({sheetId:e,zone:t}))));o.delete({sheetId:e,col:t.left,row:t.top}),this.nextPositionsToUpdate.addMany(o)}assertSheetHasEnoughSpaceToSpreadFormulaResult({sheetId:e,col:t,row:o},s){const i=this.getters.getNumberCols(e),n=this.getters.getNumberRows(e),r=t+s.length<=i,a=o+s[0].length<=n;if(!r||!a){if(r)throw new ri(Vo("Result couldn't be automatically expanded. Please insert more rows."));if(a)throw new ri(Vo("Result couldn't be automatically expanded. Please insert more columns."));throw new ri(Vo("Result couldn't be automatically expanded. Please insert more columns and rows."))}}assertNoMergedCellsInSpreadZone({sheetId:e,col:t,row:o},s){if(0!==this.getters.getMergesInZone(e,{top:o,bottom:o+s[0].length-1,left:t,right:t+s.length-1}).length)throw new ri(Vo("Merged cells found in the spill zone. Please unmerge cells before using array formulas."))}checkCollision(e){const{sheetId:t,col:o,row:s}=e;return(i,n)=>{const r={sheetId:t,col:i+o,row:n+s},a=this.getters.getCell(r);if(a?.content||this.getters.getEvaluatedCell(r).type!==Ts.empty)throw this.blockedArrayFormulas.add(e),new ri(Vo("Array result was not expanded because it would overwrite data in %s.",Oo(r.col,r.row)));this.blockedArrayFormulas.delete(e)}}spreadValues({sheetId:e,col:t,row:o},s){return(i,n)=>{const r={sheetId:e,col:i+t,row:n+o},a=this.getters.getCell(r),l=Zn(pV(s[i][n]),this.getters.getLocale(),a);l.type===Ts.error&&(l.errorOriginPosition=s[i][n].errorOriginPosition??r),this.evaluatedCells.set(r,l)}}invalidateSpreading(e){const t=this.spreadingRelations.getArrayResultZone(e);if(!t)return;for(let o=t.left;o<=t.right;o++)for(let s=t.top;s<=t.bottom;s++){const t={sheetId:e.sheetId,col:o,row:s},i=this.getters.getCell(t)?.content;i||this.evaluatedCells.delete(t)}const o=e.sheetId;this.invalidatePositionsDependingOnSpread(o,t),this.nextPositionsToUpdate.addMany(this.getArrayFormulasBlockedBy(o,t))}buildSafeGetSymbolValue(e){return t=>{if(this.symbolsBeingComputed.has(t))return hV;this.symbolsBeingComputed.add(t);try{const o=e?.(t);return o||new ti(Vo("Invalid formula"))}finally{this.symbolsBeingComputed.delete(t)}}}getDirectDependencies(e){const t=this.getters.getCell(e);return t?.isFormula?t.compiledFormula.dependencies:[]}getCellsDependingOn(e){const t=[],o=xr(e);for(const e in o)t.push(...o[e].map((t=>({sheetId:e,zone:t}))));return this.formulaDependencies().getCellsDependingOn(t)}}function gV(e,t,o){for(let s=0;s<e;++s)for(let e=0;e<t;++e)0===s&&0===e||o(s,e)}function pV(e){return null===e.value||void 0===e.value?{...e,value:0}:e}function mV(e,t,o,s,i){return t.evalContext.__originCellPosition=i,t.evalContext.__originSheetId=o,e.execute(e.dependencies,t.referenceDenormalizer,t.ensureRange,s,t.evalContext)}const fV=/"(#[0-9a-fA-F]{6})"/g;const vV={isValid:!0};const bV=new n;function SV(e,t){const o=t.model.getters.getPivotCellFromPosition(e),s=t.model.getters.getPivotIdFromPosition(e);if(!s||"HEADER"!==o.type)return;const i=t.model.getters.getPivotCoreDefinition(s),n=i.collapsedDomains?.[o.dimension]?[...i.collapsedDomains[o.dimension]]:[],r=n.findIndex((e=>mt(e,o.domain)));-1!==r?n.splice(r,1):n.push(o.domain);const a=i.collapsedDomains?{...i.collapsedDomains}:{COL:[],ROW:[]};a[o.dimension]=n,t.model.dispatch("UPDATE_PIVOT",{pivotId:s,pivot:{...i,collapsedDomains:a}})}bV.add("data_validation_checkbox",((e,t)=>{if(e.isCellValidCheckbox(t)){const o=!!e.getEvaluatedCell(t).value;return{svg:o?BR:HR,hoverSvg:o?BR:UR,priority:2,horizontalAlign:"center",size:17,margin:2,position:t,type:"data_validation_checkbox",onClick:(e,t)=>{const s=t.model.getters.getCell(e);if(t.model.getters.isReadonly()||!!s?.isFormula)return;const i=o?"FALSE":"TRUE";t.model.dispatch("UPDATE_CELL",{...e,content:i})}}}})),bV.add("data_validation_chip_icon",((e,t)=>{const o=e.getDataValidationChipStyle(t);if(o){const s=e.getCellComputedStyle(t);return{svg:VR(o),hoverSvg:LR(o),priority:10,horizontalAlign:"right",size:Va(s),margin:4,position:t,onClick:(e,t)=>{const{col:o,row:s}=e;t.model.selection.selectCell(o,s),t.startCellEdition()},type:"data_validation_chip_icon"}}})),bV.add("data_validation_list_icon",((e,t)=>{if(!e.isReadonly()&&e.cellHasListDataValidationIcon(t)){const s=e.getCellComputedStyle(t);return{svg:(o=s,{name:"CARET_DOWN",width:512,height:512,paths:[{fillColor:o.textColor||N,path:"M120 195 h270 l-135 130"}]}),hoverSvg:NR(s),priority:2,horizontalAlign:"right",size:17,margin:2,position:t,onClick:(e,t)=>{const{col:o,row:s}=e;t.model.selection.selectCell(o,s),t.startCellEdition()},type:"data_validation_list_icon"}}var o})),bV.add("filter_icon",((e,t)=>{if(e.isFilterHeader(t)){const o=e.isFilterActive(t),s=Zt(e.getCellComputedStyle(t).fillColor||"#fff")<.45;return{type:"filter_icon",svg:$R(o,s,!1),hoverSvg:$R(o,s,!0),priority:3,horizontalAlign:"right",size:17,margin:2,position:t,onClick:(e,t)=>{const o=t.getStore(Bx),s=o.persistentCellPopover;s.isOpen&&s.col===e.col&&s.row===e.row&&"FilterMenu"===s.type?o.close():o.open(e,"FilterMenu")}}}})),bV.add("conditional_formatting",((e,t)=>{const o=e.getConditionalIcon(t);if(o){const s=e.getCellStyle(t);return{type:"conditional_formatting",svg:GR[o].svg,priority:1,horizontalAlign:"left",size:Va(s),margin:4,position:t}}})),bV.add("pivot_collapse",((e,t)=>{if(!e.isSpillPivotFormula(t))return;const o=e.getPivotCellFromPosition(t),s=e.getPivotIdFromPosition(t);if("HEADER"===o.type&&s&&o.domain.length){const i=e.getPivotCoreDefinition(s),n=e.isDashboard(),r="COL"===o.dimension?i.columns:i.rows,a=!n&&o.domain.length!==r.length,l=(i.collapsedDomains?.[o.dimension]??[]).some((e=>mt(e,o.domain))),c="ROW"===o.dimension?15*(o.domain.length-1):0;return{type:"pivot_collapse",priority:4,horizontalAlign:"left",size:a||!n&&"ROW"===o.dimension&&i.rows.length>1?12:0,margin:a?4+c:c,svg:a?zR(l,!1):void 0,hoverSvg:a?zR(l,!0):void 0,position:t,onClick:SV}}}));const CV="0.00%";function yV(e){return class extends e{getters;cache={};rankAsc={};rankDesc={};runningTotal={};runningTotalInPercent={};constructor(e,t){super(e,t),this.getters=t.getters}init(e){this.cache={},this.rankAsc={},this.rankDesc={},this.runningTotal={},this.runningTotalInPercent={},super.init(e)}getPivotCellValueAndFormat(e,t){return this.getMeasureDisplayValue(e,t)}_getPivotCellValueAndFormat(e,t){const o=`${e}-${t.map((e=>e.field+"="+e.value)).join(",")}`;if(this.cache[o])return this.cache[o];const s=this.getMeasure(e),i=s.computedBy?this.computeMeasure(s,t):super.getPivotCellValueAndFormat(e,t);return s.format?this.cache[o]={...i,format:s.format}:this.cache[o]=i,this.cache[o]}computeMeasure(e,t){if(!e.computedBy)return{value:0};const{columns:o,rows:s}=super.definition;if(o.length+s.length!==t.length){const o=this.getValuesToAggregate(e,t),s=Dc[e.aggregator];if(!s)return{value:0};try{return s([o],this.getters.getLocale())}catch(t){return yS(t,e.aggregator.toUpperCase())}}const i=this.getters.getMeasureCompiledFormula(e),n=this.getters.evaluateCompiledFormula(e.computedBy.sheetId,i,(e=>{const{columns:o,rows:s}=this.definition;if(o.find((t=>t.nameWithGranularity===e))){const{colDomain:o}=RO(this,t),s=o.findIndex((t=>t.field===e));return this.getPivotHeaderValueAndFormat(o.slice(0,s+1))}if(s.find((t=>t.nameWithGranularity===e))){const{rowDomain:o}=RO(this,t),s=o.findIndex((t=>t.field===e));return this.getPivotHeaderValueAndFormat(o.slice(0,s+1))}return this.getPivotCellValueAndFormat(e,t)}));return Ws(n)?n[0][0]:n}getValuesToAggregate(e,t){const{rowDomain:o,colDomain:s}=RO(this,t),i=super.getExpandedTableStructure(),n=[];if(0===s.length&&o.length<this.definition.rows.length&&this.definition.rows.length&&this.definition.columns.length){const t=this.treeToLeafDomains(i.getColTree()),s=this.getSubTreeMatchingDomain(i.getRowTree(),o),r=this.treeToLeafDomains(s);for(const s of t)for(const t of r)n.push(this._getPivotCellValueAndFormat(e.id,o.concat(t).concat(s)));return n}if(o.length===this.definition.rows.length&&0===s.length){const t=i.getColTree(),r=this.getSubTreeMatchingDomain(t,s),a=this.treeToLeafDomains(r,s);for(const t of a)n.push(this._getPivotCellValueAndFormat(e.id,o.concat(t)));return n}if(o.length===this.definition.rows.length&&s.length&&s.length<this.definition.columns.length){const t=this.getSubTreeMatchingDomain(i.getColTree(),s),r=this.treeToLeafDomains(t,s);for(const t of r)n.push(this._getPivotCellValueAndFormat(e.id,o.concat(t)));return n}{const t=i.getRowTree(),r=this.getSubTreeMatchingDomain(t,o),a=this.treeToLeafDomains(r,o);for(const t of a)n.push(this._getPivotCellValueAndFormat(e.id,t.concat(s)));return n}}getSubTreeMatchingDomain(e,t,o=0){if(o>t.length)return[];if(t.length===o)return e;for(const s of e){const e=Lc(this.definition.getDimension(s.field),t[o]?.value);if(s.field===t[o]?.field&&s.value===e)return this.getSubTreeMatchingDomain(s.children,t,o+1)}return e}treeToLeafDomains(e,t=[]){const o=[];for(const s of e){const e=this.definition.getDimension(s.field),i=[...t,{field:s.field,value:s.value,type:e.type}];0===s.children.length?o.push(i):o.push(...this.treeToLeafDomains(s.children,i))}return o}getMeasureDisplayValue(e,t){const o=this.getMeasure(e),s=this._getPivotCellValueAndFormat(e,t);if(!o.display||"no_calculations"===o.display.type||s.message)return s;const i=o.display.fieldNameWithGranularity;if(i&&!this.isFieldInPivot(i))return{value:Js.NotAvailable,message:Vo('Field "%s" not found in pivot for measure display calculation',i)};try{const e=o.display;switch(e.type){case"%_of_grand_total":return this.asPercentOfGrandTotal(s,o);case"%_of_col_total":return this.asPercentOfColumnTotal(s,o,t);case"%_of_row_total":return this.asPercentOfRowTotal(s,o,t);case"%_of_parent_row_total":return this.asPercentOfParentRowTotal(s,o,t);case"%_of_parent_col_total":return this.asPercentOfParentColumnTotal(s,o,t);case"index":return this.asIndex(s,o,t);case"%_of_parent_total":return this.asPercentOfParentTotal(s,o,t,e);case"running_total":return this.asRunningTotal(s,o,t,e,"running_total");case"%_running_total":return this.asRunningTotal(s,o,t,e,"%_running_total");case"rank_asc":return this.asRank(s,o,t,e,"asc");case"rank_desc":return this.asRank(s,o,t,e,"desc");case"%_of":return this.asPercentOf(s,o,t,e);case"difference_from":return this.asDifferenceFrom(s,o,t,e);case"%_difference_from":return this.asDifferenceFromInPercent(s,o,t,e)}return s}catch(e){return yS(e,"COMPUTE_MEASURE_DISPLAY_VALUE")}}asPercentOfGrandTotal(e,t){const o=this.getGrandTotal(t.id);return 0===o?{value:Js.DivisionByZero}:{value:this.measureValueToNumber(e)/o,format:CV}}asPercentOfRowTotal(e,t,o){const s=this.getRowTotal(t.id,o);return 0===s?{value:Js.DivisionByZero}:{value:this.measureValueToNumber(e)/s,format:CV}}asPercentOfColumnTotal(e,t,o){const s=this.getColumnTotal(t.id,o);return 0===s?{value:Js.DivisionByZero}:{value:this.measureValueToNumber(e)/s,format:CV}}asPercentOfParentRowTotal(e,t,o){const s=function(e,t){const{colDomain:o,rowDomain:s}=RO(e,t);return[...o,...s.slice(0,s.length-1)]}(this,o),i=this.measureValueToNumber(this._getPivotCellValueAndFormat(t.id,s));return 0===i?{value:""}:{value:this.measureValueToNumber(e)/i,format:CV}}asPercentOfParentColumnTotal(e,t,o){const s=function(e,t){const{colDomain:o,rowDomain:s}=RO(e,t);return[...o.slice(0,o.length-1),...s]}(this,o),i=this.measureValueToNumber(this._getPivotCellValueAndFormat(t.id,s));return 0===i?{value:""}:{value:this.measureValueToNumber(e)/i,format:CV}}asPercentOfParentTotal(e,t,o,s){const{fieldNameWithGranularity:i}=s;if(!i)return e;if(!OO(i,o))return{value:""};const n=function(e,t,o){let{rowDomain:s,colDomain:i}=RO(e,o);if("row"===FO(e,t)){const e=s.findIndex((e=>e.field===t));if(-1===e)return o;s=s.slice(0,e+1)}else{const e=i.findIndex((e=>e.field===t));if(-1===e)return o;i=i.slice(0,e+1)}return[...s,...i]}(this,i,o),r=this._getPivotCellValueAndFormat(t.id,n),a=this.measureValueToNumber(r);return 0===a?{value:""}:{value:this.measureValueToNumber(e)/a,format:CV}}asIndex(e,t,o){const s=this.measureValueToNumber(e),i=this.getRowTotal(t.id,o),n=this.getColumnTotal(t.id,o),r=this.getGrandTotal(t.id);return 0===i||0===n?{value:Js.DivisionByZero}:{value:s*r/(n*i),format:void 0}}asRunningTotal(e,t,o,s,i){const{fieldNameWithGranularity:n}=s;if(!n)return e;const r="running_total"===i?this.runningTotal:this.runningTotalInPercent;let a=r[t.id]?.[n];a||(a=this.computeRunningTotal(t,n,i),r[t.id]||(r[t.id]={}),r[t.id][n]=a);const{rowDomain:l,colDomain:c}=RO(this,o),h=PO(c),d=PO(l),u=a[h]?.[d];return{value:u??"",format:"running_total"===i?e.format:CV}}asPercentOf(e,t,o,s){const{fieldNameWithGranularity:i,value:n}=s;if(void 0===n||!i)return e;if(!OO(i,o))return{value:""};const r=this.getComparisonValue(t,o,i,n),a=this.strictMeasureValueToNumber(e);return 0===r||"sameValue"===r&&0===a?{value:Js.DivisionByZero}:!r||"sameValue"===r&&!a?{value:""}:"sameValue"===r?{value:1,format:CV}:void 0===a?{value:Js.NullError}:{value:a/r,format:CV}}asDifferenceFrom(e,t,o,s){const{fieldNameWithGranularity:i,value:n}=s;if(void 0===n||!i)return e;if(!OO(i,o))return{value:""};const r=this.getComparisonValue(t,o,i,n)||0;return"sameValue"===r?{value:""}:{value:this.measureValueToNumber(e)-r,format:e.format}}asDifferenceFromInPercent(e,t,o,s){const{fieldNameWithGranularity:i,value:n}=s;if(void 0===n||!i)return e;if(!OO(i,o))return{value:""};const r=this.getComparisonValue(t,o,i,n),a=this.strictMeasureValueToNumber(e);return 0===r?{value:Js.DivisionByZero}:r&&"sameValue"!==r?void 0===a?{value:Js.NullError}:{value:(a-r)/r,format:CV}:{value:""}}asRank(e,t,o,s,i){const{fieldNameWithGranularity:n}=s;if(!n)return e;if(!OO(n,o))return{value:""};const r="asc"===i?this.rankAsc:this.rankDesc;let a=r[t.id]?.[n];a||(a=this.computeRank(t,n,i),r[t.id]||(r[t.id]={}),r[t.id][n]=a);const{rowDomain:l,colDomain:c}=RO(this,o),h=PO(c),d=PO(l),u=a[h]?.[d];return{value:u??""}}computeRank(e,t,o){const s={},i=FO(this,t),n="row"===i?"column":"row";let r=this.getPivotValueCells(e.id);"column"===i&&(r=Mi(r));for(const a of r){const r=PO(TO(this,n,a[0].domain)),l=a.map((t=>({...t,value:this.strictMeasureValueToNumber(this._getPivotCellValueAndFormat(e.id,t.domain)),rowDomain:TO(this,i,t.domain)}))).filter((e=>OO(t,e.rowDomain))),c=Object.groupBy(l,(e=>NO(e.rowDomain,t)));for(const e in c)c[e]=Mt(c[e]||[],(e=>e.value)).filter((e=>void 0!==e.value)).sort(((e,t)=>"asc"===o?e.value-t.value:t.value-e.value));s[r]={};for(const e of l){const o=PO(TO(this,i,e.domain)),n=c[NO(e.rowDomain,t)];if(!n)continue;const a=n.findIndex((t=>t.value===e.value));-1!==a&&(s[r][o]=a+1)}}return"row"===i?s:Nt(s)}computeRunningTotal(e,t,o){const s={},i=FO(this,t),n="row"===i?"column":"row";let r=this.getPivotValueCells(e.id);"column"===i&&(r=Mi(r));for(const a of r){const r=PO(TO(this,n,a[0].domain));s[r]={};const l={},c=a.map((t=>({...t,rowDomain:TO(this,i,t.domain),value:this.measureValueToNumber(this._getPivotCellValueAndFormat(e.id,t.domain))}))).filter((e=>OO(t,e.rowDomain)));for(const e of c){const o=PO(e.rowDomain),i=kO(e.rowDomain,t),n=(l[i]||0)+e.value;l[i]=n,s[r][o]=n}if("%_running_total"===o)for(const e of c){const o=e.rowDomain,i=PO(o),n=kO(o,t),a=s[r][i]||0,c=l[n];s[r][i]=c?a/c:void 0}}return"row"===i?s:Nt(s)}getGrandTotal(e){const t=this._getPivotCellValueAndFormat(e,[]);return this.measureValueToNumber(t)}getRowTotal(e,t){const o=RO(this,t).rowDomain,s=this._getPivotCellValueAndFormat(e,o);return this.measureValueToNumber(s)}getColumnTotal(e,t){const o=RO(this,t).colDomain,s=this._getPivotCellValueAndFormat(e,o);return this.measureValueToNumber(s)}isFieldInPivot(e){return this.definition.columns.some((t=>t.nameWithGranularity===e))||this.definition.rows.some((t=>t.nameWithGranularity===e))}getComparisonValue(e,t,o,s){const i=s===xO||s===EO?function(e,t,o,s){const i=FO(e,o),n="row"===i?e.getExpandedTableStructure().getRowTree():e.getExpandedTableStructure().getColTree(),r=DO(TO(e,i,t),n,o),a=r?.map((e=>e.value))??[],l=function(e,t){const o=t.find((t=>t.field===e));return o?.value}(o,t);if(void 0===l)return;const c=a.indexOf(l);if(void 0===l||-1===c)return;return _O(t,o,a[Ze(c+(s===xO?-1:1),0,a.length-1)])}(this,t,o,s):_O(t,o,s);if(mt(i,t))return"sameValue";if(!i||!function(e,t){for(const o of t)if(void 0===e.definition.rows.find((e=>e.nameWithGranularity===o.field))&&void 0===e.definition.columns.find((e=>e.nameWithGranularity===o.field)))return!1;const{rowDomain:o,colDomain:s}=RO(e,t);return AO(o,e.getExpandedTableStructure().getRowTree())&&AO(s,e.getExpandedTableStructure().getColTree())}(this,i))throw new ii;const n=this._getPivotCellValueAndFormat(e.id,i);return this.strictMeasureValueToNumber(n)}getPivotValueCells(e){return this.getCollapsedTableStructure().getPivotCells().map((t=>t.filter((t=>"VALUE"===t.type&&t.measure===e)))).filter((e=>e.length>0))}measureValueToNumber(e){if("number"==typeof e.value)return e.value;if(!e.value)return 0;throw new Error(`Value ${e.value} is not a number`)}strictMeasureValueToNumber(e){if("number"==typeof e.value)return e.value;if(e.value)throw new Error(`Value ${e.value} is not a number`)}getCollapsedTableStructure(){const e=super.getCollapsedTableStructure();return this.sortTableStructure(e),e}getExpandedTableStructure(){const e=super.getExpandedTableStructure();return this.sortTableStructure(e),e}sortTableStructure(e){if(!this.definition.sortedColumn||e.isSorted)return;const t=this.definition.sortedColumn.measure;Wc(this.definition.sortedColumn,this)&&e.sort(t,this.definition.sortedColumn,((e,t)=>this._getPivotCellValueAndFormat(e,t)))}}}const wV=["ADD_PIVOT","UPDATE_PIVOT"];function IV(e){return wV.includes(e.type)}const xV=new n;xV.add("ALPHANUMERIC_INCREMENT_MODIFIER",{apply:(e,t)=>{e.current+=e.increment;let o=Math.abs(e.current).toString();o="0".repeat(Math.max(e.numberPostfixLength-o.length,0))+o;const s=`${e.prefix}${o}`;return{cellData:{border:t.border,style:t.cell&&t.cell.style,format:t.cell&&t.cell.format,content:s},tooltip:{props:{content:s}}}}}).add("INCREMENT_MODIFIER",{apply:(e,t,o)=>{e.current+=e.increment;const s=e.current.toString(),i=o.getLocale(),n=bn(e.current,{format:t.cell?.format,locale:i});return{cellData:{border:t.border,style:t.cell&&t.cell.style,format:t.cell&&t.cell.format,content:s},tooltip:s?{props:{content:n}}:void 0}}}).add("DATE_INCREMENT_MODIFIER",{apply:(e,t,o)=>{const s=Ii(e.current,o.getLocale());s.setFullYear(s.getFullYear()+e.increment.years||0),s.setMonth(s.getMonth()+e.increment.months||0),s.setDate(s.getDate()+e.increment.days||0);const i=ds(s);e.current=i;const n=o.getLocale(),r=bn(i,{format:t.cell?.format,locale:n});return{cellData:{border:t.border,style:t.cell&&t.cell.style,format:t.cell&&t.cell.format,content:i.toString()},tooltip:i?{props:{content:r}}:void 0}}}).add("COPY_MODIFIER",{apply:(e,t,o)=>{const s=t.cell?.content||"",i={locale:o.getLocale(),format:t.cell?.format};return{cellData:{border:t.border,style:t.cell&&t.cell.style,format:t.cell&&t.cell.format,content:s},tooltip:s?{props:{content:t.cell?Wn(t.cell,i).formattedValue:""}}:void 0}}}).add("FORMULA_MODIFIER",{apply:(e,t,o,s)=>{e.current+=e.increment;let i=0,n=0;switch(s){case"up":i=0,n=-e.current;break;case"down":i=0,n=e.current;break;case"left":i=-e.current,n=0;break;case"right":i=e.current,n=0}const r=t.cell;if(!r||!r.isFormula)return{cellData:{}};const a=t.sheetId,l=o.getTranslatedCellFormula(a,i,n,r.compiledFormula.tokens);return{cellData:{border:t.border,style:r.style,format:r.format,content:l},tooltip:l?{props:{content:l}}:void 0}}});const EV=new n,RV=/(\d+)$/,TV=/^(.*\D+)/,AV=/^(.*\D+)(\d+)$/,DV=/^0*/;function _V(e,t,o){let s=[],i=!1;for(const n of t){n===e&&(i=!0);const t=void 0===n||n.isFormula?void 0:Wn(n,{locale:$s,format:n.format});if(t&&o(t))s.push(t);else{if(i)return s;s=[]}}return s}function OV(e){let t=1;return e.length>=2&&(t=function(e){const t=[];let o=e[0];for(let s=1;s<e.length;s++){const i=e[s];t.push(i-o),o=i}return t.reduce(((e,t)=>e+t),0)/t.length}(e)*e.length),t}function FV(e){if(e.length<2)return 1;const t=e.map((e=>Ii(e,$s))),o=function(e){if(e.length<2)return[{years:0,months:0,days:0}];const t=e.map(((t,o)=>{if(0===o)return{years:0,months:0,days:0};const s=Zo.fromTimestamp(e[o-1].getTime()),i=Ss(s,t),n=vs(s,t)%12;s.setFullYear(s.getFullYear()+i),s.setMonth(s.getMonth()+n);return{years:i,months:n,days:bs(s,t)}}));return t.slice(1)}(t),s=(i=o).length<2?i[0]||{years:0,months:0,days:0}:i.every((e=>e.years===i[0].years&&e.months===i[0].months&&e.days===i[0].days))?i[0]:void 0;var i;if(void 0===s)return;const n=1===Object.values(s).filter((e=>0!==e)).length,r=Object.values(s).every((e=>0===e));if(!n||r){const o=t.map(((e,o)=>{if(0===o)return 0;const s=t[o-1];return Math.floor(e.getTime())-Math.floor(s.getTime())})).slice(1);if(o.every((e=>e===o[0])))return e.length*(e[1]-e[0])}return{years:s.years*e.length,months:s.months*e.length,days:s.days*e.length}}EV.add("simple_value_copy",{condition:(e,t)=>!(1!==t.length||e.isFormula||e.format&&Rn(e.format)),generateRule:()=>({type:"COPY_MODIFIER"}),sequence:10}).add("increment_alphanumeric_value",{condition:e=>!e.isFormula&&Wn(e,{locale:$s}).type===Ts.text&&AV.test(e.content),generateRule:(e,t,o)=>{const s=parseInt(e.content.match(RV)[0]),i=e.content.match(TV)[0],n=_V(e,t,(e=>e.type===Ts.text&&AV.test(e.value))).filter((e=>i===(e.value??"").toString().match(TV)[0])).map((e=>(e.value??"").toString().match(RV)[0])),r=n.reduce(((e,t)=>{const o=t.match(DV)[0].length;return o>e[1]?[t,o]:e}),[n[0],0]),a=r[1]?r[0].length:0;let l=OV(n.map((e=>parseInt(e))));return["up","left"].includes(o)&&1===n.length&&(l=-l),{type:"ALPHANUMERIC_INCREMENT_MODIFIER",prefix:i,current:s,increment:l,numberPostfixLength:a}},sequence:15}).add("copy_text",{condition:e=>!e.isFormula&&Wn(e,{locale:$s}).type===Ts.text,generateRule:()=>({type:"COPY_MODIFIER"}),sequence:20}).add("update_formula",{condition:e=>e.isFormula,generateRule:(e,t)=>({type:"FORMULA_MODIFIER",increment:t.length,current:0}),sequence:30}).add("increment_dates",{condition:(e,t)=>!e.isFormula&&Wn(e,{locale:$s}).type===Ts.number&&!!e.format&&Rn(e.format),generateRule:(e,t)=>{const o=FV(_V(e,t,(e=>e.type===Ts.number&&!!e.format&&Rn(e.format))).map((e=>Number(e.value))));if(void 0===o)return{type:"COPY_MODIFIER"};const s=Wn(e,{locale:$s});return"object"==typeof o?{type:"DATE_INCREMENT_MODIFIER",increment:o,current:s.type===Ts.number?s.value:0}:{type:"INCREMENT_MODIFIER",increment:o,current:s.type===Ts.number?s.value:0}},sequence:25}).add("increment_number",{condition:e=>!e.isFormula&&Wn(e,{locale:$s}).type===Ts.number,generateRule:(e,t,o)=>{const s=_V(e,t,(e=>e.type===Ts.number&&!Rn(e.format||""))).map((e=>Number(e.value)));let i=OV(s);["up","left"].includes(o)&&1===s.length&&(i=-i);const n=Wn(e,{locale:$s});return{type:"INCREMENT_MODIFIER",increment:i,current:n.type===Ts.number?n.value:0}},sequence:40});class PV extends Ek{static layers=[];getters;ui;selection;dispatch;canDispatch;constructor({getters:e,stateObserver:t,dispatch:o,canDispatch:s,uiActions:i,selection:n}){super(t),this.getters=e,this.ui=i,this.selection=n,this.dispatch=o,this.canDispatch=s}drawLayer(e,t){}}class MV{cells;getters;index=0;direction;constructor(e,t,o){this.cells=e,this.getters=t,this.direction=o}next(){const e=this.cells[this.index++%this.cells.length],t=e.rule,{cellData:o,tooltip:s}=xV.get(t.type).apply(t,e.data,this.getters,this.direction);return{cellData:o,tooltip:s,origin:{col:e.data.col,row:e.data.row}}}}const NV=new class extends n{addTransformation(e,t,o){this.content[e]||(this.content[e]=new Map);for(const s of t)this.content[e].set(s,o);return this}getTransformation(e,t){return this.content[t]&&this.content[t].get(e)}};const kV=new class extends n{add(e,t){return super.add(e,t),this}replace(e,t){return super.replace(e,t),this}get(e){return this.content[e]}};function VV(e,t){if("SPREADSHEET"!==e.pivot.type)return e;if(e.pivot.dataSet?.sheetId!==t.sheetId)return e;const o=Yc(e.pivot.dataSet.zone,t),s=o?{...e.pivot.dataSet,zone:o}:void 0;return{...e,pivot:{...e.pivot,dataSet:s}}}function LV(e,t){if(e.sheetId!==t.sheetId)return e;if(("FREEZE_COLUMNS"===e.type?"COL":"ROW")!==t.dimension)return e;let o=e.quantity;if("REMOVE_COLUMNS_ROWS"===t.type){const e=[...t.elements].sort(((e,t)=>t-e));for(const t of e)o>t&&o--}if("ADD_COLUMNS_ROWS"===t.type){o=o>("before"===t.position?t.base-1:t.base)?o+t.quantity:o}return o>0?{...e,quantity:o}:void 0}function HV(e,t){if(e.sheetId!==t.sheetId)return e;const o=Yc(e.zone,t);if(!o)return;const s=e.newTableRange?Xc(e.newTableRange,t):void 0;return{...e,newTableRange:s,zone:o}}function UV(e,t){if(e.sheetId!==t.sheetId||e.dimension!==t.dimension)return e;let o;if("REMOVE_COLUMNS_ROWS"===t.type)o=na(t.elements,[e.base])[0];else if("ADD_COLUMNS_ROWS"===t.type){o=ia(pt(t.position,t.base),t.quantity,[e.base])[0]}return void 0!==o?{...e,base:o}:void 0}function BV(e,t){if(e.sheetId!==t.sheetId||e.dimension!==t.dimension)return e;const o=je(e.start,e.end+1);let s=[];if("REMOVE_COLUMNS_ROWS"===t.type)s=na(t.elements,o);else if("ADD_COLUMNS_ROWS"===t.type){s=ia(pt(t.position,t.base),t.quantity,o)}return 0!==s.length?{...e,start:Math.min(...s),end:Math.max(...s)}:void 0}function zV(e,t){return(e=ze(e)).pivot.measures.map((e=>{e.computedBy&&(e.computedBy.formula=HS(e.computedBy.sheetId,e.computedBy.formula,t))})),e}function $V(e,t){return{...e,definition:sx(e.sheetId,e.definition,t)}}NV.addTransformation("ADD_COLUMNS_ROWS",["ADD_COLUMNS_ROWS"],UV),NV.addTransformation("REMOVE_COLUMNS_ROWS",["ADD_COLUMNS_ROWS"],UV),NV.addTransformation("DELETE_SHEET",["MOVE_RANGES"],(function(e,t){const o=t.sheetId;if(e.targetSheetId===o||e.sheetId===o)return;return e})),NV.addTransformation("DELETE_FIGURE",["UPDATE_FIGURE","UPDATE_CHART"],(function(e,t){if(e.figureId===t.figureId)return;return e})),NV.addTransformation("CREATE_SHEET",["CREATE_SHEET"],(function(e,t){e.sheetId===t.sheetId&&(e={...e,sheetId:`${e.sheetId}~`});if(e.name===t.name)return{...e,name:e.name?.match(/\d+/)?e.name.replace(/\d+/,(e=>(parseInt(e)+1).toString())):`${e.name}~`,position:e.position+1};return e})),NV.addTransformation("ADD_MERGE",["ADD_MERGE","REMOVE_MERGE"],(function(e,t){if(e.sheetId!==t.sheetId)return e;const o=[];for(const s of e.target)t.target.every((e=>!Sr(s,e)))&&o.push(s);if(o.length)return{...e,target:o};return})),NV.addTransformation("ADD_COLUMNS_ROWS",["FREEZE_COLUMNS","FREEZE_ROWS"],LV),NV.addTransformation("REMOVE_COLUMNS_ROWS",["FREEZE_COLUMNS","FREEZE_ROWS"],LV),NV.addTransformation("ADD_COLUMNS_ROWS",["UPDATE_TABLE"],HV),NV.addTransformation("REMOVE_COLUMNS_ROWS",["UPDATE_TABLE"],HV),NV.addTransformation("REMOVE_TABLE_STYLE",["CREATE_TABLE","UPDATE_TABLE"],(function(e,t){if(e.config?.styleId!==t.tableStyleId)return e;return{...e,config:{...e.config,styleId:mR.styleId}}})),NV.addTransformation("ADD_COLUMNS_ROWS",["GROUP_HEADERS","UNGROUP_HEADERS","FOLD_HEADER_GROUP","UNFOLD_HEADER_GROUP"],BV),NV.addTransformation("REMOVE_COLUMNS_ROWS",["GROUP_HEADERS","UNGROUP_HEADERS","FOLD_HEADER_GROUP","UNFOLD_HEADER_GROUP"],BV),NV.addTransformation("REMOVE_PIVOT",["RENAME_PIVOT","DUPLICATE_PIVOT","INSERT_PIVOT","UPDATE_PIVOT"],(function(e,t){if(e.pivotId===t.pivotId)return;return e})),NV.addTransformation("DELETE_SHEET",["ADD_PIVOT","UPDATE_PIVOT"],(function(e,t){if("SPREADSHEET"!==e.pivot.type)return e;if(e.pivot.dataSet?.sheetId===t.sheetId)return{...e,pivot:{...e.pivot,dataSet:void 0}};return e})),NV.addTransformation("ADD_COLUMNS_ROWS",["ADD_PIVOT","UPDATE_PIVOT"],VV),NV.addTransformation("REMOVE_COLUMNS_ROWS",["ADD_PIVOT","UPDATE_PIVOT"],VV),kV.add("UPDATE_CELL",(function(e,t){const o=e.content&&HS(e.sheetId,e.content,t);return{...e,content:o}})),kV.add("ADD_CONDITIONAL_FORMAT",(function(e,t){const o=e.cf.rule;if(e={...e,cf:{...e.cf}},"CellIsRule"===o.type)e.cf.rule={...o,values:o.values.map((o=>HS(e.sheetId,o,t)))};else if("ColorScaleRule"===o.type){const{minimum:s,maximum:i,midpoint:n}=o;e.cf.rule={...o,minimum:{...s,value:s.value&&HS(e.sheetId,s.value,t)},maximum:{...i,value:i.value&&HS(e.sheetId,i.value,t)},midpoint:n?{...n,value:HS(e.sheetId,n.value,t)}:void 0}}else if("IconSetRule"===o.type){const{upperInflectionPoint:s,lowerInflectionPoint:i}=o;e.cf.rule={...o,upperInflectionPoint:{...s,value:HS(e.sheetId,s.value,t)},lowerInflectionPoint:{...i,value:HS(e.sheetId,i.value,t)}}}else"DataBarRule"===o.type&&(e.cf.rule={...o,rangeValues:o.rangeValues?US(e.sheetId,o.rangeValues,t):void 0});return e})),kV.add("ADD_DATA_VALIDATION_RULE",(function(e,t){return(e={...e,rule:{...e.rule,criterion:{...e.rule.criterion}}}).rule.criterion.values=e.rule.criterion.values.map((o=>HS(e.sheetId,o,t))),e})),kV.add("ADD_PIVOT",zV),kV.add("UPDATE_PIVOT",zV),kV.add("CREATE_CHART",$V),kV.add("UPDATE_CHART",$V);const GV=[{match:function(e){return"sheetId"in e},fn:ZV},{match:function(e){return"target"in e&&"sheetId"in e},fn:function(e,t){const o=ZV(e,t);if("SKIP_TRANSFORMATION"!==o)return"IGNORE_COMMAND"===o?"IGNORE_COMMAND":e;const s=[];for(const o of e.target){const e=Yc(o,t);e&&s.push(e)}if(!s.length)return"IGNORE_COMMAND";return{...e,target:s}}},{match:function(e){return"sheetId"in e&&"zone"in e},fn:function(e,t){const o=ZV(e,t);if("SKIP_TRANSFORMATION"!==o)return"IGNORE_COMMAND"===o?"IGNORE_COMMAND":e;const s=Yc(e.zone,t);if(s)return{...e,zone:s};return"IGNORE_COMMAND"}},{match:function(e){return"col"in e&&"row"in e&&"sheetId"in e},fn:function(e,t){const o=ZV(e,t);if("SKIP_TRANSFORMATION"!==o)return"IGNORE_COMMAND"===o?"IGNORE_COMMAND":e;if("ADD_COLUMNS_ROWS"===t.type||"REMOVE_COLUMNS_ROWS"===t.type)return function(e,t){const o="COL"===t.dimension?"col":"row";let s=e[o];if("REMOVE_COLUMNS_ROWS"===t.type){const e=[...t.elements].sort(((e,t)=>t-e));if(e.includes(s))return"IGNORE_COMMAND";for(const t of e)s>=t&&s--}"ADD_COLUMNS_ROWS"===t.type&&(s>t.base||s===t.base&&"before"===t.position)&&(s+=t.quantity);return{...e,[o]:s}}(e,t);if("ADD_MERGE"===t.type)return function(e,t){for(const o of t.target){if(!(e.col===o.left&&e.row===o.top)&&Cr(e.col,e.row,o))return"IGNORE_COMMAND"}return e}(e,t);return"SKIP_TRANSFORMATION"}},{match:function(e){return"dimension"in e&&"sheetId"in e&&"elements"in e},fn:function(e,t){const o=ZV(e,t);if("SKIP_TRANSFORMATION"!==o)return"IGNORE_COMMAND"===o?"IGNORE_COMMAND":e;if("ADD_COLUMNS_ROWS"!==t.type&&"REMOVE_COLUMNS_ROWS"!==t.type)return"SKIP_TRANSFORMATION";if(t.dimension!==e.dimension)return e;let s=[];if("REMOVE_COLUMNS_ROWS"===t.type)s=na(t.elements,e.elements);else if("ADD_COLUMNS_ROWS"===t.type){s=ia(pt(t.position,t.base),t.quantity,e.elements)}if(0===s.length)return"IGNORE_COMMAND";return{...e,elements:s}}},{match:function(e){return"ranges"in e},fn:function(e,t){if(!("sheetId"in t))return e;const o=e.ranges.map((e=>Xc(e,t))).filter(lt);if(!o.length)return"IGNORE_COMMAND";return{...e,ranges:o}}}];function WV(e,t){const o=NV.getTransformation(e.type,t.type),s=o?o(e,t):function(e,t){for(const{match:o,fn:s}of GV)if(o(e)){const o=s(e,t);if("SKIP_TRANSFORMATION"===o)continue;if("IGNORE_COMMAND"===o)return;e=o}return e}(e,t);return s?function(e,t){const o=kV.get(e.type);if(!o)return e;const s=ba(t);if(s)return o(e,s);return e}(s,t):s}function qV(e,t){let o=[...e];const s=new Set(NV.getKeys());for(const e of t)s.has(e.type)&&(o=o.reduce(((t,o)=>{const s=WV(o,e);return s&&t.push(s),t}),[]));return o}function ZV(e,t){if(!("sheetId"in t))return e;const o="DELETE_SHEET"===t.type&&t.sheetId;return e.sheetId===o?"IGNORE_COMMAND":"CREATE_SHEET"===e.type||"CREATE_SHEET"===t.type||e.sheetId!==t.sheetId?e:"SKIP_TRANSFORMATION"}class jV{rootCommand;timestamp;id;clientId;_commands=[];_changes=[];constructor(e,t,o,s,i,n){this.rootCommand=s,this.timestamp=n,this.id=e,this.clientId=t,this._commands=[...o],this._changes=i?[...i]:[]}setChanges(e){this._changes=e}get commands(){return this._commands}get changes(){return this._changes}}class YV extends Error{}class XV extends Kc{revisions;transportService;serverRevisionId;clients={};clientId="local";debouncedMove;pendingMessages=[];awaitingClientPosition;waitingAck=!1;waitingUndoRedoAck=!1;isReplayingInitialRevisions=!1;processedRevisions=new Set;lastRevisionMessage=void 0;uuidGenerator=new Wa;lastLocalOperation;constructor(e,t,o=Se){super(),this.revisions=e,this.transportService=t,this.serverRevisionId=o,this.debouncedMove=ht(this._move.bind(this),200)}canApplyOptimisticUpdate(){return!this.waitingUndoRedoAck}save(e,t,o){if(!t.length||!o.length||!this.canApplyOptimisticUpdate())return;const s=new jV(this.uuidGenerator.uuidv4(),this.clientId,t,e,o,Date.now());this.revisions.append(s.id,s),"REQUEST_REDO"!==e.type&&(this.lastLocalOperation=s),this.trigger("new-local-state-update",{id:s.id}),this.sendUpdateMessage({type:"REMOTE_REVISION",version:1,serverRevisionId:this.serverRevisionId,nextRevisionId:s.id,clientId:s.clientId,commands:s.commands})}undo(e){this.waitingUndoRedoAck=!0,this.sendUpdateMessage({type:"REVISION_UNDONE",version:1,serverRevisionId:this.serverRevisionId,nextRevisionId:this.uuidGenerator.uuidv4(),undoneRevisionId:e})}redo(e){this.waitingUndoRedoAck=!0,this.sendUpdateMessage({type:"REVISION_REDONE",version:1,serverRevisionId:this.serverRevisionId,nextRevisionId:this.uuidGenerator.uuidv4(),redoneRevisionId:e})}move(e){this.debouncedMove(e)}join(e){e?(this.clients[e.id]=e,this.clientId=e.id):(this.clients.local={id:"local",name:"local"},this.clientId="local"),this.transportService.onNewMessage(this.clientId,this.onMessageReceived.bind(this)),this.awaitingClientPosition&&(this._move(this.awaitingClientPosition),this.awaitingClientPosition=void 0)}loadInitialMessages(e){const t=performance.now(),o=e.reduce(((e,t)=>e+("REMOTE_REVISION"===t.type?t.commands.length:1)),0);this.isReplayingInitialRevisions=!0;for(const t of e)this.onMessageReceived(t);this.isReplayingInitialRevisions=!1,console.debug("Replayed",o,"commands in",performance.now()-t,"ms")}async leave(e){e&&1===Object.keys(this.clients).length&&this.lastRevisionMessage&&"SNAPSHOT_CREATED"!==this.lastRevisionMessage?.type&&await this.snapshot(e()),delete this.clients[this.clientId],this.transportService.leave(this.clientId),this.transportService.sendMessage({type:"CLIENT_LEFT",clientId:this.clientId,version:1})}async snapshot(e){if(0!==this.pendingMessages.length)return;const t=this.uuidGenerator.uuidv4();await this.transportService.sendMessage({type:"SNAPSHOT",nextRevisionId:t,serverRevisionId:this.serverRevisionId,data:{...e,revisionId:t},version:1})}getCurrentClient(){return this.getClient(this.clientId)}getClient(e){const t=this.clients[e];if(!t)throw new YV("The client left the session");return t}getConnectedClients(){return new Set(Object.values(this.clients).filter(lt))}getRevisionId(){return this.serverRevisionId}isFullySynchronized(){return 0===this.pendingMessages.length}getLastLocalNonEmptyRevision(){return this.lastLocalOperation}_move(e){if(!this.clients[this.clientId])return void(this.awaitingClientPosition=e);const t=this.clients[this.clientId]?.position;if(t?.col===e.col&&t.row===e.row&&t.sheetId===e.sheetId)return;const o=t?"CLIENT_MOVED":"CLIENT_JOINED",s=this.getCurrentClient();this.clients[this.clientId]={...s,position:e},this.transportService.sendMessage({type:o,version:1,client:{...s,position:e}})}onMessageReceived(e){if(!this.isAlreadyProcessed(e))if(this.isWrongServerRevisionId(e))this.trigger("unexpected-revision-id");else{switch(e.type){case"CLIENT_MOVED":this.onClientMoved(e);break;case"CLIENT_JOINED":this.onClientJoined(e);break;case"CLIENT_LEFT":this.onClientLeft(e);break;case"REVISION_REDONE":this.revisions.redo(e.redoneRevisionId,e.nextRevisionId,e.serverRevisionId),this.trigger("revision-redone",{revisionId:e.redoneRevisionId,commands:this.revisions.get(e.redoneRevisionId).commands});break;case"REVISION_UNDONE":this.revisions.undo(e.undoneRevisionId,e.nextRevisionId,e.serverRevisionId),this.trigger("revision-undone",{revisionId:e.undoneRevisionId,commands:this.revisions.get(e.undoneRevisionId).commands});break;case"REMOTE_REVISION":const{clientId:t,commands:o,timestamp:s}=e,i=new jV(e.nextRevisionId,t,o,void 0,void 0,s);if(i.clientId!==this.clientId){this.revisions.insert(i.id,i,e.serverRevisionId);const t=this.pendingMessages.filter((e=>"REMOTE_REVISION"===e.type)).map((e=>e.commands)).flat();this.trigger("remote-revision-received",{commands:qV(o,t)})}break;case"SNAPSHOT_CREATED":{const t=new jV(e.nextRevisionId,"server",[],void 0,void 0,Date.now());this.revisions.insert(t.id,t,e.serverRevisionId),this.dropPendingHistoryMessages(),this.trigger("snapshot"),this.lastLocalOperation=void 0;break}}this.acknowledge(e),this.trigger("collaborative-event-received")}}onClientMoved(e){e.client.id!==this.clientId&&(this.clients[e.client.id]=e.client)}onClientJoined(e){if(e.client.id!==this.clientId){this.clients[e.client.id]=e.client;const t=this.clients[this.clientId];if(t){const{position:e}=t;e&&this.transportService.sendMessage({type:"CLIENT_MOVED",version:1,client:{...t,position:e}})}}}onClientLeft(e){e.clientId!==this.clientId&&delete this.clients[e.clientId]}sendUpdateMessage(e){this.pendingMessages.push(e),this.waitingAck||this.sendPendingMessage()}sendPendingMessage(){let e=this.pendingMessages[0];if(e){if("REMOTE_REVISION"===e.type){let t=this.revisions.get(e.nextRevisionId);0===t.commands.length&&(this.revisions.rebase(t.id),t=this.revisions.get(e.nextRevisionId)),e={...e,clientId:t.clientId,commands:t.commands}}if(this.isReplayingInitialRevisions)throw new Error(`Trying to send a new revision while replaying initial revision. This can lead to endless dispatches every time the spreadsheet is open.\n ${JSON.stringify(e)}`);this.waitingAck=!0,this.transportService.sendMessage({...e,serverRevisionId:this.serverRevisionId})}}acknowledge(e){switch("REVISION_UNDONE"!==e.type&&"REVISION_REDONE"!==e.type||(this.waitingUndoRedoAck=!1),e.type){case"REMOTE_REVISION":case"REVISION_REDONE":case"SNAPSHOT_CREATED":this.waitingAck=!1,this.pendingMessages=this.pendingMessages.filter((t=>t.nextRevisionId!==e.nextRevisionId)),this.serverRevisionId=e.nextRevisionId,this.processedRevisions.add(e.nextRevisionId),this.lastRevisionMessage=e,this.sendPendingMessage();break;case"REVISION_UNDONE":{this.waitingAck=!1,this.pendingMessages=this.pendingMessages.filter((t=>t.nextRevisionId!==e.nextRevisionId));const t=this.pendingMessages.findIndex((e=>"REMOTE_REVISION"===e.type));-1!==t&&this.revisions.rebase(this.pendingMessages[t].nextRevisionId),this.serverRevisionId=e.nextRevisionId,this.processedRevisions.add(e.nextRevisionId),this.sendPendingMessage();break}}}isAlreadyProcessed(e){if("CLIENT_MOVED"===e.type&&e.client.id===this.clientId)return!0;switch(e.type){case"REMOTE_REVISION":case"REVISION_REDONE":case"REVISION_UNDONE":case"SNAPSHOT_CREATED":return this.processedRevisions.has(e.nextRevisionId);default:return!1}}isWrongServerRevisionId(e){switch(e.type){case"REMOTE_REVISION":case"REVISION_REDONE":case"REVISION_UNDONE":case"SNAPSHOT_CREATED":return e.serverRevisionId!==this.serverRevisionId;default:return!1}}dropPendingHistoryMessages(){this.waitingUndoRedoAck=!1,this.pendingMessages=this.pendingMessages.filter((({type:e})=>"REVISION_REDONE"!==e&&"REVISION_UNDONE"!==e))}}const KV=new Set(["HIDE_COLUMNS_ROWS","UNHIDE_COLUMNS_ROWS","UNFOLD_HEADER_GROUP","UNGROUP_HEADERS","FOLD_HEADER_GROUP","FOLD_ALL_HEADER_GROUPS","UNFOLD_ALL_HEADER_GROUPS","FOLD_HEADER_GROUPS_IN_ZONE","UNFOLD_HEADER_GROUPS_IN_ZONE","CREATE_TABLE","UPDATE_TABLE","UPDATE_FILTER","REMOVE_TABLE","RESIZE_TABLE","CREATE_TABLE_STYLE","REMOVE_TABLE_STYLE"]);function JV(e){return KV.has(e.type)}const QV=[eL,function(e,t){return"target"in t&&Array.isArray(t.target)?{...ze(t),target:e.getSelectedZones()}:t},oL,function(e,t){return"ranges"in t?{...ze(t),ranges:e.getSelectedZones().map((t=>e.getRangeDataFromZone(e.getActiveSheetId(),t)))}:t}];function eL(e,t){return"sheetId"in t?{...ze(t),sheetId:e.getActiveSheetId()}:t}function tL(e,t){return"zone"in t?{...ze(t),zone:e.getSelectedZone()}:t}function oL(e,t){if(!("row"in t)||!("col"in t))return t;const{col:o,row:s}=e.getActivePosition();return{...ze(t),col:o,row:s}}const sL=new Wa;function iL(e,t){const o=e.getSelectedZone();return{...eL(e,t),elements:"COL"===t.dimension?je(o.left,o.right+1):je(o.top,o.bottom+1)}}function nL(e,t){const o=e.getSelectedZone();return{...ze(t),zone:o}}function rL(e,t){const o=ze(t),s=e.getSelectedZone(),{top:i,bottom:n,left:r,right:a}=s;return"cols"in o?o.cols=je(r,a+1):"rows"in o&&(o.rows=je(i,n+1)),o}function aL(e,t){const o=e.getSelectedZone();return{...eL(e,t),start:"COL"===t.dimension?o.left:o.top,end:"COL"===t.dimension?o.right:o.bottom}}const lL=new n;lL.add("UPDATE_CELL",hL),lL.add("CLEAR_CELL",hL),lL.add("CLEAR_CELLS",hL),lL.add("DELETE_CONTENT",hL),lL.add("ADD_MERGE",hL),lL.add("REMOVE_MERGE",hL),lL.add("SET_FORMATTING",hL),lL.add("CLEAR_FORMATTING",hL),lL.add("SET_BORDER",hL),lL.add("CREATE_TABLE",hL),lL.add("REMOVE_TABLE",hL),lL.add("HIDE_SHEET",hL),lL.add("ADD_COLUMNS_ROWS",(function(e,t){const o=e.getActivePosition();return{...eL(e,t),base:"COL"===t.dimension?o.col:o.row}})),lL.add("REMOVE_COLUMNS_ROWS",iL),lL.add("HIDE_COLUMNS_ROWS",iL),lL.add("RESIZE_COLUMNS_ROWS",iL),lL.add("CREATE_SHEET",(function(e,t){const o=ze(t);o.sheetId=sL.smallUuid();const s=t.name||e.getSheet(e.getActiveSheetId()).name,i=s.match(/(.+?)\d*$/)?.[1]||s;return o.name=e.getNextSheetName(i),o})),lL.add("CREATE_FIGURE",(function(e,t){const o=oL(e,eL(e,t));return o.figureId=sL.smallUuid(),o})),lL.add("CREATE_CHART",(function(e,t){return{...eL(e,t),figureId:sL.smallUuid()}})),lL.add("CREATE_IMAGE",(function(e,t){return{...eL(e,t),figureId:sL.smallUuid()}})),lL.add("GROUP_HEADERS",aL),lL.add("UNGROUP_HEADERS",aL),lL.add("UNFOLD_HEADER_GROUPS_IN_ZONE",tL),lL.add("FOLD_HEADER_GROUPS_IN_ZONE",tL);const cL=new n;function hL(e,t){let o=ze(t);for(const t of QV)o=t(e,o);return o}function dL(e,t){if(e.rootCommand&&"object"==typeof e.rootCommand)return ks(e.rootCommand)?function(e,t){if(!t)return;if(!lL.contains(t.type))return;return lL.get(t.type)(e,t)}(t,e.rootCommand):function(e,t,o){if(!cL.contains(t.type))return;return cL.get(t.type)(e,t,o)}(t,e.rootCommand,e.commands)}cL.add("PASTE",(function(e,t){return{type:"REPEAT_PASTE",pasteOption:ze(t.pasteOption),target:e.getSelectedZones()}})),cL.add("INSERT_CELL",nL),cL.add("DELETE_CELL",nL),cL.add("AUTORESIZE_COLUMNS",rL),cL.add("AUTORESIZE_ROWS",rL),cL.add("SORT_CELLS",(function(e,t){const o=e.getSelectedZone();return{...eL(e,t),col:o.left,row:o.top,zone:o}})),cL.add("SUM_SELECTION",hL),cL.add("SET_DECIMAL",hL),cL.add("DELETE_UNFILTERED_CONTENT",hL);class uL{trackedValues=new Set;domainToArray(e){return e.flatMap((e=>[e.field,Si(e.value)]))}isValuePresent(e,t){const o=JSON.stringify({measure:e,domain:this.domainToArray(t)});return this.trackedValues.has(o)}isHeaderPresent(e){const t=JSON.stringify({domain:this.domainToArray(e)});return this.trackedValues.has(t)}trackValue(e,t){const o=JSON.stringify({measure:e,domain:this.domainToArray(t)});this.trackedValues.add(o)}trackHeader(e){const t=JSON.stringify({domain:this.domainToArray(e)});this.trackedValues.add(t)}}const gL=5242880;const pL={filterType:"criterion",type:"none",values:[]};class mL{getters;sheetId;boundaries;top;bottom;left;right;offsetX;offsetY;canScrollVertically;canScrollHorizontally;viewportWidth;viewportHeight;offsetCorrectionX;offsetCorrectionY;constructor(e,t,o,s,i,n){if(this.getters=e,this.sheetId=t,this.boundaries=o,s.width<0||s.height<0)throw new Error("Viewport size cannot be negative");this.viewportWidth=s.height&&s.width,this.viewportHeight=s.width&&s.height,this.top=o.top,this.bottom=o.bottom,this.left=o.left,this.right=o.right,this.offsetX=n.x,this.offsetY=n.y,this.canScrollVertically=i.canScrollVertically,this.canScrollHorizontally=i.canScrollHorizontally,this.offsetCorrectionX=this.getters.getColDimensions(this.sheetId,this.boundaries.left).start,this.offsetCorrectionY=this.getters.getRowDimensions(this.sheetId,this.boundaries.top).start,this.adjustViewportOffsetX(),this.adjustViewportOffsetY()}getMaxSize(){const e=this.getters.findLastVisibleColRowIndex(this.sheetId,"COL",{first:this.boundaries.left,last:this.boundaries.right}),t=this.getters.findLastVisibleColRowIndex(this.sheetId,"ROW",{first:this.boundaries.top,last:this.boundaries.bottom}),{end:o}=this.getters.getColDimensions(this.sheetId,e),{end:s}=this.getters.getRowDimensions(this.sheetId,t);let i=o-this.offsetCorrectionX;this.canScrollHorizontally&&(i=Math.max(i,this.viewportWidth));let n=s-this.offsetCorrectionY;return this.canScrollVertically&&(n=Math.max(n,this.viewportHeight),s+he>n&&!this.getters.isReadonly()&&(n+=he)),{width:i,height:n}}getColIndex(e){return e<this.offsetCorrectionX||e>this.offsetCorrectionX+this.viewportWidth?-1:this.searchHeaderIndex("COL",e-this.offsetCorrectionX+this.snapCorrection.x,this.left)}getRowIndex(e){return e<this.offsetCorrectionY||e>this.offsetCorrectionY+this.viewportHeight?-1:this.searchHeaderIndex("ROW",e-this.offsetCorrectionY+this.snapCorrection.y,this.top)}adjustPosition(e){const t=this.sheetId,o=this.getters.getMainCellPosition({sheetId:t,...e}),{col:s,row:i}=this.getters.getNextVisibleCellPosition(o);Cr(s,this.boundaries.top,this.boundaries)&&this.adjustPositionX(s),Cr(this.boundaries.left,i,this.boundaries)&&this.adjustPositionY(i)}adjustPositionX(e){const t=this.sheetId,{start:o,end:s}=this.getters.getColDimensions(t,e);this.offsetX+this.viewportWidth+this.offsetCorrectionX<s?this.offsetX=s-this.viewportWidth:this.offsetX+this.offsetCorrectionX>o&&(this.offsetX=o-this.offsetCorrectionX),this.adjustViewportZoneX()}adjustPositionY(e){const t=this.sheetId,{start:o,end:s}=this.getters.getRowDimensions(t,e);this.offsetY+this.viewportHeight+this.offsetCorrectionY<s?this.offsetY=s-this.viewportHeight:this.offsetY+this.offsetCorrectionY>o&&(this.offsetY=o-this.offsetCorrectionY),this.adjustViewportZoneY()}willNewOffsetScrollViewport(e,t){return this.canScrollHorizontally&&this.offsetX!==e||this.canScrollVertically&&this.offsetY!==t}setViewportOffset(e,t){this.setViewportOffsetX(e),this.setViewportOffsetY(t)}adjustViewportZone(){this.adjustViewportZoneX(),this.adjustViewportZoneY()}getVisibleRect(e){const t=vr(e,this),o=this.snapCorrection.x,s=this.snapCorrection.y;if(t){return{x:this.getters.getColRowOffset("COL",this.left,t.left)+this.offsetCorrectionX-(this.left!==t.left?o:0),y:this.getters.getColRowOffset("ROW",this.top,t.top)+this.offsetCorrectionY-(this.top!==t.top?s:0),width:Math.min(this.getters.getColRowOffset("COL",t.left,t.right+1)-(this.left===t.left?o:0),this.viewportWidth),height:Math.min(this.getters.getColRowOffset("ROW",t.top,t.bottom+1)-(this.top===t.top?s:0),this.viewportHeight)}}}getFullRect(e){const t=vr(e,this.boundaries),o=this.snapCorrection.x,s=this.snapCorrection.y;if(t){return{x:this.getters.getColRowOffset("COL",this.left,e.left)+this.offsetCorrectionX-o,y:this.getters.getColRowOffset("ROW",this.top,e.top)+this.offsetCorrectionY-s,width:this.getters.getColRowOffset("COL",e.left,e.right+1),height:this.getters.getColRowOffset("ROW",e.top,e.bottom+1)}}}isVisible(e,t){return t<=this.bottom&&t>=this.top&&e>=this.left&&e<=this.right&&!this.getters.isColHidden(this.sheetId,e)&&!this.getters.isRowHidden(this.sheetId,t)}searchHeaderIndex(e,t,o=0){if(this.viewportWidth<=0||this.viewportHeight<=0)return-1;const s=this.sheetId,i=this.getters.getNumberHeaders(s,e);let n=o,r=i;for(;n<=r&&n!==i&&-1!==r;){const i=Math.floor((n+r)/2),a=this.getters.getColRowOffset(e,o,i),l=this.getters.getHeaderSize(s,e,i);if(t>=a&&t<a+l)return i;t>=a+l?n=i+1:r=i-1}return-1}setViewportOffsetX(e){this.canScrollHorizontally&&(this.offsetX=e,this.adjustViewportZoneX())}setViewportOffsetY(e){this.canScrollVertically&&(this.offsetY=e,this.adjustViewportZoneY())}adjustViewportOffsetX(){if(this.canScrollHorizontally){const{width:e}=this.getMaxSize();this.viewportWidth+this.offsetX>e&&(this.offsetX=Math.max(0,e-this.viewportWidth))}this.adjustViewportZoneX()}adjustViewportOffsetY(){if(this.canScrollVertically){const{height:e}=this.getMaxSize();this.viewportHeight+this.offsetY>e&&(this.offsetY=Math.max(0,e-this.viewportHeight))}this.adjustViewportZoneY()}adjustViewportZoneX(){this.left=this.searchHeaderIndex("COL",this.offsetX,this.boundaries.left),this.right=Math.min(this.boundaries.right,this.searchHeaderIndex("COL",Math.max(this.viewportWidth+this.snapCorrection.x-.1),this.left)),this.viewportWidth&&(-1===this.left&&(this.left=this.boundaries.left),-1===this.right&&(this.right=this.boundaries.right))}adjustViewportZoneY(){this.top=this.searchHeaderIndex("ROW",this.offsetY,this.boundaries.top),this.bottom=Math.min(this.boundaries.bottom,this.searchHeaderIndex("ROW",Math.max(this.viewportHeight+this.snapCorrection.y-.1,0),this.top)),this.viewportHeight&&(-1===this.top&&(this.top=this.boundaries.top),-1===this.bottom&&(this.bottom=this.boundaries.bottom))}get snapCorrection(){return{x:Math.abs(this.offsetX-this.getters.getColRowOffset("COL",this.boundaries.left,Math.max(0,this.left))),y:Math.abs(this.offsetY-this.getters.getColRowOffset("ROW",this.boundaries.top,Math.max(0,this.top)))}}}const fL=(new n).add("settings",class extends Rk{static getters=["getLocale"];locale=$s;allowDispatch(e){return"UPDATE_LOCALE"===e.type?Sl(e.locale)?"Success":"InvalidLocale":"Success"}handle(e){if("UPDATE_LOCALE"===e.type){const t=this.locale,o=e.locale;this.history.update("locale",o),this.changeCellsDateFormatWithLocale(t,o)}}getLocale(){return this.locale}changeCellsDateFormatWithLocale(e,t){for(const o of this.getters.getSheetIds())for(const[s,i]of Object.entries(this.getters.getCells(o))){let o;if(i.format===e.dateFormat&&(o=t.dateFormat),i.format===e.timeFormat&&(o=t.timeFormat),i.format===Pl(e)&&(o=Pl(t)),o){const{col:e,row:t,sheetId:i}=this.getters.getCellPosition(s);this.dispatch("UPDATE_CELL",{col:e,row:t,sheetId:i,format:o})}}}import(e){this.locale=e.settings?.locale??$s}export(e){e.settings={locale:this.locale}}}).add("sheet",class extends Rk{static getters=["getSheetName","tryGetSheetName","getSheet","tryGetSheet","getSheetIdByName","getSheetIds","getVisibleSheetIds","isSheetVisible","doesHeaderExist","doesHeadersExist","getCell","getCellPosition","getColsZone","getRowCells","getRowsZone","getNumberCols","getNumberRows","getNumberHeaders","getGridLinesVisibility","getNextSheetName","getSheetSize","getSheetZone","getPaneDivisions","checkZonesExistInSheet","getCommandZones","getUnboundedZone","checkElementsIncludeAllNonFrozenHeaders","getDuplicateSheetName"];sheetIdsMapName={};orderedSheetIds=[];sheets={};cellPosition={};allowDispatch(e){const t=this.chainValidations(this.checkSheetExists,this.checkZonesAreInSheet)(e);if("Success"!==t)return t;switch(e.type){case"HIDE_SHEET":return 1===this.getVisibleSheetIds().length?"NotEnoughSheets":"Success";case"CREATE_SHEET":return this.checkValidations(e,this.checkSheetName,this.checkSheetPosition);case"DUPLICATE_SHEET":return this.sheets[e.sheetIdTo]?"DuplicatedSheetId":this.orderedSheetIds.map(this.getSheetName.bind(this)).includes(e.sheetNameTo)?"DuplicatedSheetName":"Success";case"MOVE_SHEET":try{const t=this.orderedSheetIds.findIndex((t=>t===e.sheetId));return this.findIndexOfTargetSheet(t,e.delta),"Success"}catch(e){return"WrongSheetMove"}case"RENAME_SHEET":return this.isRenameAllowed(e);case"COLOR_SHEET":return!e.color||Gt(e.color)?"Success":"InvalidColor";case"DELETE_SHEET":return this.getVisibleSheetIds().length>1?"Success":"NotEnoughSheets";case"ADD_COLUMNS_ROWS":return this.doesHeaderExist(e.sheetId,e.dimension,e.base)?e.quantity<=0?"InvalidQuantity":"Success":"InvalidHeaderIndex";case"REMOVE_COLUMNS_ROWS":{const t=Ft(e.elements),o=Ot(e.elements);return t<0||!this.doesHeaderExist(e.sheetId,e.dimension,o)?"InvalidHeaderIndex":this.checkElementsIncludeAllNonFrozenHeaders(e.sheetId,e.dimension,e.elements)?"NotEnoughElements":"Success"}case"FREEZE_ROWS":return this.checkValidations(e,this.checkRowFreezeQuantity,this.checkRowFreezeOverlapMerge);case"FREEZE_COLUMNS":return this.checkValidations(e,this.checkColFreezeQuantity,this.checkColFreezeOverlapMerge);default:return"Success"}}handle(e){switch(e.type){case"SET_GRID_LINES_VISIBILITY":this.setGridLinesVisibility(e.sheetId,e.areGridLinesVisible);break;case"CREATE_SHEET":const t=this.createSheet(e.sheetId,e.name||this.getNextSheetName(),e.cols||26,e.rows||100,e.position);this.history.update("sheetIdsMapName",t.name,t.id);break;case"MOVE_SHEET":this.moveSheet(e.sheetId,e.delta);break;case"RENAME_SHEET":this.renameSheet(this.sheets[e.sheetId],e.newName);break;case"COLOR_SHEET":this.history.update("sheets",e.sheetId,"color",e.color);break;case"HIDE_SHEET":this.hideSheet(e.sheetId);break;case"SHOW_SHEET":this.showSheet(e.sheetId);break;case"DUPLICATE_SHEET":this.duplicateSheet(e.sheetId,e.sheetIdTo,e.sheetNameTo);break;case"DELETE_SHEET":this.deleteSheet(this.sheets[e.sheetId]);break;case"REMOVE_COLUMNS_ROWS":"COL"===e.dimension?this.removeColumns(this.sheets[e.sheetId],[...e.elements]):this.removeRows(this.sheets[e.sheetId],[...e.elements]);break;case"ADD_COLUMNS_ROWS":"COL"===e.dimension?this.addColumns(this.sheets[e.sheetId],e.base,e.position,e.quantity):this.addRows(this.sheets[e.sheetId],e.base,e.position,e.quantity);break;case"UPDATE_CELL_POSITION":this.updateCellPosition(e);break;case"FREEZE_COLUMNS":this.setPaneDivisions(e.sheetId,e.quantity,"COL");break;case"FREEZE_ROWS":this.setPaneDivisions(e.sheetId,e.quantity,"ROW");break;case"UNFREEZE_ROWS":this.setPaneDivisions(e.sheetId,0,"ROW");break;case"UNFREEZE_COLUMNS":this.setPaneDivisions(e.sheetId,0,"COL");break;case"UNFREEZE_COLUMNS_ROWS":this.setPaneDivisions(e.sheetId,0,"COL"),this.setPaneDivisions(e.sheetId,0,"ROW")}}import(e){for(const t of e.sheets)this.sheetIdsMapName[t.name]=t.id;for(const t of e.sheets){const e=t.name||"Sheet"+(Object.keys(this.sheets).length+1),{colNumber:o,rowNumber:s}=this.getImportedSheetSize(t),i={id:t.id,name:e,numberOfCols:o,rows:sa(s),areGridLinesVisible:void 0===t.areGridLinesVisible||t.areGridLinesVisible,isVisible:t.isVisible,panes:{xSplit:t.panes?.xSplit||0,ySplit:t.panes?.ySplit||0},color:t.color};this.orderedSheetIds.push(i.id),this.sheets[i.id]=i}}exportSheets(e){e.sheets=this.orderedSheetIds.filter(lt).map((e=>{const t=this.sheets[e],o={id:t.id,name:t.name,colNumber:t.numberOfCols,rowNumber:this.getters.getNumberRows(t.id),rows:{},cols:{},merges:[],cells:{},styles:{},formats:{},borders:{},conditionalFormats:[],dataValidationRules:[],figures:[],tables:[],areGridLinesVisible:void 0===t.areGridLinesVisible||t.areGridLinesVisible,isVisible:t.isVisible,color:t.color};return(t.panes.xSplit||t.panes.ySplit)&&(o.panes=t.panes),o}))}export(e){this.exportSheets(e)}exportForExcel(e){this.exportSheets(e)}getGridLinesVisibility(e){return this.getSheet(e).areGridLinesVisible}tryGetSheet(e){return this.sheets[e]}getSheet(e){const t=this.sheets[e];if(!t)throw new Error(`Sheet ${e} not found.`);return t}isSheetVisible(e){return this.getSheet(e).isVisible}getSheetName(e){return this.getSheet(e).name}tryGetSheetName(e){return this.tryGetSheet(e)?.name}getSheetIdByName(e){if(e){const t=$e(e);for(const e in this.sheetIdsMapName)if(la(e,t))return this.sheetIdsMapName[e]}}getSheetIds(){return this.orderedSheetIds}getVisibleSheetIds(){return this.orderedSheetIds.filter(this.isSheetVisible.bind(this))}doesHeaderExist(e,t,o){return"COL"===t?o>=0&&o<this.getNumberCols(e):o>=0&&o<this.getNumberRows(e)}doesHeadersExist(e,t,o){return o.every((o=>this.doesHeaderExist(e,t,o)))}getCell({sheetId:e,col:t,row:o}){const s=this.tryGetSheet(e),i=s?.rows[o]?.cells[t];if(void 0!==i)return this.getters.getCellById(i)}getColsZone(e,t,o){return{top:0,bottom:this.getNumberRows(e)-1,left:t,right:o}}getRowCells(e,t){return Object.values(this.getSheet(e).rows[t]?.cells).filter(lt)}getRowsZone(e,t,o){return{top:t,bottom:o,left:0,right:this.getSheet(e).numberOfCols-1}}getCellPosition(e){const t=this.cellPosition[e];if(!t)throw new Error(`asking for a cell position that doesn't exist, cell id: ${e}`);return t}getNumberCols(e){return this.getSheet(e).numberOfCols}getNumberRows(e){return this.getSheet(e).rows.length}getNumberHeaders(e,t){return"COL"===t?this.getNumberCols(e):this.getNumberRows(e)}getNextSheetName(e="Sheet"){return ra(this.orderedSheetIds.map(this.getSheetName.bind(this)),e)}getSheetSize(e){return{numberOfRows:this.getNumberRows(e),numberOfCols:this.getNumberCols(e)}}getSheetZone(e){return{top:0,left:0,bottom:this.getNumberRows(e)-1,right:this.getNumberCols(e)-1}}getUnboundedZone(e,t){if(void 0===t.bottom||void 0===t.right)return t;const o=0===t.left&&t.right===this.getNumberCols(e)-1,s=0===t.top&&t.bottom===this.getNumberRows(e)-1;return{...t,bottom:s?void 0:t.bottom,right:o&&!s?void 0:t.right}}getPaneDivisions(e){return this.getSheet(e).panes}setPaneDivisions(e,t,o){const s={...this.getPaneDivisions(e)};"COL"===o?s.xSplit=t:"ROW"===o&&(s.ySplit=t),this.history.update("sheets",e,"panes",s)}checkElementsIncludeAllNonFrozenHeaders(e,t,o){const s=this.getters.getPaneDivisions(e),i="ROW"===t?s.ySplit:s.xSplit,n=this.getters.getNumberHeaders(e,t);if(!i)return!1;return vt(o,je(i,n))}getCommandZones(e){const t=[];return"zone"in e&&t.push(e.zone),"target"in e&&t.push(...e.target),"ranges"in e&&t.push(...e.ranges.map((e=>this.getters.getRangeFromRangeData(e).zone))),"col"in e&&void 0!==e.col&&"row"in e&&void 0!==e.row&&t.push({top:e.row,left:e.col,bottom:e.row,right:e.col}),t}checkZonesExistInSheet(e,t){if(!t.every(cr))return"InvalidRange";if(t.length){const o=this.getSheetZone(e);return t.every((e=>yr(e,o)))?"Success":"TargetOutOfSheet"}return"Success"}updateCellPosition(e){const{sheetId:t,cellId:o,col:s,row:i}=e;o?this.setNewPosition(o,t,s,i):this.clearPosition(t,s,i)}setNewPosition(e,t,o,s){const i=this.cellPosition[e];i&&this.clearPosition(t,i.col,i.row),this.history.update("cellPosition",e,{row:s,col:o,sheetId:t}),this.history.update("sheets",t,"rows",s,"cells",o,e)}clearPosition(e,t,o){const s=this.sheets[e]?.rows[o].cells[t];s&&(this.history.update("cellPosition",s,void 0),this.history.update("sheets",e,"rows",o,"cells",t,void 0))}setGridLinesVisibility(e,t){this.history.update("sheets",e,"areGridLinesVisible",t)}createSheet(e,t,o,s,i){const n={id:e,name:t,numberOfCols:o,rows:sa(s),areGridLinesVisible:!0,isVisible:!0,panes:{xSplit:0,ySplit:0}},r=this.orderedSheetIds.slice();r.splice(i,0,n.id);const a=this.sheets;return this.history.update("orderedSheetIds",r),this.history.update("sheets",Object.assign({},a,{[n.id]:n})),n}moveSheet(e,t){const o=this.orderedSheetIds.slice(),s=o.findIndex((t=>t===e)),i=o.splice(s,1),n=this.findIndexOfTargetSheet(s,t);o.splice(n,0,i[0]),this.history.update("orderedSheetIds",o)}findIndexOfTargetSheet(e,t){for(;0!==t&&0<=e&&e<=this.orderedSheetIds.length;)t>0?(e++,this.isSheetVisible(this.orderedSheetIds[e])&&t--):t<0&&(e--,this.isSheetVisible(this.orderedSheetIds[e])&&t++);if(0===t)return e;throw new Error("There is not enough visible sheets")}checkSheetName(e){const t=this.getters.tryGetSheetName(e.sheetId),o="RENAME_SHEET"===e.type?e.newName:e.name;if(void 0!==t&&o===t)return"UnchangedSheetName";const{orderedSheetIds:s,sheets:i}=this,n=o&&o.trim().toLowerCase();return s.find((t=>la(i[t]?.name,n)&&t!==e.sheetId))?"DuplicatedSheetName":_e.test(n)?"ForbiddenCharactersInSheetName":"Success"}checkSheetPosition(e){const{orderedSheetIds:t}=this;return e.position>t.length||e.position<0?"WrongSheetPosition":"Success"}checkRowFreezeQuantity(e){return e.quantity>=1&&e.quantity<this.getNumberRows(e.sheetId)?"Success":"InvalidFreezeQuantity"}checkColFreezeQuantity(e){return e.quantity>=1&&e.quantity<this.getNumberCols(e.sheetId)?"Success":"InvalidFreezeQuantity"}checkRowFreezeOverlapMerge(e){const t=this.getters.getMerges(e.sheetId);for(const o of t)if(o.top<e.quantity&&e.quantity<=o.bottom)return"MergeOverlap";return"Success"}checkColFreezeOverlapMerge(e){const t=this.getters.getMerges(e.sheetId);for(const o of t)if(o.left<e.quantity&&e.quantity<=o.right)return"MergeOverlap";return"Success"}isRenameAllowed(e){return e.newName&&e.newName.trim().toLowerCase()?this.checkSheetName(e):"MissingSheetName"}renameSheet(e,t){const o=e.name;this.history.update("sheets",e.id,"name",t.trim());const s=Object.assign({},this.sheetIdsMapName);delete s[o],s[t]=e.id,this.history.update("sheetIdsMapName",s)}hideSheet(e){this.history.update("sheets",e,"isVisible",!1)}showSheet(e){this.history.update("sheets",e,"isVisible",!0)}duplicateSheet(e,t,o){const s=ze(this.getSheet(e));s.id=t,s.name=o;for(let e=0;e<=s.numberOfCols;e++)for(let t=0;t<=s.rows.length;t++)s.rows[t]&&(s.rows[t].cells[e]=void 0);const i=this.orderedSheetIds.slice(),n=i.indexOf(e);i.splice(n+1,0,s.id),this.history.update("orderedSheetIds",i),this.history.update("sheets",Object.assign({},this.sheets,{[s.id]:s}));for(const t of Object.values(this.getters.getCells(e))){const{col:e,row:o}=this.getCellPosition(t.id);this.dispatch("UPDATE_CELL",{sheetId:s.id,col:e,row:o,content:t.content,format:t.format,style:t.style})}const r=Object.assign({},this.sheetIdsMapName);r[s.name]=s.id,this.history.update("sheetIdsMapName",r)}getDuplicateSheetName(e){return aa(e,this.orderedSheetIds.map(this.getSheetName.bind(this)))}deleteSheet(e){const t=e.name,o=Object.assign({},this.sheets);delete o[e.id],this.history.update("sheets",o);const s=this.orderedSheetIds.slice(),i=s.indexOf(e.id);s.splice(i,1),this.history.update("orderedSheetIds",s);const n=Object.assign({},this.sheetIdsMapName);delete n[t],this.history.update("sheetIdsMapName",n)}removeColumns(e,t){t.sort(((e,t)=>t-e));for(const o of t)this.moveCellOnColumnsDeletion(e,o);const o=this.sheets[e.id].numberOfCols;this.history.update("sheets",e.id,"numberOfCols",o-t.length);const s=t.filter((t=>t<e.panes.xSplit)).length;s&&this.setPaneDivisions(e.id,e.panes.xSplit-s,"COL")}removeRows(e,t){t.sort(((e,t)=>t-e));for(const o of Ye(t)){const t=o[o.length-1],s=o[0];this.moveCellOnRowsDeletion(e,t,s),this.updateRowsStructureOnDeletion(e,t,s)}const o=t.filter((t=>t<e.panes.ySplit)).length;o&&this.setPaneDivisions(e.id,e.panes.ySplit-o,"ROW")}addColumns(e,t,o,s){const i="before"===o?t:t+1;this.moveCellsOnAddition(e,i,s,"columns");const n=this.sheets[e.id].numberOfCols;this.history.update("sheets",e.id,"numberOfCols",n+s),i<e.panes.xSplit&&this.setPaneDivisions(e.id,e.panes.xSplit+s,"COL")}addRows(e,t,o,s){const i="before"===o?t:t+1;this.addEmptyRows(e,s),this.moveCellsOnAddition(e,i,s,"rows"),i<e.panes.ySplit&&this.setPaneDivisions(e.id,e.panes.ySplit+s,"ROW")}moveCellOnColumnsDeletion(e,t){this.dispatch("CLEAR_CELLS",{sheetId:e.id,target:[{left:t,top:0,right:t,bottom:e.rows.length-1}]});for(let o=0;o<e.rows.length;o++){const s=e.rows[o];for(const i in s.cells){const n=Number(i),r=s.cells[i];r&&n>t&&this.setNewPosition(r,e.id,n-1,o)}}}moveCellsOnAddition(e,t,o,s){const i=[];for(let n=0;n<e.rows.length;n++){const r=e.rows[n];if("rows"!==s||n>=t)for(const a in r.cells){const l=Number(a),c=r.cells[a];c&&("rows"===s||l>=t)&&i.push({sheetId:e.id,cellId:c,col:l+("columns"===s?o:0),row:n+("rows"===s?o:0),type:"UPDATE_CELL_POSITION"})}}for(const e of i.reverse())this.updateCellPosition(e)}moveCellOnRowsDeletion(e,t,o){this.dispatch("CLEAR_CELLS",{sheetId:e.id,target:[{left:0,top:t,right:this.getters.getNumberCols(e.id),bottom:o}]});const s=o-t+1;for(let t=0;t<e.rows.length;t++){const i=e.rows[t];if(t>o)for(const o in i.cells){const n=Number(o),r=i.cells[o];r&&this.setNewPosition(r,e.id,n,t-s)}}}updateRowsStructureOnDeletion(e,t,o){const s=[],i=e.rows.map((e=>e.cells)).reverse();for(const n in e.rows){const e=Number(n);e>=t&&e<=o||s.push({cells:i.pop()})}this.history.update("sheets",e.id,"rows",s)}addEmptyRows(e,t){const o=e.rows.slice();for(let e=0;e<t;e++)o.push({cells:{}});this.history.update("sheets",e.id,"rows",o)}getImportedSheetSize(e){const t=Object.keys(e.cells).map(_o);let o=e.rowNumber,s=e.colNumber;for(const{col:e,row:i}of t)o=Math.max(o,i+1),s=Math.max(s,e+1);return{rowNumber:o,colNumber:s}}checkSheetExists(e){return"CREATE_SHEET"!==e.type&&"sheetId"in e&&void 0===this.sheets[e.sheetId]?"InvalidSheetId":"CREATE_SHEET"===e.type&&void 0!==this.sheets[e.sheetId]?"DuplicatedSheetId":"Success"}checkZonesAreInSheet(e){return"sheetId"in e?"ranges"in e&&e.ranges.some((e=>""!==e._sheetId&&!this.getters.tryGetSheet(e._sheetId)))?"InvalidSheetId":this.checkZonesExistInSheet(e.sheetId,this.getCommandZones(e)):"Success"}}).add("header grouping",class extends Rk{static getters=["getHeaderGroups","getGroupsLayers","getVisibleGroupLayers","getHeaderGroup","getHeaderGroupsInZone","isGroupFolded","isRowFolded","isColFolded"];groups={};allowDispatch(e){switch(e.type){case"GROUP_HEADERS":{const{start:t,end:o,sheetId:s}=e;if(!this.getters.tryGetSheet(s))return"InvalidSheetId";if(!this.getters.doesHeadersExist(e.sheetId,e.dimension,[t,o]))return"InvalidHeaderGroupStartEnd";if(t>o)return"InvalidHeaderGroupStartEnd";if(this.findGroupWithStartEnd(e.sheetId,e.dimension,t,o))return"HeaderGroupAlreadyExists";break}case"UNGROUP_HEADERS":{const{start:t,end:o,sheetId:s}=e;if(!this.getters.tryGetSheet(s))return"InvalidSheetId";if(!this.getters.doesHeadersExist(e.sheetId,e.dimension,[t,o]))return"InvalidHeaderGroupStartEnd";if(t>o)return"InvalidHeaderGroupStartEnd";break}case"UNFOLD_HEADER_GROUP":case"FOLD_HEADER_GROUP":if(!this.getters.tryGetSheet(e.sheetId))return"InvalidSheetId";const t=this.findGroupWithStartEnd(e.sheetId,e.dimension,e.start,e.end);if(!t)return"UnknownHeaderGroup";if(je(0,this.getters.getNumberHeaders(e.sheetId,e.dimension)).every((o=>o>=t.start&&o<=t.end||this.getters.isHeaderHiddenByUser(e.sheetId,e.dimension,o))))return"NotEnoughElements"}return"Success"}handle(e){switch(e.type){case"CREATE_SHEET":this.history.update("groups",e.sheetId,{ROW:[],COL:[]});break;case"GROUP_HEADERS":this.groupHeaders(e.sheetId,e.dimension,e.start,e.end);break;case"UNGROUP_HEADERS":this.unGroupHeaders(e.sheetId,e.dimension,e.start,e.end);break;case"DUPLICATE_SHEET":{const t=ze(this.groups[e.sheetId]);this.history.update("groups",e.sheetIdTo,t);break}case"DELETE_SHEET":{const t={...this.groups};delete t[e.sheetId],this.history.update("groups",t);break}case"ADD_COLUMNS_ROWS":const t=pt(e.position,e.base);this.moveGroupsOnHeaderInsertion(e.sheetId,e.dimension,t,e.quantity);break;case"REMOVE_COLUMNS_ROWS":this.moveGroupsOnHeaderDeletion(e.sheetId,e.dimension,e.elements);break;case"UNFOLD_HEADER_GROUP":{const t=this.findGroupWithStartEnd(e.sheetId,e.dimension,e.start,e.end);t&&this.unfoldHeaderGroup(e.sheetId,e.dimension,t);break}case"FOLD_HEADER_GROUP":{const t=this.findGroupWithStartEnd(e.sheetId,e.dimension,e.start,e.end);t&&this.foldHeaderGroup(e.sheetId,e.dimension,t);break}case"UNFOLD_ALL_HEADER_GROUPS":{const t=this.getters.getHeaderGroups(e.sheetId,e.dimension);for(const o of t)this.unfoldHeaderGroup(e.sheetId,e.dimension,o);break}case"FOLD_ALL_HEADER_GROUPS":{const t=this.getters.getHeaderGroups(e.sheetId,e.dimension);for(const o of t)this.foldHeaderGroup(e.sheetId,e.dimension,o);break}case"FOLD_HEADER_GROUPS_IN_ZONE":case"UNFOLD_HEADER_GROUPS_IN_ZONE":{const t="UNFOLD_HEADER_GROUPS_IN_ZONE"===e.type?"unfold":"fold",o=this.getGroupsLayers(e.sheetId,e.dimension);"fold"===t&&o.reverse();const s=o.flat(),i="ROW"===e.dimension?e.zone.top:e.zone.left,n="ROW"===e.dimension?e.zone.bottom:e.zone.right,r=new Set;for(let e=i;e<=n;e++){const o=s.filter((t=>t.start-1<=e&&e<=t.end));for(const e of o)if(!("fold"===t&&e.isFolded||"unfold"===t&&!e.isFolded)){r.add(e);break}}for(const o of r)"unfold"===t?this.unfoldHeaderGroup(e.sheetId,e.dimension,o):this.foldHeaderGroup(e.sheetId,e.dimension,o);break}}}getHeaderGroups(e,t){return this.groups[e][t]}getHeaderGroup(e,t,o,s){return this.getHeaderGroups(e,t).find((e=>e.start===o&&e.end===s))}getHeaderGroupsInZone(e,t,o){return this.getHeaderGroups(e,t).filter((e=>{const s="ROW"===t?o.top:o.left,i="ROW"===t?o.bottom:o.right;return this.doGroupOverlap(e,s,i)}))}getGroupsLayers(e,t){const o=this.getHeaderGroups(e,t);return this.bricksFallingAlgorithm(o,0,0)}getVisibleGroupLayers(e,t){const o=this.getGroupsLayers(e,t);for(const s of o)for(let o=s.length-1;o>=0;o--){const i=s[o];if(0===i.start)continue;je(i.start-1,i.end+1).every((o=>this.getters.isHeaderHiddenByUser(e,t,o)))&&s.splice(o,1)}return o.filter((e=>e.length>0))}isGroupFolded(e,t,o,s){return this.getHeaderGroup(e,t,o,s)?.isFolded||!1}isRowFolded(e,t){return this.getters.getHeaderGroups(e,"ROW").some((e=>e.start<=t&&t<=e.end&&e.isFolded))}isColFolded(e,t){return this.getters.getHeaderGroups(e,"COL").some((e=>e.start<=t&&t<=e.end&&e.isFolded))}getGroupId(e){return`${e.start}-${e.end}}`}bricksFallingAlgorithm(e,t,o,s=0){const i={};for(const t of e)i[this.getGroupId(t)]=t.isFolded;const n={};for(const t of e)for(let e=t.start;e<=t.end;e++)n[e]=n[e]?n[e]+1:1;for(let e=t;e<=o;e++)n[e]=n[e]?n[e]+s:s;const r=Math.max(...Object.values(n),0),a=Array.from({length:r},(()=>[])),l=Math.max(o,...e.map((e=>e.end)));for(let o=Math.min(t,...e.map((e=>e.start)));o<=l;o++){const e=n[o]||0;for(let t=0;t<e;t++){const e=a[t].at(-1);if(e&&It([e.end,o]))e.end++;else{const e={start:o,end:o};a[t].push(e)}}}for(const e of a)for(const t of e)t.isFolded=i[this.getGroupId(t)];return a}groupHeaders(e,t,o,s){const i=this.getHeaderGroups(e,t),n=this.bricksFallingAlgorithm(i,o,s,1).flat();this.history.update("groups",e,t,this.removeDuplicateGroups(n))}unGroupHeaders(e,t,o,s){const i=this.getHeaderGroups(e,t),n=this.bricksFallingAlgorithm(i,o,s,-1).flat();this.history.update("groups",e,t,this.removeDuplicateGroups(n))}moveGroupsOnHeaderInsertion(e,t,o,s){const i=this.groups[e][t];for(let n=0;n<i.length;n++){const r=i[n],[a,l]=ia(o,s,[r.start,r.end]);a===r.start&&l===r.end||this.history.update("groups",e,t,n,{...r,start:a,end:l})}}moveGroupsOnHeaderDeletion(e,t,o){const s=this.getHeaderGroups(e,t),i=[];for(const e of s){const t=na(o,je(e.start,e.end+1));0!==t.length&&i.push({...e,start:Math.min(...t),end:Math.max(...t)})}this.history.update("groups",e,t,this.bricksFallingAlgorithm(i,0,0).flat())}doGroupOverlap(e,t,o){return e.start<=o&&e.end>=t}removeDuplicateGroups(e){const t={};for(const o of e)t[this.getGroupId(o)]=o;return Object.values(t)}findGroupWithStartEnd(e,t,o,s){return this.getHeaderGroups(e,t).find((e=>e.start===o&&e.end===s))}foldHeaderGroup(e,t,o){const s=this.getGroupIndex(e,t,o.start,o.end);if(void 0===s)return;this.history.update("groups",e,t,s,"isFolded",!0);const i=this.getters.getHeaderGroups(e,t);for(let s=0;s<i.length;s++){const n=i[s];n.start===o.start&&n.end<=o.end&&this.history.update("groups",e,t,s,"isFolded",!0)}}unfoldHeaderGroup(e,t,o){const s=this.getGroupIndex(e,t,o.start,o.end);if(void 0===s)return;this.history.update("groups",e,t,s,"isFolded",!1);const i=this.getters.getHeaderGroups(e,t);for(let s=0;s<i.length;s++){const n=i[s];n.start===o.start&&n.end>=o.end&&this.history.update("groups",e,t,s,"isFolded",!1)}}getGroupIndex(e,t,o,s){const i=this.groups[e][t].findIndex((e=>e.start===o&&e.end===s));return-1===i?void 0:i}import(e){for(const t of e.sheets)if(this.groups[t.id]={ROW:[],COL:[]},t.headerGroups)for(const e of["ROW","COL"])for(const o of t.headerGroups[e]||[])this.groups[t.id][e].push({...o})}export(e){for(const t of e.sheets)t.headerGroups=this.groups[t.id]}exportForExcel(e){for(const t of e.sheets)for(const e of["ROW","COL"]){const o=this.getGroupsLayers(t.id,e);for(let s=0;s<o.length;s++){const i=o[s];for(const o of i){for(let i=o.start;i<=o.end;i++){const n=TT(t,e,i);n.outlineLevel=s+1,o.isFolded&&(n.isHidden=!0)}if(o.isFolded){TT(t,e,o.end+1).collapsed=!0}}}}}}).add("header visibility",class extends Rk{static getters=["checkElementsIncludeAllVisibleHeaders","getHiddenColsGroups","getHiddenRowsGroups","isHeaderHiddenByUser","isRowHiddenByUser","isColHiddenByUser"];hiddenHeaders={};allowDispatch(e){switch(e.type){case"HIDE_COLUMNS_ROWS":{if(!this.getters.tryGetSheet(e.sheetId))return"InvalidSheetId";const t="COL"===e.dimension?this.getHiddenColsGroups(e.sheetId):this.getHiddenRowsGroups(e.sheetId),o="COL"===e.dimension?this.getters.getNumberCols(e.sheetId):this.getters.getNumberRows(e.sheetId);return new Set((t||[]).flat().concat(e.elements)).size>=o?"TooManyHiddenElements":Ft(e.elements)<0||Ot(e.elements)>o?"InvalidHeaderIndex":"Success"}case"REMOVE_COLUMNS_ROWS":return this.getters.tryGetSheet(e.sheetId)?this.checkElementsIncludeAllVisibleHeaders(e.sheetId,e.dimension,e.elements)?"NotEnoughElements":"Success":"InvalidSheetId"}return"Success"}handle(e){switch(e.type){case"CREATE_SHEET":const t={COL:Array(this.getters.getNumberCols(e.sheetId)).fill(!1),ROW:Array(this.getters.getNumberRows(e.sheetId)).fill(!1)};this.history.update("hiddenHeaders",e.sheetId,t);break;case"DUPLICATE_SHEET":this.history.update("hiddenHeaders",e.sheetIdTo,ze(this.hiddenHeaders[e.sheetId]));break;case"DELETE_SHEET":this.history.update("hiddenHeaders",e.sheetId,void 0);break;case"REMOVE_COLUMNS_ROWS":{const t=[...this.hiddenHeaders[e.sheetId][e.dimension]];for(const o of[...e.elements].sort(((e,t)=>t-e)))t.splice(o,1);this.history.update("hiddenHeaders",e.sheetId,e.dimension,t);break}case"ADD_COLUMNS_ROWS":{const t=[...this.hiddenHeaders[e.sheetId][e.dimension]],o=pt(e.position,e.base);t.splice(o,0,...Array(e.quantity).fill(!1)),this.history.update("hiddenHeaders",e.sheetId,e.dimension,t);break}case"HIDE_COLUMNS_ROWS":for(const t of e.elements)this.history.update("hiddenHeaders",e.sheetId,e.dimension,t,!0);break;case"UNHIDE_COLUMNS_ROWS":for(const t of e.elements)this.history.update("hiddenHeaders",e.sheetId,e.dimension,t,!1)}}checkElementsIncludeAllVisibleHeaders(e,t,o){return vt(o,this.getAllVisibleHeaders(e,t))}isHeaderHiddenByUser(e,t,o){return"COL"===t?this.isColHiddenByUser(e,o):this.isRowHiddenByUser(e,o)}isRowHiddenByUser(e,t){return this.hiddenHeaders[e].ROW[t]||this.getters.isRowFolded(e,t)}isColHiddenByUser(e,t){return this.hiddenHeaders[e].COL[t]||this.getters.isColFolded(e,t)}getHiddenColsGroups(e){const t=[[]],o=this.hiddenHeaders[e].COL;for(let e=0;e<o.length;e++){o[e]?t[t.length-1].push(e):0!==t[t.length-1].length&&t.push([])}return 0===t[t.length-1].length&&t.pop(),t}getHiddenRowsGroups(e){const t=[[]],o=this.hiddenHeaders[e].ROW;for(let e=0;e<o.length;e++){o[e]?t[t.length-1].push(e):0!==t[t.length-1].length&&t.push([])}return 0===t[t.length-1].length&&t.pop(),t}getAllVisibleHeaders(e,t){const o=je(0,this.getters.getNumberHeaders(e,t)),s=[];return this.getters.getHeaderGroups(e,t).forEach((e=>{e.isFolded&&s.push(...je(e.start,e.end+1))})),o.filter((o=>!this.hiddenHeaders[e][t][o]&&!s.includes(o)))}import(e){for(const t of e.sheets){this.hiddenHeaders[t.id]={COL:[],ROW:[]};for(let e=0;e<t.rowNumber;e++)this.hiddenHeaders[t.id].ROW[e]=Boolean(t.rows[e]?.isHidden);for(let e=0;e<t.colNumber;e++)this.hiddenHeaders[t.id].COL[e]=Boolean(t.cols[e]?.isHidden)}}exportForExcel(e){this.exportData(e,!0)}export(e){this.exportData(e)}exportData(e,t=!1){for(const o of e.sheets){void 0===o.rows&&(o.rows={});for(let e=0;e<this.getters.getNumberRows(o.id);e++)(t||this.hiddenHeaders[o.id].ROW[e])&&(void 0===o.rows[e]&&(o.rows[e]={}),o.rows[e].isHidden||=this.hiddenHeaders[o.id].ROW[e]);void 0===o.cols&&(o.cols={});for(let e=0;e<this.getters.getNumberCols(o.id);e++)(t||this.hiddenHeaders[o.id].COL[e])&&(void 0===o.cols[e]&&(o.cols[e]={}),o.cols[e].isHidden||=this.hiddenHeaders[o.id].COL[e])}}}).add("tables",class extends Rk{static getters=["getCoreTable","getCoreTables","getCoreTableMatchingTopLeft"];tables={};nextTableId=1;adaptRanges(e,t,o){const s=t?[t]:this.getters.getSheetIds();for(const t of s)for(const o of this.getCoreTables(t))this.applyRangeChangeOnTable(t,o,e)}allowDispatch(e){switch(e.type){case"CREATE_TABLE":if(e.ranges.some((t=>!this.getters.tryGetSheet(t._sheetId)||t._sheetId!==e.sheetId)))return"InvalidSheetId";const t=e.ranges.map((e=>this.getters.getRangeFromRangeData(e).zone));return Nr(t)?this.checkValidations(e,(e=>this.getTablesOverlappingZones(e.sheetId,t).length?"TableOverlap":"Success"),(e=>this.checkTableConfigUpdateIsValid(e.config))):"NonContinuousTargets";case"UPDATE_TABLE":return this.getCoreTableMatchingTopLeft(e.sheetId,e.zone)?this.checkValidations(e,this.checkUpdatedTableZoneIsValid,(e=>this.checkTableConfigUpdateIsValid(e.config))):"TableNotFound";case"ADD_MERGE":for(const t of this.getCoreTables(e.sheetId)){const o=t.range.zone;for(const t of e.target)if(Sr(o,t))return"MergeInTable"}}return"Success"}handle(e){switch(e.type){case"CREATE_SHEET":this.history.update("tables",e.sheetId,{});break;case"DELETE_SHEET":{const t={...this.tables};delete t[e.sheetId],this.history.update("tables",t);break}case"DUPLICATE_SHEET":{const t={};for(const o of this.getCoreTables(e.sheetId))t[o.id]="dynamic"===o.type?this.copyDynamicTableForSheet(e.sheetIdTo,o):this.copyStaticTableForSheet(e.sheetIdTo,o);this.history.update("tables",e.sheetIdTo,t);break}case"CREATE_TABLE":{const t=e.ranges.map((e=>this.getters.getRangeFromRangeData(e))),o=this.getters.getRangesUnion(t),s=this.getters.getMergesInZone(e.sheetId,o.zone);s.length&&this.dispatch("REMOVE_MERGE",{sheetId:e.sheetId,target:s});const i=this.consumeNextId(),n=e.config||mR,r="dynamic"===e.tableType?this.createDynamicTable(i,o,n):this.createStaticTable(i,e.tableType,o,n);this.history.update("tables",e.sheetId,r.id,r);break}case"REMOVE_TABLE":{const t={};for(const o of this.getCoreTables(e.sheetId))e.target.every((e=>!vr(o.range.zone,e)))&&(t[o.id]=o);this.history.update("tables",e.sheetId,t);break}case"UPDATE_TABLE":this.updateTable(e);break;case"UPDATE_CELL":{const t=e.sheetId;for(const o of this.getCoreTables(t)){if("dynamic"===o.type)continue;const s=this.canUpdateCellCmdExtendTable(e,o);"down"===s?this.extendTableDown(t,o):"right"===s&&this.extendTableRight(t,o)}break}case"DELETE_CONTENT":{const t={...this.tables[e.sheetId]};for(const o in t){const s=t[o];s&&e.target.some((e=>yr(s.range.zone,e)))&&this.dispatch("REMOVE_TABLE",{sheetId:e.sheetId,target:[s.range.zone]})}break}}}getCoreTables(e){return this.tables[e]?Object.values(this.tables[e]).filter(lt):[]}getCoreTable({sheetId:e,col:t,row:o}){return this.getCoreTables(e).find((e=>Cr(t,o,e.range.zone)))}getTablesOverlappingZones(e,t){return this.getCoreTables(e).filter((e=>t.some((t=>Sr(e.range.zone,t)))))}extendTableDown(e,t){const o=this.getters.extendRange(t.range,"ROW",1);this.history.update("tables",e,t.id,this.updateStaticTable(t,o))}extendTableRight(e,t){const o=this.getters.extendRange(t.range,"COL",1);this.history.update("tables",e,t.id,this.updateStaticTable(t,o))}canUpdateCellCmdExtendTable({content:e,sheetId:t,col:o,row:s},i){if(!e)return"none";const n=i.range.zone;let r="none";if(n.bottom+1===s&&o>=n.left&&o<=n.right?r="down":n.right+1===o&&s>=n.top&&s<=n.bottom&&(r="right"),"none"===r)return"none";const a="down"===r?{...n,bottom:n.bottom+1,top:n.bottom+1}:{...n,right:n.right+1,left:n.right+1};for(let e=a.top;e<=a.bottom;e++)for(let o=a.left;o<=a.right;o++){const s={sheetId:t,col:o,row:e},i=this.getters.getCell(s)?.content;if(i||this.getters.isInMerge(s)||this.getTablesOverlappingZones(t,[Dr(s)]).length)return"none"}return r}getCoreTableMatchingTopLeft(e,t){for(const o of this.getCoreTables(e)){const e=o.range.zone;if(e.left===t.left&&e.top===t.top)return o}}checkUpdatedTableZoneIsValid(e){if(!e.newTableRange)return"Success";const t=this.getters.getRangeFromRangeData(e.newTableRange).zone,o=this.getters.checkZonesExistInSheet(e.sheetId,[t]);if("Success"!==o)return o;const s=this.getCoreTableMatchingTopLeft(e.sheetId,e.zone);if(!s)return"TableNotFound";return this.getTablesOverlappingZones(e.sheetId,[t]).filter((e=>e.id!==s.id)).length?"TableOverlap":"Success"}checkTableConfigUpdateIsValid(e){return e&&(void 0!==e.numberOfHeaders&&e.numberOfHeaders<0||e.hasFilters&&0===e.numberOfHeaders)?"InvalidTableConfig":"Success"}createStaticTable(e,t,o,s,i){const n=o.zone;if(!i){i=[];for(const e of je(n.left,n.right+1)){const t={...n,left:e,right:e},r=this.consumeNextId();i.push(this.createFilterFromZone(r,o.sheetId,t,s))}}return{id:e,range:o,filters:i,config:s,type:t}}createDynamicTable(e,t,o){const s=_r(t.zone);return{id:e,range:this.getters.getRangeFromZone(t.sheetId,s),config:o,type:"dynamic"}}updateTable(e){const t=this.getCoreTableMatchingTopLeft(e.sheetId,e.zone);if(!t)return;const o=e.newTableRange?this.getters.getRangeFromRangeData(e.newTableRange):void 0;if(o){const t=this.getters.getMergesInZone(e.sheetId,o.zone);this.dispatch("REMOVE_MERGE",{sheetId:e.sheetId,target:t})}const s=o||t.range,i=this.updateTableConfig(e.config,t.config),n=e.tableType??t.type;if("dynamic"===n&&"dynamic"!==t.type||"dynamic"!==n&&"dynamic"===t.type){const o="dynamic"===n?this.createDynamicTable(t.id,s,i):this.createStaticTable(t.id,n,s,i);this.history.update("tables",e.sheetId,t.id,o)}else{const o="dynamic"===t.type?this.updateDynamicTable(t,s,i):this.updateStaticTable(t,s,i,n);this.history.update("tables",e.sheetId,t.id,o)}}updateStaticTable(e,t,o,s=e.type){if("dynamic"===s)throw new Error("Cannot use updateStaticTable to update a dynamic table");const i=t||e.range,n=i.zone,r=this.updateTableConfig(o,e.config),a=r||e.config,l=[];if(t||r&&"numberOfHeaders"in r)for(const t of je(n.left,n.right+1)){const o=n.top===e.range.zone.top?e.filters.find((e=>e.col===t)):void 0,s={...n,left:t,right:t},r=o?.id||this.consumeNextId();l.push(this.createFilterFromZone(r,i.sheetId,s,a))}return{...e,range:i,config:a,filters:l.length?l:e.filters,type:s}}updateDynamicTable(e,t,o){const s=t?this.getters.getRangeFromZone(t.sheetId,_r(t.zone)):e.range,i=o||e.config;return{...e,range:s,config:i}}updateTableConfig(e,t){if(!e)return t;const o={...t,...e};return 0===e.numberOfHeaders?o.hasFilters=!1:!0===e.hasFilters&&(o.numberOfHeaders||=1),o}createFilterFromZone(e,t,o,s){return d_(e,this.getters.getRangeFromZone(t,o),s,this.getters.getRangeFromZone)}copyStaticTableForSheet(e,t){const o=this.getters.getRangeFromZone(e,t.range.zone),s=t.filters.map((o=>{const s=this.getters.getRangeFromZone(e,o.rangeWithHeaders.zone);return d_(o.id,s,t.config,this.getters.getRangeFromZone)}));return{id:t.id,range:o,filters:s,config:ze(t.config),type:t.type}}copyDynamicTableForSheet(e,t){const o=this.getters.getRangeFromZone(e,t.range.zone);return{id:t.id,range:o,config:ze(t.config),type:"dynamic"}}applyRangeChangeOnTable(e,t,o){const s=o(t.range);let i;switch(s.changeType){case"REMOVE":return void this.history.update("tables",e,t.id,void 0);case"NONE":return;default:i=s.range}if("dynamic"===t.type){const o=this.updateDynamicTable(t,i);return void this.history.update("tables",e,t.id,o)}const n=[];for(const e of t.filters){const s=o(e.rangeWithHeaders);switch(s.changeType){case"REMOVE":continue;case"NONE":n.push(e);break;default:const o=s.range,i=d_(e.id,o,t.config,this.getters.getRangeFromZone);n.push(i)}}const r=i.zone;if(n.length<wr(r).numberOfCols){for(let o=r.left;o<=r.right;o++)if(!n.find((e=>e.col===o))){const s=this.consumeNextId(),i={...r,left:o,right:o};n.push(this.createFilterFromZone(s,e,i,t.config))}n.sort(((e,t)=>e.col-t.col))}const a=this.createStaticTable(t.id,t.type,i,t.config,n);this.history.update("tables",e,t.id,a)}consumeNextId(){const e=`${this.nextTableId}`;return this.history.update("nextTableId",this.nextTableId+1),e}import(e){for(const t of e.sheets)for(const e of t.tables||[]){const o=this.consumeNextId(),s=e.config||mR,i=this.getters.getRangeFromSheetXC(t.id,e.range),n=e.type||"static",r="dynamic"===n?this.createDynamicTable(o,i,s):this.createStaticTable(o,n,i,s);this.history.update("tables",t.id,r.id,r)}}export(e){for(const t of e.sheets)for(const e of this.getCoreTables(t.id)){const o={range:dr(e.range.zone),type:e.type};mt(e.config,mR)||(o.config=e.config),t.tables.push(o)}}exportForExcel(e){for(const t of e.sheets)for(const e of this.getCoreTables(t.id)){const o=dr(e.range.zone);t.tables.push({range:o,filters:[],config:e.config})}}}).add("dataValidation",class extends Rk{static getters=["cellHasListDataValidationIcon","getDataValidationRule","getDataValidationRules","getValidationRuleForCell"];rules={};adaptRanges(e,t,o){const s=t?[t]:Object.keys(this.rules);for(const t of s)this.adaptDVRanges(t,e);this.adaptDVFormulas(e)}adaptDVFormulas(e){for(const t in this.rules){for(let o=this.rules[t].length-1;o>=0;o--){const s=this.rules[t][o];for(let i=0;i<s.criterion.values.length;i++){const n=this.getters.adaptFormulaStringDependencies(t,s.criterion.values[i],e);this.history.update("rules",t,o,"criterion","values",i,n)}}}}adaptDVRanges(e,t){for(let o=this.rules[e].length-1;o>=0;o--){const s=this.rules[e][o];for(let i=s.ranges.length-1;i>=0;i--){const n=t(s.ranges[i]);switch(n.changeType){case"REMOVE":if(1===s.ranges.length)this.removeDataValidationRule(e,s.id);else{const t=s.ranges.slice();t.splice(i,1),this.history.update("rules",e,o,"ranges",t)}break;case"RESIZE":case"MOVE":case"CHANGE":this.history.update("rules",e,o,"ranges",i,n.range)}}}}allowDispatch(e){switch(e.type){case"ADD_DATA_VALIDATION_RULE":return this.getters.tryGetSheet(e.sheetId)?e.ranges.some((e=>!this.getters.tryGetSheet(e._sheetId)))?"InvalidSheetId":this.checkValidations(e,this.chainValidations(this.checkEmptyRange,this.checkValidRange,this.checkCriterionTypeIsValid,this.checkCriterionHasValidNumberOfValues,this.checkCriterionValuesAreValid)):"InvalidSheetId";case"REMOVE_DATA_VALIDATION_RULE":if(!this.getters.tryGetSheet(e.sheetId))return"InvalidSheetId";if(!this.rules[e.sheetId].find((t=>t.id===e.id)))return"UnknownDataValidationRule"}return"Success"}handle(e){switch(e.type){case"CREATE_SHEET":this.history.update("rules",e.sheetId,[]);break;case"DUPLICATE_SHEET":{const t=ze(this.rules[e.sheetId]).map((t=>({...t,ranges:t.ranges.map((t=>ma(e.sheetId,e.sheetIdTo,t)))})));this.history.update("rules",e.sheetIdTo,t);break}case"DELETE_SHEET":{const t={...this.rules};delete t[e.sheetId],this.history.update("rules",t);break}case"REMOVE_DATA_VALIDATION_RULE":this.removeDataValidationRule(e.sheetId,e.id);break;case"ADD_DATA_VALIDATION_RULE":{const t=e.ranges.map((e=>this.getters.getRangeFromRangeData(e)));this.addDataValidationRule(e.sheetId,{...e.rule,ranges:t});break}case"DELETE_CONTENT":{const t=er(e.target),o=e.sheetId;for(const e of t)for(let t=e.top;t<=e.bottom;t++)for(let s=e.left;s<=e.right;s++){const e=this.getValidationRuleForCell({sheetId:o,col:s,row:t});if(e&&("isBoolean"===e.criterion.type||"isValueInList"===e.criterion.type&&!this.getters.getCell({sheetId:o,col:s,row:t})?.content)){const e=this.rules[o],i=[this.getters.getRangeFromSheetXC(o,Oo(s,t))],n=this.removeRangesFromRules(o,i,e);this.history.update("rules",o,n)}}}}}getDataValidationRules(e){return this.rules[e]}getDataValidationRule(e,t){return this.rules[e].find((e=>e.id===t))}getValidationRuleForCell({sheetId:e,col:t,row:o}){if(this.rules[e])for(const s of this.rules[e])for(const e of s.ranges)if(Cr(t,o,e.zone))return s}cellHasListDataValidationIcon(e){const t=this.getValidationRuleForCell(e);return!!t&&!("isValueInList"!==t.criterion.type&&"isValueInRange"!==t.criterion.type||"arrow"!==t.criterion.displayStyle&&"chip"!==t.criterion.displayStyle)}addDataValidationRule(e,t){const o=this.rules[e];"isBoolean"===t.criterion.type?this.setCenterStyleToBooleanCells(t):"isValueInList"===t.criterion.type&&(t.criterion.values=Array.from(new Set(t.criterion.values)));const s=this.removeRangesFromRules(e,t.ranges,o,t.id),i=s.findIndex((e=>e.id===t.id));-1!==i?(s[i]=t,this.history.update("rules",e,s)):this.history.update("rules",e,[...s,t])}removeRangesFromRules(e,t,o,s){o=ze(o);for(const e of o)e.id!==s&&(e.ranges=this.getters.recomputeRanges(e.ranges,t));return o.filter((e=>e.ranges.length>0))}removeDataValidationRule(e,t){const o=this.rules[e].filter((e=>e.id!==t));this.history.update("rules",e,o)}setCenterStyleToBooleanCells(e){for(const t of va(e.ranges)){const e=this.getters.getCell(t),o={...e?.style,align:e?.style?.align??"center",verticalAlign:e?.style?.verticalAlign??"middle"};this.dispatch("UPDATE_CELL",{...t,style:o})}}checkEmptyRange(e){return e.ranges.length?"Success":"EmptyRange"}import(e){for(const t of e.sheets)if(this.rules[t.id]=[],t.dataValidationRules)for(const e of t.dataValidationRules)this.rules[t.id].push({...e,ranges:e.ranges.map((e=>this.getters.getRangeFromSheetXC(t.id,e)))})}export(e){if(e.sheets)for(const t of e.sheets){t.dataValidationRules=[];for(const e of this.rules[t.id])t.dataValidationRules.push({...e,ranges:e.ranges.map((e=>this.getters.getRangeString(e,t.id)))})}}exportForExcel(e){if(e.sheets)for(const t of e.sheets){t.dataValidationRules=[];for(const e of this.rules[t.id]){const o={...ze(e),ranges:e.ranges.map((e=>this.getters.getRangeString(e,t.id,{useBoundedReference:!0})))};"isValueInRange"===e.criterion.type&&(o.criterion.values=e.criterion.values.map((e=>{const o=this.getters.getRangeFromSheetXC(t.id,e);return this.getters.getRangeString(o,t.id,{useBoundedReference:!0,useFixedReference:!0})}))),t.dataValidationRules.push(o)}}}checkCriterionTypeIsValid(e){return Zx.contains(e.rule.criterion.type)?"Success":"UnknownDataValidationCriterionType"}checkCriterionHasValidNumberOfValues(e){const t=e.rule.criterion,o=Zx.get(t.type).numberOfValues(t);return void 0!==o&&t.values.length!==o?"InvalidNumberOfCriterionValues":"Success"}checkCriterionValuesAreValid(e){const t=e.rule.criterion,o=Zx.get(t.type);return t.values.some((e=>"onlyFormulas"===o.allowedValues&&!e.startsWith("=")||(e.startsWith("=")?"onlyLiterals"===o.allowedValues||PS(e).isBadExpression:!o.isCriterionValueValid(e))))?"InvalidDataValidationCriterionValue":"Success"}checkValidRange(e){const t=e.ranges.map((e=>this.getters.getRangeFromRangeData(e))),o=t.map((t=>this.getters.getRangeString(t,e.sheetId)));return o.some((e=>!this.getters.isRangeValid(e)))?"InvalidRange":"Success"}}).add("cell",class extends Rk{static getters=["zoneToXC","getCells","getTranslatedCellFormula","getCellStyle","getCellById","getFormulaString","getFormulaMovedInSheet"];nextId=1;cells={};adaptRanges(e,t,o){for(const s of Object.keys(this.cells))for(const i of Object.values(this.cells[s]||{}))if(i.isFormula)for(const n of i.compiledFormula.dependencies)if(!t||n.sheetId===t||o&&n.invalidSheetName===o){const t=e(n);"NONE"!==t.changeType&&this.history.update("cells",s,i.id,"compiledFormula","dependencies",i.compiledFormula.dependencies.indexOf(n),t.range)}}allowDispatch(e){switch(e.type){case"UPDATE_CELL":return this.checkValidations(e,this.checkCellOutOfSheet,this.checkUselessUpdateCell);case"CLEAR_CELL":return this.checkValidations(e,this.checkCellOutOfSheet,this.checkUselessClearCell);case"UPDATE_CELL_POSITION":return!e.cellId||this.cells[e.sheetId]?.[e.cellId]?"Success":"InvalidCellId";default:return"Success"}}handle(e){switch(e.type){case"SET_FORMATTING":"style"in e&&this.setStyle(e.sheetId,e.target,e.style),"format"in e&&void 0!==e.format&&this.setFormatter(e.sheetId,e.target,e.format);break;case"CLEAR_FORMATTING":this.clearFormatting(e.sheetId,e.target);break;case"ADD_COLUMNS_ROWS":"COL"===e.dimension?this.handleAddColumnsRows(e,this.copyColumnStyle.bind(this)):this.handleAddColumnsRows(e,this.copyRowStyle.bind(this));break;case"UPDATE_CELL":this.updateCell(e.sheetId,e.col,e.row,e);break;case"CLEAR_CELL":this.dispatch("UPDATE_CELL",{sheetId:e.sheetId,col:e.col,row:e.row,content:"",style:null,format:""});break;case"CLEAR_CELLS":this.clearCells(e.sheetId,e.target);break;case"DELETE_CONTENT":this.clearZones(e.sheetId,e.target);break;case"DELETE_SHEET":this.history.update("cells",e.sheetId,void 0)}}clearZones(e,t){for(const o of er(t))for(let t=o.left;t<=o.right;t++)for(let s=o.top;s<=o.bottom;s++){const o=this.getters.getCell({sheetId:e,col:t,row:s});(o?.isFormula||o?.content)&&this.dispatch("UPDATE_CELL",{sheetId:e,content:"",col:t,row:s})}}setFormatter(e,t,o){for(const s of er(t))for(let t=s.top;t<=s.bottom;t++)for(let i=s.left;i<=s.right;i++)this.dispatch("UPDATE_CELL",{sheetId:e,col:i,row:t,format:o})}clearFormatting(e,t){for(const o of er(t))for(let t=o.left;t<=o.right;t++)for(let s=o.top;s<=o.bottom;s++)this.dispatch("UPDATE_CELL",{sheetId:e,col:t,row:s,style:null,format:""})}clearCells(e,t){for(const o of t)for(let t=o.left;t<=o.right;t++)for(let s=o.top;s<=o.bottom;s++)this.dispatch("UPDATE_CELL",{sheetId:e,col:t,row:s,content:"",style:null,format:""})}handleAddColumnsRows(e,t){let o,s;"before"===e.position?(o=je(e.base,e.base+e.quantity),s=e.base+e.quantity):(o=je(e.base+1,e.base+e.quantity+1),s=e.base),t(e.sheetId,s,o)}import(e){for(const t of e.sheets){const o=t.id,s=new MD;for(const e in t.cells)if(t.cells[e]){const{col:o,row:i}=_o(e),n={sheetId:t.id,col:o,row:i};s.set(n,{content:t.cells[e]})}for(const[e,o]of[["style",t.styles],["format",t.formats]])for(const[i,n]of Br(t.id,o)){const t=s.get(i);t?t[e]=n:s.set(i,{[e]:n})}for(const i of s.keysForSheet(o)){const o=s.get(i);if(o?.content||o?.format||o?.style){const s=this.importCell(t.id,o?.content,o?.style?e.styles[o?.style]:void 0,o?.format?e.formats[o?.format]:void 0);this.history.update("cells",t.id,s.id,s),this.dispatch("UPDATE_CELL_POSITION",{cellId:s.id,...i})}}}}export(e){const t={},o={};for(const s of e.sheets){const e=[],i=[],n={},r=Object.keys(this.cells[s.id]||{}).map((e=>this.getters.getCellPosition(e))).sort(((e,t)=>e.col===t.col?e.row-t.row:e.col-t.col));for(const s of r){const r=this.getters.getCell(s),a=Oo(s.col,s.row),l=this.removeDefaultStyleValues(r.style);if(Object.keys(l).length){const o=Hr(l,t);e[o]??=[],e[o].push(s)}if(r.format){const e=Hr(r.format,o);i[e]??=[],i[e].push(s)}r.content&&(n[a]=r.content)}s.styles=Ur(e),s.formats=Ur(i),s.cells=n}e.styles=t,e.formats=o}importCell(e,t,o,s){const i=this.getNextUid();return this.createCell(i,t||"",s,o,e)}exportForExcel(e){this.export(e);const t=[];for(const o in e.formats||[])$n(e.formats[o])||(t.push(Number(o)),delete e.formats[o]);if(t.length)for(const o of e.sheets)for(const e in o.formats){const s=o.formats[e];s&&t.includes(s)&&delete o.formats[e]}}removeDefaultStyleValues(e){const t={...e};for(const e in de)t[e]===de[e]&&delete t[e];return t}getCells(e){return this.cells[e]||{}}getCellById(e){const t=this.getters.getCellPosition(e);return this.cells[t.sheetId][e]}getFormulaString(e,t,o,s=!1){if(!o.length)return dt(t.map((e=>e.value)));let i=0;return dt(t.map((t=>{if("REFERENCE"===t.type){const t=o[i++];return this.getters.getRangeString(t,e,{useBoundedReference:s})}return t.value})))}getTranslatedCellFormula(e,t,o,s){const i=this.getters.createAdaptedRanges(MS(s).dependencies.map((t=>this.getters.getRangeFromSheetXC(e,t))),t,o,e);return this.getFormulaString(e,s,i)}getFormulaMovedInSheet(e,t,o){const s=MS(o).dependencies.map((t=>this.getters.getRangeFromSheetXC(e,t))),i=this.getters.removeRangesSheetPrefix(t,s);return this.getFormulaString(t,o,i)}getCellStyle(e){return this.getters.getCell(e)?.style||{}}zoneToXC(e,t,o=[{colFixed:!1,rowFixed:!1}]){const s=Oo((t=this.getters.expandZone(e,t)).left,t.top,o[0]),i=Oo(t.right,t.bottom,o.length>1?o[1]:o[0]),n=this.getters.getMainCellPosition({sheetId:e,col:t.left,row:t.top}),r=this.getters.getMainCellPosition({sheetId:e,col:t.right,row:t.bottom}),a=n.col===r.col&&n.row===r.row;return s===i||a?s:s+":"+i}setStyle(e,t,o){for(const s of er(t))for(let t=s.left;t<=s.right;t++)for(let i=s.top;i<=s.bottom;i++){const s=this.getters.getCell({sheetId:e,col:t,row:i});this.dispatch("UPDATE_CELL",{sheetId:e,col:t,row:i,style:o?{...s?.style,...o}:void 0})}}copyColumnStyle(e,t,o){for(let s=0;s<this.getters.getNumberRows(e);s++){const i=this.getFormat(e,t,s);if(i.style||i.format)for(const t of o)this.dispatch("UPDATE_CELL",{sheetId:e,col:t,row:s,...i})}}copyRowStyle(e,t,o){for(let s=0;s<this.getters.getNumberCols(e);s++){const i=this.getFormat(e,s,t);if(i.style||i.format)for(const t of o)this.dispatch("UPDATE_CELL",{sheetId:e,col:s,row:t,...i})}}getFormat(e,t,o){const s={},i=this.getters.getMainCellPosition({sheetId:e,col:t,row:o}),n=this.getters.getCell(i);return n&&(n.style&&(s.style=n.style),n.format&&(s.format=n.format)),s}getNextUid(){const e=this.nextId.toString();return this.history.update("nextId",this.nextId+1),e}updateCell(e,t,o,s){const i=this.getters.getCell({sheetId:e,col:t,row:o}),n="content"in s||"formula"in s,r=n?wt(s?.content):i?.content||"";let a;a=void 0!==s.style?s.style||void 0:i?i.style:void 0;const l="format"in s?s.format:i&&i.format;if((n&&!r&&!s.formula||!n&&(!i||""===i.content))&&!a&&!l)return void(i&&(this.history.update("cells",e,i.id,void 0),this.dispatch("UPDATE_CELL_POSITION",{cellId:void 0,col:t,row:o,sheetId:e})));const c=i?.id||this.getNextUid(),h=this.createCell(c,r,l,a,e);this.history.update("cells",e,h.id,h),this.dispatch("UPDATE_CELL_POSITION",{cellId:h.id,col:t,row:o,sheetId:e})}createCell(e,t,o,s,i){return t.startsWith("=")?this.createFormulaCell(e,t,o,s,i):this.createLiteralCell(e,t,o,s)}createLiteralCell(e,t,o,s){const i=this.getters.getLocale(),n=qn(t,i);return Gn(o=o||("number"==typeof n?_n(t,i)||On(t):void 0))||hi(t)||(t=Si(n)),{id:e,content:t,style:s,format:o,isFormula:!1,parsedValue:n}}createFormulaCell(e,t,o,s,i){const n=PS(t);return n.dependencies.length?this.createFormulaCellWithDependencies(e,n,o,s,i):{id:e,content:t,style:s,format:o,isFormula:!0,compiledFormula:{...n,dependencies:[]}}}createFormulaCellWithDependencies(e,t,o,s,i){const n=[];for(const e of t.dependencies)n.push(this.getters.getRangeFromSheetXC(i,e));return new Tk(e,t,o,s,n,i,this.getters.getRangeString)}checkCellOutOfSheet(e){const{sheetId:t,col:o,row:s}=e;if(!this.getters.tryGetSheet(t))return"InvalidSheetId";return Cr(o,s,this.getters.getSheetZone(t))?"Success":"TargetOutOfSheet"}checkUselessClearCell(e){const t=this.getters.getCell(e);return t&&(t.content||t.style||t.format)?"Success":"NoChanges"}checkUselessUpdateCell(e){const t=this.getters.getCell(e),o="style"in e,s="format"in e;return("content"in e||"formula"in e)&&t?.content!==e.content||o&&!mt(t?.style,e.style)||s&&t?.format!==e.format?"Success":"NoChanges"}}).add("merge",class extends Rk{static getters=["isInMerge","isInSameMerge","isMergeHidden","getMainCellPosition","expandZone","doesIntersectMerge","doesColumnsHaveCommonMerges","doesRowsHaveCommonMerges","getMerges","getMerge","getMergesInZone","isSingleCellOrMerge","getSelectionRangeString","isMainCellPosition"];nextId=1;merges={};mergeCellMap={};allowDispatch(e){const t="force"in e&&!!e.force;switch(e.type){case"ADD_MERGE":return t?this.checkValidations(e,this.checkFrozenPanes):this.checkValidations(e,this.checkDestructiveMerge,this.checkOverlap,this.checkFrozenPanes);case"UPDATE_CELL":return this.checkMergedContentUpdate(e);case"REMOVE_MERGE":return this.checkMergeExists(e);default:return"Success"}}handle(e){switch(e.type){case"CREATE_SHEET":case"DELETE_SHEET":this.history.update("merges",e.sheetId,{}),this.history.update("mergeCellMap",e.sheetId,{});break;case"DUPLICATE_SHEET":const t=this.merges[e.sheetId];if(!t)break;for(const o of Object.values(t).filter(lt))this.addMerge(e.sheetIdTo,o.zone);break;case"ADD_MERGE":for(const t of e.target)this.addMerge(e.sheetId,t);break;case"REMOVE_MERGE":for(const t of e.target)this.removeMerge(e.sheetId,t)}}adaptRanges(e,t,o){const s=t?[t]:Object.keys(this.merges);for(const t of s)this.applyRangeChangeOnSheet(t,e)}getMerges(e){return Object.keys(this.merges[e]||{}).map((t=>this.getMergeById(e,parseInt(t,10)))).filter(lt)}getMerge({sheetId:e,col:t,row:o}){const s=this.mergeCellMap[e],i=s?t in s&&s[t]?.[o]:void 0;return i?this.getMergeById(e,i):void 0}getMergesInZone(e,t){const o=this.mergeCellMap[e];if(!o)return[];const s=new Set;for(let e=t.left;e<=t.right;e++)for(let i=t.top;i<=t.bottom;i++){const t=o[e]?.[i];t&&s.add(t)}return Array.from(s).map((t=>this.getMergeById(e,t))).filter(lt)}getSelectionRangeString(e,t){const o=this.getters.expandZone(e.sheetId,e.zone),s=ca({...e,zone:{...o,bottom:ua(e)?void 0:o.bottom,right:ga(e)?void 0:o.right}},this.getters.getSheetSize),i=this.getters.getRangeString(s,t);if(this.isSingleCellOrMerge(e.sheetId,e.zone)){const{sheetName:e,xc:t}=ta(i);return oa(e,t.split(":")[0])}return i}doesIntersectMerge(e,t){for(const o of this.getMerges(e))if(Sr(t,o))return!0;return!1}doesColumnsHaveCommonMerges(e,t,o){const s=this.getters.getSheet(e);for(let i=0;i<this.getters.getNumberRows(e);i++)if(this.isInSameMerge(s.id,t,i,o,i))return!0;return!1}doesRowsHaveCommonMerges(e,t,o){const s=this.getters.getSheet(e);for(let i=0;i<=this.getters.getNumberCols(e);i++)if(this.isInSameMerge(s.id,i,t,i,o))return!0;return!1}expandZone(e,t){const{left:o,right:s,top:i,bottom:n}=t;let r={left:o,right:s,top:i,bottom:n};for(const t in this.merges[e]){const o=this.getMergeById(e,parseInt(t));o&&Sr(o,r)&&(r=fr(o,r))}return br(r,t)?r:this.expandZone(e,r)}isInSameMerge(e,t,o,s,i){const n=this.getMerge({sheetId:e,col:t,row:o}),r=this.getMerge({sheetId:e,col:s,row:i});return!(!n||!r)&&br(n,r)}isInMerge({sheetId:e,col:t,row:o}){const s=this.mergeCellMap[e];return!!s&&(t in s&&Boolean(s[t]?.[o]))}getMainCellPosition(e){const t=this.getMerge(e);return t?{sheetId:e.sheetId,col:t.left,row:t.top}:e}isMergeHidden(e,t){const o=this.getters.getHiddenColsGroups(e),s=this.getters.getHiddenRowsGroups(e);for(const e of o)if(t.left>=e[0]&&t.right<=e[e.length-1])return!0;for(const e of s)if(t.top>=e[0]&&t.bottom<=e[e.length-1])return!0;return!1}isSingleCellOrMerge(e,t){const o=this.getMerge({sheetId:e,col:t.left,row:t.top});if(o)return br(t,o);const{numberOfCols:s,numberOfRows:i}=wr(t);return 1===s&&1===i}isMainCellPosition(e){return mt(this.getMainCellPosition(e),e)}isMergeDestructive(e,t){let{left:o,right:s,top:i,bottom:n}=t;s=Ze(s,0,this.getters.getNumberCols(e)-1),n=Ze(n,0,this.getters.getNumberRows(e)-1);for(let t=i;t<=n;t++)for(let n=o;n<=s;n++)if(n!==o||t!==i){const o=this.getters.getCell({sheetId:e,col:n,row:t});if(o&&""!==o.content)return!0}return!1}getMergeById(e,t){const o=this.merges[e]?.[t];return void 0!==o?Ok(t,o):void 0}checkDestructiveMerge({sheetId:e,target:t}){if(!this.getters.tryGetSheet(e))return"Success";return t.some((t=>this.isMergeDestructive(e,t)))?"MergeIsDestructive":"Success"}checkOverlap({target:e}){for(const t of e)for(const o of e)if(t!==o&&Sr(t,o))return"MergeOverlap";return"Success"}checkFrozenPanes({sheetId:e,target:t}){if(!this.getters.tryGetSheet(e))return"Success";const{xSplit:o,ySplit:s}=this.getters.getPaneDivisions(e);return Mr(t,o,s)?"FrozenPaneOverlap":"Success"}checkMergedContentUpdate(e){const{col:t,row:o,content:s}=e;if(void 0===s)return"Success";const{col:i,row:n}=this.getMainCellPosition(e);return i===t&&n===o?"Success":"CellIsMerged"}checkMergeExists(e){const{sheetId:t,target:o}=e;for(const e of o){const{left:o,top:s}=e,i=this.getMerge({sheetId:t,col:o,row:s});if(void 0===i||!br(e,i))return"InvalidTarget"}return"Success"}addMerge(e,t){let{left:o,right:s,top:i,bottom:n}=t;s=Ze(s,0,this.getters.getNumberCols(e)-1),n=Ze(n,0,this.getters.getNumberRows(e)-1);if(Oo(o,i)===Oo(s,n))return;const r=this.getters.getCell({sheetId:e,col:o,row:i}),a=this.nextId++;this.history.update("merges",e,a,this.getters.getRangeFromSheetXC(e,dr({left:o,top:i,right:s,bottom:n})));const l=new Set;for(let t=i;t<=n;t++)for(let n=o;n<=s;n++){n===o&&t===i||this.dispatch("UPDATE_CELL",{sheetId:e,col:n,row:t,style:r?r.style:null,content:""});const s=this.getMerge({sheetId:e,col:n,row:t});s&&l.add(s.id),this.history.update("mergeCellMap",e,n,t,a)}for(const t of l){const{top:o,bottom:s,left:i,right:n}=this.getMergeById(e,t);for(let t=o;t<=s;t++)for(let o=i;o<=n;o++){const s={sheetId:e,col:o,row:t},i=this.getMerge(s);i&&i.id===a||(this.history.update("mergeCellMap",e,o,t,void 0),this.dispatch("CLEAR_CELL",s))}this.history.update("merges",e,t,void 0)}}removeMerge(e,t){const{left:o,top:s,bottom:i,right:n}=t,r=this.getMerge({sheetId:e,col:o,row:s});if(void 0!==r&&br(t,r)){this.history.update("merges",e,r.id,void 0);for(let t=s;t<=i;t++)for(let s=o;s<=n;s++)this.history.update("mergeCellMap",e,s,t,void 0)}}applyRangeChangeOnSheet(e,t){const o=Object.entries(this.merges[e]||{});for(const[s,i]of o)if(i){const o=i.zone,n=t(i);switch(n.changeType){case"NONE":break;case"REMOVE":this.removeMerge(e,o);break;default:const{numberOfCols:t,numberOfRows:i}=wr(n.range.zone);1===t&&1===i?this.removeMerge(e,o):this.history.update("merges",e,parseInt(s,10),n.range)}}this.history.update("mergeCellMap",e,{});for(const t of this.getMerges(e))for(const{col:o,row:s}of Er(t))this.history.update("mergeCellMap",e,o,s,t.id)}import(e){const t=e.sheets||[];for(const e of t)this.history.update("merges",e.id,{}),this.history.update("mergeCellMap",e.id,{}),e.merges&&this.importMerges(e.id,e.merges)}importMerges(e,t){for(const o of t)this.addMerge(e,ar(o))}export(e){for(const t of e.sheets){const e=this.merges[t.id];e&&t.merges.push(..._k(e))}}exportForExcel(e){this.export(e)}}).add("headerSize",class extends Rk{static getters=["getUserRowSize","getColSize"];sizes={};handle(e){switch(e.type){case"CREATE_SHEET":this.history.update("sizes",e.sheetId,{COL:Array(this.getters.getNumberCols(e.sheetId)).fill(void 0),ROW:Array(this.getters.getNumberRows(e.sheetId)).fill(void 0)});break;case"DUPLICATE_SHEET":this.history.update("sizes",e.sheetIdTo,ze(this.sizes[e.sheetId]));break;case"DELETE_SHEET":const t={...this.sizes};delete t[e.sheetId],this.history.update("sizes",t);break;case"REMOVE_COLUMNS_ROWS":{const t=Et(this.sizes[e.sheetId][e.dimension],e.elements);this.history.update("sizes",e.sheetId,e.dimension,t);break}case"ADD_COLUMNS_ROWS":{const t=[...this.sizes[e.sheetId][e.dimension]],o=pt(e.position,e.base),s=t[e.base];t.splice(o,0,...Array(e.quantity).fill(s)),this.history.update("sizes",e.sheetId,e.dimension,t);break}case"RESIZE_COLUMNS_ROWS":if("ROW"===e.dimension)for(const t of e.elements)this.history.update("sizes",e.sheetId,e.dimension,t,e.size||void 0);else for(const t of e.elements)this.history.update("sizes",e.sheetId,e.dimension,t,e.size||void 0)}}getColSize(e,t){return Math.round(this.sizes[e]?.COL[t]||se)}getUserRowSize(e,t){const o=this.sizes[e]?.ROW[t];return o?Math.round(o):void 0}import(e){for(const t of e.sheets){const e={COL:Array(t.colNumber).fill(void 0),ROW:Array(t.rowNumber).fill(void 0)};for(const[o,s]of Object.entries(t.rows))s.size&&(e.ROW[o]=s.size);for(const[o,s]of Object.entries(t.cols))s.size&&(e.COL[o]=s.size);this.sizes[t.id]=e}}exportForExcel(e){this.exportData(e,!0)}export(e){this.exportData(e)}exportData(e,t=!1){for(const o of e.sheets){void 0===o.rows&&(o.rows={});for(const e of je(0,this.getters.getNumberRows(o.id)))(t||this.sizes[o.id].ROW[e])&&(o.rows[e]={...o.rows[e],size:this.getUserRowSize(o.id,e)??ie});void 0===o.cols&&(o.cols={});for(const e of je(0,this.getters.getNumberCols(o.id)))(t||this.sizes[o.id].COL[e])&&(o.cols[e]={...o.cols[e],size:this.getColSize(o.id,e)})}}}).add("borders",class extends Rk{static getters=["getCellBorder","getBordersColors"];borders={};allowDispatch(e){return"SET_BORDER"===e.type?this.checkBordersUnchanged(e):"Success"}handle(e){switch(e.type){case"ADD_MERGE":for(const t of e.target)this.addBordersToMerge(e.sheetId,t);break;case"DUPLICATE_SHEET":const t=this.borders[e.sheetId];if(t){const o=t.slice().map((e=>e?.slice().map((e=>ze(e)))));this.history.update("borders",e.sheetIdTo,o)}break;case"DELETE_SHEET":const o={...this.borders};delete o[e.sheetId],this.history.update("borders",o);break;case"SET_BORDER":this.setBorder(e.sheetId,e.col,e.row,e.border);break;case"SET_BORDERS_ON_TARGET":for(const t of e.target)for(let o=t.top;o<=t.bottom;o++)for(let s=t.left;s<=t.right;s++)this.setBorder(e.sheetId,s,o,e.border);break;case"SET_ZONE_BORDERS":if(e.border){const t=e.target.map((t=>this.getters.expandZone(e.sheetId,t)));this.setBorders(e.sheetId,t,e.border.position,""===e.border.color?void 0:{style:e.border.style||ve,color:e.border.color||be})}break;case"CLEAR_FORMATTING":this.clearBorders(e.sheetId,e.target);break;case"REMOVE_COLUMNS_ROWS":const s=[...e.elements].sort(((e,t)=>t-e));for(const t of Ye(s))if("COL"===e.dimension){const o=this.getters.getColsZone(e.sheetId,t[t.length-1],t[0]);this.clearInsideBorders(e.sheetId,[o]),this.shiftBordersHorizontally(e.sheetId,t[0]+1,-t.length)}else{const o=this.getters.getRowsZone(e.sheetId,t[t.length-1],t[0]);this.clearInsideBorders(e.sheetId,[o]),this.shiftBordersVertically(e.sheetId,t[0]+1,-t.length)}break;case"ADD_COLUMNS_ROWS":"COL"===e.dimension?this.handleAddColumns(e):this.handleAddRows(e)}}handleAddColumns(e){let t,o;"before"===e.position?(this.shiftBordersHorizontally(e.sheetId,e.base,e.quantity),t=e.base-1,o=e.base+e.quantity):(this.shiftBordersHorizontally(e.sheetId,e.base+1,e.quantity),t=e.base,o=e.base+e.quantity+1),this.ensureColumnBorderContinuity(e.sheetId,t,o)}handleAddRows(e){let t,o;"before"===e.position?(this.shiftBordersVertically(e.sheetId,e.base,e.quantity),t=e.base-1,o=e.base+e.quantity):(this.shiftBordersVertically(e.sheetId,e.base+1,e.quantity),t=e.base,o=e.base+e.quantity+1),this.ensureRowBorderContinuity(e.sheetId,t,o)}getCellBorder({sheetId:e,col:t,row:o}){const s=this.borders[e]?.[t]?.[o];return s?.top||s?.bottom||s?.left||s?.right?ze(s):null}getBordersColors(e){const t=[],o=this.borders[e];if(o)for(const e of o.filter(lt))for(const o of e)if(o)for(const e of["top","bottom","left","right"]){const s=o[e]?.color;s&&t.push(s)}return t}ensureColumnBorderContinuity(e,t,o){const s=je(t+1,o);for(let i=0;i<this.getters.getNumberRows(e);i++){const n=this.getCellBorder({sheetId:e,col:t,row:i}),r=this.getCellBorder({sheetId:e,col:o,row:i});if(n&&r){const t=this.getCommonSides(n,r);for(const o of s)this.addBorder(e,o,i,t)}}}ensureRowBorderContinuity(e,t,o){const s=je(t+1,o);for(let i=0;i<this.getters.getNumberCols(e);i++){const n=this.getCellBorder({sheetId:e,col:i,row:t}),r=this.getCellBorder({sheetId:e,col:i,row:o});if(n&&r){const t=this.getCommonSides(n,r);for(const o of s)this.addBorder(e,i,o,t)}}}getCommonSides(e,t){const o={};for(const s of["top","bottom","left","right"])e[s]&&mt(e[s],t[s])&&(o[s]=e[s]);return o}getColumnsWithBorders(e){const t=this.borders[e];return t?Object.keys(t).map((e=>parseInt(e,10))):[]}getRowsWithBorders(e){const t=this.borders[e]?.filter(lt);if(!t)return[];const o=new Set;for(const e of t)for(const t in e)o.add(parseInt(t,10));return Array.from(o)}getRowsRange(e){return this.borders[e]?je(0,this.getters.getNumberRows(e)+1):[]}shiftBordersHorizontally(e,t,o){this.borders[e]&&this.getColumnsWithBorders(e).filter((e=>e>=t)).sort(((e,t)=>o<0?e-t:t-e)).forEach((t=>{this.moveBordersOfColumn(e,t,o)}))}shiftBordersVertically(e,t,o){this.borders[e]&&(o<0&&this.moveBordersOfRow(e,t,o,{destructive:!1}),this.getRowsWithBorders(e).filter((e=>e>=t)).sort(((e,t)=>o<0?e-t:t-e)).forEach((t=>{this.moveBordersOfRow(e,t,o)})))}moveBordersOfRow(e,t,o,{destructive:s}={destructive:!0}){const i=this.borders[e];i&&this.getColumnsWithBorders(e).forEach((n=>{const r=i[n]?.[t+o],a=i[n]?.[t];this.history.update("borders",e,n,t+o,s?a:a||r),this.history.update("borders",e,n,t,void 0)}))}moveBordersOfColumn(e,t,o,{destructive:s}={destructive:!0}){const i=this.borders[e];i&&this.getRowsRange(e).forEach((n=>{const r=i[t+o]?.[n],a=i[t]?.[n];this.history.update("borders",e,t+o,n,s?a:a||r),s&&this.history.update("borders",e,t,n,void 0)}))}setBorder(e,t,o,s,i=!0){const n=this.getters.getNumberCols(e)-1,r=this.getters.getNumberRows(e)-1;!i&&this.borders[e]?.[t]?.[o]?.left||(this.history.update("borders",e,t,o,"left",s?.left),s?.left&&t>0&&!mt(this.borders[e]?.[t-1]?.[o]?.right,s?.left)&&this.history.update("borders",e,t-1,o,"right",void 0)),!i&&this.borders[e]?.[t]?.[o]?.top||(this.history.update("borders",e,t,o,"top",s?.top),s?.top&&o>0&&!mt(this.borders[e]?.[t]?.[o-1]?.bottom,s?.top)&&this.history.update("borders",e,t,o-1,"bottom",void 0)),!i&&this.borders[e]?.[t]?.[o]?.right||(this.history.update("borders",e,t,o,"right",s?.right),s?.right&&t<n&&!mt(this.borders[e]?.[t+1]?.[o]?.left,s?.right)&&this.history.update("borders",e,t+1,o,"left",void 0)),!i&&this.borders[e]?.[t]?.[o]?.bottom||(this.history.update("borders",e,t,o,"bottom",s?.bottom),s?.bottom&&o<r&&!mt(this.borders[e]?.[t]?.[o+1]?.top,s?.bottom)&&this.history.update("borders",e,t,o+1,"top",void 0))}clearBorders(e,t,o=!1){const s=this.getters.getNumberCols(e)-1,i=this.getters.getNumberRows(e)-1;for(const n of er(t))for(let t=n.top;t<=n.bottom;t++){o&&(n.left>0&&this.history.update("borders",e,n.left-1,t,"right",void 0),n.right<s&&this.history.update("borders",e,n.right+1,t,"left",void 0));for(let s=n.left;s<=n.right;s++)this.history.update("borders",e,s,t,void 0),o&&(n.top>0&&this.history.update("borders",e,s,n.top-1,"bottom",void 0),n.bottom<i&&this.history.update("borders",e,s,n.bottom+1,"top",void 0))}}clearInsideBorders(e,t){for(const o of t)for(let t=o.top;t<=o.bottom;t++)for(let s=o.left;s<=o.right;s++)this.history.update("borders",e,s,t,void 0)}addBorder(e,t,o,s){this.setBorder(e,t,o,{...this.getCellBorder({sheetId:e,col:t,row:o}),...s})}setBorders(e,t,o,s){if("clear"===o)return this.clearBorders(e,t,!0);for(const i of er(t)){if("all"===o)for(let t=i.top;t<=i.bottom;t++)for(let o=i.left;o<=i.right;o++)this.addBorder(e,o,t,{top:s,right:s,bottom:s,left:s});if("h"===o||"hv"===o){if(i.top===i.bottom)continue;for(let t=i.left;t<=i.right;t++){this.addBorder(e,t,i.top,{bottom:s});for(let o=i.top+1;o<i.bottom;o++)this.addBorder(e,t,o,{top:s,bottom:s});this.addBorder(e,t,i.bottom,{top:s})}}if("v"===o||"hv"===o){if(i.left===i.right)continue;for(let t=i.top;t<=i.bottom;t++){this.addBorder(e,i.left,t,{right:s});for(let o=i.left+1;o<i.right;o++)this.addBorder(e,o,t,{left:s,right:s});this.addBorder(e,i.right,t,{left:s})}}if("left"===o||"external"===o)for(let t=i.top;t<=i.bottom;t++)this.addBorder(e,i.left,t,{left:s});if("right"===o||"external"===o)for(let t=i.top;t<=i.bottom;t++)this.addBorder(e,i.right,t,{right:s});if("top"===o||"external"===o)for(let t=i.left;t<=i.right;t++)this.addBorder(e,t,i.top,{top:s});if("bottom"===o||"external"===o)for(let t=i.left;t<=i.right;t++)this.addBorder(e,t,i.bottom,{bottom:s})}}addBordersToMerge(e,t){const{left:o,right:s,top:i,bottom:n}=t,r=this.getCellBorder({sheetId:e,col:o,row:i}),a=this.getCellBorder({sheetId:e,col:s,row:n});this.clearBorders(e,[t]),r?.top&&this.setBorders(e,[{...t,bottom:i}],"top",r.top),r?.left&&this.setBorders(e,[{...t,right:o}],"left",r.left),a?.bottom?this.setBorders(e,[{...t,top:n}],"bottom",a.bottom):r?.bottom&&this.setBorders(e,[{...t,top:n}],"bottom",r.bottom),a?.right?this.setBorders(e,[{...t,left:s}],"right",a.right):r?.right&&this.setBorders(e,[{...t,left:s}],"right",r.right)}checkBordersUnchanged(e){const t=this.getCellBorder(e),o=!(e.border?.bottom||e.border?.left||e.border?.right||e.border?.top);return!t&&o||mt(t,e.border)?"NoChanges":"Success"}import(e){if(Object.keys(e.borders||{}).length)for(const t of e.sheets)for(const[o,s]of Br(t.id,t.borders)){const{sheetId:t,col:i,row:n}=o,r=e.borders[s];this.setBorder(t,i,n,r,!1)}for(const t of e.sheets)if(t.merges)for(const e of t.merges)this.addBordersToMerge(t.id,ar(e))}export(e){const t={};for(const o of e.sheets){const e={};for(let s=0;s<o.colNumber;s++)for(let i=0;i<o.rowNumber;i++){const n=this.getCellBorder({sheetId:o.id,col:s,row:i});if(n){const r=Hr(n,t),a={sheetId:o.id,col:s,row:i};e[r]??=[],e[r].push(a)}}o.borders=Ur(e)}e.borders=t}exportForExcel(e){this.export(e)}}).add("conditional formatting",class extends Rk{static getters=["getConditionalFormats","getRulesSelection","getRulesByCell","getAdaptedCfRanges"];cfRules={};adaptCFFormulas(e){for(const t in this.cfRules)for(const o of this.cfRules[t])if("DataBarRule"===o.rule.type&&o.rule.rangeValues){const s=e(o.rule.rangeValues);switch(s.changeType){case"REMOVE":this.history.update("cfRules",t,this.cfRules[t].indexOf(o),"rule","rangeValues",void 0);break;case"RESIZE":case"MOVE":case"CHANGE":this.history.update("cfRules",t,this.cfRules[t].indexOf(o),"rule","rangeValues",s.range)}}else if("CellIsRule"===o.rule.type)for(let s=0;s<o.rule.values.length;s++)this.history.update("cfRules",t,this.cfRules[t].indexOf(o),"rule","values",s,this.getters.adaptFormulaStringDependencies(t,o.rule.values[s],e));else if("IconSetRule"===o.rule.type)for(const s of["lowerInflectionPoint","upperInflectionPoint"])"formula"===o.rule[s].type&&this.history.update("cfRules",t,this.cfRules[t].indexOf(o),"rule",s,"value",this.getters.adaptFormulaStringDependencies(t,o.rule[s].value,e));else if("ColorScaleRule"===o.rule.type)for(const s of["minimum","maximum","midpoint"]){const i=o.rule[s];"formula"===i?.type&&i?.value&&this.history.update("cfRules",t,this.cfRules[t].indexOf(o),"rule",s,"value",this.getters.adaptFormulaStringDependencies(t,i.value,e))}}adaptCFRanges(e,t){for(const o of this.cfRules[e])for(const s of o.ranges){const i=t(s);switch(i.changeType){case"REMOVE":const t=o.ranges.slice();t.splice(o.ranges.indexOf(s),1),t.length>=1?this.history.update("cfRules",e,this.cfRules[e].indexOf(o),"ranges",t):this.removeConditionalFormatting(o.id,e);break;case"RESIZE":case"MOVE":case"CHANGE":this.history.update("cfRules",e,this.cfRules[e].indexOf(o),"ranges",o.ranges.indexOf(s),i.range)}}}adaptRanges(e,t,o){const s=t?[t]:Object.keys(this.cfRules);for(const t of s)this.adaptCFRanges(t,e);this.adaptCFFormulas(e)}allowDispatch(e){switch(e.type){case"ADD_CONDITIONAL_FORMAT":return e.ranges.some((e=>!this.getters.tryGetSheet(e._sheetId)))?"InvalidSheetId":this.checkValidations(e,this.checkCFRule,this.checkEmptyRange,this.checkCFHasChanged);case"CHANGE_CONDITIONAL_FORMAT_PRIORITY":return this.checkValidPriorityChange(e.cfId,e.delta,e.sheetId)}return"Success"}handle(e){switch(e.type){case"CREATE_SHEET":this.cfRules[e.sheetId]=[];break;case"DUPLICATE_SHEET":this.history.update("cfRules",e.sheetIdTo,[]);for(const t of this.getConditionalFormats(e.sheetId))this.addConditionalFormatting(t,e.sheetIdTo);break;case"DELETE_SHEET":const t=Object.assign({},this.cfRules);delete t[e.sheetId],this.history.update("cfRules",t);break;case"ADD_CONDITIONAL_FORMAT":const o={...e.cf,ranges:e.ranges.map((t=>this.getters.getRangeString(this.getters.getRangeFromRangeData(t),e.sheetId)))};this.addConditionalFormatting(o,e.sheetId);break;case"REMOVE_CONDITIONAL_FORMAT":this.removeConditionalFormatting(e.id,e.sheetId);break;case"CHANGE_CONDITIONAL_FORMAT_PRIORITY":this.changeCFPriority(e.cfId,e.delta,e.sheetId)}}import(e){for(const t of e.sheets)this.cfRules[t.id]=t.conditionalFormats.map((e=>this.mapToConditionalFormatInternal(t.id,e)))}export(e){if(e.sheets)for(const t of e.sheets)this.cfRules[t.id]&&(t.conditionalFormats=this.cfRules[t.id].map((e=>this.mapToConditionalFormat(t.id,e))))}exportForExcel(e){if(e.sheets)for(const t of e.sheets)this.cfRules[t.id]&&(t.conditionalFormats=this.cfRules[t.id].map((e=>this.mapToConditionalFormat(t.id,e,{useBoundedReference:!0}))))}getConditionalFormats(e){return this.cfRules[e]?.map((t=>this.mapToConditionalFormat(e,t)))||[]}getRulesSelection(e,t){const o=new Set;return t.forEach((t=>{this.getRulesByZone(e,t).forEach((e=>{o.add(e)}))})),Array.from(o)}getRulesByZone(e,t){const o=new Set;for(let s=t.top;s<=t.bottom;s++)for(let i=t.left;i<=t.right;i++){this.getRulesByCell(e,i,s).forEach((e=>{o.add(e.id)}))}return o}getRulesByCell(e,t,o){const s=[];for(const i of this.cfRules[e])for(const e of i.ranges)Cr(t,o,e.zone)&&s.push(i);return new Set(s.map((t=>this.mapToConditionalFormat(e,t))))}getAdaptedCfRanges(e,t,o,s){if(0===o.length&&0===s.length)return;const i=this.getters.getConditionalFormats(e),n=i.findIndex((e=>e.id===t.id));let r=[];n>-1&&(r=i[n].ranges.map(rr));const a=er(r,s);return er([...o,...a],[]).map((t=>this.getters.getRangeDataFromZone(e,t)))}mapToConditionalFormat(e,t,{useBoundedReference:o}={useBoundedReference:!1}){const s=t.ranges.map((t=>this.getters.getRangeString(t,e,{useBoundedReference:o})));return"DataBarRule"!==t.rule.type?{...t,rule:{...t.rule},ranges:s}:{...t,rule:{...t.rule,rangeValues:t.rule.rangeValues&&this.getters.getRangeString(t.rule.rangeValues,e,{useBoundedReference:o})},ranges:s}}mapToConditionalFormatInternal(e,t){const o=t.ranges.map((t=>this.getters.getRangeFromSheetXC(e,t)));return"DataBarRule"!==t.rule.type?{...t,rule:{...t.rule},ranges:o}:{...t,rule:{...t.rule,rangeValues:t.rule.rangeValues?this.getters.getRangeFromSheetXC(e,t.rule.rangeValues):void 0},ranges:o}}addConditionalFormatting(e,t){const o=this.cfRules[t].slice(),s=o.findIndex((t=>t.id===e.id)),i=this.mapToConditionalFormatInternal(t,e);s>-1?o.splice(s,1,i):o.push(i),this.history.update("cfRules",t,o)}checkValidPriorityChange(e,t,o){if(!this.cfRules[o])return"InvalidSheetId";const s=this.cfRules[o].findIndex((t=>t.id===e));if(-1===s)return"InvalidConditionalFormatId";const i=s-t;return i<0||i>=this.cfRules[o].length?"InvalidConditionalFormatId":"Success"}checkEmptyRange(e){return e.ranges.length?"Success":"EmptyRange"}checkCFRule(e){const t=e.cf.rule;switch(t.type){case"CellIsRule":return this.checkValidations(t,this.checkOperatorArgsNumber,this.checkCFValues);case"ColorScaleRule":return this.checkValidations(t,this.chainValidations(this.checkThresholds(this.checkFormulaCompilation)),this.chainValidations(this.checkThresholds(this.checkNaN),this.batchValidations(this.checkMinBiggerThanMax,this.checkMinBiggerThanMid,this.checkMidBiggerThanMax)));case"IconSetRule":return this.checkValidations(t,this.chainValidations(this.checkInflectionPoints(this.checkNaN),this.checkLowerBiggerThanUpper),this.chainValidations(this.checkInflectionPoints(this.checkFormulaCompilation)))}return"Success"}checkCFHasChanged(e){const t=this.mapToConditionalFormatInternal(e.sheetId,{...e.cf,ranges:e.ranges.map((t=>this.getters.getRangeString(this.getters.getRangeFromRangeData(t),e.sheetId)))}),o=this.cfRules[e.sheetId]?.find((t=>t.id===e.cf.id));return o&&mt(t,o)?"NoChanges":"Success"}checkOperatorArgsNumber(e){const t=Zx.get(e.operator).numberOfValues({type:e.operator,values:e.values});if(void 0===t||t>2)throw new Error("Checking more than 2 arguments is currently not supported. Add the appropriate CommandResult if you want to.");const o=[],s=e=>void 0===e||""===e;return t>=1&&s(e.values[0])&&o.push("FirstArgMissing"),t>=2&&s(e.values[1])&&o.push("SecondArgMissing"),o.length?o:"Success"}checkNaN(e,t){if(["number","percentage","percentile"].includes(e.type)&&(""===e.value||isNaN(e.value)))switch(t){case"min":return"MinNaN";case"max":return"MaxNaN";case"mid":return"MidNaN";case"upperInflectionPoint":return"ValueUpperInflectionNaN";case"lowerInflectionPoint":return"ValueLowerInflectionNaN"}return"Success"}checkFormulaCompilation(e,t){if("formula"!==e.type)return"Success";if(PS(e.value||"").isBadExpression)switch(t){case"min":return"MinInvalidFormula";case"max":return"MaxInvalidFormula";case"mid":return"MidInvalidFormula";case"upperInflectionPoint":return"ValueUpperInvalidFormula";case"lowerInflectionPoint":return"ValueLowerInvalidFormula"}return"Success"}checkThresholds(e){return this.batchValidations((t=>e(t.minimum,"min")),(t=>e(t.maximum,"max")),(t=>t.midpoint?e(t.midpoint,"mid"):"Success"))}checkInflectionPoints(e){return this.batchValidations((t=>e(t.lowerInflectionPoint,"lowerInflectionPoint")),(t=>e(t.upperInflectionPoint,"upperInflectionPoint")))}checkLowerBiggerThanUpper(e){const t=e.lowerInflectionPoint.value,o=e.upperInflectionPoint.value;return["number","percentage","percentile"].includes(e.lowerInflectionPoint.type)&&e.lowerInflectionPoint.type===e.upperInflectionPoint.type&&Number(t)>Number(o)?"LowerBiggerThanUpper":"Success"}checkMinBiggerThanMax(e){const t=e.minimum.value,o=e.maximum.value;return["number","percentage","percentile"].includes(e.minimum.type)&&e.minimum.type===e.maximum.type&&Dk(t)>=Dk(o)?"MinBiggerThanMax":"Success"}checkMidBiggerThanMax(e){const t=e.midpoint?.value,o=e.maximum.value;return e.midpoint&&["number","percentage","percentile"].includes(e.midpoint.type)&&e.midpoint.type===e.maximum.type&&Dk(t)>=Dk(o)?"MidBiggerThanMax":"Success"}checkMinBiggerThanMid(e){const t=e.minimum.value,o=e.midpoint?.value;return e.midpoint&&["number","percentage","percentile"].includes(e.midpoint.type)&&e.minimum.type===e.midpoint.type&&Dk(t)>=Dk(o)?"MinBiggerThanMid":"Success"}checkCFValues(e){for(const t of e.values){if(!t.startsWith("="))continue;if(PS(t||"").isBadExpression)return"ValueCellIsInvalidFormula"}return"Success"}removeConditionalFormatting(e,t){const o=this.cfRules[t].findIndex((t=>t.id===e));if(-1!==o){const e=this.cfRules[t].slice();e.splice(o,1),this.history.update("cfRules",t,e)}}changeCFPriority(e,t,o){const s=this.cfRules[o].findIndex((t=>t.id===e)),i=this.cfRules[o][s],n=s-t,r=[...this.cfRules[o]];r.splice(s,1),r.splice(n,0,i),this.history.update("cfRules",o,r)}}).add("figures",class extends Rk{static getters=["getFigures","getFigure","getFigureSheetId"];figures={};insertionOrders=[];adaptRanges(e,t){if(t)for(const o of this.getFigures(t)){const s=e(this.getters.getRangeFromZone(t,{left:o.col,right:o.col,top:o.row,bottom:o.row}));if("MOVE"===s.changeType)this.history.update("figures",t,o.id,"col",s.range.zone.right),this.history.update("figures",t,o.id,"row",s.range.zone.bottom);else if("REMOVE"===s.changeType){const s=e(this.getters.getRangeFromZone(t,{left:0,right:o.col-1,top:0,bottom:o.row-1}));let{offset:i,col:n,row:r}=o;"NONE"!==s.changeType&&(n=s.range.zone.right+1,r=s.range.zone.bottom+1),({offset:i,col:n,row:r}=this.getPositionInSheet(t,{...o,col:n,row:r})),this.history.update("figures",t,o.id,"offset",i),this.history.update("figures",t,o.id,"col",n),this.history.update("figures",t,o.id,"row",r)}}}allowDispatch(e){switch(e.type){case"CREATE_FIGURE":return this.checkValidations(e,this.checkFigureDuplicate,this.checkFigureAnchorOffset);case"UPDATE_FIGURE":return this.checkValidations(e,this.checkFigureExists,this.checkFigureAnchorOffset);case"DELETE_FIGURE":return this.checkFigureExists(e);default:return"Success"}}beforeHandle(e){if("DELETE_SHEET"===e.type)this.getters.getFigures(e.sheetId).forEach((t=>{this.dispatch("DELETE_FIGURE",{figureId:t.id,sheetId:e.sheetId})}))}handle(e){switch(e.type){case"CREATE_SHEET":this.figures[e.sheetId]={};break;case"DELETE_SHEET":this.deleteSheet(e.sheetId);break;case"CREATE_FIGURE":const t={id:e.figureId,col:e.col,row:e.row,offset:e.offset,width:e.size.width,height:e.size.height,tag:e.tag};this.addFigure(t,e.sheetId);break;case"UPDATE_FIGURE":this.updateFigure(e);break;case"DELETE_FIGURE":this.removeFigure(e.figureId,e.sheetId);break;case"REMOVE_COLUMNS_ROWS":"COL"===e.dimension?this.onColRemove(e.sheetId):this.onRowRemove(e.sheetId)}}onColRemove(e){const t=this.getters.getNumberCols(e),o=new Array(t+1);o[t]=0;for(let s=t-1;s>=0;s--)o[s]=o[s+1]+this.getters.getColSize(e,s);for(const t of this.getFigures(e))if(t.offset.x+t.width>o[t.col]){let s=t.offset.x,i=t.col;for(s=Math.min(s,o[i]-t.width);s<0&&i>0;)i--,s=o[i]-t.width;s!==t.offset.x&&this.history.update("figures",e,t.id,"offset",{x:Math.max(s,0),y:t.offset.y}),i!==t.col&&this.history.update("figures",e,t.id,"col",i)}}onRowRemove(e){const t=this.getters.getNumberRows(e),o=new Array(t+1);o[t]=0;for(let s=t-1;s>=0;s--)o[s]=o[s+1]+(this.getters.getUserRowSize(e,s)??ie);for(const t of this.getFigures(e))if(t.offset.y+t.height>o[t.row]){let s=t.offset.y,i=t.row;for(let t=this.getters.getUserRowSize(e,i)??ie;t<s;t=this.getters.getUserRowSize(e,i)??ie)i+=1,s-=t;for(s=Math.min(s,o[i]-t.height);s<0&&i>0;)i--,s=o[i]-t.height;s!==t.offset.y&&this.history.update("figures",e,t.id,"offset",{x:t.offset.x,y:Math.max(0,s)}),i!==t.row&&this.history.update("figures",e,t.id,"row",i)}else t.offset.y+t.height>o[0]&&this.history.update("figures",e,t.id,"offset",{x:t.offset.x,y:Math.max(o[0]-t.height,0)})}getPositionInSheet(e,t){const{numberOfRows:o,numberOfCols:s}=this.getters.getSheetSize(e);let i,n,r=0,a=0,{col:l,row:c}=t;const h={...t.offset};for(i=o;r<t.height&&i>0;i--)r+=this.getters.getUserRowSize(e,i-1)??ie;for(c>i?(c=i,h.y=Math.max(r-t.height,0)):c===i&&(h.y=Ze(h.y,0,Math.max(r-t.height,0))),n=s;a<t.width&&n>0;n--)a+=this.getters.getColSize(e,n-1);return l>n?(l=n,h.x=Math.max(a-t.width,0)):n===l&&(h.x=Ze(h.x,0,Math.max(a-t.width,0))),{col:l,row:c,offset:h}}updateFigure(e){if(!("figureId"in e)||!("sheetId"in e))return;const{figureId:t,sheetId:o,...s}=e,i={...this.getFigure(o,t),...s};for(const[e,t]of Object.entries(s))switch(e){case"offset":this.history.update("figures",o,i.id,e,t);break;case"col":case"row":case"width":case"height":void 0!==t&&this.history.update("figures",o,i.id,e,t)}}addFigure(e,t){this.history.update("figures",t,e.id,e),this.history.update("insertionOrders",this.insertionOrders.length,e.id)}deleteSheet(e){this.history.update("insertionOrders",this.insertionOrders.filter((t=>!this.figures[e]?.[t]))),this.history.update("figures",e,void 0)}removeFigure(e,t){this.history.update("insertionOrders",this.insertionOrders.filter((t=>t!==e))),this.history.update("figures",t,e,void 0)}checkFigureExists(e){return void 0===this.figures[e.sheetId]?.[e.figureId]?"FigureDoesNotExist":"Success"}checkFigureDuplicate(e){return Object.values(this.figures).find((t=>t?.[e.figureId]))?"DuplicatedFigureId":"Success"}checkFigureAnchorOffset(e){return e.col<0||e.row<0||e.offset&&(e.offset.x<0||e.offset.y<0)?"WrongSheetPosition":"Success"}getFigures(e){const t=[];for(const o of this.insertionOrders){const s=this.figures[e]?.[o];s&&t.push(s)}return t}getFigure(e,t){return this.figures[e]?.[t]}getFigureSheetId(e){return Object.keys(this.figures).find((t=>void 0!==this.figures[t]?.[e]))}import(e){for(const t of e.sheets)for(const e of t.figures)this.addFigure(e,t.id)}export(e){for(const t of e.sheets)for(const e of this.getFigures(t.id)){const o=void 0;t.figures.push({...e,data:o})}}exportForExcel(e){return this.export(e)}}).add("chart",class extends Rk{static getters=["isChartDefined","getChartDefinition","getChartType","getChartIds","getChart","getContextCreationChart"];charts={};createChart=ex(this.getters);validateChartDefinition=e=>ox(this,e.definition);adaptRanges(e){for(const[t,o]of Object.entries(this.charts))this.history.update("charts",t,o?.updateRanges(e))}allowDispatch(e){switch(e.type){case"CREATE_CHART":return this.checkValidations(e,this.chainValidations(this.validateChartDefinition,this.checkChartDuplicate));case"UPDATE_CHART":return this.checkValidations(e,this.chainValidations(this.validateChartDefinition,this.checkChartExists,this.checkChartChanged));default:return"Success"}}handle(e){switch(e.type){case"CREATE_CHART":this.addFigure(e.figureId,e.sheetId,e.col,e.row,e.offset,e.size),this.addChart(e.figureId,e.definition);break;case"UPDATE_CHART":this.addChart(e.figureId,e.definition);break;case"DUPLICATE_SHEET":{const t=this.getters.getFigures(e.sheetId);for(const o of t)if("chart"===o.tag){const t=o.id.split(we).pop(),s=`${e.sheetIdTo}${we}${t}`,i=this.charts[o.id]?.duplicateInDuplicatedSheet(e.sheetIdTo);i&&this.dispatch("CREATE_CHART",{figureId:s,col:o.col,row:o.row,offset:o.offset,size:{width:o.width,height:o.height},definition:i.getDefinition(),sheetId:e.sheetIdTo})}break}case"DELETE_FIGURE":this.history.update("charts",e.figureId,void 0);break;case"DELETE_SHEET":for(const t of this.getChartIds(e.sheetId))this.history.update("charts",t,void 0)}}getContextCreationChart(e){return this.charts[e]?.getContextCreation()}getChart(e){return this.charts[e]}getChartType(e){const t=this.charts[e]?.type;if(!t)throw new Error("Chart not defined.");return t}isChartDefined(e){return e in this.charts&&void 0!==this.charts}getChartIds(e){return Object.entries(this.charts).filter((([,t])=>t?.sheetId===e)).map((([e])=>e))}getChartDefinition(e){const t=this.charts[e]?.getDefinition();if(!t)throw new Error(`There is no chart with the given figureId: ${e}`);return t}import(e){for(const t of e.sheets)if(t.figures)for(const e of t.figures)"chart"===e.tag&&(this.charts[e.id]=this.createChart(e.id,e.data,t.id))}export(e){if(e.sheets)for(const t of e.sheets){const e=this.getters.getFigures(t.id),o=[];for(const t of e){const e=t;if(e&&"chart"===e.tag){const t=this.charts[e.id]?.getDefinition();t&&(e.data=t,o.push(e))}else o.push(e)}t.figures=o}}addFigure(e,t,o,s,i,n={width:536,height:335}){this.dispatch("CREATE_FIGURE",{sheetId:t,figureId:e,col:o,row:s,offset:i,size:n,tag:"chart"})}addChart(e,t){const o=this.getters.getFigureSheetId(e);o&&this.history.update("charts",e,this.createChart(e,t,o))}checkChartDuplicate(e){return this.getters.getFigureSheetId(e.figureId)?"DuplicatedChartId":"Success"}checkChartExists(e){return this.isChartDefined(e.figureId)?"Success":"ChartDoesNotExist"}checkChartChanged(e){return mt(this.getChartDefinition(e.figureId),e.definition)?"NoChanges":"Success"}}).add("image",class extends Rk{static getters=["getImage","getImagePath","getImageSize"];fileStore;images={};syncedImages=new Set;constructor(e){super(e),this.fileStore=e.external.fileStore}allowDispatch(e){return"CREATE_IMAGE"===e.type&&this.getters.getFigure(e.sheetId,e.figureId)?"InvalidFigureId":"Success"}handle(e){switch(e.type){case"CREATE_IMAGE":this.addFigure(e.figureId,e.sheetId,e.col,e.row,e.offset,e.size),this.history.update("images",e.sheetId,e.figureId,e.definition),this.syncedImages.add(e.definition.path);break;case"DUPLICATE_SHEET":{const t=this.getters.getFigures(e.sheetId);for(const o of t)if("image"===o.tag){const t=o.id.split(we).pop(),s=`${e.sheetIdTo}${we}${t}`,i=this.getImage(o.id);if(i){const t={width:o.width,height:o.height};this.dispatch("CREATE_IMAGE",{sheetId:e.sheetIdTo,figureId:s,offset:o.offset,col:o.col,row:o.row,size:t,definition:ze(i)})}}break}case"DELETE_FIGURE":this.history.update("images",e.sheetId,e.figureId,void 0);break;case"DELETE_SHEET":this.history.update("images",e.sheetId,void 0)}}garbageCollectExternalResources(){const e=new Set(this.getAllImages().map((e=>e.path)));for(const t of this.syncedImages)e.has(t)||this.fileStore?.delete(t)}getImage(e){for(const t of Object.values(this.images))if(t&&t[e])return t[e];throw new Error(`There is no image with the given figureId: ${e}`)}getImagePath(e){return this.getImage(e).path}getImageSize(e){return this.getImage(e).size}addFigure(e,t,o,s,i,n){this.dispatch("CREATE_FIGURE",{sheetId:t,figureId:e,col:o,row:s,offset:i,size:n,tag:"image"})}import(e){for(const t of e.sheets){const e=(t.figures||[]).filter((e=>"image"===e.tag));for(const o of e)this.history.update("images",t.id,o.id,o.data),this.syncedImages.add(o.data.path)}}export(e){for(const t of e.sheets){const e=t.figures.filter((e=>"image"===e.tag));for(const o of e)o.data=this.images[t.id]?.[o.id]}}exportForExcel(e){for(const t of e.sheets){t.images||(t.images=[]);const e=this.getters.getFigures(t.id),o=[];for(const t of e)if("image"===t?.tag){const e=this.getImage(t.id);e&&o.push({...t,data:ze(e)})}t.images=[...t.images,...o]}}getAllImages(){const e=[];for(const t in this.images)e.push(...Object.values(this.images[t]||{}).filter(lt));return e}}).add("pivot_core",class extends Rk{static getters=["getPivotCoreDefinition","getPivotDisplayName","getPivotId","getPivotFormulaId","getPivotIds","getMeasureCompiledFormula","getPivotName","isExistingPivot"];nextFormulaId=1;pivots={};formulaIds={};compiledMeasureFormulas={};allowDispatch(e){switch(e.type){case"ADD_PIVOT":return this.checkValidations(e.pivot,this.checkDuplicatedMeasureIds,this.checkSortedColumnInMeasures);case"UPDATE_PIVOT":return e.pivotId in this.pivots?mt(e.pivot,this.pivots[e.pivotId]?.definition)?"NoChanges":""===e.pivot.name?"EmptyName":this.checkValidations(e.pivot,this.checkDuplicatedMeasureIds,this.checkSortedColumnInMeasures):"PivotIdNotFound";case"RENAME_PIVOT":if(!(e.pivotId in this.pivots))return"PivotIdNotFound";if(""===e.name)return"EmptyName";break;case"REMOVE_PIVOT":case"DUPLICATE_PIVOT":case"INSERT_PIVOT":case"DUPLICATE_PIVOT":if(!(e.pivotId in this.pivots))return"PivotIdNotFound"}return"Success"}handle(e){switch(e.type){case"ADD_PIVOT":{const{pivotId:t,pivot:o}=e;this.addPivot(t,o);break}case"INSERT_PIVOT":{const{sheetId:t,col:o,row:s,pivotId:i,table:n}=e,r={sheetId:t,col:o,row:s},{cols:a,rows:l,measures:c,fieldsType:h}=n,d=new VN(a,l,c,h||{}),u=this.getPivotFormulaId(i);this.insertPivot(r,u,d);break}case"RENAME_PIVOT":this.history.update("pivots",e.pivotId,"definition","name",e.name);break;case"REMOVE_PIVOT":{const t={...this.pivots};delete t[e.pivotId];const o=this.getPivotFormulaId(e.pivotId);this.history.update("formulaIds",o,void 0),this.history.update("pivots",t);break}case"DUPLICATE_PIVOT":{const{pivotId:t,newPivotId:o}=e,s=ze(this.getPivotCore(t).definition);s.name=e.duplicatedPivotName??s.name+" (copy)",this.addPivot(o,s);break}case"UPDATE_PIVOT":this.history.update("pivots",e.pivotId,"definition",ze(e.pivot)),this.compileCalculatedMeasures(e.pivot.measures)}}adaptRanges(e,t,o){for(const t in this.compiledMeasureFormulas)for(const o in this.compiledMeasureFormulas[t]){const s=this.compiledMeasureFormulas[t][o],i=[];for(const t of s.dependencies){const o=e(t);"NONE"===o.changeType?i.push(t):i.push(o.range)}const n=this.getters.getFormulaString(t,s.tokens,i);n!==o&&this.replaceMeasureFormula(t,o,n)}}getPivotDisplayName(e){return`(#${this.getPivotFormulaId(e)}) ${this.getPivotName(e)}`}getPivotName(e){return this.getPivotCore(e).definition.name}getPivotCoreDefinition(e){return this.getPivotCore(e).definition}getPivotId(e){return this.formulaIds[e]}getPivotFormulaId(e){return this.getPivotCore(e).formulaId}getPivotIds(){return Object.keys(this.pivots)}isExistingPivot(e){return e in this.pivots}getMeasureCompiledFormula(e){if(!e.computedBy)throw new Error(`Measure ${e.fieldName} is not computed by formula`);const t=e.computedBy.sheetId;return this.compiledMeasureFormulas[t][e.computedBy.formula]}addPivot(e,t,o=this.nextFormulaId.toString()){this.history.update("pivots",e,{definition:ze(t),formulaId:o}),this.compileCalculatedMeasures(t.measures),this.history.update("formulaIds",o,e),this.history.update("nextFormulaId",this.nextFormulaId+1)}compileCalculatedMeasures(e){for(const t of e)if(t.computedBy){const e=t.computedBy.sheetId,o=this.compileMeasureFormula(t.computedBy.sheetId,t.computedBy.formula);this.history.update("compiledMeasureFormulas",e,t.computedBy.formula,o)}}insertPivot(e,t,o){this.resizeSheet(e.sheetId,e,o);const s=o.getPivotCells();for(let o=0;o<s.length;o++)for(let i=0;i<s[o].length;i++){const n=s[o][i];this.dispatch("UPDATE_CELL",{sheetId:e.sheetId,col:e.col+o,row:e.row+i,content:Vc(t,n)})}}resizeSheet(e,{col:t,row:o},s){const i=s.getNumberOfDataColumns()+1,n=this.getters.getNumberCols(e),r=n-t;r<i&&this.dispatch("ADD_COLUMNS_ROWS",{dimension:"COL",base:n-1,sheetId:e,sheetName:this.getters.getSheetName(e),quantity:i-r,position:"after"});const a=s.columns.length+s.rows.length,l=this.getters.getNumberRows(e),c=l-o;c<a&&this.dispatch("ADD_COLUMNS_ROWS",{dimension:"ROW",base:l-1,sheetId:e,sheetName:this.getters.getSheetName(e),quantity:a-c,position:"after"})}getPivotCore(e){const t=this.pivots[e];if(!t)throw new Error(`Pivot with id ${e} not found`);return t}compileMeasureFormula(e,t){const o=PS(t),s=o.dependencies.map((t=>this.getters.getRangeFromSheetXC(e,t)));return{...o,dependencies:s}}replaceMeasureFormula(e,t,o){this.history.update("compiledMeasureFormulas",e,t,void 0),this.history.update("compiledMeasureFormulas",e,o,this.compileMeasureFormula(e,o));for(const s in this.pivots){const i=this.pivots[s];if(i)for(const n of i.definition.measures)if(n.computedBy?.formula===t){const t=i.definition.measures.indexOf(n);this.history.update("pivots",s,"definition","measures",t,"computedBy",{formula:o,sheetId:e})}}}checkSortedColumnInMeasures(e){const t=e.measures.map((e=>e.id));return e.sortedColumn&&!t.includes(e.sortedColumn.measure)?"InvalidDefinition":"Success"}checkDuplicatedMeasureIds(e){const t=new Set(e.measures.map((e=>e.id)));return e.measures.length!==t.size?"InvalidDefinition":"Success"}import(e){if(e.pivots)for(const[t,o]of Object.entries(e.pivots))this.addPivot(t,o,o.formulaId);this.history.update("nextFormulaId",e.pivotNextId||_c(this.pivots)+1)}export(e){e.pivots={};for(const t in this.pivots)e.pivots[t]={...this.getPivotCoreDefinition(t),formulaId:this.getPivotFormulaId(t)};e.pivotNextId=this.nextFormulaId}}).add("spreadsheet_pivot_core",class extends Rk{allowDispatch(e){switch(e.type){case"ADD_PIVOT":case"UPDATE_PIVOT":const t=e.pivot;return this.checkDataSetValidity(t)}return"Success"}adaptRanges(e){for(const t of this.getters.getPivotIds()){const o=this.getters.getPivotCoreDefinition(t);if("SPREADSHEET"===o.type&&o.dataSet){const{sheetId:s,zone:i}=o.dataSet,n=Pk(this.getters.getRangeFromZone(s,i),e),r=n&&{sheetId:n.sheetId,zone:n.zone};this.dispatch("UPDATE_PIVOT",{pivotId:t,pivot:{...o,dataSet:r}})}}}checkDataSetValidity(e){if("SPREADSHEET"===e.type&&e.dataSet){const{zone:t,sheetId:o}=e.dataSet;return o&&this.getters.tryGetSheet(o)&&t&&cr(t)?this.getters.checkZonesExistInSheet(o,[t]):"InvalidDataSet"}return"Success"}}).add("tableStyle",class extends Rk{static getters=["getNewCustomTableStyleName","getTableStyle","getTableStyles","isTableStyleEditable"];styles={};allowDispatch(e){switch(e.type){case"CREATE_TABLE":case"UPDATE_TABLE":if(e.config?.styleId&&!this.styles[e.config.styleId])return"InvalidTableConfig";break;case"CREATE_TABLE_STYLE":if(!FR[e.templateName])return"InvalidTableStyle";try{$t(e.primaryColor)}catch(e){return"InvalidTableStyle"}}return"Success"}handle(e){switch(e.type){case"CREATE_TABLE_STYLE":const t=PR(e.tableStyleName,e.templateName,e.primaryColor);this.history.update("styles",e.tableStyleId,t);break;case"REMOVE_TABLE_STYLE":const o={...this.styles};delete o[e.tableStyleId],this.history.update("styles",o);for(const t of this.getters.getSheetIds())for(const o of this.getters.getCoreTables(t))o.config.styleId===e.tableStyleId&&this.dispatch("UPDATE_TABLE",{sheetId:t,zone:o.range.zone,config:{styleId:mR.styleId}})}}getTableStyle(e){if(!this.styles[e])throw new Error(`Table style ${e} does not exist`);return this.styles[e]}getTableStyles(){return this.styles}getNewCustomTableStyleName(){return kt(Vo("Custom Table Style"),Object.values(this.styles).map((e=>e.displayName)),{compute:(e,t)=>`${e} ${t}`,start:2})}isTableStyleEditable(e){return!OR[e]}import(e){for(const e in OR)this.styles[e]=OR[e];for(const t in e.customTableStyles){const o=e.customTableStyles[t];this.styles[t]=PR(o.displayName,o.templateName,o.primaryColor)}}export(e){const t={};for(const e in this.styles)OR[e]||(t[e]={displayName:this.styles[e].displayName,templateName:this.styles[e].templateName,primaryColor:this.styles[e].primaryColor});e.customTableStyles=t}}),vL=(new n).add("ui_sheet",class extends PV{static getters=["getCellWidth","getTextWidth","getCellText","getCellMultiLineText","getContiguousZone","computeTextYCoordinate"];ctx=document.createElement("canvas").getContext("2d");allowDispatch(e){return this.chainValidations(this.checkSheetExists,this.checkZonesAreInSheet)(e)}handle(e){switch(e.type){case"AUTORESIZE_COLUMNS":for(const t of e.cols){const o=this.getColMaxWidth(e.sheetId,t);0!==o&&this.dispatch("RESIZE_COLUMNS_ROWS",{elements:[t],dimension:"COL",size:o,sheetId:e.sheetId})}break;case"AUTORESIZE_ROWS":this.autoResizeRows(e.sheetId,e.rows);break;case"DELETE_UNFILTERED_CONTENT":const t=[];for(const o of e.target){const s=Ye(je(o.top,o.bottom+1).filter((t=>!this.getters.isRowFiltered(e.sheetId,t))));for(const e of s)t.push({...o,top:e[0],bottom:e[e.length-1]})}this.dispatch("DELETE_CONTENT",{sheetId:e.sheetId,target:t})}}getCellWidth(e){const t=this.getters.getCellComputedStyle(e);let o=0;const s=this.getters.getEvaluatedCell(e).formattedValue;if(s){const e=Ha(this.ctx,s,t,void 0);o+=Math.max(...e.map((e=>Oa(this.ctx,e,t))))}for(const t of this.getters.getCellIcons(e))o+=t.margin+t.size;if(this.getters.getDataValidationChipStyle(e)&&(o+=10),0===o)return 0;if(o+=2*le,"wrap"===t.wrapping){const t=this.getters.getColSize(this.getters.getActiveSheetId(),e.col);return Math.min(t,o)}return o}getTextWidth(e,t){return Oa(this.ctx,e,t)}getCellText(e,t){const o=this.getters.getCell(e),s=this.getters.getLocale();if(t?.showFormula&&o?.isFormula)return El(o.content,s);if(t?.showFormula&&!o?.content)return"";{const i=this.getters.getEvaluatedCell(e),n=t?.availableWidth?{availableWidth:t.availableWidth,measureText:e=>Oa(this.ctx,e,o?.style||{})}:void 0;return bn(i.value,{format:i.format,locale:s,formatWidth:n})}}getCellMultiLineText(e,t){const o=this.getters.getCellStyle(e),s=this.getters.getCellText(e,{showFormula:this.getters.shouldShowFormulas(),availableWidth:t.maxWidth});return Ha(this.ctx,s,o,t.wrapText?t.maxWidth:void 0)}computeTextYCoordinate(e,t,o=ue,s=1){const i=e.y+1,n=Ta(t,s);if(e.height>n+2*re){if("middle"===o)return Math.ceil(i+(e.height-n)/2);if("bottom"===o)return i+e.height-n-re}return i+re}getContiguousZone(e,t){const o=t=>{for(const o of je(t.left,t.right+1)){if(!this.isCellEmpty({sheetId:e,col:o,row:t.top-1}))return{...t,top:t.top-1};if(!this.isCellEmpty({sheetId:e,col:o,row:t.bottom+1}))return{...t,bottom:t.bottom+1}}for(const o of je(t.top,t.bottom+1)){if(!this.isCellEmpty({sheetId:e,col:t.left-1,row:o}))return{...t,left:t.left-1};if(!this.isCellEmpty({sheetId:e,col:t.right+1,row:o}))return{...t,right:t.right+1}}return t};let s=!1,i=t;do{s=!1;const e=o(i);br(i,e)||(s=!0,i=e)}while(s);return i}isCellEmpty(e){const t=this.getters.getMainCellPosition(e);return this.getters.getEvaluatedCell(t).type===Ts.empty}getColMaxWidth(e,t){const o=Er(this.getters.getColsZone(e,t,t)).map((t=>this.getCellWidth({sheetId:e,...t})));return Math.max(0,Ot(o))}checkSheetExists(e){return"sheetId"in e&&void 0===this.getters.tryGetSheet(e.sheetId)?"InvalidSheetId":"Success"}checkZonesAreInSheet(e){const t="sheetId"in e?e.sheetId:this.getters.tryGetActiveSheetId();if("ranges"in e&&e.ranges.some((e=>!this.getters.tryGetSheet(e._sheetId))))return"InvalidSheetId";const o=this.getters.getCommandZones(e);return!t&&o.length>0?"NoActiveSheet":t&&o.length>0?this.getters.checkZonesExistInSheet(t,o):"Success"}autoResizeRows(e,t){const o=[];for(const s of t){let t=0;for(const o of this.getters.getRowCells(e,s)){const s=this.getters.getCellById(o);if(!s)continue;const i=this.getters.getCellPosition(s.id),n=this.getters.getColSize(e,i.col);if(s.isFormula||this.getters.getArrayFormulaSpreadingOn(i)){const e=this.getters.getEvaluatedCell(i).formattedValue,o=Aa(this.ctx,e,s?.style,n);o>t&&o>ie&&(t=o)}else{const e=s.content,o=Aa(this.ctx,e,s?.style,n);o>=t&&o>ie&&(t=0)}}o.push(t||null)}const s=new Map(o.map((e=>[e,[]])));for(let e=0;e<o.length;e++)s.get(o[e])?.push(t[e]);for(const[t,o]of s)this.dispatch("RESIZE_COLUMNS_ROWS",{elements:o,dimension:"ROW",size:t,sheetId:e})}}).add("ui_options",class extends PV{static getters=["shouldShowFormulas"];showFormulas=!1;handle(e){if("SET_FORMULA_VISIBILITY"===e.type)this.showFormulas=e.show}shouldShowFormulas(){return this.showFormulas}}).add("autofill",class extends PV{static layers=["Autofill"];static getters=["getAutofillTooltip"];autofillZone;steps;lastCellSelected={};direction;tooltip;allowDispatch(e){if("AUTOFILL_SELECT"===e.type){const t=this.getters.getActiveSheetId();return this.lastCellSelected.col=-1===e.col?this.lastCellSelected.col:Ze(e.col,0,this.getters.getNumberCols(t)),this.lastCellSelected.row=-1===e.row?this.lastCellSelected.row:Ze(e.row,0,this.getters.getNumberRows(t)),void 0!==this.lastCellSelected.col&&void 0!==this.lastCellSelected.row?"Success":"InvalidAutofillSelection"}return"Success"}handle(e){switch(e.type){case"AUTOFILL":this.autofill(!0);break;case"AUTOFILL_SELECT":this.select(e.col,e.row);break;case"AUTOFILL_AUTO":this.autofillAuto()}}getAutofillTooltip(){return this.tooltip}autofill(e){if(!this.autofillZone||!this.steps||void 0===this.direction)return void(this.tooltip=void 0);const t=this.getters.getSelectedZone(),o=this.autofillZone,s=[];switch(this.direction){case"down":for(let e=t.left;e<=t.right;e++){const i=[];for(let o=t.top;o<=t.bottom;o++)i.push(Oo(e,o));const n=this.createGenerator(i);for(let t=o.top;t<=o.bottom;t++)s.push(this.computeNewCell(n,e,t))}break;case"up":for(let e=t.left;e<=t.right;e++){const i=[];for(let o=t.bottom;o>=t.top;o--)i.push(Oo(e,o));const n=this.createGenerator(i);for(let t=o.bottom;t>=o.top;t--)s.push(this.computeNewCell(n,e,t))}break;case"left":for(let e=t.top;e<=t.bottom;e++){const i=[];for(let o=t.right;o>=t.left;o--)i.push(Oo(o,e));const n=this.createGenerator(i);for(let t=o.right;t>=o.left;t--)s.push(this.computeNewCell(n,t,e))}break;case"right":for(let e=t.top;e<=t.bottom;e++){const i=[];for(let o=t.left;o<=t.right;o++)i.push(Oo(o,e));const n=this.createGenerator(i);for(let t=o.left;t<=o.right;t++)s.push(this.computeNewCell(n,t,e))}}if(e){const e={},t={},o={},i=this.getters.getActiveSheetId();for(const n of s)this.collectBordersData(n,e),this.autofillMerge(i,n),this.autofillCell(i,n),this.collectConditionalFormatsData(i,n,t),this.collectDataValidationsData(i,n,o);this.autofillBorders(i,e),this.autofillConditionalFormats(i,t),this.autofillDataValidations(i,o),this.autofillZone=void 0,this.selection.resizeAnchorZone(this.direction,this.steps),this.lastCellSelected={},this.direction=void 0,this.steps=0,this.tooltip=void 0}}collectBordersData(e,t){const o=JSON.stringify(e.border);o in t||(t[o]=[]),t[o].push(Dr({col:e.col,row:e.row}))}collectConditionalFormatsData(e,t,o){const{originCol:s,originRow:i,col:n,row:r}=t,a=this.getters.getRulesByCell(e,s,i),l=Oo(n,r);for(const e of a)e.id in o||(o[e.id]=[]),o[e.id].push(l)}collectDataValidationsData(e,t,o){const{originCol:s,originRow:i,col:n,row:r}=t,a={sheetId:e,col:s,row:i},l=this.getters.getValidationRuleForCell(a);l&&(l.id in o||(o[l.id]=[]),o[l.id].push(Dr({col:n,row:r})))}autofillCell(e,t){this.dispatch("UPDATE_CELL",{sheetId:e,col:t.col,row:t.row,content:t.content||"",style:t.style||null,format:t.format||""}),this.dispatch("AUTOFILL_CELL",t)}autofillBorders(e,t){for(const o in t){const s="undefined"===o?void 0:JSON.parse(o);this.dispatch("SET_BORDERS_ON_TARGET",{sheetId:e,border:s,target:er(t[o])})}}autofillConditionalFormats(e,t){for(const o in t){const s=t[o],i=this.getters.getConditionalFormats(e).find((e=>e.id===o));if(!i)continue;const n=this.getters.getAdaptedCfRanges(e,i,s.map(ar),[]);n&&this.dispatch("ADD_CONDITIONAL_FORMAT",{cf:{id:i.id,rule:i.rule,stopIfTrue:i.stopIfTrue},ranges:n,sheetId:e})}}autofillDataValidations(e,t){for(const o in t){const s=t[o],i=this.getters.getDataValidationRule(e,o);if(!i)continue;const n=i.ranges.map((e=>e.zone)),r=er(n.concat(s),[]);this.dispatch("ADD_DATA_VALIDATION_RULE",{rule:i,ranges:r.map((t=>this.getters.getRangeDataFromZone(e,t))),sheetId:e})}}select(e,t){const o=this.getters.getSelectedZone();if(Cr(e,t,o))this.autofillZone=void 0;else{switch(this.direction=this.getDirection(e,t),this.direction){case"up":this.saveZone(t,o.top-1,o.left,o.right),this.steps=o.top-t;break;case"down":this.saveZone(o.bottom+1,t,o.left,o.right),this.steps=t-o.bottom;break;case"left":this.saveZone(o.top,o.bottom,e,o.left-1),this.steps=o.left-e;break;case"right":this.saveZone(o.top,o.bottom,o.right+1,e),this.steps=e-o.right}this.autofill(!1)}}autofillAuto(){const e=this.getters.getActivePosition(),t=this.getters.getTable(e);let o=t?t.range.zone.bottom:this.getAutofillAutoLastRow();const s=this.getters.getSelectedZone();for(let t=s.bottom+1;t<=o;t++)if(this.getters.getEvaluatedCell({...e,row:t}).type!==Ts.empty){o=t-1;break}o>s.bottom&&(this.select(e.col,o),this.autofill(!0))}getAutofillAutoLastRow(){const e=this.getters.getSelectedZone(),t=this.getters.getActiveSheetId();let o=e.left,s=e.bottom;if(o>0){let e={sheetId:t,col:o-1,row:s};for(;this.getters.getEvaluatedCell(e).type!==Ts.empty;)s+=1,e={sheetId:t,col:o-1,row:s}}if(s===e.bottom&&(o=e.right,o<=this.getters.getNumberCols(t))){let e={sheetId:t,col:o+1,row:s};for(;this.getters.getEvaluatedCell(e).type!==Ts.empty;)s+=1,e={sheetId:t,col:o+1,row:s}}return s-1}computeNewCell(e,t,o){const{cellData:s,tooltip:i,origin:n}=e.next(),{content:r,style:a,border:l,format:c}=s;return this.tooltip=i,{originCol:n.col,originRow:n.row,col:t,row:o,content:r,style:a,border:l,format:c}}getRule(e,t){const o=EV.getAll().sort(((e,t)=>e.sequence-t.sequence)).find((o=>o.condition(e,t)));return o&&this.direction&&o.generateRule(e,t,this.direction)}createGenerator(e){const t=[],o=[],s=this.getters.getActiveSheetId();for(const t of e){const{col:e,row:i}=_o(t),n=this.getters.getCell({sheetId:s,col:e,row:i});o.push({col:e,row:i,cell:n,sheetId:s})}const i=o.map((e=>e.cell));for(const e of o){let o={type:"COPY_MODIFIER"};if(e&&e.cell){o=this.getRule(e.cell,i)||o}const s=this.getters.getCellBorder(e)||void 0;t.push({data:{...e,border:s},rule:o})}return new MV(t,this.getters,this.direction)}saveZone(e,t,o,s){this.autofillZone={top:e,bottom:t,left:o,right:s}}getDirection(e,t){const o=this.getters.getSelectedZone(),s={up:{number:o.top-t,value:"up"},down:{number:t-o.bottom,value:"down"},left:{number:o.left-e,value:"left"},right:{number:e-o.right,value:"right"}};if(1===Object.values(s).map((e=>e.number>0?1:0)).reduce(((e,t)=>e+t)))return Object.values(s).find((e=>e.number>0?1:0)).value;const i=s.up.number>0?"up":"down",n=s.left.number>0?"left":"right";return Math.abs(s[i].number)>=Math.abs(s[n].number)?s[i].value:s[n].value}autofillMerge(e,t){const{originCol:o,originRow:s,col:i,row:n}=t,r={sheetId:e,col:i,row:n},a={sheetId:e,col:o,row:s};if(this.getters.isInMerge(r)&&!this.getters.isInMerge(a)){const t=this.getters.getMerge(r);t&&this.dispatch("REMOVE_MERGE",{sheetId:e,target:[t]})}const l=this.getters.getMerge(a);l?.left===o&&l?.top===s&&this.dispatch("ADD_MERGE",{sheetId:e,target:[{top:n,bottom:n+l.bottom-l.top,left:i,right:i+l.right-l.left}]})}drawLayer(e){if(!this.autofillZone)return;const{ctx:t,thinLineWidth:o}=e,{x:s,y:i,width:n,height:r}=this.getters.getVisibleRect(this.autofillZone);n>0&&r>0&&(t.strokeStyle="black",t.lineWidth=o,t.setLineDash([3]),t.strokeRect(s,i,n,r),t.setLineDash([]))}}).add("sort",class extends PV{allowDispatch(e){return"SORT_CELLS"===e.type?Cr(e.col,e.row,e.zone)?this.checkValidations(e,this.checkMerge,this.checkMergeSizes,this.checkArrayFormulaInSortZone):"InvalidSortAnchor":"Success"}handle(e){if("SORT_CELLS"===e.type)this.sortZone(e.sheetId,e,e.zone,e.sortDirection,e.sortOptions||{})}checkMerge({sheetId:e,zone:t}){if(!this.getters.doesIntersectMerge(e,t))return"Success";return Er(t).some((({col:t,row:o})=>!this.getters.isInMerge({sheetId:e,col:t,row:o})))?"InvalidSortZone":"Success"}checkMergeSizes({sheetId:e,zone:t}){if(!this.getters.doesIntersectMerge(e,t))return"Success";const o=this.getters.getMerges(e).filter((e=>Sr(e,t))),s=wr(o[0]),[i,n]=[s.numberOfCols,s.numberOfRows];return o.every((e=>{const[t,o]=[e.right-e.left+1,e.bottom-e.top+1];return t===i&&o===n}))?"Success":"InvalidSortZone"}checkArrayFormulaInSortZone({sheetId:e,zone:t}){return Er(t).some((({col:t,row:o})=>this.getters.getArrayFormulaSpreadingOn({sheetId:e,col:t,row:o})))?"SortZoneWithArrayFormulas":"Success"}hasHeader(e,t){if(1===t[0].length)return!1;let o=t.map((t=>t.map((({col:t,row:o})=>this.getters.getEvaluatedCell({sheetId:e,col:t,row:o}).type))));return o[0][0]===Ts.empty&&(o=o.slice(1)),!o.some((e=>e[0]===Ts.empty))&&!!o.some((e=>e[1]!==Ts.empty&&e[0]!==e[1]))}sortZone(e,t,o,s,i){const[n,r]=this.mainCellsSteps(e,o),a=this.getters.getMainCellPosition({sheetId:e,col:t.col,row:t.row}).col,l=Object.assign({},o);let c=this.mainCells(e,o);!i.sortHeaders&&this.hasHeader(e,c)&&(l.top+=r),c=this.mainCells(e,l);const h=function(e,t,o){const s=e.map(((e,t)=>({index:t,type:e.type,value:e.value})));return(o?s.map((e=>e.type===Ts.empty?{...e,type:Ts.number,value:0}:e)):s).sort(zp(t))}(c[a-l.left].map((e=>this.getters.getEvaluatedCell(e))),s,Boolean(i.emptyCellAsZero)),d=h.map((e=>e.index)),[u,g]=[c.length,c[0].length],p=[];for(let e=0;e<u;e++)for(let t=0;t<g;t++){const{col:o,row:s,sheetId:i}=c[e][d[t]],a=this.getters.getCell({sheetId:i,col:o,row:s}),h=l.left+e*n,u=l.top+t*r,g={sheetId:i,col:h,row:u,content:""};if(a){let e=a.content;if(a.isFormula){const t=this.getters.getCellPosition(a.id);e=this.getters.getTranslatedCellFormula(i,0,u-t.row,a.compiledFormula.tokens)}g.style=a.style,g.content=e,g.format=a.format}p.push(g)}p.forEach((e=>this.dispatch("UPDATE_CELL",e)))}mainCellsSteps(e,t){const o=this.getters.getMerge({sheetId:e,col:t.left,row:t.top});return[o?o.right-o.left+1:1,o?o.bottom-o.top+1:1]}mainCells(e,t){const[o,s]=this.mainCellsSteps(e,t),i=[],n=je(t.left,t.right+1,o),r=je(t.top,t.bottom+1,s);for(const t of n){const o=[];i.push(o);for(const s of r)o.push({sheetId:e,col:t,row:s})}return i}}).add("automatic_sum",class extends PV{static getters=["getAutomaticSums"];handle(e){if("SUM_SELECTION"===e.type){const e=this.getters.getActiveSheetId(),{zones:t,anchor:o}=this.getters.getSelection();for(const s of t){const t=this.getAutomaticSums(e,s,o.cell);this.dispatchCellUpdates(e,t)}}}getAutomaticSums(e,t,o){return this.shouldFindData(e,t)?this.sumAdjacentData(e,t,o):this.sumData(e,t)}sumData(e,t){const o=this.dimensionsToSum(e,t),s=this.sumDimensions(e,t,o).filter((({zone:t})=>!this.getters.isEmpty(e,t)));return o.has("ROW")&&o.has("COL")&&s.push(this.sumTotal(t)),s}sumAdjacentData(e,t,o){const{col:s,row:i}=Cr(o.col,o.row,t)?o:{col:t.left,row:t.top},n=this.findAdjacentData(e,s,i);return n?this.getters.isSingleCellOrMerge(e,t)||Ir(fr(n,t))?[{position:{col:s,row:i},zone:n}]:this.sumDimensions(e,fr(n,t),this.transpose(this.dimensionsToSum(e,t))):[]}findAdjacentData(e,t,o){const s=this.getters.getSheet(e),i=this.getters.getMainCellPosition({sheetId:e,col:t,row:o}),n=this.findSuitableZoneToSum(s,i.col,i.row);if(n)return this.getters.expandZone(e,n)}findSuitableZoneToSum(e,t,o){const s=this.getters.getEvaluatedCell({sheetId:e.id,col:t,row:o-1}),i=this.getters.getEvaluatedCell({sheetId:e.id,col:t-1,row:o});if(this.isNumber(i)&&!this.isNumber(s))return this.findHorizontalZone(e,t,o);const n=this.findVerticalZone(e,t,o);if(this.isZoneValid(n))return n;const r=this.findHorizontalZone(e,t,o);return this.isZoneValid(r)?r:void 0}findVerticalZone(e,t,o){const s={top:0,bottom:o-1,left:t,right:t},i=this.reduceZoneStart(e,s,s.bottom);return{...s,top:i}}findHorizontalZone(e,t,o){const s={top:o,bottom:o,left:0,right:t-1},i=this.reduceZoneStart(e,s,s.right);return{...s,left:i}}reduceZoneStart(e,t,o){const s=this.getters.getEvaluatedCellsInZone(e.id,t),i=je(o,-1,-1),n=Ot(i.filter((e=>s[e]&&!s[e].isAutoSummable))),r=Ye(i.filter((e=>this.isNumber(s[e]))))[0]||[];return Ot(r)<n?1/0:Ft(r)}shouldFindData(e,t){return this.getters.isEmpty(e,t)||this.getters.isSingleCellOrMerge(e,t)}isNumber(e){return e.type===Ts.number&&!(e.format&&Rn(e.format))}isZoneValid(e){return e.bottom>=e.top&&e.right>=e.left}lastColIsEmpty(e,t){return this.getters.isEmpty(e,{...t,left:t.right})}lastRowIsEmpty(e,t){return this.getters.isEmpty(e,{...t,top:t.bottom})}dimensionsToSum(e,t){const o=new Set;return Ir(t)?(o.add(1===wr(t).numberOfCols?"COL":"ROW"),o):(this.lastColIsEmpty(e,t)&&o.add("ROW"),this.lastRowIsEmpty(e,t)&&o.add("COL"),0===o.size&&o.add("COL"),o)}sumDimensions(e,t,o){return[...o.has("COL")?this.sumColumns(t,e):[],...o.has("ROW")?this.sumRows(t,e):[]]}sumTotal(e){const{bottom:t,right:o}=e;return{position:{col:o,row:t},zone:{...e,top:t,right:o-1}}}sumColumns(e,t){const o=this.nextEmptyRow(t,{...e,bottom:e.bottom-1});return e={...e,bottom:Math.min(e.bottom,o.bottom-1)},Er(o).map((t=>({position:t,zone:{...e,right:t.col,left:t.col}})))}sumRows(e,t){const o=this.nextEmptyCol(t,{...e,right:e.right-1});return e={...e,right:Math.min(e.right,o.right-1)},Er(o).map((t=>({position:t,zone:{...e,top:t.row,bottom:t.row}})))}dispatchCellUpdates(e,t){for(const o of t){const{col:t,row:s}=o.position;this.dispatch("UPDATE_CELL",{sheetId:e,col:t,row:s,content:`=SUM(${this.getters.zoneToXC(e,o.zone)})`})}}nextEmptyRow(e,t){let o=t.bottom+1;const{left:s,right:i}=t;for(;!this.getters.isEmpty(e,{bottom:o,top:o,left:s,right:i});)o++;return{...t,top:o,bottom:o}}nextEmptyCol(e,t){let o=t.right+1;const{top:s,bottom:i}=t;for(;!this.getters.isEmpty(e,{left:o,right:o,top:s,bottom:i});)o++;return{...t,left:o,right:o}}transpose(e){return new Set([...e.values()].map((e=>"COL"===e?"ROW":"COL")))}}).add("format",class extends PV{handle(e){switch(e.type){case"SET_DECIMAL":this.setDecimal(e.sheetId,e.target,e.step);break;case"SET_FORMATTING_WITH_PIVOT":this.setContextualFormat(e.sheetId,e.target,e.format)}}setContextualFormat(e,t,o){const s=[],i={};for(const o of er(t))for(let t=o.left;t<=o.right;t++)for(let n=o.top;n<=o.bottom;n++){const o={sheetId:e,col:t,row:n},r=this.getters.getPivotCellFromPosition(o);if(this.isSpilledPivotValueFormula(o,r)){s.push(o);const e=this.getters.getPivotIdFromPosition(o)||"";i[e]??=new Set,i[e].add(r.measure)}}const n=er(s.map(Dr));for(const e in i){const t=i[e],s=this.getters.getPivotCoreDefinition(e);this.dispatch("UPDATE_PIVOT",{pivotId:e,pivot:{...s,measures:s.measures.map((e=>t.has(e.id)?{...e,format:o}:e))}})}this.dispatch("SET_FORMATTING",{sheetId:e,target:n,format:""}),this.dispatch("SET_FORMATTING",{sheetId:e,target:er(t,n),format:o})}isSpilledPivotValueFormula(e,t){const o=this.getters.getCell(e);return"VALUE"===t.type&&!o?.isFormula}setDecimal(e,t,o){const s={};for(const i of er(t))for(const t of Er(i)){const i=this.getCellNumberFormat({sheetId:e,...t});if(void 0!==i){const e=Bn(i,o);s[e]=s[e]||[],s[e].push(t)}}for(const t in s){const o=er(s[t].map((e=>Dr(e))));this.setContextualFormat(e,o,t)}}getCellNumberFormat(e){for(const t of[e]){const e=this.getters.getEvaluatedCell(t);if(!(e.type!==Ts.number||e.format&&Rn(e.format)))return e.format||Dn(e.value)}}}).add("insert_pivot",class extends PV{static getters=[];allowDispatch(e){if("DUPLICATE_PIVOT_IN_NEW_SHEET"===e.type){if(!this.getters.isExistingPivot(e.pivotId))return"PivotIdNotFound";if(!this.getters.getPivot(e.pivotId).isValid())return"PivotInError"}return"Success"}handle(e){switch(e.type){case"INSERT_NEW_PIVOT":this.insertNewPivot(e.pivotId,e.newSheetId);break;case"DUPLICATE_PIVOT_IN_NEW_SHEET":this.duplicatePivotInNewSheet(e.pivotId,e.newPivotId,e.newSheetId);break;case"INSERT_PIVOT_WITH_TABLE":this.insertPivotWithTable(e.sheetId,e.col,e.row,e.pivotId,e.table,e.pivotMode);break;case"SPLIT_PIVOT_FORMULA":this.splitPivotFormula(e.sheetId,e.col,e.row,e.pivotId)}}insertNewPivot(e,t){1===Pr(this.getters.getSelectedZone())&&this.selection.selectTableAroundSelection();const o=this.getters.getActiveSheetId();this.dispatch("ADD_PIVOT",{pivotId:e,pivot:{dataSet:{zone:this.getters.getSelectedZone(),sheetId:o},columns:[],rows:[],measures:[],name:Vo("New pivot"),type:"SPREADSHEET"}});const s=this.getters.getSheetIds().findIndex((e=>e===o))+1,i=this.getters.getPivotFormulaId(e);this.dispatch("CREATE_SHEET",{sheetId:t,name:Vo("Pivot #%(formulaId)s",{formulaId:i}),position:s}),this.dispatch("ACTIVATE_SHEET",{sheetIdFrom:o,sheetIdTo:t});const n=this.getters.getPivot(e);this.insertPivotWithTable(t,0,0,e,n.getCollapsedTableStructure().export(),"dynamic")}duplicatePivotInNewSheet(e,t,o){this.dispatch("DUPLICATE_PIVOT",{pivotId:e,newPivotId:t,duplicatedPivotName:Vo("%s (copy)",this.getters.getPivotCoreDefinition(e).name)});const s=this.getters.getActiveSheetId(),i=this.getters.getSheetIds().indexOf(s)+1,n=this.getters.getPivotFormulaId(t),r=this.getters.getPivotName(t);if(this.dispatch("CREATE_SHEET",{sheetId:o,name:this.getPivotDuplicateSheetName(Vo("%(newPivotName)s (Pivot #%(formulaId)s)",{newPivotName:r,formulaId:n})),position:i}).isSuccessful){this.dispatch("ACTIVATE_SHEET",{sheetIdFrom:s,sheetIdTo:o});const i=this.getters.getPivot(e);this.insertPivotWithTable(o,0,0,t,i.getCollapsedTableStructure().export(),"dynamic")}}getPivotDuplicateSheetName(e){const t=this.getters.getSheetIds().map((e=>this.getters.getSheetName(e)));return kt(qe(e),t)}insertPivotWithTable(e,t,o,s,i,n){const{cols:r,rows:a,measures:l,fieldsType:c}=i,h=new VN(r,a,l,c||{}),d=h.columns.length-1;this.resizeSheet(e,t,o,h);const u=this.getters.getPivotFormulaId(s);let g;"dynamic"===n?(this.dispatch("UPDATE_CELL",{sheetId:e,col:t,row:o,content:`=PIVOT(${u})`}),g={left:t,right:t,top:o,bottom:o}):(this.dispatch("INSERT_PIVOT",{sheetId:e,col:t,row:o,pivotId:s,table:h.export()}),g={left:t,right:t+h.getNumberOfDataColumns(),top:o,bottom:o+d+h.rows.length}),this.dispatch("CREATE_TABLE",{tableType:n,sheetId:e,ranges:[this.getters.getRangeDataFromZone(e,g)],config:{...Ve,numberOfHeaders:d}})}resizeSheet(e,t,o,s){const i=s.getNumberOfDataColumns()+1,n=this.getters.getNumberCols(e),r=n-t;r<i&&this.dispatch("ADD_COLUMNS_ROWS",{dimension:"COL",base:n-1,sheetId:e,sheetName:this.getters.getSheetName(e),quantity:i-r,position:"after"});const a=s.columns.length+s.rows.length,l=this.getters.getNumberRows(e),c=l-o;c<a&&this.dispatch("ADD_COLUMNS_ROWS",{dimension:"ROW",base:l-1,sheetId:e,sheetName:this.getters.getSheetName(e),quantity:a-c,position:"after"})}splitPivotFormula(e,t,o,s){const i=this.getters.getSpreadZone({sheetId:e,col:t,row:o});if(!i)return;const n=this.getters.getPivotFormulaId(s),r=new Map;for(let t=i.left;t<=i.right;t++)for(let o=i.top;o<=i.bottom;o++){const s={sheetId:e,col:t,row:o};r.set(s,this.getters.getPivotCellFromPosition(s))}for(const[e,t]of r)this.dispatch("UPDATE_CELL",{...e,content:Vc(n,t)});const a=this.getters.getCoreTable({sheetId:e,col:t,row:o});if("dynamic"===a?.type){const s=Dr({col:t,row:o}),n=this.getters.getRangeDataFromZone(e,i);this.dispatch("UPDATE_TABLE",{sheetId:e,zone:s,newTableRange:n,tableType:"static"})}}}).add("pivot_presence",class extends PV{static getters=["getPivotPresenceTracker"];trackPresencePivotId;tracker;handle(e){switch(e.type){case"PIVOT_START_PRESENCE_TRACKING":this.tracker=new uL,this.trackPresencePivotId=e.pivotId;break;case"PIVOT_STOP_PRESENCE_TRACKING":this.trackPresencePivotId=void 0}}getPivotPresenceTracker(e){if(this.trackPresencePivotId===e){if(!this.tracker)throw new Error("Tracker not initialized");return this.tracker}}}).add("split_to_columns",class extends PV{static getters=["getAutomaticSeparator"];allowDispatch(e){return"SPLIT_TEXT_INTO_COLUMNS"===e.type?this.chainValidations(this.batchValidations(this.checkSingleColSelected,this.checkNonEmptySelector),this.batchValidations(this.checkNotOverwritingContent,this.checkSeparatorInSelection))(e):"Success"}handle(e){if("SPLIT_TEXT_INTO_COLUMNS"===e.type)this.splitIntoColumns(e)}getAutomaticSeparator(){const e=this.getters.getSelectedCells();for(const t of e)if(t.value&&t.type===Ts.text){const e=this.getAutoSeparatorForString(t.value);if(e)return e}return" "}getAutoSeparatorForString(e){const t=[Ne,";",","," ","."];for(const o of t)if(e.includes(o))return o}splitIntoColumns({separator:e,addNewColumns:t}){const o=this.getters.getSelectedZone(),s=this.getters.getActiveSheetId(),i=this.getSplittedCols(o,e);t&&this.addColsToAvoidCollisions(o,i),this.removeMergesInSplitZone(o,i),this.addColumnsToNotOverflowSheet(o,i);for(let e=0;e<i.length;e++){const t=o.top+e,n=i[e],r=o.left,a=this.getters.getCell({sheetId:s,col:r,row:t});if(1!==n.length||n[0]!==a?.content)for(const[e,o]of n.entries())this.dispatch("UPDATE_CELL",{sheetId:s,col:r+e,row:t,content:Cl(o,this.getters.getLocale()),format:"",style:a?.style||null})}}getSplittedCols(e,t){if(!t)throw new Error("Separator cannot be empty");const o=this.getters.getActiveSheetId(),s=[];for(const i of je(e.top,e.bottom+1)){const n=this.getters.getEvaluatedCell({sheetId:o,col:e.left,row:i}).formattedValue;s.push(this.splitAndRemoveTrailingEmpty(n,t))}return s}splitAndRemoveTrailingEmpty(e,t){const o=e.split(t);for(;o.length>1&&""===o[o.length-1];)o.pop();return o}willSplittedColsOverwriteContent(e,t){const o=this.getters.getActiveSheetId();for(const s of je(e.top,e.bottom+1)){const i=t[s-e.top];for(let t=1;t<i.length;t++){const i=this.getters.getCell({sheetId:o,col:e.left+t,row:s});if(i&&i.content)return!0}}return!1}removeMergesInSplitZone(e,t){const o=this.getters.getActiveSheetId(),s=Math.max(...t.map((e=>e.length))),i={...e,right:e.left+s-1},n=this.getters.getMergesInZone(o,i);this.dispatch("REMOVE_MERGE",{sheetId:o,target:n})}addColsToAvoidCollisions(e,t){const o=this.getters.getActiveSheetId();let s=0;for(const i of je(e.top,e.bottom+1)){const n={sheetId:o,col:e.left,row:i},r=t[i-e.top],a=this.getColsToAddToAvoidCollision(n,r);s=Math.max(s,a)}s&&this.dispatch("ADD_COLUMNS_ROWS",{dimension:"COL",base:e.left,sheetId:o,sheetName:this.getters.getSheetName(o),quantity:s,position:"after"})}getColsToAddToAvoidCollision(e,t){const o=t.length;for(let t=1;t<o;t++){const s=e.col+t,i=this.getters.getCell({...e,col:s});if(i&&i.content)return o-t}return 0}addColumnsToNotOverflowSheet(e,t){const o=this.getters.getActiveSheetId(),s=Math.max(...t.map((e=>e.length-1))),i=this.getters.getNumberCols(o)-1;e.left+s>i&&this.dispatch("ADD_COLUMNS_ROWS",{dimension:"COL",base:i,sheetId:o,sheetName:this.getters.getSheetName(o),quantity:e.left+s-i,position:"after"})}checkSingleColSelected(){return this.getters.isSingleColSelected()?"Success":"MoreThanOneColumnSelected"}checkNonEmptySelector(e){return""===e.separator?"EmptySplitSeparator":"Success"}checkNotOverwritingContent(e){if(e.addNewColumns||e.force)return"Success";const t=this.getters.getSelectedZones()[0],o=this.getSplittedCols(t,e.separator);return this.willSplittedColsOverwriteContent(t,o)?"SplitWillOverwriteContent":"Success"}checkSeparatorInSelection({separator:e}){const t=this.getters.getSelectedCells();for(const o of t)if(o.formattedValue.includes(e))return"Success";return"NoSplitSeparatorInSelection"}}).add("collaborative",class extends PV{static getters=["getClientsToDisplay","getClient","getCurrentClient","getConnectedClients","isFullySynchronized"];static layers=["Selection"];colors=new fo(12);session;constructor(e){super(e),this.session=e.session}isPositionValid(e){return e.row<this.getters.getNumberRows(e.sheetId)&&e.col<this.getters.getNumberCols(e.sheetId)}getClient(e){return this.session.getClient(e)}getCurrentClient(){return this.session.getCurrentClient()}getConnectedClients(){return[...this.session.getConnectedClients()].map((e=>({...e,color:this.colors.get(e.id)})))}isFullySynchronized(){return this.session.isFullySynchronized()}getClientsToDisplay(){try{this.getters.getCurrentClient()}catch(e){if(e instanceof YV)return[];throw e}const e=this.getters.getActiveSheetId(),t=[];for(const o of this.getters.getConnectedClients())o.id!==this.getters.getCurrentClient().id&&o.position&&o.position.sheetId===e&&this.isPositionValid(o.position)&&t.push({...o,position:o.position});return t}drawLayer(e){if(this.getters.isDashboard())return;const{ctx:t,thinLineWidth:o}=e,s=this.getters.getActiveSheetId();for(const e of this.getClientsToDisplay()){const{row:i,col:n}=e.position,r=this.getters.expandZone(s,{top:i,bottom:i,left:n,right:n}),{x:a,y:l,width:c,height:h}=this.getters.getVisibleRect(r);if(c<=0||h<=0)continue;const d=e.color;t.fillStyle=`${d}10`,t.lineWidth=4*o,t.strokeStyle=d,t.globalCompositeOperation="multiply",t.fillRect(a,l,c,h),t.globalCompositeOperation="source-over",t.strokeRect(a,l,c,h),t.font=`bold ${me+1}px ${fe}`}}}).add("history",class extends PV{static getters=["canUndo","canRedo"];undoStack=[];redoStack=[];session;constructor(e){super(e),this.session=e.session,this.session.on("new-local-state-update",this,this.onNewLocalStateUpdate),this.session.on("snapshot",this,(()=>{this.undoStack=[],this.redoStack=[]}))}allowDispatch(e){switch(e.type){case"REQUEST_UNDO":if(!this.canUndo())return"EmptyUndoStack";break;case"REQUEST_REDO":if(!this.canRedo())return"EmptyRedoStack"}return"Success"}handle(e){switch(e.type){case"REQUEST_UNDO":case"REQUEST_REDO":this.requestHistoryChange("REQUEST_UNDO"===e.type?"UNDO":"REDO")}}finalize(){}requestHistoryChange(e){const t="UNDO"===e?this.undoStack.pop():this.redoStack.pop();if(t)"UNDO"===e?(this.session.undo(t),this.redoStack.push(t)):(this.session.redo(t),this.undoStack.push(t));else{const e=this.getPossibleRevisionToRepeat();if(!e)return;const t=dL(e,this.getters);if(!t)return;if(!Array.isArray(t))return void this.dispatch(t.type,t);for(const e of t)this.dispatch(e.type,e)}}canUndo(){return this.undoStack.length>0}canRedo(){if(this.redoStack.length>0)return!0;const e=this.getPossibleRevisionToRepeat();return!(!(t=e)||!t.rootCommand||"object"!=typeof t.rootCommand)&&(ks(t.rootCommand)?lL.contains(t.rootCommand.type):cL.contains(t.rootCommand.type));var t}onNewLocalStateUpdate({id:e}){this.undoStack.push(e),this.redoStack=[],this.undoStack.length>99&&this.undoStack.shift()}getPossibleRevisionToRepeat(){return this.session.getLastLocalNonEmptyRevision()}}).add("data_cleanup",class extends PV{allowDispatch(e){return"REMOVE_DUPLICATES"===e.type?this.checkValidations(e,this.chainValidations(this.checkSingleRangeSelected,this.checkNoMergeInZone,this.checkRangeContainsValues,this.checkColumnsIncludedInZone),this.chainValidations(this.checkNoColumnProvided,this.checkColumnsAreUnique)):"Success"}handle(e){switch(e.type){case"REMOVE_DUPLICATES":this.removeDuplicates(e.columns,e.hasHeader);break;case"TRIM_WHITESPACE":this.trimWhitespace()}}removeDuplicates(e,t){const o=this.getters.getActiveSheetId(),s=this.getters.getSelectedZone();t&&(s.top+=1);const i=this.getUniqueRowsIndexes(o,s.top,s.bottom,e),n=i.length;if(n===wr(s).numberOfRows)return void this.notifyRowsRemovedAndRemaining(0,n);const r=i.map((e=>({left:s.left,top:e,right:s.right,bottom:e}))),a=new qc(this.getters,this.dispatch),l=a.copy(Za(o,r));if(!l)return;this.dispatch("CLEAR_CELLS",{target:[s],sheetId:o});const c={left:s.left,top:s.top,right:s.left,bottom:s.top};a.paste({zones:[c],sheetId:o},l,{isCutOperation:!1});const h={left:s.left,top:s.top-(t?1:0),right:s.right,bottom:s.top+n-1};this.selection.selectZone({cell:{col:h.left,row:h.top},zone:h});const d=s.bottom-s.top+1-n;this.notifyRowsRemovedAndRemaining(d,n)}getUniqueRowsIndexes(e,t,o,s){const i=new Map;for(const n of je(t,o+1)){const t=s.map((t=>this.getters.getEvaluatedCell({sheetId:e,col:t,row:n}).value));!Object.values(i).some((e=>mt(e,t)))&&(i[n]=t)}return Object.keys(i).map((e=>parseInt(e)))}notifyRowsRemovedAndRemaining(e,t){this.ui.notifyUI({type:"info",text:Vo("%s duplicate rows found and removed.\n%s unique rows remain.",e.toString(),t.toString()),sticky:!1})}checkSingleRangeSelected(){return 1!==this.getters.getSelectedZones().length?"MoreThanOneRangeSelected":"Success"}checkNoMergeInZone(){const e=this.getters.getActiveSheetId(),t=this.getters.getSelectedZone();return this.getters.getMergesInZone(e,t).length>0?"WillRemoveExistingMerge":"Success"}checkRangeContainsValues(e){const t=this.getters.getActiveSheetId(),o=this.getters.getSelectedZone();e.hasHeader&&(o.top+=1);return this.getters.getEvaluatedCellsInZone(t,o).every((e=>"empty"===e.type))?"EmptyTarget":"Success"}checkNoColumnProvided(e){return 0===e.columns.length?"NoColumnsProvided":"Success"}checkColumnsIncludedInZone(e){const t=this.getters.getSelectedZone();return e.columns.some((e=>e<t.left||e>t.right))?"ColumnsNotIncludedInZone":"Success"}checkColumnsAreUnique(e){return e.columns.length!==new Set(e.columns).size?"DuplicatesColumnsSelected":"Success"}trimWhitespace(){const e=er(this.getters.getSelectedZones()),t=this.getters.getActiveSheetId();let o=0;for(const{col:s,row:i}of e.map(Er).flat()){const e=this.getters.getCell({col:s,row:i,sheetId:t});if(!e)continue;const n=At(e.content);n!==e.content&&(o+=1,this.dispatch("UPDATE_CELL",{sheetId:t,col:s,row:i,content:n}))}const s=o?Vo("Trimmed whitespace from %s cells.",o):Vo("No selected cells had whitespace trimmed.");this.ui.notifyUI({type:"info",text:s,sticky:!1})}}).add("table_autofill",class extends PV{handle(e){if("AUTOFILL_TABLE_COLUMN"===e.type){const t=this.getters.getCoreTable(e),o=this.getters.getCell(e);if(!t?.config.automaticAutofill||"dynamic"===t.type||!o?.isFormula)return;const{col:s,row:i}=e,n=function(e,t){const o=t.numberOfHeaders,s={...e,top:e.top+o};return s.top<=s.bottom?s:void 0}(t.range.zone,t.config);if(n&&Cr(s,i,n)){const t=e.autofillRowStart??n.top,o=e.autofillRowEnd??n.bottom,s={...n,top:t,bottom:o};this.autofillTableZone(e,s)}}}autofillTableZone(e,t){if(t.top===t.bottom)return;const{col:o,row:s,sheetId:i}=e;for(let e=t.top;e<=t.bottom;e++)if(e!==s&&this.getters.getEvaluatedCell({col:o,row:e,sheetId:i}).type!==Ts.empty)return;const n={zone:this.getters.getSelectedZone(),cell:this.getters.getActivePosition()};this.selection.selectCell(o,s),this.dispatch("AUTOFILL_SELECT",{col:o,row:t.bottom}),this.dispatch("AUTOFILL"),this.selection.selectCell(o,s),this.dispatch("AUTOFILL_SELECT",{col:o,row:t.top}),this.dispatch("AUTOFILL"),this.selection.selectZone(n)}}).add("table_ui_resize",class extends PV{allowDispatch(e){if("RESIZE_TABLE"===e.type){const t=this.getters.getCoreTableMatchingTopLeft(e.sheetId,e.zone);if(!t)return"TableNotFound";const o=t.range.zone,s=this.getters.getRangeFromRangeData(e.newTableRange).zone;return s.top!==o.top||s.left!==o.left?"InvalidTableResize":this.canDispatch("UPDATE_TABLE",{...e}).reasons}return"Success"}handle(e){switch(e.type){case"RESIZE_TABLE":{const t=this.getters.getCoreTableMatchingTopLeft(e.sheetId,e.zone);if(this.dispatch("UPDATE_TABLE",{...e}),!t)return;const o=this.getters.getRangeFromRangeData(e.newTableRange).zone;if(this.selection.selectCell(o.right,o.bottom),!t.config.automaticAutofill)return;const s=t.range.zone;if(o.bottom>=s.bottom){for(let t=o.left;t<=o.right;t++){const i={col:t,row:s.bottom,sheetId:e.sheetId};this.getters.getCell(i)?.content.startsWith("=")&&this.dispatch("AUTOFILL_TABLE_COLUMN",{...i,autofillRowStart:s.bottom,autofillRowEnd:o.bottom})}break}}}}}).add("datavalidation_insert",class extends PV{handle(e){if("ADD_DATA_VALIDATION_RULE"===e.type)if("isBoolean"===e.rule.criterion.type){const t=e.ranges.map((e=>this.getters.getRangeFromRangeData(e)));for(const e of va(t)){const t=this.getters.getCell(e),o=this.getters.getEvaluatedCell(e);if(t?.content)if(t?.content&&o.type===Ts.empty){let o;if(t.content.startsWith("=")){const s=this.getters.evaluateFormula(e.sheetId,t.content);o=(Ws(s)?s[0][0]:s)?.toString()}else o=t.content;o&&Ke(o)||this.dispatch("UPDATE_CELL",{...e,content:"FALSE"})}else o.type!==Ts.boolean&&this.dispatch("UPDATE_CELL",{...e,content:"FALSE"});else this.dispatch("UPDATE_CELL",{...e,content:"FALSE"})}}}}).add("checkbox_toggle",class extends PV{static getters=["hasBooleanValidationInZones"];handle(e){if("TOGGLE_CHECKBOX"===e.type)this.toggleCheckbox(e.sheetId,e.target)}hasBooleanValidationInZones(e){const t=this.getters.getActiveSheetId();for(const o of e)for(let e=o.left;e<=o.right;e++)for(let s=o.top;s<=o.bottom;s++)if(this.getters.isCellValidCheckbox({col:e,row:s,sheetId:t}))return!0;return!1}toggleCheckbox(e,t){for(const o of t)for(let t=o.left;t<=o.right;t++)for(let s=o.top;s<=o.bottom;s++){const o={col:t,row:s,sheetId:e};if(this.getters.isCellValidCheckbox(o)){const e=this.getters.getEvaluatedCell(o).value?"FALSE":"TRUE";this.dispatch("UPDATE_CELL",{...o,content:e})}}}}).add("geo_features",class extends PV{static getters=["getGeoJsonFeatures","geoFeatureNameToId","getGeoChartAvailableRegions"];geoJsonService;geoJsonCache={};constructor(e){super(e),this.geoJsonService=e.external.geoJsonService}getGeoChartAvailableRegions(){return this.geoJsonService?this.geoJsonService.getAvailableRegions()||[]:(console.error("No geoJsonService provided to the model"),[])}getGeoJsonFeatures(e){if(!this.geoJsonService)return void console.error("No geoJsonService provided to the model");const t=this.geoJsonCache[e];return t instanceof Promise?void 0:void 0!==t?t??void 0:void(this.geoJsonCache[e]=new Promise((async t=>{const o=await(this.geoJsonService?.getTopoJson(e));this.geoJsonCache[e]=this.convertToGeoJson(o),this.dispatch("EVALUATE_CHARTS"),t()})))}geoFeatureNameToId(e,t){if(this.geoJsonService)return this.geoJsonService.geoFeatureNameToId(e,t);console.error("No geoJsonService provided to the model")}convertToGeoJson(e){if(!e)return null;if("Topology"===e.type){const t=window.ChartGeo.topojson.feature(e,Object.values(e.objects)[0]);return"FeatureCollection"===t.type?t.features:[t]}if("FeatureCollection"===e.type)return e.features;throw new Error("Invalid TopoJSON")}}),bL=(new n).add("selection",class extends PV{static layers=["Selection"];static getters=["getActiveSheet","getActiveSheetId","getActiveSheetName","getActiveCell","getActiveCols","getActiveRows","getCurrentStyle","getSelectedZones","getSelectedZone","getSelectedCells","getSelectedFigureId","getSelection","getActivePosition","getSheetPosition","isSingleColSelected","getElementsFromSelection","tryGetActiveSheetId","isGridSelectionActive","getSelectecUnboundedZone"];gridSelection={anchor:{cell:{col:0,row:0},zone:{top:0,left:0,bottom:0,right:0}},zones:[{top:0,left:0,bottom:0,right:0}]};selectedFigureId=null;sheetsData={};moveClient;isUnbounded;activeSheet=null;constructor(e){super(e),this.moveClient=e.moveClient,this.isUnbounded=!1}allowDispatch(e){switch(e.type){case"ACTIVATE_SHEET":try{if(!this.getters.getSheet(e.sheetIdTo).isVisible)return"SheetIsHidden";break}catch(e){return"InvalidSheetId"}case"MOVE_COLUMNS_ROWS":return this.isMoveElementAllowed(e)}return"Success"}handleEvent(e){const t=e.anchor;let o=[];switch(this.isUnbounded=e.options?.unbounded||!1,e.mode){case"overrideSelection":o=[t.zone];break;case"updateAnchor":o=[...this.gridSelection.zones];const s=o.findIndex((t=>br(t,e.previousAnchor.zone)));s>=0&&(o[s]=t.zone);break;case"newAnchor":o=[...this.gridSelection.zones,t.zone]}this.setSelectionMixin(e.anchor,o),this.selection.resetDefaultAnchor(this,ze(this.gridSelection.anchor));const{col:s,row:i}=this.gridSelection.anchor.cell;this.moveClient({sheetId:this.getters.getActiveSheetId(),col:s,row:i}),this.selectedFigureId=null}handle(e){switch(e.type){case"ACTIVATE_SHEET":this.selectedFigureId=null;break;case"DELETE_FIGURE":this.selectedFigureId===e.figureId&&(this.selectedFigureId=null);break;case"DELETE_SHEET":this.selectedFigureId&&this.getters.getFigure(e.sheetId,this.selectedFigureId)&&(this.selectedFigureId=null)}switch(e.type){case"START":const t=this.getters.getVisibleSheetIds()[0];this.activateSheet(t,t);const{col:o,row:s}=this.getters.getNextVisibleCellPosition({sheetId:t,col:0,row:0});this.selectCell(o,s),this.selection.registerAsDefault(this,this.gridSelection.anchor,{handleEvent:this.handleEvent.bind(this)}),this.moveClient({sheetId:t,col:0,row:0});break;case"ACTIVATE_SHEET":this.activateSheet(e.sheetIdFrom,e.sheetIdTo);break;case"REMOVE_COLUMNS_ROWS":{const t=this.getters.getActiveSheetId();if(e.sheetId===t){"COL"===e.dimension?this.onColumnsRemoved(e):this.onRowsRemoved(e);const{col:o,row:s}=this.gridSelection.anchor.cell;this.moveClient({sheetId:t,col:o,row:s})}break}case"ADD_COLUMNS_ROWS":{const t=this.getters.getActiveSheetId();if(e.sheetId===t){this.onAddElements(e);const{col:o,row:s}=this.gridSelection.anchor.cell;this.moveClient({sheetId:t,col:o,row:s})}break}case"MOVE_COLUMNS_ROWS":e.sheetId===this.getActiveSheetId()&&this.onMoveElements(e);break;case"SELECT_FIGURE":this.selectedFigureId=e.figureId;break;case"ACTIVATE_NEXT_SHEET":this.activateNextSheet("right");break;case"ACTIVATE_PREVIOUS_SHEET":this.activateNextSheet("left");break;case"HIDE_SHEET":e.sheetId===this.getActiveSheetId()&&this.dispatch("ACTIVATE_SHEET",{sheetIdFrom:e.sheetId,sheetIdTo:this.getters.getVisibleSheetIds()[0]});break;case"UNDO":case"REDO":case"DELETE_SHEET":const i=Object.keys(this.sheetsData).filter((e=>!this.getters.tryGetSheet(e)));for(const e of i)delete this.sheetsData[e];for(const e in this.sheetsData){const t=this.clipSelection(e,this.sheetsData[e].gridSelection);this.sheetsData[e]={gridSelection:ze(t)}}this.fallbackToVisibleSheet();const n=this.getters.getActiveSheetId();this.gridSelection.zones=this.gridSelection.zones.map((e=>this.getters.expandZone(n,e))),this.gridSelection.anchor.zone=this.getters.expandZone(n,this.gridSelection.anchor.zone),this.setSelectionMixin(this.gridSelection.anchor,this.gridSelection.zones),this.selectedFigureId=null}}finalize(){this.fallbackToVisibleSheet(),this.selection.resetDefaultAnchor(this,ze(this.gridSelection.anchor))}isGridSelectionActive(){return this.selection.isListening(this)}getActiveSheet(){return this.activeSheet}getActiveSheetId(){return this.activeSheet.id}getActiveSheetName(){return this.activeSheet.name}tryGetActiveSheetId(){return this.activeSheet?.id}getActiveCell(){return this.getters.getEvaluatedCell(this.getActivePosition())}getActiveCols(){const e=new Set;for(const t of this.gridSelection.zones)if(0===t.top&&t.bottom===this.getters.getNumberRows(this.getters.getActiveSheetId())-1)for(let o=t.left;o<=t.right;o++)e.add(o);return e}getActiveRows(){const e=new Set,t=this.getters.getActiveSheetId();for(const o of this.gridSelection.zones)if(0===o.left&&o.right===this.getters.getNumberCols(t)-1)for(let t=o.top;t<=o.bottom;t++)e.add(t);return e}getCurrentStyle(){const e=this.getters.getSelectedZone(),t=this.getters.getActiveSheetId();return this.getters.getCellStyle({sheetId:t,col:e.left,row:e.top})}getSelectedZones(){return ze(this.gridSelection.zones)}getSelectedZone(){return ze(this.gridSelection.anchor.zone)}getSelectecUnboundedZone(){return ze(this.isUnbounded?this.getters.getUnboundedZone(this.activeSheet.id,this.gridSelection.anchor.zone):this.gridSelection.anchor.zone)}getSelection(){return ze(this.gridSelection)}getSelectedCells(){const e=this.getters.getActiveSheetId(),t=[];for(const o of this.gridSelection.zones)t.push(...this.getters.getEvaluatedCellsInZone(e,o));return t}getSelectedFigureId(){return this.selectedFigureId}getActivePosition(){return this.getters.getMainCellPosition({sheetId:this.getActiveSheetId(),col:this.gridSelection.anchor.cell.col,row:this.gridSelection.anchor.cell.row})}getSheetPosition(e){if(e===this.getters.getActiveSheetId())return this.getActivePosition();{const t=this.sheetsData[e];return t?{sheetId:e,col:t.gridSelection.anchor.cell.col,row:t.gridSelection.anchor.cell.row}:this.getters.getNextVisibleCellPosition({sheetId:e,col:0,row:0})}}isSingleColSelected(){const e=this.getters.getSelectedZones();return 1===e.length&&e[0].left===e[0].right}getElementsFromSelection(e){if("COL"===e&&0===this.getters.getActiveCols().size)return[];if("ROW"===e&&0===this.getters.getActiveRows().size)return[];const t=this.getters.getSelectedZones();let o=[];const s="COL"===e?"left":"top",i="COL"===e?"right":"bottom";for(const e of t){const t=Array.from({length:e[i]-e[s]+1},((t,o)=>e[s]+o));o=o.concat(t)}return[...new Set(o)].sort()}activateSheet(e,t){if(this.setActiveSheet(t),this.sheetsData[e]={gridSelection:ze(this.gridSelection)},t in this.sheetsData)Object.assign(this,this.sheetsData[t]),this.selection.resetDefaultAnchor(this,ze(this.gridSelection.anchor));else{const{col:e,row:o}=this.getters.getNextVisibleCellPosition({sheetId:t,col:0,row:0});this.selectCell(e,o)}const{col:o,row:s}=this.gridSelection.anchor.cell;this.moveClient({sheetId:this.activeSheet.id,col:o,row:s})}setSelectionMixin(e,t){const{anchor:o,zones:s}=this.clipSelection(this.getters.getActiveSheetId(),{anchor:e,zones:t});this.gridSelection.anchor=o,this.gridSelection.zones=function(e){return e.reverse().filter(((e,t,o)=>t===o.findIndex((t=>t.top===e.top&&t.bottom===e.bottom&&t.left===e.left&&t.right===e.right)))).reverse()}(s)}selectCell(e,t){const o=this.getters.getActiveSheetId(),s=this.getters.expandZone(o,{left:e,right:e,top:t,bottom:t});this.setSelectionMixin({zone:s,cell:{col:e,row:t}},[s])}setActiveSheet(e){this.activeSheet=this.getters.getSheet(e)}activateNextSheet(e){const t=this.getters.getSheetIds(),o=(t.findIndex((e=>e===this.activeSheet.id))+("left"===e?t.length-1:1))%t.length;this.dispatch("ACTIVATE_SHEET",{sheetIdFrom:this.getActiveSheetId(),sheetIdTo:t[o]})}onColumnsRemoved(e){const{cell:t,zone:o}=this.gridSelection.anchor,s=pr(o,"left",[...e.elements]);let i={left:t.col,right:t.col,top:t.row,bottom:t.row};i=pr(i,"left",[...e.elements]);const n={cell:{col:i.left,row:i.top},zone:s},r=this.gridSelection.zones.map((t=>pr(t,"left",[...e.elements])));this.setSelectionMixin(n,r)}onRowsRemoved(e){const{cell:t,zone:o}=this.gridSelection.anchor,s=pr(o,"top",[...e.elements]);let i={left:t.col,right:t.col,top:t.row,bottom:t.row};i=pr(i,"top",[...e.elements]);const n={cell:{col:i.left,row:i.top},zone:s},r=this.gridSelection.zones.map((t=>pr(t,"top",[...e.elements])));this.setSelectionMixin(n,r)}onAddElements(e){const t="COL"===e.dimension?"left":"top",o=gr(this.gridSelection.anchor.zone,t,e.base,e.position,e.quantity),s=this.gridSelection.zones.map((o=>gr(o,t,e.base,e.position,e.quantity))),i={cell:{col:o.left,row:o.top},zone:o};this.setSelectionMixin(i,s)}onMoveElements(e){const t=e.elements.length,o=this.getFiguresUpdates(e);this.dispatch("ADD_COLUMNS_ROWS",{dimension:e.dimension,sheetId:e.sheetId,sheetName:e.sheetName,base:e.base,quantity:t,position:e.position});const s="COL"===e.dimension,i=e.elements[0],n=e.elements[t-1],r=e.base<i,a=r&&s?t:0,l=r&&!s?t:0,c=[{left:s?i+a:0,right:s?n+a:this.getters.getNumberCols(e.sheetId)-1,top:s?0:i+l,bottom:s?this.getters.getNumberRows(e.sheetId)-1:n+l}],h=this.getActiveSheetId(),d=r?e.base:e.base+1,u=[{left:s?d:0,right:s?d+t-1:this.getters.getNumberCols(e.sheetId)-1,top:s?0:d,bottom:s?this.getters.getNumberRows(e.sheetId)-1:d+t-1}];for(const e of jc.cellHandlers.getAll()){const t=new e(this.getters,this.dispatch),o=t.copy(Za(h,c));o&&t.paste({zones:u,sheetId:h},o,{isCutOperation:!0})}const g=u[0],p=g.left,m=g.top;this.setSelectionMixin({zone:g,cell:{col:p,row:m}},[g]);const f=r?e.elements.map((e=>e+t)):e.elements;let v=r?e.base:e.base+1;const b={};for(const t of f){const o=this.getters.getHeaderSize(e.sheetId,e.dimension,t);o!==this.getters.getHeaderSize(e.sheetId,e.dimension,v)&&(b[o]??=[],b[o].push(v),v+=1)}for(const t in b)this.dispatch("RESIZE_COLUMNS_ROWS",{dimension:e.dimension,sheetId:e.sheetId,size:parseInt(t,10),elements:b[t]});this.dispatch("REMOVE_COLUMNS_ROWS",{dimension:e.dimension,sheetId:e.sheetId,sheetName:e.sheetName,elements:f}),this.applyFigureUpdates(o)}getFiguresUpdates(e){const t=[],o={},s=e.elements[0]<e.base?e.base-e.elements.length+1:e.base;for(let t=0;t<e.elements.length;t++)o[e.elements[t]]=s+t;for(const s of this.getters.getFigures(e.sheetId))"COL"===e.dimension&&s.col in o&&t.push({type:"UPDATE_FIGURE",sheetId:e.sheetId,figureId:s.id,col:o[s.col],row:s.row}),"ROW"===e.dimension&&s.row in o&&t.push({type:"UPDATE_FIGURE",sheetId:e.sheetId,figureId:s.id,row:o[s.row],col:s.col});return t}applyFigureUpdates(e){for(const t of e)this.dispatch(t.type,{...t})}isMoveElementAllowed(e){const t="COL"===e.dimension,o=e.elements[0],s=e.elements[e.elements.length-1],i=e.sheetId,n=t?this.getters.doesColumnsHaveCommonMerges:this.getters.doesRowsHaveCommonMerges;if(n(i,o-1,o)||n(i,s,s+1)||n(i,e.base-1,e.base))return"WillRemoveExistingMerge";const r=[e.base,...e.elements],a=t?this.getters.getNumberCols(i):this.getters.getNumberRows(i);return r.some((e=>e<0||e>=a))?"InvalidHeaderIndex":"Success"}fallbackToVisibleSheet(){if(!this.getters.tryGetSheet(this.getters.getActiveSheetId())){const e=this.getters.getVisibleSheetIds();if(this.activeSheet=this.getters.getSheet(e[0]),this.activeSheet.id in this.sheetsData){const{anchor:e}=this.clipSelection(this.activeSheet.id,this.sheetsData[this.activeSheet.id].gridSelection);this.selectCell(e.cell.col,e.cell.row)}else this.selectCell(0,0);const{col:t,row:o}=this.gridSelection.anchor.cell;this.moveClient({sheetId:this.getters.getActiveSheetId(),col:t,row:o})}}clipSelection(e,t){const o=this.getters.getNumberCols(e)-1,s=this.getters.getNumberRows(e)-1;return{zones:t.zones.map((e=>({left:Ze(e.left,0,o),right:Ze(e.right,0,o),top:Ze(e.top,0,s),bottom:Ze(e.bottom,0,s)}))),anchor:{cell:{col:Ze(t.anchor.cell.col,0,o),row:Ze(t.anchor.cell.row,0,s)},zone:{left:Ze(t.anchor.zone.left,0,o),right:Ze(t.anchor.zone.right,0,o),top:Ze(t.anchor.zone.top,0,s),bottom:Ze(t.anchor.zone.bottom,0,s)}}}}drawLayer(e){if(this.getters.isDashboard())return;const{ctx:t,thinLineWidth:o}=e,s=this.getSelectedZones();t.fillStyle="#f3f7fe";const i=1===s.length&&s[0].left===s[0].right&&s[0].top===s[0].bottom;t.fillStyle=i?"#f3f7fe":"#e9f0ff",t.strokeStyle=p,t.lineWidth=1.5*o;for(const e of s){const{x:o,y:s,width:i,height:n}=this.getters.getVisibleRect(e);t.globalCompositeOperation="multiply",t.fillRect(o,s,i,n),t.globalCompositeOperation="source-over",t.strokeRect(o,s,i,n)}t.globalCompositeOperation="source-over";const n=this.getActivePosition();let r;t.strokeStyle=p,t.lineWidth=3*o,r=this.getters.isInMerge(n)?this.getters.getMerge(n):Dr(n);const{x:a,y:l,width:c,height:h}=this.getters.getVisibleRect(r);c>0&&h>0&&t.strokeRect(a,l,c,h)}}).add("evaluation_filter",class extends PV{static getters=["getFilterValue","getFilterHiddenValues","getFilterCriterionValue","getFirstTableInSelection","isRowFiltered","isFilterActive"];filterValues={};hiddenRows={};isEvaluationDirty=!1;allowDispatch(e){if("UPDATE_FILTER"===e.type)if(!this.getters.getFilterId(e))return"FilterNotFound";return"Success"}handle(e){switch(e.type){case"UNDO":case"REDO":case"UPDATE_CELL":case"EVALUATE_CELLS":case"ACTIVATE_SHEET":case"REMOVE_TABLE":case"ADD_COLUMNS_ROWS":case"REMOVE_COLUMNS_ROWS":case"UPDATE_TABLE":this.isEvaluationDirty=!0;break;case"START":for(const e of this.getters.getSheetIds())this.filterValues[e]={};break;case"CREATE_SHEET":this.filterValues[e.sheetId]={};break;case"HIDE_COLUMNS_ROWS":case"UNHIDE_COLUMNS_ROWS":case"GROUP_HEADERS":case"UNGROUP_HEADERS":case"FOLD_HEADER_GROUP":case"UNFOLD_HEADER_GROUP":case"FOLD_ALL_HEADER_GROUPS":case"UNFOLD_ALL_HEADER_GROUPS":case"FOLD_HEADER_GROUPS_IN_ZONE":case"UNFOLD_HEADER_GROUPS_IN_ZONE":this.updateHiddenRows(e.sheetId);break;case"UPDATE_FILTER":this.updateFilter(e),this.updateHiddenRows(e.sheetId);break;case"DUPLICATE_SHEET":this.filterValues[e.sheetIdTo]=ze(this.filterValues[e.sheetId])}}finalize(){if(this.isEvaluationDirty){for(const e of this.getters.getSheetIds())this.updateHiddenRows(e);this.isEvaluationDirty=!1}}isRowFiltered(e,t){return!!this.hiddenRows[e]?.has(t)}getFilterValue(e){const t=this.getters.getFilterId(e),o=e.sheetId;return t?this.filterValues[o]?.[t]:void 0}getFilterHiddenValues(e){const t=this.getters.getFilterId(e),o=e.sheetId;if(!t||!this.filterValues[o])return[];const s=this.filterValues[o][t]||[];return"values"===s.filterType?s.hiddenValues:[]}getFilterCriterionValue(e){const t=this.getters.getFilterId(e),o=e.sheetId;if(!t||!this.filterValues[o])return pL;const s=this.filterValues[o][t];return s&&"criterion"===s.filterType?s:pL}isFilterActive(e){const t=this.getters.getFilterId(e);if(!t)return!1;const o=e.sheetId,s=this.filterValues[o]?.[t];return!!s&&("values"===s.filterType?s.hiddenValues.length>0:"none"!==s.type)}getFirstTableInSelection(){const e=this.getters.getActiveSheetId(),t=this.getters.getSelectedZones();return this.getters.getTablesOverlappingZones(e,t)[0]}updateFilter({col:e,row:t,value:o,sheetId:s}){const i=this.getters.getFilterId({sheetId:s,col:e,row:t});i&&(this.filterValues[s]||(this.filterValues[s]={}),this.filterValues[s][i]=o)}updateHiddenRows(e){const t=this.getters.getFilters(e).sort(((e,t)=>e.rangeWithHeaders.zone.top-t.rangeWithHeaders.zone.top)),o=new Set;for(const s of t){const t=this.filterValues[e]?.[s.id],i=s.filteredRange?.zone;if(t&&i&&!o.has(s.rangeWithHeaders.zone.top)&&!this.getters.isRowHiddenByUser(e,s.rangeWithHeaders.zone.top))if("values"===t.filterType){const n=t.hiddenValues?.map(Ua);if(!n)continue;const r=new Set(n);for(let t=i.top;t<=i.bottom;t++){const i=this.getCellValueAsString(e,s.col,t);r.has(i)&&o.add(t)}}else{if("none"===t.type)continue;const n=Zx.get(t.type),r=t.values.map((t=>t.startsWith("=")?this.getters.evaluateFormula(e,t)??"":qn(t,$s)));if(r.some(Ws))continue;const a={type:t.type,values:r,dateValue:t.dateValue};for(let t=i.top;t<=i.bottom;t++){const i={sheetId:e,col:s.col,row:t},r=this.getters.getEvaluatedCell(i).value??"";n.isValueValid(r,a,this.getters,e)||o.add(t)}}}this.hiddenRows[e]=o}getCellValueAsString(e,t,o){return this.getters.getEvaluatedCell({sheetId:e,col:t,row:o}).formattedValue.toLowerCase()}exportForExcel(e){for(const t of e.sheets){const e=t.id;for(const o of t.tables){const s=ar(o.range),i=[],n=[];for(const o of je(0,wr(s).numberOfCols)){const r={sheetId:t.id,col:s.left+o,row:s.top},a=this.getFilterHiddenValues(r),l=this.getters.getFilter(r),c=l?.filteredRange?Er(l.filteredRange.zone).map((t=>this.getters.getEvaluatedCell({sheetId:e,...t}).formattedValue)):[];if(a.length){const e=c.filter((e=>e)).filter((e=>!a.includes(e)));i.push({colId:o,displayedValues:[...new Set(e)],displayBlanks:!a.includes("")&&c.some((e=>!e))})}const h=this.getters.getEvaluatedCell(r).formattedValue,d=this.getUniqueColNameForExcel(o,h,n);n.push(d);const u=Oo(r.col,r.row);t.cells[u]=d,t.cellValues[u]=d}o.filters=i}}}getUniqueColNameForExcel(e,t,o){return t||(t=`Column${e}`),kt(t,o,{compute:(e,o)=>t+String(o),start:2})}}).add("header_visibility_ui",class extends PV{static getters=["getNextVisibleCellPosition","findVisibleHeader","findLastVisibleColRowIndex","findFirstVisibleColRowIndex","isRowHidden","isColHidden","isHeaderHidden"];isRowHidden(e,t){return this.getters.isRowHiddenByUser(e,t)||this.getters.isRowFiltered(e,t)}isColHidden(e,t){return this.getters.isColHiddenByUser(e,t)}isHeaderHidden(e,t,o){return"COL"===t?this.isColHidden(e,o):this.isRowHidden(e,o)}getNextVisibleCellPosition({sheetId:e,col:t,row:o}){return{sheetId:e,col:this.findVisibleHeader(e,"COL",t,this.getters.getNumberCols(e)-1),row:this.findVisibleHeader(e,"ROW",o,this.getters.getNumberRows(e)-1)}}findVisibleHeader(e,t,o,s){if(o<=s)for(let i=o;i<=s;i++)if(this.getters.doesHeaderExist(e,t,i)&&!this.isHeaderHidden(e,t,i))return i;if(o>s)for(let i=o;i>=s;i--)if(this.getters.doesHeaderExist(e,t,i)&&!this.isHeaderHidden(e,t,i))return i}findLastVisibleColRowIndex(e,t,{last:o,first:s}){return je(o,s,-1).find((o=>!this.isHeaderHidden(e,t,o)))||s}findFirstVisibleColRowIndex(e,t){const o=this.getters.getNumberHeaders(e,t);for(let s=0;s<o;s++){if("COL"===t&&!this.isColHidden(e,s))return s;if("ROW"===t&&!this.isRowHidden(e,s))return s}}exportForExcel(e){for(const t of e.sheets)for(const[e,o]of Object.entries(t.rows))o.isHidden=this.isRowHidden(t.id,Number(e))}}).add("cell_computed_style",class extends PV{static getters=["getCellComputedBorder","getCellComputedStyle"];styles={};borders={};handle(e){if(Ds.has(e.type)||"UPDATE_CELL"===e.type||"SET_FORMATTING"===e.type||"ADD_DATA_VALIDATION_RULE"===e.type||"REMOVE_DATA_VALIDATION_RULE"===e.type||"EVALUATE_CELLS"===e.type)return this.styles={},void(this.borders={});JV(e)?"sheetId"in e?(delete this.styles[e.sheetId],delete this.borders[e.sheetId]):(this.styles={},this.borders={}):Fs.has(e.type)?this.styles={}:Ps.has(e.type)&&(this.borders={})}getCellComputedBorder(e){const{sheetId:t,row:o,col:s}=e;return void 0!==this.borders[t]?.[o]?.[s]||(this.borders[t]||(this.borders[t]={}),this.borders[t][o]||(this.borders[t][o]={}),this.borders[t][o][s]||(this.borders[t][o][s]=this.computeCellBorder(e))),this.borders[t][o][s]}getCellComputedStyle(e){const{sheetId:t,row:o,col:s}=e;return void 0!==this.styles[t]?.[o]?.[s]||(this.styles[t]||(this.styles[t]={}),this.styles[t][o]||(this.styles[t][o]={}),this.styles[t][o][s]||(this.styles[t][o][s]=this.computeCellStyle(e))),this.styles[t][o][s]}computeCellBorder(e){const t=this.getters.getCellBorder(e)||{},o={...bt(this.getters.getCellTableBorder(e)||{}),...bt(t)};return ct(o)?null:o}computeCellStyle(e){const t=this.getters.getCell(e),o=this.getters.getCellConditionalFormatStyle(e),s=this.getters.getCellTableStyle(e),i=this.getters.getDataValidationCellStyle(e),n={...bt(s),...bt(i),...bt(t?.style),...bt(o)};return this.getters.getEvaluatedCell(e).link&&!n.textColor&&(n.textColor=b),n}}).add("table_computed_style",class extends PV{static getters=["getCellTableStyle","getCellTableBorder"];tableStyles={};handle(e){Ds.has(e.type)||"UPDATE_CELL"===e.type&&("content"in e||"format"in e)||"EVALUATE_CELLS"===e.type?this.tableStyles={}:JV(e)&&("sheetId"in e?delete this.tableStyles[e.sheetId]:this.tableStyles={})}finalize(){for(const e of this.getters.getSheetIds()){this.tableStyles[e]||(this.tableStyles[e]={});for(const t of this.getters.getTables(e))this.tableStyles[e][t.id]||(this.tableStyles[e][t.id]=this.computeTableStyle(e,t))}}getCellTableStyle(e){const t=this.getters.getTable(e);if(t)return this.tableStyles[e.sheetId][t.id]().styles[e.col]?.[e.row]}getCellTableBorder(e){const t=this.getters.getTable(e);if(t)return this.tableStyles[e.sheetId][t.id]().borders[e.col]?.[e.row]}computeTableStyle(e,t){return ut((()=>{const{config:o,numberOfCols:s,numberOfRows:i}=this.getTableRuntimeConfig(e,t),n=g_(o,this.getters.getTableStyle(t.config.styleId),s,i),r=this.getTableMapping(e,t),a={borders:{},styles:{}};for(let e=0;e<s;e++){const t=r.colMapping[e];a.borders[t]={},a.styles[t]={};for(let o=0;o<i;o++){const s=r.rowMapping[o];a.borders[t][s]=n.borders[e][o],a.styles[t][s]=n.styles[e][o]}}return a}))}getTableRuntimeConfig(e,t){const o=t.range.zone,s={...t.config};let i=o.right-o.left+1,n=o.bottom-o.top+1;for(let i=o.top;i<=o.bottom;i++)this.getters.isRowHidden(e,i)&&(n--,i-o.top<t.config.numberOfHeaders&&(s.numberOfHeaders--,s.numberOfHeaders<0&&(s.numberOfHeaders=0)),i===o.bottom&&(s.totalRow=!1));for(let t=o.left;t<=o.right;t++)this.getters.isColHidden(e,t)&&(i--,t===o.left&&(s.firstColumn=!1),t===o.right&&(s.lastColumn=!1));return{config:s,numberOfCols:i,numberOfRows:n}}getTableMapping(e,t){const o={},s={};let i=0,n=0;const r=t.range.zone;for(let t=r.left;t<=r.right;t++)if(!this.getters.isColHidden(e,t)){o[i]=t,i++;for(let t=r.top;t<=r.bottom;t++)this.getters.isRowHidden(e,t)||(s[n]=t,n++)}return{colMapping:o,rowMapping:s}}}).add("header_positions",class extends PV{static getters=["getColDimensions","getRowDimensions","getColRowOffset"];headerPositions={};isDirty=!0;handle(e){switch(Ds.has(e.type)&&(this.headerPositions={},this.isDirty=!0),e.type){case"START":for(const e of this.getters.getSheetIds())this.headerPositions[e]=this.computeHeaderPositionsOfSheet(e);break;case"UPDATE_CELL":case"UPDATE_FILTER":case"UPDATE_TABLE":case"REMOVE_TABLE":this.headerPositions={},this.isDirty=!0;break;case"REMOVE_COLUMNS_ROWS":case"RESIZE_COLUMNS_ROWS":case"HIDE_COLUMNS_ROWS":case"ADD_COLUMNS_ROWS":case"UNHIDE_COLUMNS_ROWS":case"FOLD_HEADER_GROUP":case"UNFOLD_HEADER_GROUP":case"FOLD_HEADER_GROUPS_IN_ZONE":case"UNFOLD_HEADER_GROUPS_IN_ZONE":case"UNFOLD_ALL_HEADER_GROUPS":case"FOLD_ALL_HEADER_GROUPS":case"UNGROUP_HEADERS":case"GROUP_HEADERS":case"CREATE_SHEET":this.getters.tryGetSheet(e.sheetId)&&(this.headerPositions[e.sheetId]=this.computeHeaderPositionsOfSheet(e.sheetId));break;case"DUPLICATE_SHEET":this.headerPositions[e.sheetIdTo]=ze(this.headerPositions[e.sheetId])}}finalize(){for(const e of this.getters.getSheetIds())!this.isDirty&&this.headerPositions[e]||(this.headerPositions[e]=this.computeHeaderPositionsOfSheet(e));this.isDirty=!1}getColDimensions(e,t){const o=this.headerPositions[e].COL[t],s=this.getters.getColSize(e,t);return{start:o,size:s,end:o+(this.getters.isColHidden(e,t)?0:s)}}getRowDimensions(e,t){const o=this.headerPositions[e].ROW[t],s=this.getters.getRowSize(e,t);return{start:o,size:s,end:o+(this.getters.isRowHidden(e,t)?0:s)}}getColRowOffset(e,t,o,s=this.getters.getActiveSheetId()){const i=this.headerPositions[s][e][t];return this.headerPositions[s][e][o]-i}computeHeaderPositionsOfSheet(e){return{COL:this.computePositions(e,"COL"),ROW:this.computePositions(e,"ROW")}}computePositions(e,t){const o={};let s=0;for(let i=0;i<this.getters.getNumberHeaders(e,t)+1;i++)o[i]=s,this.getters.isHeaderHidden(e,t,i)||(s+=this.getters.getHeaderSize(e,t,i));return o}}).add("viewport",class extends PV{static getters=["getColIndex","getRowIndex","getActiveMainViewport","getSheetViewDimension","getSheetViewDimensionWithHeaders","getMainViewportRect","isVisibleInViewport","getEdgeScrollCol","getEdgeScrollRow","getVisibleFigures","getVisibleRect","getVisibleRectWithoutHeaders","getVisibleCellPositions","getColRowOffsetInViewport","getMainViewportCoordinates","getActiveSheetScrollInfo","getSheetViewVisibleCols","getSheetViewVisibleRows","getFrozenSheetViewRatio","isPixelPositionVisible","getColDimensionsInViewport","getRowDimensionsInViewport","getAllActiveViewportsZonesAndRect","getRect","getFigureUI","getPositionAnchorOffset","getGridOffset"];viewports={};sheetViewWidth=Me();sheetViewHeight=Me();gridOffsetX=0;gridOffsetY=0;sheetsWithDirtyViewports=new Set;shouldAdjustViewports=!1;allowDispatch(e){switch(e.type){case"SET_VIEWPORT_OFFSET":return this.chainValidations(this.checkScrollingDirection,this.checkIfViewportsWillChange)(e);case"RESIZE_SHEETVIEW":return this.chainValidations(this.checkValuesAreDifferent,this.checkPositiveDimension)(e);default:return"Success"}}handleEvent(e){const t=this.getters.getActiveSheetId();if(e.options.scrollIntoView){let{col:o,row:s}=Ar(e.previousAnchor.zone,e.anchor.zone);if("updateAnchor"===e.mode){const i=e.previousAnchor.zone,n=e.anchor.zone,{top:r,bottom:a,left:l,right:c}=this.getMainInternalViewport(t);i.left===n.left&&i.right===n.right&&(o=l>o||o>c?l:o),i.top===n.top&&i.bottom===n.bottom&&(s=r>s||s>a?r:s)}o=Math.min(o,this.getters.getNumberCols(t)-1),s=Math.min(s,this.getters.getNumberRows(t)-1),this.sheetsWithDirtyViewports.has(t)||this.refreshViewport(this.getters.getActiveSheetId(),{col:o,row:s})}}handle(e){if(Ds.has(e.type))for(const e of this.getters.getSheetIds())this.sheetsWithDirtyViewports.add(e);switch(e.type){case"START":this.selection.observe(this,{handleEvent:this.handleEvent.bind(this)}),this.resetViewports(this.getters.getActiveSheetId());break;case"UNDO":case"REDO":this.cleanViewports();for(const e of this.getters.getSheetIds())this.sheetsWithDirtyViewports.add(e);this.shouldAdjustViewports=!0;break;case"RESIZE_SHEETVIEW":this.resizeSheetView(e.height,e.width,e.gridOffsetX,e.gridOffsetY);break;case"SET_VIEWPORT_OFFSET":this.setSheetViewOffset(e.offsetX,e.offsetY);break;case"SHIFT_VIEWPORT_DOWN":const t=this.getters.getActiveSheetId(),{top:o,viewportHeight:s,offsetCorrectionY:i}=this.getMainInternalViewport(t),n=this.getters.getRowDimensions(t,o);this.shiftVertically(n.start+s-i);break;case"SHIFT_VIEWPORT_UP":{const e=this.getters.getActiveSheetId(),{top:t,viewportHeight:o,offsetCorrectionY:s}=this.getMainInternalViewport(e),i=this.getters.getRowDimensions(e,t);this.shiftVertically(i.end-s-o);break}case"REMOVE_TABLE":case"UPDATE_TABLE":case"UPDATE_FILTER":case"UNFREEZE_ROWS":case"UNFREEZE_COLUMNS":case"FREEZE_COLUMNS":case"FREEZE_ROWS":case"UNFREEZE_COLUMNS_ROWS":case"REMOVE_COLUMNS_ROWS":case"RESIZE_COLUMNS_ROWS":case"HIDE_COLUMNS_ROWS":case"ADD_COLUMNS_ROWS":case"UNHIDE_COLUMNS_ROWS":case"UNGROUP_HEADERS":case"GROUP_HEADERS":case"FOLD_HEADER_GROUP":case"UNFOLD_HEADER_GROUP":case"FOLD_HEADER_GROUPS_IN_ZONE":case"UNFOLD_HEADER_GROUPS_IN_ZONE":case"UNFOLD_ALL_HEADER_GROUPS":case"FOLD_ALL_HEADER_GROUPS":this.sheetsWithDirtyViewports.add(e.sheetId);break;case"UPDATE_CELL":if("content"in e||"format"in e||void 0!==e.style?.fontSize)for(const e of this.getters.getSheetIds())this.sheetsWithDirtyViewports.add(e);break;case"DELETE_SHEET":this.cleanViewports(),this.sheetsWithDirtyViewports.delete(e.sheetId);break;case"ACTIVATE_SHEET":this.sheetsWithDirtyViewports.add(e.sheetIdTo);break;case"SCROLL_TO_CELL":this.refreshViewport(this.getters.getActiveSheetId(),{col:e.col,row:e.row})}}finalize(){for(const e of this.sheetsWithDirtyViewports)if(this.resetViewports(e),this.shouldAdjustViewports){const t=this.getters.getSheetPosition(e);this.getSubViewports(e).forEach((e=>{e.adjustPosition(t)}))}this.sheetsWithDirtyViewports=new Set,this.shouldAdjustViewports=!1,this.setViewports()}setViewports(){const e=this.getters.getSheetIds();for(const t of e)this.viewports[t]?.bottomRight||this.resetViewports(t)}getColIndex(e){const t=this.getters.getActiveSheetId();return Math.max(...this.getSubViewports(t).map((t=>t.getColIndex(e))))}getRowIndex(e){const t=this.getters.getActiveSheetId();return Math.max(...this.getSubViewports(t).map((t=>t.getRowIndex(e))))}getSheetViewDimensionWithHeaders(){return{width:this.sheetViewWidth+this.gridOffsetX,height:this.sheetViewHeight+this.gridOffsetY}}getSheetViewDimension(){return{width:this.sheetViewWidth,height:this.sheetViewHeight}}getGridOffset(){return{x:this.gridOffsetX,y:this.gridOffsetY}}getActiveMainViewport(){const e=this.getters.getActiveSheetId();return this.getMainViewport(e)}getActiveSheetScrollInfo(){const e=this.getters.getActiveSheetId(),t=this.getMainInternalViewport(e);return{scrollX:t.offsetX,scrollY:t.offsetY}}getSheetViewVisibleCols(){const e=this.getters.getActiveSheetId(),t=this.getSubViewports(e);return[...new Set(t.map((e=>je(e.left,e.right+1))).flat())].filter((t=>t>=0&&!this.getters.isHeaderHidden(e,"COL",t)))}getSheetViewVisibleRows(){const e=this.getters.getActiveSheetId(),t=this.getSubViewports(e);return[...new Set(t.map((e=>je(e.top,e.bottom+1))).flat())].filter((t=>t>=0&&!this.getters.isHeaderHidden(e,"ROW",t)))}getVisibleCellPositions(){const e=this.getSheetViewVisibleCols(),t=this.getSheetViewVisibleRows(),o=this.getters.getActiveSheetId(),s=[];for(const i of e)for(const e of t){const t={sheetId:o,col:i,row:e},n=this.getters.getMainCellPosition(t);n.row===e&&n.col===i&&s.push(t)}return s}getMainViewportRect(){const e=this.getters.getActiveSheetId(),t=this.getMainInternalViewport(e),{xSplit:o,ySplit:s}=this.getters.getPaneDivisions(e),{width:i,height:n}=t.getMaxSize();return{x:this.getters.getColDimensions(e,o).start,y:this.getters.getRowDimensions(e,s).start,width:i,height:n}}getMaximumSheetOffset(){const e=this.getters.getActiveSheetId(),{width:t,height:o}=this.getMainViewportRect(),s=this.getMainInternalViewport(e);return{maxOffsetX:Math.max(0,t-s.viewportWidth),maxOffsetY:Math.max(0,o-s.viewportHeight)}}getColRowOffsetInViewport(e,t,o){if(o<t)return-this.getColRowOffsetInViewport(e,o,t);const s=this.getters.getActiveSheetId(),i="COL"===e?this.getters.getSheetViewVisibleCols():this.getters.getSheetViewVisibleRows(),n=i.findIndex((e=>t>=e));let r=i.findIndex((e=>o<=e));r=-1===r?i.length:r;const a=i.slice(n,r);let l=0;for(const t of a)l+=this.getters.getHeaderSize(s,e,t);return l}isVisibleInViewport({sheetId:e,col:t,row:o}){return this.getSubViewports(e).some((e=>e.isVisible(t,o)))}getEdgeScrollCol(e,t,o){let s=!1,i=0,n=0;const{xSplit:r}=this.getters.getPaneDivisions(this.getters.getActiveSheetId()),{width:a}=this.getSheetViewDimension(),{x:l}=this.getMainViewportCoordinates(),c=this.getActiveSheetScrollInfo().scrollX;return e>a?(s=!0,n=$r(e-a),i=1):e<l&&o>=l&&c>0?(s=!0,n=$r(l-e),i=-1):r&&t<l&&e>l&&(s=!0,n=$r(e),i="reset"),{canEdgeScroll:s,direction:i,delay:n}}getEdgeScrollRow(e,t,o){let s=!1,i=0,n=0;const{ySplit:r}=this.getters.getPaneDivisions(this.getters.getActiveSheetId()),{height:a}=this.getSheetViewDimension(),{y:l}=this.getMainViewportCoordinates(),c=this.getActiveSheetScrollInfo().scrollY;return e>a?(s=!0,n=$r(e-a),i=1):e<l&&o>=l&&c>0?(s=!0,n=$r(l-e),i=-1):r&&t<l&&e>l&&(s=!0,n=$r(e),i="reset"),{canEdgeScroll:s,direction:i,delay:n}}getVisibleRect(e){const t=this.getVisibleRectWithoutHeaders(e);return{...t,x:t.x+this.gridOffsetX,y:t.y+this.gridOffsetY}}getVisibleRectWithoutHeaders(e){const t=this.getters.getActiveSheetId();return this.mapViewportsToRect(t,(t=>t.getVisibleRect(e)))}getRect(e){const t=this.getters.getActiveSheetId(),o=this.mapViewportsToRect(t,(t=>t.getFullRect(e)));return{...o,x:o.x+this.gridOffsetX,y:o.y+this.gridOffsetY}}getRectWithoutHeaders(e){const t=this.getters.getActiveSheetId();return this.mapViewportsToRect(t,(t=>t.getFullRect(e)))}getMainViewportCoordinates(){const e=this.getters.getActiveSheetId(),{xSplit:t,ySplit:o}=this.getters.getPaneDivisions(e);return{x:this.getters.getColDimensions(e,t).start,y:this.getters.getRowDimensions(e,o).start}}getColDimensionsInViewport(e,t){const{top:o}=this.getMainInternalViewport(e),s={left:t,right:t,top:o,bottom:o},{x:i,width:n}=this.getVisibleRect(s),r=i-this.gridOffsetX;return{start:r,size:n,end:r+n}}getRowDimensionsInViewport(e,t){const{left:o}=this.getMainInternalViewport(e),s={left:0,right:o,top:t,bottom:t},{y:i,height:n}=this.getVisibleRect(s),r=i-this.gridOffsetY;return{start:r,size:n,end:r+n}}getAllActiveViewportsZonesAndRect(){const e=this.getters.getActiveSheetId();return this.getSubViewports(e).map((e=>({zone:e,rect:{x:e.offsetCorrectionX+this.gridOffsetX,y:e.offsetCorrectionY+this.gridOffsetY,...e.getMaxSize()}})))}ensureMainViewportExist(e){this.viewports[e]||this.resetViewports(e)}getSubViewports(e){return this.ensureMainViewportExist(e),Object.values(this.viewports[e]).filter(lt)}checkPositiveDimension(e){return e.width<0||e.height<0?"InvalidViewportSize":"Success"}checkValuesAreDifferent(e){const{height:t,width:o}=this.getSheetViewDimension();return e.gridOffsetX===this.gridOffsetX&&e.gridOffsetY===this.gridOffsetY&&e.width===o&&e.height===t?"ValuesNotChanged":"Success"}checkScrollingDirection({offsetX:e,offsetY:t}){const o=this.getMainInternalViewport(this.getters.getActiveSheetId());return!o.canScrollHorizontally&&e>0||!o.canScrollVertically&&t>0?"InvalidScrollingDirection":"Success"}checkIfViewportsWillChange({offsetX:e,offsetY:t}){const o=this.getters.getActiveSheetId(),{maxOffsetX:s,maxOffsetY:i}=this.getMaximumSheetOffset();return this.getSubViewports(o).some((o=>o.willNewOffsetScrollViewport(Ze(e,0,s),Ze(t,0,i))))?"Success":"ViewportScrollLimitsReached"}getMainViewport(e){const t=this.getMainInternalViewport(e);return{top:t.top,left:t.left,bottom:t.bottom,right:t.right}}getMainInternalViewport(e){return this.ensureMainViewportExist(e),this.viewports[e].bottomRight}cleanViewports(){const e={};for(const t of this.getters.getSheetIds())e[t]=this.viewports[t];this.viewports=e}resizeSheetView(e,t,o=0,s=0){this.sheetViewHeight=e,this.sheetViewWidth=t,this.gridOffsetX=o,this.gridOffsetY=s,this.recomputeViewports()}recomputeViewports(){for(const e of this.getters.getSheetIds())this.resetViewports(e)}setSheetViewOffset(e,t){const o=this.getters.getActiveSheetId(),{maxOffsetX:s,maxOffsetY:i}=this.getMaximumSheetOffset();this.getSubViewports(o).forEach((o=>o.setViewportOffset(Ze(e,0,s),Ze(t,0,i))))}getViewportOffset(e){return{x:this.viewports[e]?.bottomRight.offsetX||0,y:this.viewports[e]?.bottomRight.offsetY||0}}resetViewports(e){if(!this.getters.tryGetSheet(e))return;const{xSplit:t,ySplit:o}=this.getters.getPaneDivisions(e),s=this.getters.getNumberCols(e),i=this.getters.getNumberRows(e),n=Math.min(this.getters.getColRowOffset("COL",0,t,e),this.sheetViewWidth),r=Math.min(this.getters.getColRowOffset("ROW",0,o,e),this.sheetViewHeight),a=Math.max(this.sheetViewWidth-n,0),l=Math.max(this.sheetViewHeight-r,0),{xRatio:c,yRatio:h}=this.getFrozenSheetViewRatio(e),d=c<1,u=h<1,g=this.getViewportOffset(e),p={topLeft:o&&t&&new mL(this.getters,e,{left:0,right:t-1,top:0,bottom:o-1},{width:n,height:r},{canScrollHorizontally:!1,canScrollVertically:!1},{x:0,y:0})||void 0,topRight:o&&new mL(this.getters,e,{left:t,right:s-1,top:0,bottom:o-1},{width:a,height:r},{canScrollHorizontally:d,canScrollVertically:!1},{x:d?g.x:0,y:0})||void 0,bottomLeft:t&&new mL(this.getters,e,{left:0,right:t-1,top:o,bottom:i-1},{width:n,height:l},{canScrollHorizontally:!1,canScrollVertically:u},{x:0,y:u?g.y:0})||void 0,bottomRight:new mL(this.getters,e,{left:t,right:s-1,top:o,bottom:i-1},{width:a,height:l},{canScrollHorizontally:d,canScrollVertically:u},{x:d?g.x:0,y:u?g.y:0})};this.viewports[e]=p}refreshViewport(e,t){this.getSubViewports(e).forEach((e=>{e.adjustViewportZone(),e.adjustPosition(t)}))}shiftVertically(e){const t=this.getters.getActiveSheetId(),{top:o}=this.getMainInternalViewport(t),{scrollX:s}=this.getActiveSheetScrollInfo();this.setSheetViewOffset(s,e);const{anchor:i}=this.getters.getSelection();if(i.cell.row>=this.getters.getPaneDivisions(t).ySplit){const e=this.getMainInternalViewport(t).top-o;this.selection.selectCell(i.cell.col,i.cell.row+e)}}getColIndexLeftOfMainViewport(e){if(e>=0)return-1;const t=this.getters.getActiveSheetId();let o=this.getActiveMainViewport().left,s=-this.getActiveSheetScrollInfo().scrollX-this.getters.getColRowOffset("COL",o,0);for(;e<s;o--)s-=this.getters.getColSize(t,o-1);return Math.max(o,0)}getRowIndexTopOfMainViewport(e){if(e>=0)return-1;const t=this.getters.getActiveSheetId();let o=this.getActiveMainViewport().top,s=-this.getActiveSheetScrollInfo().scrollY-this.getters.getColRowOffset("ROW",o,0);for(;e<s;o--)s-=this.getters.getRowSize(t,o-1);return Math.max(o,0)}getVisibleFigures(){const e=this.getters.getActiveSheetId(),t=[],o=this.getters.getFigures(e),{scrollX:s,scrollY:i}=this.getters.getActiveSheetScrollInfo(),{x:n,y:r}=this.getMainViewportCoordinates(),{width:a,height:l}=this.getters.getSheetViewDimensionWithHeaders();for(const c of o){const o=this.getFigureUI(e,c),{x:h,y:d}=o;h>=n&&(h+c.width<s+n||h>a+s+n)||(d>=r&&(d+c.height<i+r||d>l+i+r)||t.push(o))}return t}getFigureUI(e,t){const o=t.offset.x+this.getters.getColDimensions(e,t.col).start,s=t.offset.y+this.getters.getRowDimensions(e,t.row).start;return{...t,x:o,y:s}}getPositionAnchorOffset(e){const{scrollX:t,scrollY:o}=this.getters.getActiveSheetScrollInfo(),s=e.x-t,i=e.y-o,n=s>=0?this.getColIndex(s):this.getColIndexLeftOfMainViewport(s),r=i>=0?this.getRowIndex(i):this.getRowIndexTopOfMainViewport(i),{x:a,y:l}=this.getRect(Dr({col:n,row:r}));return{col:n,row:r,offset:{x:Math.max(s-a+this.gridOffsetX,0),y:Math.max(i-l+this.gridOffsetY,0)}}}isPixelPositionVisible(e){const{scrollX:t,scrollY:o}=this.getters.getActiveSheetScrollInfo(),{x:s,y:i}=this.getters.getMainViewportCoordinates(),{width:n,height:r}=this.getters.getSheetViewDimension();return!(e.x>=s&&(e.x<s+t||e.x>n+t+s))&&!(e.y>=i&&(e.y<i+o||e.y>r+o+i))}getFrozenSheetViewRatio(e){const{xSplit:t,ySplit:o}=this.getters.getPaneDivisions(e),s=this.getters.getColDimensions(e,t).start,i=this.getters.getRowDimensions(e,o).start;return{xRatio:s/(this.sheetViewWidth+this.gridOffsetX),yRatio:i/(this.sheetViewHeight+this.gridOffsetY)}}mapViewportsToRect(e,t){let o=1/0,s=1/0,i=0,n=0,r=!1;for(const a of this.getSubViewports(e)){const e=t(a);e&&(r=!0,o=Math.min(o,e.x),s=Math.min(s,e.y),i=Math.max(i,e.x+e.width),n=Math.max(n,e.y+e.height))}return r?{x:o,y:s,width:i-o,height:n-s}:{x:0,y:0,width:0,height:0}}}).add("clipboard",class extends PV{static layers=["Clipboard"];static getters=["getClipboardTextAndImageContent","getClipboardId","getClipboardTextContent","isCutOperation"];status="invisible";originSheetId;copiedData;_isCutOperation=!1;clipboardId=(new Wa).uuidv4();fileStore;uuidGenerator;constructor(e){super(e),this.fileStore=e.external.fileStore,this.uuidGenerator=new Wa}allowDispatch(e){switch(e.type){case"CUT":const t=this.getters.getSelectedZones();return this.isCutAllowedOn(t);case"PASTE_FROM_OS_CLIPBOARD":{const t=this.convertTextToClipboardData(e.clipboardContent.text??""),o=e.pasteOption;return this.isPasteAllowed(e.target,t,{pasteOption:o,isCutOperation:!1})}case"PASTE":{if(!this.copiedData)return"EmptyClipboard";const t=e.pasteOption;return this.isPasteAllowed(e.target,this.copiedData,{pasteOption:t,isCutOperation:this._isCutOperation})}case"COPY_PASTE_CELLS_ABOVE":{const e=this.getters.getSelectedZones();if(e.length>1||0===e[0].top&&0===e[0].bottom)return"InvalidCopyPasteSelection";break}case"COPY_PASTE_CELLS_ON_LEFT":{const e=this.getters.getSelectedZones();if(e.length>1||0===e[0].left&&0===e[0].right)return"InvalidCopyPasteSelection";break}case"INSERT_CELL":{const{cut:t,paste:o}=this.getInsertCellsTargets(e.zone,e.shiftDimension),s=this.copy(t);return this.isPasteAllowed(o,s,{isCutOperation:!0})}case"DELETE_CELL":{const{cut:t,paste:o}=this.getDeleteCellsTargets(e.zone,e.shiftDimension),s=this.copy(t);return this.isPasteAllowed(o,s,{isCutOperation:!0})}}return"Success"}handle(e){switch(e.type){case"COPY":case"CUT":const t=this.getters.getSelectedZones();this.status="visible",this.originSheetId=this.getters.getActiveSheetId(),this._isCutOperation="CUT"===e.type,this.copiedData=this.copy(t);break;case"PASTE_FROM_OS_CLIPBOARD":{this._isCutOperation=!1;const t=e.clipboardContent.data;if(e.clipboardContent.imageData){const t=this.getters.getActiveSheetId(),o=this.uuidGenerator.uuidv4(),s=e.clipboardContent.imageData,i=ax(this.getters,s.size);this.dispatch("CREATE_IMAGE",{definition:s,size:i,col:e.target[0].left,row:e.target[0].top,offset:{x:0,y:0},sheetId:t,figureId:o})}this.copiedData=t||this.convertTextToClipboardData(e.clipboardContent.text??"");const o=e.pasteOption;this.paste(e.target,this.copiedData,{pasteOption:o,selectTarget:!0,isCutOperation:!1}),this.status="invisible",this.copiedData=void 0;break}case"PASTE":{const t=e.pasteOption;this.paste(e.target,this.copiedData,{pasteOption:t,selectTarget:!0,isCutOperation:this._isCutOperation}),this.status="invisible",this._isCutOperation&&(this.copiedData=void 0,this._isCutOperation=!1);break}case"COPY_PASTE_CELLS_ABOVE":{const e=this.getters.getSelectedZone(),t=e.top!==e.bottom,o={...e,bottom:t?e.top:e.top-1,top:t?e.top:e.top-1};this.originSheetId=this.getters.getActiveSheetId();const s=this.copy([o]);this.paste([e],s,{isCutOperation:!1,selectTarget:!0})}break;case"COPY_PASTE_CELLS_ON_LEFT":{const e=this.getters.getSelectedZone(),t=e.left!==e.right,o={...e,right:t?e.left:e.left-1,left:t?e.left:e.left-1};this.originSheetId=this.getters.getActiveSheetId();const s=this.copy([o]);this.paste([e],s,{isCutOperation:!1,selectTarget:!0})}break;case"CLEAN_CLIPBOARD_HIGHLIGHT":this.status="invisible";break;case"DELETE_CELL":{const{cut:t,paste:o}=this.getDeleteCellsTargets(e.zone,e.shiftDimension);if(!cr(t[0])){this.dispatch("CLEAR_CELLS",{target:[e.zone],sheetId:this.getters.getActiveSheetId()});break}const s=this.copy(t);this.paste(o,s,{isCutOperation:!0});break}case"INSERT_CELL":{const{cut:t,paste:o}=this.getInsertCellsTargets(e.zone,e.shiftDimension),s=this.copy(t);this.paste(o,s,{isCutOperation:!0});break}case"ADD_COLUMNS_ROWS":if(this.status="invisible",!this._isCutOperation||e.sheetId!==this.copiedData?.sheetId)return;this.isColRowDirtyingClipboard("before"===e.position?e.base:e.base+1,e.dimension)&&(this.copiedData=void 0);break;case"REMOVE_COLUMNS_ROWS":if(this.status="invisible",!this._isCutOperation||e.sheetId!==this.copiedData?.sheetId)return;for(const t of e.elements){if(this.isColRowDirtyingClipboard(t,e.dimension)){this.copiedData=void 0;break}}this.status="invisible";break;case"REPEAT_PASTE":this.paste(e.target,this.copiedData,{isCutOperation:!1,pasteOption:e.pasteOption,selectTarget:!0});break;case"DELETE_SHEET":if(!this._isCutOperation)return;this.originSheetId===e.sheetId&&(this.copiedData=void 0,this.status="invisible");break;default:ks(e)&&(this.status="invisible")}}convertTextToClipboardData(e){const t=this.selectClipboardHandlers({figureId:!0}).concat(this.selectClipboardHandlers({})),o={};for(const{handlerName:s,handler:i}of t){const t=i.convertTextToClipboardData(e);o[s]=t;const n=["sheetId","cells","zones","figureId"];for(const e of n)t&&e in t&&(o[e]=t[e])}return o}selectClipboardHandlers(e){const t="figureId"in e?jc.figureHandlers:jc.cellHandlers;return t.getKeys().map((e=>({handlerName:e,handler:new(t.get(e))(this.getters,this.dispatch)})))}isCutAllowedOn(e){const t=this.getClipboardData(e);for(const{handler:e}of this.selectClipboardHandlers(t)){const o=e.isCutAllowed(t);if("Success"!==o)return o}return"Success"}isPasteAllowed(e,t,o){for(const{handler:s}of this.selectClipboardHandlers(t)){const i=s.isPasteAllowed(this.getters.getActiveSheetId(),e,t,{...o});if("Success"!==i)return i}return"Success"}isColRowDirtyingClipboard(e,t){if(!this.copiedData||!this.copiedData.zones)return!1;const{zones:o}=this.copiedData;for(const s of o){if("COL"===t&&e<=s.right)return!0;if("ROW"===t&&e<=s.bottom)return!0}return!1}copy(e){const t={},o=this.getClipboardData(e);for(const{handlerName:e,handler:s}of this.selectClipboardHandlers(o)){const i=s.copy(o,this._isCutOperation);t[e]=i;const n=["sheetId","cells","zones","figureId"];for(const e of n)i&&e in i&&(t[e]=i[e])}return t}paste(e,t,o){if(!t)return;const s=this.getters.getActiveSheetId(),i=this.selectClipboardHandlers(t),{target:n,zone:r,selectedZones:a}=Ka(s,e,t,i,o);void 0!==r&&this.addMissingDimensions(s,r.right-r.left+1,r.bottom-r.top+1,r.left,r.top),Xa(i,t,n,o),o?.selectTarget&&Ja(this.selection,e,a)}addMissingDimensions(e,t,o,s,i){const n=o+i-this.getters.getNumberRows(e);n>0&&this.dispatch("ADD_COLUMNS_ROWS",{dimension:"ROW",base:this.getters.getNumberRows(e)-1,sheetId:e,sheetName:this.getters.getSheetName(e),quantity:n,position:"after"});const r=t+s-this.getters.getNumberCols(e);r>0&&this.dispatch("ADD_COLUMNS_ROWS",{dimension:"COL",base:this.getters.getNumberCols(e)-1,sheetId:e,sheetName:this.getters.getSheetName(e),quantity:r,position:"after"})}getClipboardTextContent(){return this.getPlainTextContent()}getClipboardId(){return this.clipboardId}async getClipboardTextAndImageContent(){const e=await this.getImageContent(),t=e?.type,o={[As.PlainText]:this.getPlainTextContent(),[As.Html]:await this.getHTMLContent()};return t&&e&&(o[t]=e),o}getSheetData(){const e={version:tD(),clipboardId:this.clipboardId};return this.copiedData&&"figureId"in this.copiedData?e:{...e,...this.copiedData}}getPlainTextContent(){return this.copiedData?.cells&&this.copiedData.cells.map((e=>e.map((e=>this.getters.shouldShowFormulas()&&e?.tokens?.length?e?.content||"":e.evaluatedCell?.formattedValue||"")).join("\t"))).join("\n")||"\t"}async getHTMLContent(){let e="";const t=this.copiedData?.cells;if(t)if(1===t.length&&1===t[0].length)e=`${this.getters.getCellText(t[0][0].position)}`;else{if(!t[0][0])return"";{let o='<table border="1" style="border-collapse:collapse">';for(const e of t){o+="<tr>";for(const t of e){if(!t)continue;o+=`<td style="${bh(vh(this.getters.getCellComputedStyle(t.position)))}">`+dx(this.getters.getCellText(t.position))+"</td>"}o+="</tr>"}o+="</table>",e=o}}else if(this.copiedData?.figureId){const t=this.copiedData.figureId,o=this.getters.getFigureSheetId(t);e="image"===this.getters.getFigure(o,t).tag?await this.craftImageHTML(t):"\t"}else e="\t";return`<div data-osheet-clipboard='${dx(JSON.stringify(this.getSheetData()))}'>${e}</div>`}readFileAsDataURL(e){return new Promise((t=>{const o=new FileReader;o.onload=()=>t(o.result),o.readAsDataURL(e)}))}async craftImageHTML(e){if(!this.fileStore)return"\t";const t=this.getters.getImage(e).path,o=await(this.fileStore?.getFile(t))||null;if(o){return`<img src="${dx(await this.readFileAsDataURL(o))}" />`}return"\t"}async getImageContent(){const e=this.copiedData?.figureId;if(!e)return;const t=this.getters.getFigureSheetId(e);let o;if("image"===this.getters.getFigure(t,e).tag){if(!this.fileStore)return;const t=this.getters.getImage(e).path;if(o=await(this.fileStore?.getFile(t)),"image/png"!==o.type){if(o.size>gL)return void this.ui.notifyUI({text:Vo("The file you are trying to copy is too large (>%sMB).\nIt will not be added to your OS clipboard.\nYou can download it directly instead.",Math.round(5)),sticky:!1,type:"warning"});o=await async function(e){return new Promise(((t,o)=>{const s=new Image;s.addEventListener("load",(()=>{const e=document.createElement("canvas");e.width=s.width,e.height=s.height;const o=e.getContext("2d");o?.drawImage(s,0,0),e.toBlob(t,"image/png")})),s.addEventListener("error",o),s.src=e}))}(t)}}return o?o instanceof File?o:new File([o],"image.png",{type:"image/png"}):void 0}isCutOperation(){return this._isCutOperation??!1}getDeleteCellsTargets(e,t){const o=this.getters.getActiveSheetId();let s;return s="COL"===t?{...e,left:e.right+1,right:this.getters.getNumberCols(o)-1}:{...e,top:e.bottom+1,bottom:this.getters.getNumberRows(o)-1},{cut:[s],paste:[e]}}getInsertCellsTargets(e,t){const o=this.getters.getActiveSheetId();let s,i;return"COL"===t?(s={...e,right:this.getters.getNumberCols(o)-1},i={...e,left:e.right+1,right:e.right+1}):(s={...e,bottom:this.getters.getNumberRows(o)-1},i={...e,top:e.bottom+1,bottom:this.getters.getNumberRows(o)-1}),{cut:[s],paste:[i]}}getClipboardData(e){const t=this.getters.getActiveSheetId(),o=this.getters.getSelectedFigureId();if(o)return{figureId:o,sheetId:t};const s=Za(t,e);return this._isCutOperation||(s.rowsIndexes=s.rowsIndexes.filter((e=>!this.getters.isRowFiltered(t,e)))),s}drawLayer(e){if("visible"!==this.status||!this.copiedData)return;const{sheetId:t,zones:o}=this.copiedData;if(t!==this.getters.getActiveSheetId()||!o||!o.length)return;const{ctx:s,thinLineWidth:i}=e;s.setLineDash([8,5]),s.strokeStyle=p,s.lineWidth=3.3*i;for(const e of o){const{x:t,y:o,width:i,height:n}=this.getters.getVisibleRect(e);i>0&&n>0&&s.strokeRect(t,o,i,n)}}}),SL=(new n).add("evaluation",class extends Mk{static getters=["evaluateFormula","evaluateFormulaResult","evaluateCompiledFormula","getCorrespondingFormulaCell","getRangeFormattedValues","getRangeValues","getRangeFormats","getEvaluatedCell","getEvaluatedCells","getEvaluatedCellsInZone","getEvaluatedCellsPositions","getSpreadZone","getArrayFormulaSpreadingOn","isEmpty"];shouldRebuildDependenciesGraph=!0;evaluator;positionsToUpdate=[];constructor(e){super(e),this.evaluator=new uV(e.custom,this.getters)}beforeHandle(e){(Ds.has(e.type)||Os.has(e.type))&&(this.shouldRebuildDependenciesGraph=!0)}handle(e){switch(e.type){case"UPDATE_CELL":if(!("content"in e)&&!("format"in e)||this.shouldRebuildDependenciesGraph)return;const t={sheetId:e.sheetId,row:e.row,col:e.col};this.positionsToUpdate.push(t),"content"in e&&this.evaluator.updateDependencies(t);break;case"EVALUATE_CELLS":this.evaluator.evaluateAllCells()}}finalize(){this.shouldRebuildDependenciesGraph?(this.evaluator.buildDependencyGraph(),this.evaluator.evaluateAllCells(),this.shouldRebuildDependenciesGraph=!1):this.positionsToUpdate.length&&this.evaluator.evaluateCells(this.positionsToUpdate),this.positionsToUpdate=[]}evaluateFormula(e,t){const o=this.evaluateFormulaResult(e,t);return Ws(o)?Pi(o,(e=>e.value)):o.value}evaluateFormulaResult(e,t){return this.evaluator.evaluateFormulaResult(e,t)}evaluateCompiledFormula(e,t,o){return this.evaluator.evaluateCompiledFormula(e,t,o)}getRangeFormattedValues(e){return void 0===this.getters.tryGetSheet(e.sheetId)?[]:this.mapVisiblePositions(e,(e=>this.getters.getEvaluatedCell(e).formattedValue))}getRangeValues(e){return void 0===this.getters.tryGetSheet(e.sheetId)?[]:this.mapVisiblePositions(e,(e=>this.getters.getEvaluatedCell(e).value))}getRangeFormats(e){const t=this.getters.tryGetSheet(e.sheetId);return void 0===t?[]:this.getters.getEvaluatedCellsInZone(t.id,e.zone).map((e=>e.format))}getEvaluatedCell(e){return this.evaluator.getEvaluatedCell(e)}getEvaluatedCells(e){return this.evaluator.getEvaluatedPositionsInSheet(e).map((e=>this.getEvaluatedCell(e)))}getEvaluatedCellsPositions(e){return this.evaluator.getEvaluatedPositionsInSheet(e)}getEvaluatedCellsInZone(e,t){return Er(t).map((({col:t,row:o})=>this.getters.getEvaluatedCell({sheetId:e,col:t,row:o})))}getSpreadZone(e,t={ignoreSpillError:!1}){return this.evaluator.getSpreadZone(e,t)}getArrayFormulaSpreadingOn(e){return this.evaluator.getArrayFormulaSpreadingOn(e)}isEmpty(e,t){return Er(t).map((({col:t,row:o})=>this.getEvaluatedCell({sheetId:e,col:t,row:o}))).every((e=>e.type===Ts.empty))}mapVisiblePositions(e,t){const{sheetId:o,zone:s}=e;return Er(s).reduce(((e,s)=>{const{col:i,row:n}=s;return this.getters.isColHidden(o,i)||this.getters.isRowHidden(o,n)||e.push(t({sheetId:o,...s})),e}),[])}exportForExcel(e){for(const t of e.sheets)t.cellValues={},t.formulaSpillRanges={};for(const t of this.evaluator.getEvaluatedPositions()){const o=this.evaluator.getEvaluatedCell(t),s=Oo(t.col,t.row),i=o.value;let n,r=!1,a=!0;const l=e.sheets.find((e=>e.id===t.sheetId)),c=this.getCorrespondingFormulaCell(t);if(c){const h=this.getters.getCell(t);if(a=VS(c.compiledFormula.tokens),r=a&&h?.content===c.content,!a&&""!==i){n=(i??"").toString();const t=o.format;if(t){const o=Hr(t,e.formats);l.formats[s]=o}}}const h=l.cells[s];let d;d=a&&r&&c instanceof Tk?c.contentWithFixedReferences:a?h:n,l.cells[s]=d,l.cellValues[s]="error"!==o.type?i:void 0;const u=this.getSpreadZone(t);u&&(l.formulaSpillRanges[s]=this.getters.getRangeString(this.getters.getRangeFromZone(t.sheetId,u),t.sheetId))}}getCorrespondingFormulaCell(e){const t=this.getters.getCell(e);if(t&&t.isFormula)return t.compiledFormula.isBadExpression?void 0:t;if(t&&t.content)return;const o=this.getArrayFormulaSpreadingOn(e);if(void 0===o)return;const s=this.getters.getCell(o);return s?.isFormula?s:void 0}}).add("evaluation_chart",class extends Mk{static getters=["getChartRuntime","getStyleOfSingleCellChart"];charts={};createRuntimeChart=tx(this.getters);handle(e){if(Ds.has(e.type)||Fs.has(e.type)||_s.has(e.type))for(const e in this.charts)this.charts[e]=void 0;switch(e.type){case"UPDATE_CHART":case"CREATE_CHART":case"DELETE_FIGURE":this.charts[e.figureId]=void 0;break;case"DELETE_SHEET":for(const e in this.charts)this.getters.isChartDefined(e)||(this.charts[e]=void 0)}}getChartRuntime(e){if(!this.charts[e]){const t=this.getters.getChart(e);if(!t)throw new Error(`No chart for the given id: ${e}`);this.charts[e]=this.createRuntimeChart(t)}return this.charts[e]}getStyleOfSingleCellChart(e,t){if(e)return{background:e,fontColor:eC(e)};if(!t)return{background:m,fontColor:eC(m)};const o=t.zone.left,s=t.zone.top,i=t.sheetId,n=this.getters.getCellComputedStyle({sheetId:i,col:o,row:s}),r=n.fillColor||m;return{background:r,fontColor:n.textColor||eC(r)}}exportForExcel(e){for(const t of e.sheets){t.images||(t.images=[]);const e=this.getters.getFigures(t.id),o=[];for(const s of e){if(!s||"chart"!==s.tag)continue;const e=s.id,i=this.getters.getChart(e)?.getDefinitionForExcel();if(i)o.push({...s,data:i});else{if(!this.getters.getChart(e))continue;const o=this.getters.getChartType(e),i=Hy(this.getters.getChartRuntime(e),s,o);i&&t.images.push({...s,tag:"image",data:{mimetype:"image/png",path:i,size:{width:s.width,height:s.height}}})}}t.charts=o}}}).add("evaluation_cf",class extends Mk{static getters=["getConditionalIcon","getCellConditionalFormatStyle","getConditionalDataBar"];isStale=!0;computedStyles={};computedIcons={};computedDataBars={};handle(e){(Ds.has(e.type)||Fs.has(e.type)||"UPDATE_CELL"===e.type&&("content"in e||"format"in e))&&(this.isStale=!0)}finalize(){if(this.isStale){for(const e of this.getters.getSheetIds())this.computedStyles[e]=ut((()=>this.getComputedStyles(e))),this.computedIcons[e]=ut((()=>this.getComputedIcons(e))),this.computedDataBars[e]=ut((()=>this.getComputedDataBars(e)));this.isStale=!1}}getCellConditionalFormatStyle(e){const{sheetId:t,col:o,row:s}=e,i=this.computedStyles[t]();return i&&i[o]?.[s]}getConditionalIcon({sheetId:e,col:t,row:o}){const s=this.computedIcons[e]();return s&&s[t]?.[o]}getConditionalDataBar({sheetId:e,col:t,row:o}){const s=this.computedDataBars[e]();return s&&s[t]?.[o]}getComputedStyles(e){const t={};for(const o of this.getters.getConditionalFormats(e).reverse())switch(o.rule.type){case"ColorScaleRule":for(const s of o.ranges)this.applyColorScale(e,s,o.rule,t);break;case"CellIsRule":const s=o.rule.values.map((e=>e.startsWith("=")?PS(e):void 0));for(const i of o.ranges){const n=this.getters.getRangeFromSheetXC(e,i).zone;for(let i=n.top;i<=n.bottom;i++)for(let r=n.left;r<=n.right;r++){const a={sheetId:e,col:r,row:i},l=o.rule.values.map(((t,o)=>{const a=s[o];return a?this.getters.getTranslatedCellFormula(e,r-n.left,i-n.top,a.tokens):t}));this.getRuleResultForTarget(a,{...o.rule,values:l})&&(t[r]||(t[r]=[]),t[r][i]=Object.assign(t[r]?.[i]||{},o.rule.style))}}}return t}getComputedIcons(e){const t={};for(const o of this.getters.getConditionalFormats(e).reverse())if("IconSetRule"===o.rule.type)for(const s of o.ranges)this.applyIcon(e,s,o.rule,t);return t}getComputedDataBars(e){const t={};for(const o of this.getters.getConditionalFormats(e).reverse())if("DataBarRule"===o.rule.type)for(const s of o.ranges)this.applyDataBar(e,s,o.rule,t);return t}parsePoint(e,t,o,s){const i=this.getters.getEvaluatedCellsInZone(e,this.getters.getRangeFromSheetXC(e,t).zone).filter((e=>e.type===Ts.number)).map((e=>e.value));switch(o.type){case"value":return"max"===s?Ot(i):Ft(i);case"number":return Number(o.value);case"percentage":const t=Ft(i);return t+(Ot(i)-t)*Number(o.value)/100;case"percentile":return Rs(i,Number(o.value)/100,!0);case"formula":const n=o.value&&this.getters.evaluateFormula(e,o.value);return"number"==typeof n?n:null;default:return null}}applyIcon(e,t,o,s){const i=this.parsePoint(e,t,o.lowerInflectionPoint),n=this.parsePoint(e,t,o.upperInflectionPoint);if(null===i||null===n||i>n)return;const r=this.getters.getRangeFromSheetXC(e,t).zone,a=[o.icons.upper,o.icons.middle,o.icons.lower];for(let t=r.top;t<=r.bottom;t++)for(let l=r.left;l<=r.right;l++){const r=this.getters.getEvaluatedCell({sheetId:e,col:l,row:t});if(r.type!==Ts.number)continue;const c=this.computeIcon(r.value,n,o.upperInflectionPoint.operator,i,o.lowerInflectionPoint.operator,a);s[l]||(s[l]=[]),s[l][t]=c}}computeIcon(e,t,o,s,i,n){return"ge"===o&&e>=t||"gt"===o&&e>t?n[0]:"ge"===i&&e>=s||"gt"===i&&e>s?n[1]:n[2]}applyDataBar(e,t,o,s){const i=this.getters.getRangeFromSheetXC(e,o.rangeValues||t),n=Ot(this.getters.getEvaluatedCellsInZone(e,i.zone).filter((e=>e.type===Ts.number)).map((e=>e.value)));if(n<=0)return;const r=o.color,a=this.getters.getRangeFromSheetXC(e,t).zone,l=i.zone;for(let t=a.top;t<=a.bottom;t++)for(let o=a.left;o<=a.right;o++){const i=o-a.left+l.left,c=t-a.top+l.top,h=this.getters.getEvaluatedCell({sheetId:e,col:i,row:c});!Cr(i,c,l)||h.type!==Ts.number||h.value<=0||(s[o]||(s[o]=[]),s[o][t]={color:Bt(r),percentage:100*h.value/n})}}applyColorScale(e,t,o,s){const i=this.parsePoint(e,t,o.minimum,"min"),n=o.midpoint?this.parsePoint(e,t,o.midpoint):null,r=this.parsePoint(e,t,o.maximum,"max");if(null===i||null===r||i>=r||n&&(i>=n||n>=r))return;const a=this.getters.getRangeFromSheetXC(e,t).zone,l=[{value:i,color:o.minimum.color}];o.midpoint&&n&&l.push({value:n,color:o.midpoint.color}),l.push({value:r,color:o.maximum.color});const c=vo(l);for(let t=a.top;t<=a.bottom;t++)for(let o=a.left;o<=a.right;o++){const n=this.getters.getEvaluatedCell({sheetId:e,col:o,row:t});if(n.type===Ts.number){const e=Ze(n.value,i,r);s[o]||(s[o]=[]),s[o][t]=s[o]?.[t]||{},s[o][t].fillColor=c(e)}}}getRuleResultForTarget(e,t){const o=this.getters.getEvaluatedCell(e);if(o.type===Ts.error)return!1;const{sheetId:s}=e,i=Zx.get(t.operator),n=t.values.map((e=>e.startsWith("=")?this.getters.evaluateFormula(s,e)??"":qn(e,$s)));if(n.some(Ws))return!1;const r={type:t.operator,values:n};return i.isValueValid(o.value??"",r,this.getters,s)}}).add("row_size",class extends Mk{static getters=["getRowSize","getHeaderSize","getMaxAnchorOffset"];tallestCellInRow={};ctx=document.createElement("canvas").getContext("2d");handle(e){switch(e.type){case"START":for(const e of this.getters.getSheetIds())this.initializeSheet(e);break;case"CREATE_SHEET":this.initializeSheet(e.sheetId);break;case"DUPLICATE_SHEET":{const t=ze(this.tallestCellInRow[e.sheetId]);this.history.update("tallestCellInRow",e.sheetIdTo,t);break}case"DELETE_SHEET":const t={...this.tallestCellInRow};delete t[e.sheetId],this.history.update("tallestCellInRow",t);break;case"REMOVE_COLUMNS_ROWS":{if("COL"===e.dimension)return;const t=Et(this.tallestCellInRow[e.sheetId],e.elements);this.history.update("tallestCellInRow",e.sheetId,t);break}case"ADD_COLUMNS_ROWS":{if("COL"===e.dimension)return;const t=pt(e.position,e.base),o=Array(e.quantity).fill(void 0),s=Rt(this.tallestCellInRow[e.sheetId],o,t);this.history.update("tallestCellInRow",e.sheetId,s);break}case"RESIZE_COLUMNS_ROWS":{const t=e.sheetId;if("ROW"===e.dimension)for(const o of e.elements){const e=this.getRowTallestCell(t,o);this.history.update("tallestCellInRow",t,o,e)}else for(const o of je(0,this.getters.getNumberRows(t)))for(const s of e.elements)this.updateRowSizeForCellChange(t,o,s)}break;case"UPDATE_CELL":this.updateRowSizeForCellChange(e.sheetId,e.row,e.col);break;case"ADD_MERGE":case"REMOVE_MERGE":for(const t of e.target)for(const o of Er(t))this.updateRowSizeForCellChange(e.sheetId,o.row,o.col)}}getRowSize(e,t){return Math.round(this.getters.getUserRowSize(e,t)??this.tallestCellInRow[e][t]?.size??ie)}getMaxAnchorOffset(e,t,o){let{numberOfRows:s,numberOfCols:i}=this.getters.getSheetSize(e),n=0;for(;n<t&&s>0;s--)n+=this.getRowSize(e,s-1);let r=0;for(;r<o&&i>0;i--)r+=this.getters.getColSize(e,i-1);return{col:i,row:s,offset:{x:r-o,y:n-t}}}getHeaderSize(e,t,o){return this.getters.isHeaderHidden(e,t,o)?0:"ROW"===t?this.getRowSize(e,o):this.getters.getColSize(e,o)}updateRowSizeForCellChange(e,t,o){const s=this.tallestCellInRow[e]?.[t];if(s?.cell.col===o){const o=this.getRowTallestCell(e,t);this.history.update("tallestCellInRow",e,t,o)}const i=this.getCellHeight({sheetId:e,col:o,row:t});if(!(i<=ie)&&(!s&&i>ie||s&&i>s.size)){const s={cell:{sheetId:e,col:o,row:t},size:i};this.history.update("tallestCellInRow",e,t,s)}}initializeSheet(e){const t=[];for(let o=0;o<this.getters.getNumberRows(e);o++){const s=this.getRowTallestCell(e,o);t.push(s)}this.history.update("tallestCellInRow",e,t)}getCellHeight(e){if(this.isInMultiRowMerge(e))return ie;const t=this.getters.getCell(e),o=this.getters.getColSize(e.sheetId,e.col);return function(e,t,o){return t&&(t.isFormula||t.content)?Aa(e,t.isFormula?"":t.content,t.style,o):ie}(this.ctx,t,o)}isInMultiRowMerge(e){const t=this.getters.getMerge(e);return!!t&&t.bottom!==t.top}getRowTallestCell(e,t){if(void 0!==this.getters.getUserRowSize(e,t))return;const o=this.getters.getRowCells(e,t);let s,i=0;for(let e=0;e<o.length;e++){const t=this.getters.getCellById(o[e]);if(!t)continue;const n=this.getters.getCellPosition(t.id),r=this.getCellHeight(n);r>i&&r>ie&&(i=r,s={cell:n,size:r})}return s&&s.size>ie?s:void 0}}).add("data_validation_ui",class extends Mk{static getters=["getDataValidationInvalidCriterionValueMessage","getInvalidDataValidationMessage","getValidationResultForCellValue","getDataValidationRangeValues","isCellValidCheckbox","getDataValidationCellStyle","getDataValidationChipStyle","isDataValidationInvalid"];validationResults={};handle(e){if(Ds.has(e.type)||"EVALUATE_CELLS"===e.type||"UPDATE_CELL"===e.type&&("content"in e||"format"in e))this.validationResults={};else switch(e.type){case"ADD_DATA_VALIDATION_RULE":case"REMOVE_DATA_VALIDATION_RULE":delete this.validationResults[e.sheetId]}}isDataValidationInvalid(e){return!this.getValidationResultForCell(e).isValid}getDataValidationCellStyle(e){if(!this.hasChip(e))return this.getDataValidationStyle(e)}getDataValidationChipStyle(e){if(this.hasChip(e))return this.getDataValidationStyle(e)??{fillColor:F}}getInvalidDataValidationMessage(e){const t=this.getValidationResultForCell(e);return t.isValid?void 0:t.error}getDataValidationInvalidCriterionValueMessage(e,t){const o=Zx.get(e);return t.startsWith("=")?"onlyLiterals"===o.allowedValues?Vo("The value must not be a formula"):this.isValidFormula(t)?void 0:jy.CriterionError.validFormula:"onlyFormulas"===o.allowedValues?Vo("The value must be a formula"):o.isCriterionValueValid(t)?void 0:o.criterionValueErrorString}getDataValidationRangeValues(e,t){const o=this.getters.getRangeFromSheetXC(e,String(t.values[0]));return this.getters.getRangeValues(o).map((e=>e?.toString())).filter(lt)}isCellValidCheckbox(e){if(!this.getters.isMainCellPosition(e))return!1;const t=this.getters.getValidationRuleForCell(e);return!(!t||"isBoolean"!==t.criterion.type)&&this.getValidationResultForCell(e).isValid}getValidationResultForCellValue(e,t){const o=this.getters.getValidationRuleForCell(t);if(!o)return vV;const s=this.getRuleErrorForCellValue(e,t,o);return s?{error:s,rule:o,isValid:!1}:vV}hasChip(e){const t=this.getters.getValidationRuleForCell(e);return("isValueInList"===t?.criterion.type||"isValueInRange"===t?.criterion.type)&&"chip"===t.criterion.displayStyle}getDataValidationStyle(e){const t=this.getters.getValidationRuleForCell(e);if(!t||this.isDataValidationInvalid(e))return;const o=this.getters.getEvaluatedCell(e),s=this.getValueColor(t,o.value);if(!s)return;return{fillColor:s,textColor:so(s)}}getValueColor(e,t){if("isValueInList"===e.criterion.type||"isValueInRange"===e.criterion.type)for(const o in e.criterion.colors)if(o.toLowerCase()===String(t).toLowerCase())return e.criterion.colors[o]}isValidFormula(e){return!PS(e).isBadExpression}getValidationResultForCell(e){const{col:t,row:o,sheetId:s}=e;return this.validationResults[s]||(this.validationResults[s]=this.computeSheetValidationResults(s)),this.validationResults[s][t]?.[o]?.()||vV}computeSheetValidationResults(e){const t={},o=this.getters.getDataValidationRules(e).map((e=>e.ranges));for(const e of va(o.flat())){const{col:o,row:s}=e;t[o]||(t[o]=[]),t[o][s]=ut((()=>{const t=this.getters.getEvaluatedCell(e);return t.type===Ts.empty?vV:this.getValidationResultForCellValue(t.value,e)}))}return t}getRuleErrorForCellValue(e,t,o){const{sheetId:s}=t,i=o.criterion,n=Zx.get(i.type),r=this.getCellOffsetInRule(t,o),a=this.getEvaluatedCriterionValues(s,r,i);if(a.some(Ws))return;const l={...i,values:a};return n.isValueValid(e,l,this.getters,s)?void 0:n.getErrorString(l,this.getters,s)}getCellOffsetInRule(e,t){const o=t.ranges.find((t=>Cr(e.col,e.row,t.zone)));if(!o)throw new Error("The cell is not in any range of the rule");return{col:e.col-o.zone.left,row:e.row-o.zone.top}}getEvaluatedCriterionValues(e,t,o){return o.values.map((o=>{if(!o.startsWith("="))return qn(o,$s);const s=PS(o),i=this.getters.getTranslatedCellFormula(e,t.col,t.row,s.tokens);return this.getters.evaluateFormula(e,i)}))}}).add("dynamic_tables",class extends Mk{static getters=["canCreateDynamicTableOnZones","doesZonesContainFilter","getFilter","getFilters","getTable","getTables","getTablesOverlappingZones","getFilterId","getFilterHeaders","isFilterHeader"];tables={};handle(e){if(Ds.has(e.type)||"UPDATE_CELL"===e.type&&("content"in e||"format"in e)||"EVALUATE_CELLS"===e.type)this.tables={};else switch(e.type){case"CREATE_TABLE":case"REMOVE_TABLE":case"UPDATE_TABLE":case"DELETE_CONTENT":this.tables={}}}finalize(){for(const e of this.getters.getSheetIds())this.tables[e]||(this.tables[e]=this.computeTables(e))}computeTables(e){const t=[],o=this.getters.getCoreTables(e);for(const e of o)"dynamic"!==e.type&&t.push(e);const s=[...t];for(const i of o){if("dynamic"!==i.type)continue;const o=this.coreTableToTable(e,i);let n=o.range.zone;for(const e of s)Sr(n,e.range.zone)&&(n={...n,right:e.range.zone.left-1});t.push({...o,range:this.getters.getRangeFromZone(e,n)})}return t}getFilters(e){return this.getTables(e).filter((e=>e.config.hasFilters)).map((e=>e.filters)).flat()}getTables(e){return this.tables[e]||[]}getFilter(e){const t=this.getTable(e);if(t&&t.config.hasFilters)return t.filters.find((t=>t.col===e.col))}getFilterId(e){return this.getFilter(e)?.id}getTable({sheetId:e,col:t,row:o}){return this.getTables(e).find((e=>Cr(t,o,e.range.zone)))}getTablesOverlappingZones(e,t){return this.getTables(e).filter((e=>t.some((t=>Sr(e.range.zone,t)))))}doesZonesContainFilter(e,t){return this.getTablesOverlappingZones(e,t).some((e=>e.config.hasFilters))}getFilterHeaders(e){const t=[];for(const o of this.getTables(e)){if(!o.config.hasFilters)continue;const s=o.range.zone,i=s.top;for(let o=s.left;o<=s.right;o++)t.push({sheetId:e,col:o,row:i})}return t}isFilterHeader({sheetId:e,col:t,row:o}){return this.getFilterHeaders(e).some((e=>e.col===t&&e.row===o))}canCreateDynamicTableOnZones(e,t){if(!Nr(t))return!1;const o=fr(...t),s={col:o.left,row:o.top,sheetId:e},i=this.getters.getArrayFormulaSpreadingOn(s);if(!i)return!1;if(mt(i,s)&&1===Pr(o))return!0;return mt(o,this.getters.getSpreadZone(i))}coreTableToTable(e,t){if("dynamic"!==t.type)return t;const o=t.range.zone,s={sheetId:e,col:o.left,row:o.top},i=this.getters.getSpreadZone(s)??t.range.zone,n=this.getters.getRangeFromZone(e,i),r=this.getDynamicTableFilters(e,t,i);return{id:t.id,range:n,filters:r,config:t.config}}getDynamicTableFilters(e,t,o){const s=[],{top:i,bottom:n,left:r,right:a}=o;for(let o=r;o<=a;o++){const a=o-r,l={left:o,right:o,top:i,bottom:n},c=d_(this.getDynamicTableFilterId(t.id,a),this.getters.getRangeFromZone(e,l),t.config,this.getters.getRangeFromZone);s.push(c)}return s}getDynamicTableFilterId(e,t){return e+"_"+t}exportForExcel(e){for(const t of e.sheets)for(const e of t.tables){const o=ar(e.range),s={sheetId:t.id,col:o.left,row:o.top},i=this.getters.getCoreTable(s),n=this.getTable(s);"dynamic"===i?.type&&n&&(e.range=dr(n.range.zone))}}}).add("custom_colors",class extends Mk{customColors={};shouldUpdateColors=!0;static getters=["getCustomColors"];constructor(e){super(e),this.tryToAddColors(e.customColors??[])}handle(e){switch(e.type){case"START":for(const e of this.getters.getSheetIds())for(const t of this.getters.getChartIds(e))this.tryToAddColors(this.getChartColors(t));break;case"UPDATE_CHART":case"CREATE_CHART":this.tryToAddColors(this.getChartColors(e.figureId));break;case"UPDATE_CELL":case"ADD_CONDITIONAL_FORMAT":case"SET_BORDER":case"SET_ZONE_BORDERS":case"SET_FORMATTING":case"CREATE_TABLE":case"UPDATE_TABLE":this.history.update("shouldUpdateColors",!0)}}finalize(){this.shouldUpdateColors&&(this.history.update("shouldUpdateColors",!1),this.tryToAddColors(this.computeCustomColors()))}getCustomColors(){return function(e){const t=[{leadColor:qt(255,0,0),colors:[]},{leadColor:qt(255,128,0),colors:[]},{leadColor:qt(128,128,0),colors:[]},{leadColor:qt(128,255,0),colors:[]},{leadColor:qt(0,255,0),colors:[]},{leadColor:qt(0,255,128),colors:[]},{leadColor:qt(0,255,255),colors:[]},{leadColor:qt(0,127,255),colors:[]},{leadColor:qt(0,0,255),colors:[]},{leadColor:qt(127,0,255),colors:[]},{leadColor:qt(128,0,128),colors:[]},{leadColor:qt(255,0,128),colors:[]}];for(const o of e.map(Yt)){let e=500,s=0;t.forEach(((t,i)=>{const n=(r=o,a=t.leadColor,Math.sqrt(Math.pow(r.r-a.r,2)+Math.pow(r.g-a.g,2)+Math.pow(r.b-a.b,2)));var r,a;e>n&&(e=n,s=i)})),t[s].colors.push(o)}return t.map((e=>e.colors.sort(((e,t)=>Kt(e).s-Kt(t).s)))).flat().map(jt)}(Object.keys(this.customColors))}computeCustomColors(){let e=[];for(const t of this.getters.getSheetIds())e=e.concat(this.getColorsFromCells(t),this.getFormattingColors(t),this.getTableColors(t));return[...new Set([...e])]}getColorsFromCells(e){const t=Object.values(this.getters.getCells(e)),o=new Set;for(const e of t)e.style?.textColor&&o.add(e.style.textColor),e.style?.fillColor&&o.add(e.style.fillColor);for(const t of this.getters.getBordersColors(e))o.add(t);return[...o]}getFormattingColors(e){const t=this.getters.getConditionalFormats(e),o=[];for(const e of t){const t=e.rule;"CellIsRule"===t.type?(o.push(t.style.textColor),o.push(t.style.fillColor)):"ColorScaleRule"===t.type&&(o.push(Bt(t.minimum.color)),o.push(t.midpoint?Bt(t.midpoint.color):void 0),o.push(Bt(t.maximum.color)))}return o.filter(lt)}getChartColors(e){const t=this.getters.getChart(e);if(void 0===t)return[];return[...JSON.stringify(t.getDefinition()).matchAll(fV)].map((e=>e[1]))}getTableColors(e){return this.getters.getTables(e).flatMap((e=>{const t=e.config,o=this.getters.getTableStyle(t.styleId);return[this.getTableStyleElementColors(o.wholeTable),t.numberOfHeaders>0?this.getTableStyleElementColors(o.headerRow):[],t.totalRow?this.getTableStyleElementColors(o.totalRow):[],t.bandedColumns?this.getTableStyleElementColors(o.firstColumnStripe):[],t.bandedColumns?this.getTableStyleElementColors(o.secondColumnStripe):[],t.bandedRows?this.getTableStyleElementColors(o.firstRowStripe):[],t.bandedRows?this.getTableStyleElementColors(o.secondRowStripe):[],t.firstColumn?this.getTableStyleElementColors(o.firstColumn):[],t.lastColumn?this.getTableStyleElementColors(o.lastColumn):[]].flat()}))}getTableStyleElementColors(e){return e?[e.style?.fillColor,e.style?.textColor,e.border?.bottom?.color,e.border?.top?.color,e.border?.left?.color,e.border?.right?.color,e.border?.horizontal?.color,e.border?.vertical?.color].filter(lt):[]}tryToAddColors(e){for(const t of e){if(!Gt(t))continue;const e=$t(t);t&&!ee.includes(e)&&this.history.update("customColors",e,!0)}}}).add("pivot_ui",class extends Mk{static getters=["getPivot","getFirstPivotFunction","getPivotIdFromPosition","getPivotCellFromPosition","generateNewCalculatedMeasureName","isPivotUnused","isSpillPivotFormula"];pivots={};unusedPivots;custom;constructor(e){super(e),this.custom=e.custom}beforeHandle(e){if("START"===e.type)for(const e of this.getters.getPivotIds())this.setupPivot(e)}handle(e){if(Ds.has(e.type))for(const e of this.getters.getPivotIds())YN.get(this.getters.getPivotCoreDefinition(e).type).externalData||this.setupPivot(e,{recreate:!0});switch(e.type){case"REFRESH_PIVOT":this.refreshPivot(e.id);break;case"ADD_PIVOT":this.setupPivot(e.pivotId);break;case"DUPLICATE_PIVOT":this.setupPivot(e.newPivotId);break;case"UPDATE_PIVOT":this.setupPivot(e.pivotId,{recreate:!0});break;case"DELETE_SHEET":case"UPDATE_CELL":this.unusedPivots=void 0;break;case"UNDO":case"REDO":{this.unusedPivots=void 0;const t=e.commands.filter(IV);for(const e of t){const t=e.pivotId;this.getters.isExistingPivot(t)&&this.setupPivot(t,{recreate:!0})}break}case"UPDATE_LOCALE":!function(){for(const e in ZN)ZN[e].set.clear(),ZN[e].values={}}()}}getPivotIdFromPosition(e){const t=this.getters.getCorrespondingFormulaCell(e);if(t&&t.isFormula){const o=this.getFirstPivotFunction(e.sheetId,t.compiledFormula.tokens);if(o){const e=o.args[0]?.toString();return e&&this.getters.getPivotId(e)}}}isSpillPivotFormula(e){const t=this.getters.getCorrespondingFormulaCell(e);if(t&&t.isFormula){const o=this.getFirstPivotFunction(e.sheetId,t.compiledFormula.tokens);return"PIVOT"===o?.functionName}return!1}getFirstPivotFunction(e,t){const o=FN(t);if(!o)return;const{functionName:s,args:i}=o;return{functionName:s,args:i.map((t=>{if("EMPTY"===t.type)return;if("STRING"===t.type||"BOOLEAN"===t.type||"NUMBER"===t.type)return t.value;const o=av(t);return this.getters.evaluateFormula(e,o)}))}}getPivotCellFromPosition(e){const t=this.getters.getCorrespondingFormulaCell(e);if(!t||!t.isFormula||0===PN(t.compiledFormula.tokens))return LN;const o=this.getters.getCellPosition(t.id),s=this.getters.getFirstPivotFunction(e.sheetId,t.compiledFormula.tokens);if(!s)return LN;const{functionName:i,args:n}=s,r=n[0];if(!r)return LN;const a=this.getters.getPivotId(r.toString());if(!a)return LN;const l=this.getPivot(a);if(!l.isValid())return LN;if("PIVOT"===i&&!t.content.replaceAll(" ","").toUpperCase().startsWith("=PIVOT"))return LN;if("PIVOT"===i){const t=jl(n[2]),s=void 0===t||wi(t),i=jl(n[3]),r=jl(n[5]),a=void 0===r||wi(r),c={displayColumnHeaders:void 0===i||wi(i),displayTotals:s,displayMeasuresRow:a},h=l.getCollapsedTableStructure().getPivotCells(c),d=e.col-o.col,u=e.row-o.row;return h[d][u]}try{if("PIVOT.HEADER"===i&&"measure"===n.at(-2)){return{type:"MEASURE_HEADER",domain:l.parseArgsToPivotDomain(n.slice(1,-2).map((e=>({value:e})))),measure:n.at(-1)?.toString()||""}}if("PIVOT.HEADER"===i){const e=l.parseArgsToPivotDomain(n.slice(1).map((e=>({value:e}))));return{type:"HEADER",domain:e,dimension:RO(l,e).colDomain.length?"COL":"ROW"}}const[e,...t]=n.slice(1);return{type:"VALUE",domain:l.parseArgsToPivotDomain(t.map((e=>({value:e})))),measure:e?.toString()||""}}catch(e){return LN}}generateNewCalculatedMeasureName(e){const t=e.map((e=>e.fieldName));return kt(Vo("Calculated measure 1"),t,{compute:(e,t)=>Vo("Calculated measure %s",t)})}getPivot(e){if(!this.getters.isExistingPivot(e))throw new Error(`pivot ${e} not found`);return this.pivots[e]}isPivotUnused(e){return this._getUnusedPivots().includes(e)}refreshPivot(e){this.getters.getPivot(e).init({reload:!0})}setupPivot(e,{recreate:t}={recreate:!1}){const o=this.getters.getPivotCoreDefinition(e);if(e in this.pivots)t&&this.pivots[e].onDefinitionChange(o);else{const t=yV(YN.get(o.type).ui);this.pivots[e]=new t(this.custom,{definition:o,getters:this.getters})}}_getUnusedPivots(){if(void 0!==this.unusedPivots)return this.unusedPivots;const e=new Set(this.getters.getPivotIds());for(const t of this.getters.getSheetIds())for(const o in this.getters.getCells(t)){const t=this.getters.getCellPosition(o),s=this.getPivotIdFromPosition(t);if(s&&(e.delete(s),!e.size))return this.unusedPivots=[],[]}return this.unusedPivots=[...e],this.unusedPivots}}).add("cell_icon",class extends Mk{static getters=["doesCellHaveGridIcon","getCellIcons","getCellIconRect"];cellIconsCache={};handle(e){"SET_VIEWPORT_OFFSET"!==e.type&&(this.cellIconsCache={})}getCellIcons(e){return this.cellIconsCache[e.sheetId]||(this.cellIconsCache[e.sheetId]={}),this.cellIconsCache[e.sheetId][e.col]||(this.cellIconsCache[e.sheetId][e.col]={}),this.cellIconsCache[e.sheetId][e.col][e.row]||(this.cellIconsCache[e.sheetId][e.col][e.row]=this.computeCellIcons(e)),this.cellIconsCache[e.sheetId][e.col][e.row]}getCellIconRect(e,t){const o=e.position,s=this.getters.getCell(o);return{x:this.getIconHorizontalPosition(t,e.horizontalAlign,e),y:this.getters.computeTextYCoordinate(t,e.size,s?.style?.verticalAlign),width:e.size,height:e.size}}getIconHorizontalPosition(e,t,o){const s=e.x,i=e.x+e.width;switch(t){case"right":return i-o.margin-o.size;case"left":return s+o.margin;default:const e=Math.floor((i-s-o.size)/2);return i-o.size-e}}computeCellIcons(e){const t={left:void 0,right:void 0,center:void 0},o=bV.getAll();for(const s of o){const o=s(this.getters,e);o&&(!t[o.horizontalAlign]||o.priority>t[o.horizontalAlign].priority)&&(t[o.horizontalAlign]=o)}if(t.center&&(t.left||t.right)){const e=Math.max(t.left?.priority||0,t.right?.priority||0);t.center.priority<e?t.center=void 0:(t.left=void 0,t.right=void 0)}return Object.values(t).filter(lt)}doesCellHaveGridIcon(e){return Boolean(this.getCellIcons(e).length)}});lE.add("dataValidation",{displayAllOnInitialContent:!0,getProposals(e,t){if(Vt(t))return[];if(!this.composer.currentEditedCell)return[];const o=this.composer.currentEditedCell,s=this.getters.getValidationRuleForCell(o);if(!s||"isValueInList"!==s.criterion.type&&"isValueInRange"!==s.criterion.type)return[];const i=this.composer.currentEditedCell.sheetId,n="isValueInRange"===s.criterion.type?Array.from(new Set(this.getters.getDataValidationRangeValues(i,s.criterion))):s.criterion.values;if(!("chip"===s.criterion.displayStyle))return n.map((e=>({text:e})));const r=s.criterion.colors;return n.map((e=>{const t=r?.[e];return{text:e,htmlContent:[{value:e,color:t?so(t):void 0,backgroundColor:t||F,classes:["badge rounded-pill fs-6 fw-normal w-100 mt-1 text-start"]}]}}))},selectProposal(e,t){this.composer.setCurrentContent(t),this.composer.stopEdition()}}),lE.add("functions",{sequence:100,autoSelectFirstProposal:!0,maxDisplayedProposals:10,getProposals(e){if("SYMBOL"!==e.type)return[];const t=e.value;if(!Vt(this.composer.currentContent))return[];const o=Object.entries(CS.content).filter((([e,{hidden:t}])=>!t)).map((([e,{description:o}])=>({text:e,description:o,htmlContent:fN(t,e,E,"o-semi-bold")}))).sort(((e,t)=>e.text.length-t.text.length||e.text.localeCompare(t.text)));return o},selectProposal(e,t){let o=e.end,s=e.end;["SYMBOL","FUNCTION"].includes(e.type)&&(o=e.start);const i=this.composer.currentTokens;t+="(";const n=i.map((e=>e.start)).indexOf(e.start);if(n+1<i.length){const e=i[n+1];"LEFT_PAREN"===e?.type&&s++}this.composer.changeComposerCursorSelection(o,s),this.composer.replaceComposerCursorSelection(t)}}),lE.add("pivot_ids",{sequence:50,autoSelectFirstProposal:!0,getProposals(e){const t=e.functionContext;if(!t||!["PIVOT.VALUE","PIVOT.HEADER","PIVOT"].includes(t.parent.toUpperCase())||0!==t.argPosition)return;const o=this.getters.getPivotIds();return o.includes(e.value)?void 0:o.map((e=>{const t=this.getters.getPivotCoreDefinition(e),o=`${this.getters.getPivotFormulaId(e)}`;return{text:o,description:t.name,htmlContent:[{value:o,color:mE.NUMBER}],fuzzySearchKey:o+t.name,alwaysExpanded:!0}})).filter(lt)},selectProposal:_N}),lE.add("pivot_measures",{sequence:50,autoSelectFirstProposal:!0,getProposals(e){const t=e.functionContext;if("PIVOT.VALUE"!==t?.parent.toUpperCase()||1!==t.argPosition)return[];const o=ON(e),s=this.getters.getPivotId(o);if(!s||!this.getters.isExistingPivot(s))return[];const i=this.getters.getPivot(s);return i.init(),i.isValid()?i.definition.measures.map((e=>{if("__count"===e.fieldName){const e='"__count"';return{text:e,description:Vo("Count"),htmlContent:[{value:e,color:mE.STRING}],fuzzySearchKey:Vo("Count")+e}}return function(e){const t=`"${e.id}"`,o=e.displayName+e.fieldName+t;return{text:t,description:e.displayName,htmlContent:[{value:t,color:mE.STRING}],fuzzySearchKey:o}}(e)})).filter(lt):[]},selectProposal:DN}),lE.add("pivot_group_fields",{sequence:50,autoSelectFirstProposal:!0,getProposals(e){const t=e.functionContext;if(!t||!function(e){const t=e.functionContext;return"PIVOT.VALUE"===t?.parent.toUpperCase()&&t.argPosition>=2&&t.argPosition%2==0}(e)&&!function(e){const t=e.functionContext;return"PIVOT.HEADER"===t?.parent.toUpperCase()&&t.argPosition>=1&&t.argPosition%2==1}(e))return;const o=ON(e),s=this.getters.getPivotId(o);if(!s||!this.getters.isExistingPivot(s))return;const i=this.getters.getPivot(s);i.init();const n=i.getFields(),{columns:r,rows:a}=i.definition;let l=t.args;"PIVOT.VALUE"===t?.parent.toUpperCase()?(l=l.filter(((e,t)=>t%2==0)),l=l.slice(1,t.argPosition)):l=l.filter(((e,t)=>t%2==1));const c=l.map((e=>e?.value)).filter(lt),h=r.map((e=>e.nameWithGranularity)),d=a.map((e=>e.nameWithGranularity)),u=[];let g=["ARG_SEPARATOR","SPACE"].includes(e.type)?c.at(-1):c.at(-2);const p=wk.get(i.type);if(p&&g?.startsWith("#")&&(g=g.slice(1)),void 0===g&&(u.push(h[0]),u.push(d[0])),d.includes(g)){const e=d[d.indexOf(g)+1];u.push(e),u.push(h[0])}if(h.includes(g)){const e=h[h.indexOf(g)+1];u.push(e)}const m=u.filter(lt);return m.map((e=>{const[t,o]=e.split(":"),s=n[t];return s?AN(s,o):void 0})).concat(m.map((e=>{if(!p)return;const t=e.split(":")[0],o=n[t];if(!o)return;const s=`"#${e}"`;return{text:s,description:Vo("%s (positional)",o.string)+(o.help?` (${o.help})`:""),htmlContent:[{value:s,color:mE.STRING}],fuzzySearchKey:o.string+s}}))).filter(lt)},selectProposal:DN}),lE.add("pivot_group_values",{sequence:50,autoSelectFirstProposal:!0,getProposals(e){const t=e.functionContext;if(!t||!e||!function(e){const t=e.functionContext;return"PIVOT.VALUE"===t?.parent.toUpperCase()&&t.argPosition>=2&&t.argPosition%2==1}(e)&&!function(e){const t=e.functionContext;return"PIVOT.HEADER"===t?.parent.toUpperCase()&&t.argPosition>=1&&t.argPosition%2==0}(e))return;const o=ON(e),s=this.getters.getPivotId(o);if(!s||!this.getters.isExistingPivot(s))return;const i=this.getters.getPivot(s);if(!i.isValid())return;const n=t.argPosition,r=e.functionContext?.args[n-1]?.value;if(!r)return;let a;try{a=i.definition.getDimension(r)}catch(e){return}return"month_number"===a.granularity?Object.values(fn).map(((e,t)=>({text:`${t+1}`,fuzzySearchKey:e.toString(),description:e.toString(),htmlContent:[{value:`${t+1}`,color:mE.NUMBER}]}))):"quarter_number"===a.granularity?[1,2,3,4].map((e=>({text:`${e}`,fuzzySearchKey:`${e}`,description:Vo("Quarter %s",e),htmlContent:[{value:`${e}`,color:mE.NUMBER}]}))):"day_of_month"===a.granularity?je(1,32).map((e=>({text:`${e}`,fuzzySearchKey:`${e}`,description:"",htmlContent:[{value:`${e}`,color:mE.NUMBER}]}))):"iso_week_number"===a.granularity?je(0,54).map((e=>({text:`${e}`,fuzzySearchKey:`${e}`,description:"",htmlContent:[{value:`${e}`,color:mE.NUMBER}]}))):"day_of_week"===a.granularity?je(1,8).map((e=>({text:`${e}`,fuzzySearchKey:`${e}`,description:"",htmlContent:[{value:`${e}`,color:mE.NUMBER}]}))):"hour_number"===a.granularity?je(0,24).map((e=>({text:`${e}`,fuzzySearchKey:`${e}`,description:"",htmlContent:[{value:`${e}`,color:mE.NUMBER}]}))):"minute_number"===a.granularity?je(0,60).map((e=>({text:`${e}`,fuzzySearchKey:`${e}`,description:"",htmlContent:[{value:`${e}`,color:mE.NUMBER}]}))):"second_number"===a.granularity?je(0,60).map((e=>({text:`${e}`,fuzzySearchKey:`${e}`,description:"",htmlContent:[{value:`${e}`,color:mE.NUMBER}]}))):i.getPossibleFieldValues(a).map((({value:e,label:t})=>{const o="string"==typeof e,s=o?`"${e}"`:e.toString(),i=t===e?"":t;return{text:s,description:i,htmlContent:[{value:s,color:o?mE.STRING:mE.NUMBER}],fuzzySearchKey:s+i}}))},selectProposal:DN}),lE.add("sheet_names",{sequence:150,autoSelectFirstProposal:!0,getProposals(e){return"SYMBOL"===e.type||"UNKNOWN"===e.type&&e.value.startsWith("'")?this.getters.getSheetIds().map((e=>{const t=We(this.getters.getSheetName(e));return{text:t,fuzzySearchKey:t.startsWith("'")?t:"'"+t}})):[]},selectProposal(e,t){const o=e.start,s=e.end;this.composer.changeComposerCursorSelection(o,s),this.composer.replaceComposerCursorSelection(t+"!")}});const CL=new n;CL.add("link",{condition:(e,t)=>!!t.getEvaluatedCell(e).link,execute:(e,t,o)=>Wo(t.model.getters.getEvaluatedCell(e).link,t,o),title:(e,t)=>{const o=t.getEvaluatedCell(e).link;return o?o.isExternal?Vo("Go to url: %(url)s",{url:o.url}):Vo("Go to %(label)s",{label:o.label}):""},sequence:5});const yL=(new n).add("ADD_COLUMNS_ROWS",(function(e){const t=[];let o=e.base;"after"===e.position&&o++;for(let s=0;s<e.quantity;s++)t.push(s+o);return[{type:"REMOVE_COLUMNS_ROWS",dimension:e.dimension,elements:t,sheetId:e.sheetId,sheetName:e.sheetName}]})).add("REMOVE_COLUMNS_ROWS",(function(e){const t=[],o=[...e.elements].sort(((e,t)=>e-t));for(const s of Ye(o)){const o=0===s[0]?0:s[0]-1,i=0===s[0]?"before":"after";t.push({type:"ADD_COLUMNS_ROWS",dimension:e.dimension,quantity:s.length,base:o,sheetId:e.sheetId,sheetName:e.sheetName,position:i})}return t})).add("ADD_MERGE",(function(e){return[{type:"REMOVE_MERGE",sheetId:e.sheetId,target:e.target}]})).add("REMOVE_MERGE",(function(e){return[{type:"ADD_MERGE",sheetId:e.sheetId,target:e.target}]})).add("CREATE_SHEET",(function(e){return[{type:"DELETE_SHEET",sheetId:e.sheetId,sheetName:e.name}]})).add("DELETE_SHEET",(function(e){return[{type:"CREATE_SHEET",sheetId:e.sheetId,position:1,name:e.sheetName}]})).add("DUPLICATE_SHEET",(function(e){return[{type:"DELETE_SHEET",sheetId:e.sheetIdTo,sheetName:""}]})).add("CREATE_FIGURE",(function(e){return[{type:"DELETE_FIGURE",figureId:e.figureId,sheetId:e.sheetId}]})).add("CREATE_CHART",(function(e){return[{type:"DELETE_FIGURE",figureId:e.figureId,sheetId:e.sheetId}]})).add("HIDE_COLUMNS_ROWS",(function(e){return[{type:"UNHIDE_COLUMNS_ROWS",sheetId:e.sheetId,dimension:e.dimension,elements:e.elements}]})).add("UNHIDE_COLUMNS_ROWS",(function(e){return[{type:"HIDE_COLUMNS_ROWS",sheetId:e.sheetId,dimension:e.dimension,elements:e.elements}]})).add("CREATE_TABLE_STYLE",(function(e){return[{type:"REMOVE_TABLE_STYLE",tableStyleId:e.tableStyleId}]})).add("ADD_PIVOT",(function(e){return[{type:"REMOVE_PIVOT",pivotId:e.pivotId}]}));for(const e of Ns.values())yL.contains(e)||yL.add(e,wL);function wL(e){return[e]}const IL=new n;IL.add("format_number_automatic",{...nF,id:"format_number_automatic",sequence:10}).add("format_number_plain_text",{...rF,id:"format_number_plain_text",sequence:15,separator:!0}).add("format_number_number",{...aF,id:"format_number_number",sequence:20}).add("format_number_percent",{...cF,id:"format_number_percent",sequence:30,separator:!0}).add("format_number_currency",{...hF,id:"format_number_currency",sequence:40}).add("format_number_accounting",{...uF,id:"format_number_accounting",sequence:45}).add("format_number_currency_rounded",{...dF,id:"format_number_currency_rounded",sequence:50}).add("format_custom_currency",{...pF,id:"format_custom_currency",sequence:60,separator:!0}).add("format_number_date",{...mF,id:"format_number_date",sequence:70}).add("format_number_time",{...fF,id:"format_number_time",sequence:80}).add("format_number_date_time",{...vF,id:"format_number_date_time",sequence:90}).add("format_number_duration",{...bF,id:"format_number_duration",sequence:100,separator:!0}).add("more_formats",{...yF,id:"more_formats",sequence:120});const xL=xt((e=>Rn(e)?"date":e.includes("[$")?"currency":"number")),EL={name:Vo("More formats"),icon:"o-spreadsheet-Icon.NUMBER_FORMATS",children:[e=>{const t=function(e){const t=new Set(IL.getAll().map((t=>"function"==typeof t.format?t.format(e):t.format))),o=new Map;for(const s of e.model.getters.getSheetIds()){const i=e.model.getters.getEvaluatedCells(s);for(const e in i){const s=i[e];if(s.format&&!o.has(s.format)&&!t.has(s.format)){const e=xL(s.format);"date"!==e&&"currency"!==e||o.set(s.format,iF({descriptionValue:"currency"===e?1e3:gF,format:s.format,name:s.format}))}}}return[...o.values()]}(e).map((e=>({...e,sequence:110})));return t.length>0&&(t[t.length-1].separator=!0),o([...IL.getAll(),...t])}]};const RL=new hR;RL.add("file",{name:Vo("File"),sequence:10}).addChild("settings",["file"],{name:Vo("Settings"),sequence:200,execute:e=>e.openSidePanel("Settings"),isEnabled:e=>!e.isSmall,icon:"o-spreadsheet-Icon.COG"}).add("edit",{name:Vo("Edit"),sequence:20}).addChild("undo",["edit"],{...y_,sequence:10}).addChild("redo",["edit"],{...w_,sequence:20,separator:!0}).addChild("copy",["edit"],{...I_,sequence:30}).addChild("cut",["edit"],{...x_,sequence:40}).addChild("paste",["edit"],{...E_,sequence:50}).addChild("paste_special",["edit"],{...R_,sequence:60,separator:!0}).addChild("paste_special_value",["edit","paste_special"],{...T_,sequence:10}).addChild("paste_special_format",["edit","paste_special"],{...A_,sequence:20}).addChild("edit_table",["edit"],{...B_,isVisible:AD,sequence:60}).addChild("find_and_replace",["edit"],{...D_,sequence:65,separator:!0}).addChild("delete",["edit"],{name:Vo("Delete"),icon:"o-spreadsheet-Icon.TRASH",sequence:70}).addChild("edit_delete_cell_values",["edit","delete"],{...__,sequence:10}).addChild("edit_delete_row",["edit","delete"],{...O_,sequence:20}).addChild("edit_delete_column",["edit","delete"],{...M_,sequence:30}).addChild("edit_delete_cell_shift_up",["edit","delete"],{...L_,sequence:40}).addChild("edit_delete_cell_shift_left",["edit","delete"],{...H_,sequence:50}).addChild("edit_unhide_columns",["edit"],{...HD,sequence:80}).addChild("edit_unhide_rows",["edit"],{...zD,sequence:80}).add("view",{name:Vo("View"),sequence:30}).addChild("unfreeze_panes",["view"],{...$D,sequence:4}).addChild("freeze_panes",["view"],{...GD,sequence:5}).addChild("unfreeze_rows",["view","freeze_panes"],{...WD,sequence:5}).addChild("freeze_first_row",["view","freeze_panes"],{...qD,sequence:10}).addChild("freeze_second_row",["view","freeze_panes"],{...ZD,sequence:15}).addChild("freeze_current_row",["view","freeze_panes"],{...jD,sequence:20,separator:!0}).addChild("unfreeze_columns",["view","freeze_panes"],{...YD,sequence:25}).addChild("freeze_first_col",["view","freeze_panes"],{...XD,sequence:30}).addChild("freeze_second_col",["view","freeze_panes"],{...KD,sequence:35}).addChild("freeze_current_col",["view","freeze_panes"],{...JD,sequence:40}).addChild("group_headers",["view"],{name:Vo("Group"),sequence:15,separator:!0,icon:"o-spreadsheet-Icon.PLUS_IN_BOX",isVisible:_D}).addChild("group_columns",["view","group_headers"],{...o_,sequence:5}).addChild("ungroup_columns",["view","group_headers"],{...i_,isVisible:e=>l_(e,"COL"),sequence:10}).addChild("group_rows",["view","group_headers"],{...s_,sequence:15}).addChild("ungroup_rows",["view","group_headers"],{...n_,isVisible:e=>l_(e,"ROW"),sequence:20}).addChild("show",["view"],{name:Vo("Show"),sequence:1,icon:"o-spreadsheet-Icon.SHOW"}).addChild("view_gridlines",["view","show"],{...QD,sequence:5}).addChild("view_formulas",["view","show"],{...t_,sequence:10}).addChild("view_irregularity_map",["view"],{...e_,sequence:40,separator:!0}).add("insert",{name:Vo("Insert"),sequence:40}).addChild("insert_row",["insert"],{...W_,sequence:10}).addChild("insert_row_before",["insert","insert_row"],{...Z_,sequence:10}).addChild("insert_row_after",["insert","insert_row"],{...X_,sequence:20}).addChild("insert_column",["insert"],{...K_,sequence:20}).addChild("insert_column_before",["insert","insert_column"],{...Q_,sequence:10}).addChild("insert_column_after",["insert","insert_column"],{...oO,sequence:20}).addChild("insert_cell",["insert"],{...sO,sequence:30}).addChild("insert_cell_down",["insert","insert_cell"],{...iO,name:Vo("Shift down"),sequence:10}).addChild("insert_cell_right",["insert","insert_cell"],{...nO,name:Vo("Shift right"),sequence:20}).addChild("insert_sheet",["insert"],{...CO,sequence:40,separator:!0}).addChild("insert_chart",["insert"],{...rO,sequence:50}).addChild("insert_pivot",["insert"],{...aO,sequence:52}).addChild("insert_image",["insert"],{...lO,sequence:55}).addChild("insert_table",["insert"],{...cO,sequence:57}).addChild("insert_function",["insert"],{...hO,sequence:60}).addChild("insert_function_sum",["insert","insert_function"],{...dO,sequence:0}).addChild("insert_function_average",["insert","insert_function"],{...uO,sequence:10}).addChild("insert_function_count",["insert","insert_function"],{...gO,sequence:20}).addChild("insert_function_max",["insert","insert_function"],{...pO,sequence:30}).addChild("insert_function_min",["insert","insert_function"],{...mO,sequence:40,separator:!0}).addChild("categorie_function_all",["insert","insert_function"],{...fO,sequence:50}).addChild("categories_function_list",["insert","insert_function"],(()=>{const e=CS.content;return[...new Set(CS.getAll().filter((e=>!e.hidden)).map((e=>e.category)))].filter(lt).sort().map(((t,o)=>{const s=Object.keys(e).filter((o=>e[o].category===t&&!e[o].hidden));return{name:t,children:yO(s)}}))})).addChild("insert_link",["insert"],{...vO,separator:!0,sequence:70}).addChild("insert_checkbox",["insert"],{...bO,sequence:80}).addChild("insert_dropdown",["insert"],{...SO,separator:!0,sequence:90}).add("format",{name:Vo("Format"),sequence:50}).addChild("format_number",["format"],{...EL,name:Vo("Number"),sequence:10,separator:!0}).addChild("format_bold",["format"],{...PF,sequence:20}).addChild("format_italic",["format"],{...MF,sequence:30}).addChild("format_underline",["format"],{...NF,sequence:40}).addChild("format_strikethrough",["format"],{...kF,sequence:50,separator:!0}).addChild("format_font_size",["format"],{...VF,sequence:60,separator:!0}).addChild("format_alignment",["format"],{...LF,sequence:70}).addChild("format_alignment_left",["format","format_alignment"],{...UF,sequence:10}).addChild("format_alignment_center",["format","format_alignment"],{...BF,sequence:20}).addChild("format_alignment_right",["format","format_alignment"],{...zF,sequence:30,separator:!0}).addChild("format_alignment_top",["format","format_alignment"],{...GF,sequence:40}).addChild("format_alignment_middle",["format","format_alignment"],{...WF,sequence:50}).addChild("format_alignment_bottom",["format","format_alignment"],{...qF,sequence:60,separator:!0}).addChild("format_wrapping",["format"],{...ZF,sequence:80,separator:!0}).addChild("format_wrapping_overflow",["format","format_wrapping"],{...YF,sequence:10}).addChild("format_wrapping_wrap",["format","format_wrapping"],{...XF,sequence:20}).addChild("format_wrapping_clip",["format","format_wrapping"],{...KF,sequence:30}).addChild("format_cf",["format"],{...JF,sequence:90,separator:!0}).addChild("format_clearFormat",["format"],{...QF,sequence:100,separator:!0}).add("data",{name:Vo("Data"),sequence:60}).addChild("sort_range",["data"],{...ZO,sequence:10,separator:!0}).addChild("sort_ascending",["data","sort_range"],{...jO,sequence:10}).addChild("sort_descending",["data","sort_range"],{...JO,sequence:20}).addChild("data_cleanup",["data"],{...YO,sequence:15}).addChild("remove_duplicates",["data","data_cleanup"],{...XO,sequence:10}).addChild("trim_whitespace",["data","data_cleanup"],{...KO,sequence:20}).addChild("split_to_columns",["data"],{...tF,sequence:20}).addChild("data_validation",["data"],{name:Vo("Data Validation"),execute:e=>{e.openSidePanel("DataValidation")},isEnabled:e=>!e.isSmall,icon:"o-spreadsheet-Icon.DATA_VALIDATION",sequence:30,separator:!0}).addChild("add_remove_data_filter",["data"],{...QO,sequence:40,separator:!0}).addChild("data_sources_data",["data"],(e=>e.model.getters.getPivotIds().map(((t,o)=>{const s={get highlights(){return gN(e.model.getters,t)}};return{id:`item_pivot_${e.model.getters.getPivotFormulaId(t)}`,name:e.model.getters.getPivotDisplayName(t),sequence:50+o,isReadonlyAllowed:!0,execute:e=>e.openSidePanel("PivotSidePanel",{pivotId:t}),isEnabled:e=>!e.isSmall,onStartHover:e=>e.getStore(hE).register(s),onStopHover:e=>e.getStore(hE).unRegister(s),icon:"o-spreadsheet-Icon.PIVOT",separator:o===e.model.getters.getPivotIds().length-1,secondaryIcon:e=>e.model.getters.isPivotUnused(t)?"o-spreadsheet-Icon.UNUSED_PIVOT_WARNING":void 0}})))).addChild("reinsert_dynamic_pivot",["data"],oF).addChild("reinsert_static_pivot",["data"],sF);const TL=new class extends n{mapping={};uuidGenerator=new Wa;replace(e,t){const o={...t,id:this.uuidGenerator.uuidv4()};return super.replace(e,o)}getAllOrdered(){return this.getAll().sort(((e,t)=>e.sequence-t.sequence))}};class AL{listeners=[];async sendMessage(e){for(const{callback:t}of this.listeners)t(e)}onNewMessage(e,t){this.listeners.push({id:e,callback:t})}leave(e){this.listeners=this.listeners.filter((t=>t.id!==e))}}class DL{fileStore;constructor(e){this.fileStore=e}async requestImage(){const e=await this.userImageUpload(),t=await this.fileStore.upload(e);return{path:t,size:await this.getImageOriginalSize(t),mimetype:e.type}}async uploadFile(e){const t=await this.fileStore.upload(e);return{path:t,size:await this.getImageOriginalSize(t),mimetype:e.type}}userImageUpload(){return new Promise(((e,t)=>{const o=document.createElement("input");o.setAttribute("type","file"),o.setAttribute("accept","image/*"),o.addEventListener("change",(async()=>{null===o.files||1!==o.files.length?t():e(o.files[0])})),o.click()}))}getImageOriginalSize(e){return new Promise(((t,o)=>{const s=new Image;s.addEventListener("load",(()=>{const e={width:s.width,height:s.height};t(e)})),s.addEventListener("error",o),s.src=e}))}}const _L=[{transform:"scale(0)"},{transform:"scale(0.8)",offset:.33},{opacity:"0",transform:"scale(1)",offset:1}];mh`
1875
1875
  .o-ripple {
1876
1876
  z-index: 1;
1877
1877
  }
1878
- `;class _L extends t.Component{static template="o-spreadsheet-RippleEffect";static props={x:String,y:String,color:String,opacity:Number,duration:Number,width:Number,height:Number,offsetY:Number,offsetX:Number,allowOverflow:Boolean,onAnimationEnd:Function,style:String};rippleRef=t.useRef("ripple");setup(){let e;t.onMounted((()=>{const t=this.rippleRef.el;t&&t.animate&&(e=t.animate(DL,{duration:this.props.duration,easing:"ease-out"}),e.addEventListener("finish",this.props.onAnimationEnd))})),t.onWillUnmount((()=>{e?.removeEventListener("finish",this.props.onAnimationEnd)}))}get rippleStyle(){const{x:e,y:t,width:o,height:s}=this.props;return bh({transform:"scale(0)",left:e,top:t,"margin-left":`${-o/2+(this.props.offsetX||0)}px`,"margin-top":`${-s/2+(this.props.offsetY||0)}px`,width:`${o}px`,height:`${s}px`,background:this.props.color,"border-radius":"100%",opacity:`${this.props.opacity}`})}}class OL extends t.Component{static template="o-spreadsheet-Ripple";static props={color:{type:String,optional:!0},opacity:{type:Number,optional:!0},duration:{type:Number,optional:!0},ignoreClickPosition:{type:Boolean,optional:!0},width:{type:Number,optional:!0},height:{type:Number,optional:!0},offsetY:{type:Number,optional:!0},offsetX:{type:Number,optional:!0},allowOverflow:{type:Boolean,optional:!0},enabled:{type:Boolean,optional:!0},onAnimationEnd:{type:Function,optional:!0},slots:Object,class:{type:String,optional:!0}};static components={RippleEffect:_L};static defaultProps={color:"#aaaaaa",opacity:.4,duration:800,enabled:!0,onAnimationEnd:()=>{},class:""};childContainer=t.useRef("childContainer");state=t.useState({ripples:[]});currentId=1;onClick(e){if(!this.props.enabled)return;if(!this.childContainer.el)return;const t=this.getRippleChildRectInfo(),{x:o,y:s,width:i,height:n}=t,r=Math.max(i,n),a={x:e.clientX-o,y:e.clientY-s,width:this.props.width||2.85*r,height:this.props.height||2.85*r};this.state.ripples.push({rippleRect:a,id:this.currentId++})}getRippleStyle(){const e=this.childContainer.el;if(!e||1!==e.childElementCount||!e.firstElementChild)return"";const t=this.getRippleChildRectInfo();return bh({top:t.marginTop+"px",left:t.marginLeft+"px",width:t.width+"px",height:t.height+"px"})}getRippleChildRectInfo(){const e=this.childContainer.el;if(!e)throw new Error("No child container element found");if(1!==e.childElementCount||!e.firstElementChild){return{...cy(e),marginLeft:0,marginTop:0}}const t=e.firstElementChild,o=function(e){const t=window.getComputedStyle(e);return{top:parseInt(t.marginTop,10)||0,bottom:parseInt(t.marginBottom,10)||0,left:parseInt(t.marginLeft,10)||0,right:parseInt(t.marginRight,10)||0}}(t);return{...cy(t),marginLeft:o.left,marginTop:o.top}}removeRipple(e){const t=this.state.ripples.findIndex((t=>t.id===e));-1!==t&&this.state.ripples.splice(t,1)}getRippleEffectProps(e){const t=this.state.ripples.find((t=>t.id===e))?.rippleRect;if(!t)throw new Error("Cannot find a ripple with the id "+e);return{color:this.props.color,opacity:this.props.opacity,duration:this.props.duration,x:this.props.ignoreClickPosition?"50%":t.x+"px",y:this.props.ignoreClickPosition?"50%":t.y+"px",width:t.width,height:t.height,offsetX:this.props.offsetX||0,offsetY:this.props.offsetY||0,allowOverflow:this.props.allowOverflow||!1,style:this.getRippleStyle(),onAnimationEnd:()=>this.removeRipple(e)}}}mh`
1878
+ `;class OL extends t.Component{static template="o-spreadsheet-RippleEffect";static props={x:String,y:String,color:String,opacity:Number,duration:Number,width:Number,height:Number,offsetY:Number,offsetX:Number,allowOverflow:Boolean,onAnimationEnd:Function,style:String};rippleRef=t.useRef("ripple");setup(){let e;t.onMounted((()=>{const t=this.rippleRef.el;t&&t.animate&&(e=t.animate(_L,{duration:this.props.duration,easing:"ease-out"}),e.addEventListener("finish",this.props.onAnimationEnd))})),t.onWillUnmount((()=>{e?.removeEventListener("finish",this.props.onAnimationEnd)}))}get rippleStyle(){const{x:e,y:t,width:o,height:s}=this.props;return bh({transform:"scale(0)",left:e,top:t,"margin-left":`${-o/2+(this.props.offsetX||0)}px`,"margin-top":`${-s/2+(this.props.offsetY||0)}px`,width:`${o}px`,height:`${s}px`,background:this.props.color,"border-radius":"100%",opacity:`${this.props.opacity}`})}}class FL extends t.Component{static template="o-spreadsheet-Ripple";static props={color:{type:String,optional:!0},opacity:{type:Number,optional:!0},duration:{type:Number,optional:!0},ignoreClickPosition:{type:Boolean,optional:!0},width:{type:Number,optional:!0},height:{type:Number,optional:!0},offsetY:{type:Number,optional:!0},offsetX:{type:Number,optional:!0},allowOverflow:{type:Boolean,optional:!0},enabled:{type:Boolean,optional:!0},onAnimationEnd:{type:Function,optional:!0},slots:Object,class:{type:String,optional:!0}};static components={RippleEffect:OL};static defaultProps={color:"#aaaaaa",opacity:.4,duration:800,enabled:!0,onAnimationEnd:()=>{},class:""};childContainer=t.useRef("childContainer");state=t.useState({ripples:[]});currentId=1;onClick(e){if(!this.props.enabled)return;if(!this.childContainer.el)return;const t=this.getRippleChildRectInfo(),{x:o,y:s,width:i,height:n}=t,r=Math.max(i,n),a={x:e.clientX-o,y:e.clientY-s,width:this.props.width||2.85*r,height:this.props.height||2.85*r};this.state.ripples.push({rippleRect:a,id:this.currentId++})}getRippleStyle(){const e=this.childContainer.el;if(!e||1!==e.childElementCount||!e.firstElementChild)return"";const t=this.getRippleChildRectInfo();return bh({top:t.marginTop+"px",left:t.marginLeft+"px",width:t.width+"px",height:t.height+"px"})}getRippleChildRectInfo(){const e=this.childContainer.el;if(!e)throw new Error("No child container element found");if(1!==e.childElementCount||!e.firstElementChild){return{...cy(e),marginLeft:0,marginTop:0}}const t=e.firstElementChild,o=function(e){const t=window.getComputedStyle(e);return{top:parseInt(t.marginTop,10)||0,bottom:parseInt(t.marginBottom,10)||0,left:parseInt(t.marginLeft,10)||0,right:parseInt(t.marginRight,10)||0}}(t);return{...cy(t),marginLeft:o.left,marginTop:o.top}}removeRipple(e){const t=this.state.ripples.findIndex((t=>t.id===e));-1!==t&&this.state.ripples.splice(t,1)}getRippleEffectProps(e){const t=this.state.ripples.find((t=>t.id===e))?.rippleRect;if(!t)throw new Error("Cannot find a ripple with the id "+e);return{color:this.props.color,opacity:this.props.opacity,duration:this.props.duration,x:this.props.ignoreClickPosition?"50%":t.x+"px",y:this.props.ignoreClickPosition?"50%":t.y+"px",width:t.width,height:t.height,offsetX:this.props.offsetX||0,offsetY:this.props.offsetY||0,allowOverflow:this.props.allowOverflow||!1,style:this.getRippleStyle(),onAnimationEnd:()=>this.removeRipple(e)}}}mh`
1879
1879
  .o-sheet {
1880
1880
  padding: 0 15px;
1881
1881
  padding-right: 10px;
@@ -1927,7 +1927,7 @@
1927
1927
  .o-spreadshet-mobile .o-sheet {
1928
1928
  height: ${44}px;
1929
1929
  }
1930
- `;class FL extends t.Component{static template="o-spreadsheet-BottomBarSheet";static props={sheetId:String,openContextMenu:Function,style:{type:String,optional:!0},onMouseDown:{type:Function,optional:!0}};static components={Ripple:OL,ColorPicker:PE};static defaultProps={onMouseDown:()=>{},style:""};state=t.useState({isEditing:!1,pickerOpened:!1});sheetDivRef=t.useRef("sheetDiv");sheetNameRef=t.useRef("sheetNameSpan");editionState="initializing";DOMFocusableElementStore;setup(){t.onPatched((()=>{this.sheetNameRef.el&&this.state.isEditing&&"initializing"===this.editionState&&(this.editionState="editing",this.focusInputAndSelectContent())})),this.DOMFocusableElementStore=oh(Qx),t.useExternalListener(window,"click",(()=>this.state.pickerOpened=!1)),t.useEffect((e=>{this.props.sheetId===e&&this.scrollToSheet()}),(()=>[this.env.model.getters.getActiveSheetId()]))}focusInputAndSelectContent(){if(!this.state.isEditing||!this.sheetNameRef.el)return;this.sheetNameRef.el.focus();const e=window.getSelection();e&&this.sheetNameRef.el.firstChild&&e.setBaseAndExtent(this.sheetNameRef.el.firstChild,0,this.sheetNameRef.el.firstChild,this.sheetNameRef.el.textContent?.length||0)}scrollToSheet(){this.sheetDivRef.el?.scrollIntoView?.({behavior:"smooth",inline:"nearest"})}onFocusOut(){this.state.isEditing&&"initializing"!==this.editionState&&this.stopEdition()}onClick(){this.env.isMobile()&&this.activateSheet()}onMouseDown(e){this.env.isMobile()||(this.activateSheet(),this.props.onMouseDown(e))}activateSheet(){this.env.model.dispatch("ACTIVATE_SHEET",{sheetIdFrom:this.env.model.getters.getActiveSheetId(),sheetIdTo:this.props.sheetId}),this.scrollToSheet()}onDblClick(){this.env.model.getters.isReadonly()||this.startEdition()}onKeyDown(e){this.state.isEditing&&("Enter"===e.key&&(e.preventDefault(),this.stopEdition(),this.DOMFocusableElementStore.focus()),"Escape"===e.key&&(this.cancelEdition(),this.DOMFocusableElementStore.focus()))}onMouseEventSheetName(e){this.state.isEditing&&e.stopPropagation()}startEdition(){this.state.isEditing=!0,this.editionState="initializing"}stopEdition(){const e=this.sheetNameRef.el;if(!this.state.isEditing||!e)return;this.state.isEditing=!1,this.editionState="initializing",e.blur();const t=this.getInputContent()||"";e.innerText=t,function(e,t,o,s){const i=e.model.dispatch("RENAME_SHEET",{sheetId:t,newName:o,oldName:e.model.getters.getSheetName(t)});i.reasons.includes("MissingSheetName")?e.raiseError(Vo("The sheet name cannot be empty."),s):i.reasons.includes("DuplicatedSheetName")?e.raiseError(Vo("A sheet with the name %s already exists. Please select another name.",o),s):i.reasons.includes("ForbiddenCharactersInSheetName")&&e.raiseError(Vo("Some used characters are not allowed in a sheet name (Forbidden characters are %s).",De.join(" ")),s)}(this.env,this.props.sheetId,t,(()=>this.startEdition()))}cancelEdition(){this.state.isEditing=!1,this.editionState="initializing",this.sheetNameRef.el?.blur(),this.setInputContent(this.sheetName)}onIconClick(e){this.isSheetActive||this.activateSheet(),this.props.openContextMenu(this.contextMenuRegistry,e)}onContextMenu(e){this.isSheetActive||this.activateSheet(),this.props.openContextMenu(this.contextMenuRegistry,e)}getInputContent(){return this.sheetNameRef.el?.textContent}setInputContent(e){this.sheetNameRef.el&&(this.sheetNameRef.el.textContent=e)}onColorPicked(e){this.state.pickerOpened=!1,this.env.model.dispatch("COLOR_SHEET",{sheetId:this.props.sheetId,color:e})}get colorPickerAnchorRect(){return cy(this.sheetDivRef.el)}get contextMenuRegistry(){return function(e){const t=new hR;return t.add("delete",{...sR,sequence:10}).add("hide_sheet",{...cR,sequence:20}).add("duplicate",{...iR,sequence:30,separator:!0}).add("rename",{...nR(e),sequence:40}).add("change_color",{...rR(e),sequence:50,separator:!0}).add("move_right",{...aR,sequence:60}).add("move_left",{...lR,sequence:70}),t}({renameSheetCallback:()=>{this.scrollToSheet(),this.startEdition()},openSheetColorPickerCallback:()=>{this.state.pickerOpened=!0}})}get isSheetActive(){return this.env.model.getters.getActiveSheetId()===this.props.sheetId}get sheetName(){return this.env.model.getters.getSheetName(this.props.sheetId)}get sheetColorStyle(){return bh({background:this.env.model.getters.getSheet(this.props.sheetId).color||""})}}const PL=[{name:Vo("Sum"),types:[Ts.number],compute:(e,t)=>kl([[e]],t)},{name:Vo("Avg"),types:[Ts.number],compute:(e,t)=>Jl([[e]],t)},{name:Vo("Min"),types:[Ts.number],compute:(e,t)=>oc([[e]],t).value},{name:Vo("Max"),types:[Ts.number],compute:(e,t)=>tc([[e]],t).value},{name:Vo("Count"),types:[Ts.number,Ts.text,Ts.boolean,Ts.error],compute:e=>ec([[e]])},{name:Vo("Count Numbers"),types:[Ts.number,Ts.text,Ts.boolean,Ts.error],compute:(e,t)=>Ql([[e]],t)}];class ML extends hh{statisticFnResults=this._computeStatisticFnResults();isDirty=!1;constructor(e){super(e),this.model.selection.observe(this,{handleEvent:this.handleEvent.bind(this)})}handle(e){switch((Ds.has(e.type)||"UPDATE_CELL"===e.type&&("content"in e||"format"in e))&&(this.isDirty=!0),e.type){case"HIDE_COLUMNS_ROWS":case"UNHIDE_COLUMNS_ROWS":case"GROUP_HEADERS":case"UNGROUP_HEADERS":case"ACTIVATE_SHEET":case"ACTIVATE_NEXT_SHEET":case"ACTIVATE_PREVIOUS_SHEET":case"EVALUATE_CELLS":case"UNDO":case"REDO":this.isDirty=!0}}finalize(){this.isDirty&&(this.isDirty=!1,this.statisticFnResults=this._computeStatisticFnResults())}handleEvent(){this.getters.isGridSelectionActive()&&(this.statisticFnResults=this._computeStatisticFnResults())}_computeStatisticFnResults(){const e=this.getters,t=e.getActiveSheetId(),o=[],s=er(e.getSelectedZones(),[]),i=this.getters.getSheetSize(t).numberOfRows-1,n=this.getters.getSheetSize(t).numberOfCols-1;for(const r of s)for(let s=r.left;s<=(r.right??n);s++)for(let n=r.top;n<=(r.bottom??i);n++){if(e.isRowHidden(t,n)||e.isColHidden(t,s))continue;const i=e.getEvaluatedCell({sheetId:t,col:s,row:n});i.type!==Ts.empty&&o.push(i)}const r=e.getLocale(),a={},l=xt((e=>{const t=e.split(",");return o.filter((e=>t.includes(e.type)))}));for(const e of PL){let t;const o=l(e.types.sort().join(","));o.length&&(t=ut((()=>e.compute(o,r)))),a[e.name]=t}return a}}mh`
1930
+ `;class PL extends t.Component{static template="o-spreadsheet-BottomBarSheet";static props={sheetId:String,openContextMenu:Function,style:{type:String,optional:!0},onMouseDown:{type:Function,optional:!0}};static components={Ripple:FL,ColorPicker:PE};static defaultProps={onMouseDown:()=>{},style:""};state=t.useState({isEditing:!1,pickerOpened:!1});sheetDivRef=t.useRef("sheetDiv");sheetNameRef=t.useRef("sheetNameSpan");editionState="initializing";DOMFocusableElementStore;setup(){t.onPatched((()=>{this.sheetNameRef.el&&this.state.isEditing&&"initializing"===this.editionState&&(this.editionState="editing",this.focusInputAndSelectContent())})),this.DOMFocusableElementStore=oh(Qx),t.useExternalListener(window,"click",(()=>this.state.pickerOpened=!1)),t.useEffect((e=>{this.props.sheetId===e&&this.scrollToSheet()}),(()=>[this.env.model.getters.getActiveSheetId()]))}focusInputAndSelectContent(){if(!this.state.isEditing||!this.sheetNameRef.el)return;this.sheetNameRef.el.focus();const e=window.getSelection();e&&this.sheetNameRef.el.firstChild&&e.setBaseAndExtent(this.sheetNameRef.el.firstChild,0,this.sheetNameRef.el.firstChild,this.sheetNameRef.el.textContent?.length||0)}scrollToSheet(){this.sheetDivRef.el?.scrollIntoView?.({behavior:"smooth",inline:"nearest"})}onFocusOut(){this.state.isEditing&&"initializing"!==this.editionState&&this.stopEdition()}onClick(){this.env.isMobile()&&this.activateSheet()}onMouseDown(e){this.env.isMobile()||(this.activateSheet(),this.props.onMouseDown(e))}activateSheet(){this.env.model.dispatch("ACTIVATE_SHEET",{sheetIdFrom:this.env.model.getters.getActiveSheetId(),sheetIdTo:this.props.sheetId}),this.scrollToSheet()}onDblClick(){this.env.model.getters.isReadonly()||this.startEdition()}onKeyDown(e){this.state.isEditing&&("Enter"===e.key&&(e.preventDefault(),this.stopEdition(),this.DOMFocusableElementStore.focus()),"Escape"===e.key&&(this.cancelEdition(),this.DOMFocusableElementStore.focus()))}onMouseEventSheetName(e){this.state.isEditing&&e.stopPropagation()}startEdition(){this.state.isEditing=!0,this.editionState="initializing"}stopEdition(){const e=this.sheetNameRef.el;if(!this.state.isEditing||!e)return;this.state.isEditing=!1,this.editionState="initializing",e.blur();const t=this.getInputContent()||"";e.innerText=t,function(e,t,o,s){const i=e.model.dispatch("RENAME_SHEET",{sheetId:t,newName:o,oldName:e.model.getters.getSheetName(t)});i.reasons.includes("MissingSheetName")?e.raiseError(Vo("The sheet name cannot be empty."),s):i.reasons.includes("DuplicatedSheetName")?e.raiseError(Vo("A sheet with the name %s already exists. Please select another name.",o),s):i.reasons.includes("ForbiddenCharactersInSheetName")&&e.raiseError(Vo("Some used characters are not allowed in a sheet name (Forbidden characters are %s).",De.join(" ")),s)}(this.env,this.props.sheetId,t,(()=>this.startEdition()))}cancelEdition(){this.state.isEditing=!1,this.editionState="initializing",this.sheetNameRef.el?.blur(),this.setInputContent(this.sheetName)}onIconClick(e){this.isSheetActive||this.activateSheet(),this.props.openContextMenu(this.contextMenuRegistry,e)}onContextMenu(e){this.isSheetActive||this.activateSheet(),this.props.openContextMenu(this.contextMenuRegistry,e)}getInputContent(){return this.sheetNameRef.el?.textContent}setInputContent(e){this.sheetNameRef.el&&(this.sheetNameRef.el.textContent=e)}onColorPicked(e){this.state.pickerOpened=!1,this.env.model.dispatch("COLOR_SHEET",{sheetId:this.props.sheetId,color:e})}get colorPickerAnchorRect(){return cy(this.sheetDivRef.el)}get contextMenuRegistry(){return function(e){const t=new hR;return t.add("delete",{...sR,sequence:10}).add("hide_sheet",{...cR,sequence:20}).add("duplicate",{...iR,sequence:30,separator:!0}).add("rename",{...nR(e),sequence:40}).add("change_color",{...rR(e),sequence:50,separator:!0}).add("move_right",{...aR,sequence:60}).add("move_left",{...lR,sequence:70}),t}({renameSheetCallback:()=>{this.scrollToSheet(),this.startEdition()},openSheetColorPickerCallback:()=>{this.state.pickerOpened=!0}})}get isSheetActive(){return this.env.model.getters.getActiveSheetId()===this.props.sheetId}get sheetName(){return this.env.model.getters.getSheetName(this.props.sheetId)}get sheetColorStyle(){return bh({background:this.env.model.getters.getSheet(this.props.sheetId).color||""})}}const ML=[{name:Vo("Sum"),types:[Ts.number],compute:(e,t)=>kl([[e]],t)},{name:Vo("Avg"),types:[Ts.number],compute:(e,t)=>Jl([[e]],t)},{name:Vo("Min"),types:[Ts.number],compute:(e,t)=>oc([[e]],t).value},{name:Vo("Max"),types:[Ts.number],compute:(e,t)=>tc([[e]],t).value},{name:Vo("Count"),types:[Ts.number,Ts.text,Ts.boolean,Ts.error],compute:e=>ec([[e]])},{name:Vo("Count Numbers"),types:[Ts.number,Ts.text,Ts.boolean,Ts.error],compute:(e,t)=>Ql([[e]],t)}];class NL extends hh{statisticFnResults=this._computeStatisticFnResults();isDirty=!1;constructor(e){super(e),this.model.selection.observe(this,{handleEvent:this.handleEvent.bind(this)})}handle(e){switch((Ds.has(e.type)||"UPDATE_CELL"===e.type&&("content"in e||"format"in e))&&(this.isDirty=!0),e.type){case"HIDE_COLUMNS_ROWS":case"UNHIDE_COLUMNS_ROWS":case"GROUP_HEADERS":case"UNGROUP_HEADERS":case"ACTIVATE_SHEET":case"ACTIVATE_NEXT_SHEET":case"ACTIVATE_PREVIOUS_SHEET":case"EVALUATE_CELLS":case"UNDO":case"REDO":this.isDirty=!0}}finalize(){this.isDirty&&(this.isDirty=!1,this.statisticFnResults=this._computeStatisticFnResults())}handleEvent(){this.getters.isGridSelectionActive()&&(this.statisticFnResults=this._computeStatisticFnResults())}_computeStatisticFnResults(){const e=this.getters,t=e.getActiveSheetId(),o=[],s=er(e.getSelectedZones(),[]),i=this.getters.getSheetSize(t).numberOfRows-1,n=this.getters.getSheetSize(t).numberOfCols-1;for(const r of s)for(let s=r.left;s<=(r.right??n);s++)for(let n=r.top;n<=(r.bottom??i);n++){if(e.isRowHidden(t,n)||e.isColHidden(t,s))continue;const i=e.getEvaluatedCell({sheetId:t,col:s,row:n});i.type!==Ts.empty&&o.push(i)}const r=e.getLocale(),a={},l=xt((e=>{const t=e.split(",");return o.filter((e=>t.includes(e.type)))}));for(const e of ML){let t;const o=l(e.types.sort().join(","));o.length&&(t=ut((()=>e.compute(o,r)))),a[e.name]=t}return a}}mh`
1931
1931
  .o-selection-statistic {
1932
1932
  margin-right: 20px;
1933
1933
  padding: 4px 4px 4px 8px;
@@ -1937,7 +1937,7 @@
1937
1937
  background-color: rgba(0, 0, 0, 0.08) !important;
1938
1938
  }
1939
1939
  }
1940
- `;class NL extends t.Component{static template="o-spreadsheet-BottomBarStatistic";static props={openContextMenu:Function,closeContextMenu:Function};static components={Ripple:OL};selectedStatisticFn="";store;setup(){this.store=oh(ML),t.onWillUpdateProps((()=>{Object.values(this.store.statisticFnResults).every((e=>void 0===e))&&this.props.closeContextMenu()}))}getSelectedStatistic(){if(!Object.values(this.store.statisticFnResults).every((e=>void 0===e)))return""===this.selectedStatisticFn&&(this.selectedStatisticFn=Object.keys(this.store.statisticFnResults)[0]),this.getComposedFnName(this.selectedStatisticFn)}listSelectionStatistics(e){const t=new hR;let o=0;for(const[e]of Object.entries(this.store.statisticFnResults))t.add(e,{name:()=>this.getComposedFnName(e),sequence:o,isReadonlyAllowed:!0,execute:()=>{this.selectedStatisticFn=e}}),o++;const s=e.currentTarget,{top:i,left:n,width:r}=s.getBoundingClientRect();this.props.openContextMenu(n+r,i,t)}getComposedFnName(e){const t=this.env.model.getters.getLocale(),o=this.store.statisticFnResults[e];return e+": "+(void 0!==o?bn(o(),{locale:t}):"__")}}mh`
1940
+ `;class kL extends t.Component{static template="o-spreadsheet-BottomBarStatistic";static props={openContextMenu:Function,closeContextMenu:Function};static components={Ripple:FL};selectedStatisticFn="";store;setup(){this.store=oh(NL),t.onWillUpdateProps((()=>{Object.values(this.store.statisticFnResults).every((e=>void 0===e))&&this.props.closeContextMenu()}))}getSelectedStatistic(){if(!Object.values(this.store.statisticFnResults).every((e=>void 0===e)))return""===this.selectedStatisticFn&&(this.selectedStatisticFn=Object.keys(this.store.statisticFnResults)[0]),this.getComposedFnName(this.selectedStatisticFn)}listSelectionStatistics(e){const t=new hR;let o=0;for(const[e]of Object.entries(this.store.statisticFnResults))t.add(e,{name:()=>this.getComposedFnName(e),sequence:o,isReadonlyAllowed:!0,execute:()=>{this.selectedStatisticFn=e}}),o++;const s=e.currentTarget,{top:i,left:n,width:r}=s.getBoundingClientRect();this.props.openContextMenu(n+r,i,t)}getComposedFnName(e){const t=this.env.model.getters.getLocale(),o=this.store.statisticFnResults[e];return e+": "+(void 0!==o?bn(o(),{locale:t}):"__")}}mh`
1941
1941
  .o-spreadsheet-bottom-bar {
1942
1942
  background-color: ${l};
1943
1943
  padding-left: ${oe}px;
@@ -2007,12 +2007,12 @@
2007
2007
  max-width: none;
2008
2008
  }
2009
2009
  }
2010
- `;class kL extends t.Component{static template="o-spreadsheet-BottomBar";static props={onClick:Function};static components={MenuPopover:Px,Ripple:OL,BottomBarSheet:FL,BottomBarStatistic:NL};bottomBarRef=t.useRef("bottomBar");sheetListRef=t.useRef("sheetList");dragAndDrop=kE();targetScroll=void 0;state=t.useState({isSheetListScrollableLeft:!1,isSheetListScrollableRight:!1});menuMaxHeight=250;menuState=t.useState({isOpen:!1,menuId:void 0,anchorRect:null,menuItems:[]});sheetList=this.getVisibleSheets();setup(){t.onWillUpdateProps((()=>{this.updateScrollState();const e=this.getVisibleSheets();mt(this.sheetList,e)||this.dragAndDrop.cancel(),this.sheetList=e}))}clickAddSheet(e){const t=this.env.model.getters.getActiveSheetId(),o=this.env.model.getters.getSheetIds().findIndex((e=>e===t))+1,s=this.env.model.uuidGenerator.smallUuid(),i=this.env.model.getters.getNextSheetName(Vo("Sheet"));this.env.model.dispatch("CREATE_SHEET",{sheetId:s,position:o,name:i}),this.env.model.dispatch("ACTIVATE_SHEET",{sheetIdFrom:t,sheetIdTo:s})}getVisibleSheets(){return this.env.model.getters.getVisibleSheetIds().map((e=>{const t=this.env.model.getters.getSheet(e);return{id:t.id,name:t.name}}))}clickListSheets(e){const t=new hR,o=this.env.model.getters.getActiveSheetId();let s=0;for(const e of this.env.model.getters.getSheetIds()){const i=this.env.model.getters.getSheet(e);t.add(e,{name:i.name,sequence:s,isReadonlyAllowed:!0,textColor:i.isVisible?void 0:"#808080",execute:t=>{this.env.model.getters.isSheetVisible(e)||this.env.model.dispatch("SHOW_SHEET",{sheetId:e}),t.model.dispatch("ACTIVATE_SHEET",{sheetIdFrom:o,sheetIdTo:e})},isEnabled:e=>!e.model.getters.isReadonly()||i.isVisible,icon:i.color?"o-spreadsheet-Icon.SMALL_DOT_RIGHT_ALIGN":void 0,iconColor:i.color}),s++}const i=e.currentTarget,{left:n}=i.getBoundingClientRect(),r=this.bottomBarRef.el.getBoundingClientRect().top;this.openContextMenu(n,r,"listSheets",t)}openContextMenu(e,t,o,s){this.menuState.isOpen=!0,this.menuState.menuId=o,this.menuState.menuItems=s.getMenuItems(),this.menuState.anchorRect={x:e,y:t,width:0,height:0}}onSheetContextMenu(e,t,o){const s=o.currentTarget,{top:i,left:n}=s.getBoundingClientRect();o.closedMenuId!==e?this.openContextMenu(n,i,e,t):this.closeMenu()}closeMenu(){this.menuState.isOpen=!1,this.menuState.menuId=void 0,this.menuState.menuItems=[],this.menuState.anchorRect=null}closeContextMenuWithId(e){this.menuState.menuId===e&&this.closeMenu()}onWheel(e){this.targetScroll=void 0;e.currentTarget.scrollLeft+=.5*e.deltaY}onScroll(){this.updateScrollState(),this.targetScroll===this.sheetListCurrentScroll&&(this.targetScroll=void 0)}onArrowLeft(e){if(!this.state.isSheetListScrollableLeft)return;this.targetScroll||(this.targetScroll=this.sheetListCurrentScroll);const t=this.targetScroll-this.sheetListWidth;this.scrollSheetListTo(Math.max(0,t))}onArrowRight(e){if(!this.state.isSheetListScrollableRight)return;this.targetScroll||(this.targetScroll=this.sheetListCurrentScroll);const t=this.targetScroll+this.sheetListWidth;this.scrollSheetListTo(Math.min(this.sheetListMaxScroll,t))}updateScrollState(){this.state.isSheetListScrollableLeft=this.sheetListCurrentScroll>0,this.state.isSheetListScrollableRight=this.sheetListCurrentScroll<this.sheetListMaxScroll}scrollSheetListTo(e){this.sheetListRef.el&&(this.targetScroll=e,this.sheetListRef.el.scrollTo({top:0,left:e,behavior:"smooth"}))}onSheetMouseDown(e,t){if(0!==t.button||this.env.model.getters.isReadonly())return;if(this.closeMenu(),this.env.isMobile())return;const o=this.getVisibleSheets(),s=this.getSheetItemRects(),i=o.map(((e,t)=>({id:e.id,size:s[t].width,position:s[t].x})));this.dragAndDrop.start("horizontal",{draggedItemId:e,initialMousePosition:t.clientX,items:i,scrollableContainerEl:this.sheetListRef.el,onDragEnd:(e,t)=>this.onDragEnd(e,t)})}onDragEnd(e,t){const o=t-this.getVisibleSheets().findIndex((t=>t.id===e));e&&0!==o&&this.env.model.dispatch("MOVE_SHEET",{sheetId:e,delta:o})}getSheetStyle(e){return this.dragAndDrop.itemsStyle[e]||""}getSheetItemRects(){return Array.from(this.bottomBarRef.el.querySelectorAll(".o-sheet")).map((e=>e.getBoundingClientRect())).map((e=>({x:e.x,width:e.width-1,y:e.y,height:e.height})))}get sheetListCurrentScroll(){return this.sheetListRef.el?this.sheetListRef.el.scrollLeft:0}get sheetListWidth(){return this.sheetListRef.el?this.sheetListRef.el.clientWidth:0}get sheetListMaxScroll(){return this.sheetListRef.el?this.sheetListRef.el.scrollWidth-this.sheetListRef.el.clientWidth:0}}class VL extends hh{_clickableCells=t.markRaw({});_registryItems=t.markRaw(SL.getAll().sort(((e,t)=>e.sequence-t.sequence)));handle(e){(Ds.has(e.type)||"EVALUATE_CELLS"===e.type||"UPDATE_CELL"===e.type&&("content"in e||"format"in e))&&(this._clickableCells=t.markRaw({}),this._registryItems=t.markRaw(SL.getAll().sort(((e,t)=>e.sequence-t.sequence))))}getClickableItem(e){const{sheetId:t,col:o,row:s}=e,i=this._clickableCells,n=Oo(o,s);if(i[t]||(i[t]={}),!(n in i[t])){const o=this.findClickableItem(e);o&&(i[t][n]=o)}return i[t][n]}findClickableItem(e){const t=this.getters;for(const o of this._registryItems)if(o.condition(e,t))return o}get clickableCells(){const e=[],t=this.getters,o=t.getActiveSheetId();for(const s of this.getters.getVisibleCellPositions()){const i=this.getClickableItem(s);if(!i)continue;const n="function"==typeof i.title?i.title(s,t):i.title,r=t.expandZone(o,Dr(s));e.push({coordinates:t.getVisibleRect(r),position:s,action:i.execute,title:n||""})}return e}}mh`
2010
+ `;class VL extends t.Component{static template="o-spreadsheet-BottomBar";static props={onClick:Function};static components={MenuPopover:Px,Ripple:FL,BottomBarSheet:PL,BottomBarStatistic:kL};bottomBarRef=t.useRef("bottomBar");sheetListRef=t.useRef("sheetList");dragAndDrop=kE();targetScroll=void 0;state=t.useState({isSheetListScrollableLeft:!1,isSheetListScrollableRight:!1});menuMaxHeight=250;menuState=t.useState({isOpen:!1,menuId:void 0,anchorRect:null,menuItems:[]});sheetList=this.getVisibleSheets();setup(){t.onWillUpdateProps((()=>{this.updateScrollState();const e=this.getVisibleSheets();mt(this.sheetList,e)||this.dragAndDrop.cancel(),this.sheetList=e}))}clickAddSheet(e){const t=this.env.model.getters.getActiveSheetId(),o=this.env.model.getters.getSheetIds().findIndex((e=>e===t))+1,s=this.env.model.uuidGenerator.smallUuid(),i=this.env.model.getters.getNextSheetName(Vo("Sheet"));this.env.model.dispatch("CREATE_SHEET",{sheetId:s,position:o,name:i}),this.env.model.dispatch("ACTIVATE_SHEET",{sheetIdFrom:t,sheetIdTo:s})}getVisibleSheets(){return this.env.model.getters.getVisibleSheetIds().map((e=>{const t=this.env.model.getters.getSheet(e);return{id:t.id,name:t.name}}))}clickListSheets(e){const t=new hR,o=this.env.model.getters.getActiveSheetId();let s=0;for(const e of this.env.model.getters.getSheetIds()){const i=this.env.model.getters.getSheet(e);t.add(e,{name:i.name,sequence:s,isReadonlyAllowed:!0,textColor:i.isVisible?void 0:"#808080",execute:t=>{this.env.model.getters.isSheetVisible(e)||this.env.model.dispatch("SHOW_SHEET",{sheetId:e}),t.model.dispatch("ACTIVATE_SHEET",{sheetIdFrom:o,sheetIdTo:e})},isEnabled:e=>!e.model.getters.isReadonly()||i.isVisible,icon:i.color?"o-spreadsheet-Icon.SMALL_DOT_RIGHT_ALIGN":void 0,iconColor:i.color}),s++}const i=e.currentTarget,{left:n}=i.getBoundingClientRect(),r=this.bottomBarRef.el.getBoundingClientRect().top;this.openContextMenu(n,r,"listSheets",t)}openContextMenu(e,t,o,s){this.menuState.isOpen=!0,this.menuState.menuId=o,this.menuState.menuItems=s.getMenuItems(),this.menuState.anchorRect={x:e,y:t,width:0,height:0}}onSheetContextMenu(e,t,o){const s=o.currentTarget,{top:i,left:n}=s.getBoundingClientRect();o.closedMenuId!==e?this.openContextMenu(n,i,e,t):this.closeMenu()}closeMenu(){this.menuState.isOpen=!1,this.menuState.menuId=void 0,this.menuState.menuItems=[],this.menuState.anchorRect=null}closeContextMenuWithId(e){this.menuState.menuId===e&&this.closeMenu()}onWheel(e){this.targetScroll=void 0;e.currentTarget.scrollLeft+=.5*e.deltaY}onScroll(){this.updateScrollState(),this.targetScroll===this.sheetListCurrentScroll&&(this.targetScroll=void 0)}onArrowLeft(e){if(!this.state.isSheetListScrollableLeft)return;this.targetScroll||(this.targetScroll=this.sheetListCurrentScroll);const t=this.targetScroll-this.sheetListWidth;this.scrollSheetListTo(Math.max(0,t))}onArrowRight(e){if(!this.state.isSheetListScrollableRight)return;this.targetScroll||(this.targetScroll=this.sheetListCurrentScroll);const t=this.targetScroll+this.sheetListWidth;this.scrollSheetListTo(Math.min(this.sheetListMaxScroll,t))}updateScrollState(){this.state.isSheetListScrollableLeft=this.sheetListCurrentScroll>0,this.state.isSheetListScrollableRight=this.sheetListCurrentScroll<this.sheetListMaxScroll}scrollSheetListTo(e){this.sheetListRef.el&&(this.targetScroll=e,this.sheetListRef.el.scrollTo({top:0,left:e,behavior:"smooth"}))}onSheetMouseDown(e,t){if(0!==t.button||this.env.model.getters.isReadonly())return;if(this.closeMenu(),this.env.isMobile())return;const o=this.getVisibleSheets(),s=this.getSheetItemRects(),i=o.map(((e,t)=>({id:e.id,size:s[t].width,position:s[t].x})));this.dragAndDrop.start("horizontal",{draggedItemId:e,initialMousePosition:t.clientX,items:i,scrollableContainerEl:this.sheetListRef.el,onDragEnd:(e,t)=>this.onDragEnd(e,t)})}onDragEnd(e,t){const o=t-this.getVisibleSheets().findIndex((t=>t.id===e));e&&0!==o&&this.env.model.dispatch("MOVE_SHEET",{sheetId:e,delta:o})}getSheetStyle(e){return this.dragAndDrop.itemsStyle[e]||""}getSheetItemRects(){return Array.from(this.bottomBarRef.el.querySelectorAll(".o-sheet")).map((e=>e.getBoundingClientRect())).map((e=>({x:e.x,width:e.width-1,y:e.y,height:e.height})))}get sheetListCurrentScroll(){return this.sheetListRef.el?this.sheetListRef.el.scrollLeft:0}get sheetListWidth(){return this.sheetListRef.el?this.sheetListRef.el.clientWidth:0}get sheetListMaxScroll(){return this.sheetListRef.el?this.sheetListRef.el.scrollWidth-this.sheetListRef.el.clientWidth:0}}class LL extends hh{_clickableCells=t.markRaw({});_registryItems=t.markRaw(CL.getAll().sort(((e,t)=>e.sequence-t.sequence)));handle(e){(Ds.has(e.type)||"EVALUATE_CELLS"===e.type||"UPDATE_CELL"===e.type&&("content"in e||"format"in e))&&(this._clickableCells=t.markRaw({}),this._registryItems=t.markRaw(CL.getAll().sort(((e,t)=>e.sequence-t.sequence))))}getClickableItem(e){const{sheetId:t,col:o,row:s}=e,i=this._clickableCells,n=Oo(o,s);if(i[t]||(i[t]={}),!(n in i[t])){const o=this.findClickableItem(e);o&&(i[t][n]=o)}return i[t][n]}findClickableItem(e){const t=this.getters;for(const o of this._registryItems)if(o.condition(e,t))return o}get clickableCells(){const e=[],t=this.getters,o=t.getActiveSheetId();for(const s of this.getters.getVisibleCellPositions()){const i=this.getClickableItem(s);if(!i)continue;const n="function"==typeof i.title?i.title(s,t):i.title,r=t.expandZone(o,Dr(s));e.push({coordinates:t.getVisibleRect(r),position:s,action:i.execute,title:n||""})}return e}}mh`
2011
2011
  .o-dashboard-clickable-cell {
2012
2012
  position: absolute;
2013
2013
  cursor: pointer;
2014
2014
  }
2015
- `;class LL extends t.Component{static template="o-spreadsheet-SpreadsheetDashboard";static props={getGridSize:Function};static components={GridOverlay:NP,GridPopover:kP,Popover:Dx,VerticalScrollBar:JP,HorizontalScrollBar:KP};cellPopovers;onMouseWheel;canvasPosition;hoveredCell;clickableCellsStore;gridRef;setup(){this.gridRef=t.useRef("grid"),this.hoveredCell=oh(Hx),this.clickableCellsStore=oh(VL),t.useChildSubEnv({getPopoverContainerRect:()=>this.getGridRect()}),GP("canvas",this.env.model,(()=>this.env.model.getters.getSheetViewDimension())),this.onMouseWheel=qP(((e,t)=>{this.moveCanvas(e,t),this.hoveredCell.clear()})),this.cellPopovers=oh(Bx),WP(this.gridRef,this.moveCanvas.bind(this),(()=>{const{scrollY:e}=this.env.model.getters.getActiveSheetScrollInfo();return e>0}))}get gridContainer(){const e=this.env.model.getters.getActiveSheetId(),{right:t}=this.env.model.getters.getSheetZone(e),{end:o}=this.env.model.getters.getColDimensions(e,t);return bh({"max-width":`${o}px`})}get gridOverlayDimensions(){return bh({height:"100%",width:"100%"})}getCellClickableStyle(e){return bh({top:`${e.y}px`,left:`${e.x}px`,width:`${e.width}px`,height:`${e.height}px`})}getClickableCells(){return t.toRaw(this.clickableCellsStore.clickableCells)}selectClickableCell(e,t){const{position:o,action:s}=t;s(o,this.env,vy(e))}onClosePopover(){this.cellPopovers.close()}onGridResized({height:e,width:t}){this.env.model.dispatch("RESIZE_SHEETVIEW",{width:t,height:e,gridOffsetX:0,gridOffsetY:0})}moveCanvas(e,t){const{scrollX:o,scrollY:s}=this.env.model.getters.getActiveSheetScrollInfo();this.env.model.dispatch("SET_VIEWPORT_OFFSET",{offsetX:o+e,offsetY:s+t})}getGridRect(){return{...ly(this.gridRef),...this.env.model.getters.getSheetViewDimensionWithHeaders()}}}mh`
2015
+ `;class HL extends t.Component{static template="o-spreadsheet-SpreadsheetDashboard";static props={getGridSize:Function};static components={GridOverlay:NP,GridPopover:kP,Popover:Dx,VerticalScrollBar:JP,HorizontalScrollBar:KP};cellPopovers;onMouseWheel;canvasPosition;hoveredCell;clickableCellsStore;gridRef;setup(){this.gridRef=t.useRef("grid"),this.hoveredCell=oh(Hx),this.clickableCellsStore=oh(LL),t.useChildSubEnv({getPopoverContainerRect:()=>this.getGridRect()}),GP("canvas",this.env.model,(()=>this.env.model.getters.getSheetViewDimension())),this.onMouseWheel=qP(((e,t)=>{this.moveCanvas(e,t),this.hoveredCell.clear()})),this.cellPopovers=oh(Bx),WP(this.gridRef,this.moveCanvas.bind(this),(()=>{const{scrollY:e}=this.env.model.getters.getActiveSheetScrollInfo();return e>0}))}get gridContainer(){const e=this.env.model.getters.getActiveSheetId(),{right:t}=this.env.model.getters.getSheetZone(e),{end:o}=this.env.model.getters.getColDimensions(e,t);return bh({"max-width":`${o}px`})}get gridOverlayDimensions(){return bh({height:"100%",width:"100%"})}getCellClickableStyle(e){return bh({top:`${e.y}px`,left:`${e.x}px`,width:`${e.width}px`,height:`${e.height}px`})}getClickableCells(){return t.toRaw(this.clickableCellsStore.clickableCells)}selectClickableCell(e,t){const{position:o,action:s}=t;s(o,this.env,vy(e))}onClosePopover(){this.cellPopovers.close()}onGridResized({height:e,width:t}){this.env.model.dispatch("RESIZE_SHEETVIEW",{width:t,height:e,gridOffsetX:0,gridOffsetY:0})}moveCanvas(e,t){const{scrollX:o,scrollY:s}=this.env.model.getters.getActiveSheetScrollInfo();this.env.model.dispatch("SET_VIEWPORT_OFFSET",{offsetX:o+e,offsetY:s+t})}getGridRect(){return{...ly(this.gridRef),...this.env.model.getters.getSheetViewDimensionWithHeaders()}}}mh`
2016
2016
  .o-header-group {
2017
2017
  .o-header-group-header {
2018
2018
  z-index: ${Fe.HeaderGroupingButton};
@@ -2032,7 +2032,7 @@
2032
2032
  }
2033
2033
  }
2034
2034
  }
2035
- `;class HL extends t.Component{static template="o-spreadsheet-HeaderGroup";static props={group:Object,layerOffset:Number,openContextMenu:Function};toggleGroup(){const e=this.env.model.getters.getActiveSheetId(),{start:t,end:o}=this.props.group;rP(this.env,e,this.dimension,t,o)}get groupBoxStyle(){const e=this.groupBox;return bh({top:`${e.groupRect.y}px`,left:`${e.groupRect.x}px`,width:`${e.groupRect.width}px`,height:`${e.groupRect.height}px`})}get groupButtonStyle(){return bh({"background-color":this.isGroupFolded?"#333":"#fff",color:this.isGroupFolded?"#fff":"#333"})}get groupButtonIcon(){return this.isGroupFolded?"o-spreadsheet-Icon.PLUS":"o-spreadsheet-Icon.MINUS"}get isGroupFolded(){const e=this.env.model.getters.getActiveSheetId(),t=this.props.group;return this.env.model.getters.isGroupFolded(e,this.dimension,t.start,t.end)}onContextMenu(e){const t=this.env.model.getters.getActiveSheetId(),s={x:e.clientX,y:e.clientY},i=this.props.group,n=function(e,t,s,i){const n=o([{id:"toggle_group",name:e=>{const o=e.model.getters.getActiveSheetId(),n=e.model.getters.isGroupFolded(o,t,s,i);return Vo(n?"ROW"===t?"Expand row group":"Expand column group":"ROW"===t?"Collapse row group":"Collapse column group")},execute:e=>{const o=e.model.getters.getActiveSheetId();rP(e,o,t,s,i)}},{id:"remove_group",name:Vo("ROW"===t?"Remove row group":"Remove column group"),execute:e=>{const o=e.model.getters.getActiveSheetId();e.model.dispatch("UNGROUP_HEADERS",{sheetId:o,dimension:t,start:s,end:i})},separator:!0}]);return[...n,...aP(e,t)]}(t,this.dimension,i.start,i.end);this.props.openContextMenu(s,n)}}class UL extends HL{dimension="ROW";get groupBorderStyle(){const e=this.groupBox;return 0===this.groupBox.groupRect.height?"":bh({top:e.headerRect.height/2+"px",left:"calc(50% - 1px)",width:"30%",height:`calc(100% - ${e.headerRect.height/2}px)`,"border-left":`1px solid ${w}`,"border-bottom":e.isEndHidden?"":`1px solid ${w}`})}get groupHeaderStyle(){return bh({width:"100%",height:`${this.groupBox.headerRect.height}px`})}get groupBox(){const e=this.env.model.getters.getActiveSheetId(),{start:t,end:o}=this.props.group,s=this.env.model.getters.getRowDimensions(e,t).start,i=this.env.model.getters.getRowDimensions(e,o).end;let n=0,r=te;if(0!==t){const o=this.env.model.getters.getRowDimensions(e,t-1);n=te+o.start,r=o.end-o.start}const a={x:this.props.layerOffset,y:n,width:ce,height:r};return{headerRect:a,groupRect:{x:this.props.layerOffset,y:a.y,width:ce,height:a.height+(i-s)},isEndHidden:this.env.model.getters.isRowHidden(e,o)}}}class BL extends HL{dimension="COL";get groupBorderStyle(){const e=this.groupBox;return 0===e.groupRect.width?"":bh({top:"calc(50% - 1px)",left:e.headerRect.width/2+"px",width:`calc(100% - ${e.headerRect.width/2}px)`,height:"30%","border-top":`1px solid ${w}`,"border-right":e.isEndHidden?"":`1px solid ${w}`})}get groupHeaderStyle(){return bh({width:`${this.groupBox.headerRect.width}px`,height:"100%"})}get groupBox(){const e=this.env.model.getters.getActiveSheetId(),{start:t,end:o}=this.props.group,s=this.env.model.getters.getColDimensions(e,t).start,i=this.env.model.getters.getColDimensions(e,o).end;let n=0,r=oe;if(0!==t){const o=this.env.model.getters.getColDimensions(e,t-1);n=oe+o.start,r=o.end-o.start}const a={x:n,y:this.props.layerOffset,width:r,height:ce};return{headerRect:a,groupRect:{x:a.x,y:this.props.layerOffset,width:a.width+(i-s),height:ce},isEndHidden:this.env.model.getters.isColHidden(e,o)}}}mh`
2035
+ `;class UL extends t.Component{static template="o-spreadsheet-HeaderGroup";static props={group:Object,layerOffset:Number,openContextMenu:Function};toggleGroup(){const e=this.env.model.getters.getActiveSheetId(),{start:t,end:o}=this.props.group;rP(this.env,e,this.dimension,t,o)}get groupBoxStyle(){const e=this.groupBox;return bh({top:`${e.groupRect.y}px`,left:`${e.groupRect.x}px`,width:`${e.groupRect.width}px`,height:`${e.groupRect.height}px`})}get groupButtonStyle(){return bh({"background-color":this.isGroupFolded?"#333":"#fff",color:this.isGroupFolded?"#fff":"#333"})}get groupButtonIcon(){return this.isGroupFolded?"o-spreadsheet-Icon.PLUS":"o-spreadsheet-Icon.MINUS"}get isGroupFolded(){const e=this.env.model.getters.getActiveSheetId(),t=this.props.group;return this.env.model.getters.isGroupFolded(e,this.dimension,t.start,t.end)}onContextMenu(e){const t=this.env.model.getters.getActiveSheetId(),s={x:e.clientX,y:e.clientY},i=this.props.group,n=function(e,t,s,i){const n=o([{id:"toggle_group",name:e=>{const o=e.model.getters.getActiveSheetId(),n=e.model.getters.isGroupFolded(o,t,s,i);return Vo(n?"ROW"===t?"Expand row group":"Expand column group":"ROW"===t?"Collapse row group":"Collapse column group")},execute:e=>{const o=e.model.getters.getActiveSheetId();rP(e,o,t,s,i)}},{id:"remove_group",name:Vo("ROW"===t?"Remove row group":"Remove column group"),execute:e=>{const o=e.model.getters.getActiveSheetId();e.model.dispatch("UNGROUP_HEADERS",{sheetId:o,dimension:t,start:s,end:i})},separator:!0}]);return[...n,...aP(e,t)]}(t,this.dimension,i.start,i.end);this.props.openContextMenu(s,n)}}class BL extends UL{dimension="ROW";get groupBorderStyle(){const e=this.groupBox;return 0===this.groupBox.groupRect.height?"":bh({top:e.headerRect.height/2+"px",left:"calc(50% - 1px)",width:"30%",height:`calc(100% - ${e.headerRect.height/2}px)`,"border-left":`1px solid ${w}`,"border-bottom":e.isEndHidden?"":`1px solid ${w}`})}get groupHeaderStyle(){return bh({width:"100%",height:`${this.groupBox.headerRect.height}px`})}get groupBox(){const e=this.env.model.getters.getActiveSheetId(),{start:t,end:o}=this.props.group,s=this.env.model.getters.getRowDimensions(e,t).start,i=this.env.model.getters.getRowDimensions(e,o).end;let n=0,r=te;if(0!==t){const o=this.env.model.getters.getRowDimensions(e,t-1);n=te+o.start,r=o.end-o.start}const a={x:this.props.layerOffset,y:n,width:ce,height:r};return{headerRect:a,groupRect:{x:this.props.layerOffset,y:a.y,width:ce,height:a.height+(i-s)},isEndHidden:this.env.model.getters.isRowHidden(e,o)}}}class zL extends UL{dimension="COL";get groupBorderStyle(){const e=this.groupBox;return 0===e.groupRect.width?"":bh({top:"calc(50% - 1px)",left:e.headerRect.width/2+"px",width:`calc(100% - ${e.headerRect.width/2}px)`,height:"30%","border-top":`1px solid ${w}`,"border-right":e.isEndHidden?"":`1px solid ${w}`})}get groupHeaderStyle(){return bh({width:`${this.groupBox.headerRect.width}px`,height:"100%"})}get groupBox(){const e=this.env.model.getters.getActiveSheetId(),{start:t,end:o}=this.props.group,s=this.env.model.getters.getColDimensions(e,t).start,i=this.env.model.getters.getColDimensions(e,o).end;let n=0,r=oe;if(0!==t){const o=this.env.model.getters.getColDimensions(e,t-1);n=oe+o.start,r=o.end-o.start}const a={x:n,y:this.props.layerOffset,width:r,height:ce};return{headerRect:a,groupRect:{x:a.x,y:this.props.layerOffset,width:a.width+(i-s),height:ce},isEndHidden:this.env.model.getters.isColHidden(e,o)}}}mh`
2036
2036
  .o-header-group-frozen-pane-border {
2037
2037
  &.o-group-rows {
2038
2038
  margin-top: -1px;
@@ -2052,7 +2052,7 @@
2052
2052
  margin-left: -2px;
2053
2053
  }
2054
2054
  }
2055
- `;class zL extends t.Component{static template="o-spreadsheet-HeaderGroupContainer";static props={dimension:String,layers:Array};static components={RowGroup:UL,ColGroup:BL,MenuPopover:Px};menu=t.useState({isOpen:!1,anchorRect:null,menuItems:[]});getLayerOffset(e){return e*ce}onContextMenu(e){const t=this.env.model.getters.getActiveSheetId(),o={x:e.clientX,y:e.clientY},s=aP(t,this.props.dimension);this.openContextMenu(o,s)}openContextMenu(e,t){this.menu.isOpen=!0,this.menu.anchorRect={...e,width:0,height:0},this.menu.menuItems=t}closeMenu(){this.menu.isOpen=!1,this.menu.anchorRect=null,this.menu.menuItems=[]}get groupComponent(){return"ROW"===this.props.dimension?UL:BL}get hasFrozenPane(){const e=this.env.model.getters.getMainViewportCoordinates();return"COL"===this.props.dimension?e.x>0:e.y>0}get scrollContainerStyle(){const{scrollX:e,scrollY:t}=this.env.model.getters.getActiveSheetScrollInfo(),o={};return"COL"===this.props.dimension?o.left=-e-this.frozenPaneContainerSize+"px":o.top=-t-this.frozenPaneContainerSize+"px",bh(o)}get frozenPaneContainerStyle(){const e={};return"COL"===this.props.dimension?e.width=`${this.frozenPaneContainerSize}px`:e.height=`${this.frozenPaneContainerSize}px`,bh(e)}get frozenPaneContainerSize(){if(!this.hasFrozenPane)return 0;const e=this.env.model.getters.getMainViewportCoordinates();return"COL"===this.props.dimension?oe+e.x:te+e.y}}mh`
2055
+ `;class $L extends t.Component{static template="o-spreadsheet-HeaderGroupContainer";static props={dimension:String,layers:Array};static components={RowGroup:BL,ColGroup:zL,MenuPopover:Px};menu=t.useState({isOpen:!1,anchorRect:null,menuItems:[]});getLayerOffset(e){return e*ce}onContextMenu(e){const t=this.env.model.getters.getActiveSheetId(),o={x:e.clientX,y:e.clientY},s=aP(t,this.props.dimension);this.openContextMenu(o,s)}openContextMenu(e,t){this.menu.isOpen=!0,this.menu.anchorRect={...e,width:0,height:0},this.menu.menuItems=t}closeMenu(){this.menu.isOpen=!1,this.menu.anchorRect=null,this.menu.menuItems=[]}get groupComponent(){return"ROW"===this.props.dimension?BL:zL}get hasFrozenPane(){const e=this.env.model.getters.getMainViewportCoordinates();return"COL"===this.props.dimension?e.x>0:e.y>0}get scrollContainerStyle(){const{scrollX:e,scrollY:t}=this.env.model.getters.getActiveSheetScrollInfo(),o={};return"COL"===this.props.dimension?o.left=-e-this.frozenPaneContainerSize+"px":o.top=-t-this.frozenPaneContainerSize+"px",bh(o)}get frozenPaneContainerStyle(){const e={};return"COL"===this.props.dimension?e.width=`${this.frozenPaneContainerSize}px`:e.height=`${this.frozenPaneContainerSize}px`,bh(e)}get frozenPaneContainerSize(){if(!this.hasFrozenPane)return 0;const e=this.env.model.getters.getMainViewportCoordinates();return"COL"===this.props.dimension?oe+e.x:te+e.y}}mh`
2056
2056
  .o-sidePanel {
2057
2057
  display: flex;
2058
2058
  flex-direction: column;
@@ -2166,11 +2166,11 @@
2166
2166
  .o-fw-bold {
2167
2167
  font-weight: 500;
2168
2168
  }
2169
- `;class $L extends t.Component{static template="o-spreadsheet-SidePanel";static props={panelContent:Object,panelProps:Object,onCloseSidePanel:Function,onStartHandleDrag:Function,onResetPanelSize:Function,isPinned:{type:Boolean,optional:!0},onTogglePinPanel:{type:Function,optional:!0},onToggleCollapsePanel:{type:Function,optional:!0},isCollapsed:{type:Boolean,optional:!0}};spreadsheetRect=Ax();getTitle(){const e=this.props.panelContent;return"function"==typeof e.title?e.title(this.env,this.props.panelProps):e.title}get pinInfoMessage(){return Vo("Pin this panel to allow to open another side panel beside it.")}}class GL extends t.Component{static template="o-spreadsheet-SidePanels";static props={};static components={SidePanel:$L};sidePanelStore;spreadsheetRect=Ax();setup(){this.sidePanelStore=oh(vk),t.useEffect((()=>{this.sidePanelStore.mainPanel&&!this.sidePanelStore.isMainPanelOpen&&this.sidePanelStore.closeMainPanel(),this.sidePanelStore.secondaryPanel&&!this.sidePanelStore.isSecondaryPanelOpen&&this.sidePanelStore.close()}),(()=>[this.sidePanelStore.isMainPanelOpen,this.sidePanelStore.isSecondaryPanelOpen]))}startHandleDrag(e,t){const o=document.body.style.cursor,s="mainPanel"===e?this.sidePanelStore.mainPanel:this.sidePanelStore.secondaryPanel;if(!s)return;const i=s.size,n=t.clientX;_E((t=>{document.body.style.cursor="col-resize";const o=i+n-t.clientX;this.sidePanelStore.changePanelSize(e,o)}),(()=>{document.body.style.cursor=o}))}get mainPanelProps(){const e=this.sidePanelStore.mainPanelProps;if(this.sidePanelStore.mainPanel&&e)return{panelContent:gk.get(this.sidePanelStore.mainPanel.componentTag),panelProps:e,onCloseSidePanel:()=>this.sidePanelStore.closeMainPanel(),onTogglePinPanel:()=>this.sidePanelStore.togglePinPanel(),onStartHandleDrag:e=>this.startHandleDrag("mainPanel",e),onResetPanelSize:()=>this.sidePanelStore.resetPanelSize("mainPanel"),isPinned:this.sidePanelStore.mainPanel?.isPinned,onToggleCollapsePanel:()=>this.sidePanelStore.toggleCollapsePanel("mainPanel"),isCollapsed:this.sidePanelStore.mainPanel?.isCollapsed}}get secondaryPanelProps(){const e=this.sidePanelStore.secondaryPanelProps;if(this.sidePanelStore.secondaryPanel&&e)return{panelContent:gk.get(this.sidePanelStore.secondaryPanel.componentTag),panelProps:e,onCloseSidePanel:()=>this.sidePanelStore.close(),onStartHandleDrag:e=>this.startHandleDrag("secondaryPanel",e),onResetPanelSize:()=>this.sidePanelStore.resetPanelSize("secondaryPanel"),onToggleCollapsePanel:()=>this.sidePanelStore.toggleCollapsePanel("secondaryPanel"),isCollapsed:this.sidePanelStore.secondaryPanel?.isCollapsed}}get panelList(){return[{key:this.sidePanelStore.secondaryPanelKey,props:this.secondaryPanelProps,style:this.sidePanelStore.secondaryPanel?bh({width:`${this.sidePanelStore.secondaryPanel.size}px`}):""},{key:this.sidePanelStore.mainPanelKey,props:this.mainPanelProps,style:this.sidePanelStore.mainPanel?bh({width:`${this.sidePanelStore.mainPanel.size}px`}):""}].filter((e=>e.key&&e.props))}}class WL extends t.Component{static template="o-spreadsheet-RibbonMenu";static props={onClose:Function};static components={Menu:Ex};rootItems=EL.getMenuItems();menuRef=t.useRef("menu");state=t.useState({menuItems:this.rootItems,title:Vo("Menu Bar"),parentState:void 0});setup(){t.useExternalListener(window,"click",this.onExternalClick,{capture:!0})}onExternalClick(e){this.menuRef.el?.contains(e.target)||this.props.onClose()}onClickMenu(e){const t=e.children(this.env);t.length?(this.state.parentState={...this.state},this.state.menuItems=t,this.state.title=e.name(this.env)):(this.state.menuItems=this.rootItems,this.state.title=void 0,this.state.parentState=void 0,e.execute?.(this.env),this.props.onClose())}get menuProps(){return{menuItems:this.state.menuItems,onClose:this.props.onClose,onClickMenu:this.onClickMenu.bind(this)}}get style(){return bh({height:`${this.props.height}px`})}onClickBack(){this.state.parentState?(this.state.menuItems=this.state.parentState.menuItems,this.state.title=this.state.parentState.title,this.state.parentState=this.state.parentState.parentState):this.props.onClose()}get backTitle(){return this.state.parentState?Vo("Go to previous menu"):Vo("Close menu bar")}}mh`
2169
+ `;class GL extends t.Component{static template="o-spreadsheet-SidePanel";static props={panelContent:Object,panelProps:Object,onCloseSidePanel:Function,onStartHandleDrag:Function,onResetPanelSize:Function,isPinned:{type:Boolean,optional:!0},onTogglePinPanel:{type:Function,optional:!0},onToggleCollapsePanel:{type:Function,optional:!0},isCollapsed:{type:Boolean,optional:!0}};spreadsheetRect=Ax();getTitle(){const e=this.props.panelContent;return"function"==typeof e.title?e.title(this.env,this.props.panelProps):e.title}get pinInfoMessage(){return Vo("Pin this panel to allow to open another side panel beside it.")}}class WL extends t.Component{static template="o-spreadsheet-SidePanels";static props={};static components={SidePanel:GL};sidePanelStore;spreadsheetRect=Ax();setup(){this.sidePanelStore=oh(vk),t.useEffect((()=>{this.sidePanelStore.mainPanel&&!this.sidePanelStore.isMainPanelOpen&&this.sidePanelStore.closeMainPanel(),this.sidePanelStore.secondaryPanel&&!this.sidePanelStore.isSecondaryPanelOpen&&this.sidePanelStore.close()}),(()=>[this.sidePanelStore.isMainPanelOpen,this.sidePanelStore.isSecondaryPanelOpen]))}startHandleDrag(e,t){const o=document.body.style.cursor,s="mainPanel"===e?this.sidePanelStore.mainPanel:this.sidePanelStore.secondaryPanel;if(!s)return;const i=s.size,n=t.clientX;_E((t=>{document.body.style.cursor="col-resize";const o=i+n-t.clientX;this.sidePanelStore.changePanelSize(e,o)}),(()=>{document.body.style.cursor=o}))}get mainPanelProps(){const e=this.sidePanelStore.mainPanelProps;if(this.sidePanelStore.mainPanel&&e)return{panelContent:gk.get(this.sidePanelStore.mainPanel.componentTag),panelProps:e,onCloseSidePanel:()=>this.sidePanelStore.closeMainPanel(),onTogglePinPanel:()=>this.sidePanelStore.togglePinPanel(),onStartHandleDrag:e=>this.startHandleDrag("mainPanel",e),onResetPanelSize:()=>this.sidePanelStore.resetPanelSize("mainPanel"),isPinned:this.sidePanelStore.mainPanel?.isPinned,onToggleCollapsePanel:()=>this.sidePanelStore.toggleCollapsePanel("mainPanel"),isCollapsed:this.sidePanelStore.mainPanel?.isCollapsed}}get secondaryPanelProps(){const e=this.sidePanelStore.secondaryPanelProps;if(this.sidePanelStore.secondaryPanel&&e)return{panelContent:gk.get(this.sidePanelStore.secondaryPanel.componentTag),panelProps:e,onCloseSidePanel:()=>this.sidePanelStore.close(),onStartHandleDrag:e=>this.startHandleDrag("secondaryPanel",e),onResetPanelSize:()=>this.sidePanelStore.resetPanelSize("secondaryPanel"),onToggleCollapsePanel:()=>this.sidePanelStore.toggleCollapsePanel("secondaryPanel"),isCollapsed:this.sidePanelStore.secondaryPanel?.isCollapsed}}get panelList(){return[{key:this.sidePanelStore.secondaryPanelKey,props:this.secondaryPanelProps,style:this.sidePanelStore.secondaryPanel?bh({width:`${this.sidePanelStore.secondaryPanel.size}px`}):""},{key:this.sidePanelStore.mainPanelKey,props:this.mainPanelProps,style:this.sidePanelStore.mainPanel?bh({width:`${this.sidePanelStore.mainPanel.size}px`}):""}].filter((e=>e.key&&e.props))}}class qL extends t.Component{static template="o-spreadsheet-RibbonMenu";static props={onClose:Function};static components={Menu:Ex};rootItems=RL.getMenuItems();menuRef=t.useRef("menu");state=t.useState({menuItems:this.rootItems,title:Vo("Menu Bar"),parentState:void 0});setup(){t.useExternalListener(window,"click",this.onExternalClick,{capture:!0})}onExternalClick(e){this.menuRef.el?.contains(e.target)||this.props.onClose()}onClickMenu(e){const t=e.children(this.env);t.length?(this.state.parentState={...this.state},this.state.menuItems=t,this.state.title=e.name(this.env)):(this.state.menuItems=this.rootItems,this.state.title=void 0,this.state.parentState=void 0,e.execute?.(this.env),this.props.onClose())}get menuProps(){return{menuItems:this.state.menuItems,onClose:this.props.onClose,onClickMenu:this.onClickMenu.bind(this)}}get style(){return bh({height:`${this.props.height}px`})}onClickBack(){this.state.parentState?(this.state.menuItems=this.state.parentState.menuItems,this.state.title=this.state.parentState.title,this.state.parentState=this.state.parentState.parentState):this.props.onClose()}get backTitle(){return this.state.parentState?Vo("Go to previous menu"):Vo("Close menu bar")}}mh`
2170
2170
  .o-small-composer {
2171
2171
  z-index: ${Fe.TopBarComposer};
2172
2172
  }
2173
- `;class qL extends t.Component{static components={Composer:wE,BottomBar:kL,Ripple:OL,RibbonMenu:WL};static template="o-spreadsheet-SmallBottomBar";static props={onClick:Function};composerFocusStore;composerStore;composerInterface;composerRef=t.useRef("bottombarComposer");menuState=t.useState({isOpen:!1});setup(){this.composerFocusStore=oh(uh);const e=oh(SP);this.composerStore=e,this.composerInterface={id:"bottombarComposer",get editionMode(){return e.editionMode},startEdition:this.composerStore.startEdition,setCurrentContent:this.composerStore.setCurrentContent,stopEdition:this.composerStore.stopEdition},t.useEffect((()=>{this.env.isMobile()&&!this.menuState.isOpen&&"inactive"!==this.composerStore.editionMode&&this.composerFocusStore.activeComposer!==this.composerInterface&&this.composerFocusStore.focusComposer(this.composerInterface,{focusMode:"contentFocus"})}))}get focus(){return this.composerFocusStore.activeComposer===this.composerInterface?this.composerFocusStore.focusMode:"inactive"}get rect(){return this.composerRef.el?cy(this.composerRef.el):{x:0,y:0,width:0,height:0}}get composerProps(){const{width:e,height:t}=this.env.model.getters.getSheetViewDimensionWithHeaders();return{rect:{...this.rect},delimitation:{width:e,height:t},focus:this.focus,composerStore:this.composerStore,onComposerContentFocused:()=>this.composerFocusStore.focusComposer(this.composerInterface,{focusMode:"contentFocus"}),isDefaultFocus:!1,inputStyle:bh({height:"inactive"===this.focus?"26px":"fit-content","max-height":"130px"}),showAssistant:!Cy()}}get symbols(){return["=","(",")",":","-","/","*",",","+","$","."]}insertSymbol(e){this.composerStore.replaceComposerCursorSelection(e),this.composerFocusStore.focusComposer(this.composerInterface,{focusMode:"contentFocus"})}toggleRibbon(){this.composerStore.cancelEdition(),this.menuState.isOpen=!this.menuState.isOpen}}mh`
2173
+ `;class ZL extends t.Component{static components={Composer:wE,BottomBar:VL,Ripple:FL,RibbonMenu:qL};static template="o-spreadsheet-SmallBottomBar";static props={onClick:Function};composerFocusStore;composerStore;composerInterface;composerRef=t.useRef("bottombarComposer");menuState=t.useState({isOpen:!1});setup(){this.composerFocusStore=oh(uh);const e=oh(SP);this.composerStore=e,this.composerInterface={id:"bottombarComposer",get editionMode(){return e.editionMode},startEdition:this.composerStore.startEdition,setCurrentContent:this.composerStore.setCurrentContent,stopEdition:this.composerStore.stopEdition},t.useEffect((()=>{this.env.isMobile()&&!this.menuState.isOpen&&"inactive"!==this.composerStore.editionMode&&this.composerFocusStore.activeComposer!==this.composerInterface&&this.composerFocusStore.focusComposer(this.composerInterface,{focusMode:"contentFocus"})}))}get focus(){return this.composerFocusStore.activeComposer===this.composerInterface?this.composerFocusStore.focusMode:"inactive"}get rect(){return this.composerRef.el?cy(this.composerRef.el):{x:0,y:0,width:0,height:0}}get composerProps(){const{width:e,height:t}=this.env.model.getters.getSheetViewDimensionWithHeaders();return{rect:{...this.rect},delimitation:{width:e,height:t},focus:this.focus,composerStore:this.composerStore,onComposerContentFocused:()=>this.composerFocusStore.focusComposer(this.composerInterface,{focusMode:"contentFocus"}),isDefaultFocus:!1,inputStyle:bh({height:"inactive"===this.focus?"26px":"fit-content","max-height":"130px"}),showAssistant:!Cy()}}get symbols(){return["=","(",")",":","-","/","*",",","+","$","."]}insertSymbol(e){this.composerStore.replaceComposerCursorSelection(e),this.composerFocusStore.focusComposer(this.composerInterface,{focusMode:"contentFocus"})}toggleRibbon(){this.composerStore.cancelEdition(),this.menuState.isOpen=!this.menuState.isOpen}}mh`
2174
2174
  .o-topbar-composer-container {
2175
2175
  height: ${34}px;
2176
2176
  }
@@ -2194,7 +2194,7 @@
2194
2194
  .user-select-text {
2195
2195
  user-select: text;
2196
2196
  }
2197
- `;class ZL extends t.Component{static template="o-spreadsheet-TopBarComposer";static props={};static components={Composer:wE};composerFocusStore;composerStore;composerInterface;setup(){this.composerFocusStore=oh(uh);const e=oh(SP);this.composerStore=e,this.composerInterface={id:"topbarComposer",get editionMode(){return e.editionMode},startEdition:this.composerStore.startEdition,setCurrentContent:this.composerStore.setCurrentContent,stopEdition:this.composerStore.stopEdition}}get focus(){return this.composerFocusStore.activeComposer===this.composerInterface?this.composerFocusStore.focusMode:"inactive"}get composerStyle(){const e={padding:"5px 0px 5px 8px","max-height":"100px","line-height":"24px"};return e.height="inactive"===this.focus?"34px":"fit-content",bh(e)}get containerStyle(){return"inactive"===this.focus?bh({"border-color":C,"border-right":"none"}):bh({"border-color":p,"z-index":String(Fe.TopBarComposer)})}onFocus(e){this.composerFocusStore.focusComposer(this.composerInterface,{selection:e})}}class jL{mutators=["closeDropdowns","openDropdown"];_currentDropdown=null;closeDropdowns(){this._currentDropdown=null}openDropdown(e){this._currentDropdown=e}get currentDropdown(){return this._currentDropdown}}function YL(){const e=t.useComponent(),o=oh(jL);return t.onWillUnmount((()=>{e===o.currentDropdown&&o.closeDropdowns()})),{closeDropdowns:()=>o.closeDropdowns(),openDropdown:()=>{o.openDropdown(e)},get isActive(){return o.currentDropdown===e}}}const XL=[[["all","o-spreadsheet-Icon.BORDERS"],["hv","o-spreadsheet-Icon.BORDER_HV"],["h","o-spreadsheet-Icon.BORDER_H"],["v","o-spreadsheet-Icon.BORDER_V"],["external","o-spreadsheet-Icon.BORDER_EXTERNAL"]],[["left","o-spreadsheet-Icon.BORDER_LEFT"],["top","o-spreadsheet-Icon.BORDER_TOP"],["right","o-spreadsheet-Icon.BORDER_RIGHT"],["bottom","o-spreadsheet-Icon.BORDER_BOTTOM"],["clear","o-spreadsheet-Icon.BORDER_CLEAR"]]];mh`
2197
+ `;class jL extends t.Component{static template="o-spreadsheet-TopBarComposer";static props={};static components={Composer:wE};composerFocusStore;composerStore;composerInterface;setup(){this.composerFocusStore=oh(uh);const e=oh(SP);this.composerStore=e,this.composerInterface={id:"topbarComposer",get editionMode(){return e.editionMode},startEdition:this.composerStore.startEdition,setCurrentContent:this.composerStore.setCurrentContent,stopEdition:this.composerStore.stopEdition}}get focus(){return this.composerFocusStore.activeComposer===this.composerInterface?this.composerFocusStore.focusMode:"inactive"}get composerStyle(){const e={padding:"5px 0px 5px 8px","max-height":"100px","line-height":"24px"};return e.height="inactive"===this.focus?"34px":"fit-content",bh(e)}get containerStyle(){return"inactive"===this.focus?bh({"border-color":C,"border-right":"none"}):bh({"border-color":p,"z-index":String(Fe.TopBarComposer)})}onFocus(e){this.composerFocusStore.focusComposer(this.composerInterface,{selection:e})}}class YL{mutators=["closeDropdowns","openDropdown"];_currentDropdown=null;closeDropdowns(){this._currentDropdown=null}openDropdown(e){this._currentDropdown=e}get currentDropdown(){return this._currentDropdown}}function XL(){const e=t.useComponent(),o=oh(YL);return t.onWillUnmount((()=>{e===o.currentDropdown&&o.closeDropdowns()})),{closeDropdowns:()=>o.closeDropdowns(),openDropdown:()=>{o.openDropdown(e)},get isActive(){return o.currentDropdown===e}}}const KL=[[["all","o-spreadsheet-Icon.BORDERS"],["hv","o-spreadsheet-Icon.BORDER_HV"],["h","o-spreadsheet-Icon.BORDER_H"],["v","o-spreadsheet-Icon.BORDER_V"],["external","o-spreadsheet-Icon.BORDER_EXTERNAL"]],[["left","o-spreadsheet-Icon.BORDER_LEFT"],["top","o-spreadsheet-Icon.BORDER_TOP"],["right","o-spreadsheet-Icon.BORDER_RIGHT"],["bottom","o-spreadsheet-Icon.BORDER_BOTTOM"],["clear","o-spreadsheet-Icon.BORDER_CLEAR"]]];mh`
2198
2198
  .o-border-selector {
2199
2199
  padding: 4px;
2200
2200
  background-color: white;
@@ -2266,7 +2266,7 @@
2266
2266
  height: 25px !important;
2267
2267
  }
2268
2268
  }
2269
- `;class KL extends t.Component{static template="o-spreadsheet-BorderEditor";static props={class:{type:String,optional:!0},currentBorderColor:{type:String,optional:!1},currentBorderStyle:{type:String,optional:!1},currentBorderPosition:{type:String,optional:!0},onBorderColorPicked:Function,onBorderStylePicked:Function,onBorderPositionPicked:Function,maxHeight:{type:Number,optional:!0},anchorRect:Object};static components={ColorPickerWidget:aM,Popover:Dx};BORDER_POSITIONS=XL;lineStyleButtonRef=t.useRef("lineStyleButton");borderStyles=Gs;state=t.useState({activeTool:void 0});toggleDropdownTool(e){const t=this.state.activeTool===e;this.state.activeTool=t?void 0:e}closeDropdown(){this.state.activeTool=void 0}setBorderPosition(e){this.props.onBorderPositionPicked(e),this.closeDropdown()}setBorderColor(e){this.props.onBorderColorPicked(e),this.closeDropdown()}setBorderStyle(e){this.props.onBorderStylePicked(e),this.closeDropdown()}get lineStylePickerPopoverProps(){return{anchorRect:this.lineStylePickerAnchorRect,positioning:"bottom-left",verticalOffset:0}}get popoverProps(){return{anchorRect:this.props.anchorRect,maxHeight:this.props.maxHeight,positioning:"bottom-left",verticalOffset:0}}get lineStylePickerAnchorRect(){const e=this.lineStyleButtonRef.el;if(null===e)return{x:0,y:0,width:0,height:0};const t=e.getBoundingClientRect();return{x:t.x,y:t.y,width:t.width,height:t.height}}}class JL extends t.Component{static template="o-spreadsheet-BorderEditorWidget";static props={disabled:{type:Boolean,optional:!0},dropdownMaxHeight:{type:Number,optional:!0},class:{type:String,optional:!0}};static components={BorderEditor:KL};topBarToolStore;borderEditorButtonRef=t.useRef("borderEditorButton");state=t.useState({currentColor:be,currentStyle:ve,currentPosition:void 0});setup(){this.topBarToolStore=YL(),t.onWillUpdateProps((()=>{this.isActive||(this.state.currentPosition=void 0)}))}get dropdownMaxHeight(){return this.env.model.getters.getSheetViewDimension().height}get borderEditorAnchorRect(){const e=this.borderEditorButtonRef.el.getBoundingClientRect();return{x:e.x,y:e.y,width:e.width,height:e.height}}onBorderPositionPicked(e){this.state.currentPosition=e,this.updateBorder()}onBorderColorPicked(e){this.state.currentColor=e,this.updateBorder()}onBorderStylePicked(e){this.state.currentStyle=e,this.updateBorder()}get isActive(){return this.topBarToolStore.isActive}toggleBorderEditor(){this.isActive?this.topBarToolStore.closeDropdowns():this.topBarToolStore.openDropdown()}updateBorder(){void 0!==this.state.currentPosition&&this.env.model.dispatch("SET_ZONE_BORDERS",{sheetId:this.env.model.getters.getActiveSheetId(),target:this.env.model.getters.getSelectedZones(),border:{position:this.state.currentPosition,color:this.state.currentColor,style:this.state.currentStyle}})}}class QL extends t.Component{static template="o-spreadsheet-PaintFormatButton";static props={class:{type:String,optional:!0}};paintFormatStore;setup(){this.paintFormatStore=oh(OP)}get isActive(){return this.paintFormatStore.isActive}onDblClick(){this.paintFormatStore.activate({persistent:!0})}togglePaintFormat(){this.isActive?this.paintFormatStore.cancel():this.paintFormatStore.activate({persistent:!1})}}class eH extends t.Component{static template="o-spreadsheet-TableDropdownButton";static components={TableStylesPopover:lk,ActionButton:rM};static props={class:{type:String,optional:!0}};topBarToolStore;state=t.useState({popoverProps:void 0});setup(){this.topBarToolStore=YL()}onStylePicked(e){const t=this.env.model.getters.getActiveSheetId(),o={...this.tableConfig,styleId:e};fD(this.env,t,o).isSuccessful&&this.env.openSidePanel("TableSidePanel",{}),this.closePopover()}onClick(e){if(e.hasClosedTableStylesPopover||this.state.popoverProps)return void this.closePopover();if(this.env.model.getters.getFirstTableInSelection())return this.topBarToolStore.closeDropdowns(),void this.env.toggleSidePanel("TableSidePanel",{});const t=e.currentTarget,{left:o,bottom:s}=t.getBoundingClientRect();this.topBarToolStore.openDropdown(),this.state.popoverProps={anchorRect:{x:o,y:s,width:0,height:0},positioning:"bottom-left",verticalOffset:0}}closePopover(){this.state.popoverProps=void 0}get action(){return{name:e=>e.model.getters.getFirstTableInSelection()?Vo("Edit table"):Vo("Insert table"),icon:e=>e.model.getters.getFirstTableInSelection()?"o-spreadsheet-Icon.EDIT_TABLE":"o-spreadsheet-Icon.PAINT_TABLE"}}get tableConfig(){return{...mR,numberOfHeaders:1,bandedRows:!0}}}class tH extends t.Component{static components={ColorPickerWidget:aM};static props={class:String,style:String,icon:String,title:String};static template="o-spreadsheet-ColorEditor";topBarToolStore;state=t.useState({isOpen:!1});setup(){this.topBarToolStore=YL()}get currentColor(){return this.env.model.getters.getCurrentStyle()[this.props.style]||("textColor"===this.props.style?"#000000":"#ffffff")}setColor(e){bD(this.env,{[this.props.style]:e}),this.state.isOpen=!1}get isMenuOpen(){return this.topBarToolStore.isActive}onClick(){this.isMenuOpen?this.topBarToolStore.closeDropdowns():this.topBarToolStore.openDropdown()}}class oH extends t.Component{static template="o-spreadsheet-DropdownAction";static components={ActionButton:rM,Popover:Dx};static props={parentAction:Object,childActions:Array,class:String,childClass:String};topBarToolStore;actionRef=t.useRef("actionRef");setup(){this.topBarToolStore=YL()}toggleDropdown(){this.isActive?this.topBarToolStore.closeDropdowns():this.topBarToolStore.openDropdown()}get isActive(){return this.topBarToolStore.isActive}get popoverProps(){return{anchorRect:this.actionRef.el?this.actionRef.el.getBoundingClientRect():{x:0,y:0,width:0,height:0},positioning:"bottom-left",verticalOffset:0,class:"rounded"}}}class sH extends t.Component{static components={FontSizeEditor:lM};static props={class:String};static template="o-spreadsheet-TopBarFontSizeEditor";topBarToolStore;setup(){this.topBarToolStore=YL()}get currentFontSize(){return this.env.model.getters.getCurrentStyle().fontSize||me}setFontSize(e){bD(this.env,{fontSize:e})}onToggle(){this.isActive?this.topBarToolStore.closeDropdowns():this.topBarToolStore.openDropdown()}onFocusInput(){this.topBarToolStore.openDropdown()}get isActive(){return this.topBarToolStore.isActive}}class iH extends t.Component{static template="o-spreadsheet-NumberFormatsTool";static components={MenuPopover:Px,ActionButton:rM};static props={class:String};formatNumberMenuItemSpec=xL;topBarToolStore;buttonRef=t.useRef("buttonRef");state=t.useState({anchorRect:{x:0,y:0,width:0,height:0},menuItems:[]});setup(){this.topBarToolStore=YL()}toggleMenu(){if(this.isActive)this.topBarToolStore.closeDropdowns();else{const e=i(this.formatNumberMenuItemSpec);this.state.menuItems=e.children(this.env).sort(((e,t)=>e.sequence-t.sequence)),this.state.anchorRect=cy(this.buttonRef.el),this.topBarToolStore.openDropdown()}}get isActive(){return this.topBarToolStore.isActive}}const nH=new class{content={};add(e){if(e in this.content)throw new Error(`${e} is already present in this registry!`);return this.content[e]=[],this}addChild(e,t){return this.content[e].push(t),this}getEntries(e){return this.content[e].sort(((e,t)=>e.sequence-t.sequence))}getCategories(){return Object.keys(this.content)}};nH.add("edit").addChild("edit",{component:rM,props:{action:y_,class:"o-hoverable-button o-toolbar-button"},sequence:1}).addChild("edit",{component:rM,props:{action:w_,class:"o-hoverable-button o-toolbar-button"},sequence:2}).addChild("edit",{component:QL,props:{class:"o-hoverable-button o-toolbar-button o-mobile-disabled"},sequence:3}).addChild("edit",{component:rM,props:{action:QF,class:"o-hoverable-button o-toolbar-button"},sequence:4}).add("numberFormat").addChild("numberFormat",{component:rM,props:{action:lF,class:"o-hoverable-button o-toolbar-button"},sequence:1}).addChild("numberFormat",{component:rM,props:{action:FF,class:"o-hoverable-button o-toolbar-button"},sequence:2}).addChild("numberFormat",{component:rM,props:{action:OF,class:"o-hoverable-button o-toolbar-button"},sequence:3}).addChild("numberFormat",{component:iH,props:{class:"o-menu-item-button o-hoverable-button o-toolbar-button"},sequence:4}).add("fontSize").addChild("fontSize",{component:sH,props:{class:"o-hoverable-button o-toolbar-button"},sequence:3}).add("textStyle").addChild("textStyle",{component:rM,props:{action:PF,class:"o-hoverable-button o-toolbar-button"},sequence:1}).addChild("textStyle",{component:rM,props:{action:MF,class:"o-hoverable-button o-toolbar-button"},sequence:2}).addChild("textStyle",{component:rM,props:{action:kF,class:"o-hoverable-button o-toolbar-button"},sequence:3}).addChild("textStyle",{component:tH,props:{class:"o-hoverable-button o-menu-item-button o-toolbar-button",style:"textColor",icon:"o-spreadsheet-Icon.TEXT_COLOR",title:Vo("Text Color")},sequence:4}).add("cellStyle").addChild("cellStyle",{component:tH,props:{class:"o-hoverable-button o-menu-item-button o-toolbar-button",style:"fillColor",icon:"o-spreadsheet-Icon.FILL_COLOR",title:Vo("Fill Color")},sequence:1}).addChild("cellStyle",{component:JL,props:{class:"o-hoverable-button o-menu-item-button o-toolbar-button"},sequence:2}).addChild("cellStyle",{component:rM,props:{action:U_,class:"o-hoverable-button o-menu-item-button o-toolbar-button"},sequence:3}).add("alignment").addChild("alignment",{component:oH,props:{parentAction:HF,childActions:[UF,BF,zF],class:"o-hoverable-button o-toolbar-button",childClass:"o-hoverable-button"},sequence:1}).addChild("alignment",{component:oH,props:{parentAction:$F,childActions:[GF,WF,qF],class:"o-hoverable-button o-menu-item-button o-toolbar-button",childClass:"o-hoverable-button"},sequence:2}).addChild("alignment",{component:oH,props:{parentAction:jF,childActions:[YF,XF,KF],class:"o-hoverable-button o-menu-item-button o-toolbar-button",childClass:"o-hoverable-button"},sequence:3}).add("misc").addChild("misc",{component:eH,props:{class:"o-toolbar-button o-hoverable-button o-menu-item-button o-mobile-disabled"},sequence:1}).addChild("misc",{component:rM,props:{action:eF,class:"o-hoverable-button o-menu-item-button o-toolbar-button"},sequence:2}),mh`
2269
+ `;class JL extends t.Component{static template="o-spreadsheet-BorderEditor";static props={class:{type:String,optional:!0},currentBorderColor:{type:String,optional:!1},currentBorderStyle:{type:String,optional:!1},currentBorderPosition:{type:String,optional:!0},onBorderColorPicked:Function,onBorderStylePicked:Function,onBorderPositionPicked:Function,maxHeight:{type:Number,optional:!0},anchorRect:Object};static components={ColorPickerWidget:aM,Popover:Dx};BORDER_POSITIONS=KL;lineStyleButtonRef=t.useRef("lineStyleButton");borderStyles=Gs;state=t.useState({activeTool:void 0});toggleDropdownTool(e){const t=this.state.activeTool===e;this.state.activeTool=t?void 0:e}closeDropdown(){this.state.activeTool=void 0}setBorderPosition(e){this.props.onBorderPositionPicked(e),this.closeDropdown()}setBorderColor(e){this.props.onBorderColorPicked(e),this.closeDropdown()}setBorderStyle(e){this.props.onBorderStylePicked(e),this.closeDropdown()}get lineStylePickerPopoverProps(){return{anchorRect:this.lineStylePickerAnchorRect,positioning:"bottom-left",verticalOffset:0}}get popoverProps(){return{anchorRect:this.props.anchorRect,maxHeight:this.props.maxHeight,positioning:"bottom-left",verticalOffset:0}}get lineStylePickerAnchorRect(){const e=this.lineStyleButtonRef.el;if(null===e)return{x:0,y:0,width:0,height:0};const t=e.getBoundingClientRect();return{x:t.x,y:t.y,width:t.width,height:t.height}}}class QL extends t.Component{static template="o-spreadsheet-BorderEditorWidget";static props={disabled:{type:Boolean,optional:!0},dropdownMaxHeight:{type:Number,optional:!0},class:{type:String,optional:!0}};static components={BorderEditor:JL};topBarToolStore;borderEditorButtonRef=t.useRef("borderEditorButton");state=t.useState({currentColor:be,currentStyle:ve,currentPosition:void 0});setup(){this.topBarToolStore=XL(),t.onWillUpdateProps((()=>{this.isActive||(this.state.currentPosition=void 0)}))}get dropdownMaxHeight(){return this.env.model.getters.getSheetViewDimension().height}get borderEditorAnchorRect(){const e=this.borderEditorButtonRef.el.getBoundingClientRect();return{x:e.x,y:e.y,width:e.width,height:e.height}}onBorderPositionPicked(e){this.state.currentPosition=e,this.updateBorder()}onBorderColorPicked(e){this.state.currentColor=e,this.updateBorder()}onBorderStylePicked(e){this.state.currentStyle=e,this.updateBorder()}get isActive(){return this.topBarToolStore.isActive}toggleBorderEditor(){this.isActive?this.topBarToolStore.closeDropdowns():this.topBarToolStore.openDropdown()}updateBorder(){void 0!==this.state.currentPosition&&this.env.model.dispatch("SET_ZONE_BORDERS",{sheetId:this.env.model.getters.getActiveSheetId(),target:this.env.model.getters.getSelectedZones(),border:{position:this.state.currentPosition,color:this.state.currentColor,style:this.state.currentStyle}})}}class eH extends t.Component{static template="o-spreadsheet-PaintFormatButton";static props={class:{type:String,optional:!0}};paintFormatStore;setup(){this.paintFormatStore=oh(OP)}get isActive(){return this.paintFormatStore.isActive}onDblClick(){this.paintFormatStore.activate({persistent:!0})}togglePaintFormat(){this.isActive?this.paintFormatStore.cancel():this.paintFormatStore.activate({persistent:!1})}}class tH extends t.Component{static template="o-spreadsheet-TableDropdownButton";static components={TableStylesPopover:lk,ActionButton:rM};static props={class:{type:String,optional:!0}};topBarToolStore;state=t.useState({popoverProps:void 0});setup(){this.topBarToolStore=XL()}onStylePicked(e){const t=this.env.model.getters.getActiveSheetId(),o={...this.tableConfig,styleId:e};fD(this.env,t,o).isSuccessful&&this.env.openSidePanel("TableSidePanel",{}),this.closePopover()}onClick(e){if(e.hasClosedTableStylesPopover||this.state.popoverProps)return void this.closePopover();if(this.env.model.getters.getFirstTableInSelection())return this.topBarToolStore.closeDropdowns(),void this.env.toggleSidePanel("TableSidePanel",{});const t=e.currentTarget,{left:o,bottom:s}=t.getBoundingClientRect();this.topBarToolStore.openDropdown(),this.state.popoverProps={anchorRect:{x:o,y:s,width:0,height:0},positioning:"bottom-left",verticalOffset:0}}closePopover(){this.state.popoverProps=void 0}get action(){return{name:e=>e.model.getters.getFirstTableInSelection()?Vo("Edit table"):Vo("Insert table"),icon:e=>e.model.getters.getFirstTableInSelection()?"o-spreadsheet-Icon.EDIT_TABLE":"o-spreadsheet-Icon.PAINT_TABLE"}}get tableConfig(){return{...mR,numberOfHeaders:1,bandedRows:!0}}}class oH extends t.Component{static components={ColorPickerWidget:aM};static props={class:String,style:String,icon:String,title:String};static template="o-spreadsheet-ColorEditor";topBarToolStore;state=t.useState({isOpen:!1});setup(){this.topBarToolStore=XL()}get currentColor(){return this.env.model.getters.getCurrentStyle()[this.props.style]||("textColor"===this.props.style?"#000000":"#ffffff")}setColor(e){bD(this.env,{[this.props.style]:e}),this.state.isOpen=!1}get isMenuOpen(){return this.topBarToolStore.isActive}onClick(){this.isMenuOpen?this.topBarToolStore.closeDropdowns():this.topBarToolStore.openDropdown()}}class sH extends t.Component{static template="o-spreadsheet-DropdownAction";static components={ActionButton:rM,Popover:Dx};static props={parentAction:Object,childActions:Array,class:String,childClass:String};topBarToolStore;actionRef=t.useRef("actionRef");setup(){this.topBarToolStore=XL()}toggleDropdown(){this.isActive?this.topBarToolStore.closeDropdowns():this.topBarToolStore.openDropdown()}get isActive(){return this.topBarToolStore.isActive}get popoverProps(){return{anchorRect:this.actionRef.el?this.actionRef.el.getBoundingClientRect():{x:0,y:0,width:0,height:0},positioning:"bottom-left",verticalOffset:0,class:"rounded"}}}class iH extends t.Component{static components={FontSizeEditor:lM};static props={class:String};static template="o-spreadsheet-TopBarFontSizeEditor";topBarToolStore;setup(){this.topBarToolStore=XL()}get currentFontSize(){return this.env.model.getters.getCurrentStyle().fontSize||me}setFontSize(e){bD(this.env,{fontSize:e})}onToggle(){this.isActive?this.topBarToolStore.closeDropdowns():this.topBarToolStore.openDropdown()}onFocusInput(){this.topBarToolStore.openDropdown()}get isActive(){return this.topBarToolStore.isActive}}class nH extends t.Component{static template="o-spreadsheet-NumberFormatsTool";static components={MenuPopover:Px,ActionButton:rM};static props={class:String};formatNumberMenuItemSpec=EL;topBarToolStore;buttonRef=t.useRef("buttonRef");state=t.useState({anchorRect:{x:0,y:0,width:0,height:0},menuItems:[]});setup(){this.topBarToolStore=XL()}toggleMenu(){if(this.isActive)this.topBarToolStore.closeDropdowns();else{const e=i(this.formatNumberMenuItemSpec);this.state.menuItems=e.children(this.env).sort(((e,t)=>e.sequence-t.sequence)),this.state.anchorRect=cy(this.buttonRef.el),this.topBarToolStore.openDropdown()}}get isActive(){return this.topBarToolStore.isActive}}const rH=new class{content={};add(e){if(e in this.content)throw new Error(`${e} is already present in this registry!`);return this.content[e]=[],this}addChild(e,t){return this.content[e].push(t),this}getEntries(e){return this.content[e].sort(((e,t)=>e.sequence-t.sequence))}getCategories(){return Object.keys(this.content)}};rH.add("edit").addChild("edit",{component:rM,props:{action:y_,class:"o-hoverable-button o-toolbar-button"},sequence:1}).addChild("edit",{component:rM,props:{action:w_,class:"o-hoverable-button o-toolbar-button"},sequence:2}).addChild("edit",{component:eH,props:{class:"o-hoverable-button o-toolbar-button o-mobile-disabled"},sequence:3}).addChild("edit",{component:rM,props:{action:QF,class:"o-hoverable-button o-toolbar-button"},sequence:4}).add("numberFormat").addChild("numberFormat",{component:rM,props:{action:lF,class:"o-hoverable-button o-toolbar-button"},sequence:1}).addChild("numberFormat",{component:rM,props:{action:FF,class:"o-hoverable-button o-toolbar-button"},sequence:2}).addChild("numberFormat",{component:rM,props:{action:OF,class:"o-hoverable-button o-toolbar-button"},sequence:3}).addChild("numberFormat",{component:nH,props:{class:"o-menu-item-button o-hoverable-button o-toolbar-button"},sequence:4}).add("fontSize").addChild("fontSize",{component:iH,props:{class:"o-hoverable-button o-toolbar-button"},sequence:3}).add("textStyle").addChild("textStyle",{component:rM,props:{action:PF,class:"o-hoverable-button o-toolbar-button"},sequence:1}).addChild("textStyle",{component:rM,props:{action:MF,class:"o-hoverable-button o-toolbar-button"},sequence:2}).addChild("textStyle",{component:rM,props:{action:kF,class:"o-hoverable-button o-toolbar-button"},sequence:3}).addChild("textStyle",{component:oH,props:{class:"o-hoverable-button o-menu-item-button o-toolbar-button",style:"textColor",icon:"o-spreadsheet-Icon.TEXT_COLOR",title:Vo("Text Color")},sequence:4}).add("cellStyle").addChild("cellStyle",{component:oH,props:{class:"o-hoverable-button o-menu-item-button o-toolbar-button",style:"fillColor",icon:"o-spreadsheet-Icon.FILL_COLOR",title:Vo("Fill Color")},sequence:1}).addChild("cellStyle",{component:QL,props:{class:"o-hoverable-button o-menu-item-button o-toolbar-button"},sequence:2}).addChild("cellStyle",{component:rM,props:{action:U_,class:"o-hoverable-button o-menu-item-button o-toolbar-button"},sequence:3}).add("alignment").addChild("alignment",{component:sH,props:{parentAction:HF,childActions:[UF,BF,zF],class:"o-hoverable-button o-toolbar-button",childClass:"o-hoverable-button"},sequence:1}).addChild("alignment",{component:sH,props:{parentAction:$F,childActions:[GF,WF,qF],class:"o-hoverable-button o-menu-item-button o-toolbar-button",childClass:"o-hoverable-button"},sequence:2}).addChild("alignment",{component:sH,props:{parentAction:jF,childActions:[YF,XF,KF],class:"o-hoverable-button o-menu-item-button o-toolbar-button",childClass:"o-hoverable-button"},sequence:3}).add("misc").addChild("misc",{component:tH,props:{class:"o-toolbar-button o-hoverable-button o-menu-item-button o-mobile-disabled"},sequence:1}).addChild("misc",{component:rM,props:{action:eF,class:"o-hoverable-button o-menu-item-button o-toolbar-button"},sequence:2}),mh`
2270
2270
  .o-topbar-divider {
2271
2271
  border-right: 1px solid ${C};
2272
2272
  width: 0;
@@ -2349,7 +2349,7 @@
2349
2349
  cursor: not-allowed;
2350
2350
  }
2351
2351
  }
2352
- `;class rH extends t.Component{static template="o-spreadsheet-TopBar";static props={onClick:Function,dropdownMaxHeight:Number};static components={MenuPopover:Px,TopBarComposer:ZL,Popover:Dx};toolsCategories=nH.getCategories();state=t.useState({menuState:{isOpen:!1,anchorRect:null,menuItems:[]},invisibleToolsCategories:[],toolsPopoverState:{isOpen:!1}});isSelectingMenu=!1;openedEl=null;menus=[];toolbarMenuRegistry=nH;formatNumberMenuItemSpec=xL;isntToolbarMenu=!1;composerFocusStore;fingerprints;topBarToolStore;toolBarContainerRef=t.useRef("toolBarContainer");toolbarRef=t.useRef("toolBar");moreToolsContainerRef=t.useRef("moreToolsContainer");moreToolsButtonRef=t.useRef("moreToolsButton");spreadsheetRect=Ax();setup(){this.composerFocusStore=oh(uh),this.fingerprints=oh(ND),this.topBarToolStore=oh(jL),t.useExternalListener(window,"click",this.onExternalClick),t.onWillStart((()=>this.updateCellState())),t.onWillUpdateProps((()=>this.updateCellState())),t.useEffect((()=>{this.state.toolsPopoverState.isOpen=!1,this.setVisibilityToolsGroups()}),(()=>[this.spreadsheetRect.width]))}setVisibilityToolsGroups(){if(this.env.model.getters.isReadonly())return;const e=[],{x:t}=this.toolbarRef.el.getBoundingClientRect(),{x:o}=this.toolBarContainerRef.el.getBoundingClientRect();this.moreToolsContainerRef.el?.classList.remove("d-none");const s=this.moreToolsButtonRef.el?.getBoundingClientRect().width||0,i=Math.round(this.spreadsheetRect.width)-s-(t-o)-16,n=document.querySelectorAll(".tool-container");let r=0;for(let t=0;t<n.length;t++){const o=n[t];o.classList.remove("d-none");const{width:s}=o.getBoundingClientRect();r+=s,r>i&&(o.classList.add("d-none"),e.push(this.toolsCategories[t]))}this.state.invisibleToolsCategories=e,e.length||this.moreToolsContainerRef.el?.classList.add("d-none")}get topbarComponents(){return RL.getAllOrdered().filter((e=>!e.isVisible||e.isVisible(this.env)))}get currentFontSize(){return this.env.model.getters.getCurrentStyle().fontSize||me}onExternalClick(e){this.openedEl!==e.target&&this.closeMenus()}onClick(){this.props.onClick(),this.closeMenus()}onMenuMouseOver(e,t){this.isSelectingMenu&&this.isntToolbarMenu&&this.openMenu(e,t)}toggleContextMenu(e,t){this.state.menuState.isOpen&&this.isntToolbarMenu?this.closeMenus():(this.openMenu(e,t),this.isntToolbarMenu=!0)}openMenu(e,t){this.topBarToolStore.currentDropdown&&this.topBarToolStore.closeDropdowns(),this.state.toolsPopoverState.isOpen=!1,this.state.menuState.isOpen=!0,this.state.menuState.anchorRect=cy(t.currentTarget),this.state.menuState.menuItems=e.children(this.env).sort(((e,t)=>e.sequence-t.sequence)),this.state.menuState.parentMenu=e,this.isSelectingMenu=!0,this.openedEl=t.target,this.composerFocusStore.activeComposer.stopEdition()}closeMenus(){this.topBarToolStore.currentDropdown&&this.topBarToolStore.closeDropdowns(),this.state.toolsPopoverState.isOpen=!1,this.state.menuState.isOpen=!1,this.state.menuState.parentMenu=void 0,this.isSelectingMenu=!1,this.openedEl=null}updateCellState(){this.menus=EL.getMenuItems()}getMenuName(e){return e.name(this.env)}setColor(e,t){bD(this.env,{[e]:t}),this.onClick()}setFontSize(e){bD(this.env,{fontSize:e})}toggleMoreTools(){this.topBarToolStore.currentDropdown&&this.topBarToolStore.closeDropdowns(),this.state.toolsPopoverState.isOpen=!this.state.toolsPopoverState.isOpen}get toolsPopoverProps(){return{anchorRect:this.moreToolsButtonRef.el?cy(this.moreToolsButtonRef.el):{x:0,y:0,width:0,height:0},positioning:"bottom-left",verticalOffset:0,class:"rounded",maxWidth:300}}showDivider(e){return e<this.toolsCategories.length-1||this.state.invisibleToolsCategories.length>0}}class aH{clipboard;constructor(e){this.clipboard=e}async write(e){if(this.clipboard?.write)try{await(this.clipboard?.write(this.getClipboardItems(e)))}catch(t){console.log("Failed to write on the clipboard, falling back to plain/html text. Error %s",t);try{await(this.clipboard?.write([new ClipboardItem({[As.PlainText]:this.getBlob(e,As.PlainText),[As.Html]:this.getBlob(e,As.Html)})]))}catch(e){}}else await this.writeText(e[As.PlainText]??"")}async writeText(e){try{this.clipboard?.writeText(e)}catch(e){}}async read(){let e;try{e=await navigator.permissions.query({name:"clipboard-read"})}catch(e){}if(!this.clipboard?.read)return{status:"ok",content:{[As.PlainText]:await(this.clipboard?.readText())}};try{const e=await this.clipboard.read(),t={};for(const o of e)for(const e of o.types){const s=await o.getType(e);if(qa.includes(e))t[e]=s;else{const o=await s.text();t[e]=o}}return{status:"ok",content:t}}catch(t){return{status:"denied"===e?.state?"permissionDenied":"notImplemented"}}}getClipboardItems(e){const t={};for(const o of Object.keys(e))t[o]=this.getBlob(e,o);return[new ClipboardItem(t)]}getBlob(e,t){const o=e[t];return o instanceof Blob||o instanceof File?o:new Blob([e[t]||""],{type:t})}}mh`
2352
+ `;class aH extends t.Component{static template="o-spreadsheet-TopBar";static props={onClick:Function,dropdownMaxHeight:Number};static components={MenuPopover:Px,TopBarComposer:jL,Popover:Dx};toolsCategories=rH.getCategories();state=t.useState({menuState:{isOpen:!1,anchorRect:null,menuItems:[]},invisibleToolsCategories:[],toolsPopoverState:{isOpen:!1}});isSelectingMenu=!1;openedEl=null;menus=[];toolbarMenuRegistry=rH;formatNumberMenuItemSpec=EL;isntToolbarMenu=!1;composerFocusStore;fingerprints;topBarToolStore;toolBarContainerRef=t.useRef("toolBarContainer");toolbarRef=t.useRef("toolBar");moreToolsContainerRef=t.useRef("moreToolsContainer");moreToolsButtonRef=t.useRef("moreToolsButton");spreadsheetRect=Ax();setup(){this.composerFocusStore=oh(uh),this.fingerprints=oh(ND),this.topBarToolStore=oh(YL),t.useExternalListener(window,"click",this.onExternalClick),t.onWillStart((()=>this.updateCellState())),t.onWillUpdateProps((()=>this.updateCellState())),t.useEffect((()=>{this.state.toolsPopoverState.isOpen=!1,this.setVisibilityToolsGroups()}),(()=>[this.spreadsheetRect.width]))}setVisibilityToolsGroups(){if(this.env.model.getters.isReadonly())return;const e=[],{x:t}=this.toolbarRef.el.getBoundingClientRect(),{x:o}=this.toolBarContainerRef.el.getBoundingClientRect();this.moreToolsContainerRef.el?.classList.remove("d-none");const s=this.moreToolsButtonRef.el?.getBoundingClientRect().width||0,i=Math.round(this.spreadsheetRect.width)-s-(t-o)-16,n=document.querySelectorAll(".tool-container");let r=0;for(let t=0;t<n.length;t++){const o=n[t];o.classList.remove("d-none");const{width:s}=o.getBoundingClientRect();r+=s,r>i&&(o.classList.add("d-none"),e.push(this.toolsCategories[t]))}this.state.invisibleToolsCategories=e,e.length||this.moreToolsContainerRef.el?.classList.add("d-none")}get topbarComponents(){return TL.getAllOrdered().filter((e=>!e.isVisible||e.isVisible(this.env)))}get currentFontSize(){return this.env.model.getters.getCurrentStyle().fontSize||me}onExternalClick(e){this.openedEl!==e.target&&this.closeMenus()}onClick(){this.props.onClick(),this.closeMenus()}onMenuMouseOver(e,t){this.isSelectingMenu&&this.isntToolbarMenu&&this.openMenu(e,t)}toggleContextMenu(e,t){this.state.menuState.isOpen&&this.isntToolbarMenu?this.closeMenus():(this.openMenu(e,t),this.isntToolbarMenu=!0)}openMenu(e,t){this.topBarToolStore.currentDropdown&&this.topBarToolStore.closeDropdowns(),this.state.toolsPopoverState.isOpen=!1,this.state.menuState.isOpen=!0,this.state.menuState.anchorRect=cy(t.currentTarget),this.state.menuState.menuItems=e.children(this.env).sort(((e,t)=>e.sequence-t.sequence)),this.state.menuState.parentMenu=e,this.isSelectingMenu=!0,this.openedEl=t.target,this.composerFocusStore.activeComposer.stopEdition()}closeMenus(){this.topBarToolStore.currentDropdown&&this.topBarToolStore.closeDropdowns(),this.state.toolsPopoverState.isOpen=!1,this.state.menuState.isOpen=!1,this.state.menuState.parentMenu=void 0,this.isSelectingMenu=!1,this.openedEl=null}updateCellState(){this.menus=RL.getMenuItems()}getMenuName(e){return e.name(this.env)}setColor(e,t){bD(this.env,{[e]:t}),this.onClick()}setFontSize(e){bD(this.env,{fontSize:e})}toggleMoreTools(){this.topBarToolStore.currentDropdown&&this.topBarToolStore.closeDropdowns(),this.state.toolsPopoverState.isOpen=!this.state.toolsPopoverState.isOpen}get toolsPopoverProps(){return{anchorRect:this.moreToolsButtonRef.el?cy(this.moreToolsButtonRef.el):{x:0,y:0,width:0,height:0},positioning:"bottom-left",verticalOffset:0,class:"rounded",maxWidth:300}}showDivider(e){return e<this.toolsCategories.length-1||this.state.invisibleToolsCategories.length>0}}class lH{clipboard;constructor(e){this.clipboard=e}async write(e){if(this.clipboard?.write)try{await(this.clipboard?.write(this.getClipboardItems(e)))}catch(t){console.log("Failed to write on the clipboard, falling back to plain/html text. Error %s",t);try{await(this.clipboard?.write([new ClipboardItem({[As.PlainText]:this.getBlob(e,As.PlainText),[As.Html]:this.getBlob(e,As.Html)})]))}catch(e){}}else await this.writeText(e[As.PlainText]??"")}async writeText(e){try{this.clipboard?.writeText(e)}catch(e){}}async read(){let e;try{e=await navigator.permissions.query({name:"clipboard-read"})}catch(e){}if(!this.clipboard?.read)return{status:"ok",content:{[As.PlainText]:await(this.clipboard?.readText())}};try{const e=await this.clipboard.read(),t={};for(const o of e)for(const e of o.types){const s=await o.getType(e);if(qa.includes(e))t[e]=s;else{const o=await s.text();t[e]=o}}return{status:"ok",content:t}}catch(t){return{status:"denied"===e?.state?"permissionDenied":"notImplemented"}}}getClipboardItems(e){const t={};for(const o of Object.keys(e))t[o]=this.getBlob(e,o);return[new ClipboardItem(t)]}getBlob(e,t){const o=e[t];return o instanceof Blob||o instanceof File?o:new Blob([e[t]||""],{type:t})}}mh`
2353
2353
  .o-spreadsheet {
2354
2354
  position: relative;
2355
2355
  display: grid;
@@ -2582,21 +2582,21 @@
2582
2582
  .o-spreadsheet-bottombar-wrapper {
2583
2583
  z-index: ${Fe.ScrollBar+1};
2584
2584
  }
2585
- `;class lH extends t.Component{static template="o-spreadsheet-Spreadsheet";static props={model:Object,notifyUser:{type:Function,optional:!0},raiseError:{type:Function,optional:!0},askConfirmation:{type:Function,optional:!0}};static components={TopBar:rH,Grid:yk,BottomBar:kL,SmallBottomBar:qL,SidePanels:GL,SpreadsheetDashboard:LL,HeaderGroupContainer:zL,FullScreenChart:Ik};sidePanel;spreadsheetRef=t.useRef("spreadsheet");spreadsheetRect=Ax();_focusGrid;isViewportTooSmall=!1;notificationStore;composerFocusStore;get model(){return this.props.model}getStyle(){const e={};this.env.isDashboard()?e["grid-template-rows"]="auto":e["grid-template-rows"]="min-content auto min-content";const t=this.sidePanel.mainPanel?`${this.sidePanel.totalPanelSize||mk}px`:"auto";return e["grid-template-columns"]=`auto ${t}`,bh(e)}setup(){if(!("isSmall"in this.env)){const e=function(){const e=Ax();return{get isSmall(){return e.width<768}}}();t.useSubEnv({get isSmall(){return e.isSmall}})}const e=th();e.inject(ah,this.model);const o=this.env;e.get(pk).setSmallThreshhold((()=>o.isSmall)),this.notificationStore=oh(dE),this.composerFocusStore=oh(uh),this.sidePanel=oh(vk);const s=this.model.config.external.fileStore;t.useSubEnv({model:this.model,imageProvider:s?new AL(s):void 0,loadCurrencies:this.model.config.external.loadCurrencies,loadLocales:this.model.config.external.loadLocales,isDashboard:()=>this.model.getters.isDashboard(),openSidePanel:this.sidePanel.open.bind(this.sidePanel),toggleSidePanel:this.sidePanel.toggle.bind(this.sidePanel),clipboard:this.env.clipboard||new aH(navigator.clipboard),startCellEdition:e=>this.composerFocusStore.focusActiveComposer({content:e}),notifyUser:e=>this.notificationStore.notifyUser(e),askConfirmation:(e,t,o)=>this.notificationStore.askConfirmation(e,t,o),raiseError:(e,t)=>this.notificationStore.raiseError(e,t),isMobile:yy}),this.notificationStore.updateNotificationCallbacks({...this.props}),t.useEffect((()=>{!this.spreadsheetRef.el.contains(document.activeElement)&&document.activeElement?.contains(this.spreadsheetRef.el)&&this.focusGrid()}),(()=>[this.env.model.getters.getActiveSheetId()])),t.useExternalListener(window,"resize",(()=>this.render(!0))),t.useExternalListener(document.body,"wheel",(()=>{})),this.bindModelEvents(),t.onWillUpdateProps((e=>{if(e.model!==this.props.model)throw new Error("Changing the props model is not supported at the moment.");e.notifyUser===this.props.notifyUser&&e.askConfirmation===this.props.askConfirmation&&e.raiseError===this.props.raiseError||this.notificationStore.updateNotificationCallbacks({...e})}));const i=function(e){let t=!1;return async(...o)=>{t||(t=!0,await Promise.resolve(),t=!1,e(...o))}}(this.render.bind(this,!0));t.onMounted((()=>{this.checkViewportSize(),e.on("store-updated",this,i),n.observe(this.spreadsheetRef.el),Ch()})),t.onWillUnmount((()=>{this.unbindModelEvents(),e.off("store-updated",this),n.disconnect(),function(){if(window.Chart)for(const e of Sh.getAll())e.unregister(window.Chart)}()})),t.onPatched((()=>{this.checkViewportSize()}));const n=new ResizeObserver((()=>{this.sidePanel.changeSpreadsheetWidth(this.spreadsheetRect.width)}))}bindModelEvents(){this.model.on("update",this,(()=>this.render(!0))),this.model.on("notify-ui",this,(e=>this.notificationStore.notifyUser(e))),this.model.on("raise-error-ui",this,(({text:e})=>this.notificationStore.raiseError(e)))}unbindModelEvents(){this.model.off("update",this),this.model.off("notify-ui",this),this.model.off("raise-error-ui",this)}checkViewportSize(){const{xRatio:e,yRatio:t}=this.env.model.getters.getFrozenSheetViewRatio(this.env.model.getters.getActiveSheetId());if(isFinite(e)&&isFinite(t))if(t>.85||e>.85){if(this.isViewportTooSmall)return;this.notificationStore.notifyUser({text:Vo("The current window is too small to display this sheet properly. Consider resizing your browser window or adjusting frozen rows and columns."),type:"warning",sticky:!1}),this.isViewportTooSmall=!0}else this.isViewportTooSmall=!1}focusGrid(){this._focusGrid&&this._focusGrid()}get gridHeight(){return this.env.model.getters.getSheetViewDimension().height}get gridContainerStyle(){const e=ce*this.rowLayers.length,t=ce*this.colLayers.length;return bh({"grid-template-columns":`${e?e+2:0}px auto`,"grid-template-rows":`${t?t+2:0}px auto`})}get rowLayers(){const e=this.env.model.getters.getActiveSheetId();return this.env.model.getters.getVisibleGroupLayers(e,"ROW")}get colLayers(){const e=this.env.model.getters.getActiveSheetId();return this.env.model.getters.getVisibleGroupLayers(e,"COL")}getGridSize(){const e=this.spreadsheetRef.el?.querySelector(".o-spreadsheet-topbar-wrapper")?.getBoundingClientRect().height||0,t=this.spreadsheetRef.el?.querySelector(".o-spreadsheet-bottombar-wrapper")?.getBoundingClientRect().height||0,o=this.spreadsheetRef.el?.querySelector(".o-grid")?.getBoundingClientRect().width||0,s=(this.spreadsheetRef.el?.getBoundingClientRect().height||0)-(this.spreadsheetRef.el?.querySelector(".o-column-groups")?.getBoundingClientRect().height||0)-e-t;return{width:Math.max(o-ne,0),height:Math.max(s-ne,0)}}}function cH(e){return CL.get(e.type)(e)}class hH{buildTransformation;operations;constructor(e,t=[]){this.buildTransformation=e,this.operations=t}getOperations(){return this.operations}getOperation(e){const t=this.operations.find((t=>t.id===e));if(!t)throw new Error(`Operation ${e} not found`);return t}getLastOperationId(){return this.operations[this.operations.length-1]?.id}getFirstOperationAmong(e,t){for(const o of this.operations){if(o.id===e)return e;if(o.id===t)return t}throw new Error(`Operation ${e} and ${t} not found`)}contains(e){return!!this.operations.find((t=>t.id===e))}prepend(e){const t=this.buildTransformation.with(e.data);this.operations=[e,...this.operations.map((e=>e.transformed(t)))]}insert(e,t){const o=this.buildTransformation.with(e.data),{before:s,operation:i,after:n}=this.locateOperation(t);this.operations=[...s,i,e,...n.map((e=>e.transformed(o)))]}append(e){this.operations.push(e)}appendBranch(e){this.operations=this.operations.concat(e.operations)}fork(e){const{after:t}=this.locateOperation(e);return new hH(this.buildTransformation,t)}transform(e){this.operations=this.operations.map((t=>t.transformed(e)))}cutBefore(e){this.operations=this.locateOperation(e).before}cutAfter(e){const{before:t,operation:o}=this.locateOperation(e);this.operations=t.concat([o])}locateOperation(e){const t=this.operations.findIndex((t=>t.id===e));if(-1===t)throw new Error(`Operation ${e} not found`);return{before:this.operations.slice(0,t),operation:this.operations[t],after:this.operations.slice(t+1)}}}class dH{id;data;constructor(e,t){this.id=e,this.data=t}transformed(e){return new uH(this.id,ut((()=>e(this.data))))}}class uH{id;lazyData;constructor(e,t){this.id=e,this.lazyData=t}get data(){return this.lazyData()}transformed(e){return new uH(this.id,this.lazyData.map(e))}}class gH{operations;constructor(e){this.operations=e}[Symbol.iterator](){return this.operations[Symbol.iterator]()}stopWith(e){return new gH(function*(e,t){for(const o of e)if(yield o,o.operation.id===t)return}(this.operations,e))}stopBefore(e){return new gH(function*(e,t){for(const o of e){if(o.operation.id===t)return;yield o}}(this.operations,e))}startAfter(e){return new gH(function*(e,t){let o=!0;for(const s of e)o||(yield s),s.operation.id===t&&(o=!1)}(this.operations,e))}}class pH{buildTransformation;branches;branchingOperationIds=new Map;constructor(e,t){this.buildTransformation=e,this.branches=[t]}getLastBranch(){return this.branches[this.branches.length-1]}execution(e){return new gH(Xe(this._execution(e),this._execution(e)))}revertedExecution(e){return new gH(Xe(this._revertedExecution(e),this._revertedExecution(e)))}insertOperationLast(e,t){const o=e.getLastOperationId()||this.previousBranch(e)?.getLastOperationId();e.append(t),o&&this.insertPrevious(e,t,o)}insertOperationAfter(e,t,o){e.insert(t,o),this.updateNextWith(e,t,o),this.insertPrevious(e,t,o)}undo(e,t){const o=this.buildTransformation.without(t.data),s=this.branchingOperationIds.get(e);this.branchingOperationIds.set(e,t.id);const i=e.fork(t.id);s&&this.branchingOperationIds.set(i,s),this.insertBranchAfter(e,i),this.transform(i,o)}redo(e){const t=this.nextBranch(e);if(!t)return;const o=this.nextBranch(t);this.removeBranchFromTree(t);const s=this.branchingOperationIds.get(t);s?this.branchingOperationIds.set(e,s):this.branchingOperationIds.delete(e),o&&this.rebaseUp(o)}drop(e){for(const t of this.branches)t.contains(e)&&t.cutBefore(e)}findOperation(e,t){for(const o of this.revertedExecution(e))if(o.operation.id===t)return o;throw new Error(`Operation ${t} not found`)}rebaseUp(e){const{previousBranch:t,branchingOperation:o}=this.findPreviousBranchingOperation(e);if(!t||!o)return;const s=this.buildTransformation.without(o.data),i=t.fork(o.id);this.branchingOperationIds.set(i,this.branchingOperationIds.get(e)),this.removeBranchFromTree(e),this.insertBranchAfter(t,i),i.transform(s);const n=this.nextBranch(i);n&&this.rebaseUp(n)}removeBranchFromTree(e){const t=this.branches.findIndex((t=>t===e));this.branches.splice(t,1)}insertBranchAfter(e,t){const o=this.branches.findIndex((t=>t===e));this.branches.splice(o+1,0,t)}updateNextWith(e,t,o){const s=this.branchingOperationIds.get(e),i=this.nextBranch(e);if(s&&i)if(e.getFirstOperationAmong(o,s)===s){const n=this.addToNextBranch(e,i,s,t,o);this.updateNextWith(i,n,o)}else{const e=this.buildTransformation.with(t.data);this.transform(i,e)}}addToNextBranch(e,t,o,s,i){let n=s;return i===o?(n=this.getTransformedOperation(e,o,s),t.prepend(n)):t.contains(i)?(n=this.getTransformedOperation(e,o,s),t.insert(n,i)):t.append(s),n}getTransformedOperation(e,t,o){const s=e.getOperation(t),i=this.buildTransformation.without(s.data);return o.transformed(i)}shouldExecute(e,t){return t.id!==this.branchingOperationIds.get(e)}transform(e,t){e.transform(t);const o=this.nextBranch(e);o&&this.transform(o,t)}insertPrevious(e,t,o){const{previousBranch:s,branchingOperation:i}=this.findPreviousBranchingOperation(e);if(!s||!i)return;const n=this.buildTransformation.with(i.data),r=e.fork(o);r.transform(n),s.cutAfter(o),s.appendBranch(r);const a=t.transformed(n);this.insertPrevious(s,a,o)}findPreviousBranchingOperation(e){const t=this.previousBranch(e);if(!t)return{previousBranch:void 0,branchingOperation:void 0};const o=this.branchingOperationIds.get(t);return o?{previousBranch:t,branchingOperation:t.getOperation(o)}:{previousBranch:void 0,branchingOperation:void 0}}nextBranch(e){const t=this.branches.findIndex((t=>t===e));if(-1!==t)return this.branches[t+1]}previousBranch(e){const t=this.branches.findIndex((t=>t===e));if(-1!==t)return this.branches[t-1]}*_revertedExecution(e){const t=this.branchingOperationIds.get(e);let o=!!t;const s=e.getOperations();for(let i=s.length-1;i>=0;i--){const n=s[i];n.id===t&&(o=!1),o||(yield{operation:n,branch:e,isCancelled:!this.shouldExecute(e,n)})}const i=this.previousBranch(e);yield*i?this._revertedExecution(i):[]}*_execution(e){for(const t of e.getOperations())if(yield{operation:t,branch:e,isCancelled:!this.shouldExecute(e,t)},t.id===this.branchingOperationIds.get(e)){const t=this.nextBranch(e);return void(yield*t?this._execution(t):[])}if(!this.branchingOperationIds.get(e)){const t=this.nextBranch(e);yield*t?this._execution(t):[]}}}class mH{HEAD_BRANCH;HEAD_OPERATION;tree;applyOperation;revertOperation;buildEmpty;buildTransformation;constructor(e){this.applyOperation=e.applyOperation,this.revertOperation=e.revertOperation,this.buildEmpty=e.buildEmpty,this.buildTransformation=e.buildTransformation,this.HEAD_BRANCH=new hH(this.buildTransformation),this.tree=new pH(this.buildTransformation,this.HEAD_BRANCH);const t=e.initialOperationId,o=new dH(t,this.buildEmpty(t));this.tree.insertOperationLast(this.HEAD_BRANCH,o),this.HEAD_OPERATION=o}get(e){return this.tree.findOperation(this.HEAD_BRANCH,e).operation.data}append(e,t){const o=new dH(e,t),s=this.tree.getLastBranch();this.tree.insertOperationLast(s,o),this.HEAD_BRANCH=s,this.HEAD_OPERATION=o}insert(e,t,o){const s=new dH(e,t);this.revertTo(o),this.tree.insertOperationAfter(this.HEAD_BRANCH,s,o),this.fastForward()}undo(e,t,o){const{branch:s,operation:i}=this.tree.findOperation(this.HEAD_BRANCH,e);this.revertBefore(e),this.tree.undo(s,i),this.fastForward(),this.insert(t,this.buildEmpty(t),o)}redo(e,t,o){const{branch:s}=this.tree.findOperation(this.HEAD_BRANCH,e);this.revertBefore(e),this.tree.redo(s),this.fastForward(),this.insert(t,this.buildEmpty(t),o)}rebase(e){const t=this.get(e),o=[...this.tree.execution(this.HEAD_BRANCH).startAfter(e)];this.revertBefore(e);const s=this.HEAD_OPERATION.id;this.tree.drop(e),this.insert(e,t,s);for(const{operation:e}of o)this.insert(e.id,e.data,this.HEAD_OPERATION.id)}revertBefore(e){const t=this.tree.revertedExecution(this.HEAD_BRANCH).stopWith(e);this.revert(t)}revertTo(e){const t=e?this.tree.revertedExecution(this.HEAD_BRANCH).stopBefore(e):this.tree.revertedExecution(this.HEAD_BRANCH);this.revert(t)}revert(e){for(const{next:t,operation:o,isCancelled:s}of e)s||this.revertOperation(o.data),t&&(this.HEAD_BRANCH=t.branch,this.HEAD_OPERATION=t.operation)}fastForward(){const e=this.HEAD_OPERATION?this.tree.execution(this.HEAD_BRANCH).startAfter(this.HEAD_OPERATION.id):this.tree.execution(this.HEAD_BRANCH);for(const{operation:t,branch:o,isCancelled:s}of e)s||this.applyOperation(t.data),this.HEAD_OPERATION=t,this.HEAD_BRANCH=o}}function fH(e){return new mH({initialOperationId:e.initialRevisionId,applyOperation:t=>{const o=t.commands.slice(),{changes:s}=e.recordChanges((()=>{for(const t of o)e.dispatch(t)}));t.setChanges(s)},revertOperation:e=>function(e){for(const t of e.slice().reverse())for(let e=t.changes.length-1;e>=0;e--){vH(t.changes[e])}}([e]),buildEmpty:e=>new ZV(e,"empty",[]),buildTransformation:{with:e=>t=>new ZV(t.id,t.clientId,WV(t.commands,e.commands),t.rootCommand,void 0,t.timestamp),without:e=>t=>new ZV(t.id,t.clientId,WV(t.commands,e.commands.map(cH).flat()),t.rootCommand,void 0,t.timestamp)}})}function vH(e){const t=e.target,o=e.key,s=e.before;void 0===s?delete t[o]:t[o]=s}class bH{observers=new Map;defaultSubscription;mainSubscription;registerAsDefault(e,t){this.defaultSubscription={owner:e,callbacks:t},this.mainSubscription||(this.mainSubscription=this.defaultSubscription)}observe(e,t){this.observers.set(e,{owner:e,callbacks:t})}capture(e,t){if(this.observers.get(e))throw new Error("You are already subscribed forever");this.mainSubscription?.owner&&this.mainSubscription.owner!==e&&this.mainSubscription.callbacks.release?.(),this.mainSubscription={owner:e,callbacks:t}}release(e){this.mainSubscription?.owner!==e||this.observers.get(e)||(this.mainSubscription=this.defaultSubscription)}getBackToDefault(){this.mainSubscription!==this.defaultSubscription&&(this.mainSubscription?.callbacks.release?.(),this.mainSubscription=this.defaultSubscription)}isListening(e){return this.mainSubscription?.owner===e}send(e){this.mainSubscription?.callbacks.handleEvent(e),this.observers.forEach((t=>t.callbacks.handleEvent(e)))}}class SH{getters;stream;anchor;defaultAnchor;constructor(e){this.getters=e,this.stream=new bH,this.anchor={cell:{col:0,row:0},zone:Dr({col:0,row:0})},this.defaultAnchor=this.anchor}capture(e,t,o){this.stream.capture(e,o),this.anchor=t}registerAsDefault(e,t,o){this.checkAnchorZoneOrThrow(t),this.stream.registerAsDefault(e,o),this.defaultAnchor=t,this.capture(e,t,o)}resetDefaultAnchor(e,t){this.checkAnchorZoneOrThrow(t),this.stream.isListening(e)&&(this.anchor=t),this.defaultAnchor=t}resetAnchor(e,t){this.checkAnchorZoneOrThrow(t),this.stream.isListening(e)&&(this.anchor=t)}observe(e,t){this.stream.observe(e,t)}release(e){this.stream.isListening(e)&&(this.stream.release(e),this.anchor=this.defaultAnchor)}getBackToDefault(){this.stream.getBackToDefault()}modifyAnchor(e,t,o){const s=this.getters.getActiveSheetId();return e={...e,zone:this.getters.expandZone(s,e.zone)},this.processEvent({options:o,anchor:e,mode:t})}selectZone(e,t={scrollIntoView:!0}){return this.modifyAnchor(e,"overrideSelection",t)}selectCell(e,t){const o=Dr({col:e,row:t});return this.selectZone({zone:o,cell:{col:e,row:t}},{scrollIntoView:!0})}moveAnchorCell(e,t=1){if("end"!==t&&t<=0)return new Vs("InvalidSelectionStep");const{col:o,row:s}=this.getNextAvailablePosition(e,t);return this.selectCell(o,s)}setAnchorCorner(e,t){const o=this.getters.getActiveSheetId(),{col:s,row:i}=this.anchor.cell,n={left:Math.min(s,e),top:Math.min(i,t),right:Math.max(s,e),bottom:Math.max(i,t)},r={zone:this.getters.expandZone(o,n),cell:{col:s,row:i}};return this.processEvent({mode:"updateAnchor",anchor:r,options:{scrollIntoView:!1}})}addCellToSelection(e,t){const o=this.getters.getActiveSheetId();({col:e,row:t}=this.getters.getMainCellPosition({sheetId:o,col:e,row:t}));const s=this.getters.expandZone(o,Dr({col:e,row:t}));return this.processEvent({options:{scrollIntoView:!0},anchor:{zone:s,cell:{col:e,row:t}},mode:"newAnchor"})}resizeAnchorZone(e,t=1){if("end"!==t&&t<=0)return new Vs("InvalidSelectionStep");const o=this.getters.getActiveSheetId(),s=this.anchor,{col:i,row:n}=s.cell,{left:r,right:a,top:l,bottom:c}=s.zone,h=this.getStartingPosition(e),[d,u]=this.deltaToTarget(h,e,t);if(0===d&&0===u)return Vs.Success;let g=s.zone;const p=e=>{e=Rr(e);const{left:t,right:s,top:i,bottom:n}=this.getters.expandZone(o,e);return{left:Math.max(0,t),right:Math.min(this.getters.getNumberCols(o)-1,s),top:Math.max(0,i),bottom:Math.min(this.getters.getNumberRows(o)-1,n)}},{col:m,row:f}=this.getReferencePosition();let v=0;for(;null!==g;){if(v++,d<0){const e=this.getNextAvailableCol(d,a-(v-1),f);g=m<=a-v?p({top:l,left:r,bottom:c,right:e}):null}if(d>0){const e=this.getNextAvailableCol(d,r+(v-1),f);g=r+v<=m?p({top:l,left:e,bottom:c,right:a}):null}if(u<0){const e=this.getNextAvailableRow(u,m,c-(v-1));g=f<=c-v?p({top:l,left:r,bottom:e,right:a}):null}if(u>0){const e=this.getNextAvailableRow(u,m,l+(v-1));g=l+v<=f?p({top:e,left:r,bottom:c,right:a}):null}if(g=g?Rr(g):g,g&&!br(g,s.zone))return this.processEvent({options:{scrollIntoView:!0},mode:"updateAnchor",anchor:{zone:g,cell:{col:i,row:n}}})}g=p(fr({top:n,bottom:n,left:i,right:i},Rr({top:this.getNextAvailableRow(u,m,l),left:this.getNextAvailableCol(d,r,f),bottom:this.getNextAvailableRow(u,m,c),right:this.getNextAvailableCol(d,a,f)})));const b={zone:g,cell:{col:i,row:n}};return this.processEvent({anchor:b,mode:"updateAnchor",options:{scrollIntoView:!0}})}selectColumn(e,t){const o=this.getters.getActiveSheetId(),s=this.getters.getNumberRows(o)-1;let i={left:e,right:e,top:0,bottom:s};const n=this.getters.findFirstVisibleColRowIndex(o,"ROW");let r,a;switch(t){case"overrideSelection":case"newAnchor":r=e,a=n;break;case"updateAnchor":({col:r,row:a}=this.anchor.cell),i=fr(i,{left:r,right:r,top:n,bottom:s})}return this.processEvent({options:{scrollIntoView:!1,unbounded:!0},anchor:{zone:i,cell:{col:r,row:a}},mode:t})}selectRow(e,t){const o=this.getters.getActiveSheetId(),s=this.getters.getNumberCols(o)-1;let i={top:e,bottom:e,left:0,right:s};const n=this.getters.findFirstVisibleColRowIndex(o,"COL");let r,a;switch(t){case"overrideSelection":case"newAnchor":r=n,a=e;break;case"updateAnchor":({col:r,row:a}=this.anchor.cell),i=fr(i,{left:n,right:s,top:a,bottom:a})}return this.processEvent({options:{scrollIntoView:!1,unbounded:!0},anchor:{zone:i,cell:{col:r,row:a}},mode:t})}loopSelection(){const e=this.getters.getActiveSheetId(),t=this.anchor;if(br(this.anchor.zone,this.getters.getSheetZone(e)))return this.modifyAnchor({...t,zone:Dr(t.cell)},"updateAnchor",{scrollIntoView:!1});const o=this.getters.getContiguousZone(e,t.zone);return mt(o,t.zone)?this.selectAll():this.modifyAnchor({...t,zone:o},"updateAnchor",{scrollIntoView:!1})}selectTableAroundSelection(){const e=this.getters.getActiveSheetId(),t=this.getters.getContiguousZone(e,this.anchor.zone);return this.modifyAnchor({...this.anchor,zone:t},"updateAnchor",{scrollIntoView:!1})}selectAll(){const e=this.getters.getActiveSheetId(),t={left:0,top:0,bottom:this.getters.getNumberRows(e)-1,right:this.getters.getNumberCols(e)-1};return this.processEvent({mode:"overrideSelection",anchor:{zone:t,cell:this.anchor.cell},options:{scrollIntoView:!1}})}isListening(e){return this.stream.isListening(e)}processEvent(e){const t={...e,previousAnchor:ze(this.anchor)},o=this.checkEventAnchorZone(t);return"Success"!==o?new Vs(o):(this.anchor=t.anchor,this.stream.send(t),Vs.Success)}checkEventAnchorZone(e){return this.checkAnchorZone(e.anchor)}checkAnchorZone(e){const{cell:t,zone:o}=e;if(!Cr(t.col,t.row,o))return"InvalidAnchorZone";const{left:s,right:i,top:n,bottom:r}=o,a=this.getters.getActiveSheetId(),l=this.getters.findVisibleHeader(a,"COL",s,i);return void 0===this.getters.findVisibleHeader(a,"ROW",n,r)||void 0===l?"SelectionOutOfBound":"Success"}checkAnchorZoneOrThrow(e){if("InvalidAnchorZone"===this.checkAnchorZone(e))throw new Error("The provided anchor is invalid. The cell must be part of the zone.")}getNextAvailablePosition(e,t=1){const{col:o,row:s}=this.anchor.cell,i=this.deltaToTarget({col:o,row:s},e,t);return{col:this.getNextAvailableCol(i[0],o,s),row:this.getNextAvailableRow(i[1],o,s)}}getNextAvailableCol(e,t,o){const s=this.getters.getActiveSheetId(),i={col:t,row:o};return this.getNextAvailableHeader(e,"COL",t,i,(e=>this.getters.isInSameMerge(s,t,o,e,o)))}getNextAvailableRow(e,t,o){const s=this.getters.getActiveSheetId(),i={col:t,row:o};return this.getNextAvailableHeader(e,"ROW",o,i,(e=>this.getters.isInSameMerge(s,t,o,t,e)))}getNextAvailableHeader(e,t,o,s,i){const n=this.getters.getActiveSheetId();if(0===e)return o;const r=Math.sign(e);let a=o+e;for(;i(a);)a+=r;for(;this.getters.isHeaderHidden(n,t,a);)a+=r;return a<0||a>this.getters.getNumberHeaders(n,t)-1?this.getters.isHeaderHidden(n,t,o)?this.getNextAvailableHeader(-r,t,o,s,i):o:a}getReferencePosition(){const e=this.getters.getActiveSheetId(),t=this.anchor,{left:o,right:s,top:i,bottom:n}=t.zone,{col:r,row:a}=t.cell;return{col:this.getters.isColHidden(e,r)&&this.getters.findVisibleHeader(e,"COL",o,s)||r,row:this.getters.isRowHidden(e,a)&&this.getters.findVisibleHeader(e,"ROW",i,n)||a}}deltaToTarget(e,t,o){switch(t){case"up":return"end"!==o?[0,-o]:[0,this.getEndOfCluster(e,"rows",-1)-e.row];case"down":return"end"!==o?[0,o]:[0,this.getEndOfCluster(e,"rows",1)-e.row];case"left":return"end"!==o?[-o,0]:[this.getEndOfCluster(e,"cols",-1)-e.col,0];case"right":return"end"!==o?[o,0]:[this.getEndOfCluster(e,"cols",1)-e.col,0]}}getStartingPosition(e){let{col:t,row:o}=this.getPosition();const s=this.anchor.zone;switch(e){case"down":case"up":o=o===s.top?s.bottom:s.top;break;case"left":case"right":t=t===s.right?s.left:s.right}return{col:t,row:o}}getEndOfCluster(e,t,o){const s=this.getters.getActiveSheetId();let i=e;const n=this.getNextCellPosition(e,t,o),r=this.isCellSkippableInCluster({...i,sheetId:s})||this.isCellSkippableInCluster({...n,sheetId:s})?"nextCluster":"endOfCluster";for(;;){const e=this.getNextCellPosition(i,t,o);if(i.col===e.col&&i.row===e.row)break;const n=this.isCellSkippableInCluster({...e,sheetId:s});if("endOfCluster"===r&&n)break;if("nextCluster"===r&&!n){i=e;break}i=e}return"cols"===t?i.col:i.row}getNextCellPosition(e,t,o){const s={...e};return s["cols"===t?"col":"row"]="cols"===t?this.getNextAvailableCol(o,s.col,s.row):this.getNextAvailableRow(o,s.col,s.row),{col:s.col,row:s.row}}getPosition(){return{...this.anchor.cell}}isCellSkippableInCluster(e){const t=this.getters.getMainCellPosition(e),o=this.getters.getEvaluatedCell(t);return o.type===Ts.empty||o.type===Ts.text&&""===o.value}}function CH(e){if("string"==typeof e)return{};if("number"==typeof e)return[];throw new Error("Cannot create new node")}class yH{changes;commands=[];recordChanges(e){return this.changes=[],this.commands=[],e(),{changes:this.changes,commands:this.commands}}addCommand(e){this.commands.push(e)}addChange(...e){const t=e.pop();let o=e[0];const s=e.at(-1),i=e.length-2;for(let t=1;t<=i;t++){const s=e[t];if(void 0===o[s]){const i=e[t+1];o[s]=CH(i)}o=o[s]}o[s]!==t&&(this.changes?.push({key:s,target:o,before:o[s]}),void 0===t?delete o[s]:o[s]=t)}}const wH=17781237,IH=17781238,xH=88853993,EH=88853994;function RH(e,t,o){const s=[["xmlns:r",Mh],["xmlns:a",Dh],["xmlns:c",_h]],i=TH({backgroundColor:e.data.backgroundColor,line:{color:"000000"}});let n=vx``;if(e.data.title?.text){const t=wy(tC(e.data.backgroundColor)),o=e.data.title.fontSize??K;n=vx`
2585
+ `;class cH extends t.Component{static template="o-spreadsheet-Spreadsheet";static props={model:Object,notifyUser:{type:Function,optional:!0},raiseError:{type:Function,optional:!0},askConfirmation:{type:Function,optional:!0}};static components={TopBar:aH,Grid:yk,BottomBar:VL,SmallBottomBar:ZL,SidePanels:WL,SpreadsheetDashboard:HL,HeaderGroupContainer:$L,FullScreenChart:Ik};sidePanel;spreadsheetRef=t.useRef("spreadsheet");spreadsheetRect=Ax();_focusGrid;isViewportTooSmall=!1;notificationStore;composerFocusStore;get model(){return this.props.model}getStyle(){const e={};this.env.isDashboard()?e["grid-template-rows"]="auto":e["grid-template-rows"]="min-content auto min-content";const t=this.sidePanel.mainPanel?`${this.sidePanel.totalPanelSize||mk}px`:"auto";return e["grid-template-columns"]=`auto ${t}`,bh(e)}setup(){if(!("isSmall"in this.env)){const e=function(){const e=Ax();return{get isSmall(){return e.width<768}}}();t.useSubEnv({get isSmall(){return e.isSmall}})}const e=th();e.inject(ah,this.model);const o=this.env;e.get(pk).setSmallThreshhold((()=>o.isSmall)),this.notificationStore=oh(dE),this.composerFocusStore=oh(uh),this.sidePanel=oh(vk);const s=this.model.config.external.fileStore;t.useSubEnv({model:this.model,imageProvider:s?new DL(s):void 0,loadCurrencies:this.model.config.external.loadCurrencies,loadLocales:this.model.config.external.loadLocales,isDashboard:()=>this.model.getters.isDashboard(),openSidePanel:this.sidePanel.open.bind(this.sidePanel),toggleSidePanel:this.sidePanel.toggle.bind(this.sidePanel),clipboard:this.env.clipboard||new lH(navigator.clipboard),startCellEdition:e=>this.composerFocusStore.focusActiveComposer({content:e}),notifyUser:e=>this.notificationStore.notifyUser(e),askConfirmation:(e,t,o)=>this.notificationStore.askConfirmation(e,t,o),raiseError:(e,t)=>this.notificationStore.raiseError(e,t),isMobile:yy}),this.notificationStore.updateNotificationCallbacks({...this.props}),t.useEffect((()=>{!this.spreadsheetRef.el.contains(document.activeElement)&&document.activeElement?.contains(this.spreadsheetRef.el)&&this.focusGrid()}),(()=>[this.env.model.getters.getActiveSheetId()])),t.useExternalListener(window,"resize",(()=>this.render(!0))),t.useExternalListener(document.body,"wheel",(()=>{})),this.bindModelEvents(),t.onWillUpdateProps((e=>{if(e.model!==this.props.model)throw new Error("Changing the props model is not supported at the moment.");e.notifyUser===this.props.notifyUser&&e.askConfirmation===this.props.askConfirmation&&e.raiseError===this.props.raiseError||this.notificationStore.updateNotificationCallbacks({...e})}));const i=function(e){let t=!1;return async(...o)=>{t||(t=!0,await Promise.resolve(),t=!1,e(...o))}}(this.render.bind(this,!0));t.onMounted((()=>{this.checkViewportSize(),e.on("store-updated",this,i),n.observe(this.spreadsheetRef.el),Ch()})),t.onWillUnmount((()=>{this.unbindModelEvents(),e.off("store-updated",this),n.disconnect(),function(){if(window.Chart)for(const e of Sh.getAll())e.unregister(window.Chart)}()})),t.onPatched((()=>{this.checkViewportSize()}));const n=new ResizeObserver((()=>{this.sidePanel.changeSpreadsheetWidth(this.spreadsheetRect.width)}))}bindModelEvents(){this.model.on("update",this,(()=>this.render(!0))),this.model.on("notify-ui",this,(e=>this.notificationStore.notifyUser(e))),this.model.on("raise-error-ui",this,(({text:e})=>this.notificationStore.raiseError(e)))}unbindModelEvents(){this.model.off("update",this),this.model.off("notify-ui",this),this.model.off("raise-error-ui",this)}checkViewportSize(){const{xRatio:e,yRatio:t}=this.env.model.getters.getFrozenSheetViewRatio(this.env.model.getters.getActiveSheetId());if(isFinite(e)&&isFinite(t))if(t>.85||e>.85){if(this.isViewportTooSmall)return;this.notificationStore.notifyUser({text:Vo("The current window is too small to display this sheet properly. Consider resizing your browser window or adjusting frozen rows and columns."),type:"warning",sticky:!1}),this.isViewportTooSmall=!0}else this.isViewportTooSmall=!1}focusGrid(){this._focusGrid&&this._focusGrid()}get gridHeight(){return this.env.model.getters.getSheetViewDimension().height}get gridContainerStyle(){const e=ce*this.rowLayers.length,t=ce*this.colLayers.length;return bh({"grid-template-columns":`${e?e+2:0}px auto`,"grid-template-rows":`${t?t+2:0}px auto`})}get rowLayers(){const e=this.env.model.getters.getActiveSheetId();return this.env.model.getters.getVisibleGroupLayers(e,"ROW")}get colLayers(){const e=this.env.model.getters.getActiveSheetId();return this.env.model.getters.getVisibleGroupLayers(e,"COL")}getGridSize(){const e=this.spreadsheetRef.el?.querySelector(".o-spreadsheet-topbar-wrapper")?.getBoundingClientRect().height||0,t=this.spreadsheetRef.el?.querySelector(".o-spreadsheet-bottombar-wrapper")?.getBoundingClientRect().height||0,o=this.spreadsheetRef.el?.querySelector(".o-grid")?.getBoundingClientRect().width||0,s=(this.spreadsheetRef.el?.getBoundingClientRect().height||0)-(this.spreadsheetRef.el?.querySelector(".o-column-groups")?.getBoundingClientRect().height||0)-e-t;return{width:Math.max(o-ne,0),height:Math.max(s-ne,0)}}}function hH(e){return yL.get(e.type)(e)}class dH{buildTransformation;operations;constructor(e,t=[]){this.buildTransformation=e,this.operations=t}getOperations(){return this.operations}getOperation(e){const t=this.operations.find((t=>t.id===e));if(!t)throw new Error(`Operation ${e} not found`);return t}getLastOperationId(){return this.operations[this.operations.length-1]?.id}getFirstOperationAmong(e,t){for(const o of this.operations){if(o.id===e)return e;if(o.id===t)return t}throw new Error(`Operation ${e} and ${t} not found`)}contains(e){return!!this.operations.find((t=>t.id===e))}prepend(e){const t=this.buildTransformation.with(e.data);this.operations=[e,...this.operations.map((e=>e.transformed(t)))]}insert(e,t){const o=this.buildTransformation.with(e.data),{before:s,operation:i,after:n}=this.locateOperation(t);this.operations=[...s,i,e,...n.map((e=>e.transformed(o)))]}append(e){this.operations.push(e)}appendBranch(e){this.operations=this.operations.concat(e.operations)}fork(e){const{after:t}=this.locateOperation(e);return new dH(this.buildTransformation,t)}transform(e){this.operations=this.operations.map((t=>t.transformed(e)))}cutBefore(e){this.operations=this.locateOperation(e).before}cutAfter(e){const{before:t,operation:o}=this.locateOperation(e);this.operations=t.concat([o])}locateOperation(e){const t=this.operations.findIndex((t=>t.id===e));if(-1===t)throw new Error(`Operation ${e} not found`);return{before:this.operations.slice(0,t),operation:this.operations[t],after:this.operations.slice(t+1)}}}class uH{id;data;constructor(e,t){this.id=e,this.data=t}transformed(e){return new gH(this.id,ut((()=>e(this.data))))}}class gH{id;lazyData;constructor(e,t){this.id=e,this.lazyData=t}get data(){return this.lazyData()}transformed(e){return new gH(this.id,this.lazyData.map(e))}}class pH{operations;constructor(e){this.operations=e}[Symbol.iterator](){return this.operations[Symbol.iterator]()}stopWith(e){return new pH(function*(e,t){for(const o of e)if(yield o,o.operation.id===t)return}(this.operations,e))}stopBefore(e){return new pH(function*(e,t){for(const o of e){if(o.operation.id===t)return;yield o}}(this.operations,e))}startAfter(e){return new pH(function*(e,t){let o=!0;for(const s of e)o||(yield s),s.operation.id===t&&(o=!1)}(this.operations,e))}}class mH{buildTransformation;branches;branchingOperationIds=new Map;constructor(e,t){this.buildTransformation=e,this.branches=[t]}getLastBranch(){return this.branches[this.branches.length-1]}execution(e){return new pH(Xe(this._execution(e),this._execution(e)))}revertedExecution(e){return new pH(Xe(this._revertedExecution(e),this._revertedExecution(e)))}insertOperationLast(e,t){const o=e.getLastOperationId()||this.previousBranch(e)?.getLastOperationId();e.append(t),o&&this.insertPrevious(e,t,o)}insertOperationAfter(e,t,o){e.insert(t,o),this.updateNextWith(e,t,o),this.insertPrevious(e,t,o)}undo(e,t){const o=this.buildTransformation.without(t.data),s=this.branchingOperationIds.get(e);this.branchingOperationIds.set(e,t.id);const i=e.fork(t.id);s&&this.branchingOperationIds.set(i,s),this.insertBranchAfter(e,i),this.transform(i,o)}redo(e){const t=this.nextBranch(e);if(!t)return;const o=this.nextBranch(t);this.removeBranchFromTree(t);const s=this.branchingOperationIds.get(t);s?this.branchingOperationIds.set(e,s):this.branchingOperationIds.delete(e),o&&this.rebaseUp(o)}drop(e){for(const t of this.branches)t.contains(e)&&t.cutBefore(e)}findOperation(e,t){for(const o of this.revertedExecution(e))if(o.operation.id===t)return o;throw new Error(`Operation ${t} not found`)}rebaseUp(e){const{previousBranch:t,branchingOperation:o}=this.findPreviousBranchingOperation(e);if(!t||!o)return;const s=this.buildTransformation.without(o.data),i=t.fork(o.id);this.branchingOperationIds.set(i,this.branchingOperationIds.get(e)),this.removeBranchFromTree(e),this.insertBranchAfter(t,i),i.transform(s);const n=this.nextBranch(i);n&&this.rebaseUp(n)}removeBranchFromTree(e){const t=this.branches.findIndex((t=>t===e));this.branches.splice(t,1)}insertBranchAfter(e,t){const o=this.branches.findIndex((t=>t===e));this.branches.splice(o+1,0,t)}updateNextWith(e,t,o){const s=this.branchingOperationIds.get(e),i=this.nextBranch(e);if(s&&i)if(e.getFirstOperationAmong(o,s)===s){const n=this.addToNextBranch(e,i,s,t,o);this.updateNextWith(i,n,o)}else{const e=this.buildTransformation.with(t.data);this.transform(i,e)}}addToNextBranch(e,t,o,s,i){let n=s;return i===o?(n=this.getTransformedOperation(e,o,s),t.prepend(n)):t.contains(i)?(n=this.getTransformedOperation(e,o,s),t.insert(n,i)):t.append(s),n}getTransformedOperation(e,t,o){const s=e.getOperation(t),i=this.buildTransformation.without(s.data);return o.transformed(i)}shouldExecute(e,t){return t.id!==this.branchingOperationIds.get(e)}transform(e,t){e.transform(t);const o=this.nextBranch(e);o&&this.transform(o,t)}insertPrevious(e,t,o){const{previousBranch:s,branchingOperation:i}=this.findPreviousBranchingOperation(e);if(!s||!i)return;const n=this.buildTransformation.with(i.data),r=e.fork(o);r.transform(n),s.cutAfter(o),s.appendBranch(r);const a=t.transformed(n);this.insertPrevious(s,a,o)}findPreviousBranchingOperation(e){const t=this.previousBranch(e);if(!t)return{previousBranch:void 0,branchingOperation:void 0};const o=this.branchingOperationIds.get(t);return o?{previousBranch:t,branchingOperation:t.getOperation(o)}:{previousBranch:void 0,branchingOperation:void 0}}nextBranch(e){const t=this.branches.findIndex((t=>t===e));if(-1!==t)return this.branches[t+1]}previousBranch(e){const t=this.branches.findIndex((t=>t===e));if(-1!==t)return this.branches[t-1]}*_revertedExecution(e){const t=this.branchingOperationIds.get(e);let o=!!t;const s=e.getOperations();for(let i=s.length-1;i>=0;i--){const n=s[i];n.id===t&&(o=!1),o||(yield{operation:n,branch:e,isCancelled:!this.shouldExecute(e,n)})}const i=this.previousBranch(e);yield*i?this._revertedExecution(i):[]}*_execution(e){for(const t of e.getOperations())if(yield{operation:t,branch:e,isCancelled:!this.shouldExecute(e,t)},t.id===this.branchingOperationIds.get(e)){const t=this.nextBranch(e);return void(yield*t?this._execution(t):[])}if(!this.branchingOperationIds.get(e)){const t=this.nextBranch(e);yield*t?this._execution(t):[]}}}class fH{HEAD_BRANCH;HEAD_OPERATION;tree;applyOperation;revertOperation;buildEmpty;buildTransformation;constructor(e){this.applyOperation=e.applyOperation,this.revertOperation=e.revertOperation,this.buildEmpty=e.buildEmpty,this.buildTransformation=e.buildTransformation,this.HEAD_BRANCH=new dH(this.buildTransformation),this.tree=new mH(this.buildTransformation,this.HEAD_BRANCH);const t=e.initialOperationId,o=new uH(t,this.buildEmpty(t));this.tree.insertOperationLast(this.HEAD_BRANCH,o),this.HEAD_OPERATION=o}get(e){return this.tree.findOperation(this.HEAD_BRANCH,e).operation.data}append(e,t){const o=new uH(e,t),s=this.tree.getLastBranch();this.tree.insertOperationLast(s,o),this.HEAD_BRANCH=s,this.HEAD_OPERATION=o}insert(e,t,o){const s=new uH(e,t);this.revertTo(o),this.tree.insertOperationAfter(this.HEAD_BRANCH,s,o),this.fastForward()}undo(e,t,o){const{branch:s,operation:i}=this.tree.findOperation(this.HEAD_BRANCH,e);this.revertBefore(e),this.tree.undo(s,i),this.fastForward(),this.insert(t,this.buildEmpty(t),o)}redo(e,t,o){const{branch:s}=this.tree.findOperation(this.HEAD_BRANCH,e);this.revertBefore(e),this.tree.redo(s),this.fastForward(),this.insert(t,this.buildEmpty(t),o)}rebase(e){const t=this.get(e),o=[...this.tree.execution(this.HEAD_BRANCH).startAfter(e)];this.revertBefore(e);const s=this.HEAD_OPERATION.id;this.tree.drop(e),this.insert(e,t,s);for(const{operation:e}of o)this.insert(e.id,e.data,this.HEAD_OPERATION.id)}revertBefore(e){const t=this.tree.revertedExecution(this.HEAD_BRANCH).stopWith(e);this.revert(t)}revertTo(e){const t=e?this.tree.revertedExecution(this.HEAD_BRANCH).stopBefore(e):this.tree.revertedExecution(this.HEAD_BRANCH);this.revert(t)}revert(e){for(const{next:t,operation:o,isCancelled:s}of e)s||this.revertOperation(o.data),t&&(this.HEAD_BRANCH=t.branch,this.HEAD_OPERATION=t.operation)}fastForward(){const e=this.HEAD_OPERATION?this.tree.execution(this.HEAD_BRANCH).startAfter(this.HEAD_OPERATION.id):this.tree.execution(this.HEAD_BRANCH);for(const{operation:t,branch:o,isCancelled:s}of e)s||this.applyOperation(t.data),this.HEAD_OPERATION=t,this.HEAD_BRANCH=o}}function vH(e){return new fH({initialOperationId:e.initialRevisionId,applyOperation:t=>{const o=t.commands.slice(),{changes:s}=e.recordChanges((()=>{for(const t of o)e.dispatch(t)}));t.setChanges(s)},revertOperation:e=>function(e){for(const t of e.slice().reverse())for(let e=t.changes.length-1;e>=0;e--){bH(t.changes[e])}}([e]),buildEmpty:e=>new jV(e,"empty",[]),buildTransformation:{with:e=>t=>new jV(t.id,t.clientId,qV(t.commands,e.commands),t.rootCommand,void 0,t.timestamp),without:e=>t=>new jV(t.id,t.clientId,qV(t.commands,e.commands.map(hH).flat()),t.rootCommand,void 0,t.timestamp)}})}function bH(e){const t=e.target,o=e.key,s=e.before;void 0===s?delete t[o]:t[o]=s}class SH{observers=new Map;defaultSubscription;mainSubscription;registerAsDefault(e,t){this.defaultSubscription={owner:e,callbacks:t},this.mainSubscription||(this.mainSubscription=this.defaultSubscription)}observe(e,t){this.observers.set(e,{owner:e,callbacks:t})}capture(e,t){if(this.observers.get(e))throw new Error("You are already subscribed forever");this.mainSubscription?.owner&&this.mainSubscription.owner!==e&&this.mainSubscription.callbacks.release?.(),this.mainSubscription={owner:e,callbacks:t}}release(e){this.mainSubscription?.owner!==e||this.observers.get(e)||(this.mainSubscription=this.defaultSubscription)}getBackToDefault(){this.mainSubscription!==this.defaultSubscription&&(this.mainSubscription?.callbacks.release?.(),this.mainSubscription=this.defaultSubscription)}isListening(e){return this.mainSubscription?.owner===e}send(e){this.mainSubscription?.callbacks.handleEvent(e),this.observers.forEach((t=>t.callbacks.handleEvent(e)))}}class CH{getters;stream;anchor;defaultAnchor;constructor(e){this.getters=e,this.stream=new SH,this.anchor={cell:{col:0,row:0},zone:Dr({col:0,row:0})},this.defaultAnchor=this.anchor}capture(e,t,o){this.stream.capture(e,o),this.anchor=t}registerAsDefault(e,t,o){this.checkAnchorZoneOrThrow(t),this.stream.registerAsDefault(e,o),this.defaultAnchor=t,this.capture(e,t,o)}resetDefaultAnchor(e,t){this.checkAnchorZoneOrThrow(t),this.stream.isListening(e)&&(this.anchor=t),this.defaultAnchor=t}resetAnchor(e,t){this.checkAnchorZoneOrThrow(t),this.stream.isListening(e)&&(this.anchor=t)}observe(e,t){this.stream.observe(e,t)}release(e){this.stream.isListening(e)&&(this.stream.release(e),this.anchor=this.defaultAnchor)}getBackToDefault(){this.stream.getBackToDefault()}modifyAnchor(e,t,o){const s=this.getters.getActiveSheetId();return e={...e,zone:this.getters.expandZone(s,e.zone)},this.processEvent({options:o,anchor:e,mode:t})}selectZone(e,t={scrollIntoView:!0}){return this.modifyAnchor(e,"overrideSelection",t)}selectCell(e,t){const o=Dr({col:e,row:t});return this.selectZone({zone:o,cell:{col:e,row:t}},{scrollIntoView:!0})}moveAnchorCell(e,t=1){if("end"!==t&&t<=0)return new Vs("InvalidSelectionStep");const{col:o,row:s}=this.getNextAvailablePosition(e,t);return this.selectCell(o,s)}setAnchorCorner(e,t){const o=this.getters.getActiveSheetId(),{col:s,row:i}=this.anchor.cell,n={left:Math.min(s,e),top:Math.min(i,t),right:Math.max(s,e),bottom:Math.max(i,t)},r={zone:this.getters.expandZone(o,n),cell:{col:s,row:i}};return this.processEvent({mode:"updateAnchor",anchor:r,options:{scrollIntoView:!1}})}addCellToSelection(e,t){const o=this.getters.getActiveSheetId();({col:e,row:t}=this.getters.getMainCellPosition({sheetId:o,col:e,row:t}));const s=this.getters.expandZone(o,Dr({col:e,row:t}));return this.processEvent({options:{scrollIntoView:!0},anchor:{zone:s,cell:{col:e,row:t}},mode:"newAnchor"})}resizeAnchorZone(e,t=1){if("end"!==t&&t<=0)return new Vs("InvalidSelectionStep");const o=this.getters.getActiveSheetId(),s=this.anchor,{col:i,row:n}=s.cell,{left:r,right:a,top:l,bottom:c}=s.zone,h=this.getStartingPosition(e),[d,u]=this.deltaToTarget(h,e,t);if(0===d&&0===u)return Vs.Success;let g=s.zone;const p=e=>{e=Rr(e);const{left:t,right:s,top:i,bottom:n}=this.getters.expandZone(o,e);return{left:Math.max(0,t),right:Math.min(this.getters.getNumberCols(o)-1,s),top:Math.max(0,i),bottom:Math.min(this.getters.getNumberRows(o)-1,n)}},{cell:m,zone:f}=this.getReferenceAnchor(),{col:v,row:b}=m;let S=0;for(;null!==g;){if(S++,d<0){const e=this.getNextAvailableCol(d,a-(S-1),b);g=f.right<=a-S?p({top:l,left:r,bottom:c,right:e}):null}if(d>0){const e=this.getNextAvailableCol(d,r+(S-1),b);g=r+S<=f.left?p({top:l,left:e,bottom:c,right:a}):null}if(u<0){const e=this.getNextAvailableRow(u,v,c-(S-1));g=f.bottom<=c-S?p({top:l,left:r,bottom:e,right:a}):null}if(u>0){const e=this.getNextAvailableRow(u,v,l+(S-1));g=l+S<=f.top?p({top:e,left:r,bottom:c,right:a}):null}if(g=g?Rr(g):g,g&&!br(g,s.zone))return this.processEvent({options:{scrollIntoView:!0},mode:"updateAnchor",anchor:{zone:g,cell:{col:i,row:n}}})}g=p(fr({top:n,bottom:n,left:i,right:i},Rr({top:this.getNextAvailableRow(u,v,l),left:this.getNextAvailableCol(d,r,b),bottom:this.getNextAvailableRow(u,v,c),right:this.getNextAvailableCol(d,a,b)})));const C={zone:g,cell:{col:i,row:n}};return this.processEvent({anchor:C,mode:"updateAnchor",options:{scrollIntoView:!0}})}selectColumn(e,t){const o=this.getters.getActiveSheetId(),s=this.getters.getNumberRows(o)-1;let i={left:e,right:e,top:0,bottom:s};const n=this.getters.findFirstVisibleColRowIndex(o,"ROW");let r,a;switch(t){case"overrideSelection":case"newAnchor":r=e,a=n;break;case"updateAnchor":({col:r,row:a}=this.anchor.cell),i=fr(i,{left:r,right:r,top:n,bottom:s})}return this.processEvent({options:{scrollIntoView:!1,unbounded:!0},anchor:{zone:i,cell:{col:r,row:a}},mode:t})}selectRow(e,t){const o=this.getters.getActiveSheetId(),s=this.getters.getNumberCols(o)-1;let i={top:e,bottom:e,left:0,right:s};const n=this.getters.findFirstVisibleColRowIndex(o,"COL");let r,a;switch(t){case"overrideSelection":case"newAnchor":r=n,a=e;break;case"updateAnchor":({col:r,row:a}=this.anchor.cell),i=fr(i,{left:n,right:s,top:a,bottom:a})}return this.processEvent({options:{scrollIntoView:!1,unbounded:!0},anchor:{zone:i,cell:{col:r,row:a}},mode:t})}loopSelection(){const e=this.getters.getActiveSheetId(),t=this.anchor;if(br(this.anchor.zone,this.getters.getSheetZone(e)))return this.modifyAnchor({...t,zone:Dr(t.cell)},"updateAnchor",{scrollIntoView:!1});const o=this.getters.getContiguousZone(e,t.zone);return mt(o,t.zone)?this.selectAll():this.modifyAnchor({...t,zone:o},"updateAnchor",{scrollIntoView:!1})}selectTableAroundSelection(){const e=this.getters.getActiveSheetId(),t=this.getters.getContiguousZone(e,this.anchor.zone);return this.modifyAnchor({...this.anchor,zone:t},"updateAnchor",{scrollIntoView:!1})}selectAll(){const e=this.getters.getActiveSheetId(),t={left:0,top:0,bottom:this.getters.getNumberRows(e)-1,right:this.getters.getNumberCols(e)-1};return this.processEvent({mode:"overrideSelection",anchor:{zone:t,cell:this.anchor.cell},options:{scrollIntoView:!1}})}isListening(e){return this.stream.isListening(e)}processEvent(e){const t={...e,previousAnchor:ze(this.anchor)},o=this.checkEventAnchorZone(t);return"Success"!==o?new Vs(o):(this.anchor=t.anchor,this.stream.send(t),Vs.Success)}checkEventAnchorZone(e){return this.checkAnchorZone(e.anchor)}checkAnchorZone(e){const{cell:t,zone:o}=e;if(!Cr(t.col,t.row,o))return"InvalidAnchorZone";const{left:s,right:i,top:n,bottom:r}=o,a=this.getters.getActiveSheetId(),l=this.getters.findVisibleHeader(a,"COL",s,i);return void 0===this.getters.findVisibleHeader(a,"ROW",n,r)||void 0===l?"SelectionOutOfBound":"Success"}checkAnchorZoneOrThrow(e){if("InvalidAnchorZone"===this.checkAnchorZone(e))throw new Error("The provided anchor is invalid. The cell must be part of the zone.")}getNextAvailablePosition(e,t=1){const{col:o,row:s}=this.anchor.cell,i=this.deltaToTarget({col:o,row:s},e,t);return{col:this.getNextAvailableCol(i[0],o,s),row:this.getNextAvailableRow(i[1],o,s)}}getNextAvailableCol(e,t,o){const s=this.getters.getActiveSheetId(),i={col:t,row:o};return this.getNextAvailableHeader(e,"COL",t,i,(e=>this.getters.isInSameMerge(s,t,o,e,o)))}getNextAvailableRow(e,t,o){const s=this.getters.getActiveSheetId(),i={col:t,row:o};return this.getNextAvailableHeader(e,"ROW",o,i,(e=>this.getters.isInSameMerge(s,t,o,t,e)))}getNextAvailableHeader(e,t,o,s,i){const n=this.getters.getActiveSheetId();if(0===e)return o;const r=Math.sign(e);let a=o+e;for(;i(a);)a+=r;for(;this.getters.isHeaderHidden(n,t,a);)a+=r;return a<0||a>this.getters.getNumberHeaders(n,t)-1?this.getters.isHeaderHidden(n,t,o)?this.getNextAvailableHeader(-r,t,o,s,i):o:a}getReferenceAnchor(){const e=this.getters.getActiveSheetId(),t=this.anchor,{left:o,right:s,top:i,bottom:n}=t.zone,{col:r,row:a}=t.cell,l=this.getters.isColHidden(e,r)&&this.getters.findVisibleHeader(e,"COL",o,s)||r,c=this.getters.isRowHidden(e,a)&&this.getters.findVisibleHeader(e,"ROW",i,n)||a;return{cell:{col:l,row:c},zone:this.getters.expandZone(e,{left:l,right:l,top:c,bottom:c})}}deltaToTarget(e,t,o){switch(t){case"up":return"end"!==o?[0,-o]:[0,this.getEndOfCluster(e,"rows",-1)-e.row];case"down":return"end"!==o?[0,o]:[0,this.getEndOfCluster(e,"rows",1)-e.row];case"left":return"end"!==o?[-o,0]:[this.getEndOfCluster(e,"cols",-1)-e.col,0];case"right":return"end"!==o?[o,0]:[this.getEndOfCluster(e,"cols",1)-e.col,0]}}getStartingPosition(e){let{col:t,row:o}=this.getPosition();const s=this.anchor.zone;switch(e){case"down":case"up":o=o===s.top?s.bottom:s.top;break;case"left":case"right":t=t===s.right?s.left:s.right}return{col:t,row:o}}getEndOfCluster(e,t,o){const s=this.getters.getActiveSheetId();let i=e;const n=this.getNextCellPosition(e,t,o),r=this.isCellSkippableInCluster({...i,sheetId:s})||this.isCellSkippableInCluster({...n,sheetId:s})?"nextCluster":"endOfCluster";for(;;){const e=this.getNextCellPosition(i,t,o);if(i.col===e.col&&i.row===e.row)break;const n=this.isCellSkippableInCluster({...e,sheetId:s});if("endOfCluster"===r&&n)break;if("nextCluster"===r&&!n){i=e;break}i=e}return"cols"===t?i.col:i.row}getNextCellPosition(e,t,o){const s={...e};return s["cols"===t?"col":"row"]="cols"===t?this.getNextAvailableCol(o,s.col,s.row):this.getNextAvailableRow(o,s.col,s.row),{col:s.col,row:s.row}}getPosition(){return{...this.anchor.cell}}isCellSkippableInCluster(e){const t=this.getters.getMainCellPosition(e),o=this.getters.getEvaluatedCell(t);return o.type===Ts.empty||o.type===Ts.text&&""===o.value}}function yH(e){if("string"==typeof e)return{};if("number"==typeof e)return[];throw new Error("Cannot create new node")}class wH{changes;commands=[];recordChanges(e){return this.changes=[],this.commands=[],e(),{changes:this.changes,commands:this.commands}}addCommand(e){this.commands.push(e)}addChange(...e){const t=e.pop();let o=e[0];const s=e.at(-1),i=e.length-2;for(let t=1;t<=i;t++){const s=e[t];if(void 0===o[s]){const i=e[t+1];o[s]=yH(i)}o=o[s]}o[s]!==t&&(this.changes?.push({key:s,target:o,before:o[s]}),void 0===t?delete o[s]:o[s]=t)}}const IH=17781237,xH=17781238,EH=88853993,RH=88853994;function TH(e,t,o){const s=[["xmlns:r",Mh],["xmlns:a",Dh],["xmlns:c",_h]],i=AH({backgroundColor:e.data.backgroundColor,line:{color:"000000"}});let n=vx``;if(e.data.title?.text){const t=wy(tC(e.data.backgroundColor)),o=e.data.title.fontSize??K;n=vx`
2586
2586
  <c:title>
2587
- ${DH(e.data.title.text,t,o,e.data.title)}
2587
+ ${_H(e.data.title.text,t,o,e.data.title)}
2588
2588
  <c:overlay val="0" />
2589
2589
  </c:title>
2590
- `}let r=vx``;switch(e.data.type){case"bar":r=function(e){const t=e.dataSets.map((e=>e.backgroundColor??"")),o=new po(e.dataSets.length,t),s=[],i=[];for(const[t,n]of Object.entries(e.dataSets)){const r=wy(o.next()),a=TH({backgroundColor:r,line:{color:r}}),l=vx`
2590
+ `}let r=vx``;switch(e.data.type){case"bar":r=function(e){const t=e.dataSets.map((e=>e.backgroundColor??"")),o=new po(e.dataSets.length,t),s=[],i=[];for(const[t,n]of Object.entries(e.dataSets)){const r=wy(o.next()),a=AH({backgroundColor:r,line:{color:r}}),l=vx`
2591
2591
  <c:ser>
2592
2592
  <c:idx val="${t}"/>
2593
2593
  <c:order val="${t}"/>
2594
- ${OH(n.trend,r)}
2595
- ${PH(n.label)}
2594
+ ${FH(n.trend,r)}
2595
+ ${MH(n.label)}
2596
2596
  ${a}
2597
- ${e.labelRange?vx`<c:cat>${kH(e.labelRange)}</c:cat>`:""} <!-- x-coordinate values -->
2597
+ ${e.labelRange?vx`<c:cat>${VH(e.labelRange)}</c:cat>`:""} <!-- x-coordinate values -->
2598
2598
  <c:val> <!-- x-coordinate values -->
2599
- ${VH(n.range)}
2599
+ ${LH(n.range)}
2600
2600
  </c:val>
2601
2601
  </c:ser>
2602
2602
  `;n.rightYAxis?i.push(l):s.push(l)}const n=e.stacked?"stacked":"clustered",r=e.stacked?100:-20;return vx`
@@ -2609,11 +2609,11 @@
2609
2609
  <!-- each data marker in the series does not have a different color -->
2610
2610
  <c:varyColors val="0"/>
2611
2611
  ${fx(s)}
2612
- <c:axId val="${wH}" />
2613
- <c:axId val="${xH}" />
2612
+ <c:axId val="${IH}" />
2613
+ <c:axId val="${EH}" />
2614
2614
  </c:barChart>
2615
- ${NH("b","c:catAx",wH,xH,e.axesDesign?.x?.title,e.fontColor)}
2616
- ${NH("l","c:valAx",xH,wH,e.axesDesign?.y?.title,e.fontColor)}
2615
+ ${kH("b","c:catAx",IH,EH,e.axesDesign?.x?.title,e.fontColor)}
2616
+ ${kH("l","c:valAx",EH,IH,e.axesDesign?.y?.title,e.fontColor)}
2617
2617
  `:""}
2618
2618
  ${i.length?vx`
2619
2619
  <c:barChart>
@@ -2624,25 +2624,25 @@
2624
2624
  <!-- each data marker in the series does not have a different color -->
2625
2625
  <c:varyColors val="0"/>
2626
2626
  ${fx(i)}
2627
- <c:axId val="${wH+1}" />
2628
- <c:axId val="${xH+1}" />
2627
+ <c:axId val="${IH+1}" />
2628
+ <c:axId val="${EH+1}" />
2629
2629
  </c:barChart>
2630
- ${NH("b","c:catAx",wH+1,xH+1,e.axesDesign?.x?.title,e.fontColor,s.length?1:0)}
2631
- ${NH("r","c:valAx",xH+1,wH+1,e.axesDesign?.y1?.title,e.fontColor)}
2630
+ ${kH("b","c:catAx",IH+1,EH+1,e.axesDesign?.x?.title,e.fontColor,s.length?1:0)}
2631
+ ${kH("r","c:valAx",EH+1,IH+1,e.axesDesign?.y1?.title,e.fontColor)}
2632
2632
  `:""}`}(e.data);break;case"combo":r=function(e){const t=e.dataSets,o=t.map((e=>e.backgroundColor??"")),s=new po(t.length,o);let i=t[0];const n=wy(s.next()),r=i.rightYAxis??!1,a=vx`
2633
2633
  <c:ser>
2634
2634
  <c:idx val="0"/>
2635
2635
  <c:order val="0"/>
2636
- ${OH(i.trend,n)}
2637
- ${PH(i.label)}
2638
- ${TH({backgroundColor:n,line:{color:n}})}
2639
- ${e.labelRange?vx`<c:cat>${kH(e.labelRange)}</c:cat>`:""}
2636
+ ${FH(i.trend,n)}
2637
+ ${MH(i.label)}
2638
+ ${AH({backgroundColor:n,line:{color:n}})}
2639
+ ${e.labelRange?vx`<c:cat>${VH(e.labelRange)}</c:cat>`:""}
2640
2640
  <!-- x-coordinate values -->
2641
2641
  <c:val>
2642
- ${VH(i.range)}
2642
+ ${LH(i.range)}
2643
2643
  </c:val>
2644
2644
  </c:ser>
2645
- `,l=[],c=[];for(let o=1;o<t.length;o++){i=t[o];const n=wy(s.next()),r=TH({backgroundColor:n,line:{color:n}}),a=vx`
2645
+ `,l=[],c=[];for(let o=1;o<t.length;o++){i=t[o];const n=wy(s.next()),r=AH({backgroundColor:n,line:{color:n}}),a=vx`
2646
2646
  <c:ser>
2647
2647
  <c:idx val="${o}"/>
2648
2648
  <c:order val="${o}"/>
@@ -2652,13 +2652,13 @@
2652
2652
  <c:size val="5"/>
2653
2653
  ${r}
2654
2654
  </c:marker>
2655
- ${OH(i.trend,n)}
2656
- ${PH(i.label)}
2655
+ ${FH(i.trend,n)}
2656
+ ${MH(i.label)}
2657
2657
  ${r}
2658
- ${e.labelRange?vx`<c:cat>${kH(e.labelRange)}</c:cat>`:""}
2658
+ ${e.labelRange?vx`<c:cat>${VH(e.labelRange)}</c:cat>`:""}
2659
2659
  <!-- x-coordinate values -->
2660
2660
  <c:val>
2661
- ${VH(i.range)}
2661
+ ${LH(i.range)}
2662
2662
  </c:val>
2663
2663
  </c:ser>
2664
2664
  `;i.rightYAxis?c.push(a):l.push(a)}const h=e.stacked?100:-20;return vx`
@@ -2670,8 +2670,8 @@
2670
2670
  <!-- each data marker in the series does not have a different color -->
2671
2671
  <c:varyColors val="0"/>
2672
2672
  ${a}
2673
- <c:axId val="${r?IH:wH}" />
2674
- <c:axId val="${r?EH:xH}" />
2673
+ <c:axId val="${r?xH:IH}" />
2674
+ <c:axId val="${r?RH:EH}" />
2675
2675
  </c:barChart>
2676
2676
  ${l.length?vx`
2677
2677
  <c:lineChart>
@@ -2679,8 +2679,8 @@
2679
2679
  <!-- each data marker in the series does not have a different color -->
2680
2680
  <c:varyColors val="0"/>
2681
2681
  ${fx(l)}
2682
- <c:axId val="${wH}" />
2683
- <c:axId val="${xH}" />
2682
+ <c:axId val="${IH}" />
2683
+ <c:axId val="${EH}" />
2684
2684
  </c:lineChart>
2685
2685
  `:""}
2686
2686
  ${c.length?vx`
@@ -2689,19 +2689,19 @@
2689
2689
  <!-- each data marker in the series does not have a different color -->
2690
2690
  <c:varyColors val="0"/>
2691
2691
  ${fx(c)}
2692
- <c:axId val="${IH}" />
2693
- <c:axId val="${EH}" />
2692
+ <c:axId val="${xH}" />
2693
+ <c:axId val="${RH}" />
2694
2694
  </c:lineChart>
2695
2695
  `:""}
2696
2696
  ${!r||l.length?vx`
2697
- ${NH("b","c:catAx",wH,xH,e.axesDesign?.x?.title,e.fontColor,l.length?1:0)}
2698
- ${NH("l","c:valAx",xH,wH,e.axesDesign?.y?.title,e.fontColor)}
2697
+ ${kH("b","c:catAx",IH,EH,e.axesDesign?.x?.title,e.fontColor,l.length?1:0)}
2698
+ ${kH("l","c:valAx",EH,IH,e.axesDesign?.y?.title,e.fontColor)}
2699
2699
  `:""}
2700
2700
  ${r||c.length?vx`
2701
- ${NH("b","c:catAx",IH,EH,e.axesDesign?.x?.title,e.fontColor,l.length||!r?1:0)}
2702
- ${NH("r","c:valAx",EH,IH,e.axesDesign?.y1?.title,e.fontColor)}
2701
+ ${kH("b","c:catAx",xH,RH,e.axesDesign?.x?.title,e.fontColor,l.length||!r?1:0)}
2702
+ ${kH("r","c:valAx",RH,xH,e.axesDesign?.y1?.title,e.fontColor)}
2703
2703
  `:""}
2704
- `}(e.data);break;case"line":r=function(e){const t=e.dataSets.map((e=>e.backgroundColor??"")),o=new po(e.dataSets.length,t),s=[],i=[];for(const[t,n]of Object.entries(e.dataSets)){const r=wy(o.next()),a=TH({line:{width:2.5,style:"solid",color:r}}),l=vx`
2704
+ `}(e.data);break;case"line":r=function(e){const t=e.dataSets.map((e=>e.backgroundColor??"")),o=new po(e.dataSets.length,t),s=[],i=[];for(const[t,n]of Object.entries(e.dataSets)){const r=wy(o.next()),a=AH({line:{width:2.5,style:"solid",color:r}}),l=vx`
2705
2705
  <c:ser>
2706
2706
  <c:idx val="${t}"/>
2707
2707
  <c:order val="${t}"/>
@@ -2709,14 +2709,14 @@
2709
2709
  <c:marker>
2710
2710
  <c:symbol val="circle" />
2711
2711
  <c:size val="5"/>
2712
- ${TH({backgroundColor:r,line:{color:r}})}
2712
+ ${AH({backgroundColor:r,line:{color:r}})}
2713
2713
  </c:marker>
2714
- ${OH(n.trend,r)}
2715
- ${PH(n.label)}
2714
+ ${FH(n.trend,r)}
2715
+ ${MH(n.label)}
2716
2716
  ${a}
2717
- ${e.labelRange?vx`<c:cat>${kH(e.labelRange)}</c:cat>`:""} <!-- x-coordinate values -->
2717
+ ${e.labelRange?vx`<c:cat>${VH(e.labelRange)}</c:cat>`:""} <!-- x-coordinate values -->
2718
2718
  <c:val> <!-- x-coordinate values -->
2719
- ${VH(n.range)}
2719
+ ${LH(n.range)}
2720
2720
  </c:val>
2721
2721
  </c:ser>
2722
2722
  `;n.rightYAxis?i.push(l):s.push(l)}const n=e.stacked?"stacked":"standard";return vx`
@@ -2726,11 +2726,11 @@
2726
2726
  <!-- each data marker in the series does not have a different color -->
2727
2727
  <c:varyColors val="0"/>
2728
2728
  ${fx(s)}
2729
- <c:axId val="${wH}" />
2730
- <c:axId val="${xH}" />
2729
+ <c:axId val="${IH}" />
2730
+ <c:axId val="${EH}" />
2731
2731
  </c:lineChart>
2732
- ${NH("b","c:catAx",wH,xH,e.axesDesign?.x?.title,e.fontColor)}
2733
- ${NH("l","c:valAx",xH,wH,e.axesDesign?.y?.title,e.fontColor)}
2732
+ ${kH("b","c:catAx",IH,EH,e.axesDesign?.x?.title,e.fontColor)}
2733
+ ${kH("l","c:valAx",EH,IH,e.axesDesign?.y?.title,e.fontColor)}
2734
2734
  `:""}
2735
2735
  ${i.length?vx`
2736
2736
  <c:lineChart>
@@ -2738,11 +2738,11 @@
2738
2738
  <!-- each data marker in the series does not have a different color -->
2739
2739
  <c:varyColors val="0"/>
2740
2740
  ${fx(i)}
2741
- <c:axId val="${wH+1}" />
2742
- <c:axId val="${xH+1}" />
2741
+ <c:axId val="${IH+1}" />
2742
+ <c:axId val="${EH+1}" />
2743
2743
  </c:lineChart>
2744
- ${NH("b","c:catAx",wH+1,xH+1,e.axesDesign?.x?.title,e.fontColor,s.length?1:0)}
2745
- ${NH("r","c:valAx",xH+1,wH+1,e.axesDesign?.y1?.title,e.fontColor)}
2744
+ ${kH("b","c:catAx",IH+1,EH+1,e.axesDesign?.x?.title,e.fontColor,s.length?1:0)}
2745
+ ${kH("r","c:valAx",EH+1,IH+1,e.axesDesign?.y1?.title,e.fontColor)}
2746
2746
  `:""}
2747
2747
  `}(e.data);break;case"scatter":r=function(e){const t=e.dataSets.map((e=>e.backgroundColor??"")),o=new po(e.dataSets.length,t),s=[],i=[];for(const[t,n]of Object.entries(e.dataSets)){const r=wy(o.next()),a=vx`
2748
2748
  <c:ser>
@@ -2759,15 +2759,15 @@
2759
2759
  <c:marker>
2760
2760
  <c:symbol val="circle" />
2761
2761
  <c:size val="5"/>
2762
- ${TH({backgroundColor:r,line:{color:r}})}
2762
+ ${AH({backgroundColor:r,line:{color:r}})}
2763
2763
  </c:marker>
2764
- ${OH(n.trend,r)}
2765
- ${PH(n.label)}
2764
+ ${FH(n.trend,r)}
2765
+ ${MH(n.label)}
2766
2766
  ${e.labelRange?vx`<c:xVal> <!-- x-coordinate values -->
2767
- ${VH(e.labelRange)}
2767
+ ${LH(e.labelRange)}
2768
2768
  </c:xVal>`:""}
2769
2769
  <c:yVal> <!-- y-coordinate values -->
2770
- ${VH(n.range)}
2770
+ ${LH(n.range)}
2771
2771
  </c:yVal>
2772
2772
  </c:ser>
2773
2773
  `;n.rightYAxis?i.push(a):s.push(a)}return vx`
@@ -2777,11 +2777,11 @@
2777
2777
  <c:varyColors val="0"/>
2778
2778
  <c:scatterStyle val="lineMarker"/>
2779
2779
  ${fx(s)}
2780
- <c:axId val="${wH}" />
2781
- <c:axId val="${xH}" />
2780
+ <c:axId val="${IH}" />
2781
+ <c:axId val="${EH}" />
2782
2782
  </c:scatterChart>
2783
- ${NH("b","c:valAx",wH,xH,e.axesDesign?.x?.title,e.fontColor)}
2784
- ${NH("l","c:valAx",xH,wH,e.axesDesign?.y?.title,e.fontColor)}
2783
+ ${kH("b","c:valAx",IH,EH,e.axesDesign?.x?.title,e.fontColor)}
2784
+ ${kH("l","c:valAx",EH,IH,e.axesDesign?.y?.title,e.fontColor)}
2785
2785
  `:""}
2786
2786
  ${i.length?vx`
2787
2787
  <c:scatterChart>
@@ -2789,12 +2789,12 @@
2789
2789
  <c:varyColors val="0"/>
2790
2790
  <c:scatterStyle val="lineMarker"/>
2791
2791
  ${fx(i)}
2792
- <c:axId val="${wH+1}" />
2793
- <c:axId val="${xH+1}" />
2792
+ <c:axId val="${IH+1}" />
2793
+ <c:axId val="${EH+1}" />
2794
2794
  </c:scatterChart>
2795
- ${NH("b","c:valAx",wH+1,xH+1,e.axesDesign?.x?.title,e.fontColor,s.length?1:0)}
2796
- ${NH("r","c:valAx",xH+1,wH+1,e.axesDesign?.y1?.title,e.fontColor)}
2797
- `:""}`}(e.data);break;case"pie":r=function(e,t,o,{holeSize:s}={holeSize:50}){const i=Ot(e.dataSets.map((e=>eA(e.range,t,o)))),n=new po(i),r=je(0,i).map((()=>wy(n.next()))),a=[];for(const[s,i]of Object.entries(e.dataSets).reverse()){const n=eA(i.range,t,o),l=[];for(const e of je(0,n)){const t=TH({backgroundColor:r[e],line:{color:"FFFFFF",width:1.5}});l.push(vx`
2795
+ ${kH("b","c:valAx",IH+1,EH+1,e.axesDesign?.x?.title,e.fontColor,s.length?1:0)}
2796
+ ${kH("r","c:valAx",EH+1,IH+1,e.axesDesign?.y1?.title,e.fontColor)}
2797
+ `:""}`}(e.data);break;case"pie":r=function(e,t,o,{holeSize:s}={holeSize:50}){const i=Ot(e.dataSets.map((e=>eA(e.range,t,o)))),n=new po(i),r=je(0,i).map((()=>wy(n.next()))),a=[];for(const[s,i]of Object.entries(e.dataSets).reverse()){const n=eA(i.range,t,o),l=[];for(const e of je(0,n)){const t=AH({backgroundColor:r[e],line:{color:"FFFFFF",width:1.5}});l.push(vx`
2798
2798
  <c:dPt>
2799
2799
  <c:idx val="${e}"/>
2800
2800
  ${t}
@@ -2803,22 +2803,22 @@
2803
2803
  <c:ser>
2804
2804
  <c:idx val="${s}"/>
2805
2805
  <c:order val="${s}"/>
2806
- ${PH(i.label)}
2806
+ ${MH(i.label)}
2807
2807
  ${fx(l)}
2808
- ${MH({showLeaderLines:!0})}
2809
- ${e.labelRange?vx`<c:cat>${kH(e.labelRange)}</c:cat>`:""}
2808
+ ${NH({showLeaderLines:!0})}
2809
+ ${e.labelRange?vx`<c:cat>${VH(e.labelRange)}</c:cat>`:""}
2810
2810
  <c:val>
2811
- ${VH(i.range)}
2811
+ ${LH(i.range)}
2812
2812
  </c:val>
2813
2813
  </c:ser>
2814
2814
  `)}return vx`
2815
2815
  <c:doughnutChart>
2816
2816
  <c:varyColors val="1" />
2817
2817
  <c:holeSize val="${s}" />
2818
- ${MH()}
2818
+ ${NH()}
2819
2819
  ${fx(a)}
2820
2820
  </c:doughnutChart>
2821
- `}(e.data,t,o,{holeSize:0});break;case"radar":r=function(e){const t=e.dataSets.map((e=>e.backgroundColor??"")),o=new po(e.dataSets.length,t),s=[];for(const[t,i]of Object.entries(e.dataSets)){const n=wy(o.next()),r=TH({line:{width:2.5,style:"solid",color:n}}),a=vx`
2821
+ `}(e.data,t,o,{holeSize:0});break;case"radar":r=function(e){const t=e.dataSets.map((e=>e.backgroundColor??"")),o=new po(e.dataSets.length,t),s=[];for(const[t,i]of Object.entries(e.dataSets)){const n=wy(o.next()),r=AH({line:{width:2.5,style:"solid",color:n}}),a=vx`
2822
2822
  <c:ser>
2823
2823
  <c:idx val="${t}"/>
2824
2824
  <c:order val="${t}"/>
@@ -2826,13 +2826,13 @@
2826
2826
  <c:marker>
2827
2827
  <c:symbol val="circle" />
2828
2828
  <c:size val="5"/>
2829
- ${TH({backgroundColor:n,line:{color:n}})}
2829
+ ${AH({backgroundColor:n,line:{color:n}})}
2830
2830
  </c:marker>
2831
- ${PH(i.label)}
2831
+ ${MH(i.label)}
2832
2832
  ${r}
2833
- ${e.labelRange?vx`<c:cat>${kH(e.labelRange)}</c:cat>`:""} <!-- x-coordinate values -->
2833
+ ${e.labelRange?vx`<c:cat>${VH(e.labelRange)}</c:cat>`:""} <!-- x-coordinate values -->
2834
2834
  <c:val> <!-- x-coordinate values -->
2835
- ${VH(i.range)}
2835
+ ${LH(i.range)}
2836
2836
  </c:val>
2837
2837
  </c:ser>
2838
2838
  `;s.push(a)}return vx`
@@ -2841,11 +2841,11 @@
2841
2841
  <c:radarStyle val="marker"/>
2842
2842
  <c:varyColors val="0"/>
2843
2843
  ${fx(s)}
2844
- <c:axId val="${wH}" />
2845
- <c:axId val="${xH}" />
2844
+ <c:axId val="${IH}" />
2845
+ <c:axId val="${EH}" />
2846
2846
  </c:radarChart>
2847
- ${NH("b","c:catAx",wH,xH,e.axesDesign?.x?.title,e.fontColor)}
2848
- ${NH("l","c:valAx",xH,wH,e.axesDesign?.y?.title,e.fontColor)}
2847
+ ${kH("b","c:catAx",IH,EH,e.axesDesign?.x?.title,e.fontColor)}
2848
+ ${kH("l","c:valAx",EH,IH,e.axesDesign?.y?.title,e.fontColor)}
2849
2849
  `}
2850
2850
  `}(e.data)}let a="t";switch(e.data.legendPosition){case"bottom":a="b";break;case"left":a="l";break;case"right":a="r";break;case"top":a="t"}const l=e.data.fontColor,c=vx`
2851
2851
  <c:chartSpace ${ux(s)}>
@@ -2859,32 +2859,32 @@
2859
2859
  <!-- how the chart element is placed on the chart -->
2860
2860
  <c:layout />
2861
2861
  ${r}
2862
- ${TH({backgroundColor:e.data.backgroundColor})}
2862
+ ${AH({backgroundColor:e.data.backgroundColor})}
2863
2863
  </c:plotArea>
2864
2864
  ${function(e,t){return vx`
2865
2865
  <c:legend>
2866
2866
  <c:legendPos val="${e}"/>
2867
2867
  <c:overlay val="0"/>
2868
- ${_H(10,t)}
2868
+ ${OH(10,t)}
2869
2869
  </c:legend>
2870
2870
  `}(a,l)}
2871
2871
  </c:chart>
2872
2872
  </c:chartSpace>
2873
- `;return gx(c)}function TH(e){return vx`
2873
+ `;return gx(c)}function AH(e){return vx`
2874
2874
  <c:spPr>
2875
- ${e.backgroundColor?AH(e.backgroundColor):""}
2875
+ ${e.backgroundColor?DH(e.backgroundColor):""}
2876
2876
  ${e.line?function(e){const t=[["cmpd","sng"]];e.width&&t.push(["w",QT(e.width)]);const o=e.style?vx`<a:prstDash val="${e.style}"/>`:"";return vx`
2877
2877
  <a:ln ${ux(t)}>
2878
- ${AH(e.color)}
2878
+ ${DH(e.color)}
2879
2879
  ${o}
2880
2880
  </a:ln>
2881
2881
  `}(e.line):""}
2882
2882
  </c:spPr>
2883
- `}function AH(e){return vx`
2883
+ `}function DH(e){return vx`
2884
2884
  <a:solidFill>
2885
2885
  <a:srgbClr val="${e}"/>
2886
2886
  </a:solidFill>
2887
- `}function DH(e,t="000000",o=K,s={}){return vx`
2887
+ `}function _H(e,t="000000",o=K,s={}){return vx`
2888
2888
  <c:tx>
2889
2889
  <c:rich>
2890
2890
  <a:bodyPr />
@@ -2892,7 +2892,7 @@
2892
2892
  <a:p>
2893
2893
  <a:pPr lvl="0">
2894
2894
  <a:defRPr b="${s?.bold?1:0}" i="${s?.italic?1:0}">
2895
- ${AH(t)}
2895
+ ${DH(t)}
2896
2896
  <a:latin typeface="+mn-lt"/>
2897
2897
  </a:defRPr>
2898
2898
  </a:pPr>
@@ -2903,22 +2903,22 @@
2903
2903
  </a:p>
2904
2904
  </c:rich>
2905
2905
  </c:tx>
2906
- `}function _H(e=12,t="000000",o=!1,s=!1){return vx`
2906
+ `}function OH(e=12,t="000000",o=!1,s=!1){return vx`
2907
2907
  <c:txPr>
2908
2908
  <a:bodyPr/>
2909
2909
  <a:lstStyle/>
2910
2910
  <a:p>
2911
2911
  <a:pPr lvl="0">
2912
2912
  <a:defRPr ${ux([["b",o?"1":"0"],["i",s?"1":"0"],["sz",100*e]])}>
2913
- ${AH(t)}
2913
+ ${DH(t)}
2914
2914
  <a:latin typeface="+mn-lt"/>
2915
2915
  </a:defRPr>
2916
2916
  </a:pPr>
2917
2917
  </a:p>
2918
2918
  </c:txPr>
2919
- `}function OH(e,t){if(!e)return vx``;const{type:o,order:s,window:i}=e,n=[];switch(o){case"poly":s&&s>1?(n.push(vx`<c:trendlineType val="poly" />`),n.push(vx`<c:order val="${s}" />`)):n.push(vx`<c:trendlineType val="linear" />`);break;case"movingAvg":n.push(vx`<c:trendlineType val="movingAvg" />`),i&&n.push(vx`<c:period val="${i}" />`);break;default:n.push(vx`<c:trendlineType val="${o}" />`)}return vx`
2919
+ `}function FH(e,t){if(!e)return vx``;const{type:o,order:s,window:i}=e,n=[];switch(o){case"poly":s&&s>1?(n.push(vx`<c:trendlineType val="poly" />`),n.push(vx`<c:order val="${s}" />`)):n.push(vx`<c:trendlineType val="linear" />`);break;case"movingAvg":n.push(vx`<c:trendlineType val="movingAvg" />`),i&&n.push(vx`<c:period val="${i}" />`);break;default:n.push(vx`<c:trendlineType val="${o}" />`)}return vx`
2920
2920
  <c:trendline>
2921
- ${function(e,t){if(!e)return vx``;const o=[["val",e.color?wy(e.color).slice(-6):FH(t)]];return vx`
2921
+ ${function(e,t){if(!e)return vx``;const o=[["val",e.color?wy(e.color).slice(-6):PH(t)]];return vx`
2922
2922
  <c:spPr>
2923
2923
  <a:ln w="19050" cap="rnd">
2924
2924
  <a:solidFill>
@@ -2933,13 +2933,13 @@
2933
2933
  `}(e,t)}
2934
2934
  ${fx(n)}
2935
2935
  </c:trendline>
2936
- `}function FH(e){return wy(to(e,.5))}function PH(e){return e?"text"in e&&e.text?vx`
2936
+ `}function PH(e){return wy(to(e,.5))}function MH(e){return e?"text"in e&&e.text?vx`
2937
2937
  <c:tx><c:v>${e.text}</c:v></c:tx>
2938
2938
  `:"reference"in e&&e.reference?vx`
2939
2939
  <c:tx>
2940
- ${kH(e.reference)}
2940
+ ${VH(e.reference)}
2941
2941
  </c:tx>
2942
- `:vx``:vx``}function MH({showLeaderLines:e}={showLeaderLines:!1}){return vx`
2942
+ `:vx``:vx``}function NH({showLeaderLines:e}={showLeaderLines:!1}){return vx`
2943
2943
  <dLbls>
2944
2944
  <c:showLegendKey val="0"/>
2945
2945
  <c:showVal val="0"/>
@@ -2949,7 +2949,7 @@
2949
2949
  <c:showBubbleSize val="0"/>
2950
2950
  <c:showLeaderLines val="${e?"1":"0"}"/>
2951
2951
  </dLbls>
2952
- `}function NH(e,t,o,s,i,n,r=0){const a=i?.color?wy(i.color):n,l=i?.fontSize??J;return vx`
2952
+ `}function kH(e,t,o,s,i,n,r=0){const a=i?.color?wy(i.color):n,l=i?.fontSize??J;return vx`
2953
2953
  <${t}>
2954
2954
  <c:axId val="${o}"/>
2955
2955
  <c:crossAx val="${s}"/> <!-- reference to the other axe of the chart -->
@@ -2961,34 +2961,34 @@
2961
2961
  <c:axPos val="${e}" />
2962
2962
  ${function(e="B7B7B7"){return vx`
2963
2963
  <c:majorGridlines>
2964
- ${TH({line:{color:e}})}
2964
+ ${AH({line:{color:e}})}
2965
2965
  </c:majorGridlines>
2966
2966
  `}()}
2967
2967
  <c:majorTickMark val="out" />
2968
2968
  <c:minorTickMark val="none" />
2969
2969
  <c:numFmt formatCode="General" sourceLinked="1" />
2970
2970
  <c:title>
2971
- ${DH(i?.text??"",a,l,i)}
2971
+ ${_H(i?.text??"",a,l,i)}
2972
2972
  </c:title>
2973
- ${_H(10,n)}
2973
+ ${OH(10,n)}
2974
2974
  </${t}>
2975
2975
  <!-- <tickLblPos/> omitted -->
2976
- `}function kH(e){return vx`
2976
+ `}function VH(e){return vx`
2977
2977
  <c:strRef>
2978
2978
  <c:f>${e}</c:f>
2979
2979
  </c:strRef>
2980
- `}function VH(e){return vx`
2980
+ `}function LH(e){return vx`
2981
2981
  <c:numRef>
2982
2982
  <c:f>${e}</c:f>
2983
2983
  <c:numCache />
2984
2984
  </c:numRef>
2985
- `}function LH(e,t,o){if(!e)return{attrs:[],node:vx``};const s=function(e){switch(typeof e){case"boolean":return"b";case"string":return"str";case"number":return"n";default:return}}(t);if(void 0===s)return{attrs:[],node:vx``};var i;return{attrs:[["cm","1"],["t",s]],node:vx`<f t="array" ref="${o}">${UH(e)}</f><v>${(i=t)===Js.InvalidReference?"#REF!":i}</v>`}}function HH(e,t,o=!1){let s=e;const i=[],n=s.trim().toUpperCase();return!o&&["TRUE","FALSE"].includes(n)?(s="TRUE"===n?"1":"0",i.push(["t","b"])):!o&&Is(s,$s)||(s=jT(e,t),i.push(["t","s"])),{attrs:i,node:vx`<v>${s}</v>`}}function UH(e){let t;"="===e[0]&&(e=e.slice(1));try{t=tv(e)}catch(t){return e}return t=sv(t,"STRING",BH),t=sv(t,"FUNCALL",(e=>e=function(e){const t=e.value.toUpperCase(),o=e.args,s=zh[t];if(s){const i=CS.content[t].args.filter((e=>!e.optional)),n=i.length-e.args.length;if(n)for(let t=e.args.length;t<i.length;t++){const e=s[t-n];o.push({type:e.type,value:e.value,tokenEndIndex:0,tokenStartIndex:0})}}return{...e,args:o}}(e=function(e){const t=e.value.toUpperCase();return{...e,value:$h.includes(t)?`_xlfn.${t}`:t}}(e={...e,value:e.value.toUpperCase()})))),t=sv(t,"REFERENCE",(e=>e.value===Js.InvalidReference?{...e,value:"#REF!"}:e)),t?av(t):e}function BH(e){const t=e.value.replace(new RegExp('"',"g"),""),o=ls(t,$s);if(o){const s=[];return(es.test(t)||ts.test(t))&&s.push("yyyy-mm-dd"),is.test(t)&&s.push("hh:mm:ss"),{...e,value:bn(o.value,{format:s.join(" "),locale:$s})}}return{...e,value:e.value.replace(/\\"/g,'""')}}function zH(e,t){const o=[];for(const s of t)switch(s.rule.type){case"CellIsRule":o.push($H(s,s.rule,e));break;case"ColorScaleRule":o.push(WH(s,s.rule));break;case"IconSetRule":o.push(qH(s,s.rule));break;case"DataBarRule":o.push(GH(s,s.rule));break;default:console.warn(`Conditional formatting ${s.rule.type} not implemented`)}return o}function $H(e,t,o){const s=ZH(e),i=BT(t.operator);s.push(...function(e){const t=BT(e.operator);switch(e.operator){case"containsText":case"notContainsText":case"beginsWithText":case"endsWithText":return[["type",t],["text",e.values[0]]];case"isEmpty":case"isNotEmpty":return[["type",t]];case"isEqual":case"isNotEqual":case"isGreaterThan":case"isGreaterOrEqualTo":case"isLessThan":case"isLessOrEqualTo":case"isBetween":case"isNotBetween":return[["type","cellIs"]]}}(t),["operator",i]);const n=function(e,t){const o=e[0].split(":")[0],s=t.values;switch(t.operator){case"containsText":return[`NOT(ISERROR(SEARCH("${s[0]}",${o})))`];case"notContainsText":return[`ISERROR(SEARCH("${s[0]}",${o}))`];case"beginsWithText":return[`LEFT(${o},LEN("${s[0]}"))="${s[0]}"`];case"endsWithText":return[`RIGHT(${o},LEN("${s[0]}"))="${s[0]}"`];case"isEmpty":return[`LEN(TRIM(${o}))=0`];case"isNotEmpty":return[`LEN(TRIM(${o}))>0`];case"isEqual":case"isNotEqual":case"isGreaterThan":case"isGreaterOrEqualTo":case"isLessThan":case"isLessOrEqualTo":return[s[0]];case"isBetween":case"isNotBetween":return[s[0],s[1]]}}(e.ranges,t).map((e=>vx`<formula>${e}</formula>`)),r={font:{color:{rgb:t.style.textColor},bold:t.style.bold,italic:t.style.italic,strike:t.style.strikethrough,underline:t.style.underline}};return t.style.fillColor&&(r.fill={fgColor:{rgb:t.style.fillColor}}),s.push(["dxfId",jT(r,o)]),vx`
2985
+ `}function HH(e,t,o){if(!e)return{attrs:[],node:vx``};const s=function(e){switch(typeof e){case"boolean":return"b";case"string":return"str";case"number":return"n";default:return}}(t);if(void 0===s)return{attrs:[],node:vx``};var i;return{attrs:[["cm","1"],["t",s]],node:vx`<f t="array" ref="${o}">${BH(e)}</f><v>${(i=t)===Js.InvalidReference?"#REF!":i}</v>`}}function UH(e,t,o=!1){let s=e;const i=[],n=s.trim().toUpperCase();return!o&&["TRUE","FALSE"].includes(n)?(s="TRUE"===n?"1":"0",i.push(["t","b"])):!o&&Is(s,$s)||(s=jT(e,t),i.push(["t","s"])),{attrs:i,node:vx`<v>${s}</v>`}}function BH(e){let t;"="===e[0]&&(e=e.slice(1));try{t=tv(e)}catch(t){return e}return t=sv(t,"STRING",zH),t=sv(t,"FUNCALL",(e=>e=function(e){const t=e.value.toUpperCase(),o=e.args,s=zh[t];if(s){const i=CS.content[t].args.filter((e=>!e.optional)),n=i.length-e.args.length;if(n)for(let t=e.args.length;t<i.length;t++){const e=s[t-n];o.push({type:e.type,value:e.value,tokenEndIndex:0,tokenStartIndex:0})}}return{...e,args:o}}(e=function(e){const t=e.value.toUpperCase();return{...e,value:$h.includes(t)?`_xlfn.${t}`:t}}(e={...e,value:e.value.toUpperCase()})))),t=sv(t,"REFERENCE",(e=>e.value===Js.InvalidReference?{...e,value:"#REF!"}:e)),t?av(t):e}function zH(e){const t=e.value.replace(new RegExp('"',"g"),""),o=ls(t,$s);if(o){const s=[];return(es.test(t)||ts.test(t))&&s.push("yyyy-mm-dd"),is.test(t)&&s.push("hh:mm:ss"),{...e,value:bn(o.value,{format:s.join(" "),locale:$s})}}return{...e,value:e.value.replace(/\\"/g,'""')}}function $H(e,t){const o=[];for(const s of t)switch(s.rule.type){case"CellIsRule":o.push(GH(s,s.rule,e));break;case"ColorScaleRule":o.push(qH(s,s.rule));break;case"IconSetRule":o.push(ZH(s,s.rule));break;case"DataBarRule":o.push(WH(s,s.rule));break;default:console.warn(`Conditional formatting ${s.rule.type} not implemented`)}return o}function GH(e,t,o){const s=jH(e),i=BT(t.operator);s.push(...function(e){const t=BT(e.operator);switch(e.operator){case"containsText":case"notContainsText":case"beginsWithText":case"endsWithText":return[["type",t],["text",e.values[0]]];case"isEmpty":case"isNotEmpty":return[["type",t]];case"isEqual":case"isNotEqual":case"isGreaterThan":case"isGreaterOrEqualTo":case"isLessThan":case"isLessOrEqualTo":case"isBetween":case"isNotBetween":return[["type","cellIs"]]}}(t),["operator",i]);const n=function(e,t){const o=e[0].split(":")[0],s=t.values;switch(t.operator){case"containsText":return[`NOT(ISERROR(SEARCH("${s[0]}",${o})))`];case"notContainsText":return[`ISERROR(SEARCH("${s[0]}",${o}))`];case"beginsWithText":return[`LEFT(${o},LEN("${s[0]}"))="${s[0]}"`];case"endsWithText":return[`RIGHT(${o},LEN("${s[0]}"))="${s[0]}"`];case"isEmpty":return[`LEN(TRIM(${o}))=0`];case"isNotEmpty":return[`LEN(TRIM(${o}))>0`];case"isEqual":case"isNotEqual":case"isGreaterThan":case"isGreaterOrEqualTo":case"isLessThan":case"isLessOrEqualTo":return[s[0]];case"isBetween":case"isNotBetween":return[s[0],s[1]]}}(e.ranges,t).map((e=>vx`<formula>${e}</formula>`)),r={font:{color:{rgb:t.style.textColor},bold:t.style.bold,italic:t.style.italic,strike:t.style.strikethrough,underline:t.style.underline}};return t.style.fillColor&&(r.fill={fgColor:{rgb:t.style.fillColor}}),s.push(["dxfId",jT(r,o)]),vx`
2986
2986
  <conditionalFormatting sqref="${e.ranges.join(" ")}">
2987
2987
  <cfRule ${ux(s)}>
2988
2988
  ${fx(n)}
2989
2989
  </cfRule>
2990
2990
  </conditionalFormatting>
2991
- `}function GH(e,t){const o=ZH(e);return o.push(["type","dataBar"]),vx`
2991
+ `}function WH(e,t){const o=jH(e);return o.push(["type","dataBar"]),vx`
2992
2992
  <conditionalFormatting sqref="${e.ranges.join(" ")}">
2993
2993
  <cfRule ${ux(o)}>
2994
2994
  <dataBar>
@@ -2998,7 +2998,7 @@
2998
2998
  </dataBar>
2999
2999
  </cfRule>
3000
3000
  </conditionalFormatting>
3001
- `}function WH(e,t){const o=ZH(e);o.push(["type","colorScale"]);const s=[];for(const i of e.ranges){const e=[],n=[];let r=!0;for(const o of["minimum","midpoint","maximum"]){const s=t[o];s&&("formula"!==s.type?(e.push(XH(s,o)),n.push([["rgb",wy(Bt(s.color))]])):r=!1)}if(!r){console.warn("Conditional formats with formula rules are not supported at the moment. The rule is therefore skipped.");continue}const a=e.map((e=>vx`<cfvo ${ux(e)}/>`)),l=n.map((e=>vx`<color ${ux(e)}/>`));s.push(vx`
3001
+ `}function qH(e,t){const o=jH(e);o.push(["type","colorScale"]);const s=[];for(const i of e.ranges){const e=[],n=[];let r=!0;for(const o of["minimum","midpoint","maximum"]){const s=t[o];s&&("formula"!==s.type?(e.push(KH(s,o)),n.push([["rgb",wy(Bt(s.color))]])):r=!1)}if(!r){console.warn("Conditional formats with formula rules are not supported at the moment. The rule is therefore skipped.");continue}const a=e.map((e=>vx`<cfvo ${ux(e)}/>`)),l=n.map((e=>vx`<color ${ux(e)}/>`));s.push(vx`
3002
3002
  <conditionalFormatting sqref="${i}">
3003
3003
  <cfRule ${ux(o)}>
3004
3004
  <colorScale>
@@ -3007,7 +3007,7 @@
3007
3007
  </colorScale>
3008
3008
  </cfRule>
3009
3009
  </conditionalFormatting>
3010
- `)}return fx(s)}function qH(e,t){const o=ZH(e);o.push(["type","iconSet"]);const s=[];for(const n of e.ranges){const e=[[["type","percent"],["val",0]]];let r=!0;for(const o of["lowerInflectionPoint","upperInflectionPoint"]){if("formula"===t[o].type){r=!1;continue}const s=t[o];e.push([...XH(s,o),["gte","ge"===s.operator?"1":"0"]])}if(!r){console.warn("Conditional formats with formula rules are not supported at the moment. The rule is therefore skipped.");continue}const a=e.map((e=>vx`<cfvo ${ux(e)} />`)),l=[["iconSet",(i=t.icons,Th[YH(i)])]];jH(t.icons)&&l.push(["reverse","1"]),s.push(vx`
3010
+ `)}return fx(s)}function ZH(e,t){const o=jH(e);o.push(["type","iconSet"]);const s=[];for(const n of e.ranges){const e=[[["type","percent"],["val",0]]];let r=!0;for(const o of["lowerInflectionPoint","upperInflectionPoint"]){if("formula"===t[o].type){r=!1;continue}const s=t[o];e.push([...KH(s,o),["gte","ge"===s.operator?"1":"0"]])}if(!r){console.warn("Conditional formats with formula rules are not supported at the moment. The rule is therefore skipped.");continue}const a=e.map((e=>vx`<cfvo ${ux(e)} />`)),l=[["iconSet",(i=t.icons,Th[XH(i)])]];YH(t.icons)&&l.push(["reverse","1"]),s.push(vx`
3011
3011
  <conditionalFormatting sqref="${n}">
3012
3012
  <cfRule ${ux(o)}>
3013
3013
  <iconSet ${ux(l)}>
@@ -3015,7 +3015,7 @@
3015
3015
  </iconSet>
3016
3016
  </cfRule>
3017
3017
  </conditionalFormatting>
3018
- `)}var i;return fx(s)}function ZH(e){return[["priority",1],["stopIfTrue",e.stopIfTrue?1:0]]}function jH(e){const t=WR[YH(e)];return e.upper===t.bad&&e.lower===t.good}function YH(e){return Object.keys(WR).find((t=>Object.values(WR[t]).includes(e.upper)))||"dots"}function XH(e,t){const o=function(e,t){switch(e){case"value":return"minimum"===t?"min":"max";case"number":return"num";case"percentage":return"percent";default:return e}}(e.type,t),s=[["type",o]];if("min"!==o&&"max"!==o){let t=e.value;if("formula"===o)try{t=UH(e.value)}catch(o){t=e.value}s.push(["val",t])}return s}function KH(e){const t=e.length;if(0===t)return[];const o=[new lx(`<dataValidations count="${t}">`)];for(const t of e)switch(t.criterion.type){case"dateIs":case"dateIsBefore":case"dateIsOnOrBefore":case"dateIsAfter":case"dateIsOnOrAfter":case"dateIsBetween":case"dateIsNotBetween":o.push(JH(t));break;case"isEqual":case"isNotEqual":case"isGreaterThan":case"isGreaterOrEqualTo":case"isLessThan":case"isLessOrEqualTo":case"isBetween":case"isNotBetween":o.push(QH(t));break;case"isValueInRange":case"isValueInList":o.push(eU(t));break;case"customFormula":o.push(tU(t));break;default:console.warn(`Data validation ${t.criterion.type} is not supported in xlsx.`)}return o.push(new lx("</dataValidations>")),o}function JH(e){const t=e.criterion,o=UH(t.values[0]),s=t.values[1]?UH(t.values[1]):void 0,i=function(e){return Object.keys(yT).find((t=>yT[t]===e))}(e.criterion.type),n=oU(e);return n.push(["type","date"],["operator",i]),s?vx`
3018
+ `)}var i;return fx(s)}function jH(e){return[["priority",1],["stopIfTrue",e.stopIfTrue?1:0]]}function YH(e){const t=WR[XH(e)];return e.upper===t.bad&&e.lower===t.good}function XH(e){return Object.keys(WR).find((t=>Object.values(WR[t]).includes(e.upper)))||"dots"}function KH(e,t){const o=function(e,t){switch(e){case"value":return"minimum"===t?"min":"max";case"number":return"num";case"percentage":return"percent";default:return e}}(e.type,t),s=[["type",o]];if("min"!==o&&"max"!==o){let t=e.value;if("formula"===o)try{t=BH(e.value)}catch(o){t=e.value}s.push(["val",t])}return s}function JH(e){const t=e.length;if(0===t)return[];const o=[new lx(`<dataValidations count="${t}">`)];for(const t of e)switch(t.criterion.type){case"dateIs":case"dateIsBefore":case"dateIsOnOrBefore":case"dateIsAfter":case"dateIsOnOrAfter":case"dateIsBetween":case"dateIsNotBetween":o.push(QH(t));break;case"isEqual":case"isNotEqual":case"isGreaterThan":case"isGreaterOrEqualTo":case"isLessThan":case"isLessOrEqualTo":case"isBetween":case"isNotBetween":o.push(eU(t));break;case"isValueInRange":case"isValueInList":o.push(tU(t));break;case"customFormula":o.push(oU(t));break;default:console.warn(`Data validation ${t.criterion.type} is not supported in xlsx.`)}return o.push(new lx("</dataValidations>")),o}function QH(e){const t=e.criterion,o=BH(t.values[0]),s=t.values[1]?BH(t.values[1]):void 0,i=function(e){return Object.keys(yT).find((t=>yT[t]===e))}(e.criterion.type),n=sU(e);return n.push(["type","date"],["operator",i]),s?vx`
3019
3019
  <dataValidation ${ux(n)}>
3020
3020
  <formula1>${gi(o,$s)}</formula1>
3021
3021
  <formula2>${gi(s,$s)}</formula2>
@@ -3024,7 +3024,7 @@
3024
3024
  <dataValidation ${ux(n)}>
3025
3025
  <formula1>${gi(o,$s)}</formula1>
3026
3026
  </dataValidation>
3027
- `}function QH(e){const t=e.criterion,o=UH(t.values[0]),s=t.values[1]?UH(t.values[1]):void 0,i=function(e){return Object.keys(CT).find((t=>CT[t]===e))}(e.criterion.type),n=oU(e);return n.push(["type","decimal"],["operator",i]),s?vx`
3027
+ `}function eU(e){const t=e.criterion,o=BH(t.values[0]),s=t.values[1]?BH(t.values[1]):void 0,i=function(e){return Object.keys(CT).find((t=>CT[t]===e))}(e.criterion.type),n=sU(e);return n.push(["type","decimal"],["operator",i]),s?vx`
3028
3028
  <dataValidation ${ux(n)}>
3029
3029
  <formula1>${o}</formula1>
3030
3030
  <formula2>${s}</formula2>
@@ -3033,19 +3033,19 @@
3033
3033
  <dataValidation ${ux(n)}>
3034
3034
  <formula1>${o}</formula1>
3035
3035
  </dataValidation>
3036
- `}function eU(e){const t=e.criterion,o="isValueInRange"===e.criterion.type?UH(t.values[0]):`"${t.values.join(",")}"`,s=oU(e);return s.push(["type","list"]),vx`
3036
+ `}function tU(e){const t=e.criterion,o="isValueInRange"===e.criterion.type?BH(t.values[0]):`"${t.values.join(",")}"`,s=sU(e);return s.push(["type","list"]),vx`
3037
3037
  <dataValidation ${ux(s)}>
3038
3038
  <formula1>${o}</formula1>
3039
3039
  </dataValidation>
3040
- `}function tU(e){const t=UH(e.criterion.values[0]),o=oU(e);return o.push(["type","custom"]),vx`
3040
+ `}function oU(e){const t=BH(e.criterion.values[0]),o=sU(e);return o.push(["type","custom"]),vx`
3041
3041
  <dataValidation ${ux(o)}>
3042
3042
  <formula1>${t}</formula1>
3043
3043
  </dataValidation>
3044
- `}function oU(e){return[["allowBlank","1"],["showInputMessage","1"],["showErrorMessage","1"],["errorStyle",e.isBlocking?"":"warning"],["sqref",e.ranges.join(" ")]]}function sU(e,t,o){const s=[["xmlns:xdr",Ah.drawing],["xmlns:r",Mh],["xmlns:a",Dh],["xmlns:c",_h]],i=[];for(const[s,n]of Object.entries(o))switch(n?.tag){case"chart":i.push(rU(n,t,e[s]));break;case"image":i.push(aU(n,t,e[s]))}return gx(vx`
3044
+ `}function sU(e){return[["allowBlank","1"],["showInputMessage","1"],["showErrorMessage","1"],["errorStyle",e.isBlocking?"":"warning"],["sqref",e.ranges.join(" ")]]}function iU(e,t,o){const s=[["xmlns:xdr",Ah.drawing],["xmlns:r",Mh],["xmlns:a",Dh],["xmlns:c",_h]],i=[];for(const[s,n]of Object.entries(o))switch(n?.tag){case"chart":i.push(aU(n,t,e[s]));break;case"image":i.push(lU(n,t,e[s]))}return gx(vx`
3045
3045
  <xdr:wsDr ${ux(s)}>
3046
3046
  ${fx(i)}
3047
3047
  </xdr:wsDr>
3048
- `)}function iU(e,t){const{col:o,row:s,offset:i,width:n,height:r}=e,{x:a,y:l}=i,c=Object.values(t.rows),{index:h,offset:d}=nU(c,s,l),{index:u,offset:g}=nU(c,s,l+r),p=Object.values(t.cols),{index:m,offset:f}=nU(p,o,a),{index:v,offset:b}=nU(p,o,a+n);return{from:{col:m,colOff:f,row:h,rowOff:d},to:{col:v,colOff:b,row:u,rowOff:g}}}function nU(e,t,o){let s=0;for(const[i,n]of e.slice(t).entries()){if(s<=o&&o<s+n.size)return{index:i,offset:QT(o-s+Ce)};i<e.length-1&&(s+=n.size)}return{index:e.length-1,offset:QT(o-s+Ce)}}function rU(e,t,o){const{from:s,to:i}=iU(e,t),n=XT(e.id),r=[["id",n],["name",`Chart ${n}`],["title","Chart"]];return vx`
3048
+ `)}function nU(e,t){const{col:o,row:s,offset:i,width:n,height:r}=e,{x:a,y:l}=i,c=Object.values(t.rows),{index:h,offset:d}=rU(c,s,l),{index:u,offset:g}=rU(c,s,l+r),p=Object.values(t.cols),{index:m,offset:f}=rU(p,o,a),{index:v,offset:b}=rU(p,o,a+n);return{from:{col:m,colOff:f,row:h,rowOff:d},to:{col:v,colOff:b,row:u,rowOff:g}}}function rU(e,t,o){let s=0;for(const[i,n]of e.slice(t).entries()){if(s<=o&&o<s+n.size)return{index:i,offset:QT(o-s+Ce)};i<e.length-1&&(s+=n.size)}return{index:e.length-1,offset:QT(o-s+Ce)}}function aU(e,t,o){const{from:s,to:i}=nU(e,t),n=XT(e.id),r=[["id",n],["name",`Chart ${n}`],["title","Chart"]];return vx`
3049
3049
  <xdr:twoCellAnchor>
3050
3050
  <xdr:from>
3051
3051
  <xdr:col>${s.col}</xdr:col>
@@ -3076,7 +3076,7 @@
3076
3076
  </xdr:graphicFrame>
3077
3077
  <xdr:clientData fLocksWithSheet="0"/>
3078
3078
  </xdr:twoCellAnchor>
3079
- `}function aU(e,t,o){const{from:s,to:i}=iU(e,t),n=JT(e.id),r=[["id",n],["name",`Image ${n}`],["title","Image"]],a=QT(e.width),l=QT(e.height);return vx`
3079
+ `}function lU(e,t,o){const{from:s,to:i}=nU(e,t),n=JT(e.id),r=[["id",n],["name",`Image ${n}`],["title","Image"]],a=QT(e.width),l=QT(e.height);return vx`
3080
3080
  <xdr:twoCellAnchor editAs="oneCell">
3081
3081
  <xdr:from>
3082
3082
  <xdr:col>${s.col}</xdr:col>
@@ -3113,7 +3113,7 @@
3113
3113
  </xdr:pic>
3114
3114
  <xdr:clientData fLocksWithSheet="0"/>
3115
3115
  </xdr:twoCellAnchor>
3116
- `}function lU(e){return ct(e)?vx``:vx`
3116
+ `}function cU(e){return ct(e)?vx``:vx`
3117
3117
  <font>
3118
3118
  ${e.bold?vx`<b />`:""}
3119
3119
  ${e.italic?vx`<i />`:""}
@@ -3123,15 +3123,15 @@
3123
3123
  ${e.color&&e.color.rgb?vx`<color rgb="${wy(e.color.rgb)}" />`:""}
3124
3124
  ${e.name?vx`<name val="${e.name}" />`:""}
3125
3125
  </font>
3126
- `}function cU(e){return e?ux([["style",e.style]]):vx``}function hU(e){return e?vx`
3126
+ `}function hU(e){return e?ux([["style",e.style]]):vx``}function dU(e){return e?vx`
3127
3127
  <color ${ux([["rgb",wy(e.color.rgb)]])}/>
3128
- `:vx``}function dU(e,t,o){const s=vx`
3128
+ `:vx``}function uU(e,t,o){const s=vx`
3129
3129
  <table ${ux([["id",t],["name",`Table${t}`],["displayName",`Table${t}`],["ref",e.range],["headerRowCount",e.config.numberOfHeaders],["totalsRowCount",e.config.totalRow?1:0],["xmlns",Ah.table],["xmlns:xr",Ah.revision],["xmlns:xr3",Ah.revision3],["xmlns:mc",Ah.markupCompatibility]])}>
3130
3130
  ${e.config.hasFilters?function(e){const t=[["ref",e.range]];return vx`
3131
3131
  <autoFilter ${ux(t)}>
3132
3132
  ${fx(function(e){const t=[];for(const o of e.filters){const e=vx`
3133
3133
  <filterColumn ${ux([["colId",o.colId]])}>
3134
- ${uU(o)}
3134
+ ${gU(o)}
3135
3135
  </filterColumn>
3136
3136
  `;t.push(e)}return t}(e))}
3137
3137
  </autoFilter>
@@ -3143,17 +3143,17 @@
3143
3143
  `}(e,o)}
3144
3144
  ${function(e){const t=[["name",e.config.styleId],["showFirstColumn",e.config.firstColumn?1:0],["showLastColumn",e.config.lastColumn?1:0],["showRowStripes",e.config.bandedRows?1:0],["showColumnStripes",e.config.bandedColumns?1:0]];return vx`<tableStyleInfo ${ux(t)}/>`}(e)}
3145
3145
  </table>
3146
- `;return gx(s)}function uU(e){const t=e.displayedValues.map((e=>vx`<filter ${ux([["val",e]])}/>`));return vx`
3146
+ `;return gx(s)}function gU(e){const t=e.displayedValues.map((e=>vx`<filter ${ux([["val",e]])}/>`));return vx`
3147
3147
  <filters ${ux(e.displayBlanks?[["blank",1]]:[])}>
3148
3148
  ${fx(t)}
3149
3149
  </filters>
3150
- `}function gU(e){if(!Object.values(e).length)return vx``;const t=[];for(const[o,s]of Object.entries(e)){const e=[["min",parseInt(o)+1],["max",parseInt(o)+1],["width",$T(s.size||se)],["customWidth",1],["hidden",s.isHidden?1:0]];s.outlineLevel&&e.push(["outlineLevel",s.outlineLevel]),s.collapsed&&e.push(["collapsed",1]),t.push(vx`
3150
+ `}function pU(e){if(!Object.values(e).length)return vx``;const t=[];for(const[o,s]of Object.entries(e)){const e=[["min",parseInt(o)+1],["max",parseInt(o)+1],["width",$T(s.size||se)],["customWidth",1],["hidden",s.isHidden?1:0]];s.outlineLevel&&e.push(["outlineLevel",s.outlineLevel]),s.collapsed&&e.push(["collapsed",1]),t.push(vx`
3151
3151
  <col ${ux(e)}/>
3152
3152
  `)}return vx`
3153
3153
  <cols>
3154
3154
  ${fx(t)}
3155
3155
  </cols>
3156
- `}function pU(e,t,o){const s=[],i=new MD(Br(o.id,o.styles)),n=new MD(Br(o.id,o.borders)),r=new MD(Br(o.id,o.formats));for(let a=0;a<o.rowNumber;a++){const l=[["r",a+1]],c=o.rows[a]||{};c.size&&c.size!==ie&&l.push(["ht",zT(c.size)],["customHeight",1]),c.isHidden&&l.push(["hidden",1]),c.outlineLevel&&l.push(["outlineLevel",c.outlineLevel]),c.collapsed&&l.push(["collapsed",1]);const h=[];for(let s=0;s<o.colNumber;s++){const l=Oo(s,a),c=o.cells[l],d=o.cellValues[l],u={sheetId:o.id,col:s,row:a},g=i.get(u),p=r.get(u),m=n.get(u);if(c||g||p||m||void 0!==d){const i=[["r",l]],n=WT(e,GT(t,c,g,p,m));n&&i.push(["s",n]);let r=[],u=vx``;if(c?.startsWith("=")&&void 0!==d){const e=LH(c,d,o.formulaSpillRanges[l]??l);if(!e)continue;({attrs:r,node:u}=e)}else if(c&&et(c)){const{label:t}=st(c);({attrs:r,node:u}=HH(t,e.sharedStrings))}else if(c&&""!==c){const i=mU(s,a,o),n=fU(s,a,o),l=!(!p||!Gn(t.formats[p]));({attrs:r,node:u}=HH(c,e.sharedStrings,i||n||l))}i.push(...r),h.push(vx`<c ${ux(i)}>
3156
+ `}function mU(e,t,o){const s=[],i=new MD(Br(o.id,o.styles)),n=new MD(Br(o.id,o.borders)),r=new MD(Br(o.id,o.formats));for(let a=0;a<o.rowNumber;a++){const l=[["r",a+1]],c=o.rows[a]||{};c.size&&c.size!==ie&&l.push(["ht",zT(c.size)],["customHeight",1]),c.isHidden&&l.push(["hidden",1]),c.outlineLevel&&l.push(["outlineLevel",c.outlineLevel]),c.collapsed&&l.push(["collapsed",1]);const h=[];for(let s=0;s<o.colNumber;s++){const l=Oo(s,a),c=o.cells[l],d=o.cellValues[l],u={sheetId:o.id,col:s,row:a},g=i.get(u),p=r.get(u),m=n.get(u);if(c||g||p||m||void 0!==d){const i=[["r",l]],n=WT(e,GT(t,c,g,p,m));n&&i.push(["s",n]);let r=[],u=vx``;if(c?.startsWith("=")&&void 0!==d){const e=HH(c,d,o.formulaSpillRanges[l]??l);if(!e)continue;({attrs:r,node:u}=e)}else if(c&&et(c)){const{label:t}=st(c);({attrs:r,node:u}=UH(t,e.sharedStrings))}else if(c&&""!==c){const i=fU(s,a,o),n=vU(s,a,o),l=!(!p||!Gn(t.formats[p]));({attrs:r,node:u}=UH(c,e.sharedStrings,i||n||l))}i.push(...r),h.push(vx`<c ${ux(i)}>
3157
3157
  ${u}
3158
3158
  </c>`)}}(h.length||c.size!==ie||c.isHidden||c.outlineLevel||c.collapsed)&&s.push(vx`
3159
3159
  <row ${ux(l)}>
@@ -3163,7 +3163,7 @@
3163
3163
  <sheetData>
3164
3164
  ${fx(s)}
3165
3165
  </sheetData>
3166
- `}function mU(e,t,o){return o.tables.some((o=>{const s=ar(o.range),i={...s,bottom:s.top};return Cr(e,t,i)}))}function fU(e,t,o){return o.tables.some((o=>{if(!o.config.totalRow)return!1;const s=ar(o.range),i={...s,top:s.bottom};return Cr(e,t,i)}))}function vU(e,t,o){const s=t.sheets[o].cells,i=[];for(const n in s){const r=s[n];if(r&&et(r)){const{label:s,url:a}=st(r);if(nt(a)){const e=at(a),o=t.sheets.find((t=>t.id===e)),r=[["display",s],["location",o?`${o.name}!A1`:Js.InvalidReference],["ref",n]];i.push(vx`
3166
+ `}function fU(e,t,o){return o.tables.some((o=>{const s=ar(o.range),i={...s,bottom:s.top};return Cr(e,t,i)}))}function vU(e,t,o){return o.tables.some((o=>{if(!o.config.totalRow)return!1;const s=ar(o.range),i={...s,top:s.bottom};return Cr(e,t,i)}))}function bU(e,t,o){const s=t.sheets[o].cells,i=[];for(const n in s){const r=s[n];if(r&&et(r)){const{label:s,url:a}=st(r);if(nt(a)){const e=at(a),o=t.sheets.find((t=>t.id===e)),r=[["display",s],["location",o?`${o.name}!A1`:Js.InvalidReference],["ref",n]];i.push(vx`
3167
3167
  <hyperlink ${ux(r)}/>
3168
3168
  `)}else{const t=[["r:id",qT(e.relsFiles,`xl/worksheets/_rels/sheet${o}.xml.rels`,{target:Ho(a),type:Fh.hyperlink,targetMode:"External"})],["ref",n]];i.push(vx`
3169
3169
  <hyperlink ${ux(t)}/>
@@ -3171,11 +3171,11 @@
3171
3171
  <hyperlinks>
3172
3172
  ${fx(i)}
3173
3173
  </hyperlinks>
3174
- `:vx``}function bU(e){if(e.length){const t=e.map((e=>vx`<mergeCell ref="${e}" />`));return vx`
3174
+ `:vx``}function SU(e){if(e.length){const t=e.map((e=>vx`<mergeCell ref="${e}" />`));return vx`
3175
3175
  <mergeCells count="${e.length}">
3176
3176
  ${fx(t)}
3177
3177
  </mergeCells>
3178
- `}return vx``}function SU(e){const t=e.panes;let o=vx``;if(t&&(t.xSplit||t.ySplit)){const e=Oo(t.xSplit,t.ySplit),s=t.xSplit?vx`xSplit="${t.xSplit}"`:"",i=t.ySplit?vx`ySplit="${t.ySplit}"`:"",n=t.xSplit?vx`<selection pane="topRight"/>`:"",r=t.ySplit?vx`<selection pane="bottomLeft"/>`:"",a=t.xSplit&&t.ySplit?vx`<selection pane="bottomRight"/>`:"";o=vx`
3178
+ `}return vx``}function CU(e){const t=e.panes;let o=vx``;if(t&&(t.xSplit||t.ySplit)){const e=Oo(t.xSplit,t.ySplit),s=t.xSplit?vx`xSplit="${t.xSplit}"`:"",i=t.ySplit?vx`ySplit="${t.ySplit}"`:"",n=t.xSplit?vx`<selection pane="topRight"/>`:"",r=t.ySplit?vx`<selection pane="bottomLeft"/>`:"",a=t.xSplit&&t.ySplit?vx`<selection pane="bottomRight"/>`:"";o=vx`
3179
3179
  <pane
3180
3180
  ${s}
3181
3181
  ${i}
@@ -3191,11 +3191,11 @@
3191
3191
  ${o}
3192
3192
  </sheetView>
3193
3193
  </sheetViews>
3194
- `}function CU(e){return e.color?vx`
3194
+ `}function yU(e){return e.color?vx`
3195
3195
  <sheetPr>
3196
3196
  <tabColor ${ux([["rgb",wy(e.color)]])} />
3197
3197
  </sheetPr>
3198
- `:""}function yU(e){const t=[],o=function(e){const t=[{},...Object.values(e.borders).map((e=>({left:px(e.left),right:px(e.right),bottom:px(e.bottom),top:px(e.top)})))];return{relsFiles:[],sharedStrings:[],styles:[{fontId:0,fillId:0,numFmtId:0,borderId:0,alignment:{}}],fonts:[{size:me,family:2,color:{rgb:"000000"},name:"Arial"}],fills:[{reservedAttribute:"none"},{reservedAttribute:"gray125"}],borders:t,numFmts:[],dxfs:[]}}(e=function(e){for(const t of e.sheets)t.tables=t.tables.filter((e=>wr(ar(e.range)).numberOfRows>1));return e}(e=function(e){const t={},o=[];for(const s of e.sheets){let e=s.name.slice(0,31);e=kt(e,o,{compute:(e,t)=>e.slice(0,31-String(t).length)+t}),o.push(e),e!==s.name&&(t[s.name]=e,s.name=e)}if(!Object.keys(t).length)return e;const s=Object.keys(t).sort(((e,t)=>t.length-e.length));let i=JSON.stringify(e);for(const e of s){const o=new RegExp(`'?${Be(e)}'?!`,"g");i=i.replaceAll(o,(o=>{const s=t[e];return o.replace(e,s)}))}return JSON.parse(i)}(e)));return t.push(function(e,t){const o=[["xmlns",Ah.workbook],["xmlns:r",Mh]],s=[];for(const[o,i]of Object.entries(e.sheets)){const e=[["state",i.isVisible?"visible":"hidden"],["name",i.name],["sheetId",parseInt(o)+1],["r:id",`rId${parseInt(o)+1}`]];s.push(vx`
3198
+ `:""}function wU(e){const t=[],o=function(e){const t=[{},...Object.values(e.borders).map((e=>({left:px(e.left),right:px(e.right),bottom:px(e.bottom),top:px(e.top)})))];return{relsFiles:[],sharedStrings:[],styles:[{fontId:0,fillId:0,numFmtId:0,borderId:0,alignment:{}}],fonts:[{size:me,family:2,color:{rgb:"000000"},name:"Arial"}],fills:[{reservedAttribute:"none"},{reservedAttribute:"gray125"}],borders:t,numFmts:[],dxfs:[]}}(e=function(e){for(const t of e.sheets)t.tables=t.tables.filter((e=>wr(ar(e.range)).numberOfRows>1));return e}(e=function(e){const t={},o=[];for(const s of e.sheets){let e=s.name.slice(0,31);e=kt(e,o,{compute:(e,t)=>e.slice(0,31-String(t).length)+t}),o.push(e),e!==s.name&&(t[s.name]=e,s.name=e)}if(!Object.keys(t).length)return e;const s=Object.keys(t).sort(((e,t)=>t.length-e.length));let i=JSON.stringify(e);for(const e of s){const o=new RegExp(`'?${Be(e)}'?!`,"g");i=i.replaceAll(o,(o=>{const s=t[e];return o.replace(e,s)}))}return JSON.parse(i)}(e)));return t.push(function(e,t){const o=[["xmlns",Ah.workbook],["xmlns:r",Mh]],s=[];for(const[o,i]of Object.entries(e.sheets)){const e=[["state",i.isVisible?"visible":"hidden"],["name",i.name],["sheetId",parseInt(o)+1],["r:id",`rId${parseInt(o)+1}`]];s.push(vx`
3199
3199
  <sheet ${ux(e)} />
3200
3200
  `),qT(t.relsFiles,"xl/_rels/workbook.xml.rels",{type:Fh.sheet,target:`worksheets/sheet${o}.xml`})}return hx(gx(vx`
3201
3201
  <workbook ${ux(o)}>
@@ -3203,17 +3203,17 @@
3203
3203
  ${fx(s)}
3204
3204
  </sheets>
3205
3205
  </workbook>
3206
- `),"xl/workbook.xml","workbook")}(e,o)),t.push(...function(e,t){const o=[];let s=1;for(const[i,n]of Object.entries(e.sheets)){const r=[["xmlns",Ah.worksheet],["xmlns:r",Mh]],a=[["defaultRowHeight",zT(ie)],["defaultColWidth",$T(se)]],l=wU(n,i,s,t,o);s+=n.tables.length;let c=vx``;const h=[];for(const s of n.charts){const n=XT(s.id),r=qT(t.relsFiles,`xl/drawings/_rels/drawing${i}.xml.rels`,{target:`../charts/chart${n}.xml`,type:Fh.chart});h.push(r),o.push(hx(RH(s,i,e),`xl/charts/chart${n}.xml`,"chart"))}for(const e of n.images){const s=e.data.mimetype;if(void 0===s)continue;const n=bT[s];if(void 0===n)continue;const r=`image${JT(e.id)}.${n}`,a=qT(t.relsFiles,`xl/drawings/_rels/drawing${i}.xml.rels`,{target:`../media/${r}`,type:Fh.image});h.push(a),o.push({path:`xl/media/${r}`,imageSrc:e.data.path})}const d=[...n.charts,...n.images];if(d.length){const e=qT(t.relsFiles,`xl/worksheets/_rels/sheet${i}.xml.rels`,{target:`../drawings/drawing${i}.xml`,type:Fh.drawing});o.push(hx(sU(h,n,d),`xl/drawings/drawing${i}.xml`,"drawing")),c=vx`<drawing r:id="${e}" />`}const u=vx`
3206
+ `),"xl/workbook.xml","workbook")}(e,o)),t.push(...function(e,t){const o=[];let s=1;for(const[i,n]of Object.entries(e.sheets)){const r=[["xmlns",Ah.worksheet],["xmlns:r",Mh]],a=[["defaultRowHeight",zT(ie)],["defaultColWidth",$T(se)]],l=IU(n,i,s,t,o);s+=n.tables.length;let c=vx``;const h=[];for(const s of n.charts){const n=XT(s.id),r=qT(t.relsFiles,`xl/drawings/_rels/drawing${i}.xml.rels`,{target:`../charts/chart${n}.xml`,type:Fh.chart});h.push(r),o.push(hx(TH(s,i,e),`xl/charts/chart${n}.xml`,"chart"))}for(const e of n.images){const s=e.data.mimetype;if(void 0===s)continue;const n=bT[s];if(void 0===n)continue;const r=`image${JT(e.id)}.${n}`,a=qT(t.relsFiles,`xl/drawings/_rels/drawing${i}.xml.rels`,{target:`../media/${r}`,type:Fh.image});h.push(a),o.push({path:`xl/media/${r}`,imageSrc:e.data.path})}const d=[...n.charts,...n.images];if(d.length){const e=qT(t.relsFiles,`xl/worksheets/_rels/sheet${i}.xml.rels`,{target:`../drawings/drawing${i}.xml`,type:Fh.drawing});o.push(hx(iU(h,n,d),`xl/drawings/drawing${i}.xml`,"drawing")),c=vx`<drawing r:id="${e}" />`}const u=vx`
3207
3207
  <worksheet ${ux(r)}>
3208
+ ${yU(n)}
3208
3209
  ${CU(n)}
3209
- ${SU(n)}
3210
3210
  <sheetFormatPr ${ux(a)} />
3211
- ${gU(n.cols)}
3212
- ${pU(t,e,n)}
3213
- ${bU(n.merges)}
3214
- ${fx(zH(t.dxfs,n.conditionalFormats))}
3215
- ${fx(KH(n.dataValidationRules))}
3216
- ${vU(t,e,i)}
3211
+ ${pU(n.cols)}
3212
+ ${mU(t,e,n)}
3213
+ ${SU(n.merges)}
3214
+ ${fx($H(t.dxfs,n.conditionalFormats))}
3215
+ ${fx(JH(n.dataValidationRules))}
3216
+ ${bU(t,e,i)}
3217
3217
  ${c}
3218
3218
  ${l}
3219
3219
  </worksheet>
@@ -3250,7 +3250,7 @@
3250
3250
  `}(e.numFmts)}
3251
3251
  ${o=e.fonts,vx`
3252
3252
  <fonts count="${o.length}">
3253
- ${fx(Object.values(o).map(lU))}
3253
+ ${fx(Object.values(o).map(cU))}
3254
3254
  </fonts>
3255
3255
  `}
3256
3256
  ${function(e){const t=[];for(const o of Object.values(e))void 0!==o.reservedAttribute?t.push(vx`
@@ -3271,20 +3271,20 @@
3271
3271
  `}(e.fills)}
3272
3272
  ${function(e){const t=[];for(const o of Object.values(e))t.push(vx`
3273
3273
  <border>
3274
- <left ${cU(o.left)}>
3275
- ${hU(o.left)}
3274
+ <left ${hU(o.left)}>
3275
+ ${dU(o.left)}
3276
3276
  </left>
3277
- <right ${cU(o.right)}>
3278
- ${hU(o.right)}
3277
+ <right ${hU(o.right)}>
3278
+ ${dU(o.right)}
3279
3279
  </right>
3280
- <top ${cU(o.top)}>
3281
- ${hU(o.top)}
3280
+ <top ${hU(o.top)}>
3281
+ ${dU(o.top)}
3282
3282
  </top>
3283
- <bottom ${cU(o.bottom)}>
3284
- ${hU(o.bottom)}
3283
+ <bottom ${hU(o.bottom)}>
3284
+ ${dU(o.bottom)}
3285
3285
  </bottom>
3286
- <diagonal ${cU(o.diagonal)}>
3287
- ${hU(o.diagonal)}
3286
+ <diagonal ${hU(o.diagonal)}>
3287
+ ${dU(o.diagonal)}
3288
3288
  </diagonal>
3289
3289
  </border>
3290
3290
  `);return vx`
@@ -3297,7 +3297,7 @@
3297
3297
  ${fx(t)}
3298
3298
  </cellXfs>
3299
3299
  `}(e.styles)}
3300
- ${function(e){const t=[];for(const o of e){let e=vx``;o.font&&(e=lU(o.font));let s=vx``;o.fill&&(s=vx`
3300
+ ${function(e){const t=[];for(const o of e){let e=vx``;o.font&&(e=cU(o.font));let s=vx``;o.fill&&(s=vx`
3301
3301
  <fill>
3302
3302
  <patternFill>
3303
3303
  <bgColor rgb="${wy(o.fill.fgColor.rgb)}" />
@@ -3337,8 +3337,8 @@
3337
3337
  <Relationships xmlns="${Ah.Relationships}">
3338
3338
  <Relationship ${ux(e)} />
3339
3339
  </Relationships>
3340
- `),"_rels/.rels")}()),{name:"my_spreadsheet.xlsx",files:t}}function wU(e,t,o,s,i){let n=o;if(!e.tables.length)return new lx("");const r=`xl/worksheets/_rels/sheet${t}.xml.rels`,a=[];for(const t of e.tables){const o=qT(s.relsFiles,r,{target:`../tables/table${n}.xml`,type:Fh.table});i.push(hx(dU(t,n,e),`xl/tables/table${n}.xml`,"table")),a.push(vx`<tablePart r:id="${o}" />`),n++}return vx`
3340
+ `),"_rels/.rels")}()),{name:"my_spreadsheet.xlsx",files:t}}function IU(e,t,o,s,i){let n=o;if(!e.tables.length)return new lx("");const r=`xl/worksheets/_rels/sheet${t}.xml.rels`,a=[];for(const t of e.tables){const o=qT(s.relsFiles,r,{target:`../tables/table${n}.xml`,type:Fh.table});i.push(hx(uU(t,n,e),`xl/tables/table${n}.xml`,"table")),a.push(vx`<tablePart r:id="${o}" />`),n++}return vx`
3341
3341
  <tableParts count="${e.tables.length}">
3342
3342
  ${fx(a)}
3343
3343
  </tableParts>
3344
- `}var IU;!function(e){e[e.Ready=0]="Ready",e[e.Running=1]="Running",e[e.RunningCore=2]="RunningCore",e[e.Finalizing=3]="Finalizing"}(IU||(IU={}));function xU(e,t={}){const o=ze(t);return o.type=e,o}const EU={},RU={MIN_ROW_HEIGHT:10,MIN_COL_WIDTH:5,HEADER_HEIGHT:te,HEADER_WIDTH:oe,DESKTOP_BOTTOMBAR_HEIGHT:36,DEFAULT_CELL_WIDTH:se,DEFAULT_CELL_HEIGHT:ie,SCROLLBAR_WIDTH:ne},TU={autoCompleteProviders:lE,autofillModifiersRegistry:xV,autofillRulesRegistry:EV,cellMenuRegistry:qO,colMenuRegistry:iP,errorTypes:Qs,linkMenuRegistry:dR,functionRegistry:CS,featurePluginRegistry:fL,iconsOnCellRegistry:bV,statefulUIPluginRegistry:vL,coreViewsPluginRegistry:bL,corePluginRegistry:mL,rowMenuRegistry:hP,sidePanelRegistry:gk,figureRegistry:Vx,chartSidePanelComponentRegistry:$M,chartComponentRegistry:KI,chartRegistry:XI,chartSubtypeRegistry:QI,topbarMenuRegistry:EL,topbarComponentRegistry:RL,clickableCellRegistry:SL,otRegistry:MV,inverseCommandRegistry:CL,urlRegistry:Uo,cellPopoverRegistry:Ux,numberFormatMenuRegistry:wL,repeatLocalCommandTransformRegistry:lL,repeatCommandTransformRegistry:aL,clipboardHandlersRegistries:jc,pivotRegistry:YN,pivotTimeAdapterRegistry:dc,pivotSidePanelRegistry:QN,pivotNormalizationValueRegistry:zc,supportedPivotPositionalFormulaRegistry:wk,pivotToFunctionValueRegistry:$c,migrationStepRegistry:QA,chartJsExtensionRegistry:Sh},AU={arg:Zh,isEvaluationError:hi,toBoolean:wi,toJsDate:Ii,toNumber:gi,toString:Si,toNormalizedPivotValue:Lc,toFunctionPivotValue:Uc,toXC:Oo,toZone:ar,toUnboundedZone:rr,toCartesian:_o,numberToLetters:Co,lettersToNumber:yo,UuidGenerator:Wa,formatValue:bn,createCurrencyFormat:Fn,ColorGenerator:po,computeTextWidth:Oa,createEmptyWorkbookData:hD,createEmptySheet:cD,createEmptyExcelSheet:dD,rgbaToHex:jt,colorToRGBA:Yt,positionToZone:Dr,isDefined:lt,isMatrix:Ws,lazy:ut,genericRepeat:cL,createAction:i,createActions:o,transformRangeData:Xc,deepEquals:mt,overlap:Sr,union:fr,isInside:Cr,deepCopy:ze,expandZoneOnInsertion:ur,reduceZoneOnDeletion:mr,unquote:Ge,getMaxObjectId:_c,getFunctionsFromTokens:LS,getFirstPivotFunction:FN,getNumberOfPivotFunctions:PN,parseDimension:Pc,isDateOrDatetimeField:Mc,makeFieldProposal:AN,insertTokenAfterArgSeparator:DN,insertTokenAfterLeftParenthesis:_N,mergeContiguousZones:kr,getPivotHighlights:gN,pivotTimeAdapter:uc,UNDO_REDO_PIVOT_COMMANDS:wV,createPivotFormula:Vc,areDomainArgsFieldsValid:kc,splitReference:ta,sanitizeSheetName:qe,getUniqueText:kt,isNumber:Is,isDateTime:rs},DU={isMarkdownLink:et,parseMarkdownLink:st,markdownLink:ot,openLink:Wo,urlRepresentation:Go},_U={Checkbox:YE,Section:ME,RoundColorPicker:NE,ChartDataSeries:eM,ChartErrorSection:tM,ChartLabelRange:oM,ChartTitle:hM,ChartPanel:qM,ChartFigure:Nx,ChartJsComponent:zC,Grid:yk,GridOverlay:NP,ScorecardChart:sy,LineConfigPanel:DM,BarConfigPanel:iM,PieChartDesignPanel:FM,GenericChartConfigPanel:sM,ChartWithAxisDesignPanel:bM,LineChartDesignPanel:_M,GaugeChartConfigPanel:wM,GaugeChartDesignPanel:IM,ScorecardChartConfigPanel:MM,ScorecardChartDesignPanel:NM,GeoChartDesignPanel:TM,RadarChartDesignPanel:PM,WaterfallChartDesignPanel:zM,ComboChartDesignPanel:CM,FunnelChartDesignPanel:yM,ChartTypePicker:GM,FigureComponent:Lx,MenuPopover:Px,Popover:Dx,SelectionInput:$E,ValidationMessages:TP,AddDimensionButton:vN,PivotDimensionGranularity:yN,PivotDimensionOrder:wN,PivotDimension:CN,PivotLayoutConfigurator:EN,PivotHTMLRenderer:xk,PivotDeferUpdate:pN,PivotTitleSection:RN,CogWheelMenu:SN,TextInput:bN,SidePanelCollapsible:Wx,RadioSelection:uM,GeoChartRegionSelectSection:xM,ChartDashboardMenu:Mx,FullScreenChart:Ik},OU={useDragAndDropListItems:kE,useHighlights:YM,useHighlightsOnHover:jM},FU={useStoreProvider:th,DependencyContainer:Jc,CellPopoverStore:Bx,ComposerFocusStore:uh,CellComposerStore:SP,FindAndReplaceStore:aN,HighlightStore:hE,DelayedHoveredCellStore:Hx,HoveredTableStore:FP,ModelStore:ah,NotificationStore:dE,RendererStore:ch,SelectionInputStore:zE,SpreadsheetStore:hh,useStore:oh,useLocalStore:sh,SidePanelStore:vk,PivotSidePanelStore:KN,PivotMeasureDisplayPanelStore:dN,ClientFocusStore:uP};const PU={DEFAULT_LOCALE:$s,HIGHLIGHT_COLOR:a,PIVOT_TABLE_CONFIG:Ve,ChartTerms:$y},MU={...nx,...vI};e.AbstractCellClipboardHandler=el,e.AbstractChart=$C,e.AbstractFigureClipboardHandler=Zc,e.CellErrorType=Js,e.ClientDisconnectedError=jV,e.CorePlugin=Rk,e.CoreViewPlugin=Mk,e.DispatchResult=Vs,e.EvaluationError=ei,e.LocalTransportService=TL,e.Model=class extends Kc{corePlugins=[];statefulUIPlugins=[];range;session;isReplayingCommand=!1;renderers={};status=0;config;corePluginConfig;coreViewPluginConfig;uiPluginConfig;state;selection;getters;coreGetters;uuidGenerator;handlers=[];uiHandlers=[];coreHandlers=[];constructor(e={},o={},s=[],i=new Wa,n=!1){const r=performance.now();console.debug("##### Model creation #####"),super(),Mo===Fo&&No===Po&&(No=()=>!0),s=aD(e,s);const a=iD(e,n);this.state=new yH,this.uuidGenerator=i,this.config=this.setupConfig(o),this.session=this.setupSession(a.revisionId),this.coreGetters={},this.range=new Fk(this.coreGetters),this.coreGetters.getRangeString=this.range.getRangeString.bind(this.range),this.coreGetters.getRangeFromSheetXC=this.range.getRangeFromSheetXC.bind(this.range),this.coreGetters.createAdaptedRanges=this.range.createAdaptedRanges.bind(this.range),this.coreGetters.getRangeData=this.range.getRangeData.bind(this.range),this.coreGetters.getRangeDataFromXc=this.range.getRangeDataFromXc.bind(this.range),this.coreGetters.getRangeDataFromZone=this.range.getRangeDataFromZone.bind(this.range),this.coreGetters.getRangeFromRangeData=this.range.getRangeFromRangeData.bind(this.range),this.coreGetters.getRangeFromZone=this.range.getRangeFromZone.bind(this.range),this.coreGetters.recomputeRanges=this.range.recomputeRanges.bind(this.range),this.coreGetters.isRangeValid=this.range.isRangeValid.bind(this.range),this.coreGetters.extendRange=this.range.extendRange.bind(this.range),this.coreGetters.getRangesUnion=this.range.getRangesUnion.bind(this.range),this.coreGetters.removeRangesSheetPrefix=this.range.removeRangesSheetPrefix.bind(this.range),this.coreGetters.adaptFormulaStringDependencies=this.range.adaptFormulaStringDependencies.bind(this.range),this.coreGetters.copyFormulaStringForSheet=this.range.copyFormulaStringForSheet.bind(this.range),this.getters={isReadonly:()=>"readonly"===this.config.mode||"dashboard"===this.config.mode,isDashboard:()=>"dashboard"===this.config.mode},this.selection=new SH(this.getters),this.coreHandlers.push(this.range),this.handlers.push(this.range),this.corePluginConfig=this.setupCorePluginConfig(),this.coreViewPluginConfig=this.setupCoreViewPluginConfig(),this.uiPluginConfig=this.setupUiPluginConfig();for(const e of mL.getAll())this.setupCorePlugin(e,a);Object.assign(this.getters,this.coreGetters),this.session.loadInitialMessages(s);for(const e of bL.getAll()){const t=this.setupCoreViewPlugin(e);this.handlers.push(t),this.uiHandlers.push(t),this.coreHandlers.push(t)}for(const e of vL.getAll()){const t=this.setupUiPlugin(e);this.statefulUIPlugins.push(t),this.handlers.push(t),this.uiHandlers.push(t)}for(const e of fL.getAll()){const t=this.setupUiPlugin(e);this.handlers.push(t),this.uiHandlers.push(t)}if(this.dispatch("START"),this.selection.observe(this,{handleEvent:()=>this.trigger("update")}),this.setupSessionEvents(),this.joinSession(),o.snapshotRequested||e["[Content_Types].xml"]&&!this.getters.isReadonly()){const e=performance.now();console.debug("Snapshot requested"),this.session.snapshot(this.exportData()),this.garbageCollectExternalResources(),console.debug("Snapshot taken in",performance.now()-e,"ms")}t.markRaw(this),console.debug("Model created in",performance.now()-r,"ms"),console.debug("######")}joinSession(){this.session.join(this.config.client)}async leaveSession(){const e=this.getters.isReadonly()?void 0:ut((()=>this.exportData()));await this.session.leave(e)}setupUiPlugin(e){const t=new e(this.uiPluginConfig);for(const o of e.getters){if(!(o in t))throw new Error(`Invalid getter name: ${o} for plugin ${t.constructor}`);if(o in this.getters)throw new Error(`Getter "${o}" is already defined.`);this.getters[o]=t[o].bind(t)}for(const o of e.layers)this.renderers[o]||(this.renderers[o]=[]),this.renderers[o].push(t);return t}setupCoreViewPlugin(e){const t=new e(this.coreViewPluginConfig);for(const o of e.getters){if(!(o in t))throw new Error(`Invalid getter name: ${o} for plugin ${t.constructor}`);if(o in this.getters)throw new Error(`Getter "${o}" is already defined.`);this.getters[o]=t[o].bind(t)}return t}setupCorePlugin(e,t){const o=new e(this.corePluginConfig);for(const t of e.getters){if(!(t in o))throw new Error(`Invalid getter name: ${t} for plugin ${o.constructor}`);if(t in this.coreGetters)throw new Error(`Getter "${t}" is already defined.`);this.coreGetters[t]=o[t].bind(o)}o.import(t),this.corePlugins.push(o),this.coreHandlers.push(o),this.handlers.push(o)}onRemoteRevisionReceived({commands:e}){for(const t of e){const e=this.status;this.status=2,this.dispatchToHandlers(this.statefulUIPlugins,t),this.status=e}this.finalize()}setupSession(e){return new YV(fH({initialRevisionId:e,recordChanges:this.state.recordChanges.bind(this.state),dispatch:e=>{this.checkDispatchAllowed(e).isSuccessful?(this.isReplayingCommand=!0,this.dispatchToHandlers(this.coreHandlers,e),this.isReplayingCommand=!1):this.dispatchToHandlers(this.coreHandlers,{type:"UNDO",commands:[e]})}}),this.config.transportService,e)}setupSessionEvents(){this.session.on("remote-revision-received",this,this.onRemoteRevisionReceived),this.session.on("revision-undone",this,(({commands:e})=>{this.dispatchFromCorePlugin("UNDO",{commands:e}),this.finalize()})),this.session.on("revision-redone",this,(({commands:e})=>{this.dispatchFromCorePlugin("REDO",{commands:e}),this.finalize()})),this.session.on("unexpected-revision-id",this,(()=>this.trigger("unexpected-revision-id"))),this.session.on("collaborative-event-received",this,(()=>{this.trigger("update")}))}setupConfig(e){const t=e.client||{id:this.uuidGenerator.smallUuid(),name:Vo("Anonymous").toString()},o=e.transportService||new TL;return{...e,mode:e.mode||"normal",custom:e.custom||{},external:this.setupExternalConfig(e.external||{}),transportService:o,client:t,moveClient:()=>{},snapshotRequested:!1,notifyUI:e=>this.trigger("notify-ui",e),raiseBlockingErrorUI:e=>this.trigger("raise-error-ui",{text:e}),customColors:e.customColors||[]}}setupExternalConfig(e){const t=e.loadLocales||(()=>Promise.resolve(zs));return{...e,loadLocales:t}}setupCorePluginConfig(){return{getters:this.coreGetters,stateObserver:this.state,range:this.range,dispatch:this.dispatchFromCorePlugin,canDispatch:this.canDispatch,custom:this.config.custom,external:this.config.external}}setupCoreViewPluginConfig(){return{getters:this.getters,stateObserver:this.state,selection:this.selection,moveClient:this.session.move.bind(this.session),custom:this.config.custom,uiActions:this.config,session:this.session,defaultCurrency:this.config.defaultCurrency,customColors:this.config.customColors||[],external:this.config.external}}setupUiPluginConfig(){return{getters:this.getters,stateObserver:this.state,dispatch:this.dispatch,canDispatch:this.canDispatch,selection:this.selection,moveClient:this.session.move.bind(this.session),custom:this.config.custom,uiActions:this.config,session:this.session,defaultCurrency:this.config.defaultCurrency,customColors:this.config.customColors||[],external:this.config.external}}checkDispatchAllowed(e){const t=ks(e)?this.checkDispatchAllowedCoreCommand(e):this.checkDispatchAllowedLocalCommand(e);return t.some((e=>"Success"!==e))?new Vs(t.flat()):Vs.Success}checkDispatchAllowedCoreCommand(e){const t=this.corePlugins.map((t=>t.allowDispatch(e)));return t.push(this.range.allowDispatch(e)),t}checkDispatchAllowedLocalCommand(e){return this.uiHandlers.map((t=>t.allowDispatch(e)))}finalize(){this.status=3;for(const e of this.handlers)e.finalize();this.status=0,this.trigger("command-finalized")}canDispatch=(e,t)=>this.checkDispatchAllowed(xU(e,t));dispatch=(e,t)=>{const o=xU(e,t),s=this.status;if(this.getters.isReadonly()&&(i=o,!Ms.has(i.type)))return new Vs("Readonly");var i;if(!this.session.canApplyOptimisticUpdate())return new Vs("WaitingSessionConfirmation");switch(s){case 0:const t=this.checkDispatchAllowed(o);if(!t.isSuccessful)return this.trigger("update"),t;this.status=1;const{changes:s,commands:i}=this.state.recordChanges((()=>{const t=performance.now();ks(o)&&this.state.addCommand(o),this.dispatchToHandlers(this.handlers,o),this.finalize();const s=performance.now()-t;s>5&&console.debug(e,s,"ms")}));this.session.save(o,i,s),this.status=0,this.trigger("update");break;case 1:if(ks(o)){const e=this.checkDispatchAllowed(o);if(!e.isSuccessful)return e;this.state.addCommand(o)}this.dispatchToHandlers(this.handlers,o);break;case 3:throw new Error("Cannot dispatch commands in the finalize state");case 2:if(ks(o))throw new Error(`A UI plugin cannot dispatch ${e} while handling a core command`);this.dispatchToHandlers(this.handlers,o)}return Vs.Success};dispatchFromCorePlugin=(e,t)=>{const o=xU(e,t),s=this.status;this.status=2;const i=this.isReplayingCommand?this.coreHandlers:this.handlers;return this.dispatchToHandlers(i,o),this.status=s,Vs.Success};dispatchToHandlers(e,t){const o=ks(t);for(const s of e)!o&&s instanceof Rk||s.beforeHandle(t);for(const s of e)!o&&s instanceof Rk||s.handle(t);this.trigger("command-dispatched",t)}drawLayer(e,t){const o=this.renderers[t];if(o)for(const s of o)e.ctx.save(),s.drawLayer(e,t),e.ctx.restore()}exportData(){let e=hD();for(const t of this.handlers)t instanceof Rk&&t.export(e);return e.revisionId=this.session.getRevisionId()||Se,e=ze(e),e}updateMode(e){this.config.mode=e,this.trigger("update")}exportXLSX(){this.dispatch("EVALUATE_CELLS");let e={...hD(),sheets:[dD(sD,"Sheet1")]};for(const t of this.handlers)t instanceof Ek&&t.exportForExcel(e);return e=ze(e),yU(e)}garbageCollectExternalResources(){for(const e of this.corePlugins)e.garbageCollectExternalResources()}},e.PivotRuntimeDefinition=MN,e.Registry=n,e.Revision=ZV,e.SPREADSHEET_DIMENSIONS=RU,e.Spreadsheet=lH,e.SpreadsheetPivotTable=VN,e.UIPlugin=FV,e.__info__=EU,e.addFunction=function e(t,o){return CS.add(t,o),{addFunction:(t,o)=>e(t,o)}},e.addRenderingLayer=function(e,t){if(Zs[e])throw new Error(`Layer ${e} already exists`);Zs[e]=t},e.astToFormula=av,e.chartHelpers=MU,e.compile=PS,e.compileTokens=MS,e.components=_U,e.constants=PU,e.convertAstNodes=sv,e.coreTypes=Ns,e.findCellInNewZone=Ar,e.functionCache=FS,e.helpers=AU,e.hooks=OU,e.invalidateCFEvaluationCommands=Fs,e.invalidateChartEvaluationCommands=_s,e.invalidateDependenciesCommands=Os,e.invalidateEvaluationCommands=Ds,e.iterateAstNodes=iv,e.links=DU,e.load=iD,e.parse=tv,e.parseTokens=ov,e.readonlyAllowedCommands=Ms,e.registries=TU,e.setDefaultSheetViewSize=function(e){Pe=e},e.setTranslationMethod=function(e,t=(()=>!0)){Mo=e,No=t},e.stores=FU,e.tokenColors=mE,e.tokenize=sl,EU.version="18.5.0-alpha.0",EU.date="2025-06-24T12:26:38.163Z",EU.hash="ed0f325"}(this.o_spreadsheet=this.o_spreadsheet||{},owl);
3344
+ `}var xU;!function(e){e[e.Ready=0]="Ready",e[e.Running=1]="Running",e[e.RunningCore=2]="RunningCore",e[e.Finalizing=3]="Finalizing"}(xU||(xU={}));function EU(e,t={}){const o=ze(t);return o.type=e,o}const RU={},TU={MIN_ROW_HEIGHT:10,MIN_COL_WIDTH:5,HEADER_HEIGHT:te,HEADER_WIDTH:oe,DESKTOP_BOTTOMBAR_HEIGHT:36,DEFAULT_CELL_WIDTH:se,DEFAULT_CELL_HEIGHT:ie,SCROLLBAR_WIDTH:ne},AU={autoCompleteProviders:lE,autofillModifiersRegistry:xV,autofillRulesRegistry:EV,cellMenuRegistry:qO,colMenuRegistry:iP,errorTypes:Qs,linkMenuRegistry:dR,functionRegistry:CS,featurePluginRegistry:vL,iconsOnCellRegistry:bV,statefulUIPluginRegistry:bL,coreViewsPluginRegistry:SL,corePluginRegistry:fL,rowMenuRegistry:hP,sidePanelRegistry:gk,figureRegistry:Vx,chartSidePanelComponentRegistry:$M,chartComponentRegistry:KI,chartRegistry:XI,chartSubtypeRegistry:QI,topbarMenuRegistry:RL,topbarComponentRegistry:TL,clickableCellRegistry:CL,otRegistry:NV,inverseCommandRegistry:yL,urlRegistry:Uo,cellPopoverRegistry:Ux,numberFormatMenuRegistry:IL,repeatLocalCommandTransformRegistry:cL,repeatCommandTransformRegistry:lL,clipboardHandlersRegistries:jc,pivotRegistry:YN,pivotTimeAdapterRegistry:dc,pivotSidePanelRegistry:QN,pivotNormalizationValueRegistry:zc,supportedPivotPositionalFormulaRegistry:wk,pivotToFunctionValueRegistry:$c,migrationStepRegistry:QA,chartJsExtensionRegistry:Sh},DU={arg:Zh,isEvaluationError:hi,toBoolean:wi,toJsDate:Ii,toNumber:gi,toString:Si,toNormalizedPivotValue:Lc,toFunctionPivotValue:Uc,toXC:Oo,toZone:ar,toUnboundedZone:rr,toCartesian:_o,numberToLetters:Co,lettersToNumber:yo,UuidGenerator:Wa,formatValue:bn,createCurrencyFormat:Fn,ColorGenerator:po,computeTextWidth:Oa,createEmptyWorkbookData:hD,createEmptySheet:cD,createEmptyExcelSheet:dD,rgbaToHex:jt,colorToRGBA:Yt,positionToZone:Dr,isDefined:lt,isMatrix:Ws,lazy:ut,genericRepeat:hL,createAction:i,createActions:o,transformRangeData:Xc,deepEquals:mt,overlap:Sr,union:fr,isInside:Cr,deepCopy:ze,expandZoneOnInsertion:ur,reduceZoneOnDeletion:mr,unquote:Ge,getMaxObjectId:_c,getFunctionsFromTokens:LS,getFirstPivotFunction:FN,getNumberOfPivotFunctions:PN,parseDimension:Pc,isDateOrDatetimeField:Mc,makeFieldProposal:AN,insertTokenAfterArgSeparator:DN,insertTokenAfterLeftParenthesis:_N,mergeContiguousZones:kr,getPivotHighlights:gN,pivotTimeAdapter:uc,UNDO_REDO_PIVOT_COMMANDS:wV,createPivotFormula:Vc,areDomainArgsFieldsValid:kc,splitReference:ta,sanitizeSheetName:qe,getUniqueText:kt,isNumber:Is,isDateTime:rs},_U={isMarkdownLink:et,parseMarkdownLink:st,markdownLink:ot,openLink:Wo,urlRepresentation:Go},OU={Checkbox:YE,Section:ME,RoundColorPicker:NE,ChartDataSeries:eM,ChartErrorSection:tM,ChartLabelRange:oM,ChartTitle:hM,ChartPanel:qM,ChartFigure:Nx,ChartJsComponent:zC,Grid:yk,GridOverlay:NP,ScorecardChart:sy,LineConfigPanel:DM,BarConfigPanel:iM,PieChartDesignPanel:FM,GenericChartConfigPanel:sM,ChartWithAxisDesignPanel:bM,LineChartDesignPanel:_M,GaugeChartConfigPanel:wM,GaugeChartDesignPanel:IM,ScorecardChartConfigPanel:MM,ScorecardChartDesignPanel:NM,GeoChartDesignPanel:TM,RadarChartDesignPanel:PM,WaterfallChartDesignPanel:zM,ComboChartDesignPanel:CM,FunnelChartDesignPanel:yM,ChartTypePicker:GM,FigureComponent:Lx,MenuPopover:Px,Popover:Dx,SelectionInput:$E,ValidationMessages:TP,AddDimensionButton:vN,PivotDimensionGranularity:yN,PivotDimensionOrder:wN,PivotDimension:CN,PivotLayoutConfigurator:EN,PivotHTMLRenderer:xk,PivotDeferUpdate:pN,PivotTitleSection:RN,CogWheelMenu:SN,TextInput:bN,SidePanelCollapsible:Wx,RadioSelection:uM,GeoChartRegionSelectSection:xM,ChartDashboardMenu:Mx,FullScreenChart:Ik},FU={useDragAndDropListItems:kE,useHighlights:YM,useHighlightsOnHover:jM},PU={useStoreProvider:th,DependencyContainer:Jc,CellPopoverStore:Bx,ComposerFocusStore:uh,CellComposerStore:SP,FindAndReplaceStore:aN,HighlightStore:hE,DelayedHoveredCellStore:Hx,HoveredTableStore:FP,ModelStore:ah,NotificationStore:dE,RendererStore:ch,SelectionInputStore:zE,SpreadsheetStore:hh,useStore:oh,useLocalStore:sh,SidePanelStore:vk,PivotSidePanelStore:KN,PivotMeasureDisplayPanelStore:dN,ClientFocusStore:uP};const MU={DEFAULT_LOCALE:$s,HIGHLIGHT_COLOR:a,PIVOT_TABLE_CONFIG:Ve,ChartTerms:$y},NU={...nx,...vI};e.AbstractCellClipboardHandler=el,e.AbstractChart=$C,e.AbstractFigureClipboardHandler=Zc,e.CellErrorType=Js,e.ClientDisconnectedError=YV,e.CorePlugin=Rk,e.CoreViewPlugin=Mk,e.DispatchResult=Vs,e.EvaluationError=ei,e.LocalTransportService=AL,e.Model=class extends Kc{corePlugins=[];statefulUIPlugins=[];range;session;isReplayingCommand=!1;renderers={};status=0;config;corePluginConfig;coreViewPluginConfig;uiPluginConfig;state;selection;getters;coreGetters;uuidGenerator;handlers=[];uiHandlers=[];coreHandlers=[];constructor(e={},o={},s=[],i=new Wa,n=!1){const r=performance.now();console.debug("##### Model creation #####"),super(),Mo===Fo&&No===Po&&(No=()=>!0),s=aD(e,s);const a=iD(e,n);this.state=new wH,this.uuidGenerator=i,this.config=this.setupConfig(o),this.session=this.setupSession(a.revisionId),this.coreGetters={},this.range=new Fk(this.coreGetters),this.coreGetters.getRangeString=this.range.getRangeString.bind(this.range),this.coreGetters.getRangeFromSheetXC=this.range.getRangeFromSheetXC.bind(this.range),this.coreGetters.createAdaptedRanges=this.range.createAdaptedRanges.bind(this.range),this.coreGetters.getRangeData=this.range.getRangeData.bind(this.range),this.coreGetters.getRangeDataFromXc=this.range.getRangeDataFromXc.bind(this.range),this.coreGetters.getRangeDataFromZone=this.range.getRangeDataFromZone.bind(this.range),this.coreGetters.getRangeFromRangeData=this.range.getRangeFromRangeData.bind(this.range),this.coreGetters.getRangeFromZone=this.range.getRangeFromZone.bind(this.range),this.coreGetters.recomputeRanges=this.range.recomputeRanges.bind(this.range),this.coreGetters.isRangeValid=this.range.isRangeValid.bind(this.range),this.coreGetters.extendRange=this.range.extendRange.bind(this.range),this.coreGetters.getRangesUnion=this.range.getRangesUnion.bind(this.range),this.coreGetters.removeRangesSheetPrefix=this.range.removeRangesSheetPrefix.bind(this.range),this.coreGetters.adaptFormulaStringDependencies=this.range.adaptFormulaStringDependencies.bind(this.range),this.coreGetters.copyFormulaStringForSheet=this.range.copyFormulaStringForSheet.bind(this.range),this.getters={isReadonly:()=>"readonly"===this.config.mode||"dashboard"===this.config.mode,isDashboard:()=>"dashboard"===this.config.mode},this.selection=new CH(this.getters),this.coreHandlers.push(this.range),this.handlers.push(this.range),this.corePluginConfig=this.setupCorePluginConfig(),this.coreViewPluginConfig=this.setupCoreViewPluginConfig(),this.uiPluginConfig=this.setupUiPluginConfig();for(const e of fL.getAll())this.setupCorePlugin(e,a);Object.assign(this.getters,this.coreGetters),this.session.loadInitialMessages(s);for(const e of SL.getAll()){const t=this.setupCoreViewPlugin(e);this.handlers.push(t),this.uiHandlers.push(t),this.coreHandlers.push(t)}for(const e of bL.getAll()){const t=this.setupUiPlugin(e);this.statefulUIPlugins.push(t),this.handlers.push(t),this.uiHandlers.push(t)}for(const e of vL.getAll()){const t=this.setupUiPlugin(e);this.handlers.push(t),this.uiHandlers.push(t)}if(this.dispatch("START"),this.selection.observe(this,{handleEvent:()=>this.trigger("update")}),this.setupSessionEvents(),this.joinSession(),o.snapshotRequested||e["[Content_Types].xml"]&&!this.getters.isReadonly()){const e=performance.now();console.debug("Snapshot requested"),this.session.snapshot(this.exportData()),this.garbageCollectExternalResources(),console.debug("Snapshot taken in",performance.now()-e,"ms")}t.markRaw(this),console.debug("Model created in",performance.now()-r,"ms"),console.debug("######")}joinSession(){this.session.join(this.config.client)}async leaveSession(){const e=this.getters.isReadonly()?void 0:ut((()=>this.exportData()));await this.session.leave(e)}setupUiPlugin(e){const t=new e(this.uiPluginConfig);for(const o of e.getters){if(!(o in t))throw new Error(`Invalid getter name: ${o} for plugin ${t.constructor}`);if(o in this.getters)throw new Error(`Getter "${o}" is already defined.`);this.getters[o]=t[o].bind(t)}for(const o of e.layers)this.renderers[o]||(this.renderers[o]=[]),this.renderers[o].push(t);return t}setupCoreViewPlugin(e){const t=new e(this.coreViewPluginConfig);for(const o of e.getters){if(!(o in t))throw new Error(`Invalid getter name: ${o} for plugin ${t.constructor}`);if(o in this.getters)throw new Error(`Getter "${o}" is already defined.`);this.getters[o]=t[o].bind(t)}return t}setupCorePlugin(e,t){const o=new e(this.corePluginConfig);for(const t of e.getters){if(!(t in o))throw new Error(`Invalid getter name: ${t} for plugin ${o.constructor}`);if(t in this.coreGetters)throw new Error(`Getter "${t}" is already defined.`);this.coreGetters[t]=o[t].bind(o)}o.import(t),this.corePlugins.push(o),this.coreHandlers.push(o),this.handlers.push(o)}onRemoteRevisionReceived({commands:e}){for(const t of e){const e=this.status;this.status=2,this.dispatchToHandlers(this.statefulUIPlugins,t),this.status=e}this.finalize()}setupSession(e){return new XV(vH({initialRevisionId:e,recordChanges:this.state.recordChanges.bind(this.state),dispatch:e=>{this.checkDispatchAllowed(e).isSuccessful?(this.isReplayingCommand=!0,this.dispatchToHandlers(this.coreHandlers,e),this.isReplayingCommand=!1):this.dispatchToHandlers(this.coreHandlers,{type:"UNDO",commands:[e]})}}),this.config.transportService,e)}setupSessionEvents(){this.session.on("remote-revision-received",this,this.onRemoteRevisionReceived),this.session.on("revision-undone",this,(({commands:e})=>{this.dispatchFromCorePlugin("UNDO",{commands:e}),this.finalize()})),this.session.on("revision-redone",this,(({commands:e})=>{this.dispatchFromCorePlugin("REDO",{commands:e}),this.finalize()})),this.session.on("unexpected-revision-id",this,(()=>this.trigger("unexpected-revision-id"))),this.session.on("collaborative-event-received",this,(()=>{this.trigger("update")}))}setupConfig(e){const t=e.client||{id:this.uuidGenerator.smallUuid(),name:Vo("Anonymous").toString()},o=e.transportService||new AL;return{...e,mode:e.mode||"normal",custom:e.custom||{},external:this.setupExternalConfig(e.external||{}),transportService:o,client:t,moveClient:()=>{},snapshotRequested:!1,notifyUI:e=>this.trigger("notify-ui",e),raiseBlockingErrorUI:e=>this.trigger("raise-error-ui",{text:e}),customColors:e.customColors||[]}}setupExternalConfig(e){const t=e.loadLocales||(()=>Promise.resolve(zs));return{...e,loadLocales:t}}setupCorePluginConfig(){return{getters:this.coreGetters,stateObserver:this.state,range:this.range,dispatch:this.dispatchFromCorePlugin,canDispatch:this.canDispatch,custom:this.config.custom,external:this.config.external}}setupCoreViewPluginConfig(){return{getters:this.getters,stateObserver:this.state,selection:this.selection,moveClient:this.session.move.bind(this.session),custom:this.config.custom,uiActions:this.config,session:this.session,defaultCurrency:this.config.defaultCurrency,customColors:this.config.customColors||[],external:this.config.external}}setupUiPluginConfig(){return{getters:this.getters,stateObserver:this.state,dispatch:this.dispatch,canDispatch:this.canDispatch,selection:this.selection,moveClient:this.session.move.bind(this.session),custom:this.config.custom,uiActions:this.config,session:this.session,defaultCurrency:this.config.defaultCurrency,customColors:this.config.customColors||[],external:this.config.external}}checkDispatchAllowed(e){const t=ks(e)?this.checkDispatchAllowedCoreCommand(e):this.checkDispatchAllowedLocalCommand(e);return t.some((e=>"Success"!==e))?new Vs(t.flat()):Vs.Success}checkDispatchAllowedCoreCommand(e){const t=this.corePlugins.map((t=>t.allowDispatch(e)));return t.push(this.range.allowDispatch(e)),t}checkDispatchAllowedLocalCommand(e){return this.uiHandlers.map((t=>t.allowDispatch(e)))}finalize(){this.status=3;for(const e of this.handlers)e.finalize();this.status=0,this.trigger("command-finalized")}canDispatch=(e,t)=>this.checkDispatchAllowed(EU(e,t));dispatch=(e,t)=>{const o=EU(e,t),s=this.status;if(this.getters.isReadonly()&&(i=o,!Ms.has(i.type)))return new Vs("Readonly");var i;if(!this.session.canApplyOptimisticUpdate())return new Vs("WaitingSessionConfirmation");switch(s){case 0:const t=this.checkDispatchAllowed(o);if(!t.isSuccessful)return this.trigger("update"),t;this.status=1;const{changes:s,commands:i}=this.state.recordChanges((()=>{const t=performance.now();ks(o)&&this.state.addCommand(o),this.dispatchToHandlers(this.handlers,o),this.finalize();const s=performance.now()-t;s>5&&console.debug(e,s,"ms")}));this.session.save(o,i,s),this.status=0,this.trigger("update");break;case 1:if(ks(o)){const e=this.checkDispatchAllowed(o);if(!e.isSuccessful)return e;this.state.addCommand(o)}this.dispatchToHandlers(this.handlers,o);break;case 3:throw new Error("Cannot dispatch commands in the finalize state");case 2:if(ks(o))throw new Error(`A UI plugin cannot dispatch ${e} while handling a core command`);this.dispatchToHandlers(this.handlers,o)}return Vs.Success};dispatchFromCorePlugin=(e,t)=>{const o=EU(e,t),s=this.status;this.status=2;const i=this.isReplayingCommand?this.coreHandlers:this.handlers;return this.dispatchToHandlers(i,o),this.status=s,Vs.Success};dispatchToHandlers(e,t){const o=ks(t);for(const s of e)!o&&s instanceof Rk||s.beforeHandle(t);for(const s of e)!o&&s instanceof Rk||s.handle(t);this.trigger("command-dispatched",t)}drawLayer(e,t){const o=this.renderers[t];if(o)for(const s of o)e.ctx.save(),s.drawLayer(e,t),e.ctx.restore()}exportData(){let e=hD();for(const t of this.handlers)t instanceof Rk&&t.export(e);return e.revisionId=this.session.getRevisionId()||Se,e=ze(e),e}updateMode(e){this.config.mode=e,this.trigger("update")}exportXLSX(){this.dispatch("EVALUATE_CELLS");let e={...hD(),sheets:[dD(sD,"Sheet1")]};for(const t of this.handlers)t instanceof Ek&&t.exportForExcel(e);return e=ze(e),wU(e)}garbageCollectExternalResources(){for(const e of this.corePlugins)e.garbageCollectExternalResources()}},e.PivotRuntimeDefinition=MN,e.Registry=n,e.Revision=jV,e.SPREADSHEET_DIMENSIONS=TU,e.Spreadsheet=cH,e.SpreadsheetPivotTable=VN,e.UIPlugin=PV,e.__info__=RU,e.addFunction=function e(t,o){return CS.add(t,o),{addFunction:(t,o)=>e(t,o)}},e.addRenderingLayer=function(e,t){if(Zs[e])throw new Error(`Layer ${e} already exists`);Zs[e]=t},e.astToFormula=av,e.chartHelpers=NU,e.compile=PS,e.compileTokens=MS,e.components=OU,e.constants=MU,e.convertAstNodes=sv,e.coreTypes=Ns,e.findCellInNewZone=Ar,e.functionCache=FS,e.helpers=DU,e.hooks=FU,e.invalidateCFEvaluationCommands=Fs,e.invalidateChartEvaluationCommands=_s,e.invalidateDependenciesCommands=Os,e.invalidateEvaluationCommands=Ds,e.iterateAstNodes=iv,e.links=_U,e.load=iD,e.parse=tv,e.parseTokens=ov,e.readonlyAllowedCommands=Ms,e.registries=AU,e.setDefaultSheetViewSize=function(e){Pe=e},e.setTranslationMethod=function(e,t=(()=>!0)){Mo=e,No=t},e.stores=PU,e.tokenColors=mE,e.tokenize=sl,RU.version="18.5.0-alpha.1",RU.date="2025-06-27T09:12:49.245Z",RU.hash="756e75b"}(this.o_spreadsheet=this.o_spreadsheet||{},owl);