@odoo/o-spreadsheet 17.1.1 → 17.2.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.
@@ -1445,7 +1445,7 @@
1445
1445
  onScroll.bind="onScroll"
1446
1446
  />`;static defaultProps={topOffset:0};get offset(){return this.env.model.getters.getActiveSheetDOMScrollInfo().scrollY}get height(){return this.env.model.getters.getMainViewportRect().height}get isDisplayed(){const{yRatio:e}=this.env.model.getters.getFrozenSheetViewRatio(this.env.model.getters.getActiveSheetId());return e<1}get position(){const{y:e}=this.env.model.getters.getMainViewportRect();return{top:`${this.props.topOffset+e}px`,right:"0px",width:"15px",bottom:"0px"}}onScroll(e){const{scrollX:t}=this.env.model.getters.getActiveSheetDOMScrollInfo();this.env.model.dispatch("SET_VIEWPORT_OFFSET",{offsetX:t,offsetY:e})}}const _E={ROW:hS,COL:aS,CELL:Ev,GROUP_HEADERS:DC,UNGROUP_HEADERS:LC};class ME extends t.Component{static template="o-spreadsheet-Grid";static props={sidePanelIsOpen:Boolean,exposeFocus:Function,focusComposer:String,onComposerContentFocused:Function,onGridComposerCellFocused:Function};static components={GridComposer:XC,GridOverlay:fE,GridPopover:vE,HeadersOverlay:EE,Menu:Lr,Autofill:PC,ClientTag:VC,Highlight:RE,Popover:Mr,VerticalScrollBar:OE,HorizontalScrollBar:AE,FilterIconsOverlay:JC};HEADER_HEIGHT=I;HEADER_WIDTH=R;menuState;gridRef;hiddenInput;onMouseWheel;canvasPosition;hoveredCell;setup(){this.menuState=t.useState({isOpen:!1,position:null,menuItems:[]}),this.gridRef=t.useRef("grid"),this.hiddenInput=t.useRef("hiddenInput"),this.canvasPosition=Tr(this.gridRef),this.hoveredCell=t.useState({col:void 0,row:void 0}),t.useChildSubEnv({getPopoverContainerRect:()=>this.getGridRect()}),t.useExternalListener(document.body,"cut",this.copy.bind(this,!0)),t.useExternalListener(document.body,"copy",this.copy.bind(this,!1)),t.useExternalListener(document.body,"paste",this.paste),t.onMounted((()=>this.focus())),this.props.exposeFocus((()=>this.focus())),wE("canvas",this.env.model,(()=>this.env.model.getters.getSheetViewDimensionWithHeaders())),this.onMouseWheel=yE(((e,t)=>{this.moveCanvas(e,t),this.hoveredCell.col=void 0,this.hoveredCell.row=void 0}))}onCellHovered({col:e,row:t}){this.hoveredCell.col=e,this.hoveredCell.row=t}get gridOverlayDimensions(){return hr({top:"26px",left:"48px",height:"calc(100% - 41px)",width:"calc(100% - 63px)"})}onClosePopover(){this.env.model.getters.hasOpenedPopover()&&this.closeOpenedPopover(),this.focus()}keyDownMapping={Enter:()=>{this.env.model.getters.getActiveCell().type===Qt.empty?this.props.onGridComposerCellFocused():this.props.onComposerContentFocused()},Tab:()=>this.env.model.selection.moveAnchorCell("right",1),"Shift+Tab":()=>this.env.model.selection.moveAnchorCell("left",1),F2:()=>{this.env.model.getters.getActiveCell().type===Qt.empty?this.props.onGridComposerCellFocused():this.props.onComposerContentFocused()},Delete:()=>{this.env.model.dispatch("DELETE_CONTENT",{sheetId:this.env.model.getters.getActiveSheetId(),target:this.env.model.getters.getSelectedZones()})},Backspace:()=>{this.env.model.dispatch("DELETE_CONTENT",{sheetId:this.env.model.getters.getActiveSheetId(),target:this.env.model.getters.getSelectedZones()})},Escape:()=>{this.env.model.getters.hasOpenedPopover()?this.closeOpenedPopover():this.menuState.isOpen?this.closeMenu():this.env.model.getters.isPaintingFormat()?this.env.model.dispatch("CANCEL_PAINT_FORMAT"):this.env.model.dispatch("CLEAN_CLIPBOARD_HIGHLIGHT")},"Ctrl+A":()=>this.env.model.selection.loopSelection(),"Ctrl+Z":()=>this.env.model.dispatch("REQUEST_UNDO"),"Ctrl+Y":()=>this.env.model.dispatch("REQUEST_REDO"),F4:()=>this.env.model.dispatch("REQUEST_REDO"),"Ctrl+B":()=>this.env.model.dispatch("SET_FORMATTING",{sheetId:this.env.model.getters.getActiveSheetId(),target:this.env.model.getters.getSelectedZones(),style:{bold:!this.env.model.getters.getCurrentStyle().bold}}),"Ctrl+I":()=>this.env.model.dispatch("SET_FORMATTING",{sheetId:this.env.model.getters.getActiveSheetId(),target:this.env.model.getters.getSelectedZones(),style:{italic:!this.env.model.getters.getCurrentStyle().italic}}),"Ctrl+U":()=>this.env.model.dispatch("SET_FORMATTING",{sheetId:this.env.model.getters.getActiveSheetId(),target:this.env.model.getters.getSelectedZones(),style:{underline:!this.env.model.getters.getCurrentStyle().underline}}),"Ctrl+O":()=>kl(this.env),"Alt+=":()=>{const e=this.env.model.getters.getActiveSheetId(),t=this.env.model.getters.getSelectedZone(),{anchor:o}=this.env.model.getters.getSelection(),s=this.env.model.getters.getAutomaticSums(e,t,o.cell);if(this.env.model.getters.isSingleCellOrMerge(e,t)||this.env.model.getters.isEmpty(e,t)&&s.length<=1){const t=s[0]?.zone,o=t?this.env.model.getters.zoneToXC(e,s[0].zone):"",n=`=SUM(${o})`;this.props.onGridComposerCellFocused(n,{start:5,end:5+o.length})}else this.env.model.dispatch("SUM_SELECTION")},"Alt+Enter":()=>{const e=this.env.model.getters.getActiveCell();e.link&&Gi(e.link,this.env)},"Ctrl+Home":()=>{const e=this.env.model.getters.getActiveSheetId(),{col:t,row:o}=this.env.model.getters.getNextVisibleCellPosition({sheetId:e,col:0,row:0});this.env.model.selection.selectCell(t,o)},"Ctrl+End":()=>{const e=this.env.model.getters.getActiveSheetId(),t=this.env.model.getters.findVisibleHeader(e,"COL",this.env.model.getters.getNumberCols(e)-1,0),o=this.env.model.getters.findVisibleHeader(e,"ROW",this.env.model.getters.getNumberRows(e)-1,0);this.env.model.selection.selectCell(t,o)},"Shift+ ":()=>{const e=this.env.model.getters.getActiveSheetId(),t={...this.env.model.getters.getSelectedZone(),left:0,right:this.env.model.getters.getNumberCols(e)-1},o=this.env.model.getters.getActivePosition();this.env.model.selection.selectZone({cell:o,zone:t})},"Ctrl+ ":()=>{const e=this.env.model.getters.getActiveSheetId(),t={...this.env.model.getters.getSelectedZone(),top:0,bottom:this.env.model.getters.getNumberRows(e)-1},o=this.env.model.getters.getActivePosition();this.env.model.selection.selectZone({cell:o,zone:t})},"Ctrl+D":async()=>this.env.model.dispatch("COPY_PASTE_CELLS_ABOVE"),"Ctrl+R":async()=>this.env.model.dispatch("COPY_PASTE_CELLS_ON_LEFT"),"Ctrl+Shift+E":()=>this.setHorizontalAlign("center"),"Ctrl+Shift+L":()=>this.setHorizontalAlign("left"),"Ctrl+Shift+R":()=>this.setHorizontalAlign("right"),"Ctrl+Shift+V":()=>Ml(this.env),"Ctrl+Shift+<":()=>this.clearFormatting(),"Ctrl+<":()=>this.clearFormatting(),"Ctrl+Shift+ ":()=>{this.env.model.selection.selectAll()},"Ctrl+Alt+=":()=>{const e=this.env.model.getters.getActiveCols(),t=this.env.model.getters.getActiveRows(),o=1===this.env.model.getters.getSelectedZones().length,s=e.size>0&&o,n=t.size>0&&o;s&&!n?Ll(this.env):n&&!s&&Dl(this.env)},"Ctrl+Alt+-":()=>{const e=[...this.env.model.getters.getActiveCols()],t=[...this.env.model.getters.getActiveRows()];e.length>0&&0===t.length?this.env.model.dispatch("REMOVE_COLUMNS_ROWS",{sheetId:this.env.model.getters.getActiveSheetId(),dimension:"COL",elements:e}):t.length>0&&0===e.length&&this.env.model.dispatch("REMOVE_COLUMNS_ROWS",{sheetId:this.env.model.getters.getActiveSheetId(),dimension:"ROW",elements:t})},"Shift+PageDown":()=>{this.env.model.dispatch("ACTIVATE_NEXT_SHEET")},"Shift+PageUp":()=>{this.env.model.dispatch("ACTIVATE_PREVIOUS_SHEET")},PageDown:()=>this.env.model.dispatch("SHIFT_VIEWPORT_DOWN"),PageUp:()=>this.env.model.dispatch("SHIFT_VIEWPORT_UP"),"Ctrl+K":()=>Vl(this.env),"Alt+Shift+ArrowRight":()=>this.processHeaderGroupingKey("right"),"Alt+Shift+ArrowLeft":()=>this.processHeaderGroupingKey("left"),"Alt+Shift+ArrowUp":()=>this.processHeaderGroupingKey("up"),"Alt+Shift+ArrowDown":()=>this.processHeaderGroupingKey("down")};focus(){this.env.model.getters.getSelectedFigureId()||"inactive"!==this.env.model.getters.getEditionMode()||this.hiddenInput.el?.focus()}get gridEl(){if(!this.gridRef.el)throw new Error("Grid el is not defined.");return this.gridRef.el}getAutofillPosition(){const e=this.env.model.getters.getSelectedZone(),t=this.env.model.getters.getVisibleRect(e);return{left:t.x+t.width-4,top:t.y+t.height-4}}get isAutofillVisible(){const e=this.env.model.getters.getSelectedZone(),t=this.env.model.getters.getVisibleRect({left:e.right,right:e.right,top:e.bottom,bottom:e.bottom});return!(0===t.width||0===t.height)}onGridResized({height:e,width:t}){this.env.model.dispatch("RESIZE_SHEETVIEW",{width:t,height:e,gridOffsetX:R,gridOffsetY:I})}moveCanvas(e,t){const{scrollX:o,scrollY:s}=this.env.model.getters.getActiveSheetDOMScrollInfo();this.env.model.dispatch("SET_VIEWPORT_OFFSET",{offsetX:o+e,offsetY:s+t})}getClientPositionKey(e){return`${e.id}-${e.position?.sheetId}-${e.position?.col}-${e.position?.row}`}isCellHovered(e,t){return this.hoveredCell.col===e&&this.hoveredCell.row===t}getGridRect(){return{...this.canvasPosition,...this.env.model.getters.getSheetViewDimensionWithHeaders()}}onCellClicked(e,t,{addZone:o,expandZone:s}){this.env.model.getters.hasOpenedPopover()&&this.closeOpenedPopover(),"editing"===this.env.model.getters.getEditionMode()&&gC(this.env),s?this.env.model.selection.setAnchorCorner(e,t):o?this.env.model.selection.addCellToSelection(e,t):this.env.model.selection.selectCell(e,t);let n=e,i=t;RS(this.env,((e,t,o)=>{o.preventDefault(),(e!==n&&-1!=e||t!==i&&-1!=t)&&(n=-1===e?n:e,i=-1===t?i:t,this.env.model.selection.setAnchorCorner(n,i))}),(()=>{this.env.model.getters.isPaintingFormat()&&this.env.model.dispatch("PASTE",{target:this.env.model.getters.getSelectedZones()})}))}onCellDoubleClicked(e,t){const o=this.env.model.getters.getActiveSheetId();({col:e,row:t}=this.env.model.getters.getMainCellPosition({sheetId:o,col:e,row:t}));this.env.model.getters.getEvaluatedCell({sheetId:o,col:e,row:t}).type===Qt.empty?this.props.onGridComposerCellFocused():this.props.onComposerContentFocused()}closeOpenedPopover(){this.env.model.dispatch("CLOSE_CELL_POPOVER")}processArrows(e){e.preventDefault(),e.stopPropagation(),this.env.model.getters.hasOpenedPopover()&&this.closeOpenedPopover(),pS(e,this.env.model.selection),this.env.model.getters.isPaintingFormat()&&this.env.model.dispatch("PASTE",{target:this.env.model.getters.getSelectedZones()})}onKeydown(e){const t=yr(e),o=this.keyDownMapping[t];if(o)return e.preventDefault(),e.stopPropagation(),void o();e.key.startsWith("Arrow")&&this.processArrows(e)}onInput(e){(e.isComposing||"insertFromPaste"!==e.inputType)&&e.data&&(e.preventDefault(),e.stopPropagation(),this.props.onGridComposerCellFocused(e.data))}onInputContextMenu(e){e.preventDefault();const t=this.env.model.getters.getSelectedZone(),{left:o,top:s}=t;let n="CELL";gC(this.env),this.env.model.getters.getActiveCols().has(o)?n="COL":this.env.model.getters.getActiveRows().has(s)&&(n="ROW");const{x:i,y:r,width:a}=this.env.model.getters.getVisibleRect(t),l=this.getGridRect();this.toggleContextMenu(n,l.x+i+a,l.y+r)}onCellRightClicked(e,t,{x:o,y:s}){const n=this.env.model.getters.getSelectedZones();let i="CELL";bn(e,t,n[n.length-1])?this.env.model.getters.getActiveCols().has(e)?i="COL":this.env.model.getters.getActiveRows().has(t)&&(i="ROW"):(this.env.model.selection.getBackToDefault(),this.env.model.selection.selectCell(e,t)),this.toggleContextMenu(i,o,s)}toggleContextMenu(e,t,o){this.env.model.getters.hasOpenedPopover()&&this.closeOpenedPopover(),this.menuState.isOpen=!0,this.menuState.position={x:t,y:o},this.menuState.menuItems=_E[e].getMenuItems()}copy(e,t){if(!this.gridEl.contains(document.activeElement))return;const o=t.clipboardData;if(!o)return void this.displayWarningCopyPasteNotSupported();if("inactive"!==this.env.model.getters.getEditionMode())return;e?Il(this.env):this.env.model.dispatch("COPY");const s=this.env.model.getters.getClipboardContent();for(const e in s)o.setData(e,s[e]);t.preventDefault()}async paste(e){if(!this.gridEl.contains(document.activeElement))return;const t=e.clipboardData;if(t){if(t.types.indexOf(Jt.PlainText)>-1){const e=t.getData(Jt.PlainText),o=this.env.model.getters.getSelectedZones(),s=this.env.model.getters.getClipboardTextContent(),n=this.env.model.getters.isCutOperation();s===e?Ta(this.env,o):Aa(this.env,o,e),n&&await this.env.clipboard.write({[Jt.PlainText]:""})}}else this.displayWarningCopyPasteNotSupported()}displayWarningCopyPasteNotSupported(){this.env.raiseError(Xt("Copy/Paste is not supported in this browser."))}clearFormatting(){this.env.model.dispatch("CLEAR_FORMATTING",{sheetId:this.env.model.getters.getActiveSheetId(),target:this.env.model.getters.getSelectedZones()})}setHorizontalAlign(e){this.env.model.dispatch("SET_FORMATTING",{sheetId:this.env.model.getters.getActiveSheetId(),target:this.env.model.getters.getSelectedZones(),style:{align:e}})}closeMenu(){this.menuState.isOpen=!1,this.focus()}processHeaderGroupingKey(e){if(1!==this.env.model.getters.getSelectedZones().length)return;const t=this.env.model.getters.getActiveRows().size>0,o=this.env.model.getters.getActiveCols().size>0;o&&t?this.processHeaderGroupingEventOnWholeSheet(e):o?this.processHeaderGroupingEventOnHeaders(e,"COL"):t?this.processHeaderGroupingEventOnHeaders(e,"ROW"):this.processHeaderGroupingEventOnGrid(e)}processHeaderGroupingEventOnHeaders(e,t){const o=this.env.model.getters.getActiveSheetId(),s=this.env.model.getters.getSelectedZone(),n="COL"===t?s.left:s.top,i="COL"===t?s.right:s.bottom;switch(e){case"right":this.env.model.dispatch("GROUP_HEADERS",{sheetId:o,dimension:t,start:n,end:i});break;case"left":this.env.model.dispatch("UNGROUP_HEADERS",{sheetId:o,dimension:t,start:n,end:i});break;case"down":this.env.model.dispatch("UNFOLD_HEADER_GROUPS_IN_ZONE",{sheetId:o,dimension:t,zone:s});break;case"up":this.env.model.dispatch("FOLD_HEADER_GROUPS_IN_ZONE",{sheetId:o,dimension:t,zone:s})}}processHeaderGroupingEventOnWholeSheet(e){const t=this.env.model.getters.getActiveSheetId();"up"===e?(this.env.model.dispatch("FOLD_ALL_HEADER_GROUPS",{sheetId:t,dimension:"ROW"}),this.env.model.dispatch("FOLD_ALL_HEADER_GROUPS",{sheetId:t,dimension:"COL"})):"down"===e&&(this.env.model.dispatch("UNFOLD_ALL_HEADER_GROUPS",{sheetId:t,dimension:"ROW"}),this.env.model.dispatch("UNFOLD_ALL_HEADER_GROUPS",{sheetId:t,dimension:"COL"}))}processHeaderGroupingEventOnGrid(e){const t=this.env.model.getters.getActiveSheetId(),o=this.env.model.getters.getSelectedZone();switch(e){case"down":this.env.model.dispatch("UNFOLD_HEADER_GROUPS_IN_ZONE",{sheetId:t,dimension:"ROW",zone:o}),this.env.model.dispatch("UNFOLD_HEADER_GROUPS_IN_ZONE",{sheetId:t,dimension:"COL",zone:o});break;case"up":this.env.model.dispatch("FOLD_HEADER_GROUPS_IN_ZONE",{sheetId:t,dimension:"ROW",zone:o}),this.env.model.dispatch("FOLD_HEADER_GROUPS_IN_ZONE",{sheetId:t,dimension:"COL",zone:o});break;case"right":{const{x:e,y:t,width:s}=this.env.model.getters.getVisibleRect(o),n=this.getGridRect();this.toggleContextMenu("GROUP_HEADERS",e+s+n.x,t+n.y);break}case"left":{if(!iS(this.env,"COL")&&!iS(this.env,"ROW"))return;const{x:e,y:t,width:s}=this.env.model.getters.getVisibleRect(o),n=this.getGridRect();this.toggleContextMenu("UNGROUP_HEADERS",e+s+n.x,t+n.y);break}}}}class NE{xmlString;constructor(e){this.xmlString=e}toString(){return this.xmlString}}const FE=["areaChart","area3DChart","lineChart","line3DChart","stockChart","radarChart","scatterChart","pieChart","pie3DChart","doughnutChart","barChart","bar3DChart","ofPieChart","surfaceChart","surface3DChart","bubbleChart"],DE="000000",LE={arrow:"3Arrows",smiley:"3Symbols",dot:"3TrafficLights1"},PE={styleSheet:"http://schemas.openxmlformats.org/spreadsheetml/2006/main",sst:"http://schemas.openxmlformats.org/spreadsheetml/2006/main",Relationships:"http://schemas.openxmlformats.org/package/2006/relationships",Types:"http://schemas.openxmlformats.org/package/2006/content-types",worksheet:"http://schemas.openxmlformats.org/spreadsheetml/2006/main",workbook:"http://schemas.openxmlformats.org/spreadsheetml/2006/main",drawing:"http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing",table:"http://schemas.openxmlformats.org/spreadsheetml/2006/main",revision:"http://schemas.microsoft.com/office/spreadsheetml/2014/revision",revision3:"http://schemas.microsoft.com/office/spreadsheetml/2016/revision3",markupCompatibility:"http://schemas.openxmlformats.org/markup-compatibility/2006"},kE="http://schemas.openxmlformats.org/drawingml/2006/main",VE="http://schemas.openxmlformats.org/drawingml/2006/chart",UE={workbook:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",sheet:"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml",sharedStrings:"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml",styles:"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml",drawing:"application/vnd.openxmlformats-officedocument.drawing+xml",chart:"application/vnd.openxmlformats-officedocument.drawingml.chart+xml",themes:"application/vnd.openxmlformats-officedocument.theme+xml",table:"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml",pivot:"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml",externalLink:"application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml"},BE={document:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",sheet:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet",sharedStrings:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings",styles:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles",drawing:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing",chart:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart",theme:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme",table:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/table",hyperlink:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink",image:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"},HE="http://schemas.openxmlformats.org/officeDocument/2006/relationships",zE=.75,GE=.143,$E=8.43,WE=12.75,qE=30,ZE=100,YE=164,jE={FLOOR:[{type:"NUMBER",value:1}],CEILING:[{type:"NUMBER",value:1}],ROUND:[{type:"NUMBER",value:0}],ROUNDUP:[{type:"NUMBER",value:0}],ROUNDDOWN:[{type:"NUMBER",value:0}]},XE=["ACOT","ACOTH","AGGREGATE","ARABIC","BASE","BETA.DIST","BETA.INV","BINOM.DIST","BINOM.DIST.RANGE","BINOM.INV","BITAND","BITLSHIFT","BITOR","BITRSHIFT","BITXOR","CEILING.MATH","CEILING.PRECISE","CHISQ.DIST","CHISQ.DIST.RT","CHISQ.INV","CHISQ.INV.RT","CHISQ.TEST","COMBINA","CONCAT","CONFIDENCE.NORM","CONFIDENCE.T","COT","COTH","COVARIANCE.P","COVARIANCE.S","CSC","CSCH","DAYS","DECIMAL","ERF.PRECISE","ERFC.PRECISE","EXPON.DIST","F.DIST","F.DIST.RT","F.INV","F.INV.RT","F.TEST","FILTERXML","FLOOR.MATH","FLOOR.PRECISE","FORECAST.ETS","FORECAST.ETS.CONFINT","FORECAST.ETS.SEASONALITY","FORECAST.ETS.STAT","FORECAST.LINEAR","FORMULATEXT","GAMMA","GAMMA.DIST","GAMMA.INV","GAMMALN.PRECISE","GAUSS","HYPGEOM.DIST","IFNA","IFS","IMCOSH","IMCOT","IMCSC","IMCSCH","IMSEC","IMSECH","IMSINH","IMTAN","ISFORMULA","ISOWEEKNUM","LOGNORM.DIST","LOGNORM.INV","MAXIFS","MINIFS","MODE.MULT","MODE.SNGL","MUNIT","NEGBINOM.DIST","NORM.DIST","NORM.INV","NORM.S.DIST","NORM.S.INV","NUMBERVALUE","PDURATION","PERCENTILE.EXC","PERCENTILE.INC","PERCENTRANK.EXC","PERCENTRANK.INC","PERMUTATIONA","PHI","POISSON.DIST","QUARTILE.EXC","QUARTILE.INC","QUERYSTRING","RANK.AVG","RANK.EQ","RRI","SEC","SECH","SHEET","SHEETS","SKEW.P","STDEV.P","STDEV.S","SWITCH","T.DIST","T.DIST.2T","T.DIST.RT","T.INV","T.INV.2T","T.TEST","TEXTJOIN","UNICHAR","UNICODE","VAR.P","VAR.S","WEBSERVICE","WEIBULL.DIST","XOR","Z.TEST"],KE="[Content_Types].xml";var QE;!function(e){e.DiagonalBorderNotSupported="Diagonal Borders",e.BorderStyleNotSupported="Border style",e.FillStyleNotSupported="Fill Style",e.FontNotSupported="Font",e.HorizontalAlignmentNotSupported="Horizontal Alignment",e.VerticalAlignmentNotSupported="Vertical Alignments",e.MultipleRulesCfNotSupported="Multiple rules conditional formats",e.CfTypeNotSupported="Conditional format type",e.CfFormatBorderNotSupported="Borders in conditional formats",e.CfFormatAlignmentNotSupported="Alignment in conditional formats",e.CfFormatNumFmtNotSupported="Num formats in conditional formats",e.CfIconSetEmptyIconNotSupported="IconSets with empty icons",e.BadlyFormattedHyperlink="Badly formatted hyperlink",e.NumFmtIdNotSupported="Number format"}(QE||(QE={}));class JE{_parsingWarnings=new Set;_conversionWarnings=new Set;addParsingWarning(e){this._parsingWarnings.add(e)}addConversionWarning(e){this._conversionWarnings.add(e)}get warnings(){return[...this._parsingWarnings,...this._conversionWarnings]}generateNotSupportedWarning(e,t,o){let s=`${e} ${t?'"'+t+'" is':"are"} not yet supported. `;o&&(s+=`Only ${o.join(", ")} are currently supported.`),this._conversionWarnings.has(s)||this._conversionWarnings.add(s)}}const ew=["thin"],tw=["general","left","center","right"],ow=["top","center","bottom"],sw=["Arial"],nw=["solid"],iw=["expression","cellIs","colorScale","iconSet","containsText","notContainsText","beginsWith","endsWith","containsBlanks","notContainsBlanks"],rw={b:"boolean",d:"date",e:"error",inlineStr:"inlineStr",n:"number",s:"sharedString",str:"str"},aw={dashDot:"thin",dashDotDot:"thin",dashed:"dashed",dotted:"dotted",double:"thin",hair:"thin",medium:"medium",mediumDashDot:"thin",mediumDashDotDot:"thin",mediumDashed:"thin",none:void 0,slantDashDot:"thin",thick:"thick",thin:"thin"},lw={general:void 0,left:"left",center:"center",right:"right",fill:"left",justify:"left",centerContinuous:"center",distributed:"center"},cw={top:"top",center:"middle",bottom:"bottom",justify:"middle",distributed:"middle"},hw={top:"top",middle:"center",bottom:"bottom"};const dw={aboveAverage:void 0,expression:void 0,cellIs:void 0,colorScale:void 0,dataBar:void 0,iconSet:void 0,top10:void 0,uniqueValues:void 0,duplicateValues:void 0,containsText:"ContainsText",notContainsText:"NotContains",beginsWith:"BeginsWith",endsWith:"EndsWith",containsBlanks:"IsEmpty",notContainsBlanks:"IsNotEmpty",containsErrors:void 0,notContainsErrors:void 0,timePeriod:void 0},uw={num:"number",percent:"percentage",max:"value",min:"value",percentile:"percentile",formula:"formula"},gw={NoIcons:void 0,"3Arrows":"arrows","3ArrowsGray":"arrows","3Symbols":"smiley","3Symbols2":"smiley","3Signs":"dots","3Flags":"dots","3TrafficLights1":"dots","3TrafficLights2":"dots","4Arrows":"arrows","4ArrowsGray":"arrows","4RedToBlack":"dots","4Rating":"smiley","4TrafficLights":"dots","5Arrows":"arrows","5ArrowsGray":"arrows","5Rating":"smiley","5Quarters":"dots","3Stars":"smiley","3Triangles":"arrows","5Boxes":"dots"},pw={b:"bottom",t:"top",l:"left",r:"right",tr:"right"},mw={areaChart:void 0,area3DChart:void 0,lineChart:"line",line3DChart:void 0,stockChart:void 0,radarChart:void 0,scatterChart:void 0,pieChart:"pie",pie3DChart:void 0,doughnutChart:"pie",barChart:"bar",bar3DChart:void 0,ofPieChart:void 0,surfaceChart:void 0,surface3DChart:void 0,bubbleChart:void 0},fw={1:"AVERAGE",2:"COUNT",3:"COUNTA",4:"MAX",5:"MIN",6:"PRODUCT",7:"STDEV",8:"STDEVP",9:"SUM",10:"VAR",11:"VARP",101:"AVERAGE",102:"COUNT",103:"COUNTA",104:"MAX",105:"MIN",106:"PRODUCT",107:"STDEV",108:"STDEVP",109:"SUM",110:"VAR",111:"VARP"},vw={0:"",1:"0",2:"0.00",3:"#,#00",4:"#,##0.00",9:"0%",10:"0.00%",11:void 0,12:void 0,13:void 0,14:"m/d/yyyy",15:"m/d/yyyy",16:"m/d/yyyy",17:"m/d/yyyy",18:"hh:mm:ss a",19:"hh:mm:ss a",20:"hhhh:mm:ss",21:"hhhh:mm:ss",22:"m/d/yy h:mm",37:void 0,38:void 0,39:void 0,40:void 0,45:"hhhh:mm:ss",46:"hhhh:mm:ss",47:"hhhh:mm:ss",48:void 0,49:lo},bw={0:1,"0.00":2,"#,#00":3,"#,##0.00":4,"0%":9,"0.00%":10,"0.00E+00":11,"# ?/?":12,"# ??/??":13,"mm-dd-yy":14,"d-mm-yy":15,"mm-yy":16,"mmm-yy":17,"h:mm AM/PM":18,"h:mm:ss AM/PM":19,"h:mm":20,"h:mm:ss":21,"m/d/yy h:mm":22,"#,##0 ;(#,##0)":37,"#,##0 ;[Red](#,##0)":38,"#,##0.00;(#,##0.00)":39,"#,##0.00;[Red](#,##0.00)":40,"mm:ss":45,"[h]:mm:ss":46,"mmss.0":47,"##0.0E+0":48,"@":49,"hh:mm:ss a":19},Sw={0:"000000",1:"FFFFFF",2:"FF0000",3:"00FF00",4:"0000FF",5:"FFFF00",6:"FF00FF",7:"00FFFF",8:"000000",9:"FFFFFF",10:"FF0000",11:"00FF00",12:"0000FF",13:"FFFF00",14:"FF00FF",15:"00FFFF",16:"800000",17:"008000",18:"000080",19:"808000",20:"800080",21:"008080",22:"C0C0C0",23:"808080",24:"9999FF",25:"993366",26:"FFFFCC",27:"CCFFFF",28:"660066",29:"FF8080",30:"0066CC",31:"CCCCFF",32:"000080",33:"FF00FF",34:"FFFF00",35:"00FFFF",36:"800080",37:"800000",38:"008080",39:"0000FF",40:"00CCFF",41:"CCFFFF",42:"CCFFCC",43:"FFFF99",44:"99CCFF",45:"FF99CC",46:"CC99FF",47:"FFCC99",48:"3366FF",49:"33CCCC",50:"99CC00",51:"FFCC00",52:"FF9900",53:"FF6600",54:"666699",55:"969696",56:"003366",57:"339966",58:"003300",59:"333300",60:"993300",61:"993366",62:"333399",63:"333333",64:"000000",65:"FFFFFF"},Cw={"image/avif":"avif","image/bmp":"bmp","image/gif":"gif","image/vnd.microsoft.icon":"ico","image/jpeg":"jpeg","image/png":"png","image/tiff":"tiff","image/webp":"webp"},Ew={avif:"image/avif",bmp:"image/bmp",gif:"image/gif",ico:"image/vnd.microsoft.icon",jpeg:"image/jpeg",png:"image/png",tiff:"image/tiff",webp:"image/webp",jpg:"image/jpeg"};function ww(e){if(!e)return;let t;if(e.rgb)t=e.rgb;else if(e.auto)t=DE;else{if(!e.indexed)return;t=Sw[e.indexed]}var o;return t=6===(o=t).length?"#"+o+"FF":"#"+o.slice(2)+o.slice(0,2),e.tint&&(t=function(e,t){const o=tt(e),s=st(o);t<0&&(s.l=s.l*(1+t));t>0&&(s.l=s.l*(1-t)+(100-100*(1-t)));return et(ot(s))}(t,e.tint)),t=t.toUpperCase(),9===t.length&&t.endsWith("FF")&&(t=t.slice(0,7)),t}function yw(e,t){const o=e.split("/"),s=t.split("/");let n="",i=0;for(let e=0;e<o.length-1;e++)o[e]===s[e]?i++:n+="../";return n+=s.slice(i).join("/"),n}function xw(e,t=0){const o={};for(let s=0;s<e.length;s++)e[s]&&(o[s+t]=e[s]);return o}function Iw(e){const t=[];for(let o of Object.keys(e).map(Number))t[o]=e[o];return t}function Rw(e){return e.replace(/_x([0-9a-zA-Z]{4})_/g,((e,t)=>String.fromCharCode(parseInt(t,16))))}const Tw=/^(yy|yyyy|m{1,5}|d{1,4}|h{1,2}|s{1,2}|am\/pm|a\/m|\s|-|\/|\.|:)+$/i;function Aw(e,t,o){if(0===e)return;let s=vw[e]||t.find((t=>t.id===e))?.format;if(s)try{let e=s.replace(/(.*?);.*/,"$1");e=e.replace(/\[(.*)-[A-Z0-9]{3}\]/g,"[$1]"),e=e.replace(/\[\$\]/g,"");const t=e.match(/"/g)?.length||0;if(t/2+(e.match(/\[/g)?.length||0)>1)throw new Error("Multiple escaped blocks in format");if(e=e.replace(/"(.*)"/g,"[$$$1]"),e=e.replace(/_.{1}/g,""),e=e.replace(/\*.{1}/g,""),e=e.replace(/\\ /g," "),e=e.replace(/\\./g,(e=>e[1])),function(e){return Tw.test(e)}(e)&&(e=function(e){return e=e.toLowerCase(),e=e.replace(/mmmmm/g,"mmm"),e=e.replace(/am\/pm|a\/m/g,"a"),e=e.replace(/hhhh/g,"hh"),e=e.replace(/\bh\b/g,"hh"),e}(e)),function(e){try{return Ss(0,{format:e,locale:ho}),!0}catch(e){return!1}}(e))return e}catch(e){}o.generateNotSupportedWarning(QE.NumFmtIdNotSupported,s||`nmFmtId ${e}`)}function Ow(e,t){const o=e.borders.map((e=>{!function(e,t){e.diagonal&&t.generateNotSupportedWarning(QE.DiagonalBorderNotSupported)}(e,t);const o={top:_w(e.top,t),bottom:_w(e.bottom,t),left:_w(e.left,t),right:_w(e.right,t)};return Object.keys(o).forEach((e=>void 0===o[e]&&delete o[e])),o}));return xw(o,1)}function _w(e,t){if(!e)return;!function(e,t){ew.includes(e.style)||t.generateNotSupportedWarning(QE.BorderStyleNotSupported,e.style,ew)}(e,t);const o=aw[e.style];return o?{style:o,color:ww(e.color)}:void 0}function Mw(e,t){return xw(e.styles.map((o=>Nw({fontStyle:e.fonts[o.fontId],fillStyle:e.fills[o.fillId],alignment:o.alignment},t))),1)}function Nw(e,t){return function(e,t,o){e&&e.name&&!sw.includes(e.name)&&o.generateNotSupportedWarning(QE.FontNotSupported,e.name,sw);t&&t.patternType&&!nw.includes(t.patternType)&&o.generateNotSupportedWarning(QE.FillStyleNotSupported,t.patternType,nw)}(e?.fontStyle,e?.fillStyle,t),function(e,t){e&&!tw.includes(e)&&t.generateNotSupportedWarning(QE.HorizontalAlignmentNotSupported,e,tw)}(e?.alignment?.horizontal,t),function(e,t){e&&!ow.includes(e)&&t.generateNotSupportedWarning(QE.VerticalAlignmentNotSupported,e,ow)}(e?.alignment?.vertical,t),{bold:e.fontStyle?.bold,italic:e.fontStyle?.italic,strikethrough:e.fontStyle?.strike,underline:e.fontStyle?.underline,verticalAlign:e.alignment?.vertical?cw[e.alignment.vertical]:void 0,align:e.alignment?.horizontal?lw[e.alignment.horizontal]:void 0,fillColor:"solid"===e.fillStyle?.patternType?ww(e.fillStyle?.fgColor):ww(e.fillStyle?.bgColor),textColor:ww(e.fontStyle?.color),fontSize:e.fontStyle?.size,wrapping:e.alignment?.wrapText?"wrap":"overflow"}}function Fw(e,t){const o=[];for(let s of e.styles){const n=Aw(s.numFmtId,e.numFmts,t);n&&(o[s.numFmtId]=n)}return xw(o,1)}function Dw(e,t,o){const s=[];let n=1;for(let r of e){if(0===r.cfRules.length)continue;Vw(r,t,o);const e=r.cfRules[0];let a;const l=[];if(void 0!==e.dxfId||"colorScale"===e.type||"iconSet"===e.type){switch(e.type){case"aboveAverage":case"containsErrors":case"notContainsErrors":case"dataBar":case"duplicateValues":case"expression":case"top10":case"uniqueValues":case"timePeriod":continue;case"colorScale":const t=Lw(n++,r);t&&s.push(t);continue;case"iconSet":const c=Pw(n++,r,o);c&&s.push(c);continue;case"containsText":case"notContainsText":case"beginsWith":case"endsWith":if(!e.text)continue;a=dw[e.type],l.push(e.text);break;case"containsBlanks":case"notContainsBlanks":a=dw[e.type];break;case"cellIs":if(!e.operator||!e.formula||0===e.formula.length)continue;a=(i=e.operator).slice(0,1).toUpperCase()+i.slice(1),l.push(e.formula[0]),2===e.formula.length&&l.push(e.formula[1])}a&&void 0!==e.dxfId&&s.push({id:(n++).toString(),ranges:r.sqref,stopIfTrue:e.stopIfTrue,rule:{type:"CellIsRule",operator:a,values:l,style:Nw({fontStyle:t[e.dxfId].font,fillStyle:t[e.dxfId].fill},o)}})}}var i;return s}function Lw(e,t){const o=t.cfRules[0].colorScale;if(!o||o.cfvos.length!==o.colors.length||o.cfvos.length<2||o.cfvos.length>3)return;const s=[];for(let e=0;e<o.cfvos.length;e++)s.push({color:(n=ww(o.colors[e])||"#FFFFFF",9===n.length&&(n=n.slice(0,7)),parseInt(n.replace("#",""),16)),type:uw[o.cfvos[e].type],value:o.cfvos[e].value});var n;const i=s[0],r=2===s.length?s[1]:s[2],a=3===s.length?s[1]:void 0;return{id:e.toString(),stopIfTrue:t.cfRules[0].stopIfTrue,ranges:t.sqref,rule:{type:"ColorScaleRule",minimum:i,midpoint:a,maximum:r}}}function Pw(e,t,o){const s=t.cfRules[0].iconSet;if(!s)return;let n=s.cfvos,i=s.cfIcons;if(n.length<3||i&&i.length<3)return;n.length>3&&(n=[n[0],n[Math.floor(n.length/2)],n[n.length-1]]),i&&i.length>3&&(i=[i[0],i[Math.floor(i.length/2)],i[i.length-1]]);const r=[];for(let e=1;e<=2;e++){const t=uw[n[e].type];if("value"===t)return;r.push({value:n[e].value||"",operator:n[e].gte?"ge":"gt",type:t})}let a={lower:i?kw(i[0].iconSet,i[0].iconId):kw(s.iconSet,0),middle:i?kw(i[1].iconSet,i[1].iconId):kw(s.iconSet,1),upper:i?kw(i[2].iconSet,i[2].iconId):kw(s.iconSet,2)};s.reverse&&(a={upper:a.lower,middle:a.middle,lower:a.upper});for(let e of Object.keys(a))if(!a[e])switch(o.generateNotSupportedWarning(QE.CfIconSetEmptyIconNotSupported),e){case"upper":a[e]=GS.dots.good;break;case"middle":a[e]=GS.dots.neutral;break;case"lower":a[e]=GS.dots.bad}return{id:e.toString(),stopIfTrue:t.cfRules[0].stopIfTrue,ranges:t.sqref,rule:{type:"IconSetRule",icons:a,upperInflectionPoint:r[1],lowerInflectionPoint:r[0]}}}function kw(e,t){const o=gw[e];return o?0===t?GS[o].bad:1===t?GS[o].neutral:GS[o].good:""}function Vw(e,t,o){if(e.cfRules.length>1&&o.generateNotSupportedWarning(QE.MultipleRulesCfNotSupported),iw.includes(e.cfRules[0].type)||o.generateNotSupportedWarning(QE.CfTypeNotSupported,e.cfRules[0].type),e.cfRules[0].dxfId){const s=t[e.cfRules[0].dxfId];s.border&&o.generateNotSupportedWarning(QE.CfFormatBorderNotSupported),s.alignment&&o.generateNotSupportedWarning(QE.CfFormatAlignmentNotSupported),s.numFmt&&o.generateNotSupportedWarning(QE.CfFormatNumFmtNotSupported)}}function Uw(e){switch(e){case"IsNotEmpty":case"NotContains":return"notContainsBlanks";case"IsEmpty":return"containsBlanks";default:return e.charAt(0).toLowerCase()+e.slice(1)}}function Bw(e){return Math.round(zE*e*100)/100}function Hw(e){return Math.round(GE*e*100)/100}function zw(e){if(e)return{style:e.style,color:{rgb:e.color}}}function Gw(e,t){let o={};e.style&&(o=t.styles[e.style]);const s=function(e,t){if(e.format)return t.formats[e.format];return}(e,t),n={};if(e.border){const o=t.borders[e.border];n.left=zw(o.left),n.right=zw(o.right),n.bottom=zw(o.bottom),n.top=zw(o.top)}const i={font:{size:o?.fontSize||B,color:{rgb:o?.textColor?o.textColor:"000000"},family:2,name:"Arial"},fill:o?.fillColor?{fgColor:{rgb:o.fillColor}}:{reservedAttribute:"none"},numFmt:s?{format:s,id:0}:void 0,border:n||{},alignment:{horizontal:o.align,vertical:o.verticalAlign?hw[o.verticalAlign]:void 0,wrapText:"wrap"===o.wrapping}};return i.font.strike=!!o?.strikethrough||void 0,i.font.underline=!!o?.underline||void 0,i.font.bold=!!o?.bold||void 0,i.font.italic=!!o?.italic||void 0,i}function $w(e,t){const{id:o}=qw(t.font,e.fonts),{id:s}=qw(t.fill,e.fills),{id:n}=qw(t.border,e.borders),i=function(e,t){if(!e)return 0;let o=bw[e.format];if(!o){const{id:s}=qw(e,t);o=s+YE}return o}(t.numFmt,e.numFmts),r={fontId:o,fillId:s,borderId:n,numFmtId:i,alignment:{vertical:t.alignment.vertical,horizontal:t.alignment.horizontal,wrapText:t.alignment.wrapText}},{id:a}=qw(r,e.styles);return a}function Ww(e,t,o){let s,n=e.find((e=>e.path===t));return n?(s=`rId${(n.rels.length+1).toString()}`,n.rels.push({...o,id:s})):(s="rId1",e.push({path:t,rels:[{...o,id:s}]})),s}function qw(e,t){for(let[o,s]of Object.entries(t))if(JSON.stringify(s)===JSON.stringify(e))return{id:parseInt(o,10),list:t};let o=t.findIndex((t=>JSON.stringify(t)===JSON.stringify(e)));return-1===o&&(t.push(e),o=t.length-1),{id:o,list:t}}const Zw=[];function Yw(e){const t=Zw.findIndex((t=>t===e));return-1===t?(Zw.push(e),Zw.length):t+1}const jw=[];function Xw(e){const t=jw.findIndex((t=>t===e));return-1===t?(jw.push(e),jw.length):t+1}function Kw(e){return Math.round(914400*e/96)}function Qw(e,t,o){let s,n,i=e;if(({xc:i,sheetName:s}=on(e)),s){const e=o.sheets.findIndex((e=>e.name===s));if(e<0)throw new Error("Unable to find a sheet with the name "+s);n=e}else n=Number(t);const r=nn(i);return void 0===r.right&&(r.right=o.sheets[n].colNumber),void 0===r.bottom&&(r.bottom=o.sheets[n].rowNumber),(r.right-r.left+1)*(r.bottom-r.top+1)}function Jw(e){return Math.round(96*e/914400)}function ey(e,t){let o=0;for(let s=0;s<e;s++){const e=t.cols.find((e=>s>=e.min&&s<=e.max));e?.width?o+=e.width:t.sheetFormat?.defaultColWidth?o+=t.sheetFormat.defaultColWidth:o+=$E}return o/GE}function ty(e,t){let o=0;for(let s=0;s<e;s++){const e=t.rows[s];e?.height?o+=e.height:t.sheetFormat?.defaultRowHeight?o+=t.sheetFormat.defaultRowHeight:o+=WE}return o/zE}function oy(e){let t=1;return e.figures.map((o=>function(e,t,o){let s,n,i,r;if(1===e.anchors.length)({x:s,y:n}=iy(e.anchors[0],o)),r=Jw(e.figureSize.cx),i=Jw(e.figureSize.cy);else{({x:s,y:n}=iy(e.anchors[0],o));const{x:t,y:a}=iy(e.anchors[1],o);r=t-s,i=a-n}const a={id:t,x:s,y:n};if("dataSets"in e.data)return{...a,width:r,height:i,tag:"chart",data:sy(e.data)};if(function(e){return"imageSrc"in e}(e.data))return{...a,width:Jw(e.data.size.cx),height:Jw(e.data.size.cy),tag:"image",data:{path:e.data.imageSrc,mimetype:e.data.mimetype}};return}(o,(t++).toString(),e))).filter(Ie)}function sy(e){const t=void 0!==e.dataSets[0].label,o=e.labelRange?ny(e.labelRange,t):void 0;let s=e.dataSets.map((e=>ny(e.range,t)));return"pie"===e.type&&s.reverse(),{dataSets:s,dataSetsHaveTitle:t,labelRange:o,title:e.title||"",type:e.type,background:ww({rgb:e.backgroundColor})||"#FFFFFF",verticalAxisPosition:e.verticalAxisPosition,legendPosition:e.legendPosition,stacked:e.stacked||!1,aggregated:!1,cumulative:e.cumulative||!1,labelsAsText:!1}}function ny(e,t){let{sheetName:o,xc:s}=on(e),n=nn(s);if(t&&void 0!==n.bottom&&void 0!==n.right){const e=n.bottom-n.top+1,t=n.right-n.left+1;1===e?n={...n,left:n.left-1}:1===t&&(n={...n,top:n.top-1})}return sn(o,cn(n))}function iy(e,t){return{x:ey(e.col,t)+Jw(e.colOffset),y:ty(e.row,t)+Jw(e.rowOffset)}}const ry=new RegExp(/'?\[([0-9]*)\](.*)'?!(\$?[a-zA-Z]*\$?[0-9]*)/g),ay=new RegExp(/SUBTOTAL\(([0-9]*),/g),ly=new RegExp($s.source,"ig");function cy(e,t){const o=function(e){const t={};for(let o of e.rows)for(let e of o.cells)e.formula&&void 0!==e.formula.sharedIndex&&e.formula.content&&(t[e.formula.sharedIndex]={refCellXc:e.xc,formula:e.formula.content});return t}(e);for(let s of e.rows.map((e=>e.cells)).flat())s?.formula&&(s.formula.content=void 0===s.formula.sharedIndex||s.formula.content?"="+s.formula.content:"="+dy(s.xc,o[s.formula.sharedIndex]),s.formula.content=hy(s.formula.content,t))}function hy(e,t){return e=(e=(e=(e=e.replace("_xlfn.","")).replace(/#REF!/g,"#REF")).replace(ay,((e,t)=>{const o=fw[t];return o?o+"(":e}))).replace(ry,((e,o,s,n)=>{o=Number(o)-1,n=n.replace(/\$/g,"");const i=t.externalBooks[o].sheetNames.findIndex((e=>e===s));if(-1===i)return e;const r=t.externalBooks[o].datasets.find((e=>e.sheetId===i))?.data;if(!r)return e;const a=r&&r[n];return(Number(a)?a:`"${a}"`)||e}))}function dy(e,t){const o=dt(t.refCellXc);let s,n=t.formula.slice();do{if(s=ly.exec(n),s){const t=dt(s[0].replace("$","")),i=dt(e),r={colFixed:s[0].startsWith("$"),rowFixed:s[0].includes("$",1)},a={col:i.col-o.col,row:i.row-o.row},l={col:r.colFixed?t.col:t.col+a.col,row:r.rowFixed?t.row:t.row+a.row};n=n.slice(0,s.index)+ut(l.col,l.row,r)+n.slice(s.index+s[0].length)}}while(s);return n}function uy(e,t){return e.sheets.map((o=>{cy(o,e);const s=function(e){const t=[0,0];for(let o of e.rows)t[0]=Math.max(t[0],...o.cells.map((e=>dt(e.xc).col))),t[1]=Math.max(t[1],o.index);return t[0]=Math.max(t[0],qE),t[1]=Math.max(t[1],ZE),t}(o),n=o.sheetViews[0];return{id:o.sheetName,areGridLinesVisible:!n||n.showGridLines,name:o.sheetName,colNumber:s[0],rowNumber:s[1],cells:my(o,e,s,t),merges:o.merges,cols:gy(o,s[0]),rows:py(o,s[1]),conditionalFormats:Dw(o.cfs,e.dxfs,t),figures:oy(o),isVisible:o.isVisible,panes:n?{xSplit:n.pane.xSplit,ySplit:n.pane.ySplit}:{xSplit:0,ySplit:0},filterTables:[]}}))}function gy(e,t){const o={};for(let n=1;n<t+1;n++){const t=e.cols.find((e=>e.min<=n&&n<=e.max));let i;i=t&&t.width?t.width:e.sheetFormat?.defaultColWidth?e.sheetFormat.defaultColWidth:$E,o[n-1]={size:(s=i,s?Math.round(s/GE*100)/100:s),isHidden:t?.hidden}}var s;return o}function py(e,t){const o={};for(let n=1;n<t+1;n++){const t=e.rows.find((e=>e.index===n));let i;i=t&&t.height?t.height:e.sheetFormat?.defaultRowHeight?e.sheetFormat.defaultRowHeight:WE,o[n-1]={size:(s=i,s?Math.round(s/zE*100)/100:s),isHidden:t?.hidden}}var s;return o}function my(e,t,o,s){const n={},i=t.sharedStrings.map((e=>e.replace(/\n/g,"")));const r=e.hyperlinks.reduce(((e,t)=>(e[t.xc]=t,e)),{});for(let o of e.rows)for(let e of o.cells)n[e.xc]={content:fy(e,r,i,s),style:e.styleIndex?e.styleIndex+1:void 0,border:e.styleIndex?t.styles[e.styleIndex].borderId+1:void 0,format:e.styleIndex?t.styles[e.styleIndex].numFmtId+1:void 0};for(let s of e.rows.filter((e=>e.styleIndex)))for(let e=1;e<=o[0];e++){const o=ut(e-1,s.index-1);let i=n[o];i||(i={},n[o]=i),i.style=i.style?i.style:s.styleIndex+1,i.border=i.border?i.border:t.styles[s.styleIndex].borderId+1,i.format=i.format?i.format:t.styles[s.styleIndex].numFmtId+1}for(let s of e.cols.filter((e=>e.styleIndex)))for(let e=s.min;e<=Math.min(s.max,o[0]);e++)for(let i=1;i<=o[1];i++){const o=ut(e-1,i-1);let r=n[o];r||(r={},n[o]=r),r.style=r.style?r.style:s.styleIndex+1,r.border=r.border?r.border:t.styles[s.styleIndex].borderId+1,r.format=r.format?r.format:t.styles[s.styleIndex].numFmtId+1}return n}function fy(e,t,o,s){let n;switch(e.type){case"sharedString":n=o[parseInt(e.value,10)];break;case"boolean":n=Number(e.value)?"TRUE":"FALSE";break;case"date":case"error":case"inlineStr":case"number":case"str":n=e.value}return n&&t[e.xc]&&(n=function(e,t,o){const s=e.display||t;e.relTarget||e.location||o.generateNotSupportedWarning(QE.BadlyFormattedHyperlink);const n=e.relTarget?e.relTarget:ye(on(e.location).sheetName);return Se(s,n)}(t[e.xc],n,s)),e.formula&&(n=e.formula.content),n}const vy={fillColor:"#000000",textColor:"#ffffff",bold:!0},by={bold:!0},Sy={style:"thin",color:"#000000FF"};function Cy(e,t){for(const o of t.sheets)for(const t of o.tables){const s=e.sheets.find((e=>e.name===o.sheetName));s&&t.autoFilter&&(s.filterTables||(s.filterTables=[]),s.filterTables.push({range:t.ref}))}!function(e,t){const o=Iw(e.styles),s=Iw(e.borders);for(let n of t.sheets)for(let t of n.tables){const i=e.sheets.find((e=>e.name===n.sheetName));if(!i)continue;const r=rn(t.ref);for(let e=0;e<t.headerRowCount;e++)Ey(vy,{...r,bottom:r.top+e},i.cells,o);for(let e=0;e<t.totalsRowCount;e++)Ey(by,{...r,top:r.bottom-e},i.cells,o);t.style?.showFirstColumn&&Ey(by,{...r,right:r.left},i.cells,o),t.style?.showLastColumn&&Ey(by,{...r,left:r.right},i.cells,o);for(let e=r.left;e<=r.right;e++)for(let o=r.top;o<=r.bottom;o++){const n=ut(e,o),a=i.cells[n],l={left:e===r.left||t.style?.showColumnStripes?Sy:void 0,right:e===r.right?Sy:void 0,top:o===r.top||t.style?.showRowStripes||o>r.bottom-t.totalsRowCount?Sy:void 0,bottom:o===r.bottom?Sy:void 0},c=a?.border?{...s[a.border],...l}:l;let h=s.findIndex((e=>Fe(e,c)));-1===h&&(h=s.length,s.push(c)),a?a.border=h:i.cells[n]={border:h}}}e.styles=xw(o),e.borders=xw(s)}(e,t),function(e,t){for(let o of e){const e=t.find((e=>e.sheetName===o.name)).tables;for(let t of e){const e=t.name+"[";for(let s of xn(rn(t.ref))){const n=ut(s.col,s.row),i=o.cells[n];if(i&&i.content&&i.content.startsWith("=")){let o;for(;-1!==(o=i.content.indexOf(e));){let s=i.content.slice(o+e.length),r=s.indexOf("]");s.startsWith("[")&&(r=s.indexOf("]",r+1),r=s.indexOf("]",r+1)),s=s.slice(0,r);const a=wy(s,t,n);i.content=i.content.slice(0,o)+a+i.content.slice(e.length+o+r+1)}}}}}}(e.sheets,t.sheets)}function Ey(e,t,o,s){for(let n=t.left;n<=t.right;n++)for(let i=t.top;i<=t.bottom;i++){const t=ut(n,i),r=o[t],a=r?.style?{...s[r.style],...e}:e;let l=s.findIndex((e=>Fe(e,a)));-1===l&&(l=s.length,s.push(a)),r?r.style=l:o[t]={style:l}}}function wy(e,t,o){const s=e.split(","),n=rn(t.ref),i={...n};let r=!0;if(1===s.length){const e=t.cols.findIndex((e=>e.name===s[0]));i.left=i.right=e+n.left,t.headerRowCount&&(i.top+=t.headerRowCount),t.totalsRowCount&&(i.bottom-=1)}else{switch(s[0].slice(1,s[0].length-1)){case"#All":i.top=t.headerRowCount?n.top+t.headerRowCount:n.top,i.bottom=n.bottom;break;case"#Data":i.top=t.headerRowCount?n.top+t.headerRowCount:n.top,i.bottom=t.totalsRowCount?n.bottom+1:n.bottom;break;case"#This Row":i.top=i.bottom=dt(o).row;break;case"#Headers":i.top=i.bottom=n.top,t.headerRowCount||(r=!1);break;case"#Totals":i.top=i.bottom=n.bottom,t.totalsRowCount||(r=!1)}const e=s[1].slice(1,s[1].length-1),a=t.cols.findIndex((t=>t.name===e));i.left=i.right=a+n.left}return r?i.top!==i.bottom?cn(i):ut(i.left,i.top):fo.InvalidReference}function yy(e,t,o){return{content:(new XMLSerializer).serializeToString(e),path:t,contentType:o}}function xy(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 Iy(e){return new NE(e.map((([e,t])=>`${e}="${xy(t)}"`)).join(" "))}function Ry(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),n=e.toString().trim().split("\n"),i=n.slice(Math.max(o-3,0),Math.min(o+2,n.length)).join("\n");throw new Error(`XML string could not be parsed: ${t}\n${i}`)}return o}function Ty(e,t){return Oy`
1447
1447
  <Override ContentType="${t}" PartName="${e}" />
1448
- `}function Ay(e){return new NE(e.join("\n"))}function Oy(e,...t){let o=[e[0]];for(let s=0;s<t.length;s++){const n=t[s]instanceof NE?t[s]:xy(t[s]);o.push(n+e[s+1])}return new NE(Oe(o))}function _y(e){return e.replace(/NAMESPACE.*NAMESPACE(.*)/,"$1")}function My(e){return e.replaceAll(/([a-zA-Z0-9]+):([a-zA-Z0-9]+)/g,"NAMESPACE$1NAMESPACE$2")}class Ny{value;constructor(e){this.value=e}asString(){return Rw(String(this.value))}asBool(){return"true"===this.value||"false"!==this.value&&Boolean(Number(this.value))}asNum(){return Number(this.value)}}class Fy{rootFile;xlsxFileStructure;warningManager;relationships;currentFile=void 0;constructor(e,t,o){this.rootFile=e,this.currentFile=e.file.fileName,this.xlsxFileStructure=t,this.warningManager=o,this.relationships={},e.rels&&this.extractRelationships(e.rels).map((e=>{this.relationships[e.id]=e}))}extractRelationships(e){return this.mapOnElements({parent:e.xml,query:"Relationship"},(e=>({id:this.extractAttr(e,"Id",{required:!0}).asString(),target:this.extractAttr(e,"Target",{required:!0}).asString(),type:this.extractAttr(e,"Type",{required:!0}).asString()})))}getListOfXMLFiles(){return Object.entries(this.xlsxFileStructure).filter((([e])=>"images"!==e)).map((([e,t])=>t)).flat().filter(Ie)}mapOnElements(e,t){const o=[],s=this.currentFile;let n;if(e.children){const t=this.querySelector(e.parent,e.query)?.children;n=t||[]}else n=this.querySelectorAll(e.parent,e.query);if(n)for(let e of n)try{o.push(t(e))}catch(t){this.catchErrorOnElement(t,e)}return this.currentFile=s,o}catchErrorOnElement(e,t){const o=t?`Error when parsing an element <${t.tagName}> of file ${this.currentFile}, skip this element. \n${e.stack}`:`Error when parsing file ${this.currentFile}.`;this.warningManager.addParsingWarning([o,e.message].join("\n"))}extractAttr(e,t,o){const s=e.attributes[t];s||this.handleMissingValue(e,`attribute "${t}"`,o);const n=s?.value?s.value:o?.default;return void 0===n?void 0:new Ny(n)}extractTextContent(e,t){if(void 0!==t?.default&&"string"!=typeof t.default)throw new Error("extractTextContent default value should be a string");const o="preserve"===e?.attributes["xml:space"]?.value;let s=e?.textContent;return e&&null!==s||this.handleMissingValue(e,"text content",t),s&&(s=o?s:s.trim()),s?Rw(s):t?.default}extractChildAttr(e,t,o,s){let n;n="number"==typeof t?e.children[t]:this.querySelector(e,t),n||this.handleMissingValue(e,"number"==typeof t?`child at index ${t}`:`child <${t}>`,s);const i=n?this.extractAttr(n,o,s)?.asString():s?.default;return void 0!==i?new Ny(i):void 0}extractChildTextContent(e,t,o){if(void 0!==o?.default&&"string"!=typeof o.default)throw new Error("extractTextContent default value should be a string");let s=this.querySelector(e,t);return s||this.handleMissingValue(e,`child <${t}>`,o),s?this.extractTextContent(s,o):o?.default}handleMissingValue(e,t,o){if(o?.required){if(!o?.default)throw new Error(`Missing required ${t} in element <${e.tagName}> of ${this.currentFile}, and no default value was set`);this.warningManager.addParsingWarning(`Missing required ${t} in element <${e.tagName}> of ${this.currentFile}, replacing it by the default value ${o.default}`)}}extractColor(e,t,o){if(!e)return o?{rgb:o}:void 0;const s=this.extractAttr(e,"theme")?.asString();let n;if(void 0!==s){if(!t||!t.clrScheme)throw new Error("Color referencing a theme but no theme was provided");n=this.getThemeColor(s,t.clrScheme)}else n=this.extractAttr(e,"rgb")?.asString();return{rgb:n,auto:this.extractAttr(e,"auto")?.asBool(),indexed:this.extractAttr(e,"indexed")?.asNum(),tint:this.extractAttr(e,"tint")?.asNum()}}getTargetXmlFile(e){if(!e)throw new Error("Undefined target file");const t=this.processRelationshipTargetName(e.target),o=this.getListOfXMLFiles().find((e=>e.file.fileName.endsWith(t)));if(!o||!o.file)throw new Error("Cannot find target file");return o}getTargetImageFile(e){if(!e)throw new Error("Undefined target file");const t=this.processRelationshipTargetName(e.target),o=this.xlsxFileStructure.images.find((e=>e.fileName.endsWith(t)));if(!o)throw new Error("Cannot find target file");return o}querySelector(e,t){const o=My(t);return e.querySelector(o)}querySelectorAll(e,t){const o=My(t);return e.querySelectorAll(o)}getThemeColor(e,t){switch(e){case"0":return"FFFFFF";case"1":return"000000";case"2":return t[3].value;case"3":return t[2].value;default:return t[e].value}}processRelationshipTargetName(e){return e.replace(/\.+\//,"")}}class Dy extends Fy{getTheme(){return{clrScheme:this.mapOnElements({query:"a:clrScheme",parent:this.rootFile.file.xml,children:!0},(e=>({name:e.tagName,value:this.extractChildAttr(e,0,"val",{required:!0,default:DE}).asString(),lastClr:this.extractChildAttr(e,0,"lastClr",{default:DE}).asString()})))}}getSharedStrings(){return this.mapOnElements({parent:this.rootFile.file.xml,query:"si"},(e=>"t"===e.children[0].tagName?this.extractTextContent(e)||"":this.mapOnElements({parent:e,query:"t"},(e=>this.extractTextContent(e)||"")).join("")))}}class Ly extends Fy{theme;constructor(e,t,o,s){super(e,t,o),this.theme=s}extractConditionalFormattings(){const e=this.mapOnElements({parent:this.rootFile.file.xml,query:"worksheet > conditionalFormatting"},(e=>({sqref:this.extractAttr(e,"sqref",{required:!0}).asString().split(" "),pivot:this.extractAttr(e,"pivot")?.asBool(),cfRules:this.extractCFRules(e,this.theme)})));return e.push(...this.mapOnElements({parent:this.rootFile.file.xml,query:"extLst x14:conditionalFormatting"},(e=>({sqref:this.extractChildTextContent(e,"xm:sqref",{required:!0}).split(" "),pivot:this.extractAttr(e,"xm:pivot")?.asBool(),cfRules:this.extractCFRules(e,this.theme)})))),e}extractCFRules(e,t){return this.mapOnElements({parent:e,query:"cfRule, x14:cfRule"},(e=>{const o=this.extractAttr(e,"type",{required:!0}).asString();if("dataBar"===o)throw new Error("Databars conditional formats are not supported.");return{type:o,priority:this.extractAttr(e,"priority",{required:!0}).asNum(),colorScale:this.extractCfColorScale(e,t),formula:this.extractCfFormula(e),iconSet:this.extractCfIconSet(e),dxfId:this.extractAttr(e,"dxfId")?.asNum(),stopIfTrue:this.extractAttr(e,"stopIfTrue")?.asBool(),aboveAverage:this.extractAttr(e,"aboveAverage")?.asBool(),percent:this.extractAttr(e,"percent")?.asBool(),bottom:this.extractAttr(e,"bottom")?.asBool(),operator:this.extractAttr(e,"operator")?.asString(),text:this.extractAttr(e,"text")?.asString(),timePeriod:this.extractAttr(e,"timePeriod")?.asString(),rank:this.extractAttr(e,"rank")?.asNum(),stdDev:this.extractAttr(e,"stdDev")?.asNum(),equalAverage:this.extractAttr(e,"equalAverage")?.asBool()}}))}extractCfFormula(e){return this.mapOnElements({parent:e,query:"formula"},(e=>this.extractTextContent(e,{required:!0})))}extractCfColorScale(e,t){const o=this.querySelector(e,"colorScale");if(o)return{colors:this.mapOnElements({parent:o,query:"color"},(e=>this.extractColor(e,t,"ffffff"))),cfvos:this.extractCFVos(o)}}extractCfIconSet(e){const t=this.querySelector(e,"iconSet, x14:iconSet");if(t)return{iconSet:this.extractAttr(t,"iconSet",{default:"3TrafficLights1"}).asString(),showValue:this.extractAttr(t,"showValue",{default:!0}).asBool(),percent:this.extractAttr(t,"percent",{default:!0}).asBool(),reverse:this.extractAttr(t,"reverse")?.asBool(),custom:this.extractAttr(t,"custom")?.asBool(),cfvos:this.extractCFVos(t),cfIcons:this.extractCfIcons(t)}}extractCfIcons(e){const t=this.mapOnElements({parent:e,query:"cfIcon, x14:cfIcon"},(e=>({iconSet:this.extractAttr(e,"iconSet",{required:!0}).asString(),iconId:this.extractAttr(e,"iconId",{required:!0}).asNum()})));return 0===t.length?void 0:t}extractCFVos(e){return this.mapOnElements({parent:e,query:"cfvo, x14:cfvo"},(e=>({type:this.extractAttr(e,"type",{required:!0}).asString(),gte:this.extractAttr(e,"gte",{default:!0})?.asBool(),value:e.attributes.val?this.extractAttr(e,"val")?.asString():this.extractChildTextContent(e,"f, xm:f")})))}}class Py extends Fy{extractChart(){return this.mapOnElements({parent:this.rootFile.file.xml,query:"c:chartSpace"},(e=>{const t=this.getChartType(e);if(!mw[t])throw new Error(`Unsupported chart type ${t}`);const o=this.mapOnElements({parent:e,query:"c:title a:t"},(e=>e.textContent||"")).join(""),s=this.extractChildAttr(e,"c:grouping","val",{default:"clustered"}).asString();return{title:o,type:mw[t],dataSets:this.extractChartDatasets(this.querySelector(e,`c:${t}`)),labelRange:this.extractChildTextContent(e,"c:ser c:cat c:f"),backgroundColor:this.extractChildAttr(e,"c:chartSpace > c:spPr a:srgbClr","val",{default:"ffffff"}).asString(),verticalAxisPosition:"r"===this.extractChildAttr(e,"c:valAx > c:axPos","val",{default:"l"}).asString()?"right":"left",legendPosition:pw[this.extractChildAttr(e,"c:legendPos","val",{default:"b"}).asString()],stacked:"stacked"===s,fontColor:"000000"}}))[0]}extractChartDatasets(e){return this.mapOnElements({parent:e,query:"c:ser"},(e=>({label:this.extractChildTextContent(e,"c:tx c:f"),range:this.extractChildTextContent(e,"c:val c:f",{required:!0})})))}getChartType(e){const t=this.querySelector(e,"c:plotArea");if(!t)throw new Error("Missing plot area in the chart definition.");for(let e of t.children){const t=_y(e.tagName);if(FE.some((e=>e===t)))return t}throw new Error("Unknown chart type")}}const ky="oneCellAnchor",Vy="twoCellAnchor";class Uy extends Fy{extractFigures(){return this.mapOnElements({parent:this.rootFile.file.xml,query:"xdr:wsDr",children:!0},(e=>{const t=_y(e.tagName),o=this.extractFigureAnchorsByType(e,t),s=this.querySelector(e,"c:chart"),n=this.querySelector(e,"a:blip");if(!s&&!n)throw new Error("Only chart and image figures are currently supported.");return{anchors:o,data:s?this.extractChart(s):this.extractImage(e),figureSize:t===ky?this.extractFigureSizeFromSizeTag(e,"xdr:ext"):void 0}}))}extractFigureAnchorsByType(e,t){switch(t){case ky:return[this.extractFigureAnchor("xdr:from",e)];case Vy:return[this.extractFigureAnchor("xdr:from",e),this.extractFigureAnchor("xdr:to",e)];default:throw new Error(`${t} is not supported for xlsx drawings. `)}}extractFigureSizeFromSizeTag(e,t){const o=this.querySelector(e,t);if(!o)throw new Error(`Missing size element '${t}'`);return{cx:this.extractAttr(o,"cx",{required:!0}).asNum(),cy:this.extractAttr(o,"cy",{required:!0}).asNum()}}extractFigureAnchor(e,t){const o=this.querySelector(t,e);if(!o)throw new Error(`Missing anchor element ${e}`);return{col:Number(this.extractChildTextContent(o,"xdr:col",{required:!0})),colOffset:Number(this.extractChildTextContent(o,"xdr:colOff",{required:!0})),row:Number(this.extractChildTextContent(o,"xdr:row",{required:!0})),rowOffset:Number(this.extractChildTextContent(o,"xdr:rowOff",{required:!0}))}}extractChart(e){const t=this.extractAttr(e,"r:id",{required:!0}).asString(),o=this.getTargetXmlFile(this.relationships[t]),s=new Py(o,this.xlsxFileStructure,this.warningManager).extractChart();if(!s)throw new Error("Unable to extract chart definition");return s}extractImage(e){const t=this.querySelector(e,"a:blip"),o=this.extractAttr(t,"r:embed",{required:!0}).asString(),s=this.getTargetImageFile(this.relationships[o]);if(!s)throw new Error("Unable to extract image");const n=s.fileName.split(".").at(-1),i=_y(e.tagName),r=i===Vy?this.querySelector(e,"a:xfrm"):e,a=i===Vy?"a:ext":"xdr:ext",l=this.extractFigureSizeFromSizeTag(r,a);return{imageSrc:s.imageSrc,mimetype:n?Ew[n]:void 0,size:l}}}class By extends Fy{getPivotTable(){return this.mapOnElements({query:":root",parent:this.rootFile.file.xml},(e=>({displayName:this.extractAttr(e,"name",{required:!0}).asString(),id:this.extractAttr(e,"name",{required:!0}).asString(),ref:this.extractChildAttr(e,"location","ref",{required:!0}).asString(),headerRowCount:this.extractChildAttr(e,"location","firstDataRow",{default:0}).asNum(),totalsRowCount:1,cols:[],style:{showFirstColumn:!0,showRowStripes:!0}})))[0]}}class Hy extends Fy{getTable(){return this.mapOnElements({query:"table",parent:this.rootFile.file.xml},(e=>({displayName:this.extractAttr(e,"displayName",{required:!0}).asString(),name:this.extractAttr(e,"name")?.asString(),id:this.extractAttr(e,"id",{required:!0}).asString(),ref:this.extractAttr(e,"ref",{required:!0}).asString(),headerRowCount:this.extractAttr(e,"headerRowCount",{default:1}).asNum(),totalsRowCount:this.extractAttr(e,"totalsRowCount",{default:0}).asNum(),cols:this.extractTableCols(e),style:this.extractTableStyleInfo(e),autoFilter:this.extractTableAutoFilter(e)})))[0]}extractTableCols(e){return this.mapOnElements({query:"tableColumn",parent:e},(e=>({id:this.extractAttr(e,"id",{required:!0}).asString(),name:this.extractAttr(e,"name",{required:!0}).asString(),colFormula:this.extractChildTextContent(e,"calculatedColumnFormula")})))}extractTableStyleInfo(e){return this.mapOnElements({query:"tableStyleInfo",parent:e},(e=>({name:this.extractAttr(e,"name")?.asString(),showFirstColumn:this.extractAttr(e,"showFirstColumn")?.asBool(),showLastColumn:this.extractAttr(e,"showLastColumn")?.asBool(),showRowStripes:this.extractAttr(e,"showRowStripes")?.asBool(),showColumnStripes:this.extractAttr(e,"showColumnStripes")?.asBool()})))[0]}extractTableAutoFilter(e){return this.mapOnElements({query:"autoFilter",parent:e},(e=>({columns:this.extractFilterColumns(e),zone:this.extractAttr(e,"ref",{required:!0}).asString()})))[0]}extractFilterColumns(e){return this.mapOnElements({query:"tableColumn",parent:e},(t=>({colId:this.extractAttr(e,"colId",{required:!0}).asNum(),hiddenButton:this.extractAttr(e,"hiddenButton",{default:!1}).asBool(),filters:this.extractSimpleFilter(t)})))}extractSimpleFilter(e){return this.mapOnElements({query:"filter",parent:e},(e=>({val:this.extractAttr(e,"val",{required:!0}).asString()})))}}class zy extends Fy{theme;constructor(e,t,o,s){super(e,t,o),this.theme=s}getSheet(){return this.mapOnElements({query:"worksheet",parent:this.rootFile.file.xml},(e=>{const t=this.getSheetWorkbookInfo();return{sheetName:this.extractSheetName(),sheetViews:this.extractSheetViews(e),sheetFormat:this.extractSheetFormat(e),cols:this.extractCols(e),rows:this.extractRows(e),sharedFormulas:this.extractSharedFormulas(e),merges:this.extractMerges(e),cfs:this.extractConditionalFormats(),figures:this.extractFigures(e),hyperlinks:this.extractHyperLinks(e),tables:[...this.extractTables(e),...this.extractPivotTables()],isVisible:"visible"===t.state}}))[0]}extractSheetViews(e){return this.mapOnElements({parent:e,query:"sheetView"},(e=>{const t=this.querySelector(e,"pane");return{tabSelected:this.extractAttr(e,"tabSelected",{default:!1}).asBool(),showFormulas:this.extractAttr(e,"showFormulas",{default:!1}).asBool(),showGridLines:this.extractAttr(e,"showGridLines",{default:!0}).asBool(),showRowColHeaders:this.extractAttr(e,"showRowColHeaders",{default:!0}).asBool(),pane:{xSplit:t?this.extractAttr(t,"xSplit",{default:0}).asNum():0,ySplit:t?this.extractAttr(t,"ySplit",{default:0}).asNum():0}}}))}extractSheetName(){const e=yw(this.xlsxFileStructure.workbook.file.fileName,this.rootFile.file.fileName),t=this.extractRelationships(this.xlsxFileStructure.workbook.rels).find((t=>t.target===e)).id;for(let e of this.querySelectorAll(this.xlsxFileStructure.workbook.file.xml,"sheet"))if(e.attributes["r:id"].value===t)return e.attributes.name.value;throw new Error("Missing sheet name")}getSheetWorkbookInfo(){const e=yw(this.xlsxFileStructure.workbook.file.fileName,this.rootFile.file.fileName),t=this.extractRelationships(this.xlsxFileStructure.workbook.rels).find((t=>t.target===e)).id,o=this.mapOnElements({parent:this.xlsxFileStructure.workbook.file.xml,query:"sheet"},(e=>({relationshipId:this.extractAttr(e,"r:id",{required:!0}).asString(),sheetId:this.extractAttr(e,"sheetId",{required:!0}).asString(),sheetName:this.extractAttr(e,"name",{required:!0}).asString(),state:this.extractAttr(e,"state",{default:"visible"}).asString()}))).find((e=>e.relationshipId===t));if(!o)throw new Error("Cannot find corresponding workbook sheet");return o}extractConditionalFormats(){return new Ly(this.rootFile,this.xlsxFileStructure,this.warningManager,this.theme).extractConditionalFormattings()}extractFigures(e){return this.mapOnElements({parent:e,query:"drawing"},(e=>{const t=this.extractAttr(e,"r:id",{required:!0})?.asString(),o=this.getTargetXmlFile(this.relationships[t]);return new Uy(o,this.xlsxFileStructure,this.warningManager).extractFigures()}))[0]||[]}extractTables(e){return this.mapOnElements({query:"tablePart",parent:e},(e=>{const t=this.extractAttr(e,"r:id",{required:!0})?.asString(),o=this.getTargetXmlFile(this.relationships[t]);return new Hy(o,this.xlsxFileStructure,this.warningManager).getTable()}))}extractPivotTables(){try{return Object.values(this.relationships).filter((e=>e.type.endsWith("pivotTable"))).map((e=>{const t=this.getTargetXmlFile(e);return new By(t,this.xlsxFileStructure,this.warningManager).getPivotTable()}))}catch(e){return this.catchErrorOnElement(e),[]}}extractMerges(e){return this.mapOnElements({parent:e,query:"mergeCell"},(e=>this.extractAttr(e,"ref",{required:!0}).asString()))}extractSheetFormat(e){const t=this.querySelector(e,"sheetFormatPr");if(t)return{defaultColWidth:this.extractAttr(t,"defaultColWidth",{default:$E.toString()}).asNum(),defaultRowHeight:this.extractAttr(t,"defaultRowHeight",{default:WE.toString()}).asNum()}}extractCols(e){return this.mapOnElements({parent:e,query:"cols col"},(e=>({width:this.extractAttr(e,"width")?.asNum(),customWidth:this.extractAttr(e,"customWidth")?.asBool(),bestFit:this.extractAttr(e,"bestFit")?.asBool(),hidden:this.extractAttr(e,"hidden")?.asBool(),min:this.extractAttr(e,"min",{required:!0})?.asNum(),max:this.extractAttr(e,"max",{required:!0})?.asNum(),styleIndex:this.extractAttr(e,"style")?.asNum()})))}extractRows(e){return this.mapOnElements({parent:e,query:"sheetData row"},(e=>({index:this.extractAttr(e,"r",{required:!0})?.asNum(),cells:this.extractCells(e),height:this.extractAttr(e,"ht")?.asNum(),customHeight:this.extractAttr(e,"customHeight")?.asBool(),hidden:this.extractAttr(e,"hidden")?.asBool(),styleIndex:this.extractAttr(e,"s")?.asNum()})))}extractCells(e){return this.mapOnElements({parent:e,query:"c"},(e=>({xc:this.extractAttr(e,"r",{required:!0})?.asString(),styleIndex:this.extractAttr(e,"s")?.asNum(),type:rw[this.extractAttr(e,"t",{default:"n"})?.asString()],value:this.extractChildTextContent(e,"v"),formula:this.extractCellFormula(e)})))}extractCellFormula(e){const t=this.querySelector(e,"f");if(t)return{content:this.extractTextContent(t),sharedIndex:this.extractAttr(t,"si")?.asNum(),ref:this.extractAttr(t,"ref")?.asString()}}extractHyperLinks(e){return this.mapOnElements({parent:e,query:"hyperlink"},(e=>{const t=this.extractAttr(e,"r:id")?.asString();return{xc:this.extractAttr(e,"ref",{required:!0})?.asString(),location:this.extractAttr(e,"location")?.asString(),display:this.extractAttr(e,"display")?.asString(),relTarget:t?this.relationships[t].target:void 0}}))}extractSharedFormulas(e){const t=this.querySelectorAll(e,"f[si][ref]"),o={};for(let e of t){const t=this.extractAttr(e,"si",{required:!0}).asNum(),s=this.extractTextContent(e,{required:!0});o[t]=s}const s=[];for(let e=0;e<Object.keys(o).length;e++)o[e]?s.push(o[e]):(this.warningManager.addParsingWarning(`Missing shared formula ${e}, replacing it by empty formula`),s.push(""));return s}}class Gy extends Fy{theme;constructor(e,t,o){super(e.styles,e,t),this.theme=o}getNumFormats(){return this.mapOnElements({parent:this.rootFile.file.xml,query:"numFmt"},(e=>this.extractNumFormats(e)))}extractNumFormats(e){return{id:this.extractAttr(e,"numFmtId",{required:!0}).asNum(),format:this.extractAttr(e,"formatCode",{required:!0,default:""}).asString()}}getFonts(){return this.mapOnElements({parent:this.rootFile.file.xml,query:"font"},(e=>this.extractFont(e)))}extractFont(e){const t=this.extractChildAttr(e,"name","val",{default:"Arial"}).asString(),o=this.extractChildAttr(e,"sz","val",{default:B.toString()}).asNum(),s=this.extractColor(this.querySelector(e,"color"),this.theme),n=this.querySelector(e,"i")||void 0,i=n&&"0"!==n.attributes.val?.value,r=this.querySelector(e,"b")||void 0,a=r&&"0"!==r.attributes.val?.value,l=this.querySelector(e,"strike")||void 0,c=l&&"0"!==l.attributes.val?.value,h=this.querySelector(e,"u")||void 0;return{name:t,size:o,color:s,italic:i,bold:a,underline:h&&"none"!==h.attributes.val?.value,strike:c}}getFills(){return this.mapOnElements({parent:this.rootFile.file.xml,query:"fill"},(e=>this.extractFill(e)))}extractFill(e){const t=e.children[0];return"patternFill"===t.tagName?{patternType:t.attributes.patternType?.value,bgColor:this.extractColor(this.querySelector(t,"bgColor"),this.theme),fgColor:this.extractColor(this.querySelector(t,"fgColor"),this.theme)}:{patternType:"solid",fgColor:this.extractColor(this.querySelectorAll(t,"color")[1],this.theme)}}getBorders(){return this.mapOnElements({parent:this.rootFile.file.xml,query:"border"},(e=>this.extractBorder(e)))}extractBorder(e){const t={left:this.extractSingleBorder(e,"left",this.theme),right:this.extractSingleBorder(e,"right",this.theme),top:this.extractSingleBorder(e,"top",this.theme),bottom:this.extractSingleBorder(e,"bottom",this.theme),diagonal:this.extractSingleBorder(e,"diagonal",this.theme)};return t.diagonal&&(t.diagonalUp=this.extractAttr(e,"diagonalUp")?.asBool(),t.diagonalDown=this.extractAttr(e,"diagonalDown")?.asBool()),t}extractSingleBorder(e,t,o){const s=this.querySelector(e,t);if(s&&s.attributes.style)return{style:this.extractAttr(s,"style",{required:!0,default:"thin"}).asString(),color:this.extractColor(s.children[0],o,"000000")}}extractAlignment(e){return{horizontal:this.extractAttr(e,"horizontal",{default:"general"}).asString(),vertical:this.extractAttr(e,"vertical",{default:"bottom"}).asString(),textRotation:this.extractAttr(e,"textRotation")?.asNum(),wrapText:this.extractAttr(e,"wrapText")?.asBool(),indent:this.extractAttr(e,"indent")?.asNum(),relativeIndent:this.extractAttr(e,"relativeIndent")?.asNum(),justifyLastLine:this.extractAttr(e,"justifyLastLine")?.asBool(),shrinkToFit:this.extractAttr(e,"shrinkToFit")?.asBool(),readingOrder:this.extractAttr(e,"readingOrder")?.asNum()}}getDxfs(){return this.mapOnElements({query:"dxf",parent:this.rootFile.file.xml},(e=>{const t=this.querySelector(e,"font"),o=this.querySelector(e,"fill"),s=this.querySelector(e,"border"),n=this.querySelector(e,"numFmt"),i=this.querySelector(e,"alignment");return{font:t?this.extractFont(t):void 0,fill:o?this.extractFill(o):void 0,numFmt:n?this.extractNumFormats(n):void 0,alignment:i?this.extractAlignment(i):void 0,border:s?this.extractBorder(s):void 0}}))}getStyles(){return this.mapOnElements({query:"cellXfs xf",parent:this.rootFile.file.xml},(e=>{const t=this.querySelector(e,"alignment");return{fontId:this.extractAttr(e,"fontId",{required:!0,default:0}).asNum(),fillId:this.extractAttr(e,"fillId",{required:!0,default:0}).asNum(),borderId:this.extractAttr(e,"borderId",{required:!0,default:0}).asNum(),numFmtId:this.extractAttr(e,"numFmtId",{required:!0,default:0}).asNum(),alignment:t?this.extractAlignment(t):void 0}}))}}class $y extends Fy{getExternalBook(){return this.mapOnElements({parent:this.rootFile.file.xml,query:"externalBook"},(e=>({rId:this.extractAttr(e,"r:id",{required:!0}).asString(),sheetNames:this.mapOnElements({parent:e,query:"sheetName"},(e=>this.extractAttr(e,"val",{required:!0}).asString())),datasets:this.extractExternalSheetData(e)})))[0]}extractExternalSheetData(e){return this.mapOnElements({parent:e,query:"sheetData"},(e=>{const t=this.mapOnElements({parent:e,query:"cell"},(e=>({xc:this.extractAttr(e,"r",{required:!0}).asString(),value:this.extractChildTextContent(e,"v",{required:!0})}))),o={};for(let e of t)o[e.xc]=e.value;return{sheetId:this.extractAttr(e,"sheetId",{required:!0}).asNum(),data:o}}))}}function Wy(e,t){const o=function(e,t){const o=t[KE],s=o.querySelectorAll(`Override[ContentType="${e}"]`),n=[];for(let e of s){const t=e?.attributes.PartName.value;n.push(t.substring(1))}return n}(e,t);return function(e,t){const o=[];for(let s of e){const e=qy(s,t);o.push({file:{fileName:s,xml:t[s]},rels:e?{fileName:e,xml:t[e]}:void 0})}return o}(o,t)}function qy(e,t){if(e===KE)return"_rels/.rels";let o="";const s=e.split("/");for(let e=0;e<s.length-1;e++)o+=s[e]+"/";return o+="_rels/",o+=s[s.length-1]+".rels",t[o]||(o=void 0),o}class Zy{warningManager;xmls;images;constructor(e){this.warningManager=new JE,this.xmls={},this.images=[];for(let t of Object.keys(e))if(t.endsWith(".xml")||t.endsWith(".rels")){const o=e[t].replaceAll(/(<\/?)([a-zA-Z0-9]+):([a-zA-Z0-9]+)/g,"$1NAMESPACE$2NAMESPACE$3");this.xmls[t]=Ry(new NE(o))}else t.includes("media/image")&&this.images.push({fileName:t,imageSrc:e[t].imageSrc})}convertXlsx(){const e=this.getXlsxData();return this.convertImportedData(e)}getXlsxData(){const e=this.buildXlsxFileStructure(),t=e.theme?new Dy(e.theme,e,this.warningManager).getTheme():void 0,o=e.sharedStrings?new Dy(e.sharedStrings,e,this.warningManager).getSharedStrings():[],s=e.sheets.sort(((e,t)=>e.file.fileName.localeCompare(t.file.fileName,void 0,{numeric:!0}))).map((o=>new zy(o,e,this.warningManager,t).getSheet())),n=e.externalLinks.map((t=>new $y(t,e,this.warningManager).getExternalBook())),i=new Gy(e,this.warningManager,t);return{fonts:i.getFonts(),fills:i.getFills(),borders:i.getBorders(),dxfs:i.getDxfs(),numFmts:i.getNumFormats(),styles:i.getStyles(),sheets:s,sharedStrings:o,externalBooks:n}}buildXlsxFileStructure(){const e={sheets:Wy(UE.sheet,this.xmls),workbook:Wy(UE.workbook,this.xmls)[0],styles:Wy(UE.styles,this.xmls)[0],sharedStrings:Wy(UE.sharedStrings,this.xmls)[0],theme:Wy(UE.themes,this.xmls)[0],charts:Wy(UE.chart,this.xmls),figures:Wy(UE.drawing,this.xmls),tables:Wy(UE.table,this.xmls),pivots:Wy(UE.pivot,this.xmls),externalLinks:Wy(UE.externalLink,this.xmls),images:this.images};if(!e.workbook.rels)throw Error(Xt("Cannot find workbook relations file"));return e}convertImportedData(e){const t={version:12,sheets:uy(e,this.warningManager),styles:Mw(e,this.warningManager),formats:Fw(e,this.warningManager),borders:Ow(e,this.warningManager),entities:{},revisionId:W};return Cy(t,e),Object.keys(e.styles).map((t=>{e.styles[t]=Le(e.styles[t])})),t}}var Yy;!function(e){e[e.LeftRef=0]="LeftRef",e[e.RightRef=1]="RightRef",e[e.Separator=2]="Separator",e[e.FullColumnSeparator=3]="FullColumnSeparator",e[e.FullRowSeparator=4]="FullRowSeparator",e[e.RightColumnRef=5]="RightColumnRef",e[e.RightRowRef=6]="RightRowRef",e[e.Found=7]="Found"}(Yy||(Yy={}));const jy=(e,t=(()=>!0))=>[{goTo:e,guard:t}],Xy=(e,t=(()=>!0))=>({goTo:e,guard:t}),Ky={[Yy.LeftRef]:{REFERENCE:jy(Yy.Separator),NUMBER:jy(Yy.FullRowSeparator),SYMBOL:[Xy(Yy.FullColumnSeparator,(e=>Ks(e.value))),Xy(Yy.FullRowSeparator,(e=>Qs(e.value)))]},[Yy.FullColumnSeparator]:{SPACE:jy(Yy.FullColumnSeparator),OPERATOR:jy(Yy.RightColumnRef,(e=>":"===e.value))},[Yy.FullRowSeparator]:{SPACE:jy(Yy.FullRowSeparator),OPERATOR:jy(Yy.RightRowRef,(e=>":"===e.value))},[Yy.Separator]:{SPACE:jy(Yy.Separator),OPERATOR:jy(Yy.RightRef,(e=>":"===e.value))},[Yy.RightRef]:{SPACE:jy(Yy.RightRef),NUMBER:jy(Yy.Found),REFERENCE:jy(Yy.Found,(e=>tn(e.value))),SYMBOL:jy(Yy.Found,(e=>Js(e.value)||en(e.value)))},[Yy.RightColumnRef]:{SPACE:jy(Yy.RightColumnRef),SYMBOL:jy(Yy.Found,(e=>Js(e.value))),REFERENCE:jy(Yy.Found,(e=>tn(e.value)))},[Yy.RightRowRef]:{SPACE:jy(Yy.RightRowRef),NUMBER:jy(Yy.Found),REFERENCE:jy(Yy.Found,(e=>tn(e.value))),SYMBOL:jy(Yy.Found,(e=>en(e.value)))},[Yy.Found]:{}};function Qy(e){let t=0,o=Ky[Yy.LeftRef];const s=[];for(;void 0!==o;){const n=e[t++];if(!n)return null;const i=o[n.type]?.find((e=>e.guard(n))),r=i?i.goTo:void 0;switch(r){case void 0:return null;case Yy.Found:return s.push(n),e.splice(0,t),{type:"REFERENCE",value:Oe(s.map((e=>e.value)))};default:o=Ky[r],s.push(n)}}return null}function Jy(e,t=ho){const o=Br(e,t),s=[];for(;o.length;)s.push(Qy(o)||o.shift());return s}function ex(e){const t=Jy(e);let o=[];return{text:"".concat(...t.map((e=>{if("REFERENCE"===e.type&&$s.test(e.value)){const t=e.value.trim();return o.includes(t)||o.push(t),`${ee}${o.indexOf(t)}${ee}`}return e.value}))),dependencies:o}}const tx=14,ox="Sheet1";function sx(e,t){if(!e)return lx();if(e["[Content_Types].xml"]){const o=new Zy(e);if(e=o.convertXlsx(),t)for(let e of o.warningManager.warnings.sort())console.warn(e)}return"version"in e&&e.version<tx&&(e=function(e){for(let t=nx.findIndex((t=>t.from===e.version));t<nx.length;t++)e=nx[t].applyMigration(e);return e}(e)),e=function(e){return e=function(e){if(e.uniqueFigureIds)return e;const t=new Set,o=new Kn;for(const s of e.sheets||[])for(const e of s.figures||[])t.has(e.id)&&(e.id+=o.uuidv4()),t.add(e.id);return e.uniqueFigureIds=!0,e}(e),e=function(e){const t=Object.assign(lx(),e,{version:tx});t.sheets=t.sheets?t.sheets.map(((e,t)=>Object.assign(ax(`Sheet${t+1}`,`Sheet${t+1}`),e))):[],0===t.sheets.length&&t.sheets.push(ax(ox,"Sheet1"));Jr(t.settings.locale)||(t.settings.locale=ho);return t}(e),e}(e),e}const nx=[{description:"add the `activeSheet` field on data",from:1,to:2,applyMigration:e=>(e.sheets&&e.sheets[0]&&(e.activeSheet=e.sheets[0].name),e)},{description:"add an id field in each sheet",from:2,to:3,applyMigration(e){if(e.sheets&&e.sheets.length)for(let t of e.sheets)t.id=t.id||t.name;return e}},{description:"activeSheet is now an id, not the name of a sheet",from:3,to:4,applyMigration(e){if(e.sheets&&e.activeSheet){const t=e.sheets.find((t=>t.name===e.activeSheet));e.activeSheet=t.id}return e}},{description:"add figures object in each sheets",from:4,to:5,applyMigration(e){for(let t of e.sheets||[])t.figures=t.figures||[];return e}},{description:"normalize the content of the cell if it is a formula to avoid parsing all the formula that vary only by the cells they use",from:5,to:6,applyMigration(e){for(let t of e.sheets||[])for(let e in t.cells||[]){const o=t.cells[e];o.content&&o.content.startsWith("=")&&(o.formula=ex(o.content))}return e}},{description:"transform chart data structure",from:6,to:7,applyMigration(e){for(let t of e.sheets||[])for(let e in t.figures||[]){const{dataSets:o,...s}=t.figures[e].data,n=[];for(let e of o)if(e.labelCell){const t=rn(e.dataRange),o=e.labelCell+":"+ut(t.right,t.bottom);n.push(o)}else n.push(e.dataRange);s.dataSetsHaveTitle=Boolean(o[0].labelCell),s.dataSets=n,t.figures[e].data=s}return e}},{description:"remove single quotes in sheet names",from:7,to:8,applyMigration(e){const t=[],o=new RegExp(J,"g");for(let s of e.sheets||[]){if(!s.name)continue;const e=s.name,n=e.replace(o,"_");let i=1,r=n;for(;t.includes(r);)r=`${n}${i}`,i++;s.name=r,t.push(r);const a=t=>{if(void 0===t)return t;let o=t.replace(e,r),s=t;for(;s!==o;)s=o,o=s.replace(e,r);return s};for(let e in s.cells){const t=s.cells[e];t.formula&&(t.formula.dependencies=t.formula.dependencies.map(a))}for(let e of s.figures||[])if("chart"===e.type){const t=e.data.dataSets.map(a),o=a(e.data.labelRange);e.data={...e.data,dataSets:t,labelRange:o}}for(let e of s.conditionalFormats||[]){e.ranges=e.ranges.map(a);for(const t of["minimum","maximum","midpoint","upperInflectionPoint","lowerInflectionPoint"])"formula"===e.rule[t]?.type&&(e.rule[t].value=a(e.rule[t].value))}}return e}},{description:"transform chart data structure with design attributes",from:8,to:9,applyMigration(e){for(const t of e.sheets||[])for(const e of t.figures||[])e.data.background=h,e.data.verticalAxisPosition="left",e.data.legendPosition="top",e.data.stacked=!1;return e}},{description:"de-normalize formula to reduce exported json size (~30%)",from:9,to:10,applyMigration(e){for(let t of e.sheets||[])for(let e in t.cells||[]){const o=t.cells[e];if(o.formula){let{text:e,dependencies:t}=o.formula;for(let[o,s]of Object.entries(t)){const t=`\\${ee}${o}\\${ee}`;e=e.replace(new RegExp(t,"g"),s)}o.content=e,delete o.formula}}return e}},{description:"normalize the formats of the cells",from:10,to:11,applyMigration(e){const t={};for(let o of e.sheets||[])for(let e in o.cells||[]){const s=o.cells[e];s.format&&(s.format=Ae(s.format,t))}return e.formats=t,e}},{description:"Add isVisible to sheets",from:11,to:12,applyMigration(e){for(let t of e.sheets||[])t.isVisible=!0;return e}},{description:"Change Border description structure",from:12,to:13,applyMigration(e){for(const t in e.borders){const o=e.borders[t];for(const e in o)Array.isArray(o[e])&&(o[e]={style:o[e][0],color:o[e][1]})}return e}},{description:"Add locale to spreadsheet settings",from:13,to:14,applyMigration:e=>(e.settings||(e.settings={}),e.settings.locale||(e.settings.locale=ho),e)}];function ix(e,t){return t=function(e,t){if(0!==Object.keys(e).length)return t;const o=[],s=[],n=e=>{if("CREATE_SHEET"===e.type)o.push(e.sheetId);else if("sheetId"in e&&!o.includes(e.sheetId))return{...e,sheetId:ox};return e};for(const e of t)"REMOTE_REVISION"===e.type?s.push({...e,commands:e.commands.map(n)}):s.push(e);return s}(e,t),t=rx(t,"SORT_CELLS"),t=function(e,t){const o=[],s={};for(const t of e.sheets||[])t.figures?.forEach((e=>{"chart"===e.tag&&(s[e.id]=e.data)}));for(const e of t)if("REMOTE_REVISION"===e.type){const t=[];for(const o of e.commands){let e=o;switch(o.type){case"CREATE_CHART":s[o.id]=o.definition;break;case"UPDATE_CHART":if(!s[o.id]){console.log(`Fix chart definition: chart with id ${o.id} not found.`);continue}const t={...s[o.id],...o.definition};e={...o,definition:t},s[o.id]=t}t.push(e)}o.push({...e,commands:t})}else o.push(e);return o}(e,t=rx(t,"SET_DECIMAL")),t}function rx(e,t){const o=[];for(const s of e)"REMOTE_REVISION"===s.type?o.push({...s,commands:s.commands.filter((e=>e.type!==t))}):o.push(s);return o}function ax(e,t){return{id:e,name:t,colNumber:26,rowNumber:100,cells:{},cols:{},rows:{},merges:[],conditionalFormats:[],figures:[],filterTables:[],isVisible:!0}}function lx(e="Sheet1"){return{version:tx,sheets:[ax(ox,e)],entities:{},styles:{},formats:{},borders:{},revisionId:W,uniqueFigureIds:!0,settings:{locale:ho}}}function cx(e,t){return{...ax(e,t),charts:[],images:[]}}class hx{static getters=[];history;dispatch;constructor(e,t){this.history=Object.assign(Object.create(e),{update:e.addChange.bind(e,this),selectCell:()=>{}}),this.dispatch=t}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 dx extends hx{getters;uuidGenerator;constructor({getters:e,stateObserver:t,range:o,dispatch:s,uuidGenerator:n}){super(t,s),o.addRangeProvider(this.adaptRanges.bind(this)),this.getters=e,this.uuidGenerator=n}import(e){}export(e){}adaptRanges(e,t){}garbageCollectExternalResources(){}}class ux{scope;code="";constructor(e=new px){this.scope=e}append(...e){this.code+=e.map((e=>e.toString())).join("\n")+"\n"}return(e){return new gx(this.scope,this.code,e)}toString(){return mx(this.code)}}class gx{scope;returnExpression;code;constructor(e,t,o){this.scope=e,this.returnExpression=o,this.code=mx(t)}toString(){return this.code}assignResultToVariable(){if(this.scope.isAlreadyDeclared(this.returnExpression))return this;const e=this.scope.nextVariableName(),t=new ux(this.scope);return t.append(this.code),t.append(`const ${e} = ${this.returnExpression};`),t.return(e)}}class px{nextId=1;declaredVariables=new Set;nextVariableName(){const e="_"+this.nextId++;return this.declaredVariables.add(e),e}isAlreadyDeclared(e){return this.declaredVariables.has(e)}}function mx(e){let t="",o=0;const s=e.split("\n").map((e=>e.trim())).filter((e=>""!==e));for(const e of s)e.startsWith("}")&&o--,t+="\t".repeat(o)+e+"\n",e.endsWith("{")&&o++;return t.trim()}const fx=/[a-zA-Z0-9\_]+(\.[a-zA-Z0-9\_]+)*/,vx=["-","+"],bx=["%"],Sx=["*","+","&"],Cx={"^":30,"%":30,"*":20,"/":20,"+":15,"-":15,"&":13,">":10,"<>":10,">=":10,"<":10,"<=":10,"=":10};function Ex(e){const t=e.shift();if(!t)throw new So;switch(t.type){case"DEBUGGER":const o=xx(e,1e3);return o.debug=!0,o;case"NUMBER":return{type:"NUMBER",value:Wt(t.value,ho)};case"STRING":return{type:"STRING",value:re(t.value)};case"INVALID_REFERENCE":throw new Co;case"REFERENCE":if(":"===e[0]?.value&&"REFERENCE"===e[1]?.type){e.shift();const o=e.shift();return{type:"REFERENCE",value:`${t.value}:${o?.value}`}}return{type:"REFERENCE",value:t.value};case"SYMBOL":const s=t.value,n=e[0];if("LEFT_PAREN"===n?.type&&fx.test(t.value)){const t=function(e){yx(e,"LEFT_PAREN",Xt("Missing opening parenthesis"));const t=e[0];if("RIGHT_PAREN"===t?.type)return yx(e,"RIGHT_PAREN"),[];const o=[];o.push(wx(e));for(;"RIGHT_PAREN"!==e[0]?.type;)yx(e,"ARG_SEPARATOR",Xt("Wrong function call")),o.push(wx(e));return yx(e,"RIGHT_PAREN"),o}(e);return{type:"FUNCALL",value:s,args:t}}const i=s.toUpperCase();if("TRUE"===i||"FALSE"===i)return{type:"BOOLEAN",value:"TRUE"===i};throw new So(Xt("Invalid formula"));case"LEFT_PAREN":const r=xx(e);return yx(e,"RIGHT_PAREN",Xt("Missing closing parenthesis")),r;case"OPERATOR":const a=t.value;if(vx.includes(a))return{type:"UNARY_OPERATION",value:a,operand:xx(e,Cx[a])};throw new So(Xt("Unexpected token: %s",t.value));default:throw new So(Xt("Unexpected token: %s",t.value))}}function wx(e){const t=e[0];return"ARG_SEPARATOR"===t?.type||"RIGHT_PAREN"===t?.type?{type:"EMPTY",value:""}:xx(e)}function yx(e,t,o){const s=e.shift();if(!s||s.type!==t)throw new So(o)}function xx(e,t=0){if(0===e.length)throw new So;let o=Ex(e);for(;"OPERATOR"===e[0]?.type&&Cx[e[0].value]>t;){const t=e.shift().value;if(bx.includes(t))o={type:"UNARY_OPERATION",value:t,operand:o,postfix:!0};else{o={type:"BIN_OPERATION",value:t,left:o,right:xx(e,Cx[t])}}}return o}function Ix(e){return Rx(Br(e))}function Rx(e){"="===(e=e.filter((e=>"SPACE"!==e.type)))[0].value&&e.splice(0,1);const t=xx(e);if(e.length)throw new So;return t}function Tx(e,t,o){return _x(e,(e=>e.type===t?o(e):e))}function Ax(e){return Array.from(Ox(e))}function*Ox(e){switch(yield e,e.type){case"FUNCALL":for(const t of e.args)yield*Ox(t);break;case"UNARY_OPERATION":yield*Ox(e.operand);break;case"BIN_OPERATION":yield*Ox(e.left),yield*Ox(e.right)}}function _x(e,t){switch((e=t(e)).type){case"FUNCALL":return{...e,args:e.args.map((e=>_x(e,t)))};case"UNARY_OPERATION":return{...e,operand:_x(e.operand,t)};case"BIN_OPERATION":return{...e,right:_x(e.right,t),left:_x(e.left,t)};default:return e}}function Mx(e){switch(e.type){case"FUNCALL":const t=e.args.map((e=>Mx(e)));return`${e.value}(${t.join(",")})`;case"NUMBER":return e.value.toString();case"REFERENCE":default:return e.value;case"STRING":return`"${e.value}"`;case"BOOLEAN":return e.value?"TRUE":"FALSE";case"UNARY_OPERATION":return e.postfix?Nx(e)+e.value:e.value+Fx(e);case"BIN_OPERATION":return Nx(e)+e.value+Fx(e)}}function Nx(e){const t=e.value,o="left"in e?e.left:e.operand,s=o.value;return"BIN_OPERATION"===o.type&&Cx[s]<Cx[t]?`(${Mx(o)})`:Mx(o)}function Fx(e){const t=e.value,o="right"in e?e.right:e.operand,s=Cx[o.value],n=Cx[t];let i=!1;return"BIN_OPERATION"!==o.type?i=!1:s<n?i=!0:s!==n||Sx.includes(t)||(i=!0),i?`(${Mx(o)})`:Mx(o)}const Dx=Wf.content,Lx={"=":"EQ","+":"ADD","-":"MINUS","*":"MULTIPLY","/":"DIVIDE",">=":"GTE","<>":"NE",">":"GT","<=":"LTE","<":"LT","^":"POWER","&":"CONCATENATE"},Px={"-":"UMINUS","+":"UPLUS","%":"UNARY.PERCENT"},kx={};function Vx(e){return Ux(Jy(e))}function Ux(e){const{dependencies:t,constantValues:o}=function(e){const t={numbers:[],strings:[]},o=[];for(const s of e)switch(s.type){case"INVALID_REFERENCE":case"REFERENCE":o.push(s.value);break;case"STRING":const e=re(s.value);t.strings.includes(e)||t.strings.push(e);break;case"NUMBER":{const e=Wt(s.value,ho);t.numbers.includes(e)||t.numbers.push(e);break}}return{dependencies:o,constantValues:t}}(e),s=function(e,t,o){return Oe(e.map((e=>{switch(e.type){case"STRING":const s=re(e.value);return`|S${o.strings.indexOf(s)}|`;case"NUMBER":return`|N${o.numbers.indexOf(Wt(e.value,ho))}|`;case"REFERENCE":case"INVALID_REFERENCE":return`|${t.indexOf(e.value)}|`;case"SPACE":return"";default:return e.value}})))}(e,t,o);if(!kx[s]){const n=Rx([...e]),i=new px;if("BIN_OPERATION"===n.type&&":"===n.value)throw new So(Xt("Invalid formula"));if("EMPTY"===n.type)throw new So(Xt("Invalid formula"));const r=h(n),a=new ux;a.append(`// ${s}`),a.append(r),a.append(`return ${r.returnExpression};`);let l=new Function("deps","ref","range","ctx",a.toString());function c(e){const{args:t}=e,o=e.value.toUpperCase(),s=Dx[o];if(!s)throw new wo(Xt('Unknown function: "%s"',e.value));!function(e){const t=e.args.length,o=e.value.toUpperCase(),s=Dx[o];if(t<s.minArgRequired)throw new So(Xt("Invalid number of arguments for the %s function. Expected %s minimum, but got %s instead.",o,s.minArgRequired.toString(),t.toString()));if(t>s.maxArgPossible)throw new So(Xt("Invalid number of arguments for the %s function. Expected %s maximum, but got %s instead.",o,s.maxArgPossible.toString(),t.toString()));const n=s.nbrArgRepeating;if(n>1){const e=s.args.length-n;if((t-e)%n!=0)throw new So(Xt("Invalid number of arguments for the %s function. Expected all arguments after position %s to be supplied by groups of %s arguments",o,e.toString(),n.toString()))}}(e);const n=[];for(let e=0;e<t.length;e++){const i=s.getArgToFocus(e+1)-1,r=s.args[i],a=t[e],l=r.type||[],c=l.includes("META"),d=l.some((e=>Bx(e)));if(l.every((e=>Bx(e)))&&!Hx(a))throw new So(Xt("Function %s expects the parameter %s to be reference to a cell or range, not a %s.",o,(e+1).toString(),a.type.toLowerCase()));n.push(h(a,c,d,{functionName:o,paramIndex:e+1}))}return n}function h(e,s=!1,n=!1,r={}){const a=new ux(i);if("REFERENCE"!==e.type&&("BIN_OPERATION"!==e.type||":"!==e.value)&&s)throw new So(Xt("Argument must be a reference to a cell or range."));switch(e.debug&&a.append("debugger;"),e.type){case"BOOLEAN":return a.return(`{ value: ${e.value} }`);case"NUMBER":return a.return(`{ value: this.constantValues.numbers[${o.numbers.indexOf(e.value)}] }`);case"STRING":return a.return(`{ value: this.constantValues.strings[${o.strings.indexOf(e.value)}] }`);case"REFERENCE":const i=t.indexOf(e.value);return n?a.return(`range(deps[${i}])`):a.return(`ref(deps[${i}], ${s?"true":"false"}, "${r.functionName||Lx["="]}", ${r.paramIndex})`);case"FUNCALL":const l=c(e).map((e=>e.assignResultToVariable()));a.append(...l);const d=e.value.toUpperCase();return a.return(`ctx['${d}'](${l.map((e=>e.returnExpression))})`);case"UNARY_OPERATION":{const t=Px[e.value],o=h(e.operand,!1,!1,{functionName:t}).assignResultToVariable();return a.append(o),a.return(`ctx['${t}'](${o.returnExpression})`)}case"BIN_OPERATION":{const t=Lx[e.value],o=h(e.left,!1,!1,{functionName:t}).assignResultToVariable(),s=h(e.right,!1,!1,{functionName:t}).assignResultToVariable();return a.append(o),a.append(s),a.return(`ctx['${t}'](${o.returnExpression}, ${s.returnExpression})`)}case"EMPTY":return a.return("undefined")}}kx[s]={execute:l}}return{execute:kx[s].execute,dependencies:t,constantValues:o,tokens:e}}function Bx(e){return e.startsWith("RANGE")}function Hx(e){if("REFERENCE"===e.type)return!0;if("FUNCALL"===e.type){const t=Dx[e.value.toUpperCase()];return t&&Bx(t.returns[0])}return!1}function zx(e,t){return function(e){let t=[],o="";return e.map(((e,s)=>{switch(["SPACE","LEFT_PAREN"].includes(e.type)||(o=""),e.type){case"SYMBOL":o=e.value;break;case"LEFT_PAREN":t.push({parent:o,argPosition:0}),o="";break;case"RIGHT_PAREN":t.pop();break;case"ARG_SEPARATOR":t.length&&t[t.length-1].argPosition++}if(t.length){const o=t[t.length-1];o.parent&&(e.functionContext=Object.assign({},o))}return e}))}(function(e){let t=1;const o=[];return e.map((e=>("LEFT_PAREN"===e.type?(o.push(t),e.parenIndex=t,t++):"RIGHT_PAREN"===e.type&&(e.parenIndex=o.pop()),e)))}(function(e){let t=0;return e.map((e=>{const o=e.value.toString().length,s=Object.assign({},e,{start:t,end:t+o,length:o});return t=s.end,s}))}(Jy(e,t))))}const Gx=Wf.content;function $x(e){try{return 0===Ax(Rx(e)).filter((e=>"FUNCALL"===e.type&&!Gx[e.value.toUpperCase()]?.isExported)).length}catch(e){return!1}}class Wx{id;format;style;sheetId;getRangeString;isFormula=!0;compiledFormula;constructor(e,t,o,s,n,i,r){this.id=e,this.format=o,this.style=s,this.sheetId=i,this.getRangeString=r;let a=0;const l=t.tokens.map((e=>{if("REFERENCE"===e.type){const e=a++;return new qx((()=>this.getRangeString(n[e],this.sheetId)))}return e}));this.compiledFormula={...t,dependencies:n,tokens:l}}get content(){return Oe(this.compiledFormula.tokens.map((e=>e.value)))}}class qx{getValue;type="REFERENCE";constructor(e){this.getValue=e}get value(){return this.getValue()}}function Zx(e){return""===e?NaN:Number(e)}class Yx{id;zone;filters;constructor(e){this.filters=[],this.zone=e;const t=new Kn;this.id=t.uuidv4();for(const o of ue(e.left,e.right+1)){const e={...this.zone,left:o,right:o};this.filters.push(new jx(t.uuidv4(),e))}}get contentZone(){if(this.zone.bottom!==this.zone.top)return{...this.zone,top:this.zone.top+1}}getFilterId(e){return this.filters.find((t=>t.col===e))?.id}clone(){return new Yx(this.zone)}}class jx{id;zoneWithHeaders;constructor(e,t){if(t.left!==t.right)throw new Error("Can only define a filter on a single column");this.id=e,this.zoneWithHeaders=t}get col(){return this.zoneWithHeaders.left}get filteredZone(){const e=this.zoneWithHeaders;if(e.bottom!==e.top)return{...e,top:e.top+1}}}function Xx(e){return Object.entries(e).map((([e,t])=>t?Kx(parseInt(e,10),t):void 0)).filter(Ie).map((e=>ut(e.left,e.top)+":"+ut(e.right,e.bottom)))}function Kx(e,t){return{...t.zone,topLeft:{col:t.zone.left,row:t.zone.top},id:e}}class Qx{getters;providers=[];constructor(e){this.getters=e}static getters=["getRangeString","getRangeFromSheetXC","createAdaptedRanges","getRangeDataFromXc","getRangeDataFromZone","getRangeFromRangeData","getRangeFromZone"];allowDispatch(e){return"MOVE_RANGES"===e.type?1===e.target.length?"Success":"InvalidZones":"Success"}beforeHandle(e){}handle(e){switch(e.type){case"REMOVE_COLUMNS_ROWS":{let t="COL"===e.dimension?"left":"top",o="COL"===e.dimension?"right":"bottom",s="COL"===e.dimension?"columns":"rows";const n=[...e.elements];n.sort(((e,t)=>t-e));const i=ge(n);this.executeOnAllRanges((n=>{if(n.sheetId!==e.sheetId)return{changeType:"NONE"};let r=n,a="NONE";for(let e of i){const i=Math.min(...e),l=Math.max(...e);if(n.zone[t]<=i&&i<=n.zone[o]){const e=Math.min(n.zone[o],l)-i+1;a="RESIZE",r=this.createAdaptedRange(r,s,a,-e)}else if(n.zone[t]>=i&&n.zone[o]<=l)a="REMOVE",r=n.clone({...this.getInvalidRange()});else if(n.zone[t]<=l&&n.zone[o]>=l){const e=l-n.zone[t]+1;a="RESIZE",r=this.createAdaptedRange(r,s,a,-e),r=this.createAdaptedRange(r,s,"MOVE",-(n.zone[t]-i))}else i<n.zone[t]&&(a="MOVE",r=this.createAdaptedRange(r,s,a,-(l-i+1)))}return"NONE"!==a?{changeType:a,range:r}:{changeType:"NONE"}}),e.sheetId);break}case"ADD_COLUMNS_ROWS":{let t="COL"===e.dimension?"left":"top",o="COL"===e.dimension?"right":"bottom",s="COL"===e.dimension?"columns":"rows";this.executeOnAllRanges((n=>{if(n.sheetId!==e.sheetId)return{changeType:"NONE"};if("after"===e.position){if(n.zone[t]<=e.base&&e.base<n.zone[o])return{changeType:"RESIZE",range:this.createAdaptedRange(n,s,"RESIZE",e.quantity)};if(e.base<n.zone[t])return{changeType:"MOVE",range:this.createAdaptedRange(n,s,"MOVE",e.quantity)}}else{if(n.zone[t]<e.base&&e.base<=n.zone[o])return{changeType:"RESIZE",range:this.createAdaptedRange(n,s,"RESIZE",e.quantity)};if(e.base<=n.zone[t])return{changeType:"MOVE",range:this.createAdaptedRange(n,s,"MOVE",e.quantity)}}return{changeType:"NONE"}}),e.sheetId);break}case"DELETE_SHEET":this.executeOnAllRanges((t=>{if(t.sheetId!==e.sheetId)return{changeType:"NONE"};const o=this.getters.getSheetName(e.sheetId);return{changeType:"REMOVE",range:t=t.clone({...this.getInvalidRange(),invalidSheetName:o})}}),e.sheetId);break;case"RENAME_SHEET":this.executeOnAllRanges((t=>{if(t.sheetId===e.sheetId)return{changeType:"CHANGE",range:t};if(e.name&&t.invalidSheetName===e.name){const o=void 0,s=e.sheetId;return{changeType:"CHANGE",range:t.clone({sheetId:s,invalidSheetName:o})}}return{changeType:"NONE"}}));break;case"MOVE_RANGES":{const t=e.target[0];this.executeOnAllRanges((o=>{if(o.sheetId!==e.sheetId||!Sn(o.zone,t))return{changeType:"NONE"};const s=e.targetSheetId,n=e.col-t.left,i=e.row-t.top,r=this.createAdaptedRange(o,"both","MOVE",[n,i]),a=e.sheetId!==s||r.prefixSheet;return{changeType:"MOVE",range:r.clone({sheetId:s,prefixSheet:a})}}));break}}}finalize(){}verifyRangeRemoved(e){return t=>{const o=e(t);return"NONE"===o.changeType||an(o.range.zone)?o:{range:o.range,changeType:"REMOVE"}}}createAdaptedRange(e,t,o,s){const n=In(e.unboundedZone,t,o,s);return e.clone({zone:n})}executeOnAllRanges(e,t){const o=this.verifyRangeRemoved(e);for(const e of this.providers)e(o,t)}addRangeProvider(e){this.providers.push(e)}createAdaptedRanges(e,t,o,s){const n=e.map((e=>Nn.fromRange(e,this.getters)));return n.map((e=>{if(!an(e.zone))return e;const n=e.prefixSheet?e.sheetId:s,i={...e.unboundedZone,left:e.isFullRow&&!e.unboundedZone.hasHeader?e.unboundedZone.left:e.unboundedZone.left+(e.parts[0].colFixed?0:t),right:e.isFullRow?e.unboundedZone.right:e.unboundedZone.right+((e.parts[1]||e.parts[0]).colFixed?0:t),top:e.isFullCol&&!e.unboundedZone.hasHeader?e.unboundedZone.top:e.unboundedZone.top+(e.parts[0].rowFixed?0:o),bottom:e.isFullCol?e.unboundedZone.bottom:e.unboundedZone.bottom+((e.parts[1]||e.parts[0]).rowFixed?0:o)};return e.clone({sheetId:n,zone:i}).orderZone()}))}getRangeFromSheetXC(e,t){if(!Xs.test(t))return new Nn({sheetId:"",zone:{left:-1,top:-1,right:-1,bottom:-1},parts:[],invalidXc:t,prefixSheet:!1},this.getters.getSheetSize);let o,s=t,n=!1;t.includes("!")&&(({xc:s,sheetName:o}=on(t)),o&&(n=!0));const i=nn(s),r=Nn.getRangeParts(s,i),a=o&&!this.getters.getSheetIdByName(o)?o:void 0,l=this.getters.getSheetIdByName(o)||e;return new Nn({prefixSheet:n,zone:i,sheetId:l,invalidSheetName:a,parts:r},this.getters.getSheetSize).orderZone()}getRangeString(e,t){if(!e)return fo.InvalidReference;if(e.invalidXc)return e.invalidXc;if(e.zone.bottom-e.zone.top<0||e.zone.right-e.zone.left<0)return fo.InvalidReference;if(e.zone.left<0||e.zone.top<0)return fo.InvalidReference;const o=Nn.fromRange(e,this.getters);let s=o.sheetId!==t||o.invalidSheetName||o.prefixSheet,n="";if(s&&(n=o.invalidSheetName?o.invalidSheetName:he(this.getters.getSheetName(o.sheetId))),s&&!n)return fo.InvalidReference;let i=this.getRangePartString(o,0);return o.parts&&2===o.parts.length&&(o.zone.top!==o.zone.bottom||o.zone.left!==o.zone.right||o.parts[0].rowFixed||o.parts[0].colFixed||o.parts[1].rowFixed||o.parts[1].colFixed)&&(i+=":",i+=this.getRangePartString(o,1)),`${s?n+"!":""}${i}`}getRangeDataFromXc(e,t){return this.getters.getRangeFromSheetXC(e,t).rangeData}getRangeDataFromZone(e,t){return{_sheetId:e,_zone:t}}getRangeFromZone(e,t){return new Nn({sheetId:e,zone:t,parts:[{colFixed:!1,rowFixed:!1},{colFixed:!1,rowFixed:!1}],prefixSheet:!1},this.getters.getSheetSize)}getRangeFromRangeData(e){const t={prefixSheet:!1,zone:e._zone,sheetId:e._sheetId,invalidSheetName:void 0,parts:[{colFixed:!1,rowFixed:!1},{colFixed:!1,rowFixed:!1}]};return new Nn(t,this.getters.getSheetSize)}getRangePartString(e,t){const o=e.parts&&e.parts[t]?.colFixed?"$":"",s=rt(0===t?e.zone.left:e.zone.right),n=e.parts&&e.parts[t]?.rowFixed?"$":"",i=String(0===t?e.zone.top+1:e.zone.bottom+1);let r="";return r=e.isFullCol?0===t&&e.unboundedZone.hasHeader?o+s+n+i:o+s:e.isFullRow?0===t&&e.unboundedZone.hasHeader?o+s+n+i:n+i:o+s+n+i,r}getInvalidRange(){return{parts:[],prefixSheet:!1,zone:{left:-1,top:-1,right:-1,bottom:-1},sheetId:"",invalidXc:fo.InvalidReference}}}class Jx extends hx{static layers=[];getters;ui;selection;constructor({getters:e,stateObserver:t,dispatch:o,uiActions:s,selection:n}){super(t,o),this.getters=e,this.ui=s,this.selection=n}drawGrid(e,t){}}const eI=Wf.mapping;function tI(e,t,o){return new oI(e,t,o).getParameters()}class oI{getters;computeCell;evalContext;rangeCache={};constructor(e,t,o){this.getters=t,this.computeCell=o,this.evalContext=Object.assign(Object.create(eI),e,{getters:this.getters,locale:this.getters.getLocale()})}getParameters(){return[this.refFn.bind(this),this.range.bind(this),this.evalContext]}refFn(e,t,o,s){if(t){return{value:sn(this.getters.getSheetName(e.sheetId),cn(e.zone))}}if(!an(e.zone))throw new Co;if(e.zone.bottom!==e.zone.top||e.zone.left!==e.zone.right)throw new bo(s?Xt("Function %s expects the parameter %s to be a single value or a single cell reference, not a range.",o.toString(),s.toString()):Xt("Function %s expects its parameters to be single values or single cell references, not ranges.",o.toString()));if(e.invalidSheetName)throw new bo(Xt("Invalid sheet name: %s",e.invalidSheetName));const n={sheetId:e.sheetId,col:e.zone.left,row:e.zone.top};return this.readCell(n)}readCell(e){if(!this.getters.tryGetSheet(e.sheetId))throw new bo(Xt("Invalid sheet name"));const t=this.getEvaluatedCellIfNotEmpty(e);return void 0===t?{value:null,format:this.getters.getCell(e)?.format}:t}getEvaluatedCellIfNotEmpty(e){const t=this.computeCell(e);if(t.type===Qt.empty){const t=this.getters.getCell(e);if(!t||!t.isFormula&&""===t.content)return}return t}range({sheetId:e,zone:t}){if(!an(t))throw new Co;const o=mn(t,this.getters.getSheetZone(e));if(!o)return[[]];const{top:s,left:n,bottom:i,right:r}=t,a=`${e}-${s}-${n}-${i}-${r}`;if(a in this.rangeCache)return this.rangeCache[a];const l=o.bottom-o.top+1,c=o.right-o.left+1,h=new Array(c);for(let t=o.left;t<=o.right;t++){const s=t-o.left;h[s]=new Array(l);for(let n=o.top;n<=o.bottom;n++){const i=n-o.top;h[s][i]=this.readCell({sheetId:e,col:t,row:n})}}return this.rangeCache[a]=h,h}}function sI(e,t,o,s,n){nI(e,t,o||0,s||e.length-1,n||rI)}function nI(e,t,o,s,n){for(;s>o;){if(s-o>600){var i=s-o+1,r=t-o+1,a=Math.log(i),l=.5*Math.exp(2*a/3),c=.5*Math.sqrt(a*l*(i-l)/i)*(r-i/2<0?-1:1);nI(e,t,Math.max(o,Math.floor(t-r*l/i+c)),Math.min(s,Math.floor(t+(i-r)*l/i+c)),n)}var h=e[t],d=o,u=s;for(iI(e,o,t),n(e[s],h)>0&&iI(e,o,s);d<u;){for(iI(e,d,u),d++,u--;n(e[d],h)<0;)d++;for(;n(e[u],h)>0;)u--}0===n(e[o],h)?iI(e,o,u):iI(e,++u,s),u<=t&&(o=u+1),t<=u&&(s=u-1)}}function iI(e,t,o){var s=e[t];e[t]=e[o],e[o]=s}function rI(e,t){return e<t?-1:e>t?1:0}class aI{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(!bI(e,t))return o;const s=this.toBBox,n=[];for(;t;){for(let i=0;i<t.children.length;i++){const r=t.children[i],a=t.leaf?s(r):r;bI(e,a)&&(t.leaf?o.push(r):vI(e,a)?this._all(r,o):n.push(r))}t=n.pop()}return o}collides(e){let t=this.data;if(!bI(e,t))return!1;const o=[];for(;t;){for(let s=0;s<t.children.length;s++){const n=t.children[s],i=t.leaf?this.toBBox(n):n;if(bI(e,i)){if(t.leaf||vI(e,i))return!0;o.push(n)}}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=SI([]),this}remove(e,t){if(!e)return this;let o=this.data;const s=this.toBBox(e),n=[],i=[];let r,a,l;for(;o||n.length;){if(o||(o=n.pop(),a=n[n.length-1],r=i.pop(),l=!0),o.leaf){const s=lI(e,o.children,t);if(-1!==s)return o.children.splice(s,1),n.push(o),this._condense(n),this}l||o.leaf||!vI(o,s)?a?(r++,o=a.children[r],l=!1):o=null:(n.push(o),i.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 n=o-t+1;let i,r=this._maxEntries;if(n<=r)return i=SI(e.slice(t,o+1)),cI(i,this.toBBox),i;s||(s=Math.ceil(Math.log(n)/Math.log(r)),r=Math.ceil(n/Math.pow(r,s-1))),i=SI([]),i.leaf=!1,i.height=s;const a=Math.ceil(n/r),l=a*Math.ceil(Math.sqrt(r));CI(e,t,o,l,this.compareMinX);for(let n=t;n<=o;n+=l){const t=Math.min(n+l-1,o);CI(e,n,t,a,this.compareMinY);for(let o=n;o<=t;o+=a){const n=Math.min(o+a-1,t);i.children.push(this._build(e,o,n,s-1))}}return cI(i,this.toBBox),i}_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=pI(l),h=(n=e,i=l,(Math.max(i.maxX,n.maxX)-Math.min(i.minX,n.minX))*(Math.max(i.maxY,n.maxY)-Math.min(i.minY,n.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 n,i;return t}_insert(e,t,o){const s=o?e:this.toBBox(e),n=[],i=this._chooseSubtree(s,this.data,t,n);for(i.children.push(e),dI(i,s);t>=0&&n[t].children.length>this._maxEntries;)this._split(n,t),t--;this._adjustParentBBoxes(s,n,t)}_split(e,t){const o=e[t],s=o.children.length,n=this._minEntries;this._chooseSplitAxis(o,n,s);const i=this._chooseSplitIndex(o,n,s),r=SI(o.children.splice(i,o.children.length-i));r.height=o.height,r.leaf=o.leaf,cI(o,this.toBBox),cI(r,this.toBBox),t?e[t-1].children.push(r):this._splitRoot(o,r)}_splitRoot(e,t){this.data=SI([e,t]),this.data.height=e.height+1,this.data.leaf=!1,cI(this.data,this.toBBox)}_chooseSplitIndex(e,t,o){let s,n=1/0,i=1/0;for(let r=t;r<=o-t;r++){const t=hI(e,0,r,this.toBBox),a=hI(e,r,o,this.toBBox),l=fI(t,a),c=pI(t)+pI(a);l<n?(n=l,s=r,i=c<i?c:i):l===n&&c<i&&(i=c,s=r)}return s||o-t}_chooseSplitAxis(e,t,o){const s=e.leaf?this.compareMinX:uI,n=e.leaf?this.compareMinY:gI;this._allDistMargin(e,t,o,s)<this._allDistMargin(e,t,o,n)&&e.children.sort(s)}_allDistMargin(e,t,o,s){e.children.sort(s);const n=this.toBBox,i=hI(e,0,t,n),r=hI(e,o-t,o,n);let a=mI(i)+mI(r);for(let s=t;s<o-t;s++){const t=e.children[s];dI(i,e.leaf?n(t):t),a+=mI(i)}for(let s=o-t-1;s>=t;s--){const t=e.children[s];dI(r,e.leaf?n(t):t),a+=mI(r)}return a}_adjustParentBBoxes(e,t,o){for(let s=o;s>=0;s--)dI(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():cI(e[o],this.toBBox)}}function lI(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 cI(e,t){hI(e,0,e.children.length,t,e)}function hI(e,t,o,s,n){n||(n=SI(null)),n.minX=1/0,n.minY=1/0,n.maxX=-1/0,n.maxY=-1/0;for(let i=t;i<o;i++){const t=e.children[i];dI(n,e.leaf?s(t):t)}return n}function dI(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 uI(e,t){return e.minX-t.minX}function gI(e,t){return e.minY-t.minY}function pI(e){return(e.maxX-e.minX)*(e.maxY-e.minY)}function mI(e){return e.maxX-e.minX+(e.maxY-e.minY)}function fI(e,t){const o=Math.max(e.minX,t.minX),s=Math.max(e.minY,t.minY),n=Math.min(e.maxX,t.maxX),i=Math.min(e.maxY,t.maxY);return Math.max(0,n-o)*Math.max(0,i-s)}function vI(e,t){return e.minX<=t.minX&&e.minY<=t.minY&&t.maxX<=e.maxX&&t.maxY<=e.maxY}function bI(e,t){return t.minX<=e.maxX&&t.minY<=e.maxY&&t.maxX>=e.minX&&t.maxY>=e.minY}function SI(e){return{children:e,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function CI(e,t,o,s,n){const i=[t,o];for(;i.length;){if((o=i.pop())-(t=i.pop())<=s)continue;const r=t+Math.ceil((o-t)/s/2)*s;sI(e,r,t,o,n),i.push(t,r,r,o)}}class EI{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 wI,this.rTrees[e].load(t[e])}insert(e){const t=e.boundingBox.sheetId;this.rTrees[t]||(this.rTrees[t]=new wI),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,Fe)}}class wI extends aI{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 yI{encoder;dependencies=new Map;rTree;constructor(e,t=[]){this.encoder=e,this.rTree=new EI(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=new Be,o=Array.from(e).reverse();for(;o.length>0;){const e=o.pop();t.add(...this.encoder.encodeBoundingBox(e));const s=this.rTree.search(e).map((e=>e.data));for(const e of s)t.has(e)||o.push(this.encoder.decodeToBoundingBox(e))}return t.delete(...e.flatMap((e=>this.encoder.encodeBoundingBox(e)))),t}}class xI{resultsToArrayFormulas=new Map;arrayFormulasToResults=new Map;getFormulaPositionsSpreadingOn(e){return this.resultsToArrayFormulas.get(e)||II}getArrayResultPositionIds(e){return this.arrayFormulasToResults.get(e)||II}removeNode(e){this.resultsToArrayFormulas.delete(e),this.arrayFormulasToResults.delete(e)}addRelation({arrayFormulaPositionId:e,resultPositionId:t}){this.resultsToArrayFormulas.has(t)||this.resultsToArrayFormulas.set(t,new Set),this.resultsToArrayFormulas.get(t)?.add(e),this.arrayFormulasToResults.has(e)||this.arrayFormulasToResults.set(e,new Set),this.arrayFormulasToResults.get(e)?.add(t)}hasArrayFormulaResult(e){return this.resultsToArrayFormulas.has(e)}isArrayFormula(e){return this.arrayFormulasToResults.has(e)}}const II=[],RI=new class extends bo{constructor(e){super(e||Xt("Circular reference"),fo.CircularDependency)}},TI=Zi(RI.value,{locale:ho},RI.message);class AI{context;getters;compilationParams;encoder=new _I;evaluatedCells=new Map;formulaDependencies=_e(new yI(this.encoder));blockedArrayFormulas=new Set;spreadingRelations=new xI;constructor(e,t){this.context=e,this.getters=t,this.compilationParams=tI(this.context,this.getters,this.computeAndSave.bind(this))}getEvaluatedCell(e){return this.evaluatedCells.get(this.encoder.encode(e))||Zi("",{locale:this.getters.getLocale()})}getSpreadPositionsOf(e){const t=this.encoder.encode(e);return this.spreadingRelations.isArrayFormula(t)?Array.from(this.spreadingRelations.getArrayResultPositionIds(t)).map((e=>this.encoder.decode(e))):[]}getArrayFormulaSpreadingOn(e){const t=this.encoder.encode(e),o=this.getArrayFormulaSpreadingOnId(t);return void 0!==o?this.encoder.decode(o):void 0}getEvaluatedPositions(){return[...this.evaluatedCells.keys()].map((e=>this.encoder.decode(e)))}getArrayFormulaSpreadingOnId(e){if(!this.spreadingRelations.hasArrayFormulaResult(e))return;const t=this.spreadingRelations.getFormulaPositionsSpreadingOn(e);return Array.from(t).find((e=>!this.blockedArrayFormulas.has(e)))}updateDependencies(e){const t=this.encoder.encode(e);this.formulaDependencies().removeAllDependencies(t);const o=this.getDirectDependencies(t);this.formulaDependencies().addDependencies(t,o)}updateCompilationParameters(){this.compilationParams=tI(this.context,this.getters,this.computeAndSave.bind(this))}evaluateCells(e){const t=e.map((e=>this.encoder.encode(e))),o=new Be(t),s=this.getArrayFormulasImpactedByChangesOf(t);o.add(...this.getCellsDependingOn(t)),o.add(...s),o.add(...this.getCellsDependingOn(s)),this.evaluate(o)}getArrayFormulasImpactedByChangesOf(e){const t=new Be;for(const o of e){const e=this.getCell(o)?.content,s=this.getArrayFormulaSpreadingOnId(o);void 0!==s&&t.add(s),e||t.add(...this.getArrayFormulasBlockedByOrSpreadingOn(o))}return t}buildDependencyGraph(){this.blockedArrayFormulas=new Set,this.spreadingRelations=new xI,this.formulaDependencies=_e((()=>{const e=[...this.getAllCells()].flatMap((e=>this.getDirectDependencies(e).map((t=>({data:e,boundingBox:{zone:t.zone,sheetId:t.sheetId}})))));return new yI(this.encoder,e)}))}evaluateAllCells(){this.evaluatedCells=new Map,this.evaluate(this.getAllCells())}evaluateFormula(e,t){const o=Vx(t),s=o.dependencies.map((t=>this.getters.getRangeFromSheetXC(e,t)));this.updateCompilationParameters();const n=MI({...o,dependencies:s},this.compilationParams,e);return go(n)?jo(n,(e=>e.value)):null===n.value?0:n.value}getAllCells(){const e=new Be;for(const t of this.getters.getSheetIds()){const o=this.getters.getCells(t);for(const t in o)e.add(this.encoder.encode(this.getters.getCellPosition(t)))}return e}getArrayFormulasBlockedByOrSpreadingOn(e){if(!this.spreadingRelations.hasArrayFormulaResult(e))return[];const t=this.spreadingRelations.getFormulaPositionsSpreadingOn(e),o=new Be(t);return o.add(...this.getCellsDependingOn(t)),o}nextPositionsToUpdate=new Be;cellsBeingComputed=new Set;evaluate(e){this.cellsBeingComputed=new Set,this.nextPositionsToUpdate=e;let t=0;for(;this.nextPositionsToUpdate.size&&t++<30;){this.updateCompilationParameters();const e=Array.from(this.nextPositionsToUpdate);this.nextPositionsToUpdate.clear();for(let t=0;t<e.length;++t){const o=e[t];this.evaluatedCells.delete(o)}for(let t=0;t<e.length;++t){const o=e[t];this.setEvaluatedCell(o,this.computeCell(o))}}}setEvaluatedCell(e,t){this.evaluatedCells.set(e,t)}computeCell(e){const t=this.evaluatedCells.get(e);if(t)return t;this.blockedArrayFormulas.has(e)||this.invalidateSpreading(e);const o=this.encoder.decode(e),s=this.getters.getCell(o);if(void 0===s)return Zi("",{locale:this.getters.getLocale()});const n=s.id,i={format:s.format,locale:this.getters.getLocale()};try{return this.cellsBeingComputed.has(n)?TI:(this.cellsBeingComputed.add(n),s.isFormula?this.computeFormulaCell(o.sheetId,s):Wi(s.content,i))}catch(e){return Zi(e.value,i,e.message)}finally{this.cellsBeingComputed.delete(n)}}computeAndSave(e){const t=this.encoder.encode(e),o=this.computeCell(t);return this.evaluatedCells.has(t)||this.setEvaluatedCell(t,o),o}computeFormulaCell(e,t){const o=t.id,s=MI(t.compiledFormula,this.compilationParams,e,o);if(!go(s))return Zi(s.value,{format:t.format||s.format,locale:this.getters.getLocale()},s.message);const n=this.getters.getCellPosition(o);this.assertSheetHasEnoughSpaceToSpreadFormulaResult(n,s);const i=s.length,r=s[0].length;return OI(i,r,this.updateSpreadRelation(n)),OI(i,r,this.checkCollision(n)),OI(i,r,this.spreadValues(n,s)),Zi(s[0][0].value,{format:t.format||s[0][0]?.format,locale:this.getters.getLocale()},s[0][0].message)}assertSheetHasEnoughSpaceToSpreadFormulaResult({sheetId:e,col:t,row:o},s){const n=this.getters.getNumberCols(e),i=this.getters.getNumberRows(e),r=t+s.length<=n,a=o+s[0].length<=i;if(!r||!a){if(r)throw new bo(Xt("Result couldn't be automatically expanded. Please insert more rows."));if(a)throw new bo(Xt("Result couldn't be automatically expanded. Please insert more columns."));throw new bo(Xt("Result couldn't be automatically expanded. Please insert more columns and rows."))}}updateSpreadRelation({sheetId:e,col:t,row:o}){const s=this.encoder.encode({sheetId:e,col:t,row:o});return(n,i)=>{const r={sheetId:e,col:n+t,row:i+o},a=this.encoder.encode(r);this.spreadingRelations.addRelation({resultPositionId:a,arrayFormulaPositionId:s})}}checkCollision({sheetId:e,col:t,row:o}){const s=this.encoder.encode({sheetId:e,col:t,row:o});return(n,i)=>{const r={sheetId:e,col:n+t,row:i+o},a=this.getters.getCell(r);if(a?.content||this.getters.getEvaluatedCell(r).type!==Qt.empty)throw this.blockedArrayFormulas.add(s),new bo(Xt("Array result was not expanded because it would overwrite data in %s.",ut(r.col,r.row)));this.blockedArrayFormulas.delete(s)}}spreadValues({sheetId:e,col:t,row:o},s){return(n,i)=>{const r={sheetId:e,col:n+t,row:i+o},a=this.getters.getCell(r),l=a?.format,c=Zi(s[n][i].value,{format:l||s[n][i]?.format,locale:this.getters.getLocale()},s[n][i].message),h=this.encoder.encode(r);this.setEvaluatedCell(h,c),this.nextPositionsToUpdate.add(...this.getCellsDependingOn([h]))}}invalidateSpreading(e){if(this.spreadingRelations.isArrayFormula(e)){for(const t of this.spreadingRelations.getArrayResultPositionIds(e)){const e=this.getCell(t)?.content;e||(this.evaluatedCells.delete(t),this.nextPositionsToUpdate.add(...this.getCellsDependingOn([t])),this.nextPositionsToUpdate.add(...this.getArrayFormulasBlockedByOrSpreadingOn(t)))}this.spreadingRelations.removeNode(e)}}getDirectDependencies(e){const t=this.getCell(e);return t?.isFormula?t.compiledFormula.dependencies:[]}getCellsDependingOn(e){const t=[];for(const o of e)t.push(this.encoder.decodeToBoundingBox(o));return this.formulaDependencies().getCellsDependingOn(t)}getCell(e){return this.getters.getCell(this.encoder.decode(e))}}function OI(e,t,o){for(let s=0;s<e;++s)for(let e=0;e<t;++e)0===s&&0===e||o(s,e)}class _I{sheetMapping={};inverseSheetMapping=new Map;constructor(){try{o_spreadsheet.__DEBUG__=o_spreadsheet.__DEBUG__||{},o_spreadsheet.__DEBUG__.decodePosition=this.decode.bind(this),o_spreadsheet.__DEBUG__.encodePosition=this.encode.bind(this)}catch(e){}}encode({sheetId:e,col:t,row:o}){return this.encodeSheet(e)<<42n|BigInt(t)<<21n|BigInt(o)}encodeBoundingBox({sheetId:e,zone:t}){const o=[];return function(e,t){const{left:o,right:s,top:n,bottom:i}=e;for(let e=o;e<=s;e++)for(let o=n;o<=i;o++)t(e,o)}(t,((t,s)=>{o.push(this.encode({sheetId:e,col:t,row:s}))})),o}decode(e){const t=Number(2097151n&e),o=Number(e>>21n&2097151n);return{sheetId:this.decodeSheet(e>>42n),col:o,row:t}}decodeToBoundingBox(e){const{sheetId:t,col:o,row:s}=this.decode(e);return{sheetId:t,zone:{left:o,top:s,right:o,bottom:s}}}encodeSheet(e){const t=this.sheetMapping[e];if(void 0===t){const t=BigInt(Object.keys(this.sheetMapping).length);return this.sheetMapping[e]=t,this.inverseSheetMapping.set(t,e),t}return t}decodeSheet(e){const t=this.inverseSheetMapping.get(e);if(void 0===t)throw new Error("Sheet id not found");return t}}function MI(e,t,o,s){return t[2].__originCellXC=_e((()=>{if(!s)return;const e=t[2].getters.getCellPosition(s);return ut(e.col,e.row)})),t[2].__originSheetId=o,e.execute(e.dependencies,...t)}const NI={isValid:!0};class FI{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}=Qi.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}}}}class DI{subscriptions={};on(e,t,o){if(!o)throw new Error("Missing callback");this.subscriptions[e]||(this.subscriptions[e]=[]),this.subscriptions[e].push({owner:t,callback:o})}trigger(e,t){const o=this.subscriptions[e]||[];for(let e=0,s=o.length;e<s;e++){const s=o[e];s.callback.call(s.owner,t)}}off(e,t){const o=this.subscriptions[e];o&&(this.subscriptions[e]=o.filter((e=>e.owner!==t)))}clear(){this.subscriptions={}}}function LI(e,t){return{...e,definition:Tl(e.definition,t)}}function PI(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(let 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 kI(e,t){if(e.sheetId!==t.sheetId||e.dimension!==t.dimension)return e;let o;if("REMOVE_COLUMNS_ROWS"===t.type)o=Un(t.elements,[e.base])[0];else if("ADD_COLUMNS_ROWS"===t.type){o=Vn(Ne(t.position,t.base),t.quantity,[e.base])[0]}return void 0!==o?{...e,base:o}:void 0}function VI(e,t){if(e.sheetId!==t.sheetId||e.dimension!==t.dimension)return e;const o=ue(e.start,e.end+1);let s=[];if("REMOVE_COLUMNS_ROWS"===t.type)s=Un(t.elements,o);else if("ADD_COLUMNS_ROWS"===t.type){s=Vn(Ne(t.position,t.base),t.quantity,o)}return 0!==s.length?{...e,start:Math.min(...s),end:Math.max(...s)}:void 0}uS.addTransformation("ADD_COLUMNS_ROWS",["ADD_COLUMNS_ROWS"],kI),uS.addTransformation("REMOVE_COLUMNS_ROWS",["ADD_COLUMNS_ROWS"],kI),uS.addTransformation("ADD_COLUMNS_ROWS",["CREATE_CHART","UPDATE_CHART"],LI),uS.addTransformation("REMOVE_COLUMNS_ROWS",["CREATE_CHART","UPDATE_CHART"],LI),uS.addTransformation("DELETE_SHEET",["MOVE_RANGES"],(function(e,t){const o=t.sheetId;if(e.targetSheetId===o||e.sheetId===o)return;return e})),uS.addTransformation("DELETE_FIGURE",["UPDATE_FIGURE","UPDATE_CHART"],(function(e,t){if(e.id===t.id)return;return e})),uS.addTransformation("CREATE_SHEET",["CREATE_SHEET"],(function(e,t){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})),uS.addTransformation("ADD_MERGE",["ADD_MERGE","REMOVE_MERGE","CREATE_FILTER_TABLE"],(function(e,t){if(e.sheetId!==t.sheetId)return e;const o=[];for(const s of e.target)for(const e of t.target)vn(s,e)||o.push({...s});if(o.length)return{...e,target:o};return})),uS.addTransformation("ADD_COLUMNS_ROWS",["FREEZE_COLUMNS","FREEZE_ROWS"],PI),uS.addTransformation("REMOVE_COLUMNS_ROWS",["FREEZE_COLUMNS","FREEZE_ROWS"],PI),uS.addTransformation("CREATE_FILTER_TABLE",["CREATE_FILTER_TABLE","ADD_MERGE"],(function(e,t){if(e.sheetId!==t.sheetId)return e;for(const o of e.target)for(const e of t.target)if(vn(e,o))return;return e})),uS.addTransformation("ADD_COLUMNS_ROWS",["GROUP_HEADERS","UNGROUP_HEADERS","FOLD_HEADER_GROUP","UNFOLD_HEADER_GROUP"],VI),uS.addTransformation("REMOVE_COLUMNS_ROWS",["GROUP_HEADERS","UNGROUP_HEADERS","FOLD_HEADER_GROUP","UNFOLD_HEADER_GROUP"],VI);const UI=[{match:function(e){return"sheetId"in e},fn:zI},{match:function(e){return"target"in e&&"sheetId"in e},fn:function(e,t){const o=zI(e,t);if("SKIP_TRANSFORMATION"!==o)return"IGNORE_COMMAND"===o?"IGNORE_COMMAND":e;const s=[];for(const o of e.target){const e=ti(o,t);e&&s.push(e)}if(!s.length)return"IGNORE_COMMAND";return{...e,target:s}}},{match:function(e){return"zone"in e},fn:function(e,t){const o=zI(e,t);if("SKIP_TRANSFORMATION"!==o)return"IGNORE_COMMAND"===o?"IGNORE_COMMAND":e;const s=ti(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=zI(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(let 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)&&bn(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=zI(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=Un(t.elements,e.elements);else if("ADD_COLUMNS_ROWS"===t.type){s=Vn(Ne(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=>oi(e,t))).filter(Ie);if(!o.length)return"IGNORE_COMMAND";return{...e,ranges:o}}}];function BI(e,t){const o=uS.getTransformation(e.type,t.type);return o?o(e,t):function(e,t){for(const{match:o,fn:s}of UI)if(o(e)){const o=s(e,t);if("SKIP_TRANSFORMATION"===o)continue;if("IGNORE_COMMAND"===o)return;e=o}return e}(e,t)}function HI(e,t){let o=[...e];for(const e of t)o=o.map((t=>BI(t,e))).filter(Ie);return o}function zI(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 GI{rootCommand;timestamp;id;clientId;_commands=[];_changes=[];constructor(e,t,o,s,n,i){this.rootCommand=s,this.timestamp=i,this.id=e,this.clientId=t,this._commands=[...o],this._changes=n?[...n]:[]}setChanges(e){this._changes=e}get commands(){return this._commands}get changes(){return this._changes}}class $I extends Error{}class WI extends DI{revisions;transportService;serverRevisionId;clients={};clientId="local";debouncedMove;pendingMessages=[];waitingAck=!1;waitingUndoRedoAck=!1;isReplayingInitialRevisions=!1;processedRevisions=new Set;uuidGenerator=new Kn;lastLocalOperation;constructor(e,t,o=W){super(),this.revisions=e,this.transportService=t,this.serverRevisionId=o,this.debouncedMove=function(e,t,o){let s;return function(){const n=this,i=arguments,r=o&&!s;clearTimeout(s),s=setTimeout((function(){s=null,o||e.apply(n,i)}),t),r&&e.apply(n,i)}}(this._move.bind(this),200)}canApplyOptimisticUpdate(){return!this.waitingUndoRedoAck}save(e,t,o){if(!t.length||!o.length||!this.canApplyOptimisticUpdate())return;const s=new GI(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))}loadInitialMessages(e){this.isReplayingInitialRevisions=!0;for(const t of e)this.onMessageReceived(t);this.isReplayingInitialRevisions=!1}leave(){delete this.clients[this.clientId],this.transportService.leave(this.clientId),this.transportService.sendMessage({type:"CLIENT_LEFT",clientId:this.clientId,version:1})}snapshot(e){const t=this.uuidGenerator.uuidv4();this.transportService.sendMessage({type:"SNAPSHOT",nextRevisionId:t,serverRevisionId:this.serverRevisionId,data:{...e,revisionId:t},version:1})}getClient(){const e=this.clients[this.clientId];if(!e)throw new $I("The client left the session");return e}getConnectedClients(){return new Set(Object.values(this.clients).filter(Ie))}getRevisionId(){return this.serverRevisionId}isFullySynchronized(){return 0===this.pendingMessages.length}getLastLocalNonEmptyRevision(){return this.lastLocalOperation}_move(e){if(!this.clients[this.clientId])return;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.getClient();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,n=new GI(e.nextRevisionId,t,o,void 0,void 0,s);if(n.clientId!==this.clientId){this.revisions.insert(n.id,n,e.serverRevisionId);const t=this.pendingMessages.filter((e=>"REMOTE_REVISION"===e.type)).map((e=>e.commands)).flat();this.trigger("remote-revision-received",{commands:HI(o,t)})}break;case"SNAPSHOT_CREATED":{const t=new GI(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.waitingAck=!0,this.sendPendingMessage())}sendPendingMessage(){let e=this.pendingMessages[0];if(e){if("REMOTE_REVISION"===e.type){const t=this.revisions.get(e.nextRevisionId);if(0===t.commands.length){this.revisions.drop(t.id);const e=this.pendingMessages.filter((e=>"REMOTE_REVISION"===e.type)).map((e=>e.nextRevisionId));return this.trigger("pending-revisions-dropped",{revisionIds:e}),this.waitingAck=!1,this.waitingUndoRedoAck=!1,void(this.pendingMessages=[])}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.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"REVISION_UNDONE":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.sendPendingMessage()}}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":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 qI=["#ff851b","#0074d9","#7fdbff","#b10dc9","#39cccc","#f012be","#3d9970","#111111","#ff4136","#aaaaaa","#85144b","#001f3f"];class ZI{getters;dispatch;selection;operation;sheetId;constructor(e,t,o,s){this.getters=t,this.dispatch=o,this.selection=s,this.operation=e,this.sheetId=t.getActiveSheetId()}isCutAllowed(e){return"Success"}isPasteAllowed(e,t){return"Success"}addMissingDimensions(e,t,o,s){const n=this.getters.getActiveSheetId(),i=t+s-this.getters.getNumberRows(n);i>0&&this.dispatch("ADD_COLUMNS_ROWS",{dimension:"ROW",base:this.getters.getNumberRows(n)-1,sheetId:n,quantity:i,position:"after"});const r=e+o-this.getters.getNumberCols(n);r>0&&this.dispatch("ADD_COLUMNS_ROWS",{dimension:"COL",base:this.getters.getNumberCols(n)-1,sheetId:n,quantity:r,position:"after"})}isColRowDirtyingClipboard(e,t){return!1}drawClipboard(e){}}class YI extends ZI{cells;copiedTables;zones;uuidGenerator=new Kn;constructor(e,t,o,s,n){if(super(t,o,s,n),!e.length)return this.cells=[[]],this.zones=[],void(this.copiedTables=[]);const i=new Set(e.map((e=>e.left))),r=new Set(e.map((e=>e.right))),a=new Set(e.map((e=>e.top))),l=new Set(e.map((e=>e.bottom))),c=1===a.size&&1===l.size||1===i.size&&1===r.size?function(e){return e.reduce(((e,t)=>{const o=e.length;for(let s=0;s<o;s++)if(vn(e[s],t))return e[s]=pn(e[s],t),e;return e[o]=t,e}),[])}(e):[e[e.length-1]],h=c.map((e=>xn(e))).flat(),d=[...new Set(h.map((e=>e.col)))].sort(((e,t)=>e-t)),u=[...new Set(h.map((e=>e.row)))].sort(((e,t)=>e-t)),g=[],p=o.getActiveSheetId();for(let e of u){let t=[];for(let s of d){const n={col:s,row:e,sheetId:p},i=o.getArrayFormulaSpreadingOn(n);let r=o.getCell(n);const a=o.getEvaluatedCell(n);if(i){const e=u.includes(i.row)&&d.includes(i.col)?"":Ss(a.value,{locale:o.getLocale()});r={id:r?.id||"",style:r?.style,format:a.format,content:e,isFormula:!1}}t.push({cell:r,border:o.getCellBorder(n)||void 0,evaluatedCell:a,position:n})}g.push(t)}const m=[];for(const t of e)for(const e of this.getters.getFilterTablesInZone(p,t)){const t=[];for(const o of ue(e.zone.left,e.zone.right+1))t.push(this.getters.getFilterValues({sheetId:p,col:o,row:e.zone.top}));m.push({filtersValues:t,zone:e.zone})}this.cells=g,this.zones=c,this.copiedTables=m}isCutAllowed(e){return 1!==e.length?"WrongCutSelection":"Success"}isPasteAllowed(e,t){const o=this.getters.getActiveSheetId();if("CUT"===this.operation&&void 0!==t?.pasteOption)return"WrongPasteOption";if(e.length>1&&(this.cells.length>1||this.cells[0].length>1))return"WrongPasteSelection";const s=this.cells.length,n=this.cells[0].length;for(let t of this.getPasteZones(e))if(this.getters.doesIntersectMerge(o,t)&&(e.length>1||!this.getters.isSingleCellOrMerge(o,e[0])||s*n!=1))return"WillRemoveExistingMerge";const{xSplit:i,ySplit:r}=this.getters.getPaneDivisions(o);for(const t of this.getPasteZones(e))if(t.left<i&&t.right>=i||t.top<r&&t.bottom>=r)return"FrozenPaneOverlap";return"Success"}paste(e,t){"COPY"===this.operation?this.pasteFromCopy(e,t):this.pasteFromCut(e,t);const o=this.cells.length,s=this.cells[0].length,n="CUT"===this.operation;t?.selectTarget&&this.selectPastedZone(s,o,n,e)}pasteFromCopy(e,t){if(1===e.length){const o=this.cells.length,s=this.cells[0].length,n=this.pastedZones(e,s,o);for(const e of n)this.pasteZone(e.left,e.top,t)}else for(const o of e)for(let e=o.left;e<=o.right;e++)for(let s=o.top;s<=o.bottom;s++)this.pasteZone(e,s,t);void 0===t?.pasteOption&&this.pasteCopiedTables(e)}pasteFromCut(e,t){this.clearClippedZones();const o=e[0];this.pasteZone(o.left,o.top,t),this.dispatch("MOVE_RANGES",{target:this.zones,sheetId:this.sheetId,targetSheetId:this.getters.getActiveSheetId(),col:o.left,row:o.top});for(const e of this.copiedTables)this.dispatch("REMOVE_FILTER_TABLE",{sheetId:this.sheetId,target:[e.zone]});this.pasteCopiedTables(e)}pastedZones(e,t,o){const s=e[0],n=Math.max(1,Math.floor((s.right+1-s.left)/t)),i=Math.max(1,Math.floor((s.bottom+1-s.top)/o)),r=[];for(let e=0;e<n;e++)for(let n=0;n<i;n++){const i=s.top+n*o,a=s.left+e*t;r.push({left:a,top:i,bottom:i+o-1,right:a+t-1})}return r}getPasteZones(e){const t=this.cells;if(!t.length||!t[0].length)return e;const o=[],s=t.length,n=t[0].length,i=e[e.length-1],r=i.left,a=i.top,l=Math.max(1,Math.floor((i.right+1-r)/n)),c=Math.max(1,Math.floor((i.bottom+1-a)/s));for(let e=1;e<=l;e++)for(let t=1;t<=c;t++)o.push({left:r,top:a,right:r-1+e*n,bottom:a-1+t*s});return o}selectPastedZone(e,t,o,s){const n=s[0],i=n.left,r=n.top;if(t>1||e>1||o){const n=this.pastedZones(s,e,t),a=o?n[0]:pn(...n);this.selection.getBackToDefault(),this.selection.selectZone({cell:{col:i,row:r},zone:a},{scrollIntoView:!1})}}clearClippedZones(){for(const e of this.cells)for(const t of e)t?.cell&&this.dispatch("CLEAR_CELL",t.position);this.dispatch("CLEAR_FORMATTING",{sheetId:this.sheetId,target:this.zones})}pasteZone(e,t,o){const s=this.cells.length,n=this.cells[0].length,i="asValue"!==o?.pasteOption&&o?.shouldPasteCF,r=!o?.pasteOption,a=this.getters.getActiveSheetId();this.addMissingDimensions(n,s,e,t);for(let l=0;l<s;l++){const s=this.cells[l];for(let c=0;c<n;c++){const n=s[c];if(!n)continue;const h={col:e+c,row:t+l,sheetId:a};"CUT"!==this.operation&&this.pasteMergeIfExist(n.position,h),this.pasteCell(n,h,this.operation,o),i&&this.pasteCf(n.position,h),r&&this.pasteDataValidation(n.position,h)}}}pasteCell(e,t,o,s){const{sheetId:n,col:i,row:r}=t,a=this.getters.getEvaluatedCell(t),l=e.cell?.format??e.evaluatedCell.format;if("asValue"===s?.pasteOption){const o=this.getters.getLocale(),s=Ss(e.evaluatedCell.value,{locale:o});return void this.dispatch("UPDATE_CELL",{...t,content:s,format:l})}const c=this.getters.getCellBorder(t),h=e.border,d={top:c?.top||h?.top,bottom:c?.bottom||h?.bottom,left:c?.left||h?.left,right:c?.right||h?.right};if(this.dispatch("SET_BORDER",{sheetId:n,col:i,row:r,border:d}),"onlyFormat"===s?.pasteOption)return void this.dispatch("UPDATE_CELL",{...t,style:e.cell?.style??null,format:l??a.format});const u=e.cell&&e.cell.isFormula&&"COPY"===o?this.getters.getTranslatedCellFormula(n,i-e.position.col,r-e.position.row,e.cell.compiledFormula):e.cell?.content;""!==u||e.cell?.format||e.cell?.style?this.dispatch("UPDATE_CELL",{...t,content:u,style:e.cell?.style||null,format:e.cell?.format}):a&&this.dispatch("CLEAR_CELL",t)}pasteMergeIfExist(e,t){let{sheetId:o,col:s,row:n}=e;const{col:i,row:r}=this.getters.getMainCellPosition(e);if(i===s&&r===n){const i=this.getters.getMerge(e);if(!i)return;({sheetId:o,col:s,row:n}=t),this.dispatch("ADD_MERGE",{sheetId:o,force:!0,target:[{left:s,top:n,right:s+i.right-i.left,bottom:n+i.bottom-i.top}]})}}pasteCopiedTables(e){const t=this.getters.getActiveSheetId(),o=e[0],s=this.zones[0],n=[o.left-s.left,o.top-s.top];for(const e of this.copiedTables){const o=In(e.zone,"both","MOVE",n);this.dispatch("CREATE_FILTER_TABLE",{sheetId:t,target:[o]});for(const s of ue(0,e.filtersValues.length))this.dispatch("UPDATE_FILTER",{sheetId:t,col:o.left+s,row:o.top,hiddenValues:e.filtersValues[s]})}}getClipboardContent(){return{[Jt.PlainText]:this.getPlainTextContent(),[Jt.Html]:this.getHTMLContent()}}getPlainTextContent(){return this.cells.map((e=>e.map((e=>this.getters.shouldShowFormulas()&&e?.cell?.isFormula?e.cell?.content||"":e?.evaluatedCell?.formattedValue||"")).join("\t"))).join("\n")||"\t"}getHTMLContent(){if(1===this.cells.length&&1===this.cells[0].length)return this.cells[0][0]?this.getters.getCellText(this.cells[0][0].position):"";let e='<table border="1" style="border-collapse:collapse">';for(const t of this.cells){e+="<tr>";for(const o of t){if(!o)continue;e+=`<td style="${hr(cr(this.getters.getCellComputedStyle(o.position)))}">`+xy(this.getters.getCellText(o.position))+"</td>"}e+="</tr>"}return e+="</table>",e}isColRowDirtyingClipboard(e,t){if(!this.zones)return!1;for(let o of this.zones){if("COL"===t&&e<=o.right)return!0;if("ROW"===t&&e<=o.bottom)return!0}return!1}drawClipboard(e){const{ctx:t,thinLineWidth:o}=e;if(this.sheetId===this.getters.getActiveSheetId()&&this.zones&&this.zones.length){t.setLineDash([8,5]),t.strokeStyle=c,t.lineWidth=3.3*o;for(const e of this.zones){const{x:o,y:s,width:n,height:i}=this.getters.getVisibleRect(e);n>0&&i>0&&t.strokeRect(o,s,n,i)}}}pasteCf(e,t){const o=ut(t.col,t.row);for(let s of this.getters.getConditionalFormats(e.sheetId))for(let n of s.ranges)if(bn(e.col,e.row,this.getters.getRangeFromSheetXC(e.sheetId,n).zone)){const n=s,i=[];if("CUT"===this.operation&&i.push(ut(e.col,e.row)),e.sheetId===t.sheetId)this.adaptCFRules(e.sheetId,n,[o],i);else{this.adaptCFRules(e.sheetId,n,[],i);const s=this.getCFToCopyTo(t.sheetId,n);this.adaptCFRules(t.sheetId,s,[o],[])}}}adaptCFRules(e,t,o,s){const n=this.getters.getAdaptedCfRanges(e,t,o,s);n&&(0!==n.length?this.dispatch("ADD_CONDITIONAL_FORMAT",{cf:{id:t.id,rule:t.rule,stopIfTrue:t.stopIfTrue},ranges:n.map((t=>this.getters.getRangeDataFromXc(e,t))),sheetId:e}):this.dispatch("REMOVE_CONDITIONAL_FORMAT",{id:t.id,sheetId:e}))}getCFToCopyTo(e,t){const o=this.getters.getConditionalFormats(e).find((e=>e.stopIfTrue===t.stopIfTrue&&Fe(e.rule,t.rule)));return o||{...t,id:this.uuidGenerator.uuidv4(),ranges:[]}}pasteDataValidation(e,t){const o=this.getters.getValidationRuleForCell(e);if(!o)return;const s=ut(t.col,t.row);for(const n of o.ranges)if(bn(e.col,e.row,n.zone)){const n=[];if("CUT"===this.operation&&n.push(ut(e.col,e.row)),e.sheetId===t.sheetId)this.adaptDataValidationRule(e.sheetId,o,[s],n);else{this.adaptDataValidationRule(e.sheetId,o,[],n);let i=this.getDataValidationRuleToCopyTo(t.sheetId,o);this.adaptDataValidationRule(t.sheetId,i,[s],[])}}}getDataValidationRuleToCopyTo(e,t){const o=this.getters.getDataValidationRules(e).find((e=>Fe(t.criterion,e.criterion)&&t.isBlocking===e.isBlocking));return o||{...t,id:this.uuidGenerator.uuidv4(),ranges:[]}}adaptDataValidationRule(e,t,o,s){const n=t.ranges.map((t=>this.getters.getRangeString(t,e))),i=Cn([...n,...o],s);0!==i.length?this.dispatch("ADD_DATA_VALIDATION_RULE",{rule:t,ranges:i.map((t=>this.getters.getRangeDataFromXc(e,t))),sheetId:e}):this.dispatch("REMOVE_DATA_VALIDATION_RULE",{sheetId:e,id:t.id})}}const jI="#8B008B";var XI;!function(e){e[e.previous=-1]="previous",e[e.current=0]="current",e[e.next=1]="next"}(XI||(XI={}));class KI extends Jx{inputHasSingleRange;static layers=[1];static getters=[];ranges=[];focusedRangeIndex=null;inputSheetId;constructor(e,t,o){if(o&&t.length>1)throw new Error("Input with a single range cannot be instantiated with several range references.");super(e),this.inputHasSingleRange=o,this.insertNewRange(0,t),this.inputSheetId=this.getters.getActiveSheetId(),0===this.ranges.length&&(this.insertNewRange(this.ranges.length,[""]),this.focusLast())}allowDispatch(e){switch(e.type){case"ADD_RANGE":case"ADD_EMPTY_RANGE":if(this.inputHasSingleRange&&1===this.ranges.length)return"MaximumRangesReached";break;case"REMOVE_RANGE":if(1===this.ranges.length)return"MinimumRangesReached";break;case"CHANGE_RANGE":if(this.inputHasSingleRange&&e.value.split(",").length>1)return"MaximumRangesReached"}return"Success"}handleEvent(e){if(null===this.focusedRangeIndex)return;const t=this.inputSheetId,o=this.getters.getActiveSheetId(),s=e.options.unbounded?this.getters.getUnboundedZone(o,e.anchor.zone):e.anchor.zone,n=this.getters.getRangeFromZone(o,s);if("newAnchor"===e.mode&&!this.inputHasSingleRange&&""!==this.ranges[this.focusedRangeIndex].xc.trim()){const e=this.getters.getSelectionRangeString(n,t);this.insertNewRange(this.ranges.length,[e]),this.focusLast()}else{let e=n.parts;const o=this.ranges[this.focusedRangeIndex].xc.trim();o&&(e=this.getters.getRangeFromSheetXC(t,o).parts);const s=n.clone({parts:e}),i=this.getters.getSelectionRangeString(s,t);this.setRange(this.focusedRangeIndex,[i])}}handle(e){switch(e.type){case"UNFOCUS_SELECTION_INPUT":this.unfocus();break;case"FOCUS_RANGE":this.focus(this.getIndex(e.rangeId));break;case"CHANGE_RANGE":{const t=this.getIndex(e.rangeId);if(null!==t&&this.focusedRangeIndex!==t&&this.focus(t),null!==t){const o=e.value.replace(/^,+/,"").split(",").map((e=>e.trim()));this.setRange(t,o)}break}case"ADD_EMPTY_RANGE":this.insertNewRange(this.ranges.length,[""]),this.focusLast();break;case"ADD_RANGE":this.insertNewRange(this.ranges.length,[e.value]),this.focusLast();break;case"REMOVE_RANGE":const t=this.getIndex(e.rangeId);null!==t&&this.removeRange(t);break;case"ACTIVATE_SHEET":if(e.sheetIdFrom!==e.sheetIdTo){const{col:t,row:o}=this.getters.getNextVisibleCellPosition({sheetId:e.sheetIdTo,col:0,row:0}),s=this.getters.expandZone(e.sheetIdTo,An({col:t,row:o}));this.selection.resetAnchor(this,{cell:{col:t,row:o},zone:s})}break;case"START_CHANGE_HIGHLIGHT":const o=this.getters.getActiveSheetId(),s=this.getters.expandZone(o,e.zone),n=this.ranges.findIndex((e=>{const{xc:t,sheetName:n}=on(e.xc),i=n||this.getters.getSheetName(this.inputSheetId);if(this.getters.getSheetName(o)!==i)return!1;const r=this.getters.getRangeFromSheetXC(o,t);return fn(this.getters.expandZone(o,r.zone),s)}));if(-1!==n){this.focus(n);const{left:e,top:t}=s;this.selection.resetAnchor(this,{cell:{col:e,row:t},zone:s})}}}getSelectionInputValue(){return this.cleanInputs(this.ranges.map((e=>e.xc?e.xc:"")))}getSelectionInputHighlights(){return this.ranges.map((e=>this.inputToHighlights(e))).flat()}focus(e){this.focusedRangeIndex=e}focusLast(){this.focus(this.ranges.length-1)}unfocus(){this.focusedRangeIndex=null}setContent(e,t){this.ranges[e]={...this.ranges[e],xc:t}}insertNewRange(e,t){const o=Math.max(0,...this.ranges.map((e=>Number(e.id))));this.ranges.splice(e,0,...t.map(((e,t)=>({xc:e,id:o+t+1,color:Ze[(o+t)%Ze.length]}))))}setRange(e,t){const[,...o]=t;this.setContent(e,t[0]),this.insertNewRange(e+1,o),o.length&&this.focus(e+o.length)}removeRange(e){this.ranges.splice(e,1),null!==this.focusedRangeIndex&&this.focusLast()}inputToHighlights({xc:e,color:t}){const o=this.cleanInputs([e]).filter((e=>this.getters.isRangeValid(e))).filter((e=>this.shouldBeHighlighted(this.inputSheetId,e)));return o.map((e=>{const{sheetName:o}=on(e);return{zone:this.getters.getRangeFromSheetXC(this.inputSheetId,e).zone,sheetId:o&&this.getters.getSheetIdByName(o)||this.inputSheetId,color:t}}))}cleanInputs(e){return e.map((e=>e.split(","))).flat().map((e=>e.trim())).filter((e=>""!==e))}shouldBeHighlighted(e,t){const{sheetName:o}=on(t),s=this.getters.getSheetIdByName(o),n=this.getters.getActiveSheet().id;return this.getters.isRangeValid(t)&&(s===n||void 0===s&&n===e)}getIndex(e){const t=this.ranges.findIndex((t=>t.id===e));return t>=0?t:null}}const QI=[JI,function(e,t){return"target"in t&&Array.isArray(t.target)?{...le(t),target:e.getSelectedZones()}:t},function(e,t){if(!("row"in t)||!("col"in t))return t;const{col:o,row:s}=e.getActivePosition();return{...le(t),col:o,row:s}}];function JI(e,t){return"sheetId"in t?{...le(t),sheetId:e.getActiveSheetId()}:t}function eR(e,t){return"zone"in t?{...le(t),zone:e.getSelectedZone()}:t}const tR=new Kn;function oR(e,t){const o=e.getSelectedZone();return{...JI(e,t),elements:"COL"===t.dimension?ue(o.left,o.right+1):ue(o.top,o.bottom+1)}}function sR(e,t){const o=e.getSelectedZone();return{...le(t),zone:o}}function nR(e,t){const o=le(t),s=e.getSelectedZone(),{top:n,bottom:i,left:r,right:a}=s;return"cols"in o?o.cols=ue(r,a+1):"rows"in o&&(o.rows=ue(n,i+1)),o}function iR(e,t){const o=e.getSelectedZone();return{...JI(e,t),start:"COL"===t.dimension?o.left:o.top,end:"COL"===t.dimension?o.right:o.bottom}}const rR=new Pi;rR.add("UPDATE_CELL",lR),rR.add("CLEAR_CELL",lR),rR.add("DELETE_CONTENT",lR),rR.add("ADD_MERGE",lR),rR.add("REMOVE_MERGE",lR),rR.add("SET_FORMATTING",lR),rR.add("CLEAR_FORMATTING",lR),rR.add("SET_BORDER",lR),rR.add("CREATE_FILTER_TABLE",lR),rR.add("REMOVE_FILTER_TABLE",lR),rR.add("HIDE_SHEET",lR),rR.add("ADD_COLUMNS_ROWS",(function(e,t){const o=e.getActivePosition();return{...JI(e,t),base:"COL"===t.dimension?o.col:o.row}})),rR.add("REMOVE_COLUMNS_ROWS",oR),rR.add("HIDE_COLUMNS_ROWS",oR),rR.add("RESIZE_COLUMNS_ROWS",oR),rR.add("CREATE_SHEET",(function(e,t){const o=le(t);o.sheetId=tR.uuidv4();const s=t.name||e.getSheet(e.getActiveSheetId()).name,n=s.match(/(.+?)\d*$/)?.[1]||s;return o.name=e.getNextSheetName(n),o})),rR.add("CREATE_FIGURE",(function(e,t){const o=JI(e,t);return o.figure.id=tR.uuidv4(),o})),rR.add("CREATE_CHART",(function(e,t){return{...JI(e,t),id:tR.uuidv4()}})),rR.add("CREATE_IMAGE",(function(e,t){return{...JI(e,t),figureId:tR.uuidv4()}})),rR.add("GROUP_HEADERS",iR),rR.add("UNGROUP_HEADERS",iR),rR.add("UNGROUP_HEADERS",iR),rR.add("UNFOLD_HEADER_GROUPS_IN_ZONE",eR),rR.add("FOLD_HEADER_GROUPS_IN_ZONE",eR);const aR=new Pi;function lR(e,t){let o=le(t);for(const t of QI)o=t(e,o);return o}function cR(e,t){if(!t)return;if(!rR.contains(t.type))return;return rR.get(t.type)(e,t)}function hR(e,t){if(e.rootCommand&&"object"==typeof e.rootCommand)return io(e.rootCommand)?cR(t,e.rootCommand):function(e,t,o){if(!aR.contains(t.type))return;return aR.get(t.type)(e,t,o)}(t,e.rootCommand,e.commands)}aR.add("STOP_EDITION",(function(e,t,o){return o.map((t=>cR(e,t))).filter(Ie)})),aR.add("PASTE",(function(e,t){return{type:"REPEAT_PASTE",pasteOption:le(t.pasteOption),target:e.getSelectedZones()}})),aR.add("INSERT_CELL",sR),aR.add("DELETE_CELL",sR),aR.add("AUTORESIZE_COLUMNS",nR),aR.add("AUTORESIZE_ROWS",nR),aR.add("SORT_CELLS",(function(e,t){const o=e.getSelectedZone();return{...JI(e,t),col:o.left,row:o.top,zone:o}})),aR.add("SUM_SELECTION",lR),aR.add("SET_DECIMAL",lR);class dR{operation;getters;dispatch;sheetId;copiedFigure;copiedFigureContent;constructor(e,t,o){this.operation=e,this.getters=t,this.dispatch=o,this.sheetId=t.getActiveSheetId();const s=t.getSelectedFigureId();if(!s)throw new Error("No figure selected");const n=t.getFigure(this.sheetId,s);if(!n)throw new Error(`No figure for the given id: ${s}`);switch(this.copiedFigure={...n},n.tag){case"chart":this.copiedFigureContent=new uR(o,t,this.sheetId,s);break;case"image":this.copiedFigureContent=new gR(o,t,this.sheetId,s);break;default:throw new Error(`Unknow tag '${n.tag}' for the given figure id: ${s}`)}}isCutAllowed(e){return"Success"}isPasteAllowed(e,t){return 0===e.length?"EmptyTarget":void 0!==t?.pasteOption?"WrongFigurePasteOption":"Success"}paste(e){const t=this.getters.getActiveSheetId(),{width:o,height:s}=this.copiedFigure,n=this.getters.getNumberCols(t),i=this.getters.getNumberRows(t),r=this.getters.getColDimensions(t,e[0].left).start,a=this.getters.getRowDimensions(t,e[0].top).start,l=this.getters.getColDimensions(t,n-1).end,c=this.getters.getRowDimensions(t,i-1).end,h={x:l<o?0:Math.min(r,l-o),y:c<s?0:Math.min(a,c-s)},d=(new Kn).uuidv4();this.copiedFigureContent.paste(t,d,h,{height:s,width:o}),"CUT"===this.operation&&this.dispatch("DELETE_FIGURE",{sheetId:this.copiedFigureContent.sheetId,id:this.copiedFigure.id}),this.dispatch("SELECT_FIGURE",{id:d})}getClipboardContent(){return{[Jt.PlainText]:"\t"}}isColRowDirtyingClipboard(e,t){return!1}drawClipboard(e){}}class uR{dispatch;sheetId;copiedChart;constructor(e,t,o,s){this.dispatch=e,this.sheetId=o;const n=t.getChart(s);if(!n)throw new Error(`No chart for the given id: ${s}`);this.copiedChart=n.copyInSheetId(o)}paste(e,t,o,s){const n=this.copiedChart.copyInSheetId(e);this.dispatch("CREATE_CHART",{id:t,sheetId:e,position:o,size:s,definition:n.getDefinition()})}}class gR{dispatch;sheetId;copiedImage;constructor(e,t,o,s){this.dispatch=e,this.sheetId=o;const n=t.getImage(s);this.copiedImage=le(n)}paste(e,t,o,s){const n=le(this.copiedImage);this.dispatch("CREATE_IMAGE",{figureId:t,sheetId:e,position:o,size:s,definition:n})}}function pR(e,t){return e.startsWith("=")?function(e,t){return function(e,t,o){if(t.formulaArgSeparator===o.formulaArgSeparator&&t.decimalSeparator===o.decimalSeparator)return e;const s=Br(e,t);let n="";for(const e of s)"NUMBER"===e.type?n+=e.value.replace(t.decimalSeparator,o.decimalSeparator):"ARG_SEPARATOR"===e.type?n+=o.formulaArgSeparator:n+=e.value;return n}(e,t,ho)}(e,t):ra(e,t)}class mR extends ZI{values;constructor(e,t,o,s){super("COPY",t,o,s),this.values=e.replace(/\r/g,"").split("\n").map((e=>e.split("\t")))}isPasteAllowed(e,t){const o=this.getters.getActiveSheetId(),s=this.getPasteZone(e);return this.getters.doesIntersectMerge(o,s)?"WillRemoveExistingMerge":"Success"}paste(e,t){if("onlyFormat"===t?.pasteOption)return;const o=this.values,s=this.getPasteZone(e),{left:n,top:i}=s,{numberOfCols:r,numberOfRows:a}=wn(s),l=this.getters.getActiveSheetId(),c=this.getters.getLocale();this.addMissingDimensions(r,a,n,i);for(let e=0;e<o.length;e++)for(let t=0;t<o[e].length;t++)this.dispatch("UPDATE_CELL",{row:i+e,col:n+t,content:pR(o[e][t],c),sheetId:l});const h={left:n,top:i,right:n+r-1,bottom:i+a-1};this.selection.getBackToDefault(),this.selection.selectZone({cell:{col:n,row:i},zone:h},{scrollIntoView:!1})}getClipboardContent(){return{[Jt.PlainText]:this.values.map((e=>e.join("\t"))).join("\n")}}getPasteZone(e){const t=this.values.length,o=Math.max(...this.values.map((e=>e.length))),{left:s,top:n}=e[0];return{top:n,left:s,bottom:n+t-1,right:s+o-1}}}const fR=Xt("The cell you are trying to edit has been deleted.");const vR=[{name:Xt("Sum"),types:[Qt.number],compute:(e,t)=>Qc([[e]],t)},{name:Xt("Avg"),types:[Qt.number],compute:(e,t)=>hd([[e]],t)},{name:Xt("Min"),types:[Qt.number],compute:(e,t)=>pd([[e]],t)},{name:Xt("Max"),types:[Qt.number],compute:(e,t)=>gd([[e]],t)},{name:Xt("Count"),types:[Qt.number,Qt.text,Qt.boolean,Qt.error],compute:e=>ud([[e]])},{name:Xt("Count Numbers"),types:[Qt.number,Qt.text,Qt.boolean,Qt.error],compute:(e,t)=>dd([[e]],t)}];class bR{getters;sheetId;boundaries;top;bottom;left;right;offsetX;offsetY;offsetScrollbarX;offsetScrollbarY;canScrollVertically;canScrollHorizontally;viewportWidth;viewportHeight;offsetCorrectionX;offsetCorrectionY;constructor(e,t,o,s,n,i){this.getters=e,this.sheetId=t,this.boundaries=o,this.viewportWidth=s.width,this.viewportHeight=s.height,this.offsetScrollbarX=i.x,this.offsetScrollbarY=i.y,this.canScrollVertically=n.canScrollVertically,this.canScrollHorizontally=n.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,size:s}=this.getters.getColDimensions(this.sheetId,e),{end:n,size:i}=this.getters.getRowDimensions(this.sheetId,t),r=this.searchHeaderIndex("COL",o-this.viewportWidth,0),a=this.getters.getColSize(this.sheetId,r),l=this.searchHeaderIndex("ROW",n-this.viewportHeight,0),c=this.getters.getRowSize(this.sheetId,l);let h=o-this.offsetCorrectionX;this.canScrollHorizontally&&(h+=Math.max(T,Math.min(a,this.viewportWidth-s)),h=Math.max(h,this.viewportWidth));let d=n-this.offsetCorrectionY;return this.canScrollVertically&&(d+=Math.max(A+5,Math.min(c,this.viewportHeight-i)),d=Math.max(d,this.viewportHeight)),n+D>d&&!this.getters.isReadonly()&&(d+=D),{width:h,height:d}}getColIndex(e){return e<this.offsetCorrectionX||e>this.offsetCorrectionX+this.viewportWidth?-1:this.searchHeaderIndex("COL",e-this.offsetCorrectionX,this.left)}getRowIndex(e){return e<this.offsetCorrectionY||e>this.offsetCorrectionY+this.viewportHeight?-1:this.searchHeaderIndex("ROW",e-this.offsetCorrectionY,this.top)}adjustPosition(e){const t=this.sheetId,o=this.getters.getMainCellPosition({sheetId:t,...e}),{col:s,row:n}=this.getters.getNextVisibleCellPosition(o);bn(s,this.boundaries.top,this.boundaries)&&this.adjustPositionX(s),bn(this.boundaries.left,n,this.boundaries)&&this.adjustPositionY(n)}adjustPositionX(e){const t=this.sheetId,{end:o}=this.getters.getColDimensions(t,e);if(this.offsetX+this.offsetCorrectionX+this.viewportWidth<o){const o=this.getters.getNumberCols(t);let s=e;for(;this.getters.isColHidden(t,s)&&s<o;)s++;const n=this.getters.getColDimensions(t,s).end,i=this.searchHeaderIndex("COL",n-this.viewportWidth-this.offsetCorrectionX,this.boundaries.left);this.offsetScrollbarX=this.getters.getColDimensions(t,i).end-this.offsetCorrectionX}else if(this.left>e){let o=e;for(;this.getters.isColHidden(t,o)&&o>0;)o--;this.offsetScrollbarX=this.getters.getColDimensions(t,o).start-this.offsetCorrectionX}this.adjustViewportZoneX()}adjustPositionY(e){const t=this.sheetId,{end:o}=this.getters.getRowDimensions(t,e);if(this.offsetY+this.viewportHeight+this.offsetCorrectionY<o){const o=this.getters.getNumberRows(t);let s=e;for(;this.getters.isRowHidden(t,s)&&s<o;)s++;const n=this.getters.getRowDimensions(t,s).end,i=this.searchHeaderIndex("ROW",n-this.viewportHeight-this.offsetCorrectionY,this.boundaries.top);this.offsetScrollbarY=this.getters.getRowDimensions(t,i).end-this.offsetCorrectionY}else if(this.top>e){let o=e;for(;this.getters.isRowHidden(t,o)&&o>0;)o--;this.offsetScrollbarY=this.getters.getRowDimensions(t,o).start-this.offsetCorrectionY}this.adjustViewportZoneY()}setViewportOffset(e,t){this.setViewportOffsetX(e),this.setViewportOffsetY(t)}adjustViewportZone(){this.adjustViewportZoneX(),this.adjustViewportZoneY()}getRect(e){const t=mn(e,this);if(t){return{x:this.getters.getColRowOffset("COL",this.left,t.left)+this.offsetCorrectionX,y:this.getters.getColRowOffset("ROW",this.top,t.top)+this.offsetCorrectionY,width:Math.min(this.getters.getColRowOffset("COL",t.left,t.right+1),this.viewportWidth),height:Math.min(this.getters.getColRowOffset("ROW",t.top,t.bottom+1),this.viewportHeight)}}}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){const s=this.sheetId,n=this.getters.getNumberHeaders(s,e);let i=o,r=n;for(;i<=r&&i!==n&&-1!==r;){const n=Math.floor((i+r)/2),a=this.getters.getColRowOffset(e,o,n),l=this.getters.getHeaderSize(s,e,n);if(t>=a&&t<a+l)return n;t>=a+l?i=n+1:r=n-1}return-1}setViewportOffsetX(e){this.canScrollHorizontally&&(this.offsetScrollbarX=e,this.adjustViewportZoneX())}setViewportOffsetY(e){this.canScrollVertically&&(this.offsetScrollbarY=e,this.adjustViewportZoneY())}adjustViewportOffsetX(){if(this.canScrollHorizontally){const{width:e}=this.getMaxSize();this.viewportWidth+this.offsetScrollbarX>e&&(this.offsetScrollbarX=Math.max(0,e-this.viewportWidth))}this.adjustViewportZoneX()}adjustViewportOffsetY(){if(this.canScrollVertically){const{height:e}=this.getMaxSize();this.viewportHeight+this.offsetScrollbarY>e&&(this.offsetScrollbarY=Math.max(0,e-this.viewportHeight))}this.adjustViewportZoneY()}adjustViewportZoneX(){const e=this.sheetId;this.left=this.searchHeaderIndex("COL",this.offsetScrollbarX,this.boundaries.left),this.right=Math.min(this.boundaries.right,this.searchHeaderIndex("COL",this.viewportWidth,this.left)),-1===this.left&&(this.left=this.boundaries.left),-1===this.right&&(this.right=this.getters.getNumberCols(e)-1),this.offsetX=this.getters.getColDimensions(e,this.left).start-this.getters.getColDimensions(e,this.boundaries.left).start}adjustViewportZoneY(){const e=this.sheetId;this.top=this.searchHeaderIndex("ROW",this.offsetScrollbarY,this.boundaries.top),this.bottom=Math.min(this.boundaries.bottom,this.searchHeaderIndex("ROW",this.viewportHeight,this.top)),-1===this.top&&(this.top=this.boundaries.top),-1===this.bottom&&(this.bottom=this.getters.getNumberRows(e)-1),this.offsetY=this.getters.getRowDimensions(e,this.top).start-this.getters.getRowDimensions(e,this.boundaries.top).start}}const SR=(new Pi).add("settings",class extends dx{static getters=["getLocale"];locale=ho;allowDispatch(e){return"UPDATE_LOCALE"===e.type?Jr(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,n]of Object.entries(this.getters.getCells(o))){let o;if(n.format===e.dateFormat&&(o=t.dateFormat),n.format===e.timeFormat&&(o=t.timeFormat),n.format===da(e)&&(o=da(t)),o){const{col:e,row:t,sheetId:n}=this.getters.getCellPosition(s);this.dispatch("UPDATE_CELL",{col:e,row:t,sheetId:n,format:o})}}}import(e){this.locale=e.settings?.locale??ho}export(e){e.settings={locale:this.locale}}}).add("sheet",class extends dx{static getters=["getSheetName","tryGetSheetName","getSheet","tryGetSheet","getSheetIdByName","getSheetIds","getVisibleSheetIds","isSheetVisible","getEvaluationSheets","doesHeaderExist","doesHeadersExist","getCell","getCellPosition","getColsZone","getRowCells","getRowsZone","getNumberCols","getNumberRows","getNumberHeaders","getGridLinesVisibility","getNextSheetName","isEmpty","getSheetSize","getSheetZone","getPaneDivisions","checkZonesExistInSheet","getCommandZones","getUnboundedZone","checkElementsIncludeAllNonFrozenHeaders"];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"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"DELETE_SHEET":return this.orderedSheetIds.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=Math.min(...e.elements),o=Math.max(...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"DELETE_CONTENT":this.clearZones(e.sheetId,e.target);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.name);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);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(let t of e.sheets)this.sheetIdsMapName[t.name]=t.id;for(let t of e.sheets){const e=t.name||Xt("Sheet")+(Object.keys(this.sheets).length+1),{colNumber:o,rowNumber:s}=this.getImportedSheetSize(t),n={id:t.id,name:e,numberOfCols:o,rows:kn(s),areGridLinesVisible:void 0===t.areGridLinesVisible||t.areGridLinesVisible,isVisible:t.isVisible,panes:{xSplit:t.panes?.xSplit||0,ySplit:t.panes?.ySplit||0}};this.orderedSheetIds.push(n.id),this.sheets[n.id]=n}}exportSheets(e){e.sheets=this.orderedSheetIds.filter(Ie).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:{},conditionalFormats:[],figures:[],filterTables:[],areGridLinesVisible:void 0===t.areGridLinesVisible||t.areGridLinesVisible,isVisible:t.isVisible};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=ce(e);for(const e in this.sheetIdsMapName)if(e.toUpperCase()===t.toUpperCase())return this.sheetIdsMapName[e]}}getSheetIds(){return this.orderedSheetIds}getVisibleSheetIds(){return this.orderedSheetIds.filter(this.isSheetVisible.bind(this))}getEvaluationSheets(){return this.sheets}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)))}getRow(e,t){const o=this.getSheet(e).rows[t];if(!o)throw new Error(`Row ${o} not found.`);return o}getCell({sheetId:e,col:t,row:o}){const s=this.tryGetSheet(e),n=s?.rows[o]?.cells[t];if(void 0!==n)return this.getters.getCellById(n)}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(Ie)}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"){let t=1;const o=this.orderedSheetIds.map(this.getSheetName.bind(this));let s=`${e}${t}`;for(;o.includes(s);)s=`${e}${t}`,t++;return s}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){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),n="ROW"===t?s.ySplit:s.xSplit,i=this.getters.getNumberHeaders(e,t);if(!n)return!1;return De(o,ue(n,i))}isEmpty(e,t){return xn(t).map((({col:t,row:o})=>this.getCell({sheetId:e,col:t,row:o}))).every((e=>!e||""===e.content))}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&&"row"in e&&t.push({top:e.row,left:e.col,bottom:e.row,right:e.col}),t}checkZonesExistInSheet(e,t){if(!t.every(an))return"InvalidRange";if(t.length){const o=this.getSheetZone(e);return t.every((e=>Sn(e,o)))?"Success":"TargetOutOfSheet"}return"Success"}updateCellPosition(e){const{sheetId:t,cellId:o,col:s,row:n}=e;o?this.setNewPosition(o,t,s,n):this.clearPosition(t,s,n)}setNewPosition(e,t,o,s){const n=this.cellPosition[e];n&&this.clearPosition(t,n.col,n.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)}clearZones(e,t){for(let o of t)for(let t=o.left;t<=o.right;t++)for(let s=o.top;s<=o.bottom;s++){this.sheets[e].rows[s].cells[t]&&this.dispatch("UPDATE_CELL",{sheetId:e,content:"",col:t,row:s})}}createSheet(e,t,o,s,n){const i={id:e,name:t,numberOfCols:o,rows:kn(s),areGridLinesVisible:!0,isVisible:!0,panes:{xSplit:0,ySplit:0}},r=this.orderedSheetIds.slice();r.splice(n,0,i.id);const a=this.sheets;return this.history.update("orderedSheetIds",r),this.history.update("sheets",Object.assign({},a,{[i.id]:i})),i}moveSheet(e,t){const o=this.orderedSheetIds.slice(),s=o.findIndex((t=>t===e)),n=o.splice(s,1);let i=this.findIndexOfTargetSheet(s,t);o.splice(i,0,n[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(Xt("There is not enough visible sheets"))}checkSheetName(e){const t=this.getters.tryGetSheetName(e.sheetId);if(void 0!==t&&e.name===t)return"UnchangedSheetName";const{orderedSheetIds:o,sheets:s}=this,n=e.name&&e.name.trim().toLowerCase();return o.find((t=>s[t]?.name.toLowerCase()===n&&t!==e.sheetId))?"DuplicatedSheetName":J.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(let 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(let o of t)if(o.left<e.quantity&&e.quantity<=o.right)return"MergeOverlap";return"Success"}isRenameAllowed(e){return e.name&&e.name.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){const o=this.getSheet(e),s=this.getDuplicateSheetName(o.name),n=le(o);n.id=t,n.name=s;for(let e=0;e<=n.numberOfCols;e++)for(let t=0;t<=n.rows.length;t++)n.rows[t]&&(n.rows[t].cells[e]=void 0);const i=this.orderedSheetIds.slice(),r=i.indexOf(e);i.splice(r+1,0,n.id),this.history.update("orderedSheetIds",i),this.history.update("sheets",Object.assign({},this.sheets,{[n.id]:n}));for(const t of Object.values(this.getters.getCells(e))){const{col:e,row:o}=this.getCellPosition(t.id);this.dispatch("UPDATE_CELL",{sheetId:n.id,col:e,row:o,content:t.content,format:t.format,style:t.style})}const a=Object.assign({},this.sheetIdsMapName);a[n.name]=n.id,this.history.update("sheetIdsMapName",a)}getDuplicateSheetName(e){let t=1;const o=this.orderedSheetIds.map(this.getSheetName.bind(this)),s=Xt("Copy of %s",e);let n=s.toString();for(;o.includes(n);)n=`${s} (${t})`,t++;return n}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(),n=s.indexOf(e.id);s.splice(n,1),this.history.update("orderedSheetIds",s);const i=Object.assign({},this.sheetIdsMapName);delete i[t],this.history.update("sheetIdsMapName",i)}removeColumns(e,t){t.sort(((e,t)=>t-e));for(let 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(let o of ge(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 n="before"===o?t:t+1;this.moveCellsOnAddition(e,n,s,"columns");const i=this.sheets[e.id].numberOfCols;this.history.update("sheets",e.id,"numberOfCols",i+s),n<e.panes.xSplit&&this.setPaneDivisions(e.id,e.panes.xSplit+s,"COL")}addRows(e,t,o,s){const n="before"===o?t:t+1;this.addEmptyRows(e,s),this.moveCellsOnAddition(e,n,s,"rows"),n<e.panes.ySplit&&this.setPaneDivisions(e.id,e.panes.ySplit+s,"ROW")}moveCellOnColumnsDeletion(e,t){for(let o=0;o<e.rows.length;o++){const s=e.rows[o];for(let n in s.cells){const i=Number(n),r=s.cells[n];r&&(i===t&&this.dispatch("CLEAR_CELL",{sheetId:e.id,col:i,row:o}),i>t&&this.dispatch("UPDATE_CELL_POSITION",{sheetId:e.id,cellId:r,col:i-1,row:o}))}}}moveCellsOnAddition(e,t,o,s){const n=[];for(let i=0;i<e.rows.length;i++){const r=e.rows[i];if("rows"!==s||i>=t)for(let a in r.cells){const l=Number(a),c=r.cells[a];c&&("rows"===s||l>=t)&&n.push({type:"UPDATE_CELL_POSITION",sheetId:e.id,cellId:c,col:l+("columns"===s?o:0),row:i+("rows"===s?o:0)})}}for(let e of n.reverse())this.dispatch(e.type,e)}moveCellOnRowsDeletion(e,t,o){const s=o-t+1;for(let n=0;n<e.rows.length;n++){const i=e.rows[n];if(n>=t&&n<=o)for(let t in i.cells){const o=Number(t);i.cells[t]&&this.dispatch("CLEAR_CELL",{sheetId:e.id,col:o,row:n})}if(n>o)for(let t in i.cells){const o=Number(t),r=i.cells[t];r&&this.dispatch("UPDATE_CELL_POSITION",{sheetId:e.id,cellId:r,col:o,row:n-s})}}}updateRowsStructureOnDeletion(e,t,o){const s=[],n=e.rows.map((e=>e.cells)).reverse();for(let i in e.rows){const e=Number(i);e>=t&&e<=o||s.push({cells:n.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(dt);let o=e.rowNumber,s=e.colNumber;for(let{col:e,row:n}of t)o=Math.max(o,n+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?this.checkZonesExistInSheet(e.sheetId,this.getCommandZones(e)):"Success"}}).add("header grouping",class extends dx{static getters=["getHeaderGroups","getGroupsLayers","getVisibleGroupLayers","getHeaderGroup","getHeaderGroupsInZone","isGroupFolded","isRowFolded","isColFolded"];groups={};allowDispatch(e){switch(e.type){case"GROUP_HEADERS":{const{start:t,end:o}=e;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}=e;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":const t=this.findGroupWithStartEnd(e.sheetId,e.dimension,e.start,e.end);if(!t)return"UnknownHeaderGroup";if(ue(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=le(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=Ne(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(),n="ROW"===e.dimension?e.zone.top:e.zone.left,i="ROW"===e.dimension?e.zone.bottom:e.zone.right,r=new Set;for(let e=n;e<=i;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,n="ROW"===t?o.bottom:o.right;return this.doGroupOverlap(e,s,n)}))}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 n=s[o];if(0===n.start)continue;ue(n.start-1,n.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 n={};for(const t of e)n[this.getGroupId(t)]=t.isFolded;const i={};for(const t of e)for(let e=t.start;e<=t.end;e++)i[e]=i[e]?i[e]+1:1;for(let e=t;e<=o;e++)i[e]=i[e]?i[e]+s:s;const r=Math.max(...Object.values(i),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=i[o]||0;for(let t=0;t<e;t++){const e=a[t].at(-1);if(e&&Ue([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=n[this.getGroupId(t)];return a}groupHeaders(e,t,o,s){const n=this.getHeaderGroups(e,t),i=this.bricksFallingAlgorithm(n,o,s,1).flat();this.history.update("groups",e,t,this.removeDuplicateGroups(i))}unGroupHeaders(e,t,o,s){const n=this.getHeaderGroups(e,t),i=this.bricksFallingAlgorithm(n,o,s,-1).flat();this.history.update("groups",e,t,this.removeDuplicateGroups(i))}moveGroupsOnHeaderInsertion(e,t,o,s){const n=this.groups[e][t];for(let i=0;i<n.length;i++){const r=n[i],[a,l]=Vn(o,s,[r.start,r.end]);a===r.start&&l===r.end||this.history.update("groups",e,t,i,{...r,start:a,end:l})}}moveGroupsOnHeaderDeletion(e,t,o){const s=this.getHeaderGroups(e,t),n=[];for(const e of s){const t=Un(o,ue(e.start,e.end+1));0!==t.length&&n.push({...e,start:Math.min(...t),end:Math.max(...t)})}this.history.update("groups",e,t,this.bricksFallingAlgorithm(n,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 n=this.getters.getHeaderGroups(e,t);for(let s=0;s<n.length;s++){const i=n[s];i.start===o.start&&i.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 n=this.getters.getHeaderGroups(e,t);for(let s=0;s<n.length;s++){const i=n[s];i.start===o.start&&i.end>=o.end&&this.history.update("groups",e,t,s,"isFolded",!1)}}getGroupIndex(e,t,o,s){const n=this.groups[e][t].findIndex((e=>e.start===o&&e.end===s));return-1===n?void 0:n}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]}}).add("header visibility",class extends dx{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":Math.min(...e.elements)<0||Math.max(...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,le(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(let 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=Ne(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(let t of e.elements)this.history.update("hiddenHeaders",e.sheetId,e.dimension,t,!0);break;case"UNHIDE_COLUMNS_ROWS":for(let t of e.elements)this.history.update("hiddenHeaders",e.sheetId,e.dimension,t,!1)}}checkElementsIncludeAllVisibleHeaders(e,t,o){return De(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=ue(0,this.getters.getNumberHeaders(e,t)),s=[];return this.getters.getHeaderGroups(e,t).forEach((e=>{e.isFolded&&s.push(...ue(e.start,e.end+1))})),o.filter((o=>!this.hiddenHeaders[e][t][o]&&!s.includes(o)))}import(e){for(let 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(let 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("filters",class extends dx{static getters=["doesZonesContainFilter","getFilter","getFilters","getFilterTable","getFilterTables","getFilterTablesInZone","getFilterId","getFilterHeaders","isFilterHeader"];tables={};allowDispatch(e){switch(e.type){case"CREATE_FILTER_TABLE":if(!Mn(...e.target))return"NonContinuousTargets";const t=pn(...e.target),o=()=>this.getFilterTables(e.sheetId).some((e=>vn(e.zone,t)))?"FilterOverlap":"Success",s=()=>{const o=this.getters.getMergesInZone(e.sheetId,t);for(let e of o)if(vn(t,e))return"MergeInFilter";return"Success"};return this.checkValidations(e,o,s);case"ADD_MERGE":for(let t of e.target)for(let o of this.getFilterTables(e.sheetId))if(vn(o.zone,t))return"MergeInFilter"}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 o={};for(const t of Object.values(this.tables[e.sheetId]||{}))if(t){const e=le(t);o[e.id]=e}this.history.update("tables",e.sheetIdTo,o);break;case"ADD_COLUMNS_ROWS":this.onAddColumnsRows(e);break;case"REMOVE_COLUMNS_ROWS":this.onDeleteColumnsRows(e);break;case"CREATE_FILTER_TABLE":{const t=pn(...e.target),o=this.createFilterTable(t);this.history.update("tables",e.sheetId,o.id,o);break}case"REMOVE_FILTER_TABLE":{const t={};for(const o of this.getFilterTables(e.sheetId))e.target.every((e=>!mn(e,o.zone)))&&(t[o.id]=o);this.history.update("tables",e.sheetId,t);break}case"UPDATE_CELL":{const t=e.sheetId;for(let o of this.getFilterTables(t))this.canUpdateCellCmdExtendTable(e,o)&&this.extendTableDown(t,o);break}}}getFilters(e){return this.getFilterTables(e).map((e=>e.filters)).flat()}getFilterTables(e){return this.tables[e]?Object.values(this.tables[e]).filter(Ie):[]}getFilter(e){return this.getFilterTable(e)?.filters.find((t=>t.col===e.col))}getFilterId(e){return this.getFilter(e)?.id}getFilterTable({sheetId:e,col:t,row:o}){return this.getFilterTables(e).find((e=>bn(t,o,e.zone)))}getFilterTablesInZone(e,t){return this.getFilterTables(e).filter((e=>Sn(e.zone,t)))}doesZonesContainFilter(e,t){for(const o of t)for(const t of this.getFilterTables(e))if(mn(o,t.zone))return!0;return!1}getFilterHeaders(e){const t=[];for(let o of this.getFilterTables(e)){const e=o.zone,s=e.top;for(let o=e.left;o<=e.right;o++)t.push({col:o,row:s})}return t}isFilterHeader({sheetId:e,col:t,row:o}){return this.getFilterHeaders(e).some((e=>e.col===t&&e.row===o))}onAddColumnsRows(e){for(const t of this.getFilterTables(e.sheetId)){const o=hn(t.zone,"COL"===e.dimension?"left":"top",e.base,e.position,e.quantity),s=[];for(const o of t.filters){const t=hn(o.zoneWithHeaders,"COL"===e.dimension?"left":"top",e.base,e.position,e.quantity);s.push(new jx(o.id,t))}if(s.length<wn(o).numberOfCols){for(let e=o.left;e<=o.right;e++)s.find((t=>t.col===e))||s.push(new jx(this.uuidGenerator.uuidv4(),{...o,left:e,right:e}));s.sort(((e,t)=>e.col-t.col))}this.history.update("tables",e.sheetId,t.id,"zone",o),this.history.update("tables",e.sheetId,t.id,"filters",s)}}onDeleteColumnsRows(e){for(const t of this.getFilterTables(e.sheetId)){if("ROW"===e.dimension&&e.elements.includes(t.zone.top)){const o={...this.tables[e.sheetId]};delete o[t.id],this.history.update("tables",e.sheetId,o);continue}const o=gn(t.zone,"COL"===e.dimension?"left":"top",e.elements);if(o){if(cn(o)!==cn(t.zone)){const s=[];for(const o of t.filters){const t=gn(o.zoneWithHeaders,"COL"===e.dimension?"left":"top",e.elements);t&&s.push(new jx(o.id,t))}this.history.update("tables",e.sheetId,t.id,"zone",o),this.history.update("tables",e.sheetId,t.id,"filters",s)}}else{const o={...this.tables[e.sheetId]};delete o[t.id],this.history.update("tables",e.sheetId,o)}}}createFilterTable(e){return new Yx(e)}extendTableDown(e,t){const o={...t.zone,bottom:t.zone.bottom+1};this.history.update("tables",e,t.id,"zone",o);for(let o=0;o<t.filters.length;o++){const s=t.filters[o],n={...s.zoneWithHeaders,bottom:s.zoneWithHeaders.bottom+1};this.history.update("tables",e,t.id,"filters",o,"zoneWithHeaders",n)}}canUpdateCellCmdExtendTable({content:e,sheetId:t,col:o,row:s},n){if(!e)return;const i=n.zone;if(!(i.bottom+1===s&&o>=i.left&&o<=i.right))return!1;for(const e of ue(i.left,i.right+1)){const o={sheetId:t,col:e,row:s},n=this.getters.getCell(o)?.content;if(n)return!1;if(this.getters.getFilter(o))return!1;if(this.getters.isInMerge(o))return!1}return!0}import(e){for(const t of e.sheets)for(const e of t.filterTables||[]){const o=this.createFilterTable(rn(e.range));this.history.update("tables",t.id,o.id,o)}}export(e){for(const t of e.sheets)for(const e of this.getFilterTables(t.id))t.filterTables.push({range:cn(e.zone)})}exportForExcel(e){this.export(e)}}).add("cell",class extends dx{static getters=["zoneToXC","getCells","getTranslatedCellFormula","getCellStyle","getCellById"];nextId=1;cells={};adaptRanges(e,t){for(const o of Object.keys(this.cells))for(const s of Object.values(this.cells[o]||{}))if(s.isFormula)for(const n of s.compiledFormula.dependencies)if(!t||n.sheetId===t){const t=e(n);"NONE"!==t.changeType&&this.history.update("cells",o,s.id,"compiledFormula","dependencies",s.compiledFormula.dependencies.indexOf(n),t.range)}}allowDispatch(e){switch(e.type){case"UPDATE_CELL":return this.checkCellOutOfSheet(e);case"CLEAR_CELL":return this.checkValidations(e,this.chainValidations(this.checkCellOutOfSheet,this.checkUselessClearCell));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:""})}}setFormatter(e,t,o){for(let s of t)for(let t=s.top;t<=s.bottom;t++)for(let n=s.left;n<=s.right;n++)this.dispatch("UPDATE_CELL",{sheetId:e,col:n,row:t,format:o})}clearFormatting(e,t){for(let 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,style:null,format:""})}handleAddColumnsRows(e,t){let o,s;"before"===e.position?(o=ue(e.base,e.base+e.quantity),s=e.base+e.quantity):(o=ue(e.base+1,e.base+e.quantity+1),s=e.base),t(e.sheetId,s,o)}import(e){for(let t of e.sheets)for(let o in t.cells){const s=t.cells[o],{col:n,row:i}=dt(o);if(s?.content||s?.format||s?.style){const o=this.importCell(t.id,s,e.styles,e.formats);this.history.update("cells",t.id,o.id,o),this.dispatch("UPDATE_CELL_POSITION",{cellId:o.id,col:n,row:i,sheetId:t.id})}}}export(e){const t={},o={};for(let s of e.sheets){const e={},n=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 n){const n=this.getters.getCell(s),i=ut(s.col,s.row),r=this.removeDefaultStyleValues(n.style);e[i]={style:Object.keys(r).length?Ae(r,t):void 0,format:n.format?Ae(n.format,o):void 0,content:n.content||void 0}}s.cells=e}e.styles=t,e.formats=o}importCell(e,t,o,s){const n=t.style&&o[t.style]||void 0,i=t.format&&s[t.format]||void 0,r=this.getNextUid();return this.createCell(r,t?.content||"",i,n,e)}exportForExcel(e){this.export(e)}removeDefaultStyleValues(e){const t={...e};for(const[e,o]of Object.entries(P))t[e]===o&&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]}getFormulaCellContent(e,t,o){let s=0;return Oe(t.tokens.map((t=>{if("REFERENCE"===t.type){const t=o[s++];return this.getters.getRangeString(t,e)}return t.value})))}getTranslatedCellFormula(e,t,o,s){const n=this.getters.createAdaptedRanges(s.dependencies,t,o,e);return this.getFormulaCellContent(e,s,n)}getCellStyle(e){return this.getters.getCell(e)?.style||{}}zoneToXC(e,t,o=[{colFixed:!1,rowFixed:!1}]){const s=ut((t=this.getters.expandZone(e,t)).left,t.top,o[0]),n=ut(t.right,t.bottom,o.length>1?o[1]:o[0]),i=this.getters.getMainCellPosition({sheetId:e,col:t.left,row:t.top}),r=this.getters.getMainCellPosition({sheetId:e,col:t.right,row:t.bottom}),a=i.col===r.col&&i.row===r.row;return s==n||a?s:s+":"+n}setStyle(e,t,o){for(let s of t)for(let t=s.left;t<=s.right;t++)for(let n=s.top;n<=s.bottom;n++){const s=this.getters.getCell({sheetId:e,col:t,row:n});this.dispatch("UPDATE_CELL",{sheetId:e,col:t,row:n,style:o?{...s?.style,...o}:void 0})}}copyColumnStyle(e,t,o){for(let s=0;s<this.getters.getNumberRows(e);s++){const n=this.getFormat(e,t,s);if(n.style||n.format)for(let t of o)this.dispatch("UPDATE_CELL",{sheetId:e,col:t,row:s,...n})}}copyRowStyle(e,t,o){for(let s=0;s<this.getters.getNumberCols(e);s++){const n=this.getFormat(e,s,t);if(n.style||n.format)for(let t of o)this.dispatch("UPDATE_CELL",{sheetId:e,col:s,row:t,...n})}}getFormat(e,t,o){const s={},n=this.getters.getMainCellPosition({sheetId:e,col:t,row:o}),i=this.getters.getCell(n);return i&&(i.style&&(s.style=i.style),i.format&&(s.format=i.format)),s}getNextUid(){const e=this.nextId.toString();return this.history.update("nextId",this.nextId+1),e}updateCell(e,t,o,s){const n=this.getters.getCell({sheetId:e,col:t,row:o}),i="content"in s||"formula"in s,r=i?Ve(s?.content):n?.content||"";let a;a=void 0!==s.style?s.style||void 0:n?n.style:void 0;const l=this.getters.getLocale();let c=("format"in s?s.format:n&&n.format)||Fs(r,l)||Ds(r);if((i&&!r&&!s.formula||!i&&(!n||""===n.content))&&!a&&!c)return void(n&&(this.history.update("cells",e,n.id,void 0),this.dispatch("UPDATE_CELL_POSITION",{cellId:void 0,col:t,row:o,sheetId:e})));const h=n?.id||this.getNextUid(),d=this.createCell(h,r,c,a,e);this.history.update("cells",e,d.id,d),this.dispatch("UPDATE_CELL_POSITION",{cellId:d.id,col:t,row:o,sheetId:e})}createCell(e,t,o,s,n){if(!t.startsWith("="))return this.createLiteralCell(e,t,o,s);try{return this.createFormulaCell(e,t,o,s,n)}catch(n){return this.createErrorFormula(e,t,o,s,n)}}createLiteralCell(e,t,o,s){const n=this.getters.getLocale();return o===lo||Ro(t)||(t=Lo(qi(t,n))),{id:e,content:t,style:s,format:o,isFormula:!1}}createFormulaCell(e,t,o,s,n){const i=Vx(t);return i.dependencies.length?this.createFormulaCellWithDependencies(e,i,o,s,n):{id:e,content:t,style:s,format:o,isFormula:!0,compiledFormula:{...i,dependencies:[]}}}createFormulaCellWithDependencies(e,t,o,s,n){const i=t.dependencies.map((e=>this.getters.getRangeFromSheetXC(n,e)));return new Wx(e,t,o,s,i,n,this.getters.getRangeString.bind(this))}createErrorFormula(e,t,o,s,n){return{id:e,content:t,style:s,format:o,isFormula:!0,compiledFormula:{tokens:Br(t),dependencies:[],execute:function(){throw n}}}}checkCellOutOfSheet(e){const{sheetId:t,col:o,row:s}=e;if(!this.getters.tryGetSheet(t))return"InvalidSheetId";return bn(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"}}).add("merge",class extends dx{static getters=["isInMerge","isInSameMerge","isMergeHidden","getMainCellPosition","getBottomLeftCell","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(Ie))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){const o=t?[t]:Object.keys(this.merges);for(const t of o)this.applyRangeChangeOnSheet(t,e)}getMerges(e){return Object.keys(this.merges[e]||{}).map((t=>this.getMergeById(e,parseInt(t,10)))).filter(Ie)}getMerge({sheetId:e,col:t,row:o}){const s=this.mergeCellMap[e],n=s?t in s&&s[t]?.[o]:void 0;return n?this.getMergeById(e,n):void 0}getMergesInZone(e,t){const o=this.mergeCellMap[e];if(!o)return[];const s=new Set;for(const{col:e,row:n}of xn(t)){const t=o[e]?.[n];t&&s.add(t)}return Array.from(s).map((t=>this.getMergeById(e,t))).filter(Ie)}getSelectionRangeString(e,t){const o=Nn.fromRange(e,this.getters),s=this.getters.expandZone(o.sheetId,o.zone),n=o.clone({zone:{...s,bottom:o.isFullCol?void 0:s.bottom,right:o.isFullRow?void 0:s.right}}),i=this.getters.getRangeString(n,t);if(this.isSingleCellOrMerge(o.sheetId,o.zone)){const{sheetName:e,xc:t}=on(i);return sn(e,t.split(":")[0])}return i}doesIntersectMerge(e,t){return xn(t).some((({col:t,row:o})=>void 0!==this.getMerge({sheetId:e,col:t,row:o})))}doesColumnsHaveCommonMerges(e,t,o){const s=this.getters.getSheet(e);for(let n=0;n<this.getters.getNumberRows(e);n++)if(this.isInSameMerge(s.id,t,n,o,n))return!0;return!1}doesRowsHaveCommonMerges(e,t,o){const s=this.getters.getSheet(e);for(let n=0;n<=this.getters.getNumberCols(e);n++)if(this.isInSameMerge(s.id,n,t,n,o))return!0;return!1}expandZone(e,t){let{left:o,right:s,top:n,bottom:i}=t,r={left:o,right:s,top:n,bottom:i};for(let t in this.merges[e]){const o=this.getMergeById(e,parseInt(t));o&&vn(o,r)&&(r=pn(o,r))}return fn(r,t)?r:this.expandZone(e,r)}isInSameMerge(e,t,o,s,n){const i=this.getMerge({sheetId:e,col:t,row:o}),r=this.getMerge({sheetId:e,col:s,row:n});return!(!i||!r)&&fn(i,r)}isInMerge({sheetId:e,col:t,row:o}){const s=this.mergeCellMap[e];return!!s&&(t in s&&Boolean(s[t]?.[o]))}getMainCellPosition(e){if(!this.isInMerge(e))return e;const t=this.getMerge(e).topLeft;return{sheetId:e.sheetId,col:t.col,row:t.row}}getBottomLeftCell(e){if(!this.isInMerge(e))return e;const{bottom:t,left:o}=this.getMerge(e);return{sheetId:e.sheetId,col:o,row:t}}isMergeHidden(e,t){const o=this.getters.getHiddenColsGroups(e),s=this.getters.getHiddenRowsGroups(e);for(let e of o)if(t.left>=e[0]&&t.right<=e[e.length-1])return!0;for(let 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 fn(t,o);const{numberOfCols:s,numberOfRows:n}=wn(t);return 1===s&&1===n}isMainCellPosition(e){return Fe(this.getMainCellPosition(e),e)}isMergeDestructive(e,t){let{left:o,right:s,top:n,bottom:i}=t;s=de(s,0,this.getters.getNumberCols(e)-1),i=de(i,0,this.getters.getNumberRows(e)-1);for(let t=n;t<=i;t++)for(let i=o;i<=s;i++)if(i!==o||t!==n){const o=this.getters.getCell({sheetId:e,col:i,row:t});if(o&&""!==o.content)return!0}return!1}getMergeById(e,t){const o=this.merges[e]?.[t];return void 0!==o?Kx(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&&vn(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);for(const e of t)if(e.left<o&&e.right>=o||e.top<s&&e.bottom>=s)return"FrozenPaneOverlap";return"Success"}checkMergedContentUpdate(e){const{col:t,row:o,content:s}=e;if(void 0===s)return"Success";const{col:n,row:i}=this.getMainCellPosition(e);return n===t&&i===o?"Success":"CellIsMerged"}checkMergeExists(e){const{sheetId:t,target:o}=e;for(const e of o){const{left:o,top:s}=e,n=this.getMerge({sheetId:t,col:o,row:s});if(void 0===n||!fn(e,n))return"InvalidTarget"}return"Success"}addMerge(e,t){let{left:o,right:s,top:n,bottom:i}=t;s=de(s,0,this.getters.getNumberCols(e)-1),i=de(i,0,this.getters.getNumberRows(e)-1);if(ut(o,n)===ut(s,i))return;const r=this.getters.getCell({sheetId:e,col:o,row:n});let a=this.nextId++;this.history.update("merges",e,a,this.getters.getRangeFromSheetXC(e,cn({left:o,top:n,right:s,bottom:i})));let l=new Set;for(let t=n;t<=i;t++)for(let i=o;i<=s;i++){i===o&&t===n||this.dispatch("UPDATE_CELL",{sheetId:e,col:i,row:t,style:r?r.style:null,content:""});const s=this.getMerge({sheetId:e,col:i,row:t});s&&l.add(s.id),this.history.update("mergeCellMap",e,i,t,a)}for(let t of l){const{top:o,bottom:s,left:n,right:i}=this.getMergeById(e,t);for(let t=o;t<=s;t++)for(let o=n;o<=i;o++){const s={sheetId:e,col:o,row:t},n=this.getMerge(s);n&&n.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:n,right:i}=t,r=this.getMerge({sheetId:e,col:o,row:s});if(void 0!==r&&fn(t,r)){this.history.update("merges",e,r.id,void 0);for(let t=s;t<=n;t++)for(let s=o;s<=i;s++)this.history.update("mergeCellMap",e,s,t,void 0)}}applyRangeChangeOnSheet(e,t){const o=Object.entries(this.merges[e]||{});for(const[s,n]of o)if(n){const o=n.zone,i=t(n);switch(i.changeType){case"NONE":break;case"REMOVE":this.removeMerge(e,o);break;default:const{numberOfCols:t,numberOfRows:n}=wn(i.range.zone);1===t&&1===n?this.removeMerge(e,o):this.history.update("merges",e,parseInt(s,10),i.range)}}this.history.update("mergeCellMap",e,{});for(const t of this.getMerges(e))for(const{col:o,row:s}of xn(t))this.history.update("mergeCellMap",e,o,s,t.id)}import(e){const t=e.sheets||[];for(let 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(let o of t)this.addMerge(e,rn(o))}export(e){for(let t of e.sheets){const e=this.merges[t.id];e&&t.merges.push(...Xx(e))}}exportForExcel(e){this.export(e)}}).add("headerSize",class extends dx{static getters=["getUserRowSize","getColSize"];sizes={};handle(e){switch(e.type){case"CREATE_SHEET":this.history.update("sizes",e.sheetId,{COL:[],ROW:[]});break;case"DUPLICATE_SHEET":this.history.update("sizes",e.sheetIdTo,le(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=ze(this.sizes[e.sheetId][e.dimension],e.elements);this.history.update("sizes",e.sheetId,e.dimension,t);break}case"ADD_COLUMNS_ROWS":{let t=[...this.sizes[e.sheetId][e.dimension]];const o=Ne(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]||T)}getUserRowSize(e,t){const o=this.sizes[e]?.ROW[t];return o?Math.round(o):void 0}import(e){for(let t of e.sheets){const e={COL:Array(t.colNumber).fill(void 0),ROW:Array(t.rowNumber).fill(void 0)};for(let[o,s]of Object.entries(t.rows))s.size&&(e.ROW[o]=s.size);for(let[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(let o of e.sheets){void 0===o.rows&&(o.rows={});for(const e of ue(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)??A});void 0===o.cols&&(o.cols={});for(let e of ue(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 dx{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=>({...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_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||z,color:e.border.color||G})}break;case"CLEAR_FORMATTING":this.clearBorders(e.sheetId,e.target);break;case"REMOVE_COLUMNS_ROWS":for(let t of e.elements)"COL"===e.dimension?this.shiftBordersHorizontally(e.sheetId,t+1,-1):this.shiftBordersVertically(e.sheetId,t+1,-1);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,{moveFirstLeftBorder:!0}),t=e.base-1,o=e.base+e.quantity):(this.shiftBordersHorizontally(e.sheetId,e.base+1,e.quantity,{moveFirstLeftBorder:!1}),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,{moveFirstTopBorder:!0}),t=e.base-1,o=e.base+e.quantity):(this.shiftBordersVertically(e.sheetId,e.base+1,e.quantity,{moveFirstTopBorder:!1}),t=e.base,o=e.base+e.quantity+1),this.ensureRowBorderContinuity(e.sheetId,t,o)}getCellBorder({sheetId:e,col:t,row:o}){const s={top:this.borders[e]?.[t]?.[o]?.horizontal,bottom:this.borders[e]?.[t]?.[o+1]?.horizontal,left:this.borders[e]?.[t]?.[o]?.vertical,right:this.borders[e]?.[t+1]?.[o]?.vertical};return s.bottom||s.left||s.right||s.top?s:null}getBordersColors(e){const t=[],o=this.borders[e];if(o)for(const e of o.filter(Ie))for(const o of e)o?.horizontal&&t.push(o.horizontal.color),o?.vertical&&t.push(o.vertical.color);return t}ensureColumnBorderContinuity(e,t,o){const s=ue(t+1,o);for(let n=0;n<this.getters.getNumberRows(e);n++){const i=this.getCellBorder({sheetId:e,col:t,row:n}),r=this.getCellBorder({sheetId:e,col:o,row:n});if(i&&r){const t=this.getCommonSides(i,r);for(let o of s)this.addBorder(e,o,n,t)}}}ensureRowBorderContinuity(e,t,o){const s=ue(t+1,o);for(let n=0;n<this.getters.getNumberCols(e);n++){const i=this.getCellBorder({sheetId:e,col:n,row:t}),r=this.getCellBorder({sheetId:e,col:n,row:o});if(i&&r){const t=this.getCommonSides(i,r);for(let o of s)this.addBorder(e,n,o,t)}}}getCommonSides(e,t){const o={};for(let s of["top","bottom","left","right"])e[s]&&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))):[]}getRowsRange(e){return this.borders[e]?ue(0,this.getters.getNumberRows(e)+1):[]}shiftBordersHorizontally(e,t,o,{moveFirstLeftBorder:s}={}){this.borders[e]&&(o<0&&this.moveBordersOfColumn(e,t,o,"vertical",{destructive:!1}),this.getColumnsWithBorders(e).filter((e=>e>=t)).sort(((e,t)=>o<0?e-t:t-e)).forEach((n=>{(n===t&&s||n!==t)&&this.moveBordersOfColumn(e,n,o,"vertical"),this.moveBordersOfColumn(e,n,o,"horizontal")})))}shiftBordersVertically(e,t,o,{moveFirstTopBorder:s}={}){this.borders[e]&&(o<0&&this.moveBordersOfRow(e,t,o,"horizontal",{destructive:!1}),this.getRowsRange(e).filter((e=>e>=t)).sort(((e,t)=>o<0?e-t:t-e)).forEach((n=>{(n===t&&s||n!==t)&&this.moveBordersOfRow(e,n,o,"horizontal"),this.moveBordersOfRow(e,n,o,"vertical")})))}moveBordersOfRow(e,t,o,s,{destructive:n}={destructive:!0}){const i=this.borders[e];i&&this.getColumnsWithBorders(e).forEach((r=>{const a=i[r]?.[t+o]?.[s],l=i[r]?.[t]?.[s];this.history.update("borders",e,r,t+o,s,n?l:l||a),this.history.update("borders",e,r,t,s,void 0)}))}moveBordersOfColumn(e,t,o,s,{destructive:n}={destructive:!0}){const i=this.borders[e];i&&this.getRowsRange(e).forEach((r=>{const a=i[t+o]?.[r]?.[s],l=i[t]?.[r]?.[s];this.history.update("borders",e,t+o,r,s,n?l:l||a),this.history.update("borders",e,t,r,s,void 0)}))}setBorder(e,t,o,s,n=!0){!n&&this.borders?.[e]?.[t]?.[o]?.vertical||this.history.update("borders",e,t,o,"vertical",s?.left),!n&&this.borders?.[e]?.[t]?.[o]?.horizontal||this.history.update("borders",e,t,o,"horizontal",s?.top),!n&&this.borders?.[e]?.[t+1]?.[o]?.vertical||this.history.update("borders",e,t+1,o,"vertical",s?.right),!n&&this.borders?.[e]?.[t]?.[o+1]?.horizontal||this.history.update("borders",e,t,o+1,"horizontal",s?.bottom)}clearBorders(e,t){for(let o of t){for(let t=o.top;t<=o.bottom;t++){this.history.update("borders",e,o.right+1,t,"vertical",void 0);for(let s=o.left;s<=o.right;s++)this.history.update("borders",e,s,t,void 0)}for(let t=o.left;t<=o.right;t++)this.history.update("borders",e,t,o.bottom+1,"horizontal",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);for(let n of t){if("h"===o||"hv"===o||"all"===o)for(let t=n.top+1;t<=n.bottom;t++)for(let o=n.left;o<=n.right;o++)this.addBorder(e,o,t,{top:s});if("v"===o||"hv"===o||"all"===o)for(let t=n.top;t<=n.bottom;t++)for(let o=n.left+1;o<=n.right;o++)this.addBorder(e,o,t,{left:s});if("left"===o||"all"===o||"external"===o)for(let t=n.top;t<=n.bottom;t++)this.addBorder(e,n.left,t,{left:s});if("right"===o||"all"===o||"external"===o)for(let t=n.top;t<=n.bottom;t++)this.addBorder(e,n.right+1,t,{left:s});if("top"===o||"all"===o||"external"===o)for(let t=n.left;t<=n.right;t++)this.addBorder(e,t,n.top,{top:s});if("bottom"===o||"all"===o||"external"===o)for(let t=n.left;t<=n.right;t++)this.addBorder(e,t,n.bottom+1,{top:s})}}addBordersToMerge(e,t){const{left:o,right:s,top:n,bottom:i}=t,r=this.getCellBorder({sheetId:e,col:o,row:n}),a=this.getCellBorder({sheetId:e,col:s,row:i});this.clearBorders(e,[t]),r?.top&&this.setBorders(e,[{...t,bottom:n}],"top",r.top),r?.left&&this.setBorders(e,[{...t,right:o}],"left",r.left),a?.bottom?this.setBorders(e,[{...t,top:i}],"bottom",a.bottom):r?.bottom&&this.setBorders(e,[{...t,top:i}],"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||Fe(t,e.border)?"NoChanges":"Success"}import(e){if(Object.keys(e.borders||{}).length)for(let t of e.sheets)for(const o in t.cells){const s=t.cells[o];if(s?.border){const n=e.borders[s.border],{col:i,row:r}=dt(o);this.setBorder(t.id,i,r,n,!1)}}for(let t of e.sheets)if(t.merges)for(let e of t.merges)this.addBordersToMerge(t.id,rn(e))}export(e){let t=0;const o={};function s(e){for(let[t,s]of Object.entries(o))if(Fe(s,e))return parseInt(t,10);return o[++t]=e,t}for(let t of e.sheets)for(let e=0;e<t.colNumber;e++)for(let o=0;o<t.rowNumber;o++){const n=this.getCellBorder({sheetId:t.id,col:e,row:o});if(n){const i=ut(e,o),r=t.cells[i],a=s(n);r?r.border=a:t.cells[i]={border:a}}}e.borders=o}exportForExcel(e){this.export(e)}}).add("conditional formatting",class extends dx{static getters=["getConditionalFormats","getRulesSelection","getRulesByCell","getAdaptedCfRanges"];cfRules={};loopThroughRangesOfSheet(e,t){for(const o of this.cfRules[e])for(const s of o.ranges){const n=t(s);switch(n.changeType){case"REMOVE":let 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),n.range)}}}adaptRanges(e,t){if(t)this.loopThroughRangesOfSheet(t,e);else for(const t of Object.keys(this.cfRules))this.loopThroughRangesOfSheet(t,e)}allowDispatch(e){switch(e.type){case"ADD_CONDITIONAL_FORMAT":return this.checkValidations(e,this.checkCFRule,this.checkEmptyRange);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(let t of e.sheets)this.cfRules[t.id]=t.conditionalFormats.map((e=>this.mapToConditionalFormatInternal(t.id,e)))}export(e){if(e.sheets)for(let t of e.sheets)this.cfRules[t.id]&&(t.conditionalFormats=this.cfRules[t.id].map((e=>this.mapToConditionalFormat(t.id,e))))}exportForExcel(e){this.export(e)}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 n=t.left;n<=t.right;n++){this.getRulesByCell(e,n,s).forEach((e=>{o.add(e.id)}))}return o}getRulesByCell(e,t,o){const s=[];for(let n of this.cfRules[e])for(let e of n.ranges)bn(t,o,e.zone)&&s.push(n);return new Set(s.map((t=>this.mapToConditionalFormat(e,t))))}getAdaptedCfRanges(e,t,o,s){if(0===o.length&&0===s.length)return;const n=this.getters.getConditionalFormats(e),i=n.findIndex((e=>e.id===t.id));let r=[];return i>-1&&(r=n[i].ranges),r=r.concat(o),Cn(r,s)}mapToConditionalFormat(e,t){return{...t,ranges:t.ranges.map((t=>this.getters.getRangeString(t,e)))}}mapToConditionalFormatInternal(e,t){const o={...t,ranges:t.ranges.map((t=>this.getters.getRangeFromSheetXC(e,t)))};return o}addConditionalFormatting(e,t){const o=this.cfRules[t].slice(),s=o.findIndex((t=>t.id===e.id)),n=this.mapToConditionalFormatInternal(t,e);s>-1?o.splice(s,1,n):o.push(n),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 n=s-t;return n<0||n>=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(2,["Between","NotBetween"]),this.checkOperatorArgsNumber(1,["BeginsWith","ContainsText","EndsWith","GreaterThan","GreaterThanOrEqual","LessThan","LessThanOrEqual","NotContains"]),this.checkOperatorArgsNumber(0,["IsEmpty","IsNotEmpty"]));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"}checkOperatorArgsNumber(e,t){if(e>2)throw new Error("Checking more than 2 arguments is currently not supported. Add the appropriate CommandResult if you want to.");return o=>{if(t.includes(o.operator)){const t=[],s=e=>void 0===e||""===e;return e>=1&&s(o.values[0])&&t.push("FirstArgMissing"),e>=2&&s(o.values[1])&&t.push("SecondArgMissing"),t.length?t:"Success"}return"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";try{Vx(e.value||"")}catch(e){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&&Zx(t)>=Zx(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&&Zx(t)>=Zx(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&&Zx(t)>=Zx(o)?"MinBiggerThanMid":"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)),n=this.cfRules[o][s],i=s-t,r=[...this.cfRules[o]];r.splice(s,1),r.splice(i,0,n),this.history.update("cfRules",o,r)}}).add("figures",class extends dx{static getters=["getFigures","getFigure","getFigureSheetId"];figures={};allowDispatch(e){switch(e.type){case"CREATE_FIGURE":return this.checkFigureDuplicate(e.figure.id);case"UPDATE_FIGURE":case"DELETE_FIGURE":return this.checkFigureExists(e.sheetId,e.id);default:return"Success"}}handle(e){switch(e.type){case"CREATE_SHEET":this.figures[e.sheetId]={};break;case"DELETE_SHEET":this.deleteSheet(e.sheetId);break;case"CREATE_FIGURE":this.addFigure(e.figure,e.sheetId);break;case"UPDATE_FIGURE":const{type:t,sheetId:o,...s}=e,n=s;this.updateFigure(o,n);break;case"DELETE_FIGURE":this.removeFigure(e.id,e.sheetId);break;case"REMOVE_COLUMNS_ROWS":this.onRowColDelete(e.sheetId,e.dimension)}}onRowColDelete(e,t){"ROW"===t?this.onRowDeletion(e):this.onColDeletion(e)}onRowDeletion(e){const t=this.getters.getNumberRows(e);let o=0;for(let s=0;s<t;s++)o+=this.getters.getUserRowSize(e,s)||A;const s=this.getters.getFigures(e);for(const t of s){const s=Math.min(t.y,o-t.height);s!==t.y&&this.dispatch("UPDATE_FIGURE",{sheetId:e,id:t.id,y:s})}}onColDeletion(e){const t=this.getters.getNumberCols(e);let o=0;for(let s=0;s<t;s++)o+=this.getters.getColSize(e,s);const s=this.getters.getFigures(e);for(const t of s){const s=Math.min(t.x,o-t.width);s!==t.x&&this.dispatch("UPDATE_FIGURE",{sheetId:e,id:t.id,x:s})}}updateFigure(e,t){if("id"in t)for(const[o,s]of Object.entries(t))switch(o){case"x":case"y":void 0!==s&&this.history.update("figures",e,t.id,o,Math.max(s,0));break;case"width":case"height":void 0!==s&&this.history.update("figures",e,t.id,o,s)}}addFigure(e,t){this.history.update("figures",t,e.id,e)}deleteSheet(e){this.history.update("figures",e,void 0)}removeFigure(e,t){this.history.update("figures",t,e,void 0)}checkFigureExists(e,t){return void 0===this.figures[e]?.[t]?"FigureDoesNotExist":"Success"}checkFigureDuplicate(e){return Object.values(this.figures).find((t=>t?.[e]))?"DuplicatedFigureId":"Success"}getFigures(e){return Object.values(this.figures[e]||{}).filter(Ie)}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(let t of e.sheets){const e={};t.figures.forEach((t=>{e[t.id]=t})),this.figures[t.id]=e}}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){this.export(e)}}).add("chart",class extends dx{static getters=["isChartDefined","getChartDefinition","getChartType","getChartIds","getChart","getContextCreationChart"];charts={};createChart=function(e){const t=gl.getAll().sort(((e,t)=>e.sequence-t.sequence));return function(o,s,n){const i=t.find((e=>e.match(s.type)));if(!i)throw new Error(`No builder for this chart: ${s.type}`);return i.createChart(s,n,e)}}(this.getters);validateChartDefinition=e=>function(e,t){const o=gl.getAll().find((e=>e.match(t.type)));if(!o)throw new Error("Unknown chart type.");return o.validateChartDefinition(e,t)}(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));default:return"Success"}}handle(e){switch(e.type){case"CREATE_CHART":this.addFigure(e.id,e.sheetId,e.position,e.size),this.addChart(e.id,e.definition);break;case"UPDATE_CHART":this.addChart(e.id,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(Y).pop(),s=`${e.sheetIdTo}${Y}${t}`,n=this.charts[o.id]?.copyForSheetId(e.sheetIdTo);n&&this.dispatch("CREATE_CHART",{id:s,position:{x:o.x,y:o.y},size:{width:o.width,height:o.height},definition:n.getDefinition(),sheetId:e.sheetIdTo})}break}case"DELETE_FIGURE":this.history.update("charts",e.id,void 0);break;case"DELETE_SHEET":for(let 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(let t of e.sheets)if(t.figures)for(let 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(let t of e.sheets){const e=this.getters.getFigures(t.id),o=[];for(let 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={x:0,y:0},s={width:536,height:335}){if(this.getters.getFigure(t,e))return;const n={id:e,x:o.x,y:o.y,width:s.width,height:s.height,tag:"chart"};this.dispatch("CREATE_FIGURE",{sheetId:t,figure:n})}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.id)?"DuplicatedChartId":"Success"}checkChartExists(e){return this.getters.getFigureSheetId(e.id)?"Success":"ChartDoesNotExist"}}).add("image",class extends dx{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.addImage(e.figureId,e.sheetId,e.position,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(Y).pop(),s=`${e.sheetIdTo}${Y}${t}`,n=this.getImage(o.id);if(n){const t={width:o.width,height:o.height};this.dispatch("CREATE_IMAGE",{sheetId:e.sheetIdTo,figureId:s,position:{x:o.x,y:o.y},size:t,definition:le(n)})}}break}case"DELETE_FIGURE":this.history.update("images",e.sheetId,e.id,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}addImage(e,t,o,s){const n={id:e,x:o.x,y:o.y,width:s.width,height:s.height,tag:"image"};this.dispatch("CREATE_FIGURE",{sheetId:t,figure:n})}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:le(e)})}t.images=[...t.images,...o]}}getAllImages(){const e=[];for(const t in this.images)e.push(...Object.values(this.images[t]||{}).filter(Ie));return e}}).add("dataValidation",class extends dx{static getters=["cellHasListDataValidationIcon","getDataValidationRule","getDataValidationRules","getValidationRuleForCell"];rules={};adaptRanges(e,t){const o=t?[t]:Object.keys(this.rules);for(const t of o)this.loopThroughRangesOfSheet(t,e)}loopThroughRangesOfSheet(e,t){for(let o=this.rules[e].length-1;o>=0;o--){const s=this.rules[e][o];for(let n=s.ranges.length-1;n>=0;n--){const i=t(s.ranges[n]);switch(i.changeType){case"REMOVE":if(1===s.ranges.length)this.removeDataValidationRule(e,s.id);else{const t=s.ranges.slice();t.splice(n,1),this.history.update("rules",e,o,"ranges",t)}break;case"RESIZE":case"MOVE":case"CHANGE":this.history.update("rules",e,o,"ranges",n,i.range)}}}}allowDispatch(e){switch(e.type){case"ADD_DATA_VALIDATION_RULE":return this.checkValidations(e,this.chainValidations(this.checkCriterionTypeIsValid,this.checkCriterionHasValidNumberOfValues,this.checkCriterionValuesAreValid));case"REMOVE_DATA_VALIDATION_RULE":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=le(this.rules[e.sheetId]).map((t=>({...t,ranges:t.ranges.map((t=>Fn(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}}}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(bn(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)}addDataValidationRule(e,t){const o=this.rules[e];"isBoolean"===t.criterion.type&&this.setCenterStyleToBooleanCells(t);const s=this.removeRangesFromRules(e,t.ranges,o),n=s.findIndex((e=>e.id===t.id));-1!==n?(s[n]=t,this.history.update("rules",e,s)):this.history.update("rules",e,[...s,t])}removeRangesFromRules(e,t,o){o=le(o);const s=t.map((t=>this.getters.getRangeString(t,e)));for(const t of o){const o=t.ranges.map((t=>this.getters.getRangeString(t,e)));t.ranges=Cn(o,s).map((t=>this.getters.getRangeFromSheetXC(e,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 Ln(e.ranges)){const e=this.getters.getCell(t),{sheetId:o,col:s,row:n}=t,i={...e?.style,align:e?.style?.align??"center",verticalAlign:e?.style?.verticalAlign??"middle"};this.dispatch("UPDATE_CELL",{sheetId:o,col:s,row:n,style:i})}}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)))})}}checkCriterionTypeIsValid(e){return rC.contains(e.rule.criterion.type)?"Success":"UnknownDataValidationCriterionType"}checkCriterionHasValidNumberOfValues(e){const t=e.rule.criterion,o=rC.get(t.type).numberOfValues(t);return void 0!==o&&t.values.length!==o?"InvalidNumberOfCriterionValues":"Success"}checkCriterionValuesAreValid(e){const t=e.rule.criterion,o=rC.get(t.type);return t.values.some((e=>e.startsWith("=")?"onlyLiterals"===o.allowedValues:"onlyFormulas"===o.allowedValues||!o.isCriterionValueValid(e)))?"InvalidDataValidationCriterionValue":"Success"}}),CR=(new Pi).add("ui_sheet",class extends Jx{static getters=["doesCellHaveGridIcon","getCellWidth","getTextWidth","getCellText","getCellMultiLineText","getContiguousZone","isCellEmpty"];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(let 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":for(let t of e.rows)this.dispatch("RESIZE_COLUMNS_ROWS",{elements:[t],dimension:"ROW",size:null,sheetId:e.sheetId})}}getCellWidth(e){const t=this.getters.getCellComputedStyle(e);let o=0;const s=this.getters.getEvaluatedCell(e).formattedValue;if(s){const e=Zn(this.ctx,s,t,void 0);o+=Math.max(...e.map((e=>zn(this.ctx,e,t))))}if(this.getters.getConditionalIcon(e)&&(o+=function(e){return Wn(e)+8}(t)),this.getters.doesCellHaveGridIcon(e)&&(o+=20),0===o)return 0;if(o+=2*M,"wrap"===t.wrapping){const t=this.getters.getColSize(this.getters.getActiveSheetId(),e.col);return Math.min(t,o)}return o}getTextWidth(e,t){return zn(this.ctx,e,t)}getCellText(e,t=!1){const o=this.getters.getCell(e);return t&&o?.isFormula?na(o.content,this.getters.getLocale()):this.getters.getEvaluatedCell(e).formattedValue}getCellMultiLineText(e,t){const o=this.getters.getCellStyle(e),s=this.getters.getCellText(e,this.getters.shouldShowFormulas());return Zn(this.ctx,s,o,t)}doesCellHaveGridIcon(e){const t=this.getters.isFilterHeader(e),o=!this.getters.isReadonly()&&this.getters.cellHasListDataValidationIcon(e);return t||o}getContiguousZone(e,t){const o=t=>{for(const o of ue(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 ue(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,n=t;do{s=!1;const e=o(n);fn(n,e)||(s=!0,n=e)}while(s);return n}isCellEmpty(e){const t=this.getters.getMainCellPosition(e);return this.getters.getEvaluatedCell(t).type===Qt.empty}getColMaxWidth(e,t){const o=xn(this.getters.getColsZone(e,t,t)).map((t=>this.getCellWidth({sheetId:e,...t})));return Math.max(0,...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(),o=this.getters.getCommandZones(e);return!t&&o.length>0?"NoActiveSheet":t&&o.length>0?this.getters.checkZonesExistInSheet(t,o):"Success"}}).add("ui_options",class extends Jx{static getters=["shouldShowFormulas"];showFormulas=!1;handle(e){if("SET_FORMULA_VISIBILITY"===e.type)this.showFormulas=e.show}shouldShowFormulas(){return this.showFormulas}}).add("selectionInputManager",class extends Jx{config;static layers=[1];static getters=["getSelectionInput","getSelectionInputValue","isRangeValid","getSelectionInputHighlights"];inputs={};focusedInputId=null;get currentInput(){return this.focusedInputId?this.inputs[this.focusedInputId]:null}constructor(e){super(e),this.config=e}allowDispatch(e){if("FOCUS_RANGE"===e.type){const t=this.currentInput?.getIndex(e.rangeId);if(this.focusedInputId===e.id&&this.currentInput?.focusedRangeIndex===t)return"InputAlreadyFocused"}return this.currentInput?this.currentInput.allowDispatch(e):"Success"}handle(e){switch(e.type){case"ENABLE_NEW_SELECTION_INPUT":this.initInput(e.id,e.initialRanges||[],e.hasSingleRange);break;case"DISABLE_SELECTION_INPUT":this.focusedInputId===e.id&&this.unfocus(),delete this.inputs[e.id];break;case"UNFOCUS_SELECTION_INPUT":this.unfocus();break;case"ADD_RANGE":case"ADD_EMPTY_RANGE":case"REMOVE_RANGE":if(e.id!==this.focusedInputId){const t=this.inputs[e.id];this.selection.capture(t,{cell:{col:0,row:0},zone:An({col:0,row:0})},{handleEvent:t.handleEvent.bind(t),release:()=>this.focusedInputId=null}),this.focusedInputId=e.id}break;case"FOCUS_RANGE":case"CHANGE_RANGE":if(e.id!==this.focusedInputId){const t=this.inputs[e.id],o=t.ranges.find((t=>t.id===e.rangeId));if(this.isRangeValid(o?.xc||"A1")){const e=this.getters.getActiveSheetId(),s=this.getters.getRangeFromSheetXC(e,o?.xc||"A1").zone;this.selection.capture(t,{cell:{col:s.left,row:s.top},zone:s},{handleEvent:t.handleEvent.bind(t),release:()=>this.focusedInputId=null})}this.focusedInputId=e.id}}this.currentInput?.handle(e)}getSelectionInput(e){return this.inputs[e]?this.inputs[e].ranges.map(((t,o)=>Object.assign({},t,{color:this.focusedInputId===e&&null!==this.inputs[e].focusedRangeIndex&&this.isRangeValid(t.xc)?t.color:null,isFocused:this.focusedInputId===e&&this.inputs[e].focusedRangeIndex===o}))):[]}isRangeValid(e){if(!e)return!1;const{xc:t,sheetName:o}=on(e);return null!==t.match(Xs)&&(!o||void 0!==this.getters.getSheetIdByName(o))}getSelectionInputValue(e){return this.inputs[e].getSelectionInputValue()}getSelectionInputHighlights(){return this.focusedInputId?this.inputs[this.focusedInputId].getSelectionInputHighlights():[]}initInput(e,t,o=!1){if(this.inputs[e]&&this.unfocus(),this.inputs[e]=new KI(this.config,t,o),0===t.length){const t=this.inputs[e],o={zone:An({col:0,row:0}),cell:{col:0,row:0}};this.selection.capture(t,o,{handleEvent:t.handleEvent.bind(t),release:()=>{this.focusedInputId=null,t.focusedRangeIndex=null}}),this.focusedInputId=e}}unfocus(){this.selection.release(this.currentInput),this.focusedInputId=null}}).add("highlight",class extends Jx{static layers=[1];static getters=["getHighlights"];getHighlights(){return this.prepareHighlights(this.getters.getComposerHighlights().concat(this.getters.getSelectionInputHighlights()))}prepareHighlights(e){return e.filter((e=>e.zone.top>=0&&e.zone.left>=0&&e.zone.bottom<this.getters.getNumberRows(e.sheetId)&&e.zone.right<this.getters.getNumberCols(e.sheetId))).map((e=>{const{numberOfRows:t,numberOfCols:o}=wn(e.zone),s=t*o==1?this.getters.expandZone(e.sheetId,e.zone):e.zone;return{...e,zone:s}}))}drawGrid(e){const{ctx:t,thinLineWidth:o}=e,s=this.getters.getActiveSheetId(),n=3*o;t.lineWidth=n;const i=this.getHighlights();for(let e of i.filter(((e,t)=>i.findIndex((t=>fn(t.zone,e.zone)&&t.sheetId===s))===t))){const{x:o,y:s,width:i,height:r}=this.getters.getVisibleRect(e.zone);i>0&&r>0&&(t.strokeStyle=e.color,t.strokeRect(o+n/2,s+n/2,i-n,r-n),t.globalCompositeOperation="source-over",t.fillStyle=e.color+"20",t.fillRect(o+n,s+n,i-2*n,r-2*n))}}}).add("grid renderer",class extends Jx{static layers=[0,7];static getters=["getColDimensionsInViewport","getRowDimensionsInViewport"];boxes=[];getColDimensionsInViewport(e,t){const o=Math.min(...this.getters.getSheetViewVisibleCols()),s=this.getters.getColRowOffsetInViewport("COL",o,t),n=this.getters.getColSize(e,t);return{start:s,size:n,end:s+(this.getters.isColHidden(e,t)?0:n)}}getRowDimensionsInViewport(e,t){const o=Math.min(...this.getters.getSheetViewVisibleRows()),s=this.getters.getColRowOffsetInViewport("ROW",o,t),n=this.getters.getRowSize(e,t);return{start:s,size:n,end:s+(this.getters.isRowHidden(e,t)?0:n)}}getHeaderOffset(e,t,o){let s=this.getters.getColRowOffsetInViewport(e,t,o);return this.getters.isDashboard()||(s+="ROW"===e?I:R),s}drawGrid(e,t){switch(t){case 0:this.boxes=this.getGridBoxes(),this.drawBackground(e),this.drawOverflowingCellBackground(e),this.drawCellBackground(e),this.drawBorders(e),this.drawTexts(e),this.drawIcon(e),this.drawFrozenPanes(e);break;case 7:this.getters.isDashboard()||(this.drawHeaders(e),this.drawFrozenPanesHeaders(e))}}drawBackground(e){const{ctx:t,thinLineWidth:s}=e,{width:n,height:i}=this.getters.getSheetViewDimensionWithHeaders();t.fillStyle="#ffffff",t.fillRect(0,0,n+o,i+o);const r=!this.getters.isDashboard()&&this.getters.getGridLinesVisibility(this.getters.getActiveSheetId()),a=r?.1*s:0;if(r)for(const e of this.boxes)t.strokeStyle="#E2E3E3",t.lineWidth=s,t.strokeRect(e.x+a,e.y+a,e.width-2*a,e.height-2*a)}drawCellBackground(e){const{ctx:t}=e;for(const e of this.boxes){let o=e.style;o.fillColor&&"#ffffff"!==o.fillColor&&(t.fillStyle=o.fillColor||"#ffffff",t.fillRect(e.x,e.y,e.width,e.height)),e.isError&&(t.fillStyle="red",t.beginPath(),t.moveTo(e.x+e.width-5,e.y),t.lineTo(e.x+e.width,e.y),t.lineTo(e.x+e.width,e.y+5),t.fill())}}drawOverflowingCellBackground(e){const{ctx:t,thinLineWidth:o}=e;for(const e of this.boxes)if(e.content&&e.isOverflow){const s=e.content.align||"left";let n,i;const r=e.y+o/2,a=e.height-o,l=Math.min(e.clipRect?.width||1/0,e.content.width);"left"===s?(n=e.x+o/2,i=l-2*o):"right"===s?(n=e.x+e.width-o/2,i=2*o-l):(n=(e.clipRect?.x||e.x+e.width/2-e.content.width/2)+o/2,i=l-2*o),t.fillStyle="#ffffff",t.fillRect(n,r,i,a)}}drawBorders(e){const{ctx:t}=e;for(let e of this.boxes){const t=e.border;if(t){const{x:s,y:n,width:i,height:r}=e;t.left&&o(t.left,s,n,s,n+r),t.top&&o(t.top,s,n,s+i,n),t.right&&o(t.right,s+i,n,s+i,n+r),t.bottom&&o(t.bottom,s,n+r,s+i,n+r)}}function o({style:e,color:o},s,n,i,r){switch(t.strokeStyle=o,e){case"medium":t.lineWidth=2,n+=(s+=n===r?-.5:.5)===(i+=n===r?1.5:.5)?-.5:.5,r+=s===i?1.5:.5;break;case"thick":t.lineWidth=3,n===r&&(s--,i++),s===i&&(n--,r++);break;case"dashed":t.lineWidth=1,t.setLineDash([1,3]);break;case"dotted":t.lineWidth=1,n===r&&(s+=.5,i+=.5),s===i&&(n+=.5,r+=.5),t.setLineDash([1,1]);break;default:t.lineWidth=1}t.beginPath(),t.moveTo(s,n),t.lineTo(i,r),t.stroke(),t.lineWidth=1,t.setLineDash([])}}drawTexts(e){const{ctx:t}=e;let o;t.textBaseline="top";for(let e of this.boxes)if(e.content){const s=e.style||{},n=e.content.align||"left",i=$n(s);i!==o&&(o=i,t.font=i),t.fillStyle=s.textColor||"#000";let r=e.x;if(r+="left"===n?_+(e.image?e.image.size+4:0):"right"===n?e.width-_-(e.hasIcon?19:0):e.width/2,t.textAlign=n,e.clipRect){t.save(),t.beginPath();const{x:o,y:s,width:n,height:i}=e.clipRect;t.rect(o,s,n,i),t.clip()}const a=Wn(s),l=e.content.textLines.length;let c=this.computeTextYCoordinate(e,a,l);for(let o of e.content.textLines)Xn(t,o,{x:Math.round(r),y:Math.round(c)},s.underline,s.strikethrough),c+=_+a;e.clipRect&&t.restore()}}drawIcon(e){const{ctx:t}=e;for(const e of this.boxes)if(e.image){const o=e.image.image;if(e.image.clipIcon){t.save(),t.beginPath();const{x:o,y:s,width:n,height:i}=e.image.clipIcon;t.rect(o,s,n,i),t.clip()}const s=e.image.size,n=this.computeTextYCoordinate(e,s);t.drawImage(o,e.x+4,n,s,s),e.image.clipIcon&&t.restore()}}computeTextYCoordinate(e,t,o=1){const s=e.y+1,n=Bn(t,o),i=e.height>n+2*_,r=e.verticalAlign||k;if(i){if("middle"===r)return s+(e.height-n)/2;if("bottom"===r)return s+e.height-n-_}return s+_}drawHeaders(e){const{ctx:t,thinLineWidth:o}=e,s=this.getters.getSheetViewVisibleCols(),l=s[0],c=s[s.length-1],h=this.getters.getSheetViewVisibleRows(),d=h[0],u=h[h.length-1],{width:g,height:p}=this.getters.getSheetViewDimensionWithHeaders(),b=this.getters.getSelectedZones(),S=function(e){const t=new Set;for(let o of e)for(let e of ue(o.left,o.right+1))t.add(e);return t}(b),C=function(e){const t=new Set;for(let o of e)for(let e of ue(o.top,o.bottom+1))t.add(e);return t}(b),E=this.getters.getActiveSheetId(),w=this.getters.getNumberCols(E),y=this.getters.getNumberRows(E),x=this.getters.getActiveCols(),T=this.getters.getActiveRows();t.font=`400 11px ${H}`,t.textAlign="center",t.textBaseline="middle",t.lineWidth=o,t.strokeStyle="#333";for(let e=l;e<=c;e++){const o={left:e,right:e,top:0,bottom:y-1},{x:s,width:a}=this.getters.getVisibleRect(o),l=this.getters.doesZonesContainFilter(E,[o]),c=x.has(e),h=S.has(e);t.fillStyle=c?l?m:r:h?l?v:i:l?f:n,t.fillRect(s,0,a,I)}for(let e=d;e<=u;e++){const o={top:e,bottom:e,left:0,right:w-1},{y:s,height:a}=this.getters.getVisibleRect(o),l=this.getters.doesZonesContainFilter(E,[o]),c=T.has(e),h=C.has(e);t.fillStyle=c?l?m:r:h?l?v:i:l?f:n,t.fillRect(0,s,R,a)}t.beginPath(),t.moveTo(R,0),t.lineTo(R,p),t.moveTo(0,I),t.lineTo(g,I),t.strokeStyle="#C0C0C0",t.stroke(),t.beginPath();for(const e of s){const o=this.getters.getColSize(E,e),s=rt(e);t.fillStyle=x.has(e)?"#fff":a;let n=this.getHeaderOffset("COL",l,e);t.fillText(s,n+o/2,13),t.moveTo(n+o,0),t.lineTo(n+o,I)}for(const e of h){const o=this.getters.getRowSize(E,e);t.fillStyle=T.has(e)?"#fff":a;let s=this.getHeaderOffset("ROW",d,e);t.fillText(String(e+1),24,s+o/2),t.moveTo(0,s+o),t.lineTo(R,s+o)}t.stroke()}drawFrozenPanesHeaders(e){const{ctx:t,thinLineWidth:o}=e,{x:s,y:n}=this.getters.getMainViewportCoordinates(),i=this.getters.isDashboard()?0:R,r=this.getters.isDashboard()?0:I;t.lineWidth=6*o,t.strokeStyle=w,t.beginPath(),s&&(t.moveTo(i+s,0),t.lineTo(i+s,r)),n&&(t.moveTo(0,r+n),t.lineTo(i,r+n)),t.stroke()}drawFrozenPanes(e){const{ctx:t,thinLineWidth:o}=e,{x:s,y:n}=this.getters.getMainViewportCoordinates(),i=this.getters.getSheetViewVisibleCols(),r=i[0],a=i[i.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:R,u=this.getters.isDashboard()?0:I;t.lineWidth=6*o,t.strokeStyle="#DADFE8",t.beginPath(),s&&(t.moveTo(d+s,u),t.lineTo(d+s,h.height+u)),n&&(t.moveTo(d,u+n),t.lineTo(h.width+d,u+n)),t.stroke()}findNextEmptyCol(e,t,o){const s=this.getters.getActiveSheetId();let n=e;for(;n<t;){const e={sheetId:s,col:n+1,row:o},t=this.getters.getEvaluatedCell(e),i=this.getters.getCellBorderWithFilterBorder(e),r=this.getters.doesCellHaveGridIcon(e),a=this.getters.isCellValidCheckbox(e);if(t.type!==Qt.empty||this.getters.isInMerge(e)||i?.left||r||a)return n;n++}return n}findPreviousEmptyCol(e,t,o){const s=this.getters.getActiveSheetId();let n=e;for(;n>t;){const e={sheetId:s,col:n-1,row:o},t=this.getters.getEvaluatedCell(e),i=this.getters.getCellBorderWithFilterBorder(e),r=this.getters.doesCellHaveGridIcon(e),a=this.getters.isCellValidCheckbox(e);if(t.type!==Qt.empty||this.getters.isInMerge(e)||i?.right||r||a)return n;n--}return n}computeCellAlignment(e,t){const o=this.getters.getCell(e);if(o?.isFormula&&this.getters.shouldShowFormulas())return"left";const{align:s}=this.getters.getCellStyle(e),n=this.getters.getEvaluatedCell(e);return t&&n.type===Qt.number?"center"!==s?"left":s:s||n.defaultAlign}createZoneBox(e,t,o){const{left:s,right:n}=o,i=t.left,r=t.top,a={sheetId:e,col:i,row:r},l=this.getters.getEvaluatedCell(a),c=this.getters.shouldShowFormulas(),{x:h,y:d,width:u,height:g}=this.getters.getVisibleRect(t),{verticalAlign:p}=this.getters.getCellStyle(a),m={x:h,y:d,width:u,height:g,border:this.getters.getCellBorderWithFilterBorder(a)||void 0,style:this.getters.getCellComputedStyle(a),verticalAlign:p,isError:l.type===Qt.error&&!!l.message||this.getters.isDataValidationInvalid(a)};if(l.type===Qt.empty||this.getters.isCellValidCheckbox(a))return m;const f=this.getters.getConditionalIcon(a),v=Wn(m.style),b=f?4+v:0;f&&(m.image={type:"icon",size:v,clipIcon:{x:m.x,y:m.y,width:Math.min(b,u),height:g},image:zS[f].img}),m.hasIcon=this.getters.doesCellHaveGridIcon(a);const S=m.hasIcon?19:0,C=this.getters.getCellComputedStyle(a),E=C.wrapping||"overflow",w="wrap"!==E||c?void 0:u-2*_,y=this.getters.getCellMultiLineText(a,w),x=Math.max(...y.map((e=>this.getters.getTextWidth(e,C)+_))),I=b+x+S,R=this.computeCellAlignment(a,I>u);m.content={textLines:y,width:"overflow"===E?x:u,align:R};const T=I>u||v>g;if(f||m.hasIcon)m.clipRect={x:m.x+b,y:m.y,width:Math.max(0,u-b-S),height:g};else if(T&&"overflow"===E){let e,o;switch(this.getters.isInMerge(a)?(e=this.getters.getMerge(a).right,o=i):(e=this.findNextEmptyCol(i,n,r),o=this.findPreviousEmptyCol(i,s,r),m.isOverflow=!0),R){case"left":{const o=An({col:e,row:r}),{x:s,y:n,width:i,height:a}=this.getters.getVisibleRect(pn(t,o));(i<I||v>a||y.length>1)&&(m.clipRect={x:s,y:n,width:i,height:a});break}case"right":{const e=An({col:o,row:r}),{x:s,y:n,width:i,height:a}=this.getters.getVisibleRect(pn(t,e));(i<I||v>a||y.length>1)&&(m.clipRect={x:s,y:n,width:i,height:a});break}case"center":{const s={...t,left:o,right:e},{x:n,y:i,height:r,width:a}=this.getters.getVisibleRect(s),l=I/2,c=m.x+m.width/2;if(n+a<c+l||n>c-l||v>r||y.length>1){const e=n>c-l?n:c-l,t=n+a-e;m.clipRect={x:e,y:i,width:t,height:r}}break}}}else("clip"===E||"wrap"===E||y.length>1)&&(m.clipRect={x:m.x,y:m.y,width:u,height:g});return m}getGridBoxes(){const e=[],t=this.getters.getSheetViewVisibleCols(),o=t[0],s=t[t.length-1],n=this.getters.getSheetViewVisibleRows(),i={left:o,right:s,top:n[0],bottom:n[n.length-1]},r=this.getters.getActiveSheetId();for(const o of n)for(const s of t){const t={sheetId:r,col:s,row:o};this.getters.isInMerge(t)||e.push(this.createZoneBox(r,An(t),i))}for(const t of this.getters.getMerges(r))if(!this.getters.isMergeHidden(r,t)&&vn(t,i)){const o=this.createZoneBox(r,t,i),s=this.getters.getCellBorder({sheetId:r,col:t.right,row:t.bottom});o.border={...o.border,bottom:s?s.bottom:void 0,right:s?s.right:void 0},o.isMerge=!0,e.push(o)}return e}}).add("autofill",class extends Jx{static layers=[5];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:de(e.col,0,this.getters.getNumberCols(t)),this.lastCellSelected.row=-1===e.row?this.lastCellSelected.row:de(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();break;case"AUTOFILL_CELL":this.autoFillMerge(e.originCol,e.originRow,e.col,e.row);const t=this.getters.getActiveSheetId();this.dispatch("UPDATE_CELL",{sheetId:t,col:e.col,row:e.row,style:e.style||null,content:e.content||"",format:e.format||""}),this.dispatch("SET_BORDER",{sheetId:t,col:e.col,row:e.row,border:e.border}),this.autofillCF(e.originCol,e.originRow,e.col,e.row),this.autofillDV(e.originCol,e.originRow,e.col,e.row)}}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;switch(this.direction){case"down":for(let s=t.left;s<=t.right;s++){const n=[];for(let e=t.top;e<=t.bottom;e++)n.push(ut(s,e));const i=this.createGenerator(n);for(let t=o.top;t<=o.bottom;t++)this.computeNewCell(i,s,t,e)}break;case"up":for(let s=t.left;s<=t.right;s++){const n=[];for(let e=t.bottom;e>=t.top;e--)n.push(ut(s,e));const i=this.createGenerator(n);for(let t=o.bottom;t>=o.top;t--)this.computeNewCell(i,s,t,e)}break;case"left":for(let s=t.top;s<=t.bottom;s++){const n=[];for(let e=t.right;e>=t.left;e--)n.push(ut(e,s));const i=this.createGenerator(n);for(let t=o.right;t>=o.left;t--)this.computeNewCell(i,t,s,e)}break;case"right":for(let s=t.top;s<=t.bottom;s++){const n=[];for(let e=t.left;e<=t.right;e++)n.push(ut(e,s));const i=this.createGenerator(n);for(let t=o.left;t<=o.right;t++)this.computeNewCell(i,t,s,e)}}e&&(this.autofillZone=void 0,this.selection.resizeAnchorZone(this.direction,this.steps),this.lastCellSelected={},this.direction=void 0,this.steps=0,this.tooltip=void 0)}select(e,t){const o=this.getters.getSelectedZone();if(bn(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.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.getCorrespondingFormulaCell(e)||this.getters.getCell(e)?.content;)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.getCorrespondingFormulaCell(e)||this.getters.getCell(e)?.content;)s+=1,e={sheetId:t,col:o+1,row:s}}s!==e.bottom&&(this.select(e.left,s-1),this.autofill(!0))}computeNewCell(e,t,o,s){const{cellData:n,tooltip:i,origin:r}=e.next(),{content:a,style:l,border:c,format:h}=n;this.tooltip=i,s&&this.dispatch("AUTOFILL_CELL",{originCol:r.col,originRow:r.row,col:t,row:o,content:a,style:l,border:c,format:h})}getRule(e,t){const o=Ji.getAll().sort(((e,t)=>e.sequence-t.sequence)).find((o=>o.condition(e,t)));return o&&o.generateRule(e,t)}createGenerator(e){const t=[],o=[],s=this.getters.getActiveSheetId();for(let t of e){const{col:e,row:n}=dt(t),i=this.getters.getCell({sheetId:s,col:e,row:n});o.push({col:e,row:n,cell:i,sheetId:s})}const n=o.map((e=>e.cell));for(let e of o){let o={type:"COPY_MODIFIER"};if(e&&e.cell){o=this.getRule(e.cell,n)||o}const s=this.getters.getCellBorder(e)||void 0;t.push({data:{...e,border:s},rule:o})}return new FI(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 n=s.up.number>0?"up":"down",i=s.left.number>0?"left":"right";return Math.abs(s[n].number)>=Math.abs(s[i].number)?s[n].value:s[i].value}autoFillMerge(e,t,o,s){const n=this.getters.getActiveSheetId(),i={sheetId:n,col:o,row:s},r={sheetId:n,col:e,row:t};if(this.getters.isInMerge(i)&&!this.getters.isInMerge(r)){const e=this.getters.getMerge(i);e&&this.dispatch("REMOVE_MERGE",{sheetId:n,target:[e]})}const a=this.getters.getMerge(r);a?.topLeft.col===e&&a?.topLeft.row===t&&this.dispatch("ADD_MERGE",{sheetId:n,target:[{top:s,bottom:s+a.bottom-a.top,left:o,right:o+a.right-a.left}]})}autofillCF(e,t,o,s){const n=this.getters.getActiveSheetId(),i=this.getters.getRulesByCell(n,e,t);for(const e of i){const t=this.getters.getAdaptedCfRanges(n,e,[ut(o,s)],[]);t&&this.dispatch("ADD_CONDITIONAL_FORMAT",{cf:le(e),ranges:t.map((e=>this.getters.getRangeDataFromXc(n,e))),sheetId:n})}}autofillDV(e,t,o,s){const n=this.getters.getActiveSheetId(),i={sheetId:n,col:e,row:t},r=this.getters.getValidationRuleForCell(i);if(!r)return;const a=r.ranges.map((e=>this.getters.getRangeString(e,n))),l=Cn(a.concat(ut(o,s)),[]);this.dispatch("ADD_DATA_VALIDATION_RULE",{rule:r,ranges:l.map((e=>this.getters.getRangeDataFromXc(n,e))),sheetId:n})}drawGrid(e){if(!this.autofillZone)return;const{ctx:t,thinLineWidth:o}=e,{x:s,y:n,width:i,height:r}=this.getters.getVisibleRect(this.autofillZone);i>0&&r>0&&(t.strokeStyle="black",t.lineWidth=o,t.setLineDash([3]),t.strokeRect(s,n,i,r),t.setLineDash([]))}}).add("find_and_replace",class extends Jx{static layers=[3];static getters=["getSearchMatches","getCurrentSelectedMatchIndex","getSearchOptions","getAllSheetMatchesCount","getActiveSheetMatchesCount","getSpecificRangeMatchesCount"];allSheetsMatches=[];activeSheetMatches=[];specificRangeMatches=[];selectedMatchIndex=null;currentSearchRegex=null;searchOptions={matchCase:!1,exactMatch:!1,searchFormulas:!1,searchScope:"allSheets",specificRange:void 0};toSearch="";isSearchDirty=!1;get searchMatches(){switch(this.searchOptions.searchScope){case"allSheets":return this.allSheetsMatches;case"activeSheet":return this.activeSheetMatches;case"specificRange":return this.specificRangeMatches}}handle(e){switch(e.type){case"UPDATE_SEARCH":const t=e.searchOptions.specificRange,o=t&&this.getters.getRangeFromRangeData(t);this.updateSearch(e.toSearch,{...e.searchOptions,specificRange:o});break;case"CLEAR_SEARCH":this.clearSearch();break;case"SELECT_SEARCH_PREVIOUS_MATCH":this.selectNextCell(XI.previous);break;case"SELECT_SEARCH_NEXT_MATCH":this.selectNextCell(XI.next);break;case"REPLACE_SEARCH":this.replace(e.replaceWith);break;case"REPLACE_ALL_SEARCH":this.replaceAll(e.replaceWith);break;case"UNDO":case"REDO":case"REMOVE_FILTER_TABLE":case"UPDATE_FILTER":case"REMOVE_COLUMNS_ROWS":case"HIDE_COLUMNS_ROWS":case"UNHIDE_COLUMNS_ROWS":case"ADD_COLUMNS_ROWS":case"EVALUATE_CELLS":case"UPDATE_CELL":this.isSearchDirty=!0;break;case"ACTIVATE_SHEET":"activeSheet"===this.searchOptions.searchScope&&(this.isSearchDirty=!0)}}finalize(){this.isSearchDirty&&(this.refreshSearch(),this.isSearchDirty=!1)}getSearchMatches(){return this.searchMatches}getCurrentSelectedMatchIndex(){return this.selectedMatchIndex}getSearchOptions(){return{...this.searchOptions,specificRange:this.searchOptions.specificRange?.rangeData}}getAllSheetMatchesCount(){return this.allSheetsMatches.length}getActiveSheetMatchesCount(){return this.activeSheetMatches.length}getSpecificRangeMatchesCount(){return this.specificRangeMatches.length}updateSearch(e,t){this.searchOptions=t,e!==this.toSearch&&(this.selectedMatchIndex=null),this.toSearch=e,this.updateRegex(),this.refreshSearch()}refreshSearch(){this.selectedMatchIndex=null,this.findMatches(),this.selectNextCell(XI.current)}updateRegex(){let e=ae(this.toSearch);const t=this.searchOptions.matchCase?"":"i";this.searchOptions.exactMatch&&(e=`^${e}$`),this.currentSearchRegex=RegExp(e,t)}getSheetsInSearchOrder(){switch(this.searchOptions.searchScope){case"allSheets":const e=this.getters.getSheetIds(),t=e.findIndex((e=>e===this.getters.getActiveSheetId()));return[e[t],...e.slice(t+1),...e.slice(0,t)];case"activeSheet":return[this.getters.getActiveSheetId()];case"specificRange":const o=this.searchOptions.specificRange;return o&&o?[o.sheetId]:[]}}findMatches(){const e=[];if(this.toSearch)for(const t of this.getters.getSheetIds())e.push(...this.findMatchesInSheet(t));if(this.allSheetsMatches=e,this.activeSheetMatches=e.filter((e=>e.sheetId===this.getters.getActiveSheetId())),this.searchOptions.specificRange){const{sheetId:t,zone:o}=this.searchOptions.specificRange;this.specificRangeMatches=e.filter((e=>e.sheetId===t&&bn(e.col,e.row,o)))}else this.specificRangeMatches=[]}findMatchesInSheet(e){const t=[],{left:o,right:s,top:n,bottom:i}=this.getters.getSheetZone(e);for(let r=n;r<=i;r++)for(let n=o;n<=s;n++){const o=this.getters.isColHidden(e,n),s=this.getters.isRowHidden(e,r);if(o||s)continue;const i={sheetId:e,col:n,row:r};if(this.currentSearchRegex?.test(this.getSearchableString(i))){const o={sheetId:e,col:n,row:r};t.push(o)}}return t}selectNextCell(e){const t=this.searchMatches;if(!t.length)return void(this.selectedMatchIndex=null);let o;if(null===this.selectedMatchIndex){let e=-1;for(const o of this.getSheetsInSearchOrder())if(e=t.findIndex((e=>e.sheetId===o)),-1!==e)break;o=e}else o=this.selectedMatchIndex+e;o=(o+t.length)%t.length,this.selectedMatchIndex=o;const s=t[o];this.getters.getActiveSheetId()!==s.sheetId&&this.dispatch("ACTIVATE_SHEET",{sheetIdFrom:this.getters.getActiveSheetId(),sheetIdTo:s.sheetId}),this.selection.getBackToDefault(),this.selection.selectCell(s.col,s.row)}clearSearch(){this.toSearch="",this.selectedMatchIndex=null,this.currentSearchRegex=null,this.allSheetsMatches=[],this.activeSheetMatches=[],this.specificRangeMatches=[],this.searchOptions={matchCase:!1,exactMatch:!1,searchFormulas:!1,searchScope:"allSheets",specificRange:void 0}}replaceMatch(e,t){if(!this.currentSearchRegex)return;const o=this.getters.getCell(e);if(!o?.content)return;if(o?.isFormula&&!this.searchOptions.searchFormulas)return;const s=new RegExp(this.currentSearchRegex.source,this.currentSearchRegex.flags+"g"),n=ea(this.getSearchableString(e).replace(s,t),this.getters.getLocale());this.dispatch("UPDATE_CELL",{...e,content:n})}replace(e){if(null===this.selectedMatchIndex)return;const t=this.searchMatches[this.selectedMatchIndex];this.replaceMatch(t,e),this.selectNextCell(XI.next)}replaceAll(e){const t=this.searchMatches.length;for(let o=0;o<t;o++)this.replaceMatch(this.searchMatches[o],e)}getSearchableString(e){return this.getters.getCellText(e,this.searchOptions.searchFormulas)}drawGrid(e){const{ctx:t}=e,o=this.getters.getActiveSheetId();for(const[e,s]of this.searchMatches.entries()){if(s.sheetId!==o)continue;const n=this.getters.getMerge({sheetId:o,col:s.col,row:s.row}),i=n?n.left:s.col,r=n?n.right:s.col,a=n?n.top:s.row,l=n?n.bottom:s.row,{x:c,y:h,width:d,height:u}=this.getters.getVisibleRect({top:a,left:i,right:r,bottom:l});d>0&&u>0&&(t.fillStyle="#8B008B33",t.fillRect(c,h,d,u),e===this.selectedMatchIndex&&(t.strokeStyle=jI,t.strokeRect(c,h,d,u)))}if("specificRange"===this.searchOptions.searchScope){const e=this.searchOptions.specificRange;if(!e||e.sheetId!==o)return;const{x:s,y:n,width:i,height:r}=this.getters.getVisibleRect(e.zone);t.strokeStyle=jI,t.strokeRect(s,n,i,r)}}}).add("sort",class extends Jx{allowDispatch(e){if("SORT_CELLS"===e.type){if(!bn(e.col,e.row,e.zone))throw new Error(Xt("The anchor must be part of the provided zone"));return this.checkValidations(e,this.checkMerge,this.checkMergeSizes)}return"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 xn(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=>vn(e,t))),s=wn(o[0]);let[n,i]=[s.numberOfCols,s.numberOfRows];return o.every((e=>{let[t,o]=[e.right-e.left+1,e.bottom-e.top+1];return t===n&&o===i}))?"Success":"InvalidSortZone"}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]===Qt.empty&&(o=o.slice(1)),!o.some((e=>e[0]===Qt.empty))&&!!o.some((e=>e[1]!==Qt.empty&&e[0]!==e[1]))}sortZone(e,t,o,s,n){const[i,r]=this.mainCellsSteps(e,o);let a=this.getters.getMainCellPosition({sheetId:e,col:t.col,row:t.row}).col,l=Object.assign({},o),c=this.mainCells(e,o);!n.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===Qt.empty?{...e,type:Qt.number,value:0}:e)):s).sort(Ag(t))}(c[a-l.left].map((e=>this.getters.getEvaluatedCell(e))),s,Boolean(n.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++){let{col:o,row:s,sheetId:n}=c[e][d[t]];const a=this.getters.getCell({sheetId:n,col:o,row:s});let h=l.left+e*i,u=l.top+t*r,g={sheetId:n,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(n,0,u-t.row,a.compiledFormula)}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),n=[],i=ue(t.left,t.right+1,o),r=ue(t.top,t.bottom+1,s);for(const t of i){const o=[];n.push(o);for(const s of r)o.push({sheetId:e,col:t,row:s})}return n}}).add("automatic_sum",class extends Jx{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:n}=bn(o.col,o.row,t)?o:{col:t.left,row:t.top},i=this.findAdjacentData(e,s,n);return i?this.getters.isSingleCellOrMerge(e,t)||yn(pn(i,t))?[{position:{col:s,row:n},zone:i}]:this.sumDimensions(e,pn(i,t),this.transpose(this.dimensionsToSum(e,t))):[]}findAdjacentData(e,t,o){const s=this.getters.getSheet(e),n=this.getters.getMainCellPosition({sheetId:e,col:t,row:o}),i=this.findSuitableZoneToSum(s,n.col,n.row);if(i)return this.getters.expandZone(e,i)}findSuitableZoneToSum(e,t,o){const s=this.getters.getEvaluatedCell({sheetId:e.id,col:t,row:o-1}),n=this.getters.getEvaluatedCell({sheetId:e.id,col:t-1,row:o});if(this.isNumber(n)&&!this.isNumber(s))return this.findHorizontalZone(e,t,o);const i=this.findVerticalZone(e,t,o);if(this.isZoneValid(i))return i;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},n=this.reduceZoneStart(e,s,s.bottom);return{...s,top:n}}findHorizontalZone(e,t,o){const s={top:o,bottom:o,left:0,right:t-1},n=this.reduceZoneStart(e,s,s.right);return{...s,left:n}}reduceZoneStart(e,t,o){const s=this.getters.getEvaluatedCellsInZone(e.id,t),n=ue(o,-1,-1),i=n.filter((e=>s[e]&&!s[e].isAutoSummable)),r=Math.max(...i),a=ge(n.filter((e=>this.isNumber(s[e]))))[0]||[];return Math.max(...a)<r?1/0:Math.min(...a)}shouldFindData(e,t){return this.getters.isEmpty(e,t)||this.getters.isSingleCellOrMerge(e,t)}isNumber(e){return e.type===Qt.number&&!(e.format&&Rs(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 yn(t)?(o.add(1===wn(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)},xn(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)},xn(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:n}=t;for(;!this.getters.isEmpty(e,{bottom:o,top:o,left:s,right:n});)o++;return{...t,top:o,bottom:o}}nextEmptyCol(e,t){let o=t.right+1;const{top:s,bottom:n}=t;for(;!this.getters.isEmpty(e,{left:o,right:o,top:s,bottom:n});)o++;return{...t,left:o,right:o}}transpose(e){return new Set([...e.values()].map((e=>"COL"===e?"ROW":"COL")))}}).add("format",class extends Jx{handle(e){if("SET_DECIMAL"===e.type)this.setDecimal(e.sheetId,e.target,e.step)}setDecimal(e,t,o){for(const s of t)for(const t of xn(s)){const s=this.getCellNumberFormat({sheetId:e,...t});if(void 0!==s){this.getters.getLocale();const n=Vs(s,o);this.dispatch("SET_FORMATTING",{sheetId:e,target:[An(t)],format:n})}}}getCellNumberFormat(e){for(const t of[e]){const e=this.getters.getEvaluatedCell(t);if(!(e.type!==Qt.number||e.format&&Rs(e.format)))return e.format||Ns(e.value)}}}).add("split_to_columns",class extends Jx{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===Qt.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(),n=this.getSplittedCols(o,e);t&&this.addColsToAvoidCollisions(o,n),this.removeMergesInSplitZone(o,n),this.addColumnsToNotOverflowSheet(o,n);for(let e=0;e<n.length;e++){const t=o.top+e,i=n[e],r=o.left,a=this.getters.getCell({sheetId:s,col:r,row:t});if(1!==i.length||i[0]!==a?.content)for(const[e,o]of i.entries())this.dispatch("UPDATE_CELL",{sheetId:s,col:r+e,row:t,content:ea(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 n of ue(e.top,e.bottom+1)){const i=this.getters.getEvaluatedCell({sheetId:o,col:e.left,row:n}).formattedValue;s.push(this.splitAndRemoveTrailingEmpty(i,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 ue(e.top,e.bottom+1)){const n=t[s-e.top];for(let t=1;t<n.length;t++){const n=this.getters.getCell({sheetId:o,col:e.left+t,row:s});if(n&&n.content)return!0}}return!1}removeMergesInSplitZone(e,t){const o=this.getters.getActiveSheetId(),s=Math.max(...t.map((e=>e.length))),n={...e,right:e.left+s-1},i=this.getters.getMergesInZone(o,n);this.dispatch("REMOVE_MERGE",{sheetId:o,target:i})}addColsToAvoidCollisions(e,t){const o=this.getters.getActiveSheetId();let s=0;for(const n of ue(e.top,e.bottom+1)){const i={sheetId:o,col:e.left,row:n},r=t[n-e.top],a=this.getColsToAddToAvoidCollision(i,r);s=Math.max(s,a)}s&&this.dispatch("ADD_COLUMNS_ROWS",{dimension:"COL",base:e.left,sheetId:o,quantity:s,position:"after"})}getColsToAddToAvoidCollision(e,t){const o=t.length;for(let t=1;t<o;t++){const s=e.col+t,n=this.getters.getCell({...e,col:s});if(n&&n.content)return o-t}return 0}addColumnsToNotOverflowSheet(e,t){const o=this.getters.getActiveSheetId(),s=Math.max(...t.map((e=>e.length-1))),n=this.getters.getNumberCols(o)-1;e.left+s>n&&this.dispatch("ADD_COLUMNS_ROWS",{dimension:"COL",base:n,sheetId:o,quantity:e.left+s-n,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("cell_popovers",class extends Jx{static getters=["getCellPopover","getPersistentPopoverTypeAtPosition","hasOpenedPopover"];persistentPopover;allowDispatch(e){if("OPEN_CELL_POPOVER"===e.type){try{ya.get(e.popoverType)}catch(e){return"InvalidCellPopover"}return"Success"}return"Success"}handle(e){switch(e.type){case"ACTIVATE_SHEET":case"CLOSE_CELL_POPOVER":this.persistentPopover=void 0;break;case"OPEN_CELL_POPOVER":this.persistentPopover={col:e.col,row:e.row,sheetId:this.getters.getActiveSheetId(),type:e.popoverType}}}getCellPopover({col:e,row:t}){const o=this.getters.getActiveSheetId();if(this.persistentPopover&&this.getters.isVisibleInViewport(this.persistentPopover)){const e=this.getters.getMainCellPosition(this.persistentPopover),t=ya.get(this.persistentPopover.type).onOpen?.(e,this.getters);return t?.isOpen?{...t,anchorRect:this.computePopoverAnchorRect(this.persistentPopover)}:{isOpen:!1}}if(void 0===e||void 0===t||!this.getters.isVisibleInViewport({sheetId:o,col:e,row:t}))return{isOpen:!1};const s=this.getters.getMainCellPosition({sheetId:o,col:e,row:t}),n=ya.getAll().map((e=>e.onHover?.(s,this.getters))).find((e=>e?.isOpen));return n?.isOpen?{...n,anchorRect:this.computePopoverAnchorRect(s)}:{isOpen:!1}}hasOpenedPopover(){return void 0!==this.persistentPopover}getPersistentPopoverTypeAtPosition({col:e,row:t}){if(this.persistentPopover&&this.persistentPopover.col===e&&this.persistentPopover.row===t)return this.persistentPopover.type}computePopoverAnchorRect({col:e,row:t}){const o=this.getters.getActiveSheetId(),s=this.getters.getMerge({sheetId:o,col:e,row:t});return s?this.getters.getVisibleRect(s):this.getters.getVisibleRect(An({col:e,row:t}))}}).add("collaborative",class extends Jx{static getters=["getClientsToDisplay","getClient","getConnectedClients","isFullySynchronized"];static layers=[6];availableColors=new Set(qI);colors={};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)}chooseNewColor(){0===this.availableColors.size&&(this.availableColors=new Set(qI));const e=(t=[...this.availableColors.values()])[Math.floor(Math.random()*t.length)];var t;return this.availableColors.delete(e),e}getClient(){return this.session.getClient()}getConnectedClients(){return this.session.getConnectedClients()}isFullySynchronized(){return this.session.isFullySynchronized()}getClientsToDisplay(){try{this.getters.getClient()}catch(e){if(e instanceof $I)return[];throw e}const e=this.getters.getActiveSheetId(),t=[];for(const o of this.getters.getConnectedClients())if(o.id!==this.getters.getClient().id&&o.position&&o.position.sheetId===e&&this.isPositionValid(o.position)){const e=o.position;this.colors[o.id]||(this.colors[o.id]=this.chooseNewColor());const s=this.colors[o.id];t.push({...o,position:e,color:s})}return t}drawGrid(e){if(this.getters.isDashboard())return;const{ctx:t,thinLineWidth:o}=e,s=this.getters.getActiveSheetId();for(const e of this.getClientsToDisplay()){const{row:n,col:i}=e.position,r=this.getters.expandZone(s,{top:n,bottom:n,left:i,right:i}),{x:a,y:l,width:c,height:h}=this.getters.getVisibleRect(r);if(c<=0||h<=0)continue;const d=e.color,u=`${d}10`;t.fillStyle=u,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 ${B+1}px ${H}`}}}).add("history",class extends Jx{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("pending-revisions-dropped",this,(({revisionIds:e})=>this.drop(e))),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=hR(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)&&(io(t.rootCommand)?rR.contains(t.rootCommand.type):aR.contains(t.rootCommand.type));var t}drop(e){this.undoStack=this.undoStack.filter((t=>!e.includes(t))),this.redoStack=[]}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 Jx{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 n=this.getUniqueRowsIndexes(o,s.top,s.bottom,e),i=n.length;if(i===wn(s).numberOfRows)return void this.notifyRowsRemovedAndRemaining(0,i);const r=n.map((e=>({left:s.left,top:e,right:s.right,bottom:e}))),a=new YI(r,"COPY",this.getters,this.dispatch,this.selection);for(const{col:e,row:t}of xn(s))this.dispatch("CLEAR_CELL",{col:e,row:t,sheetId:o});const l={left:s.left,top:s.top,right:s.left,bottom:s.top};a.paste([l]);const c={left:s.left,top:s.top-(t?1:0),right:s.right,bottom:s.top+i-1};this.selection.selectZone({cell:{col:c.left,row:c.top},zone:c});const h=s.bottom-s.top+1-i;this.notifyRowsRemovedAndRemaining(h,i)}getUniqueRowsIndexes(e,t,o,s){const n=new Map;for(const i of ue(t,o+1)){const t=s.map((t=>this.getters.getEvaluatedCell({sheetId:e,col:t,row:i}).value));!Object.values(n).some((e=>Fe(e,t)))&&(n[i]=t)}return Object.keys(n).map((e=>parseInt(e)))}notifyRowsRemovedAndRemaining(e,t){this.ui.notifyUI({type:"info",text:Xt("%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=this.getters.getSelectedZones(),t=this.getters.getActiveSheetId();let o=0;for(const{col:s,row:n}of e.map(xn).flat()){const e=this.getters.getCell({col:s,row:n,sheetId:t});if(!e)continue;const i=Ge(e.content);i!==e.content&&(o+=1,this.dispatch("UPDATE_CELL",{sheetId:t,col:s,row:n,content:i}))}const s=o?Xt("Trimmed whitespace from %s cells.",o):Xt("No selected cells had whitespace trimmed.");this.ui.notifyUI({type:"info",text:s,sticky:!1})}}),ER=(new Pi).add("selection",class extends Jx{static layers=[6];static getters=["getActiveSheet","getActiveSheetId","getActiveCell","getActiveCols","getActiveRows","getCurrentStyle","getSelectedZones","getSelectedZone","getSelectedCells","getStatisticFnResults","getAggregate","getSelectedFigureId","getSelection","getActivePosition","getSheetPosition","isSelected","isSingleColSelected","getElementsFromSelection","tryGetActiveSheetId","isGridSelectionActive"];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;activeSheet=null;constructor(e){super(e),this.moveClient=e.moveClient}allowDispatch(e){switch(e.type){case"ACTIVATE_SHEET":try{this.getters.getSheet(e.sheetIdTo);break}catch(e){return"InvalidSheetId"}case"MOVE_COLUMNS_ROWS":return this.isMoveElementAllowed(e)}return"Success"}handleEvent(e){const t=e.anchor;let o=[];switch(e.mode){case"overrideSelection":o=[t.zone];break;case"updateAnchor":o=[...this.gridSelection.zones];const s=o.findIndex((t=>fn(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,le(this.gridSelection.anchor));const{col:s,row:n}=this.gridSelection.anchor.cell;this.moveClient({sheetId:this.getters.getActiveSheetId(),col:s,row:n}),this.selectedFigureId=null}handle(e){switch(e.type){case"START_EDITION":case"ACTIVATE_SHEET":this.selectedFigureId=null;break;case"DELETE_FIGURE":this.selectedFigureId===e.id&&(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.id;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 n=Object.keys(this.sheetsData).filter((e=>!this.getters.tryGetSheet(e)));for(const e of n)delete this.sheetsData[e];for(const e in this.sheetsData){const t=this.clipSelection(e,this.sheetsData[e].gridSelection);this.sheetsData[e]={gridSelection:le(t)}}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})}const i=this.getters.getActiveSheetId();this.gridSelection.zones=this.gridSelection.zones.map((e=>this.getters.expandZone(i,e))),this.gridSelection.anchor.zone=this.getters.expandZone(i,this.gridSelection.anchor.zone),this.setSelectionMixin(this.gridSelection.anchor,this.gridSelection.zones)}this.selection.resetDefaultAnchor(this,le(this.gridSelection.anchor))}isGridSelectionActive(){return this.selection.isListening(this)}getActiveSheet(){return this.activeSheet}getActiveSheetId(){return this.activeSheet.id}tryGetActiveSheetId(){return this.activeSheet?.id}getActiveCell(){return this.getters.getEvaluatedCell(this.getActivePosition())}getActiveCols(){const e=new Set;for(let 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(let 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 le(this.gridSelection.zones)}getSelectedZone(){return le(this.gridSelection.anchor.zone)}getSelection(){return le(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})}}getStatisticFnResults(){const e=this.getters.getActiveSheetId(),t=new Set;for(const o of this.gridSelection.zones)for(const{col:s,row:n}of xn(o)){if(this.getters.isRowHidden(e,n)||this.getters.isColHidden(e,s))continue;const o=this.getters.getEvaluatedCell({sheetId:e,col:s,row:n});o.type!==Qt.empty&&t.add(o)}const o=this.getters.getLocale();let s={};for(let e of vR){let n;const i=[...t].filter((t=>e.types.includes(t.type)));i.length&&(n=e.compute(i,o)),s[e.name]=n}return s}getAggregate(){let e=0,t=0;const o=this.getters.getActiveSheetId(),s=this.gridSelection.zones.map(xn).flat();for(const{col:n,row:i}of s){const s=this.getters.getEvaluatedCell({sheetId:o,col:n,row:i});s.type===Qt.number&&(t++,e+=s.value)}const n=this.getters.getLocale();return t<2?null:Ss(e,{locale:n})}isSelected(e){return!!this.getters.getSelectedZones().find((t=>fn(t,e)))}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",n="COL"===e?"right":"bottom";for(const e of t){const t=Array.from({length:e[n]-e[s]+1},((t,o)=>e[s]+o));o=o.concat(t)}return[...new Set(o)].sort()}activateSheet(e,t){if(this.getters.isSheetVisible(t)||this.dispatch("SHOW_SHEET",{sheetId:t}),this.setActiveSheet(t),this.sheetsData[e]={gridSelection:le(this.gridSelection)},t in this.sheetsData)Object.assign(this,this.sheetsData[t]),this.selection.resetDefaultAnchor(this,le(this.gridSelection.anchor));else{const{col:e,row:o}=this.getters.getNextVisibleCellPosition({sheetId:t,col:0,row:0});this.selectCell(e,o)}}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){const t=this.getters.getSheet(e);this.activeSheet=t}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=un(o,"left",[...e.elements]);let n={left:t.col,right:t.col,top:t.row,bottom:t.row};n=un(n,"left",[...e.elements]);const i={cell:{col:n.left,row:n.top},zone:s},r=this.gridSelection.zones.map((t=>un(t,"left",[...e.elements])));this.setSelectionMixin(i,r)}onRowsRemoved(e){const{cell:t,zone:o}=this.gridSelection.anchor,s=un(o,"top",[...e.elements]);let n={left:t.col,right:t.col,top:t.row,bottom:t.row};n=un(n,"top",[...e.elements]);const i={cell:{col:n.left,row:n.top},zone:s},r=this.gridSelection.zones.map((t=>un(t,"top",[...e.elements])));this.setSelectionMixin(i,r)}onAddElements(e){const t="COL"===e.dimension?"left":"top",o=dn(this.gridSelection.anchor.zone,t,e.base,e.position,e.quantity),s=this.gridSelection.zones.map((o=>dn(o,t,e.base,e.position,e.quantity))),n={cell:{col:o.left,row:o.top},zone:o};this.setSelectionMixin(n,s)}onMoveElements(e){const t=e.elements.length;this.dispatch("ADD_COLUMNS_ROWS",{dimension:e.dimension,sheetId:e.sheetId,base:e.base,quantity:t,position:e.position});const o="COL"===e.dimension,s=e.elements[0],n=e.elements[t-1],i=e.base<s,r=i&&o?t:0,a=i&&!o?t:0,l=[{left:o?s+r:0,right:o?n+r:this.getters.getNumberCols(e.sheetId)-1,top:o?0:s+a,bottom:o?this.getters.getNumberRows(e.sheetId)-1:n+a}],c=new YI(l,"CUT",this.getters,this.dispatch,this.selection),h=i?e.base:e.base+1,d=[{left:o?h:0,right:o?h+t-1:this.getters.getNumberCols(e.sheetId)-1,top:o?0:h,bottom:o?this.getters.getNumberRows(e.sheetId)-1:h+t-1}];c.paste(d,{selectTarget:!0});const u=i?e.elements.map((e=>e+t)):e.elements;let g=e.base;for(const t of u){const o=this.getters.getHeaderSize(e.sheetId,e.dimension,t);this.dispatch("RESIZE_COLUMNS_ROWS",{dimension:e.dimension,sheetId:e.sheetId,size:o,elements:[g]}),g+=1}this.dispatch("REMOVE_COLUMNS_ROWS",{dimension:e.dimension,sheetId:e.sheetId,elements:u})}isMoveElementAllowed(e){const t="COL"===e.dimension,o=e.elements[0],s=e.elements[e.elements.length-1],n=e.sheetId,i=t?this.getters.doesColumnsHaveCommonMerges:this.getters.doesRowsHaveCommonMerges;if(i(n,o-1,o)||i(n,s,s+1)||i(n,e.base-1,e.base))return"WillRemoveExistingMerge";const r=[e.base,...e.elements],a=t?this.getters.getNumberCols(n):this.getters.getNumberRows(n);return r.some((e=>e<0||e>=a))?"InvalidHeaderIndex":"Success"}clipSelection(e,t){const o=this.getters.getNumberCols(e)-1,s=this.getters.getNumberRows(e)-1;return{zones:t.zones.map((e=>({left:de(e.left,0,o),right:de(e.right,0,o),top:de(e.top,0,s),bottom:de(e.bottom,0,s)}))),anchor:{cell:{col:de(t.anchor.cell.col,0,o),row:de(t.anchor.cell.row,0,s)},zone:{left:de(t.anchor.zone.left,0,o),right:de(t.anchor.zone.right,0,o),top:de(t.anchor.zone.top,0,s),bottom:de(t.anchor.zone.bottom,0,s)}}}}drawGrid(e){if(this.getters.isDashboard())return;const{ctx:t,thinLineWidth:o}=e,s=this.getSelectedZones();t.fillStyle="#f3f7fe";const n=1===s.length&&s[0].left===s[0].right&&s[0].top===s[0].bottom;t.fillStyle=n?"#f3f7fe":"#e9f0ff",t.strokeStyle=c,t.lineWidth=1.5*o;for(const e of s){const{x:o,y:s,width:n,height:i}=this.getters.getVisibleRect(e);t.globalCompositeOperation="multiply",t.fillRect(o,s,n,i),t.globalCompositeOperation="source-over",t.strokeRect(o,s,n,i)}t.globalCompositeOperation="source-over";const i=this.getActivePosition();let r;t.strokeStyle=c,t.lineWidth=3*o,r=this.getters.isInMerge(i)?this.getters.getMerge(i):An(i);const{x:a,y:l,width:h,height:d}=this.getters.getVisibleRect(r);h>0&&d>0&&t.strokeRect(a,l,h,d)}}).add("evaluation_filter",class extends Jx{static getters=["getCellBorderWithFilterBorder","getFilterValues","isRowFiltered","isFilterActive"];filterValues={};hiddenRows=new Set;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_FILTER_TABLE":case"ADD_COLUMNS_ROWS":case"REMOVE_COLUMNS_ROWS":this.isEvaluationDirty=!0;break;case"START":for(const e of this.getters.getSheetIds()){this.filterValues[e]={};for(const t of this.getters.getFilters(e))this.filterValues[e][t.id]=[]}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":this.updateHiddenRows();break;case"UPDATE_FILTER":this.updateFilter(e),this.updateHiddenRows();break;case"DUPLICATE_SHEET":const t={};for(const o of this.getters.getFilters(e.sheetIdTo)){const s=o.zoneWithHeaders;t[o.id]=this.getFilterValues({sheetId:e.sheetId,col:s.left,row:s.top})}this.filterValues[e.sheetIdTo]=t}}finalize(){this.isEvaluationDirty&&(this.updateHiddenRows(),this.isEvaluationDirty=!1)}isRowFiltered(e,t){return e===this.getters.getActiveSheetId()&&this.hiddenRows.has(t)}getCellBorderWithFilterBorder(e){const{sheetId:t,col:o,row:s}=e;let n;for(let e of this.getters.getFilterTables(t)){const i=e.zone;if(bn(o,s,i)){const e=this.intersectZoneWithViewport(t,i);n={top:s===e.top?$:void 0,bottom:s===e.bottom?$:void 0,left:o===e.left?$:void 0,right:o===e.right?$:void 0}}}const i=this.getters.getCellBorder(e),r={...n,...Le(i||{})};return Te(r)?null:r}getFilterValues(e){const t=this.getters.getFilterId(e),o=e.sheetId;return t&&this.filterValues[o]&&this.filterValues[o][t]||[]}isFilterActive(e){const t=this.getters.getFilterId(e),o=e.sheetId;return Boolean(t&&this.filterValues[o]?.[t]?.length)}intersectZoneWithViewport(e,t){return{left:this.getters.findVisibleHeader(e,"COL",t.left,t.right),right:this.getters.findVisibleHeader(e,"COL",t.right,t.left),top:this.getters.findVisibleHeader(e,"ROW",t.top,t.bottom),bottom:this.getters.findVisibleHeader(e,"ROW",t.bottom,t.top)}}updateFilter({col:e,row:t,hiddenValues:o,sheetId:s}){const n=this.getters.getFilterId({sheetId:s,col:e,row:t});n&&(this.filterValues[s]||(this.filterValues[s]={}),this.filterValues[s][n]=o)}updateHiddenRows(){const e=this.getters.getActiveSheetId(),t=this.getters.getFilters(e).sort(((e,t)=>e.zoneWithHeaders.top-t.zoneWithHeaders.top)),o=new Set;for(let s of t){if(o.has(s.zoneWithHeaders.top)||this.getters.isRowHiddenByUser(e,s.zoneWithHeaders.top))continue;const t=this.filterValues[e]?.[s.id]?.map(Yn);if(t&&s.filteredZone)for(let n=s.filteredZone.top;n<=s.filteredZone.bottom;n++){const i=this.getCellValueAsString(e,s.col,n);t.includes(i)&&o.add(n)}}this.hiddenRows=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.filterTables){const s=rn(o.range),n=[],i=[];for(const o of ue(0,wn(s).numberOfCols)){const r={sheetId:t.id,col:s.left+o,row:s.top},a=this.getFilterValues(r),l=this.getters.getFilter(r);if(!l)continue;const c=l.filteredZone?xn(l.filteredZone).map((t=>this.getters.getEvaluatedCell({sheetId:e,...t}).formattedValue)):[];if(a.length){const e=c.filter((e=>e)).filter((e=>!a.includes(e)));n.push({colId:o,displayedValues:[...new Set(e)],displayBlanks:!a.includes("")&&c.some((e=>!e))})}const h={col:l.col,row:l.zoneWithHeaders.top,sheetId:e},d=this.getters.getEvaluatedCell(h).formattedValue,u=this.getUniqueColNameForExcel(o,d,i);i.push(u),t.cells[ut(h.col,h.row)]={...t.cells[ut(h.col,h.row)],content:u,value:u,isFormula:!1}}o.filters=n}}}getUniqueColNameForExcel(e,t,o){t||(t=`Column${e}`);let s=t,n=2;for(;o.includes(s);)s=t+String(n),n++;return s}}).add("header_visibility_ui",class extends Jx{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 n=o;n<=s;n++)if(this.getters.doesHeaderExist(e,t,n)&&!this.isHeaderHidden(e,t,n))return n;if(o>s)for(let n=o;n>=s;n--)if(this.getters.doesHeaderExist(e,t,n)&&!this.isHeaderHidden(e,t,n))return n}findLastVisibleColRowIndex(e,t,{last:o,first:s}){return ue(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)){const s=this.isRowHidden(t.id,Number(e));o.isHidden=s}}}).add("header_positions",class extends Jx{static getters=["getColDimensions","getRowDimensions","getColRowOffset"];headerPositions={};isDirty=!0;handle(e){switch(eo.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":"content"in e||"format"in e?(this.headerPositions={},this.isDirty=!0):this.headerPositions[e.sheetId]=this.computeHeaderPositionsOfSheet(e.sheetId);break;case"UPDATE_FILTER":case"REMOVE_FILTER_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.headerPositions[e.sheetId]=this.computeHeaderPositionsOfSheet(e.sheetId);break;case"DUPLICATE_SHEET":this.headerPositions[e.sheetIdTo]=le(this.headerPositions[e.sheetId])}}finalize(){if(this.isDirty){for(const e of this.getters.getSheetIds())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 n=this.headerPositions[s][e][t];return this.headerPositions[s][e][o]-n}computeHeaderPositionsOfSheet(e){return{COL:this.computePositions(e,"COL"),ROW:this.computePositions(e,"ROW")}}computePositions(e,t){const o={};let s=0;for(let n=0;n<this.getters.getNumberHeaders(e,t)+1;n++)o[n]=s,this.getters.isHeaderHidden(e,t,n)||(s+=this.getters.getHeaderSize(e,t,n));return o}}).add("viewport",class extends Jx{static getters=["getColIndex","getRowIndex","getActiveMainViewport","getSheetViewDimension","getSheetViewDimensionWithHeaders","getMainViewportRect","isVisibleInViewport","getEdgeScrollCol","getEdgeScrollRow","getVisibleFigures","getVisibleRect","getColRowOffsetInViewport","getMainViewportCoordinates","getActiveSheetScrollInfo","getActiveSheetDOMScrollInfo","getSheetViewVisibleCols","getSheetViewVisibleRows","getFrozenSheetViewRatio","isPositionVisible"];viewports={};sheetViewWidth=se();sheetViewHeight=se();gridOffsetX=0;gridOffsetY=0;sheetsWithDirtyViewports=new Set;shouldAdjustViewports=!1;allowDispatch(e){switch(e.type){case"SET_VIEWPORT_OFFSET":return this.checkScrollingDirection(e);case"RESIZE_SHEETVIEW":return this.chainValidations(this.checkValuesAreDifferent,this.checkPositiveDimension)(e);default:return"Success"}}handleEvent(e){if(e.options.scrollIntoView){let{col:t,row:o}=Rn(e.previousAnchor.zone,e.anchor.zone);if("updateAnchor"===e.mode){const s=e.previousAnchor.zone,n=e.anchor.zone,{top:i,bottom:r,left:a,right:l}=this.getters.getActiveMainViewport();s.left===n.left&&s.right===n.right&&(t=a>t||t>l?a:t),s.top===n.top&&s.bottom===n.bottom&&(o=i>o||o>r?i:o)}const s=this.getters.getActiveSheetId();t=Math.min(t,this.getters.getNumberCols(s)-1),o=Math.min(o,this.getters.getNumberRows(s)-1),this.sheetsWithDirtyViewports.has(s)||this.refreshViewport(this.getters.getActiveSheetId(),{col:t,row:o})}}handle(e){if(this.cleanViewports(),eo.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":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{top:t}=this.getActiveMainViewport(),o=this.getters.getActiveSheetId(),s=this.clipOffsetY(this.getters.getRowDimensions(o,t).start+this.sheetViewHeight);this.shiftVertically(s);break;case"SHIFT_VIEWPORT_UP":{const{top:e}=this.getActiveMainViewport(),t=this.getters.getActiveSheetId(),o=this.clipOffsetY(this.getters.getRowDimensions(t,e).end-this.sheetViewHeight);this.shiftVertically(o);break}case"REMOVE_FILTER_TABLE":case"UPDATE_FILTER":this.sheetsWithDirtyViewports.add(e.sheetId);break;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":{const t="sheetId"in e?e.sheetId:this.getters.getActiveSheetId();this.sheetsWithDirtyViewports.add(t);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"ACTIVATE_SHEET":this.sheetsWithDirtyViewports.add(e.sheetIdTo);break;case"UNFREEZE_ROWS":case"UNFREEZE_COLUMNS":case"FREEZE_COLUMNS":case"FREEZE_ROWS":case"UNFREEZE_COLUMNS_ROWS":this.resetViewports(this.getters.getActiveSheetId());break;case"DELETE_SHEET":this.sheetsWithDirtyViewports.delete(e.sheetId);break;case"START_EDITION":const{col:n,row:i}=this.getters.getActivePosition();this.refreshViewport(this.getters.getActiveSheetId(),{col:n,row:i})}}finalize(){for(const e of this.sheetsWithDirtyViewports)if(this.resetViewports(e),this.shouldAdjustViewports){const t=this.getters.getSheetPosition(e),o=this.getSubViewports(e);Object.values(o).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}}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}}getActiveSheetDOMScrollInfo(){const e=this.getters.getActiveSheetId(),t=this.getMainInternalViewport(e);return{scrollX:t.offsetScrollbarX,scrollY:t.offsetScrollbarY}}getSheetViewVisibleCols(){const e=this.getters.getActiveSheetId(),t=this.getSubViewports(e);return[...new Set(t.map((e=>ue(e.left,e.right+1))).flat())].filter((t=>!this.getters.isHeaderHidden(e,"COL",t)))}getSheetViewVisibleRows(){const e=this.getters.getActiveSheetId(),t=this.getSubViewports(e);return[...new Set(t.map((e=>ue(e.top,e.bottom+1))).flat())].filter((t=>!this.getters.isHeaderHidden(e,"ROW",t)))}getMainViewportRect(){const e=this.getters.getActiveSheetId(),t=this.getMainInternalViewport(e),{xSplit:o,ySplit:s}=this.getters.getPaneDivisions(e);let{width:n,height:i}=t.getMaxSize();return{x:this.getters.getColDimensions(e,o).start,y:this.getters.getRowDimensions(e,s).start,width:n,height:i}}getMaximumSheetOffset(){const e=this.getters.getActiveSheetId(),{width:t,height:o}=this.getMainViewportRect(),s=this.getMainInternalViewport(e);return{maxOffsetX:Math.max(0,t-s.viewportWidth+1),maxOffsetY:Math.max(0,o-s.viewportHeight+1)}}getColRowOffsetInViewport(e,t,o){const s=this.getters.getActiveSheetId(),n=this.getters.getSheetViewVisibleCols(),i=this.getters.getSheetViewVisibleRows();if(o<t)return-this.getColRowOffsetInViewport(e,o,t);let r=0;const a="COL"===e?n:i;for(let n=t;n<o;n++)a.includes(n)&&(r+=this.getters.getHeaderSize(s,e,n));return r}isVisibleInViewport({sheetId:e,col:t,row:o}){return this.getSubViewports(e).some((e=>e.isVisible(t,o)))}getEdgeScrollCol(e,t,o){let s=!1,n=0,i=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,i=hs(e-a),n=1):e<l&&o>=l&&c>0?(s=!0,i=hs(l-e),n=-1):r&&t<l&&e>l&&(s=!0,i=hs(e),n="reset"),{canEdgeScroll:s,direction:n,delay:i}}getEdgeScrollRow(e,t,o){let s=!1,n=0,i=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,i=hs(e-a),n=1):e<l&&o>=l&&c>0?(s=!0,i=hs(l-e),n=-1):r&&t<l&&e>l&&(s=!0,i=hs(e),n="reset"),{canEdgeScroll:s,direction:n,delay:i}}getVisibleRect(e){const t=this.getters.getActiveSheetId(),o=this.getSubViewports(t).map((t=>t.getRect(e))).filter(Ie);if(0===o.length)return{x:0,y:0,width:0,height:0};const s=Math.min(...o.map((e=>e.x))),n=Math.min(...o.map((e=>e.y))),i=Math.max(...o.map((e=>e.x+e.width)))-s,r=Math.max(...o.map((e=>e.y+e.height)))-n;return{x:s+this.gridOffsetX,y:n+this.gridOffsetY,width:i,height:r}}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}}ensureMainViewportExist(e){this.viewports[e]||this.resetViewports(e)}getSubViewports(e){return this.ensureMainViewportExist(e),Object.values(this.viewports[e]).filter(Ie)}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"}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=this.getters.getSheetIds();for(let t of Object.keys(this.viewports))e.includes(t)||delete this.viewports[t]}resizeSheetView(e,t,o=0,s=0){this.sheetViewHeight=e,this.sheetViewWidth=t,this.gridOffsetX=o,this.gridOffsetY=s,this.recomputeViewports()}recomputeViewports(){for(let e of Object.keys(this.viewports))this.resetViewports(e)}setSheetViewOffset(e,t){const o=this.getters.getActiveSheetId(),{maxOffsetX:s,maxOffsetY:n}=this.getMaximumSheetOffset();Object.values(this.getSubViewports(o)).forEach((o=>o.setViewportOffset(de(e,0,s),de(t,0,n))))}clipOffsetY(e){const{height:t}=this.getMainViewportRect(),o=t-this.sheetViewHeight;return e=Math.min(e,o),e=Math.max(e,0)}getViewportOffset(e){return{x:this.viewports[e]?.bottomRight.offsetScrollbarX||0,y:this.viewports[e]?.bottomRight.offsetScrollbarY||0}}resetViewports(e){if(!this.getters.tryGetSheet(e))return;const{xSplit:t,ySplit:o}=this.getters.getPaneDivisions(e),s=this.getters.getNumberCols(e),n=this.getters.getNumberRows(e),i=this.getters.getColRowOffset("COL",0,t,e),r=this.getters.getColRowOffset("ROW",0,o,e),{xRatio:a,yRatio:l}=this.getFrozenSheetViewRatio(e),c=a<1,h=l<1,d=this.getViewportOffset(e),u={topLeft:o&&t&&new bR(this.getters,e,{left:0,right:t-1,top:0,bottom:o-1},{width:i,height:r},{canScrollHorizontally:!1,canScrollVertically:!1},{x:0,y:0})||void 0,topRight:o&&new bR(this.getters,e,{left:t,right:s-1,top:0,bottom:o-1},{width:this.sheetViewWidth-i,height:r},{canScrollHorizontally:c,canScrollVertically:!1},{x:c?d.x:0,y:0})||void 0,bottomLeft:t&&new bR(this.getters,e,{left:0,right:t-1,top:o,bottom:n-1},{width:i,height:this.sheetViewHeight-r},{canScrollHorizontally:!1,canScrollVertically:h},{x:0,y:h?d.y:0})||void 0,bottomRight:new bR(this.getters,e,{left:t,right:s-1,top:o,bottom:n-1},{width:this.sheetViewWidth-i,height:this.sheetViewHeight-r},{canScrollHorizontally:c,canScrollVertically:h},{x:c?d.x:0,y:h?d.y:0})};this.viewports[e]=u}refreshViewport(e,t){Object.values(this.getSubViewports(e)).forEach((e=>{e.adjustViewportZone(),e.adjustPosition(t)}))}shiftVertically(e){const{top:t}=this.getActiveMainViewport(),{scrollX:o}=this.getActiveSheetScrollInfo();this.setSheetViewOffset(o,e);const{anchor:s}=this.getters.getSelection(),n=this.getActiveMainViewport().top-t;this.selection.selectCell(s.cell.col,s.cell.row+n)}getVisibleFigures(){const e=this.getters.getActiveSheetId(),t=[],o=this.getters.getFigures(e),{scrollX:s,scrollY:n}=this.getActiveSheetScrollInfo(),{x:i,y:r}=this.getters.getMainViewportCoordinates(),{width:a,height:l}=this.getters.getSheetViewDimensionWithHeaders();for(const e of o)e.x>=i&&(e.x+e.width<=i+s||e.x>=a+s+i)||e.y>=r&&(e.y+e.height<=r+n||e.y>=l+n+r)||t.push(e);return t}isPositionVisible(e){const{scrollX:t,scrollY:o}=this.getters.getActiveSheetScrollInfo(),{x:s,y:n}=this.getters.getMainViewportCoordinates(),{width:i,height:r}=this.getters.getSheetViewDimension();return!(e.x>=s&&(e.x<s+t||e.x>i+t+s))&&!(e.y>=n&&(e.y<n+o||e.y>r+o+n))}getFrozenSheetViewRatio(e){const{xSplit:t,ySplit:o}=this.getters.getPaneDivisions(e),s=this.getters.getColDimensions(e,t).start,n=this.getters.getRowDimensions(e,o).start;return{xRatio:s/(this.sheetViewWidth+this.gridOffsetX),yRatio:n/(this.sheetViewHeight+this.gridOffsetY)}}}).add("clipboard",class extends Jx{static layers=[2];static getters=["getClipboardContent","getClipboardTextContent","isCutOperation","isPaintingFormat"];status="invisible";state;lastPasteState;paintFormatStatus="inactive";originSheetId;allowDispatch(e){switch(e.type){case"CUT":const t=this.getters.getSelectedZones();return this.getClipboardState(t,e.type).isCutAllowed(t);case"PASTE":if(!this.state)return"EmptyClipboard";const o=e.pasteOption||("inactive"!==this.paintFormatStatus?"onlyFormat":void 0);return this.state.isPasteAllowed(e.target,{pasteOption:o});case"PASTE_FROM_OS_CLIPBOARD":return new mR(e.text,this.getters,this.dispatch,this.selection).isPasteAllowed(e.target,{pasteOption:e.pasteOption});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);return this.getClipboardStateForCopyCells(t,"CUT").isPasteAllowed(o)}case"DELETE_CELL":{const{cut:t,paste:o}=this.getDeleteCellsTargets(e.zone,e.shiftDimension);return this.getClipboardStateForCopyCells(t,"CUT").isPasteAllowed(o)}case"ACTIVATE_PAINT_FORMAT":if("inactive"!==this.paintFormatStatus)return"AlreadyInPaintingFormatMode"}return"Success"}handle(e){switch(e.type){case"COPY":case"CUT":const t=this.getters.getSelectedZones();this.state=this.getClipboardState(t,e.type),this.status="visible",this.originSheetId=this.getters.getActiveSheetId();break;case"PASTE":if(!this.state)break;const o=e.pasteOption||("inactive"!==this.paintFormatStatus?"onlyFormat":void 0);this.state.paste(e.target,{pasteOption:o,shouldPasteCF:!0,selectTarget:!0}),"CUT"===this.state.operation&&(this.state=void 0),this.lastPasteState=this.state,"oneOff"===this.paintFormatStatus&&(this.paintFormatStatus="inactive"),this.status="invisible";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.getClipboardStateForCopyCells([o],"COPY").paste([e],{pasteOption:void 0,shouldPasteCF:!0,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.getClipboardStateForCopyCells([o],"COPY").paste([e],{pasteOption:void 0,shouldPasteCF:!0,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(!an(t[0])){for(const{col:t,row:o}of xn(e.zone))this.dispatch("CLEAR_CELL",{col:t,row:o,sheetId:this.getters.getActiveSheetId()});break}this.getClipboardStateForCopyCells(t,"CUT").paste(o);break}case"INSERT_CELL":{const{cut:t,paste:o}=this.getInsertCellsTargets(e.zone,e.shiftDimension);this.getClipboardStateForCopyCells(t,"CUT").paste(o);break}case"ADD_COLUMNS_ROWS":if(this.status="invisible","CUT"!==this.state?.operation)return;this.state.isColRowDirtyingClipboard("before"===e.position?e.base:e.base+1,e.dimension)&&(this.state=void 0);break;case"REMOVE_COLUMNS_ROWS":if(this.status="invisible","CUT"!==this.state?.operation)return;for(let t of e.elements){if(this.state.isColRowDirtyingClipboard(t,e.dimension)){this.state=void 0;break}}this.status="invisible";break;case"PASTE_FROM_OS_CLIPBOARD":this.state=new mR(e.text,this.getters,this.dispatch,this.selection),this.state.paste(e.target,{pasteOption:e.pasteOption}),this.lastPasteState=this.state,this.status="invisible";break;case"REPEAT_PASTE":this.lastPasteState?.paste(e.target,{pasteOption:e.pasteOption,shouldPasteCF:!0,selectTarget:!0});break;case"ACTIVATE_PAINT_FORMAT":{const t=this.getters.getSelectedZones();this.state=this.getClipboardStateForCopyCells(t,"COPY"),this.status="visible",e.persistent?this.paintFormatStatus="persistent":this.paintFormatStatus="oneOff";break}case"DELETE_SHEET":if("CUT"!==this.state?.operation)return;this.originSheetId===e.sheetId&&(this.state=void 0,this.status="invisible");break;case"CANCEL_PAINT_FORMAT":this.paintFormatStatus="inactive",this.status="invisible";break;default:io(e)&&(this.status="invisible")}}getClipboardContent(){return this.state?.getClipboardContent()||{[Jt.PlainText]:"\t"}}getClipboardTextContent(){return this.state?.getClipboardContent()[Jt.PlainText]||"\t"}isCutOperation(){return!!this.state&&"CUT"===this.state.operation}isPaintingFormat(){return"inactive"!==this.paintFormatStatus}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,n;return"COL"===t?(s={...e,right:this.getters.getNumberCols(o)-1},n={...e,left:e.right+1,right:e.right+1}):(s={...e,bottom:this.getters.getNumberRows(o)-1},n={...e,top:e.bottom+1,bottom:this.getters.getNumberRows(o)-1}),{cut:[s],paste:[n]}}getClipboardStateForCopyCells(e,t){return new YI(e,t,this.getters,this.dispatch,this.selection)}getClipboardState(e,t){return this.getters.getSelectedFigureId()?new dR(t,this.getters,this.dispatch):new YI(e,t,this.getters,this.dispatch,this.selection)}drawGrid(e){"visible"===this.status&&this.state&&this.state.drawClipboard(e)}}).add("edition",class extends Jx{static getters=["getEditionMode","isSelectingForComposer","showSelectionIndicator","getCurrentContent","getComposerSelection","getCurrentTokens","getTokenAtCursor","getComposerHighlights","getCurrentEditedCell","getCycledReference","getAutoCompleteDataValidationValues"];col=0;row=0;mode="inactive";sheetId="";currentContent="";currentTokens=[];selectionStart=0;selectionEnd=0;initialContent="";colorIndexByRange={};allowDispatch(e){switch(e.type){case"CHANGE_COMPOSER_CURSOR_SELECTION":return this.validateSelection(this.currentContent.length,e.start,e.end);case"SET_CURRENT_CONTENT":if(e.selection)return this.validateSelection(e.content.length,e.selection.start,e.selection.end);break;case"START_EDITION":if(e.selection){const t=e.text||this.getComposerContent(this.getters.getActivePosition());return this.validateSelection(t.length,e.selection.start,e.selection.end)}break;case"STOP_EDITION":return"inactive"===this.mode?"Success":this.checkDataValidation(e)}return"Success"}handleEvent(e){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.mode&&this.insertSelectedRange(o);else"selecting"===this.mode?this.replaceSelectedRange(o):this.updateComposerRange(e.previousAnchor.zone,o)}handle(e){switch(e.type){case"CHANGE_COMPOSER_CURSOR_SELECTION":this.selectionStart=e.start,this.selectionEnd=e.end;break;case"STOP_COMPOSER_RANGE_SELECTION":this.isSelectingForComposer()&&(this.mode="editing");break;case"START_EDITION":"inactive"!==this.mode&&e.text?this.setContent(e.text,e.selection):this.startEdition(e.text,e.selection),this.updateRangeColor();break;case"STOP_EDITION":this.stopEdition(),this.colorIndexByRange={};break;case"CANCEL_EDITION":this.cancelEditionAndActivateSheet(),this.resetContent(),this.colorIndexByRange={};break;case"SET_CURRENT_CONTENT":this.setContent(e.content,e.selection,!0),this.updateRangeColor();break;case"REPLACE_COMPOSER_CURSOR_SELECTION":this.replaceSelection(e.text);break;case"SELECT_FIGURE":this.cancelEditionAndActivateSheet(),this.resetContent();break;case"ADD_COLUMNS_ROWS":this.onAddElements(e);break;case"REMOVE_COLUMNS_ROWS":"COL"===e.dimension?this.onColumnsRemoved(e):this.onRowsRemoved(e);break;case"START_CHANGE_HIGHLIGHT":const{left:t,top:o}=e.zone;this.isSelectingForComposer()&&(this.mode="editing"),this.selection.resetAnchor(this,{cell:{col:t,row:o},zone:e.zone});break;case"ACTIVATE_SHEET":if(this.currentContent.startsWith("=")||(this.cancelEdition(),this.resetContent()),e.sheetIdFrom!==e.sheetIdTo){const t=this.getters.getActivePosition(),{col:o,row:s}=this.getters.getNextVisibleCellPosition({sheetId:e.sheetIdTo,col:t.col,row:t.row}),n=this.getters.expandZone(e.sheetIdTo,An({col:o,row:s}));this.selection.resetAnchor(this,{cell:{col:o,row:s},zone:n})}break;case"DELETE_SHEET":case"UNDO":case"REDO":!!this.getters.tryGetSheet(this.sheetId)||"inactive"===this.mode||(this.sheetId=this.getters.getActiveSheetId(),this.cancelEditionAndActivateSheet(),this.resetContent(),this.ui.raiseBlockingErrorUI(fR));break;case"CYCLE_EDITION_REFERENCES":this.cycleReferences()}}getEditionMode(){return this.mode}getCurrentContent(){return"inactive"===this.mode?this.getComposerContent(this.getters.getActivePosition()):this.currentContent}getComposerSelection(){return{start:this.selectionStart,end:this.selectionEnd}}getCurrentEditedCell(){return{sheetId:this.sheetId,col:this.col,row:this.row}}isSelectingForComposer(){return"selecting"===this.mode}showSelectionIndicator(){return this.isSelectingForComposer()&&this.canStartComposerRangeSelection()}getCurrentTokens(){return this.currentTokens}getTokenAtCursor(){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))}getCycledReference(e,t){const o=this.getters.getLocale(),s=(t.startsWith("=")?zx(t,o):[]).filter((t=>t.start<=e.start&&t.end>=e.start||t.start>=e.start&&t.start<e.end)),n=s.filter((e=>"REFERENCE"===e.type));if(0===n.length)return;const i=s.map(dm).map((e=>e.value)).join(""),r=s[0].start,a=s[s.length-1].end,l=t.slice(0,r)+i+t.slice(a),c=l.length-t.length,h={start:n[0].start,end:n[n.length-1].end+c};return 1===n.length&&e.start===e.end&&(h.start=h.end),{content:l,selection:h}}getInitialComposerContent(){return this.initialContent}cycleReferences(){const e=this.getCycledReference(this.getComposerSelection(),this.currentContent);void 0!==e&&this.dispatch("SET_CURRENT_CONTENT",{content:e.content,selection:e.selection})}validateSelection(e,t,o){return t>=0&&t<=e&&o>=0&&o<=e?"Success":"WrongComposerSelection"}onColumnsRemoved(e){if(e.elements.includes(this.col)&&"inactive"!==this.mode)return this.dispatch("CANCEL_EDITION"),void this.ui.raiseBlockingErrorUI(fR);const{top:t,left:o}=un({left:this.col,right:this.col,top:this.row,bottom:this.row},"left",[...e.elements]);this.col=o,this.row=t}onRowsRemoved(e){if(e.elements.includes(this.row)&&"inactive"!==this.mode)return this.dispatch("CANCEL_EDITION"),void this.ui.raiseBlockingErrorUI(fR);const{top:t,left:o}=un({left:this.col,right:this.col,top:this.row,bottom:this.row},"top",[...e.elements]);this.col=o,this.row=t}onAddElements(e){const{top:t,left:o}=dn({left:this.col,right:this.col,top:this.row,bottom:this.row},"COL"===e.dimension?"left":"top",e.base,e.position,e.quantity);this.col=o,this.row=t}startComposerRangeSelection(){if(this.sheetId===this.getters.getActiveSheetId()){const e=An({col:this.col,row:this.row});this.selection.resetAnchor(this,{cell:{col:this.col,row:this.row},zone:e})}this.mode="selecting"}startEdition(e,t){const o=this.getters.getActiveCell(),s=this.getters.getLocale();e&&o.format?.includes("%")&&Gt(e,s)&&(t=t||{start:e.length,end:e.length},e=`${e}%`);const{col:n,row:i,sheetId:r}=this.getters.getActivePosition();this.col=n,this.sheetId=r,this.row=i,this.initialContent=this.getComposerContent({sheetId:r,col:n,row:i}),this.mode="editing",this.setContent(e||this.initialContent,t),this.colorIndexByRange={};const a=An({col:this.col,row:this.row});this.selection.capture(this,{cell:{col:this.col,row:this.row},zone:a},{handleEvent:this.handleEvent.bind(this),release:()=>{this.stopEdition()}})}stopEdition(){if("inactive"!==this.mode){this.cancelEditionAndActivateSheet();const e=this.col,t=this.row;let o=this.getCurrentCanonicalContent();if(!(this.initialContent!==o))return;if(o){const s=this.getters.getActiveSheetId(),n=this.getters.getEvaluatedCell({sheetId:s,col:this.col,row:this.row});if(o.startsWith("=")){const e=this.currentTokens.filter((e=>"LEFT_PAREN"===e.type)).length-this.currentTokens.filter((e=>"RIGHT_PAREN"===e.type)).length;e>0&&(o+=Oe(new Array(e).fill(")")))}else n.link&&(o=Se(o,n.link.url));this.dispatch("UPDATE_CELL",{sheetId:this.sheetId,col:e,row:t,content:o})}else this.dispatch("UPDATE_CELL",{sheetId:this.sheetId,content:"",col:e,row:t});this.setContent("")}}getCurrentCanonicalContent(){return ea(this.currentContent,this.getters.getLocale())}cancelEditionAndActivateSheet(){if("inactive"===this.mode)return;this.cancelEdition();this.getters.getActiveSheetId()!==this.sheetId&&this.dispatch("ACTIVATE_SHEET",{sheetIdFrom:this.getters.getActiveSheetId(),sheetIdTo:this.sheetId})}getComposerContent(e){const t=this.getters.getLocale(),o=this.getters.getCell(e);if(o?.isFormula)return na(o.content,t);const{format:s,value:n,type:i,formattedValue:r}=this.getters.getEvaluatedCell(e);switch(i){case Qt.text:case Qt.empty:case Qt.error:return n;case Qt.boolean:return r;case Qt.number:if(s&&Rs(s)){if(null!==At(r,t))return r;return Ss(n,{locale:t,format:Number.isInteger(n)?t.dateFormat:da(t)})}return this.numberComposerContent(n,s,t)}}numberComposerContent(e,t,o){return t?.includes("%")?`${Is(100*e,o.decimalSeparator)}%`:Is(e,o.decimalSeparator)}cancelEdition(){"inactive"!==this.mode&&(this.mode="inactive",this.selection.release(this))}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.mode){const t=this.getters.getLocale();this.currentTokens=e.startsWith("=")?zx(e,t):[],this.currentTokens.length>100&&o&&this.ui.raiseBlockingErrorUI(Xt("This formula has over 100 parts. It can't be processed properly, consider splitting it into multiple cells"))}this.canStartComposerRangeSelection()&&this.startComposerRangeSelection()}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.getTokenAtCursor(),s="REFERENCE"===o?.type?o.start:this.selectionStart;this.replaceText(t,s,this.selectionEnd)}updateComposerRange(e,t){const o=this.getters.getActiveSheetId(),s=this.getTokenAtCursor(),n=(s?[s,...this.currentTokens]:this.currentTokens).filter((e=>"REFERENCE"===e.type)).find((t=>{const{xc:s,sheetName:n}=on(t.value),i=n||this.getters.getSheetName(this.sheetId);if(this.getters.getSheetName(o)!==i)return!1;const r=this.getters.getRangeFromSheetXC(o,s);return fn(this.getters.expandZone(o,r.zone),e)}));if(!n)throw new Error("Previous range not found");const i=this.getters.getRangeFromSheetXC(o,n.value);this.selectionStart=n.start,this.selectionEnd=this.selectionStart+n.value.length;const r=this.getters.getRangeFromZone(o,t),a=this.getRangeReference(r,i.parts);this.replaceSelection(a)}getZoneReference(e){const t=this.getters.getCurrentEditedCell().sheetId,o=this.getters.getActiveSheetId(),s=this.getters.getRangeFromZone(o,e);return this.getters.getSelectionRangeString(s,t)}getRangeReference(e,t){let o=[...t];const s=e.clone({parts:o});return this.getters.getSelectionRangeString(s,this.getters.getCurrentEditedCell().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.dispatch("SET_CURRENT_CONTENT",{content:o,selection:{start:s,end:s}})}updateRangeColor(){if(!this.currentContent.startsWith("=")||"inactive"===this.mode)return;const e=this.getters.getCurrentEditedCell().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 n=0;const i=()=>{for(;s.has(n);)n++;return s.add(n),n};for(const e of t){const t=e in o?o[e]:i();o[e]=t}this.colorIndexByRange=o}getComposerHighlights(){if(!this.currentContent.startsWith("=")||"inactive"===this.mode)return[];const e=this.getters.getCurrentEditedCell().sheetId,t=e=>{const t=this.colorIndexByRange[e];return Ze[t%Ze.length]};return this.getReferencedRanges().map((o=>{const s=this.getters.getRangeString(o,e);return{zone:o.zone,color:t(s),sheetId:o.sheetId}}))}getReferencedRanges(){const e=this.getters.getCurrentEditedCell().sheetId;return this.currentTokens.filter((e=>"REFERENCE"===e.type)).map((t=>this.getters.getRangeFromSheetXC(e,t.value)))}getAutoCompleteDataValidationValues(){if("inactive"===this.mode)return[];const e=this.getters.getValidationRuleForCell(this.getCurrentEditedCell());if(!e||"isValueInList"!==e.criterion.type&&"isValueInRange"!==e.criterion.type)return[];let t;if("isValueInList"===e.criterion.type)t=e.criterion.values;else{const o=this.getters.getRangeFromSheetXC(this.sheetId,e.criterion.values[0]);t=this.getters.getRangeValues(o).filter(Re).map((e=>e.toString())).filter((e=>""!==e))}const o=this.getCurrentContent();if(o&&o!==this.getInitialComposerContent()){const e=Pn(o,t,(e=>e));t=e.length?e:t}return t}canStartComposerRangeSelection(){if(this.currentContent.startsWith("=")){const e=this.getTokenAtCursor();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)||Vr.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}checkDataValidation(e){const t={sheetId:this.sheetId,col:this.col,row:this.row};try{const e=this.getCurrentCanonicalContent(),o=e.startsWith("=")?this.getters.evaluateFormula(this.sheetId,e):qi(e,this.getters.getLocale());if(go(o))return"Success";const s=this.getters.getValidationResultForCellValue(o,t);return!s.isValid&&s.rule.isBlocking?"BlockingValidationRule":"Success"}catch(e){return"Success"}}}),wR=(new Pi).add("evaluation",class extends Jx{static getters=["evaluateFormula","getCorrespondingFormulaCell","getRangeFormattedValues","getRangeValues","getRangeFormats","getEvaluatedCell","getEvaluatedCells","getEvaluatedCellsInZone","getSpreadPositionsOf","getArrayFormulaSpreadingOn"];shouldRebuildDependenciesGraph=!0;evaluator;positionsToUpdate=[];constructor(e){super(e),this.evaluator=new AI(e.custom,this.getters)}beforeHandle(e){(eo.has(e.type)||to.has(e.type))&&(this.shouldRebuildDependenciesGraph=!0)}handle(e){switch(e.type){case"UPDATE_CELL":if(!("content"in e)&&!("format"in e)||this.shouldRebuildDependenciesGraph)return;this.positionsToUpdate.push(e),"content"in e&&this.evaluator.updateDependencies(e);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){try{return this.evaluator.evaluateFormula(e,t)}catch(e){return e.value||fo.GenericError}}getRangeFormattedValues(e){const t=this.getters.tryGetSheet(e.sheetId);return void 0===t?[]:this.getters.getEvaluatedCellsInZone(t.id,e.zone).map((e=>e.formattedValue))}getRangeValues(e){const t=this.getters.tryGetSheet(e.sheetId);return void 0===t?[]:this.getters.getEvaluatedCellsInZone(t.id,e.zone).map((e=>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){const t=this.getters.getCells(e)||{},o={};for(let e of Object.keys(t)){const t=this.getters.getCellPosition(e);o[e]=this.getEvaluatedCell(t)}return o}getEvaluatedCellsInZone(e,t){return xn(t).map((({col:t,row:o})=>this.getters.getEvaluatedCell({sheetId:e,col:t,row:o})))}getSpreadPositionsOf(e){return this.evaluator.getSpreadPositionsOf(e)}getArrayFormulaSpreadingOn(e){return this.evaluator.getArrayFormulaSpreadingOn(e)}exportForExcel(e){for(const t of this.evaluator.getEvaluatedPositions()){const o=this.evaluator.getEvaluatedCell(t),s=ut(t.col,t.row),n=o.value;let i,r,a=!1,l=!0;const c=this.getCorrespondingFormulaCell(t);c&&(l=$x(c.compiledFormula.tokens),a=l,l||(i=n.toString(),r=o.format));const h=e.sheets.find((e=>e.id===t.sheetId)),d=h.cells[s]||{},u=r?Ae(r,e.formats):d.format,g=l?d.content:i;h.cells[s]={...d,value:n,isFormula:a,content:g,format:u}}}getCorrespondingFormulaCell(e){const t=this.getters.getCell(e);if(t&&t.isFormula)return function(e){try{return Ux(e),!1}catch(e){return!0}}(t.compiledFormula.tokens)?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 Jx{static getters=["getChartRuntime","getStyleOfSingleCellChart"];charts={};createRuntimeChart=function(e){const t=gl.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)}}(this.getters);handle(e){if(eo.has(e.type)||oo.has(e.type)||"EVALUATE_CELLS"===e.type||"UPDATE_CELL"===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.id]=void 0;break;case"DELETE_SHEET":for(let 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:fi(e)};if(!t)return{background:h,fontColor:fi(h)};const o=t.zone.left,s=t.zone.top,n=t.sheetId,i=this.getters.getCellComputedStyle({sheetId:n,col:o,row:s}),r=i.fillColor||h;return{background:r,fontColor:i.textColor||fi(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,n=this.getters.getChart(e)?.getDefinitionForExcel();if(n)o.push({...s,data:n});else{if(!this.getters.getChart(e))continue;const o=this.getters.getChartType(e),n=qa(this.getters.getChartRuntime(e),s,o);t.images.push({...s,tag:"image",data:{mimetype:"image/png",path:n,size:{width:s.width,height:s.height}}})}}t.charts=o}}}).add("evaluation_cf",class extends Jx{static getters=["getConditionalIcon","getCellComputedStyle"];isStale=!0;computedStyles={};computedIcons={};handle(e){(eo.has(e.type)||oo.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]=_e((()=>this.getComputedStyles(e))),this.computedIcons[e]=_e((()=>this.getComputedIcons(e)));this.isStale=!1}}getCellComputedStyle(e){const{sheetId:t,col:o,row:s}=e,n=this.getters.getCell(e),i=this.computedStyles[t](),r=i&&i[o]?.[s],a={...n?.style,...r};return this.getters.getEvaluatedCell(e).link&&!a.textColor&&(a.textColor=p),this.getters.isFilterHeader(e)&&(a.bold=!0),a}getConditionalIcon({sheetId:e,col:t,row:o}){const s=this.computedIcons[e]();return s&&s[t]?.[o]}getComputedStyles(e){const t={};for(let o of this.getters.getConditionalFormats(e).reverse())switch(o.rule.type){case"ColorScaleRule":for(let s of o.ranges)this.applyColorScale(e,s,o.rule,t);break;case"CellIsRule":const s=o.rule.values.map((e=>e.startsWith("=")?Vx(e):void 0));for(let n of o.ranges){const i=this.getters.getRangeFromSheetXC(e,n).zone;for(let n=i.top;n<=i.bottom;n++)for(let r=i.left;r<=i.right;r++){const a=this.rulePredicate[o.rule.type],l={sheetId:e,col:r,row:n},c=o.rule.values.map(((t,o)=>{const a=s[o];return a?this.getters.getTranslatedCellFormula(e,r-i.left,n-i.top,{...a,dependencies:a.dependencies.map((t=>this.getters.getRangeFromSheetXC(e,t)))}):t}));a&&a(l,{...o.rule,values:c})&&(t[r]||(t[r]=[]),t[r][n]=Object.assign(t[r]?.[n]||{},o.rule.style))}}}return t}getComputedIcons(e){const t={};for(let o of this.getters.getConditionalFormats(e).reverse())if("IconSetRule"===o.rule.type)for(let s of o.ranges)this.applyIcon(e,s,o.rule,t);return t}parsePoint(e,t,o,s){const n=this.getters.getEvaluatedCellsInZone(e,this.getters.getRangeFromSheetXC(e,t).zone).filter((e=>e.type===Qt.number)).map((e=>e.value));switch(o.type){case"value":return"max"===s?Math.max(...n):Math.min(...n);case"number":return Number(o.value);case"percentage":const t=Math.min(...n);return t+(Math.max(...n)-t)*Number(o.value)/100;case"percentile":return qt(n,Number(o.value)/100,!0);case"formula":const i=o.value&&this.getters.evaluateFormula(e,o.value);return"number"==typeof i?i:null;default:return null}}applyIcon(e,t,o,s){const n=this.parsePoint(e,t,o.lowerInflectionPoint),i=this.parsePoint(e,t,o.upperInflectionPoint);if(null===n||null===i||n>i)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!==Qt.number)continue;const c=this.computeIcon(r.value,i,o.upperInflectionPoint.operator,n,o.lowerInflectionPoint.operator,a);s[l]||(s[l]=[]),s[l][t]=c}}computeIcon(e,t,o,s,n,i){return"ge"===o&&e>=t||"gt"===o&&e>t?i[0]:"ge"===n&&e>=s||"gt"===n&&e>s?i[1]:i[2]}applyColorScale(e,t,o,s){const n=this.parsePoint(e,t,o.minimum,"min"),i=o.midpoint?this.parsePoint(e,t,o.midpoint):null,r=this.parsePoint(e,t,o.maximum,"max");if(null===n||null===r||n>=r||i&&(n>=i||i>=r))return;const a=this.getters.getRangeFromSheetXC(e,t).zone,l=[];o.midpoint&&i?(l.push({minValue:n,minColor:o.minimum.color,colorDiffUnit:this.computeColorDiffUnits(n,i,o.minimum.color,o.midpoint.color)}),l.push({minValue:i,minColor:o.midpoint.color,colorDiffUnit:this.computeColorDiffUnits(i,r,o.midpoint.color,o.maximum.color)})):l.push({minValue:n,minColor:o.minimum.color,colorDiffUnit:this.computeColorDiffUnits(n,r,o.minimum.color,o.maximum.color)});for(let t=a.top;t<=a.bottom;t++)for(let o=a.left;o<=a.right;o++){const a=this.getters.getEvaluatedCell({sheetId:e,col:o,row:t});if(a.type===Qt.number){const e=de(a.value,n,r);let c;c=2===l.length&&i?e<=i?this.colorCell(e,l[0].minValue,l[0].minColor,l[0].colorDiffUnit):this.colorCell(e,l[1].minValue,l[1].minColor,l[1].colorDiffUnit):this.colorCell(e,l[0].minValue,l[0].minColor,l[0].colorDiffUnit),s[o]||(s[o]=[]),s[o][t]=s[o]?.[t]||{},s[o][t].fillColor=Ye(c)}}}computeColorDiffUnits(e,t,o,s){const n=t-e;return[((o>>16)%256-(s>>16)%256)/n,((o>>8)%256-(s>>8)%256)/n,(o%256-s%256)/n]}colorCell(e,t,o,s){const[n,i,r]=s;return Math.round((o>>16)%256-n*(e-t))<<16|Math.round((o>>8)%256-i*(e-t))<<8|Math.round(o%256-r*(e-t))}rulePredicate={CellIsRule:(e,t)=>{const o=this.getters.getEvaluatedCell(e);if(o.type===Qt.error)return!1;const[s,n]=t.values.map((t=>t.startsWith("=")?this.getters.evaluateFormula(e.sheetId,t)??"":qi(t,ho)));if(go(s)||go(n))return!1;switch(t.operator){case"IsEmpty":return""===o.value.toString().trim();case"IsNotEmpty":return""!==o.value.toString().trim();case"BeginsWith":return""!==s&&o.value.toString().startsWith(s.toString());case"EndsWith":return""!==s&&o.value.toString().endsWith(s.toString());case"Between":return o.value>=s&&o.value<=n;case"NotBetween":return!(o.value>=s&&o.value<=n);case"ContainsText":return o.value.toString().indexOf(s.toString())>-1;case"NotContains":return!o.value||-1===o.value.toString().indexOf(s.toString());case"GreaterThan":return o.value>s;case"GreaterThanOrEqual":return o.value>=s;case"LessThan":return o.value<s;case"LessThanOrEqual":return o.value<=s;case"NotEqual":return""!==s&&o.value!==s;case"Equal":return""===s||o.value===s;default:console.warn(Xt("Not implemented operator %s for kind of conditional formatting: %s",t.operator,t.type))}return!1}}}).add("row_size",class extends Jx{static getters=["getRowSize","getHeaderSize"];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=le(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=ze(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=Ne(e.position,e.base),o=Array(e.quantity).fill(void 0),s=function(e,t,o){const s=[...e];return s.splice(o,0,...t),s}(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 ue(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 xn(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??A)}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 n=this.getCellHeight({sheetId:e,col:o,row:t});if(!(n<=A)&&(!s&&n>A||s&&n>s.size)){const s={cell:{sheetId:e,col:o,row:t},size:n};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 A;const t=this.getters.getCell(e),o=this.getters.getColSize(e.sheetId,e.col);return function(e,t,o){if(!t||!t.content)return A;const s="wrap"===t.style?.wrapping?o-2*_:void 0,n=t.isFormula?1:Zn(e,t.content,t.style,s).length;return Bn(Wn(t.style),n)+6}(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,n=0;for(let e=0;e<o.length;e++){const t=this.getters.getCellById(o[e]);if(!t)continue;const i=this.getters.getCellPosition(t.id),r=this.getCellHeight(i);r>n&&r>A&&(n=r,s={cell:i,size:r})}return s&&s.size>A?s:void 0}}).add("custom_colors",class extends Jx{customColors={};shouldUpdateColors=!1;static getters=["getCustomColors"];handle(e){switch(e.type){case"UPDATE_CELL":case"UPDATE_CHART":case"CREATE_CHART":case"ADD_CONDITIONAL_FORMAT":case"SET_BORDER":case"SET_ZONE_BORDERS":case"SET_FORMATTING":this.history.update("shouldUpdateColors",!0)}}finalize(){if(this.shouldUpdateColors){this.history.update("shouldUpdateColors",!1);for(const e of this.getCustomColors())this.tryToAddColor(e)}}getCustomColors(){let e=[];for(const t of this.getters.getSheetIds())e=e.concat(this.getColorsFromCells(t),this.getFormattingColors(t),this.getChartColors(t));return function(e){const t=[{leadColor:Qe(255,0,0),colors:[]},{leadColor:Qe(255,128,0),colors:[]},{leadColor:Qe(128,128,0),colors:[]},{leadColor:Qe(128,255,0),colors:[]},{leadColor:Qe(0,255,0),colors:[]},{leadColor:Qe(0,255,128),colors:[]},{leadColor:Qe(0,255,255),colors:[]},{leadColor:Qe(0,127,255),colors:[]},{leadColor:Qe(0,0,255),colors:[]},{leadColor:Qe(127,0,255),colors:[]},{leadColor:Qe(128,0,128),colors:[]},{leadColor:Qe(255,0,128),colors:[]}];for(const o of e.map(tt)){let e=500,s=0;t.forEach(((t,n)=>{const i=(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>i&&(e=i,s=n)})),t[s].colors.push(o)}return t.map((e=>e.colors.sort(((e,t)=>st(e).s-st(t).s)))).flat().map(et)}([...new Set([...new Set([...e,...Object.keys(this.customColors)])].filter(Xe).map(je))]).filter((e=>!x.includes(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(Ye(t.minimum.color)),o.push(t.midpoint?Ye(t.midpoint.color):void 0),o.push(Ye(t.maximum.color)))}return o.filter(Ie)}getChartColors(e){const t=this.getters.getChartIds(e).map((e=>this.getters.getChart(e)));let o=new Set;for(let e of t){if(void 0===e)continue;const t=e.getDefinition().background;switch(void 0!==t&&o.add(t),e.type){case"gauge":const t=e.sectionRule.colors;o.add(t.lowerColor),o.add(t.middleColor),o.add(t.upperColor);break;case"scorecard":const s=e;o.add(s.baselineColorDown),o.add(s.baselineColorUp)}}return[...o]}tryToAddColor(e){const t=je(e);e&&!x.includes(t)&&this.history.update("customColors",t,!0)}}).add("data_validation_ui",class extends Jx{static getters=["getDataValidationInvalidCriterionValueMessage","getDataValidationCheckBoxCellPositions","getDataValidationListCellsPositions","getInvalidDataValidationMessage","getValidationResultForCellValue","isCellValidCheckbox","isDataValidationInvalid"];validationResults={};handle(e){if(eo.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}getInvalidDataValidationMessage(e){const t=this.getValidationResultForCell(e);return t.isValid?void 0:t.error}getDataValidationInvalidCriterionValueMessage(e,t){const o=rC.get(e);return t.startsWith("=")?"onlyLiterals"===o.allowedValues?Xt("The value must not be a formula"):void 0:"onlyFormulas"===o.allowedValues?Xt("The value must be a formula"):o.isCriterionValueValid(t)?void 0:o.criterionValueErrorString}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 NI;const s=this.getRuleErrorForCellValue(e,t,o);return s?{error:s,rule:o,isValid:!1}:NI}getDataValidationCheckBoxCellPositions(){return Ln(this.getters.getDataValidationRules(this.getters.getActiveSheetId()).filter((e=>"isBoolean"===e.criterion.type)).map((e=>e.ranges)).flat()).filter((e=>this.isCellValidCheckbox(e)))}getDataValidationListCellsPositions(){return Ln(this.getters.getDataValidationRules(this.getters.getActiveSheetId()).filter((e=>("isValueInList"===e.criterion.type||"isValueInRange"===e.criterion.type)&&"arrow"===e.criterion.displayStyle)).map((e=>e.ranges)).flat())}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]?.()||NI}computeSheetValidationResults(e){const t={},o=this.getters.getDataValidationRules(e).map((e=>e.ranges));for(const e of Ln(o.flat())){const{col:o,row:s}=e;t[o]||(t[o]=[]),t[o][s]=_e((()=>{const t=this.getters.getEvaluatedCell(e);return t.type===Qt.empty?NI:this.getValidationResultForCellValue(t.value,e)}))}return t}getRuleErrorForCellValue(e,t,o){const{sheetId:s}=t,n=o.criterion,i=rC.get(n.type),r=this.getCellOffsetInRule(t,o),a=this.getEvaluatedCriterionValues(s,r,n),l={...n,values:a};if(!i.isValueValid(e,l,this.getters,s))return i.getErrorString(l,this.getters,s)}getCellOffsetInRule(e,t){const o=t.ranges.find((t=>bn(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 o;const s=Vx(o),n=this.getters.getTranslatedCellFormula(e,t.col,t.row,{...s,dependencies:s.dependencies.map((t=>this.getters.getRangeFromSheetXC(e,t)))}),i=this.getters.evaluateFormula(e,n);return i&&!go(i)?i.toString():""}))}}),yR=new Pi;yR.add("link",{condition:(e,t)=>!!t.model.getters.getEvaluatedCell(e).link,execute:(e,t)=>Gi(t.model.getters.getEvaluatedCell(e).link,t),sequence:5});class xR{fileStore;constructor(e){this.fileStore=e}async requestImage(){const e=await this.getImageFromUser(),t=await this.fileStore.upload(e);return{path:t,size:await this.getImageOriginalSize(t),mimetype:e.type}}getImageFromUser(){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.src=e,s.addEventListener("load",(()=>{const e={width:s.width,height:s.height};t(e)})),s.addEventListener("error",o)}))}}const IR=[{transform:"scale(0)"},{transform:"scale(0.8)",offset:.33},{opacity:"0",transform:"scale(1)",offset:1}];ar`
1448
+ `}function Ay(e){return new NE(e.join("\n"))}function Oy(e,...t){let o=[e[0]];for(let s=0;s<t.length;s++){const n=t[s]instanceof NE?t[s]:xy(t[s]);o.push(n+e[s+1])}return new NE(Oe(o))}function _y(e){return e.replace(/NAMESPACE.*NAMESPACE(.*)/,"$1")}function My(e){return e.replaceAll(/([a-zA-Z0-9]+):([a-zA-Z0-9]+)/g,"NAMESPACE$1NAMESPACE$2")}class Ny{value;constructor(e){this.value=e}asString(){return Rw(String(this.value))}asBool(){return"true"===this.value||"false"!==this.value&&Boolean(Number(this.value))}asNum(){return Number(this.value)}}class Fy{rootFile;xlsxFileStructure;warningManager;relationships;currentFile=void 0;constructor(e,t,o){this.rootFile=e,this.currentFile=e.file.fileName,this.xlsxFileStructure=t,this.warningManager=o,this.relationships={},e.rels&&this.extractRelationships(e.rels).map((e=>{this.relationships[e.id]=e}))}extractRelationships(e){return this.mapOnElements({parent:e.xml,query:"Relationship"},(e=>({id:this.extractAttr(e,"Id",{required:!0}).asString(),target:this.extractAttr(e,"Target",{required:!0}).asString(),type:this.extractAttr(e,"Type",{required:!0}).asString()})))}getListOfXMLFiles(){return Object.entries(this.xlsxFileStructure).filter((([e])=>"images"!==e)).map((([e,t])=>t)).flat().filter(Ie)}mapOnElements(e,t){const o=[],s=this.currentFile;let n;if(e.children){const t=this.querySelector(e.parent,e.query)?.children;n=t||[]}else n=this.querySelectorAll(e.parent,e.query);if(n)for(let e of n)try{o.push(t(e))}catch(t){this.catchErrorOnElement(t,e)}return this.currentFile=s,o}catchErrorOnElement(e,t){const o=t?`Error when parsing an element <${t.tagName}> of file ${this.currentFile}, skip this element. \n${e.stack}`:`Error when parsing file ${this.currentFile}.`;this.warningManager.addParsingWarning([o,e.message].join("\n"))}extractAttr(e,t,o){const s=e.attributes[t];s||this.handleMissingValue(e,`attribute "${t}"`,o);const n=s?.value?s.value:o?.default;return void 0===n?void 0:new Ny(n)}extractTextContent(e,t){if(void 0!==t?.default&&"string"!=typeof t.default)throw new Error("extractTextContent default value should be a string");const o="preserve"===e?.attributes["xml:space"]?.value;let s=e?.textContent;return e&&null!==s||this.handleMissingValue(e,"text content",t),s&&(s=o?s:s.trim()),s?Rw(s):t?.default}extractChildAttr(e,t,o,s){let n;n="number"==typeof t?e.children[t]:this.querySelector(e,t),n||this.handleMissingValue(e,"number"==typeof t?`child at index ${t}`:`child <${t}>`,s);const i=n?this.extractAttr(n,o,s)?.asString():s?.default;return void 0!==i?new Ny(i):void 0}extractChildTextContent(e,t,o){if(void 0!==o?.default&&"string"!=typeof o.default)throw new Error("extractTextContent default value should be a string");let s=this.querySelector(e,t);return s||this.handleMissingValue(e,`child <${t}>`,o),s?this.extractTextContent(s,o):o?.default}handleMissingValue(e,t,o){if(o?.required){if(!o?.default)throw new Error(`Missing required ${t} in element <${e.tagName}> of ${this.currentFile}, and no default value was set`);this.warningManager.addParsingWarning(`Missing required ${t} in element <${e.tagName}> of ${this.currentFile}, replacing it by the default value ${o.default}`)}}extractColor(e,t,o){if(!e)return o?{rgb:o}:void 0;const s=this.extractAttr(e,"theme")?.asString();let n;if(void 0!==s){if(!t||!t.clrScheme)throw new Error("Color referencing a theme but no theme was provided");n=this.getThemeColor(s,t.clrScheme)}else n=this.extractAttr(e,"rgb")?.asString();return{rgb:n,auto:this.extractAttr(e,"auto")?.asBool(),indexed:this.extractAttr(e,"indexed")?.asNum(),tint:this.extractAttr(e,"tint")?.asNum()}}getTargetXmlFile(e){if(!e)throw new Error("Undefined target file");const t=this.processRelationshipTargetName(e.target),o=this.getListOfXMLFiles().find((e=>e.file.fileName.endsWith(t)));if(!o||!o.file)throw new Error("Cannot find target file");return o}getTargetImageFile(e){if(!e)throw new Error("Undefined target file");const t=this.processRelationshipTargetName(e.target),o=this.xlsxFileStructure.images.find((e=>e.fileName.endsWith(t)));if(!o)throw new Error("Cannot find target file");return o}querySelector(e,t){const o=My(t);return e.querySelector(o)}querySelectorAll(e,t){const o=My(t);return e.querySelectorAll(o)}getThemeColor(e,t){switch(e){case"0":return"FFFFFF";case"1":return"000000";case"2":return t[3].value;case"3":return t[2].value;default:return t[e].value}}processRelationshipTargetName(e){return e.replace(/\.+\//,"")}}class Dy extends Fy{getTheme(){return{clrScheme:this.mapOnElements({query:"a:clrScheme",parent:this.rootFile.file.xml,children:!0},(e=>({name:e.tagName,value:this.extractChildAttr(e,0,"val",{required:!0,default:DE}).asString(),lastClr:this.extractChildAttr(e,0,"lastClr",{default:DE}).asString()})))}}getSharedStrings(){return this.mapOnElements({parent:this.rootFile.file.xml,query:"si"},(e=>"t"===e.children[0].tagName?this.extractTextContent(e)||"":this.mapOnElements({parent:e,query:"t"},(e=>this.extractTextContent(e)||"")).join("")))}}class Ly extends Fy{theme;constructor(e,t,o,s){super(e,t,o),this.theme=s}extractConditionalFormattings(){const e=this.mapOnElements({parent:this.rootFile.file.xml,query:"worksheet > conditionalFormatting"},(e=>({sqref:this.extractAttr(e,"sqref",{required:!0}).asString().split(" "),pivot:this.extractAttr(e,"pivot")?.asBool(),cfRules:this.extractCFRules(e,this.theme)})));return e.push(...this.mapOnElements({parent:this.rootFile.file.xml,query:"extLst x14:conditionalFormatting"},(e=>({sqref:this.extractChildTextContent(e,"xm:sqref",{required:!0}).split(" "),pivot:this.extractAttr(e,"xm:pivot")?.asBool(),cfRules:this.extractCFRules(e,this.theme)})))),e}extractCFRules(e,t){return this.mapOnElements({parent:e,query:"cfRule, x14:cfRule"},(e=>{const o=this.extractAttr(e,"type",{required:!0}).asString();if("dataBar"===o)throw new Error("Databars conditional formats are not supported.");return{type:o,priority:this.extractAttr(e,"priority",{required:!0}).asNum(),colorScale:this.extractCfColorScale(e,t),formula:this.extractCfFormula(e),iconSet:this.extractCfIconSet(e),dxfId:this.extractAttr(e,"dxfId")?.asNum(),stopIfTrue:this.extractAttr(e,"stopIfTrue")?.asBool(),aboveAverage:this.extractAttr(e,"aboveAverage")?.asBool(),percent:this.extractAttr(e,"percent")?.asBool(),bottom:this.extractAttr(e,"bottom")?.asBool(),operator:this.extractAttr(e,"operator")?.asString(),text:this.extractAttr(e,"text")?.asString(),timePeriod:this.extractAttr(e,"timePeriod")?.asString(),rank:this.extractAttr(e,"rank")?.asNum(),stdDev:this.extractAttr(e,"stdDev")?.asNum(),equalAverage:this.extractAttr(e,"equalAverage")?.asBool()}}))}extractCfFormula(e){return this.mapOnElements({parent:e,query:"formula"},(e=>this.extractTextContent(e,{required:!0})))}extractCfColorScale(e,t){const o=this.querySelector(e,"colorScale");if(o)return{colors:this.mapOnElements({parent:o,query:"color"},(e=>this.extractColor(e,t,"ffffff"))),cfvos:this.extractCFVos(o)}}extractCfIconSet(e){const t=this.querySelector(e,"iconSet, x14:iconSet");if(t)return{iconSet:this.extractAttr(t,"iconSet",{default:"3TrafficLights1"}).asString(),showValue:this.extractAttr(t,"showValue",{default:!0}).asBool(),percent:this.extractAttr(t,"percent",{default:!0}).asBool(),reverse:this.extractAttr(t,"reverse")?.asBool(),custom:this.extractAttr(t,"custom")?.asBool(),cfvos:this.extractCFVos(t),cfIcons:this.extractCfIcons(t)}}extractCfIcons(e){const t=this.mapOnElements({parent:e,query:"cfIcon, x14:cfIcon"},(e=>({iconSet:this.extractAttr(e,"iconSet",{required:!0}).asString(),iconId:this.extractAttr(e,"iconId",{required:!0}).asNum()})));return 0===t.length?void 0:t}extractCFVos(e){return this.mapOnElements({parent:e,query:"cfvo, x14:cfvo"},(e=>({type:this.extractAttr(e,"type",{required:!0}).asString(),gte:this.extractAttr(e,"gte",{default:!0})?.asBool(),value:e.attributes.val?this.extractAttr(e,"val")?.asString():this.extractChildTextContent(e,"f, xm:f")})))}}class Py extends Fy{extractChart(){return this.mapOnElements({parent:this.rootFile.file.xml,query:"c:chartSpace"},(e=>{const t=this.getChartType(e);if(!mw[t])throw new Error(`Unsupported chart type ${t}`);const o=this.mapOnElements({parent:e,query:"c:title a:t"},(e=>e.textContent||"")).join(""),s=this.extractChildAttr(e,"c:grouping","val",{default:"clustered"}).asString();return{title:o,type:mw[t],dataSets:this.extractChartDatasets(this.querySelector(e,`c:${t}`)),labelRange:this.extractChildTextContent(e,"c:ser c:cat c:f"),backgroundColor:this.extractChildAttr(e,"c:chartSpace > c:spPr a:srgbClr","val",{default:"ffffff"}).asString(),verticalAxisPosition:"r"===this.extractChildAttr(e,"c:valAx > c:axPos","val",{default:"l"}).asString()?"right":"left",legendPosition:pw[this.extractChildAttr(e,"c:legendPos","val",{default:"b"}).asString()],stacked:"stacked"===s,fontColor:"000000"}}))[0]}extractChartDatasets(e){return this.mapOnElements({parent:e,query:"c:ser"},(e=>({label:this.extractChildTextContent(e,"c:tx c:f"),range:this.extractChildTextContent(e,"c:val c:f",{required:!0})})))}getChartType(e){const t=this.querySelector(e,"c:plotArea");if(!t)throw new Error("Missing plot area in the chart definition.");for(let e of t.children){const t=_y(e.tagName);if(FE.some((e=>e===t)))return t}throw new Error("Unknown chart type")}}const ky="oneCellAnchor",Vy="twoCellAnchor";class Uy extends Fy{extractFigures(){return this.mapOnElements({parent:this.rootFile.file.xml,query:"xdr:wsDr",children:!0},(e=>{const t=_y(e.tagName),o=this.extractFigureAnchorsByType(e,t),s=this.querySelector(e,"c:chart"),n=this.querySelector(e,"a:blip");if(!s&&!n)throw new Error("Only chart and image figures are currently supported.");return{anchors:o,data:s?this.extractChart(s):this.extractImage(e),figureSize:t===ky?this.extractFigureSizeFromSizeTag(e,"xdr:ext"):void 0}}))}extractFigureAnchorsByType(e,t){switch(t){case ky:return[this.extractFigureAnchor("xdr:from",e)];case Vy:return[this.extractFigureAnchor("xdr:from",e),this.extractFigureAnchor("xdr:to",e)];default:throw new Error(`${t} is not supported for xlsx drawings. `)}}extractFigureSizeFromSizeTag(e,t){const o=this.querySelector(e,t);if(!o)throw new Error(`Missing size element '${t}'`);return{cx:this.extractAttr(o,"cx",{required:!0}).asNum(),cy:this.extractAttr(o,"cy",{required:!0}).asNum()}}extractFigureAnchor(e,t){const o=this.querySelector(t,e);if(!o)throw new Error(`Missing anchor element ${e}`);return{col:Number(this.extractChildTextContent(o,"xdr:col",{required:!0})),colOffset:Number(this.extractChildTextContent(o,"xdr:colOff",{required:!0})),row:Number(this.extractChildTextContent(o,"xdr:row",{required:!0})),rowOffset:Number(this.extractChildTextContent(o,"xdr:rowOff",{required:!0}))}}extractChart(e){const t=this.extractAttr(e,"r:id",{required:!0}).asString(),o=this.getTargetXmlFile(this.relationships[t]),s=new Py(o,this.xlsxFileStructure,this.warningManager).extractChart();if(!s)throw new Error("Unable to extract chart definition");return s}extractImage(e){const t=this.querySelector(e,"a:blip"),o=this.extractAttr(t,"r:embed",{required:!0}).asString(),s=this.getTargetImageFile(this.relationships[o]);if(!s)throw new Error("Unable to extract image");const n=s.fileName.split(".").at(-1),i=_y(e.tagName),r=i===Vy?this.querySelector(e,"a:xfrm"):e,a=i===Vy?"a:ext":"xdr:ext",l=this.extractFigureSizeFromSizeTag(r,a);return{imageSrc:s.imageSrc,mimetype:n?Ew[n]:void 0,size:l}}}class By extends Fy{getPivotTable(){return this.mapOnElements({query:":root",parent:this.rootFile.file.xml},(e=>({displayName:this.extractAttr(e,"name",{required:!0}).asString(),id:this.extractAttr(e,"name",{required:!0}).asString(),ref:this.extractChildAttr(e,"location","ref",{required:!0}).asString(),headerRowCount:this.extractChildAttr(e,"location","firstDataRow",{default:0}).asNum(),totalsRowCount:1,cols:[],style:{showFirstColumn:!0,showRowStripes:!0}})))[0]}}class Hy extends Fy{getTable(){return this.mapOnElements({query:"table",parent:this.rootFile.file.xml},(e=>({displayName:this.extractAttr(e,"displayName",{required:!0}).asString(),name:this.extractAttr(e,"name")?.asString(),id:this.extractAttr(e,"id",{required:!0}).asString(),ref:this.extractAttr(e,"ref",{required:!0}).asString(),headerRowCount:this.extractAttr(e,"headerRowCount",{default:1}).asNum(),totalsRowCount:this.extractAttr(e,"totalsRowCount",{default:0}).asNum(),cols:this.extractTableCols(e),style:this.extractTableStyleInfo(e),autoFilter:this.extractTableAutoFilter(e)})))[0]}extractTableCols(e){return this.mapOnElements({query:"tableColumn",parent:e},(e=>({id:this.extractAttr(e,"id",{required:!0}).asString(),name:this.extractAttr(e,"name",{required:!0}).asString(),colFormula:this.extractChildTextContent(e,"calculatedColumnFormula")})))}extractTableStyleInfo(e){return this.mapOnElements({query:"tableStyleInfo",parent:e},(e=>({name:this.extractAttr(e,"name")?.asString(),showFirstColumn:this.extractAttr(e,"showFirstColumn")?.asBool(),showLastColumn:this.extractAttr(e,"showLastColumn")?.asBool(),showRowStripes:this.extractAttr(e,"showRowStripes")?.asBool(),showColumnStripes:this.extractAttr(e,"showColumnStripes")?.asBool()})))[0]}extractTableAutoFilter(e){return this.mapOnElements({query:"autoFilter",parent:e},(e=>({columns:this.extractFilterColumns(e),zone:this.extractAttr(e,"ref",{required:!0}).asString()})))[0]}extractFilterColumns(e){return this.mapOnElements({query:"tableColumn",parent:e},(t=>({colId:this.extractAttr(e,"colId",{required:!0}).asNum(),hiddenButton:this.extractAttr(e,"hiddenButton",{default:!1}).asBool(),filters:this.extractSimpleFilter(t)})))}extractSimpleFilter(e){return this.mapOnElements({query:"filter",parent:e},(e=>({val:this.extractAttr(e,"val",{required:!0}).asString()})))}}class zy extends Fy{theme;constructor(e,t,o,s){super(e,t,o),this.theme=s}getSheet(){return this.mapOnElements({query:"worksheet",parent:this.rootFile.file.xml},(e=>{const t=this.getSheetWorkbookInfo();return{sheetName:this.extractSheetName(),sheetViews:this.extractSheetViews(e),sheetFormat:this.extractSheetFormat(e),cols:this.extractCols(e),rows:this.extractRows(e),sharedFormulas:this.extractSharedFormulas(e),merges:this.extractMerges(e),cfs:this.extractConditionalFormats(),figures:this.extractFigures(e),hyperlinks:this.extractHyperLinks(e),tables:[...this.extractTables(e),...this.extractPivotTables()],isVisible:"visible"===t.state}}))[0]}extractSheetViews(e){return this.mapOnElements({parent:e,query:"sheetView"},(e=>{const t=this.querySelector(e,"pane");return{tabSelected:this.extractAttr(e,"tabSelected",{default:!1}).asBool(),showFormulas:this.extractAttr(e,"showFormulas",{default:!1}).asBool(),showGridLines:this.extractAttr(e,"showGridLines",{default:!0}).asBool(),showRowColHeaders:this.extractAttr(e,"showRowColHeaders",{default:!0}).asBool(),pane:{xSplit:t?this.extractAttr(t,"xSplit",{default:0}).asNum():0,ySplit:t?this.extractAttr(t,"ySplit",{default:0}).asNum():0}}}))}extractSheetName(){const e=yw(this.xlsxFileStructure.workbook.file.fileName,this.rootFile.file.fileName),t=this.extractRelationships(this.xlsxFileStructure.workbook.rels).find((t=>t.target===e)).id;for(let e of this.querySelectorAll(this.xlsxFileStructure.workbook.file.xml,"sheet"))if(e.attributes["r:id"].value===t)return e.attributes.name.value;throw new Error("Missing sheet name")}getSheetWorkbookInfo(){const e=yw(this.xlsxFileStructure.workbook.file.fileName,this.rootFile.file.fileName),t=this.extractRelationships(this.xlsxFileStructure.workbook.rels).find((t=>t.target===e)).id,o=this.mapOnElements({parent:this.xlsxFileStructure.workbook.file.xml,query:"sheet"},(e=>({relationshipId:this.extractAttr(e,"r:id",{required:!0}).asString(),sheetId:this.extractAttr(e,"sheetId",{required:!0}).asString(),sheetName:this.extractAttr(e,"name",{required:!0}).asString(),state:this.extractAttr(e,"state",{default:"visible"}).asString()}))).find((e=>e.relationshipId===t));if(!o)throw new Error("Cannot find corresponding workbook sheet");return o}extractConditionalFormats(){return new Ly(this.rootFile,this.xlsxFileStructure,this.warningManager,this.theme).extractConditionalFormattings()}extractFigures(e){return this.mapOnElements({parent:e,query:"drawing"},(e=>{const t=this.extractAttr(e,"r:id",{required:!0})?.asString(),o=this.getTargetXmlFile(this.relationships[t]);return new Uy(o,this.xlsxFileStructure,this.warningManager).extractFigures()}))[0]||[]}extractTables(e){return this.mapOnElements({query:"tablePart",parent:e},(e=>{const t=this.extractAttr(e,"r:id",{required:!0})?.asString(),o=this.getTargetXmlFile(this.relationships[t]);return new Hy(o,this.xlsxFileStructure,this.warningManager).getTable()}))}extractPivotTables(){try{return Object.values(this.relationships).filter((e=>e.type.endsWith("pivotTable"))).map((e=>{const t=this.getTargetXmlFile(e);return new By(t,this.xlsxFileStructure,this.warningManager).getPivotTable()}))}catch(e){return this.catchErrorOnElement(e),[]}}extractMerges(e){return this.mapOnElements({parent:e,query:"mergeCell"},(e=>this.extractAttr(e,"ref",{required:!0}).asString()))}extractSheetFormat(e){const t=this.querySelector(e,"sheetFormatPr");if(t)return{defaultColWidth:this.extractAttr(t,"defaultColWidth",{default:$E.toString()}).asNum(),defaultRowHeight:this.extractAttr(t,"defaultRowHeight",{default:WE.toString()}).asNum()}}extractCols(e){return this.mapOnElements({parent:e,query:"cols col"},(e=>({width:this.extractAttr(e,"width")?.asNum(),customWidth:this.extractAttr(e,"customWidth")?.asBool(),bestFit:this.extractAttr(e,"bestFit")?.asBool(),hidden:this.extractAttr(e,"hidden")?.asBool(),min:this.extractAttr(e,"min",{required:!0})?.asNum(),max:this.extractAttr(e,"max",{required:!0})?.asNum(),styleIndex:this.extractAttr(e,"style")?.asNum()})))}extractRows(e){return this.mapOnElements({parent:e,query:"sheetData row"},(e=>({index:this.extractAttr(e,"r",{required:!0})?.asNum(),cells:this.extractCells(e),height:this.extractAttr(e,"ht")?.asNum(),customHeight:this.extractAttr(e,"customHeight")?.asBool(),hidden:this.extractAttr(e,"hidden")?.asBool(),styleIndex:this.extractAttr(e,"s")?.asNum()})))}extractCells(e){return this.mapOnElements({parent:e,query:"c"},(e=>({xc:this.extractAttr(e,"r",{required:!0})?.asString(),styleIndex:this.extractAttr(e,"s")?.asNum(),type:rw[this.extractAttr(e,"t",{default:"n"})?.asString()],value:this.extractChildTextContent(e,"v"),formula:this.extractCellFormula(e)})))}extractCellFormula(e){const t=this.querySelector(e,"f");if(t)return{content:this.extractTextContent(t),sharedIndex:this.extractAttr(t,"si")?.asNum(),ref:this.extractAttr(t,"ref")?.asString()}}extractHyperLinks(e){return this.mapOnElements({parent:e,query:"hyperlink"},(e=>{const t=this.extractAttr(e,"r:id")?.asString();return{xc:this.extractAttr(e,"ref",{required:!0})?.asString(),location:this.extractAttr(e,"location")?.asString(),display:this.extractAttr(e,"display")?.asString(),relTarget:t?this.relationships[t].target:void 0}}))}extractSharedFormulas(e){const t=this.querySelectorAll(e,"f[si][ref]"),o={};for(let e of t){const t=this.extractAttr(e,"si",{required:!0}).asNum(),s=this.extractTextContent(e,{required:!0});o[t]=s}const s=[];for(let e=0;e<Object.keys(o).length;e++)o[e]?s.push(o[e]):(this.warningManager.addParsingWarning(`Missing shared formula ${e}, replacing it by empty formula`),s.push(""));return s}}class Gy extends Fy{theme;constructor(e,t,o){super(e.styles,e,t),this.theme=o}getNumFormats(){return this.mapOnElements({parent:this.rootFile.file.xml,query:"numFmt"},(e=>this.extractNumFormats(e)))}extractNumFormats(e){return{id:this.extractAttr(e,"numFmtId",{required:!0}).asNum(),format:this.extractAttr(e,"formatCode",{required:!0,default:""}).asString()}}getFonts(){return this.mapOnElements({parent:this.rootFile.file.xml,query:"font"},(e=>this.extractFont(e)))}extractFont(e){const t=this.extractChildAttr(e,"name","val",{default:"Arial"}).asString(),o=this.extractChildAttr(e,"sz","val",{default:B.toString()}).asNum(),s=this.extractColor(this.querySelector(e,"color"),this.theme),n=this.querySelector(e,"i")||void 0,i=n&&"0"!==n.attributes.val?.value,r=this.querySelector(e,"b")||void 0,a=r&&"0"!==r.attributes.val?.value,l=this.querySelector(e,"strike")||void 0,c=l&&"0"!==l.attributes.val?.value,h=this.querySelector(e,"u")||void 0;return{name:t,size:o,color:s,italic:i,bold:a,underline:h&&"none"!==h.attributes.val?.value,strike:c}}getFills(){return this.mapOnElements({parent:this.rootFile.file.xml,query:"fill"},(e=>this.extractFill(e)))}extractFill(e){const t=e.children[0];return"patternFill"===t.tagName?{patternType:t.attributes.patternType?.value,bgColor:this.extractColor(this.querySelector(t,"bgColor"),this.theme),fgColor:this.extractColor(this.querySelector(t,"fgColor"),this.theme)}:{patternType:"solid",fgColor:this.extractColor(this.querySelectorAll(t,"color")[1],this.theme)}}getBorders(){return this.mapOnElements({parent:this.rootFile.file.xml,query:"border"},(e=>this.extractBorder(e)))}extractBorder(e){const t={left:this.extractSingleBorder(e,"left",this.theme),right:this.extractSingleBorder(e,"right",this.theme),top:this.extractSingleBorder(e,"top",this.theme),bottom:this.extractSingleBorder(e,"bottom",this.theme),diagonal:this.extractSingleBorder(e,"diagonal",this.theme)};return t.diagonal&&(t.diagonalUp=this.extractAttr(e,"diagonalUp")?.asBool(),t.diagonalDown=this.extractAttr(e,"diagonalDown")?.asBool()),t}extractSingleBorder(e,t,o){const s=this.querySelector(e,t);if(s&&s.attributes.style)return{style:this.extractAttr(s,"style",{required:!0,default:"thin"}).asString(),color:this.extractColor(s.children[0],o,"000000")}}extractAlignment(e){return{horizontal:this.extractAttr(e,"horizontal",{default:"general"}).asString(),vertical:this.extractAttr(e,"vertical",{default:"bottom"}).asString(),textRotation:this.extractAttr(e,"textRotation")?.asNum(),wrapText:this.extractAttr(e,"wrapText")?.asBool(),indent:this.extractAttr(e,"indent")?.asNum(),relativeIndent:this.extractAttr(e,"relativeIndent")?.asNum(),justifyLastLine:this.extractAttr(e,"justifyLastLine")?.asBool(),shrinkToFit:this.extractAttr(e,"shrinkToFit")?.asBool(),readingOrder:this.extractAttr(e,"readingOrder")?.asNum()}}getDxfs(){return this.mapOnElements({query:"dxf",parent:this.rootFile.file.xml},(e=>{const t=this.querySelector(e,"font"),o=this.querySelector(e,"fill"),s=this.querySelector(e,"border"),n=this.querySelector(e,"numFmt"),i=this.querySelector(e,"alignment");return{font:t?this.extractFont(t):void 0,fill:o?this.extractFill(o):void 0,numFmt:n?this.extractNumFormats(n):void 0,alignment:i?this.extractAlignment(i):void 0,border:s?this.extractBorder(s):void 0}}))}getStyles(){return this.mapOnElements({query:"cellXfs xf",parent:this.rootFile.file.xml},(e=>{const t=this.querySelector(e,"alignment");return{fontId:this.extractAttr(e,"fontId",{required:!0,default:0}).asNum(),fillId:this.extractAttr(e,"fillId",{required:!0,default:0}).asNum(),borderId:this.extractAttr(e,"borderId",{required:!0,default:0}).asNum(),numFmtId:this.extractAttr(e,"numFmtId",{required:!0,default:0}).asNum(),alignment:t?this.extractAlignment(t):void 0}}))}}class $y extends Fy{getExternalBook(){return this.mapOnElements({parent:this.rootFile.file.xml,query:"externalBook"},(e=>({rId:this.extractAttr(e,"r:id",{required:!0}).asString(),sheetNames:this.mapOnElements({parent:e,query:"sheetName"},(e=>this.extractAttr(e,"val",{required:!0}).asString())),datasets:this.extractExternalSheetData(e)})))[0]}extractExternalSheetData(e){return this.mapOnElements({parent:e,query:"sheetData"},(e=>{const t=this.mapOnElements({parent:e,query:"cell"},(e=>({xc:this.extractAttr(e,"r",{required:!0}).asString(),value:this.extractChildTextContent(e,"v",{required:!0})}))),o={};for(let e of t)o[e.xc]=e.value;return{sheetId:this.extractAttr(e,"sheetId",{required:!0}).asNum(),data:o}}))}}function Wy(e,t){const o=function(e,t){const o=t[KE],s=o.querySelectorAll(`Override[ContentType="${e}"]`),n=[];for(let e of s){const t=e?.attributes.PartName.value;n.push(t.substring(1))}return n}(e,t);return function(e,t){const o=[];for(let s of e){const e=qy(s,t);o.push({file:{fileName:s,xml:t[s]},rels:e?{fileName:e,xml:t[e]}:void 0})}return o}(o,t)}function qy(e,t){if(e===KE)return"_rels/.rels";let o="";const s=e.split("/");for(let e=0;e<s.length-1;e++)o+=s[e]+"/";return o+="_rels/",o+=s[s.length-1]+".rels",t[o]||(o=void 0),o}class Zy{warningManager;xmls;images;constructor(e){this.warningManager=new JE,this.xmls={},this.images=[];for(let t of Object.keys(e))if(t.endsWith(".xml")||t.endsWith(".rels")){const o=e[t].replaceAll(/(<\/?)([a-zA-Z0-9]+):([a-zA-Z0-9]+)/g,"$1NAMESPACE$2NAMESPACE$3");this.xmls[t]=Ry(new NE(o))}else t.includes("media/image")&&this.images.push({fileName:t,imageSrc:e[t].imageSrc})}convertXlsx(){const e=this.getXlsxData();return this.convertImportedData(e)}getXlsxData(){const e=this.buildXlsxFileStructure(),t=e.theme?new Dy(e.theme,e,this.warningManager).getTheme():void 0,o=e.sharedStrings?new Dy(e.sharedStrings,e,this.warningManager).getSharedStrings():[],s=e.sheets.sort(((e,t)=>e.file.fileName.localeCompare(t.file.fileName,void 0,{numeric:!0}))).map((o=>new zy(o,e,this.warningManager,t).getSheet())),n=e.externalLinks.map((t=>new $y(t,e,this.warningManager).getExternalBook())),i=new Gy(e,this.warningManager,t);return{fonts:i.getFonts(),fills:i.getFills(),borders:i.getBorders(),dxfs:i.getDxfs(),numFmts:i.getNumFormats(),styles:i.getStyles(),sheets:s,sharedStrings:o,externalBooks:n}}buildXlsxFileStructure(){const e={sheets:Wy(UE.sheet,this.xmls),workbook:Wy(UE.workbook,this.xmls)[0],styles:Wy(UE.styles,this.xmls)[0],sharedStrings:Wy(UE.sharedStrings,this.xmls)[0],theme:Wy(UE.themes,this.xmls)[0],charts:Wy(UE.chart,this.xmls),figures:Wy(UE.drawing,this.xmls),tables:Wy(UE.table,this.xmls),pivots:Wy(UE.pivot,this.xmls),externalLinks:Wy(UE.externalLink,this.xmls),images:this.images};if(!e.workbook.rels)throw Error(Xt("Cannot find workbook relations file"));return e}convertImportedData(e){const t={version:12,sheets:uy(e,this.warningManager),styles:Mw(e,this.warningManager),formats:Fw(e,this.warningManager),borders:Ow(e,this.warningManager),entities:{},revisionId:W};return Cy(t,e),Object.keys(e.styles).map((t=>{e.styles[t]=Le(e.styles[t])})),t}}var Yy;!function(e){e[e.LeftRef=0]="LeftRef",e[e.RightRef=1]="RightRef",e[e.Separator=2]="Separator",e[e.FullColumnSeparator=3]="FullColumnSeparator",e[e.FullRowSeparator=4]="FullRowSeparator",e[e.RightColumnRef=5]="RightColumnRef",e[e.RightRowRef=6]="RightRowRef",e[e.Found=7]="Found"}(Yy||(Yy={}));const jy=(e,t=(()=>!0))=>[{goTo:e,guard:t}],Xy=(e,t=(()=>!0))=>({goTo:e,guard:t}),Ky={[Yy.LeftRef]:{REFERENCE:jy(Yy.Separator),NUMBER:jy(Yy.FullRowSeparator),SYMBOL:[Xy(Yy.FullColumnSeparator,(e=>Ks(e.value))),Xy(Yy.FullRowSeparator,(e=>Qs(e.value)))]},[Yy.FullColumnSeparator]:{SPACE:jy(Yy.FullColumnSeparator),OPERATOR:jy(Yy.RightColumnRef,(e=>":"===e.value))},[Yy.FullRowSeparator]:{SPACE:jy(Yy.FullRowSeparator),OPERATOR:jy(Yy.RightRowRef,(e=>":"===e.value))},[Yy.Separator]:{SPACE:jy(Yy.Separator),OPERATOR:jy(Yy.RightRef,(e=>":"===e.value))},[Yy.RightRef]:{SPACE:jy(Yy.RightRef),NUMBER:jy(Yy.Found),REFERENCE:jy(Yy.Found,(e=>tn(e.value))),SYMBOL:jy(Yy.Found,(e=>Js(e.value)||en(e.value)))},[Yy.RightColumnRef]:{SPACE:jy(Yy.RightColumnRef),SYMBOL:jy(Yy.Found,(e=>Js(e.value))),REFERENCE:jy(Yy.Found,(e=>tn(e.value)))},[Yy.RightRowRef]:{SPACE:jy(Yy.RightRowRef),NUMBER:jy(Yy.Found),REFERENCE:jy(Yy.Found,(e=>tn(e.value))),SYMBOL:jy(Yy.Found,(e=>en(e.value)))},[Yy.Found]:{}};function Qy(e){let t=0,o=Ky[Yy.LeftRef];const s=[];for(;void 0!==o;){const n=e[t++];if(!n)return null;const i=o[n.type]?.find((e=>e.guard(n))),r=i?i.goTo:void 0;switch(r){case void 0:return null;case Yy.Found:return s.push(n),e.splice(0,t),{type:"REFERENCE",value:Oe(s.map((e=>e.value)))};default:o=Ky[r],s.push(n)}}return null}function Jy(e,t=ho){const o=Br(e,t),s=[];for(;o.length;)s.push(Qy(o)||o.shift());return s}function ex(e){const t=Jy(e);let o=[];return{text:"".concat(...t.map((e=>{if("REFERENCE"===e.type&&$s.test(e.value)){const t=e.value.trim();return o.includes(t)||o.push(t),`${ee}${o.indexOf(t)}${ee}`}return e.value}))),dependencies:o}}const tx=14,ox="Sheet1";function sx(e,t){if(!e)return lx();if(e["[Content_Types].xml"]){const o=new Zy(e);if(e=o.convertXlsx(),t)for(let e of o.warningManager.warnings.sort())console.warn(e)}return"version"in e&&e.version<tx&&(e=function(e){for(let t=nx.findIndex((t=>t.from===e.version));t<nx.length;t++)e=nx[t].applyMigration(e);return e}(e)),e=function(e){return e=function(e){if(e.uniqueFigureIds)return e;const t=new Set,o=new Kn;for(const s of e.sheets||[])for(const e of s.figures||[])t.has(e.id)&&(e.id+=o.uuidv4()),t.add(e.id);return e.uniqueFigureIds=!0,e}(e),e=function(e){const t=Object.assign(lx(),e,{version:tx});t.sheets=t.sheets?t.sheets.map(((e,t)=>Object.assign(ax(`Sheet${t+1}`,`Sheet${t+1}`),e))):[],0===t.sheets.length&&t.sheets.push(ax(ox,"Sheet1"));Jr(t.settings.locale)||(t.settings.locale=ho);return t}(e),e}(e),e}const nx=[{description:"add the `activeSheet` field on data",from:1,to:2,applyMigration:e=>(e.sheets&&e.sheets[0]&&(e.activeSheet=e.sheets[0].name),e)},{description:"add an id field in each sheet",from:2,to:3,applyMigration(e){if(e.sheets&&e.sheets.length)for(let t of e.sheets)t.id=t.id||t.name;return e}},{description:"activeSheet is now an id, not the name of a sheet",from:3,to:4,applyMigration(e){if(e.sheets&&e.activeSheet){const t=e.sheets.find((t=>t.name===e.activeSheet));e.activeSheet=t.id}return e}},{description:"add figures object in each sheets",from:4,to:5,applyMigration(e){for(let t of e.sheets||[])t.figures=t.figures||[];return e}},{description:"normalize the content of the cell if it is a formula to avoid parsing all the formula that vary only by the cells they use",from:5,to:6,applyMigration(e){for(let t of e.sheets||[])for(let e in t.cells||[]){const o=t.cells[e];o.content&&o.content.startsWith("=")&&(o.formula=ex(o.content))}return e}},{description:"transform chart data structure",from:6,to:7,applyMigration(e){for(let t of e.sheets||[])for(let e in t.figures||[]){const{dataSets:o,...s}=t.figures[e].data,n=[];for(let e of o)if(e.labelCell){const t=rn(e.dataRange),o=e.labelCell+":"+ut(t.right,t.bottom);n.push(o)}else n.push(e.dataRange);s.dataSetsHaveTitle=Boolean(o[0].labelCell),s.dataSets=n,t.figures[e].data=s}return e}},{description:"remove single quotes in sheet names",from:7,to:8,applyMigration(e){const t=[],o=new RegExp(J,"g");for(let s of e.sheets||[]){if(!s.name)continue;const e=s.name,n=e.replace(o,"_");let i=1,r=n;for(;t.includes(r);)r=`${n}${i}`,i++;s.name=r,t.push(r);const a=t=>{if(void 0===t)return t;let o=t.replace(e,r),s=t;for(;s!==o;)s=o,o=s.replace(e,r);return s};for(let e in s.cells){const t=s.cells[e];t.formula&&(t.formula.dependencies=t.formula.dependencies.map(a))}for(let e of s.figures||[])if("chart"===e.type){const t=e.data.dataSets.map(a),o=a(e.data.labelRange);e.data={...e.data,dataSets:t,labelRange:o}}for(let e of s.conditionalFormats||[]){e.ranges=e.ranges.map(a);for(const t of["minimum","maximum","midpoint","upperInflectionPoint","lowerInflectionPoint"])"formula"===e.rule[t]?.type&&(e.rule[t].value=a(e.rule[t].value))}}return e}},{description:"transform chart data structure with design attributes",from:8,to:9,applyMigration(e){for(const t of e.sheets||[])for(const e of t.figures||[])e.data.background=h,e.data.verticalAxisPosition="left",e.data.legendPosition="top",e.data.stacked=!1;return e}},{description:"de-normalize formula to reduce exported json size (~30%)",from:9,to:10,applyMigration(e){for(let t of e.sheets||[])for(let e in t.cells||[]){const o=t.cells[e];if(o.formula){let{text:e,dependencies:t}=o.formula;for(let[o,s]of Object.entries(t)){const t=`\\${ee}${o}\\${ee}`;e=e.replace(new RegExp(t,"g"),s)}o.content=e,delete o.formula}}return e}},{description:"normalize the formats of the cells",from:10,to:11,applyMigration(e){const t={};for(let o of e.sheets||[])for(let e in o.cells||[]){const s=o.cells[e];s.format&&(s.format=Ae(s.format,t))}return e.formats=t,e}},{description:"Add isVisible to sheets",from:11,to:12,applyMigration(e){for(let t of e.sheets||[])t.isVisible=!0;return e}},{description:"Change Border description structure",from:12,to:13,applyMigration(e){for(const t in e.borders){const o=e.borders[t];for(const e in o)Array.isArray(o[e])&&(o[e]={style:o[e][0],color:o[e][1]})}return e}},{description:"Add locale to spreadsheet settings",from:13,to:14,applyMigration:e=>(e.settings||(e.settings={}),e.settings.locale||(e.settings.locale=ho),e)}];function ix(e,t){return t=function(e,t){if(0!==Object.keys(e).length)return t;const o=[],s=[],n=e=>{if("CREATE_SHEET"===e.type)o.push(e.sheetId);else if("sheetId"in e&&!o.includes(e.sheetId))return{...e,sheetId:ox};return e};for(const e of t)"REMOTE_REVISION"===e.type?s.push({...e,commands:e.commands.map(n)}):s.push(e);return s}(e,t),t=rx(t,"SORT_CELLS"),t=function(e,t){const o=[],s={};for(const t of e.sheets||[])t.figures?.forEach((e=>{"chart"===e.tag&&(s[e.id]=e.data)}));for(const e of t)if("REMOTE_REVISION"===e.type){const t=[];for(const o of e.commands){let e=o;switch(o.type){case"CREATE_CHART":s[o.id]=o.definition;break;case"UPDATE_CHART":if(!s[o.id]){console.log(`Fix chart definition: chart with id ${o.id} not found.`);continue}const t={...s[o.id],...o.definition};e={...o,definition:t},s[o.id]=t}t.push(e)}o.push({...e,commands:t})}else o.push(e);return o}(e,t=rx(t,"SET_DECIMAL")),t}function rx(e,t){const o=[];for(const s of e)"REMOTE_REVISION"===s.type?o.push({...s,commands:s.commands.filter((e=>e.type!==t))}):o.push(s);return o}function ax(e,t){return{id:e,name:t,colNumber:26,rowNumber:100,cells:{},cols:{},rows:{},merges:[],conditionalFormats:[],figures:[],filterTables:[],isVisible:!0}}function lx(e="Sheet1"){return{version:tx,sheets:[ax(ox,e)],entities:{},styles:{},formats:{},borders:{},revisionId:W,uniqueFigureIds:!0,settings:{locale:ho}}}function cx(e,t){return{...ax(e,t),charts:[],images:[]}}class hx{static getters=[];history;dispatch;constructor(e,t){this.history=Object.assign(Object.create(e),{update:e.addChange.bind(e,this),selectCell:()=>{}}),this.dispatch=t}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 dx extends hx{getters;uuidGenerator;constructor({getters:e,stateObserver:t,range:o,dispatch:s,uuidGenerator:n}){super(t,s),o.addRangeProvider(this.adaptRanges.bind(this)),this.getters=e,this.uuidGenerator=n}import(e){}export(e){}adaptRanges(e,t){}garbageCollectExternalResources(){}}class ux{scope;code="";constructor(e=new px){this.scope=e}append(...e){this.code+=e.map((e=>e.toString())).join("\n")+"\n"}return(e){return new gx(this.scope,this.code,e)}toString(){return mx(this.code)}}class gx{scope;returnExpression;code;constructor(e,t,o){this.scope=e,this.returnExpression=o,this.code=mx(t)}toString(){return this.code}assignResultToVariable(){if(this.scope.isAlreadyDeclared(this.returnExpression))return this;const e=this.scope.nextVariableName(),t=new ux(this.scope);return t.append(this.code),t.append(`const ${e} = ${this.returnExpression};`),t.return(e)}}class px{nextId=1;declaredVariables=new Set;nextVariableName(){const e="_"+this.nextId++;return this.declaredVariables.add(e),e}isAlreadyDeclared(e){return this.declaredVariables.has(e)}}function mx(e){let t="",o=0;const s=e.split("\n").map((e=>e.trim())).filter((e=>""!==e));for(const e of s)e.startsWith("}")&&o--,t+="\t".repeat(o)+e+"\n",e.endsWith("{")&&o++;return t.trim()}const fx=/[a-zA-Z0-9\_]+(\.[a-zA-Z0-9\_]+)*/,vx=["-","+"],bx=["%"],Sx=["*","+","&"],Cx={"^":30,"%":30,"*":20,"/":20,"+":15,"-":15,"&":13,">":10,"<>":10,">=":10,"<":10,"<=":10,"=":10};function Ex(e){const t=e.shift();if(!t)throw new So;switch(t.type){case"DEBUGGER":const o=xx(e,1e3);return o.debug=!0,o;case"NUMBER":return{type:"NUMBER",value:Wt(t.value,ho)};case"STRING":return{type:"STRING",value:re(t.value)};case"INVALID_REFERENCE":throw new Co;case"REFERENCE":if(":"===e[0]?.value&&"REFERENCE"===e[1]?.type){e.shift();const o=e.shift();return{type:"REFERENCE",value:`${t.value}:${o?.value}`}}return{type:"REFERENCE",value:t.value};case"SYMBOL":const s=t.value,n=e[0];if("LEFT_PAREN"===n?.type&&fx.test(t.value)){const t=function(e){yx(e,"LEFT_PAREN",Xt("Missing opening parenthesis"));const t=e[0];if("RIGHT_PAREN"===t?.type)return yx(e,"RIGHT_PAREN"),[];const o=[];o.push(wx(e));for(;"RIGHT_PAREN"!==e[0]?.type;)yx(e,"ARG_SEPARATOR",Xt("Wrong function call")),o.push(wx(e));return yx(e,"RIGHT_PAREN"),o}(e);return{type:"FUNCALL",value:s,args:t}}const i=s.toUpperCase();if("TRUE"===i||"FALSE"===i)return{type:"BOOLEAN",value:"TRUE"===i};throw new So(Xt("Invalid formula"));case"LEFT_PAREN":const r=xx(e);return yx(e,"RIGHT_PAREN",Xt("Missing closing parenthesis")),r;case"OPERATOR":const a=t.value;if(vx.includes(a))return{type:"UNARY_OPERATION",value:a,operand:xx(e,Cx[a])};throw new So(Xt("Unexpected token: %s",t.value));default:throw new So(Xt("Unexpected token: %s",t.value))}}function wx(e){const t=e[0];return"ARG_SEPARATOR"===t?.type||"RIGHT_PAREN"===t?.type?{type:"EMPTY",value:""}:xx(e)}function yx(e,t,o){const s=e.shift();if(!s||s.type!==t)throw new So(o)}function xx(e,t=0){if(0===e.length)throw new So;let o=Ex(e);for(;"OPERATOR"===e[0]?.type&&Cx[e[0].value]>t;){const t=e.shift().value;if(bx.includes(t))o={type:"UNARY_OPERATION",value:t,operand:o,postfix:!0};else{o={type:"BIN_OPERATION",value:t,left:o,right:xx(e,Cx[t])}}}return o}function Ix(e){return Rx(Br(e))}function Rx(e){"="===(e=e.filter((e=>"SPACE"!==e.type)))[0].value&&e.splice(0,1);const t=xx(e);if(e.length)throw new So;return t}function Tx(e,t,o){return _x(e,(e=>e.type===t?o(e):e))}function Ax(e){return Array.from(Ox(e))}function*Ox(e){switch(yield e,e.type){case"FUNCALL":for(const t of e.args)yield*Ox(t);break;case"UNARY_OPERATION":yield*Ox(e.operand);break;case"BIN_OPERATION":yield*Ox(e.left),yield*Ox(e.right)}}function _x(e,t){switch((e=t(e)).type){case"FUNCALL":return{...e,args:e.args.map((e=>_x(e,t)))};case"UNARY_OPERATION":return{...e,operand:_x(e.operand,t)};case"BIN_OPERATION":return{...e,right:_x(e.right,t),left:_x(e.left,t)};default:return e}}function Mx(e){switch(e.type){case"FUNCALL":const t=e.args.map((e=>Mx(e)));return`${e.value}(${t.join(",")})`;case"NUMBER":return e.value.toString();case"REFERENCE":default:return e.value;case"STRING":return`"${e.value}"`;case"BOOLEAN":return e.value?"TRUE":"FALSE";case"UNARY_OPERATION":return e.postfix?Nx(e)+e.value:e.value+Fx(e);case"BIN_OPERATION":return Nx(e)+e.value+Fx(e)}}function Nx(e){const t=e.value,o="left"in e?e.left:e.operand,s=o.value;return"BIN_OPERATION"===o.type&&Cx[s]<Cx[t]?`(${Mx(o)})`:Mx(o)}function Fx(e){const t=e.value,o="right"in e?e.right:e.operand,s=Cx[o.value],n=Cx[t];let i=!1;return"BIN_OPERATION"!==o.type?i=!1:s<n?i=!0:s!==n||Sx.includes(t)||(i=!0),i?`(${Mx(o)})`:Mx(o)}const Dx=Wf.content,Lx={"=":"EQ","+":"ADD","-":"MINUS","*":"MULTIPLY","/":"DIVIDE",">=":"GTE","<>":"NE",">":"GT","<=":"LTE","<":"LT","^":"POWER","&":"CONCATENATE"},Px={"-":"UMINUS","+":"UPLUS","%":"UNARY.PERCENT"},kx={};function Vx(e){return Ux(Jy(e))}function Ux(e){const{dependencies:t,constantValues:o}=function(e){const t={numbers:[],strings:[]},o=[];for(const s of e)switch(s.type){case"INVALID_REFERENCE":case"REFERENCE":o.push(s.value);break;case"STRING":const e=re(s.value);t.strings.includes(e)||t.strings.push(e);break;case"NUMBER":{const e=Wt(s.value,ho);t.numbers.includes(e)||t.numbers.push(e);break}}return{dependencies:o,constantValues:t}}(e),s=function(e,t,o){return Oe(e.map((e=>{switch(e.type){case"STRING":const s=re(e.value);return`|S${o.strings.indexOf(s)}|`;case"NUMBER":return`|N${o.numbers.indexOf(Wt(e.value,ho))}|`;case"REFERENCE":case"INVALID_REFERENCE":return`|${t.indexOf(e.value)}|`;case"SPACE":return"";default:return e.value}})))}(e,t,o);if(!kx[s]){const n=Rx([...e]),i=new px;if("BIN_OPERATION"===n.type&&":"===n.value)throw new So(Xt("Invalid formula"));if("EMPTY"===n.type)throw new So(Xt("Invalid formula"));const r=h(n),a=new ux;a.append(`// ${s}`),a.append(r),a.append(`return ${r.returnExpression};`);let l=new Function("deps","ref","range","ctx",a.toString());function c(e){const{args:t}=e,o=e.value.toUpperCase(),s=Dx[o];if(!s)throw new wo(Xt('Unknown function: "%s"',e.value));!function(e){const t=e.args.length,o=e.value.toUpperCase(),s=Dx[o];if(t<s.minArgRequired)throw new So(Xt("Invalid number of arguments for the %s function. Expected %s minimum, but got %s instead.",o,s.minArgRequired.toString(),t.toString()));if(t>s.maxArgPossible)throw new So(Xt("Invalid number of arguments for the %s function. Expected %s maximum, but got %s instead.",o,s.maxArgPossible.toString(),t.toString()));const n=s.nbrArgRepeating;if(n>1){const e=s.args.length-n;if((t-e)%n!=0)throw new So(Xt("Invalid number of arguments for the %s function. Expected all arguments after position %s to be supplied by groups of %s arguments",o,e.toString(),n.toString()))}}(e);const n=[];for(let e=0;e<t.length;e++){const i=s.getArgToFocus(e+1)-1,r=s.args[i],a=t[e],l=r.type||[],c=l.includes("META"),d=l.some((e=>Bx(e)));if(l.every((e=>Bx(e)))&&!Hx(a))throw new So(Xt("Function %s expects the parameter %s to be reference to a cell or range, not a %s.",o,(e+1).toString(),a.type.toLowerCase()));n.push(h(a,c,d,{functionName:o,paramIndex:e+1}))}return n}function h(e,s=!1,n=!1,r={}){const a=new ux(i);if("REFERENCE"!==e.type&&("BIN_OPERATION"!==e.type||":"!==e.value)&&s)throw new So(Xt("Argument must be a reference to a cell or range."));switch(e.debug&&a.append("debugger;"),e.type){case"BOOLEAN":return a.return(`{ value: ${e.value} }`);case"NUMBER":return a.return(`{ value: this.constantValues.numbers[${o.numbers.indexOf(e.value)}] }`);case"STRING":return a.return(`{ value: this.constantValues.strings[${o.strings.indexOf(e.value)}] }`);case"REFERENCE":const i=t.indexOf(e.value);return n?a.return(`range(deps[${i}])`):a.return(`ref(deps[${i}], ${s?"true":"false"}, "${r.functionName||Lx["="]}", ${r.paramIndex})`);case"FUNCALL":const l=c(e).map((e=>e.assignResultToVariable()));a.append(...l);const d=e.value.toUpperCase();return a.return(`ctx['${d}'](${l.map((e=>e.returnExpression))})`);case"UNARY_OPERATION":{const t=Px[e.value],o=h(e.operand,!1,!1,{functionName:t}).assignResultToVariable();return a.append(o),a.return(`ctx['${t}'](${o.returnExpression})`)}case"BIN_OPERATION":{const t=Lx[e.value],o=h(e.left,!1,!1,{functionName:t}).assignResultToVariable(),s=h(e.right,!1,!1,{functionName:t}).assignResultToVariable();return a.append(o),a.append(s),a.return(`ctx['${t}'](${o.returnExpression}, ${s.returnExpression})`)}case"EMPTY":return a.return("undefined")}}kx[s]={execute:l}}return{execute:kx[s].execute,dependencies:t,constantValues:o,tokens:e}}function Bx(e){return e.startsWith("RANGE")}function Hx(e){if("REFERENCE"===e.type)return!0;if("FUNCALL"===e.type){const t=Dx[e.value.toUpperCase()];return t&&Bx(t.returns[0])}return!1}function zx(e,t){return function(e){let t=[],o="";return e.map(((e,s)=>{switch(["SPACE","LEFT_PAREN"].includes(e.type)||(o=""),e.type){case"SYMBOL":o=e.value;break;case"LEFT_PAREN":t.push({parent:o,argPosition:0}),o="";break;case"RIGHT_PAREN":t.pop();break;case"ARG_SEPARATOR":t.length&&t[t.length-1].argPosition++}if(t.length){const o=t[t.length-1];o.parent&&(e.functionContext=Object.assign({},o))}return e}))}(function(e){let t=1;const o=[];return e.map((e=>("LEFT_PAREN"===e.type?(o.push(t),e.parenIndex=t,t++):"RIGHT_PAREN"===e.type&&(e.parenIndex=o.pop()),e)))}(function(e){let t=0;return e.map((e=>{const o=e.value.toString().length,s=Object.assign({},e,{start:t,end:t+o,length:o});return t=s.end,s}))}(Jy(e,t))))}const Gx=Wf.content;function $x(e){try{return 0===Ax(Rx(e)).filter((e=>"FUNCALL"===e.type&&!Gx[e.value.toUpperCase()]?.isExported)).length}catch(e){return!1}}class Wx{id;format;style;sheetId;getRangeString;isFormula=!0;compiledFormula;constructor(e,t,o,s,n,i,r){this.id=e,this.format=o,this.style=s,this.sheetId=i,this.getRangeString=r;let a=0;const l=t.tokens.map((e=>{if("REFERENCE"===e.type){const e=a++;return new qx((()=>this.getRangeString(n[e],this.sheetId)))}return e}));this.compiledFormula={...t,dependencies:n,tokens:l}}get content(){return Oe(this.compiledFormula.tokens.map((e=>e.value)))}}class qx{getValue;type="REFERENCE";constructor(e){this.getValue=e}get value(){return this.getValue()}}function Zx(e){return""===e?NaN:Number(e)}class Yx{id;zone;filters;constructor(e){this.filters=[],this.zone=e;const t=new Kn;this.id=t.uuidv4();for(const o of ue(e.left,e.right+1)){const e={...this.zone,left:o,right:o};this.filters.push(new jx(t.uuidv4(),e))}}get contentZone(){if(this.zone.bottom!==this.zone.top)return{...this.zone,top:this.zone.top+1}}getFilterId(e){return this.filters.find((t=>t.col===e))?.id}clone(){return new Yx(this.zone)}}class jx{id;zoneWithHeaders;constructor(e,t){if(t.left!==t.right)throw new Error("Can only define a filter on a single column");this.id=e,this.zoneWithHeaders=t}get col(){return this.zoneWithHeaders.left}get filteredZone(){const e=this.zoneWithHeaders;if(e.bottom!==e.top)return{...e,top:e.top+1}}}function Xx(e){return Object.entries(e).map((([e,t])=>t?Kx(parseInt(e,10),t):void 0)).filter(Ie).map((e=>ut(e.left,e.top)+":"+ut(e.right,e.bottom)))}function Kx(e,t){return{...t.zone,topLeft:{col:t.zone.left,row:t.zone.top},id:e}}class Qx{getters;providers=[];constructor(e){this.getters=e}static getters=["getRangeString","getRangeFromSheetXC","createAdaptedRanges","getRangeDataFromXc","getRangeDataFromZone","getRangeFromRangeData","getRangeFromZone"];allowDispatch(e){return"MOVE_RANGES"===e.type?1===e.target.length?"Success":"InvalidZones":"Success"}beforeHandle(e){}handle(e){switch(e.type){case"REMOVE_COLUMNS_ROWS":{let t="COL"===e.dimension?"left":"top",o="COL"===e.dimension?"right":"bottom",s="COL"===e.dimension?"columns":"rows";const n=[...e.elements];n.sort(((e,t)=>t-e));const i=ge(n);this.executeOnAllRanges((n=>{if(n.sheetId!==e.sheetId)return{changeType:"NONE"};let r=n,a="NONE";for(let e of i){const i=Math.min(...e),l=Math.max(...e);if(n.zone[t]<=i&&i<=n.zone[o]){const e=Math.min(n.zone[o],l)-i+1;a="RESIZE",r=this.createAdaptedRange(r,s,a,-e)}else if(n.zone[t]>=i&&n.zone[o]<=l)a="REMOVE",r=n.clone({...this.getInvalidRange()});else if(n.zone[t]<=l&&n.zone[o]>=l){const e=l-n.zone[t]+1;a="RESIZE",r=this.createAdaptedRange(r,s,a,-e),r=this.createAdaptedRange(r,s,"MOVE",-(n.zone[t]-i))}else i<n.zone[t]&&(a="MOVE",r=this.createAdaptedRange(r,s,a,-(l-i+1)))}return"NONE"!==a?{changeType:a,range:r}:{changeType:"NONE"}}),e.sheetId);break}case"ADD_COLUMNS_ROWS":{let t="COL"===e.dimension?"left":"top",o="COL"===e.dimension?"right":"bottom",s="COL"===e.dimension?"columns":"rows";this.executeOnAllRanges((n=>{if(n.sheetId!==e.sheetId)return{changeType:"NONE"};if("after"===e.position){if(n.zone[t]<=e.base&&e.base<n.zone[o])return{changeType:"RESIZE",range:this.createAdaptedRange(n,s,"RESIZE",e.quantity)};if(e.base<n.zone[t])return{changeType:"MOVE",range:this.createAdaptedRange(n,s,"MOVE",e.quantity)}}else{if(n.zone[t]<e.base&&e.base<=n.zone[o])return{changeType:"RESIZE",range:this.createAdaptedRange(n,s,"RESIZE",e.quantity)};if(e.base<=n.zone[t])return{changeType:"MOVE",range:this.createAdaptedRange(n,s,"MOVE",e.quantity)}}return{changeType:"NONE"}}),e.sheetId);break}case"DELETE_SHEET":this.executeOnAllRanges((t=>{if(t.sheetId!==e.sheetId)return{changeType:"NONE"};const o=this.getters.getSheetName(e.sheetId);return{changeType:"REMOVE",range:t=t.clone({...this.getInvalidRange(),invalidSheetName:o})}}),e.sheetId);break;case"RENAME_SHEET":this.executeOnAllRanges((t=>{if(t.sheetId===e.sheetId)return{changeType:"CHANGE",range:t};if(e.name&&t.invalidSheetName===e.name){const o=void 0,s=e.sheetId;return{changeType:"CHANGE",range:t.clone({sheetId:s,invalidSheetName:o})}}return{changeType:"NONE"}}));break;case"MOVE_RANGES":{const t=e.target[0];this.executeOnAllRanges((o=>{if(o.sheetId!==e.sheetId||!Sn(o.zone,t))return{changeType:"NONE"};const s=e.targetSheetId,n=e.col-t.left,i=e.row-t.top,r=this.createAdaptedRange(o,"both","MOVE",[n,i]),a=e.sheetId!==s||r.prefixSheet;return{changeType:"MOVE",range:r.clone({sheetId:s,prefixSheet:a})}}));break}}}finalize(){}verifyRangeRemoved(e){return t=>{const o=e(t);return"NONE"===o.changeType||an(o.range.zone)?o:{range:o.range,changeType:"REMOVE"}}}createAdaptedRange(e,t,o,s){const n=In(e.unboundedZone,t,o,s);return e.clone({zone:n})}executeOnAllRanges(e,t){const o=this.verifyRangeRemoved(e);for(const e of this.providers)e(o,t)}addRangeProvider(e){this.providers.push(e)}createAdaptedRanges(e,t,o,s){const n=e.map((e=>Nn.fromRange(e,this.getters)));return n.map((e=>{if(!an(e.zone))return e;const n=e.prefixSheet?e.sheetId:s,i={...e.unboundedZone,left:e.isFullRow&&!e.unboundedZone.hasHeader?e.unboundedZone.left:e.unboundedZone.left+(e.parts[0].colFixed?0:t),right:e.isFullRow?e.unboundedZone.right:e.unboundedZone.right+((e.parts[1]||e.parts[0]).colFixed?0:t),top:e.isFullCol&&!e.unboundedZone.hasHeader?e.unboundedZone.top:e.unboundedZone.top+(e.parts[0].rowFixed?0:o),bottom:e.isFullCol?e.unboundedZone.bottom:e.unboundedZone.bottom+((e.parts[1]||e.parts[0]).rowFixed?0:o)};return e.clone({sheetId:n,zone:i}).orderZone()}))}getRangeFromSheetXC(e,t){if(!Xs.test(t))return new Nn({sheetId:"",zone:{left:-1,top:-1,right:-1,bottom:-1},parts:[],invalidXc:t,prefixSheet:!1},this.getters.getSheetSize);let o,s=t,n=!1;t.includes("!")&&(({xc:s,sheetName:o}=on(t)),o&&(n=!0));const i=nn(s),r=Nn.getRangeParts(s,i),a=o&&!this.getters.getSheetIdByName(o)?o:void 0,l=this.getters.getSheetIdByName(o)||e;return new Nn({prefixSheet:n,zone:i,sheetId:l,invalidSheetName:a,parts:r},this.getters.getSheetSize).orderZone()}getRangeString(e,t){if(!e)return fo.InvalidReference;if(e.invalidXc)return e.invalidXc;if(e.zone.bottom-e.zone.top<0||e.zone.right-e.zone.left<0)return fo.InvalidReference;if(e.zone.left<0||e.zone.top<0)return fo.InvalidReference;const o=Nn.fromRange(e,this.getters);let s=o.sheetId!==t||o.invalidSheetName||o.prefixSheet,n="";if(s&&(n=o.invalidSheetName?o.invalidSheetName:he(this.getters.getSheetName(o.sheetId))),s&&!n)return fo.InvalidReference;let i=this.getRangePartString(o,0);return o.parts&&2===o.parts.length&&(o.zone.top!==o.zone.bottom||o.zone.left!==o.zone.right||o.parts[0].rowFixed||o.parts[0].colFixed||o.parts[1].rowFixed||o.parts[1].colFixed)&&(i+=":",i+=this.getRangePartString(o,1)),`${s?n+"!":""}${i}`}getRangeDataFromXc(e,t){return this.getters.getRangeFromSheetXC(e,t).rangeData}getRangeDataFromZone(e,t){return{_sheetId:e,_zone:t}}getRangeFromZone(e,t){return new Nn({sheetId:e,zone:t,parts:[{colFixed:!1,rowFixed:!1},{colFixed:!1,rowFixed:!1}],prefixSheet:!1},this.getters.getSheetSize)}getRangeFromRangeData(e){const t={prefixSheet:!1,zone:e._zone,sheetId:e._sheetId,invalidSheetName:void 0,parts:[{colFixed:!1,rowFixed:!1},{colFixed:!1,rowFixed:!1}]};return new Nn(t,this.getters.getSheetSize)}getRangePartString(e,t){const o=e.parts&&e.parts[t].colFixed?"$":"",s=rt(0===t?e.zone.left:e.zone.right),n=e.parts&&e.parts[t].rowFixed?"$":"",i=String(0===t?e.zone.top+1:e.zone.bottom+1);let r="";return r=e.isFullCol?0===t&&e.unboundedZone.hasHeader?o+s+n+i:o+s:e.isFullRow?0===t&&e.unboundedZone.hasHeader?o+s+n+i:n+i:o+s+n+i,r}getInvalidRange(){return{parts:[],prefixSheet:!1,zone:{left:-1,top:-1,right:-1,bottom:-1},sheetId:"",invalidXc:fo.InvalidReference}}}class Jx extends hx{static layers=[];getters;ui;selection;constructor({getters:e,stateObserver:t,dispatch:o,uiActions:s,selection:n}){super(t,o),this.getters=e,this.ui=s,this.selection=n}drawGrid(e,t){}}const eI=Wf.mapping;function tI(e,t,o){return new oI(e,t,o).getParameters()}class oI{getters;computeCell;evalContext;rangeCache={};constructor(e,t,o){this.getters=t,this.computeCell=o,this.evalContext=Object.assign(Object.create(eI),e,{getters:this.getters,locale:this.getters.getLocale()})}getParameters(){return[this.refFn.bind(this),this.range.bind(this),this.evalContext]}refFn(e,t,o,s){if(t){return{value:sn(this.getters.getSheetName(e.sheetId),cn(e.zone))}}if(!an(e.zone))throw new Co;if(e.zone.bottom!==e.zone.top||e.zone.left!==e.zone.right)throw new bo(s?Xt("Function %s expects the parameter %s to be a single value or a single cell reference, not a range.",o.toString(),s.toString()):Xt("Function %s expects its parameters to be single values or single cell references, not ranges.",o.toString()));if(e.invalidSheetName)throw new bo(Xt("Invalid sheet name: %s",e.invalidSheetName));const n={sheetId:e.sheetId,col:e.zone.left,row:e.zone.top};return this.readCell(n)}readCell(e){if(!this.getters.tryGetSheet(e.sheetId))throw new bo(Xt("Invalid sheet name"));const t=this.getEvaluatedCellIfNotEmpty(e);return void 0===t?{value:null,format:this.getters.getCell(e)?.format}:t}getEvaluatedCellIfNotEmpty(e){const t=this.computeCell(e);if(t.type===Qt.empty){const t=this.getters.getCell(e);if(!t||!t.isFormula&&""===t.content)return}return t}range({sheetId:e,zone:t}){if(!an(t))throw new Co;const o=mn(t,this.getters.getSheetZone(e));if(!o)return[[]];const{top:s,left:n,bottom:i,right:r}=t,a=`${e}-${s}-${n}-${i}-${r}`;if(a in this.rangeCache)return this.rangeCache[a];const l=o.bottom-o.top+1,c=o.right-o.left+1,h=new Array(c);for(let t=o.left;t<=o.right;t++){const s=t-o.left;h[s]=new Array(l);for(let n=o.top;n<=o.bottom;n++){const i=n-o.top;h[s][i]=this.readCell({sheetId:e,col:t,row:n})}}return this.rangeCache[a]=h,h}}function sI(e,t,o,s,n){nI(e,t,o||0,s||e.length-1,n||rI)}function nI(e,t,o,s,n){for(;s>o;){if(s-o>600){var i=s-o+1,r=t-o+1,a=Math.log(i),l=.5*Math.exp(2*a/3),c=.5*Math.sqrt(a*l*(i-l)/i)*(r-i/2<0?-1:1);nI(e,t,Math.max(o,Math.floor(t-r*l/i+c)),Math.min(s,Math.floor(t+(i-r)*l/i+c)),n)}var h=e[t],d=o,u=s;for(iI(e,o,t),n(e[s],h)>0&&iI(e,o,s);d<u;){for(iI(e,d,u),d++,u--;n(e[d],h)<0;)d++;for(;n(e[u],h)>0;)u--}0===n(e[o],h)?iI(e,o,u):iI(e,++u,s),u<=t&&(o=u+1),t<=u&&(s=u-1)}}function iI(e,t,o){var s=e[t];e[t]=e[o],e[o]=s}function rI(e,t){return e<t?-1:e>t?1:0}class aI{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(!bI(e,t))return o;const s=this.toBBox,n=[];for(;t;){for(let i=0;i<t.children.length;i++){const r=t.children[i],a=t.leaf?s(r):r;bI(e,a)&&(t.leaf?o.push(r):vI(e,a)?this._all(r,o):n.push(r))}t=n.pop()}return o}collides(e){let t=this.data;if(!bI(e,t))return!1;const o=[];for(;t;){for(let s=0;s<t.children.length;s++){const n=t.children[s],i=t.leaf?this.toBBox(n):n;if(bI(e,i)){if(t.leaf||vI(e,i))return!0;o.push(n)}}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=SI([]),this}remove(e,t){if(!e)return this;let o=this.data;const s=this.toBBox(e),n=[],i=[];let r,a,l;for(;o||n.length;){if(o||(o=n.pop(),a=n[n.length-1],r=i.pop(),l=!0),o.leaf){const s=lI(e,o.children,t);if(-1!==s)return o.children.splice(s,1),n.push(o),this._condense(n),this}l||o.leaf||!vI(o,s)?a?(r++,o=a.children[r],l=!1):o=null:(n.push(o),i.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 n=o-t+1;let i,r=this._maxEntries;if(n<=r)return i=SI(e.slice(t,o+1)),cI(i,this.toBBox),i;s||(s=Math.ceil(Math.log(n)/Math.log(r)),r=Math.ceil(n/Math.pow(r,s-1))),i=SI([]),i.leaf=!1,i.height=s;const a=Math.ceil(n/r),l=a*Math.ceil(Math.sqrt(r));CI(e,t,o,l,this.compareMinX);for(let n=t;n<=o;n+=l){const t=Math.min(n+l-1,o);CI(e,n,t,a,this.compareMinY);for(let o=n;o<=t;o+=a){const n=Math.min(o+a-1,t);i.children.push(this._build(e,o,n,s-1))}}return cI(i,this.toBBox),i}_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=pI(l),h=(n=e,i=l,(Math.max(i.maxX,n.maxX)-Math.min(i.minX,n.minX))*(Math.max(i.maxY,n.maxY)-Math.min(i.minY,n.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 n,i;return t}_insert(e,t,o){const s=o?e:this.toBBox(e),n=[],i=this._chooseSubtree(s,this.data,t,n);for(i.children.push(e),dI(i,s);t>=0&&n[t].children.length>this._maxEntries;)this._split(n,t),t--;this._adjustParentBBoxes(s,n,t)}_split(e,t){const o=e[t],s=o.children.length,n=this._minEntries;this._chooseSplitAxis(o,n,s);const i=this._chooseSplitIndex(o,n,s),r=SI(o.children.splice(i,o.children.length-i));r.height=o.height,r.leaf=o.leaf,cI(o,this.toBBox),cI(r,this.toBBox),t?e[t-1].children.push(r):this._splitRoot(o,r)}_splitRoot(e,t){this.data=SI([e,t]),this.data.height=e.height+1,this.data.leaf=!1,cI(this.data,this.toBBox)}_chooseSplitIndex(e,t,o){let s,n=1/0,i=1/0;for(let r=t;r<=o-t;r++){const t=hI(e,0,r,this.toBBox),a=hI(e,r,o,this.toBBox),l=fI(t,a),c=pI(t)+pI(a);l<n?(n=l,s=r,i=c<i?c:i):l===n&&c<i&&(i=c,s=r)}return s||o-t}_chooseSplitAxis(e,t,o){const s=e.leaf?this.compareMinX:uI,n=e.leaf?this.compareMinY:gI;this._allDistMargin(e,t,o,s)<this._allDistMargin(e,t,o,n)&&e.children.sort(s)}_allDistMargin(e,t,o,s){e.children.sort(s);const n=this.toBBox,i=hI(e,0,t,n),r=hI(e,o-t,o,n);let a=mI(i)+mI(r);for(let s=t;s<o-t;s++){const t=e.children[s];dI(i,e.leaf?n(t):t),a+=mI(i)}for(let s=o-t-1;s>=t;s--){const t=e.children[s];dI(r,e.leaf?n(t):t),a+=mI(r)}return a}_adjustParentBBoxes(e,t,o){for(let s=o;s>=0;s--)dI(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():cI(e[o],this.toBBox)}}function lI(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 cI(e,t){hI(e,0,e.children.length,t,e)}function hI(e,t,o,s,n){n||(n=SI(null)),n.minX=1/0,n.minY=1/0,n.maxX=-1/0,n.maxY=-1/0;for(let i=t;i<o;i++){const t=e.children[i];dI(n,e.leaf?s(t):t)}return n}function dI(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 uI(e,t){return e.minX-t.minX}function gI(e,t){return e.minY-t.minY}function pI(e){return(e.maxX-e.minX)*(e.maxY-e.minY)}function mI(e){return e.maxX-e.minX+(e.maxY-e.minY)}function fI(e,t){const o=Math.max(e.minX,t.minX),s=Math.max(e.minY,t.minY),n=Math.min(e.maxX,t.maxX),i=Math.min(e.maxY,t.maxY);return Math.max(0,n-o)*Math.max(0,i-s)}function vI(e,t){return e.minX<=t.minX&&e.minY<=t.minY&&t.maxX<=e.maxX&&t.maxY<=e.maxY}function bI(e,t){return t.minX<=e.maxX&&t.minY<=e.maxY&&t.maxX>=e.minX&&t.maxY>=e.minY}function SI(e){return{children:e,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function CI(e,t,o,s,n){const i=[t,o];for(;i.length;){if((o=i.pop())-(t=i.pop())<=s)continue;const r=t+Math.ceil((o-t)/s/2)*s;sI(e,r,t,o,n),i.push(t,r,r,o)}}class EI{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 wI,this.rTrees[e].load(t[e])}insert(e){const t=e.boundingBox.sheetId;this.rTrees[t]||(this.rTrees[t]=new wI),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,Fe)}}class wI extends aI{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 yI{encoder;dependencies=new Map;rTree;constructor(e,t=[]){this.encoder=e,this.rTree=new EI(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=new Be,o=Array.from(e).reverse();for(;o.length>0;){const e=o.pop();t.add(...this.encoder.encodeBoundingBox(e));const s=this.rTree.search(e).map((e=>e.data));for(const e of s)t.has(e)||o.push(this.encoder.decodeToBoundingBox(e))}return t.delete(...e.flatMap((e=>this.encoder.encodeBoundingBox(e)))),t}}class xI{resultsToArrayFormulas=new Map;arrayFormulasToResults=new Map;getFormulaPositionsSpreadingOn(e){return this.resultsToArrayFormulas.get(e)||II}getArrayResultPositionIds(e){return this.arrayFormulasToResults.get(e)||II}removeNode(e){this.resultsToArrayFormulas.delete(e),this.arrayFormulasToResults.delete(e)}addRelation({arrayFormulaPositionId:e,resultPositionId:t}){this.resultsToArrayFormulas.has(t)||this.resultsToArrayFormulas.set(t,new Set),this.resultsToArrayFormulas.get(t)?.add(e),this.arrayFormulasToResults.has(e)||this.arrayFormulasToResults.set(e,new Set),this.arrayFormulasToResults.get(e)?.add(t)}hasArrayFormulaResult(e){return this.resultsToArrayFormulas.has(e)}isArrayFormula(e){return this.arrayFormulasToResults.has(e)}}const II=[],RI=new class extends bo{constructor(e){super(e||Xt("Circular reference"),fo.CircularDependency)}},TI=Zi(RI.value,{locale:ho},RI.message);class AI{context;getters;compilationParams;encoder=new _I;evaluatedCells=new Map;formulaDependencies=_e(new yI(this.encoder));blockedArrayFormulas=new Set;spreadingRelations=new xI;constructor(e,t){this.context=e,this.getters=t,this.compilationParams=tI(this.context,this.getters,this.computeAndSave.bind(this))}getEvaluatedCell(e){return this.evaluatedCells.get(this.encoder.encode(e))||Zi("",{locale:this.getters.getLocale()})}getSpreadPositionsOf(e){const t=this.encoder.encode(e);return this.spreadingRelations.isArrayFormula(t)?Array.from(this.spreadingRelations.getArrayResultPositionIds(t)).map((e=>this.encoder.decode(e))):[]}getArrayFormulaSpreadingOn(e){const t=this.encoder.encode(e),o=this.getArrayFormulaSpreadingOnId(t);return void 0!==o?this.encoder.decode(o):void 0}getEvaluatedPositions(){return[...this.evaluatedCells.keys()].map((e=>this.encoder.decode(e)))}getArrayFormulaSpreadingOnId(e){if(!this.spreadingRelations.hasArrayFormulaResult(e))return;const t=this.spreadingRelations.getFormulaPositionsSpreadingOn(e);return Array.from(t).find((e=>!this.blockedArrayFormulas.has(e)))}updateDependencies(e){const t=this.encoder.encode(e);this.formulaDependencies().removeAllDependencies(t);const o=this.getDirectDependencies(t);this.formulaDependencies().addDependencies(t,o)}updateCompilationParameters(){this.compilationParams=tI(this.context,this.getters,this.computeAndSave.bind(this))}evaluateCells(e){const t=e.map((e=>this.encoder.encode(e))),o=new Be(t),s=this.getArrayFormulasImpactedByChangesOf(t);o.add(...this.getCellsDependingOn(t)),o.add(...s),o.add(...this.getCellsDependingOn(s)),this.evaluate(o)}getArrayFormulasImpactedByChangesOf(e){const t=new Be;for(const o of e){const e=this.getCell(o)?.content,s=this.getArrayFormulaSpreadingOnId(o);void 0!==s&&t.add(s),e||t.add(...this.getArrayFormulasBlockedByOrSpreadingOn(o))}return t}buildDependencyGraph(){this.blockedArrayFormulas=new Set,this.spreadingRelations=new xI,this.formulaDependencies=_e((()=>{const e=[...this.getAllCells()].flatMap((e=>this.getDirectDependencies(e).map((t=>({data:e,boundingBox:{zone:t.zone,sheetId:t.sheetId}})))));return new yI(this.encoder,e)}))}evaluateAllCells(){this.evaluatedCells=new Map,this.evaluate(this.getAllCells())}evaluateFormula(e,t){const o=Vx(t),s=o.dependencies.map((t=>this.getters.getRangeFromSheetXC(e,t)));this.updateCompilationParameters();const n=MI({...o,dependencies:s},this.compilationParams,e);return go(n)?jo(n,(e=>e.value)):null===n.value?0:n.value}getAllCells(){const e=new Be;for(const t of this.getters.getSheetIds()){const o=this.getters.getCells(t);for(const t in o)e.add(this.encoder.encode(this.getters.getCellPosition(t)))}return e}getArrayFormulasBlockedByOrSpreadingOn(e){if(!this.spreadingRelations.hasArrayFormulaResult(e))return[];const t=this.spreadingRelations.getFormulaPositionsSpreadingOn(e),o=new Be(t);return o.add(...this.getCellsDependingOn(t)),o}nextPositionsToUpdate=new Be;cellsBeingComputed=new Set;evaluate(e){this.cellsBeingComputed=new Set,this.nextPositionsToUpdate=e;let t=0;for(;this.nextPositionsToUpdate.size&&t++<30;){this.updateCompilationParameters();const e=Array.from(this.nextPositionsToUpdate);this.nextPositionsToUpdate.clear();for(let t=0;t<e.length;++t){const o=e[t];this.evaluatedCells.delete(o)}for(let t=0;t<e.length;++t){const o=e[t];this.setEvaluatedCell(o,this.computeCell(o))}}}setEvaluatedCell(e,t){this.evaluatedCells.set(e,t)}computeCell(e){const t=this.evaluatedCells.get(e);if(t)return t;this.blockedArrayFormulas.has(e)||this.invalidateSpreading(e);const o=this.encoder.decode(e),s=this.getters.getCell(o);if(void 0===s)return Zi("",{locale:this.getters.getLocale()});const n=s.id,i={format:s.format,locale:this.getters.getLocale()};try{return this.cellsBeingComputed.has(n)?TI:(this.cellsBeingComputed.add(n),s.isFormula?this.computeFormulaCell(o.sheetId,s):Wi(s.content,i))}catch(e){return Zi(e.value,i,e.message)}finally{this.cellsBeingComputed.delete(n)}}computeAndSave(e){const t=this.encoder.encode(e),o=this.computeCell(t);return this.evaluatedCells.has(t)||this.setEvaluatedCell(t,o),o}computeFormulaCell(e,t){const o=t.id,s=MI(t.compiledFormula,this.compilationParams,e,o);if(!go(s))return Zi(s.value,{format:t.format||s.format,locale:this.getters.getLocale()},s.message);const n=this.getters.getCellPosition(o);this.assertSheetHasEnoughSpaceToSpreadFormulaResult(n,s);const i=s.length,r=s[0].length;return OI(i,r,this.updateSpreadRelation(n)),OI(i,r,this.checkCollision(n)),OI(i,r,this.spreadValues(n,s)),Zi(s[0][0].value,{format:t.format||s[0][0]?.format,locale:this.getters.getLocale()},s[0][0].message)}assertSheetHasEnoughSpaceToSpreadFormulaResult({sheetId:e,col:t,row:o},s){const n=this.getters.getNumberCols(e),i=this.getters.getNumberRows(e),r=t+s.length<=n,a=o+s[0].length<=i;if(!r||!a){if(r)throw new bo(Xt("Result couldn't be automatically expanded. Please insert more rows."));if(a)throw new bo(Xt("Result couldn't be automatically expanded. Please insert more columns."));throw new bo(Xt("Result couldn't be automatically expanded. Please insert more columns and rows."))}}updateSpreadRelation({sheetId:e,col:t,row:o}){const s=this.encoder.encode({sheetId:e,col:t,row:o});return(n,i)=>{const r={sheetId:e,col:n+t,row:i+o},a=this.encoder.encode(r);this.spreadingRelations.addRelation({resultPositionId:a,arrayFormulaPositionId:s})}}checkCollision({sheetId:e,col:t,row:o}){const s=this.encoder.encode({sheetId:e,col:t,row:o});return(n,i)=>{const r={sheetId:e,col:n+t,row:i+o},a=this.getters.getCell(r);if(a?.content||this.getters.getEvaluatedCell(r).type!==Qt.empty)throw this.blockedArrayFormulas.add(s),new bo(Xt("Array result was not expanded because it would overwrite data in %s.",ut(r.col,r.row)));this.blockedArrayFormulas.delete(s)}}spreadValues({sheetId:e,col:t,row:o},s){return(n,i)=>{const r={sheetId:e,col:n+t,row:i+o},a=this.getters.getCell(r),l=a?.format,c=Zi(s[n][i].value,{format:l||s[n][i]?.format,locale:this.getters.getLocale()},s[n][i].message),h=this.encoder.encode(r);this.setEvaluatedCell(h,c),this.nextPositionsToUpdate.add(...this.getCellsDependingOn([h]))}}invalidateSpreading(e){if(this.spreadingRelations.isArrayFormula(e)){for(const t of this.spreadingRelations.getArrayResultPositionIds(e)){const e=this.getCell(t)?.content;e||(this.evaluatedCells.delete(t),this.nextPositionsToUpdate.add(...this.getCellsDependingOn([t])),this.nextPositionsToUpdate.add(...this.getArrayFormulasBlockedByOrSpreadingOn(t)))}this.spreadingRelations.removeNode(e)}}getDirectDependencies(e){const t=this.getCell(e);return t?.isFormula?t.compiledFormula.dependencies:[]}getCellsDependingOn(e){const t=[];for(const o of e)t.push(this.encoder.decodeToBoundingBox(o));return this.formulaDependencies().getCellsDependingOn(t)}getCell(e){return this.getters.getCell(this.encoder.decode(e))}}function OI(e,t,o){for(let s=0;s<e;++s)for(let e=0;e<t;++e)0===s&&0===e||o(s,e)}class _I{sheetMapping={};inverseSheetMapping=new Map;constructor(){try{o_spreadsheet.__DEBUG__=o_spreadsheet.__DEBUG__||{},o_spreadsheet.__DEBUG__.decodePosition=this.decode.bind(this),o_spreadsheet.__DEBUG__.encodePosition=this.encode.bind(this)}catch(e){}}encode({sheetId:e,col:t,row:o}){return this.encodeSheet(e)<<42n|BigInt(t)<<21n|BigInt(o)}encodeBoundingBox({sheetId:e,zone:t}){const o=[];return function(e,t){const{left:o,right:s,top:n,bottom:i}=e;for(let e=o;e<=s;e++)for(let o=n;o<=i;o++)t(e,o)}(t,((t,s)=>{o.push(this.encode({sheetId:e,col:t,row:s}))})),o}decode(e){const t=Number(2097151n&e),o=Number(e>>21n&2097151n);return{sheetId:this.decodeSheet(e>>42n),col:o,row:t}}decodeToBoundingBox(e){const{sheetId:t,col:o,row:s}=this.decode(e);return{sheetId:t,zone:{left:o,top:s,right:o,bottom:s}}}encodeSheet(e){const t=this.sheetMapping[e];if(void 0===t){const t=BigInt(Object.keys(this.sheetMapping).length);return this.sheetMapping[e]=t,this.inverseSheetMapping.set(t,e),t}return t}decodeSheet(e){const t=this.inverseSheetMapping.get(e);if(void 0===t)throw new Error("Sheet id not found");return t}}function MI(e,t,o,s){return t[2].__originCellXC=_e((()=>{if(!s)return;const e=t[2].getters.getCellPosition(s);return ut(e.col,e.row)})),t[2].__originSheetId=o,e.execute(e.dependencies,...t)}const NI={isValid:!0};class FI{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}=Qi.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}}}}class DI{subscriptions={};on(e,t,o){if(!o)throw new Error("Missing callback");this.subscriptions[e]||(this.subscriptions[e]=[]),this.subscriptions[e].push({owner:t,callback:o})}trigger(e,t){const o=this.subscriptions[e]||[];for(let e=0,s=o.length;e<s;e++){const s=o[e];s.callback.call(s.owner,t)}}off(e,t){const o=this.subscriptions[e];o&&(this.subscriptions[e]=o.filter((e=>e.owner!==t)))}clear(){this.subscriptions={}}}function LI(e,t){return{...e,definition:Tl(e.definition,t)}}function PI(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(let 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 kI(e,t){if(e.sheetId!==t.sheetId||e.dimension!==t.dimension)return e;let o;if("REMOVE_COLUMNS_ROWS"===t.type)o=Un(t.elements,[e.base])[0];else if("ADD_COLUMNS_ROWS"===t.type){o=Vn(Ne(t.position,t.base),t.quantity,[e.base])[0]}return void 0!==o?{...e,base:o}:void 0}function VI(e,t){if(e.sheetId!==t.sheetId||e.dimension!==t.dimension)return e;const o=ue(e.start,e.end+1);let s=[];if("REMOVE_COLUMNS_ROWS"===t.type)s=Un(t.elements,o);else if("ADD_COLUMNS_ROWS"===t.type){s=Vn(Ne(t.position,t.base),t.quantity,o)}return 0!==s.length?{...e,start:Math.min(...s),end:Math.max(...s)}:void 0}uS.addTransformation("ADD_COLUMNS_ROWS",["ADD_COLUMNS_ROWS"],kI),uS.addTransformation("REMOVE_COLUMNS_ROWS",["ADD_COLUMNS_ROWS"],kI),uS.addTransformation("ADD_COLUMNS_ROWS",["CREATE_CHART","UPDATE_CHART"],LI),uS.addTransformation("REMOVE_COLUMNS_ROWS",["CREATE_CHART","UPDATE_CHART"],LI),uS.addTransformation("DELETE_SHEET",["MOVE_RANGES"],(function(e,t){const o=t.sheetId;if(e.targetSheetId===o||e.sheetId===o)return;return e})),uS.addTransformation("DELETE_FIGURE",["UPDATE_FIGURE","UPDATE_CHART"],(function(e,t){if(e.id===t.id)return;return e})),uS.addTransformation("CREATE_SHEET",["CREATE_SHEET"],(function(e,t){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})),uS.addTransformation("ADD_MERGE",["ADD_MERGE","REMOVE_MERGE","CREATE_FILTER_TABLE"],(function(e,t){if(e.sheetId!==t.sheetId)return e;const o=[];for(const s of e.target)for(const e of t.target)vn(s,e)||o.push({...s});if(o.length)return{...e,target:o};return})),uS.addTransformation("ADD_COLUMNS_ROWS",["FREEZE_COLUMNS","FREEZE_ROWS"],PI),uS.addTransformation("REMOVE_COLUMNS_ROWS",["FREEZE_COLUMNS","FREEZE_ROWS"],PI),uS.addTransformation("CREATE_FILTER_TABLE",["CREATE_FILTER_TABLE","ADD_MERGE"],(function(e,t){if(e.sheetId!==t.sheetId)return e;for(const o of e.target)for(const e of t.target)if(vn(e,o))return;return e})),uS.addTransformation("ADD_COLUMNS_ROWS",["GROUP_HEADERS","UNGROUP_HEADERS","FOLD_HEADER_GROUP","UNFOLD_HEADER_GROUP"],VI),uS.addTransformation("REMOVE_COLUMNS_ROWS",["GROUP_HEADERS","UNGROUP_HEADERS","FOLD_HEADER_GROUP","UNFOLD_HEADER_GROUP"],VI);const UI=[{match:function(e){return"sheetId"in e},fn:zI},{match:function(e){return"target"in e&&"sheetId"in e},fn:function(e,t){const o=zI(e,t);if("SKIP_TRANSFORMATION"!==o)return"IGNORE_COMMAND"===o?"IGNORE_COMMAND":e;const s=[];for(const o of e.target){const e=ti(o,t);e&&s.push(e)}if(!s.length)return"IGNORE_COMMAND";return{...e,target:s}}},{match:function(e){return"zone"in e},fn:function(e,t){const o=zI(e,t);if("SKIP_TRANSFORMATION"!==o)return"IGNORE_COMMAND"===o?"IGNORE_COMMAND":e;const s=ti(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=zI(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(let 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)&&bn(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=zI(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=Un(t.elements,e.elements);else if("ADD_COLUMNS_ROWS"===t.type){s=Vn(Ne(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=>oi(e,t))).filter(Ie);if(!o.length)return"IGNORE_COMMAND";return{...e,ranges:o}}}];function BI(e,t){const o=uS.getTransformation(e.type,t.type);return o?o(e,t):function(e,t){for(const{match:o,fn:s}of UI)if(o(e)){const o=s(e,t);if("SKIP_TRANSFORMATION"===o)continue;if("IGNORE_COMMAND"===o)return;e=o}return e}(e,t)}function HI(e,t){let o=[...e];for(const e of t)o=o.map((t=>BI(t,e))).filter(Ie);return o}function zI(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 GI{rootCommand;timestamp;id;clientId;_commands=[];_changes=[];constructor(e,t,o,s,n,i){this.rootCommand=s,this.timestamp=i,this.id=e,this.clientId=t,this._commands=[...o],this._changes=n?[...n]:[]}setChanges(e){this._changes=e}get commands(){return this._commands}get changes(){return this._changes}}class $I extends Error{}class WI extends DI{revisions;transportService;serverRevisionId;clients={};clientId="local";debouncedMove;pendingMessages=[];waitingAck=!1;waitingUndoRedoAck=!1;isReplayingInitialRevisions=!1;processedRevisions=new Set;uuidGenerator=new Kn;lastLocalOperation;constructor(e,t,o=W){super(),this.revisions=e,this.transportService=t,this.serverRevisionId=o,this.debouncedMove=function(e,t,o){let s;return function(){const n=this,i=arguments,r=o&&!s;clearTimeout(s),s=setTimeout((function(){s=null,o||e.apply(n,i)}),t),r&&e.apply(n,i)}}(this._move.bind(this),200)}canApplyOptimisticUpdate(){return!this.waitingUndoRedoAck}save(e,t,o){if(!t.length||!o.length||!this.canApplyOptimisticUpdate())return;const s=new GI(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))}loadInitialMessages(e){this.isReplayingInitialRevisions=!0;for(const t of e)this.onMessageReceived(t);this.isReplayingInitialRevisions=!1}leave(){delete this.clients[this.clientId],this.transportService.leave(this.clientId),this.transportService.sendMessage({type:"CLIENT_LEFT",clientId:this.clientId,version:1})}snapshot(e){const t=this.uuidGenerator.uuidv4();this.transportService.sendMessage({type:"SNAPSHOT",nextRevisionId:t,serverRevisionId:this.serverRevisionId,data:{...e,revisionId:t},version:1})}getClient(){const e=this.clients[this.clientId];if(!e)throw new $I("The client left the session");return e}getConnectedClients(){return new Set(Object.values(this.clients).filter(Ie))}getRevisionId(){return this.serverRevisionId}isFullySynchronized(){return 0===this.pendingMessages.length}getLastLocalNonEmptyRevision(){return this.lastLocalOperation}_move(e){if(!this.clients[this.clientId])return;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.getClient();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,n=new GI(e.nextRevisionId,t,o,void 0,void 0,s);if(n.clientId!==this.clientId){this.revisions.insert(n.id,n,e.serverRevisionId);const t=this.pendingMessages.filter((e=>"REMOTE_REVISION"===e.type)).map((e=>e.commands)).flat();this.trigger("remote-revision-received",{commands:HI(o,t)})}break;case"SNAPSHOT_CREATED":{const t=new GI(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.waitingAck=!0,this.sendPendingMessage())}sendPendingMessage(){let e=this.pendingMessages[0];if(e){if("REMOTE_REVISION"===e.type){const t=this.revisions.get(e.nextRevisionId);if(0===t.commands.length){this.revisions.drop(t.id);const e=this.pendingMessages.filter((e=>"REMOTE_REVISION"===e.type)).map((e=>e.nextRevisionId));return this.trigger("pending-revisions-dropped",{revisionIds:e}),this.waitingAck=!1,this.waitingUndoRedoAck=!1,void(this.pendingMessages=[])}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.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"REVISION_UNDONE":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.sendPendingMessage()}}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":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 qI=["#ff851b","#0074d9","#7fdbff","#b10dc9","#39cccc","#f012be","#3d9970","#111111","#ff4136","#aaaaaa","#85144b","#001f3f"];class ZI{getters;dispatch;selection;operation;sheetId;constructor(e,t,o,s){this.getters=t,this.dispatch=o,this.selection=s,this.operation=e,this.sheetId=t.getActiveSheetId()}isCutAllowed(e){return"Success"}isPasteAllowed(e,t){return"Success"}addMissingDimensions(e,t,o,s){const n=this.getters.getActiveSheetId(),i=t+s-this.getters.getNumberRows(n);i>0&&this.dispatch("ADD_COLUMNS_ROWS",{dimension:"ROW",base:this.getters.getNumberRows(n)-1,sheetId:n,quantity:i,position:"after"});const r=e+o-this.getters.getNumberCols(n);r>0&&this.dispatch("ADD_COLUMNS_ROWS",{dimension:"COL",base:this.getters.getNumberCols(n)-1,sheetId:n,quantity:r,position:"after"})}isColRowDirtyingClipboard(e,t){return!1}drawClipboard(e){}}class YI extends ZI{cells;copiedTables;zones;uuidGenerator=new Kn;constructor(e,t,o,s,n){if(super(t,o,s,n),!e.length)return this.cells=[[]],this.zones=[],void(this.copiedTables=[]);const i=new Set(e.map((e=>e.left))),r=new Set(e.map((e=>e.right))),a=new Set(e.map((e=>e.top))),l=new Set(e.map((e=>e.bottom))),c=1===a.size&&1===l.size||1===i.size&&1===r.size?function(e){return e.reduce(((e,t)=>{const o=e.length;for(let s=0;s<o;s++)if(vn(e[s],t))return e[s]=pn(e[s],t),e;return e[o]=t,e}),[])}(e):[e[e.length-1]],h=c.map((e=>xn(e))).flat(),d=[...new Set(h.map((e=>e.col)))].sort(((e,t)=>e-t)),u=[...new Set(h.map((e=>e.row)))].sort(((e,t)=>e-t)),g=[],p=o.getActiveSheetId();for(let e of u){let t=[];for(let s of d){const n={col:s,row:e,sheetId:p},i=o.getArrayFormulaSpreadingOn(n);let r=o.getCell(n);const a=o.getEvaluatedCell(n);if(i){const e=u.includes(i.row)&&d.includes(i.col)?"":Ss(a.value,{locale:o.getLocale()});r={id:r?.id||"",style:r?.style,format:a.format,content:e,isFormula:!1}}t.push({cell:r,border:o.getCellBorder(n)||void 0,evaluatedCell:a,position:n})}g.push(t)}const m=[];for(const t of e)for(const e of this.getters.getFilterTablesInZone(p,t)){const t=[];for(const o of ue(e.zone.left,e.zone.right+1))t.push(this.getters.getFilterValues({sheetId:p,col:o,row:e.zone.top}));m.push({filtersValues:t,zone:e.zone})}this.cells=g,this.zones=c,this.copiedTables=m}isCutAllowed(e){return 1!==e.length?"WrongCutSelection":"Success"}isPasteAllowed(e,t){const o=this.getters.getActiveSheetId();if("CUT"===this.operation&&void 0!==t?.pasteOption)return"WrongPasteOption";if(e.length>1&&(this.cells.length>1||this.cells[0].length>1))return"WrongPasteSelection";const s=this.cells.length,n=this.cells[0].length;for(let t of this.getPasteZones(e))if(this.getters.doesIntersectMerge(o,t)&&(e.length>1||!this.getters.isSingleCellOrMerge(o,e[0])||s*n!=1))return"WillRemoveExistingMerge";const{xSplit:i,ySplit:r}=this.getters.getPaneDivisions(o);for(const t of this.getPasteZones(e))if(t.left<i&&t.right>=i||t.top<r&&t.bottom>=r)return"FrozenPaneOverlap";return"Success"}paste(e,t){"COPY"===this.operation?this.pasteFromCopy(e,t):this.pasteFromCut(e,t);const o=this.cells.length,s=this.cells[0].length,n="CUT"===this.operation;t?.selectTarget&&this.selectPastedZone(s,o,n,e)}pasteFromCopy(e,t){if(1===e.length){const o=this.cells.length,s=this.cells[0].length,n=this.pastedZones(e,s,o);for(const e of n)this.pasteZone(e.left,e.top,t)}else for(const o of e)for(let e=o.left;e<=o.right;e++)for(let s=o.top;s<=o.bottom;s++)this.pasteZone(e,s,t);void 0===t?.pasteOption&&this.pasteCopiedTables(e)}pasteFromCut(e,t){this.clearClippedZones();const o=e[0];this.pasteZone(o.left,o.top,t),this.dispatch("MOVE_RANGES",{target:this.zones,sheetId:this.sheetId,targetSheetId:this.getters.getActiveSheetId(),col:o.left,row:o.top});for(const e of this.copiedTables)this.dispatch("REMOVE_FILTER_TABLE",{sheetId:this.sheetId,target:[e.zone]});this.pasteCopiedTables(e)}pastedZones(e,t,o){const s=e[0],n=Math.max(1,Math.floor((s.right+1-s.left)/t)),i=Math.max(1,Math.floor((s.bottom+1-s.top)/o)),r=[];for(let e=0;e<n;e++)for(let n=0;n<i;n++){const i=s.top+n*o,a=s.left+e*t;r.push({left:a,top:i,bottom:i+o-1,right:a+t-1})}return r}getPasteZones(e){const t=this.cells;if(!t.length||!t[0].length)return e;const o=[],s=t.length,n=t[0].length,i=e[e.length-1],r=i.left,a=i.top,l=Math.max(1,Math.floor((i.right+1-r)/n)),c=Math.max(1,Math.floor((i.bottom+1-a)/s));for(let e=1;e<=l;e++)for(let t=1;t<=c;t++)o.push({left:r,top:a,right:r-1+e*n,bottom:a-1+t*s});return o}selectPastedZone(e,t,o,s){const n=s[0],i=n.left,r=n.top;if(t>1||e>1||o){const n=this.pastedZones(s,e,t),a=o?n[0]:pn(...n);this.selection.getBackToDefault(),this.selection.selectZone({cell:{col:i,row:r},zone:a},{scrollIntoView:!1})}}clearClippedZones(){for(const e of this.cells)for(const t of e)t?.cell&&this.dispatch("CLEAR_CELL",t.position);this.dispatch("CLEAR_FORMATTING",{sheetId:this.sheetId,target:this.zones})}pasteZone(e,t,o){const s=this.cells.length,n=this.cells[0].length,i="asValue"!==o?.pasteOption&&o?.shouldPasteCF,r=!o?.pasteOption,a=this.getters.getActiveSheetId();this.addMissingDimensions(n,s,e,t);for(let l=0;l<s;l++){const s=this.cells[l];for(let c=0;c<n;c++){const n=s[c];if(!n)continue;const h={col:e+c,row:t+l,sheetId:a};"CUT"!==this.operation&&this.pasteMergeIfExist(n.position,h),this.pasteCell(n,h,this.operation,o),i&&this.pasteCf(n.position,h),r&&this.pasteDataValidation(n.position,h)}}}pasteCell(e,t,o,s){const{sheetId:n,col:i,row:r}=t,a=this.getters.getEvaluatedCell(t),l=e.cell?.format??e.evaluatedCell.format;if("asValue"===s?.pasteOption){const o=this.getters.getLocale(),s=Ss(e.evaluatedCell.value,{locale:o});return void this.dispatch("UPDATE_CELL",{...t,content:s,format:l})}const c=this.getters.getCellBorder(t),h=e.border,d={top:c?.top||h?.top,bottom:c?.bottom||h?.bottom,left:c?.left||h?.left,right:c?.right||h?.right};if(this.dispatch("SET_BORDER",{sheetId:n,col:i,row:r,border:d}),"onlyFormat"===s?.pasteOption)return void this.dispatch("UPDATE_CELL",{...t,style:e.cell?.style??null,format:l??a.format});const u=e.cell&&e.cell.isFormula&&"COPY"===o?this.getters.getTranslatedCellFormula(n,i-e.position.col,r-e.position.row,e.cell.compiledFormula):e.cell?.content;""!==u||e.cell?.format||e.cell?.style?this.dispatch("UPDATE_CELL",{...t,content:u,style:e.cell?.style||null,format:e.cell?.format}):a&&this.dispatch("CLEAR_CELL",t)}pasteMergeIfExist(e,t){let{sheetId:o,col:s,row:n}=e;const{col:i,row:r}=this.getters.getMainCellPosition(e);if(i===s&&r===n){const i=this.getters.getMerge(e);if(!i)return;({sheetId:o,col:s,row:n}=t),this.dispatch("ADD_MERGE",{sheetId:o,force:!0,target:[{left:s,top:n,right:s+i.right-i.left,bottom:n+i.bottom-i.top}]})}}pasteCopiedTables(e){const t=this.getters.getActiveSheetId(),o=e[0],s=this.zones[0],n=[o.left-s.left,o.top-s.top];for(const e of this.copiedTables){const o=In(e.zone,"both","MOVE",n);this.dispatch("CREATE_FILTER_TABLE",{sheetId:t,target:[o]});for(const s of ue(0,e.filtersValues.length))this.dispatch("UPDATE_FILTER",{sheetId:t,col:o.left+s,row:o.top,hiddenValues:e.filtersValues[s]})}}getClipboardContent(){return{[Jt.PlainText]:this.getPlainTextContent(),[Jt.Html]:this.getHTMLContent()}}getPlainTextContent(){return this.cells.map((e=>e.map((e=>this.getters.shouldShowFormulas()&&e?.cell?.isFormula?e.cell?.content||"":e?.evaluatedCell?.formattedValue||"")).join("\t"))).join("\n")||"\t"}getHTMLContent(){if(1===this.cells.length&&1===this.cells[0].length)return this.cells[0][0]?this.getters.getCellText(this.cells[0][0].position):"";let e='<table border="1" style="border-collapse:collapse">';for(const t of this.cells){e+="<tr>";for(const o of t){if(!o)continue;e+=`<td style="${hr(cr(this.getters.getCellComputedStyle(o.position)))}">`+xy(this.getters.getCellText(o.position))+"</td>"}e+="</tr>"}return e+="</table>",e}isColRowDirtyingClipboard(e,t){if(!this.zones)return!1;for(let o of this.zones){if("COL"===t&&e<=o.right)return!0;if("ROW"===t&&e<=o.bottom)return!0}return!1}drawClipboard(e){const{ctx:t,thinLineWidth:o}=e;if(this.sheetId===this.getters.getActiveSheetId()&&this.zones&&this.zones.length){t.setLineDash([8,5]),t.strokeStyle=c,t.lineWidth=3.3*o;for(const e of this.zones){const{x:o,y:s,width:n,height:i}=this.getters.getVisibleRect(e);n>0&&i>0&&t.strokeRect(o,s,n,i)}}}pasteCf(e,t){const o=ut(t.col,t.row);for(let s of this.getters.getConditionalFormats(e.sheetId))for(let n of s.ranges)if(bn(e.col,e.row,this.getters.getRangeFromSheetXC(e.sheetId,n).zone)){const n=s,i=[];if("CUT"===this.operation&&i.push(ut(e.col,e.row)),e.sheetId===t.sheetId)this.adaptCFRules(e.sheetId,n,[o],i);else{this.adaptCFRules(e.sheetId,n,[],i);const s=this.getCFToCopyTo(t.sheetId,n);this.adaptCFRules(t.sheetId,s,[o],[])}}}adaptCFRules(e,t,o,s){const n=this.getters.getAdaptedCfRanges(e,t,o,s);n&&(0!==n.length?this.dispatch("ADD_CONDITIONAL_FORMAT",{cf:{id:t.id,rule:t.rule,stopIfTrue:t.stopIfTrue},ranges:n.map((t=>this.getters.getRangeDataFromXc(e,t))),sheetId:e}):this.dispatch("REMOVE_CONDITIONAL_FORMAT",{id:t.id,sheetId:e}))}getCFToCopyTo(e,t){const o=this.getters.getConditionalFormats(e).find((e=>e.stopIfTrue===t.stopIfTrue&&Fe(e.rule,t.rule)));return o||{...t,id:this.uuidGenerator.uuidv4(),ranges:[]}}pasteDataValidation(e,t){const o=this.getters.getValidationRuleForCell(e);if(!o)return;const s=ut(t.col,t.row);for(const n of o.ranges)if(bn(e.col,e.row,n.zone)){const n=[];if("CUT"===this.operation&&n.push(ut(e.col,e.row)),e.sheetId===t.sheetId)this.adaptDataValidationRule(e.sheetId,o,[s],n);else{this.adaptDataValidationRule(e.sheetId,o,[],n);let i=this.getDataValidationRuleToCopyTo(t.sheetId,o);this.adaptDataValidationRule(t.sheetId,i,[s],[])}}}getDataValidationRuleToCopyTo(e,t){const o=this.getters.getDataValidationRules(e).find((e=>Fe(t.criterion,e.criterion)&&t.isBlocking===e.isBlocking));return o||{...t,id:this.uuidGenerator.uuidv4(),ranges:[]}}adaptDataValidationRule(e,t,o,s){const n=t.ranges.map((t=>this.getters.getRangeString(t,e))),i=Cn([...n,...o],s);0!==i.length?this.dispatch("ADD_DATA_VALIDATION_RULE",{rule:t,ranges:i.map((t=>this.getters.getRangeDataFromXc(e,t))),sheetId:e}):this.dispatch("REMOVE_DATA_VALIDATION_RULE",{sheetId:e,id:t.id})}}const jI="#8B008B";var XI;!function(e){e[e.previous=-1]="previous",e[e.current=0]="current",e[e.next=1]="next"}(XI||(XI={}));class KI extends Jx{inputHasSingleRange;static layers=[1];static getters=[];ranges=[];focusedRangeIndex=null;inputSheetId;constructor(e,t,o){if(o&&t.length>1)throw new Error("Input with a single range cannot be instantiated with several range references.");super(e),this.inputHasSingleRange=o,this.insertNewRange(0,t),this.inputSheetId=this.getters.getActiveSheetId(),0===this.ranges.length&&(this.insertNewRange(this.ranges.length,[""]),this.focusLast())}allowDispatch(e){switch(e.type){case"ADD_RANGE":case"ADD_EMPTY_RANGE":if(this.inputHasSingleRange&&1===this.ranges.length)return"MaximumRangesReached";break;case"REMOVE_RANGE":if(1===this.ranges.length)return"MinimumRangesReached";break;case"CHANGE_RANGE":if(this.inputHasSingleRange&&e.value.split(",").length>1)return"MaximumRangesReached"}return"Success"}handleEvent(e){if(null===this.focusedRangeIndex)return;const t=this.inputSheetId,o=this.getters.getActiveSheetId(),s=e.options.unbounded?this.getters.getUnboundedZone(o,e.anchor.zone):e.anchor.zone,n=this.getters.getRangeFromZone(o,s);if("newAnchor"===e.mode&&!this.inputHasSingleRange&&""!==this.ranges[this.focusedRangeIndex].xc.trim()){const e=this.getters.getSelectionRangeString(n,t);this.insertNewRange(this.ranges.length,[e]),this.focusLast()}else{let e=n.parts;const o=this.ranges[this.focusedRangeIndex].xc.trim();o&&(e=this.getters.getRangeFromSheetXC(t,o).parts);const s=n.clone({parts:e}),i=this.getters.getSelectionRangeString(s,t);this.setRange(this.focusedRangeIndex,[i])}}handle(e){switch(e.type){case"UNFOCUS_SELECTION_INPUT":this.unfocus();break;case"FOCUS_RANGE":this.focus(this.getIndex(e.rangeId));break;case"CHANGE_RANGE":{const t=this.getIndex(e.rangeId);if(null!==t&&this.focusedRangeIndex!==t&&this.focus(t),null!==t){const o=e.value.replace(/^,+/,"").split(",").map((e=>e.trim()));this.setRange(t,o)}break}case"ADD_EMPTY_RANGE":this.insertNewRange(this.ranges.length,[""]),this.focusLast();break;case"ADD_RANGE":this.insertNewRange(this.ranges.length,[e.value]),this.focusLast();break;case"REMOVE_RANGE":const t=this.getIndex(e.rangeId);null!==t&&this.removeRange(t);break;case"ACTIVATE_SHEET":if(e.sheetIdFrom!==e.sheetIdTo){const{col:t,row:o}=this.getters.getNextVisibleCellPosition({sheetId:e.sheetIdTo,col:0,row:0}),s=this.getters.expandZone(e.sheetIdTo,An({col:t,row:o}));this.selection.resetAnchor(this,{cell:{col:t,row:o},zone:s})}break;case"START_CHANGE_HIGHLIGHT":const o=this.getters.getActiveSheetId(),s=this.getters.expandZone(o,e.zone),n=this.ranges.findIndex((e=>{const{xc:t,sheetName:n}=on(e.xc),i=n||this.getters.getSheetName(this.inputSheetId);if(this.getters.getSheetName(o)!==i)return!1;const r=this.getters.getRangeFromSheetXC(o,t);return fn(this.getters.expandZone(o,r.zone),s)}));if(-1!==n){this.focus(n);const{left:e,top:t}=s;this.selection.resetAnchor(this,{cell:{col:e,row:t},zone:s})}}}getSelectionInputValue(){return this.cleanInputs(this.ranges.map((e=>e.xc?e.xc:"")))}getSelectionInputHighlights(){return this.ranges.map((e=>this.inputToHighlights(e))).flat()}focus(e){this.focusedRangeIndex=e}focusLast(){this.focus(this.ranges.length-1)}unfocus(){this.focusedRangeIndex=null}setContent(e,t){this.ranges[e]={...this.ranges[e],xc:t}}insertNewRange(e,t){const o=Math.max(0,...this.ranges.map((e=>Number(e.id))));this.ranges.splice(e,0,...t.map(((e,t)=>({xc:e,id:o+t+1,color:Ze[(o+t)%Ze.length]}))))}setRange(e,t){const[,...o]=t;this.setContent(e,t[0]),this.insertNewRange(e+1,o),o.length&&this.focus(e+o.length)}removeRange(e){this.ranges.splice(e,1),null!==this.focusedRangeIndex&&this.focusLast()}inputToHighlights({xc:e,color:t}){const o=this.cleanInputs([e]).filter((e=>this.getters.isRangeValid(e))).filter((e=>this.shouldBeHighlighted(this.inputSheetId,e)));return o.map((e=>{const{sheetName:o}=on(e);return{zone:this.getters.getRangeFromSheetXC(this.inputSheetId,e).zone,sheetId:o&&this.getters.getSheetIdByName(o)||this.inputSheetId,color:t}}))}cleanInputs(e){return e.map((e=>e.split(","))).flat().map((e=>e.trim())).filter((e=>""!==e))}shouldBeHighlighted(e,t){const{sheetName:o}=on(t),s=this.getters.getSheetIdByName(o),n=this.getters.getActiveSheet().id;return this.getters.isRangeValid(t)&&(s===n||void 0===s&&n===e)}getIndex(e){const t=this.ranges.findIndex((t=>t.id===e));return t>=0?t:null}}const QI=[JI,function(e,t){return"target"in t&&Array.isArray(t.target)?{...le(t),target:e.getSelectedZones()}:t},function(e,t){if(!("row"in t)||!("col"in t))return t;const{col:o,row:s}=e.getActivePosition();return{...le(t),col:o,row:s}}];function JI(e,t){return"sheetId"in t?{...le(t),sheetId:e.getActiveSheetId()}:t}function eR(e,t){return"zone"in t?{...le(t),zone:e.getSelectedZone()}:t}const tR=new Kn;function oR(e,t){const o=e.getSelectedZone();return{...JI(e,t),elements:"COL"===t.dimension?ue(o.left,o.right+1):ue(o.top,o.bottom+1)}}function sR(e,t){const o=e.getSelectedZone();return{...le(t),zone:o}}function nR(e,t){const o=le(t),s=e.getSelectedZone(),{top:n,bottom:i,left:r,right:a}=s;return"cols"in o?o.cols=ue(r,a+1):"rows"in o&&(o.rows=ue(n,i+1)),o}function iR(e,t){const o=e.getSelectedZone();return{...JI(e,t),start:"COL"===t.dimension?o.left:o.top,end:"COL"===t.dimension?o.right:o.bottom}}const rR=new Pi;rR.add("UPDATE_CELL",lR),rR.add("CLEAR_CELL",lR),rR.add("DELETE_CONTENT",lR),rR.add("ADD_MERGE",lR),rR.add("REMOVE_MERGE",lR),rR.add("SET_FORMATTING",lR),rR.add("CLEAR_FORMATTING",lR),rR.add("SET_BORDER",lR),rR.add("CREATE_FILTER_TABLE",lR),rR.add("REMOVE_FILTER_TABLE",lR),rR.add("HIDE_SHEET",lR),rR.add("ADD_COLUMNS_ROWS",(function(e,t){const o=e.getActivePosition();return{...JI(e,t),base:"COL"===t.dimension?o.col:o.row}})),rR.add("REMOVE_COLUMNS_ROWS",oR),rR.add("HIDE_COLUMNS_ROWS",oR),rR.add("RESIZE_COLUMNS_ROWS",oR),rR.add("CREATE_SHEET",(function(e,t){const o=le(t);o.sheetId=tR.uuidv4();const s=t.name||e.getSheet(e.getActiveSheetId()).name,n=s.match(/(.+?)\d*$/)?.[1]||s;return o.name=e.getNextSheetName(n),o})),rR.add("CREATE_FIGURE",(function(e,t){const o=JI(e,t);return o.figure.id=tR.uuidv4(),o})),rR.add("CREATE_CHART",(function(e,t){return{...JI(e,t),id:tR.uuidv4()}})),rR.add("CREATE_IMAGE",(function(e,t){return{...JI(e,t),figureId:tR.uuidv4()}})),rR.add("GROUP_HEADERS",iR),rR.add("UNGROUP_HEADERS",iR),rR.add("UNGROUP_HEADERS",iR),rR.add("UNFOLD_HEADER_GROUPS_IN_ZONE",eR),rR.add("FOLD_HEADER_GROUPS_IN_ZONE",eR);const aR=new Pi;function lR(e,t){let o=le(t);for(const t of QI)o=t(e,o);return o}function cR(e,t){if(!t)return;if(!rR.contains(t.type))return;return rR.get(t.type)(e,t)}function hR(e,t){if(e.rootCommand&&"object"==typeof e.rootCommand)return io(e.rootCommand)?cR(t,e.rootCommand):function(e,t,o){if(!aR.contains(t.type))return;return aR.get(t.type)(e,t,o)}(t,e.rootCommand,e.commands)}aR.add("STOP_EDITION",(function(e,t,o){return o.map((t=>cR(e,t))).filter(Ie)})),aR.add("PASTE",(function(e,t){return{type:"REPEAT_PASTE",pasteOption:le(t.pasteOption),target:e.getSelectedZones()}})),aR.add("INSERT_CELL",sR),aR.add("DELETE_CELL",sR),aR.add("AUTORESIZE_COLUMNS",nR),aR.add("AUTORESIZE_ROWS",nR),aR.add("SORT_CELLS",(function(e,t){const o=e.getSelectedZone();return{...JI(e,t),col:o.left,row:o.top,zone:o}})),aR.add("SUM_SELECTION",lR),aR.add("SET_DECIMAL",lR);class dR{operation;getters;dispatch;sheetId;copiedFigure;copiedFigureContent;constructor(e,t,o){this.operation=e,this.getters=t,this.dispatch=o,this.sheetId=t.getActiveSheetId();const s=t.getSelectedFigureId();if(!s)throw new Error("No figure selected");const n=t.getFigure(this.sheetId,s);if(!n)throw new Error(`No figure for the given id: ${s}`);switch(this.copiedFigure={...n},n.tag){case"chart":this.copiedFigureContent=new uR(o,t,this.sheetId,s);break;case"image":this.copiedFigureContent=new gR(o,t,this.sheetId,s);break;default:throw new Error(`Unknow tag '${n.tag}' for the given figure id: ${s}`)}}isCutAllowed(e){return"Success"}isPasteAllowed(e,t){return 0===e.length?"EmptyTarget":void 0!==t?.pasteOption?"WrongFigurePasteOption":"Success"}paste(e){const t=this.getters.getActiveSheetId(),{width:o,height:s}=this.copiedFigure,n=this.getters.getNumberCols(t),i=this.getters.getNumberRows(t),r=this.getters.getColDimensions(t,e[0].left).start,a=this.getters.getRowDimensions(t,e[0].top).start,l=this.getters.getColDimensions(t,n-1).end,c=this.getters.getRowDimensions(t,i-1).end,h={x:l<o?0:Math.min(r,l-o),y:c<s?0:Math.min(a,c-s)},d=(new Kn).uuidv4();this.copiedFigureContent.paste(t,d,h,{height:s,width:o}),"CUT"===this.operation&&this.dispatch("DELETE_FIGURE",{sheetId:this.copiedFigureContent.sheetId,id:this.copiedFigure.id}),this.dispatch("SELECT_FIGURE",{id:d})}getClipboardContent(){return{[Jt.PlainText]:"\t"}}isColRowDirtyingClipboard(e,t){return!1}drawClipboard(e){}}class uR{dispatch;sheetId;copiedChart;constructor(e,t,o,s){this.dispatch=e,this.sheetId=o;const n=t.getChart(s);if(!n)throw new Error(`No chart for the given id: ${s}`);this.copiedChart=n.copyInSheetId(o)}paste(e,t,o,s){const n=this.copiedChart.copyInSheetId(e);this.dispatch("CREATE_CHART",{id:t,sheetId:e,position:o,size:s,definition:n.getDefinition()})}}class gR{dispatch;sheetId;copiedImage;constructor(e,t,o,s){this.dispatch=e,this.sheetId=o;const n=t.getImage(s);this.copiedImage=le(n)}paste(e,t,o,s){const n=le(this.copiedImage);this.dispatch("CREATE_IMAGE",{figureId:t,sheetId:e,position:o,size:s,definition:n})}}function pR(e,t){return e.startsWith("=")?function(e,t){return function(e,t,o){if(t.formulaArgSeparator===o.formulaArgSeparator&&t.decimalSeparator===o.decimalSeparator)return e;const s=Br(e,t);let n="";for(const e of s)"NUMBER"===e.type?n+=e.value.replace(t.decimalSeparator,o.decimalSeparator):"ARG_SEPARATOR"===e.type?n+=o.formulaArgSeparator:n+=e.value;return n}(e,t,ho)}(e,t):ra(e,t)}class mR extends ZI{values;constructor(e,t,o,s){super("COPY",t,o,s),this.values=e.replace(/\r/g,"").split("\n").map((e=>e.split("\t")))}isPasteAllowed(e,t){const o=this.getters.getActiveSheetId(),s=this.getPasteZone(e);return this.getters.doesIntersectMerge(o,s)?"WillRemoveExistingMerge":"Success"}paste(e,t){if("onlyFormat"===t?.pasteOption)return;const o=this.values,s=this.getPasteZone(e),{left:n,top:i}=s,{numberOfCols:r,numberOfRows:a}=wn(s),l=this.getters.getActiveSheetId(),c=this.getters.getLocale();this.addMissingDimensions(r,a,n,i);for(let e=0;e<o.length;e++)for(let t=0;t<o[e].length;t++)this.dispatch("UPDATE_CELL",{row:i+e,col:n+t,content:pR(o[e][t],c),sheetId:l});const h={left:n,top:i,right:n+r-1,bottom:i+a-1};this.selection.getBackToDefault(),this.selection.selectZone({cell:{col:n,row:i},zone:h},{scrollIntoView:!1})}getClipboardContent(){return{[Jt.PlainText]:this.values.map((e=>e.join("\t"))).join("\n")}}getPasteZone(e){const t=this.values.length,o=Math.max(...this.values.map((e=>e.length))),{left:s,top:n}=e[0];return{top:n,left:s,bottom:n+t-1,right:s+o-1}}}const fR=Xt("The cell you are trying to edit has been deleted.");const vR=[{name:Xt("Sum"),types:[Qt.number],compute:(e,t)=>Qc([[e]],t)},{name:Xt("Avg"),types:[Qt.number],compute:(e,t)=>hd([[e]],t)},{name:Xt("Min"),types:[Qt.number],compute:(e,t)=>pd([[e]],t)},{name:Xt("Max"),types:[Qt.number],compute:(e,t)=>gd([[e]],t)},{name:Xt("Count"),types:[Qt.number,Qt.text,Qt.boolean,Qt.error],compute:e=>ud([[e]])},{name:Xt("Count Numbers"),types:[Qt.number,Qt.text,Qt.boolean,Qt.error],compute:(e,t)=>dd([[e]],t)}];class bR{getters;sheetId;boundaries;top;bottom;left;right;offsetX;offsetY;offsetScrollbarX;offsetScrollbarY;canScrollVertically;canScrollHorizontally;viewportWidth;viewportHeight;offsetCorrectionX;offsetCorrectionY;constructor(e,t,o,s,n,i){this.getters=e,this.sheetId=t,this.boundaries=o,this.viewportWidth=s.width,this.viewportHeight=s.height,this.offsetScrollbarX=i.x,this.offsetScrollbarY=i.y,this.canScrollVertically=n.canScrollVertically,this.canScrollHorizontally=n.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,size:s}=this.getters.getColDimensions(this.sheetId,e),{end:n,size:i}=this.getters.getRowDimensions(this.sheetId,t),r=this.searchHeaderIndex("COL",o-this.viewportWidth,0),a=this.getters.getColSize(this.sheetId,r),l=this.searchHeaderIndex("ROW",n-this.viewportHeight,0),c=this.getters.getRowSize(this.sheetId,l);let h=o-this.offsetCorrectionX;this.canScrollHorizontally&&(h+=Math.max(T,Math.min(a,this.viewportWidth-s)),h=Math.max(h,this.viewportWidth));let d=n-this.offsetCorrectionY;return this.canScrollVertically&&(d+=Math.max(A+5,Math.min(c,this.viewportHeight-i)),d=Math.max(d,this.viewportHeight)),n+D>d&&!this.getters.isReadonly()&&(d+=D),{width:h,height:d}}getColIndex(e){return e<this.offsetCorrectionX||e>this.offsetCorrectionX+this.viewportWidth?-1:this.searchHeaderIndex("COL",e-this.offsetCorrectionX,this.left)}getRowIndex(e){return e<this.offsetCorrectionY||e>this.offsetCorrectionY+this.viewportHeight?-1:this.searchHeaderIndex("ROW",e-this.offsetCorrectionY,this.top)}adjustPosition(e){const t=this.sheetId,o=this.getters.getMainCellPosition({sheetId:t,...e}),{col:s,row:n}=this.getters.getNextVisibleCellPosition(o);bn(s,this.boundaries.top,this.boundaries)&&this.adjustPositionX(s),bn(this.boundaries.left,n,this.boundaries)&&this.adjustPositionY(n)}adjustPositionX(e){const t=this.sheetId,{end:o}=this.getters.getColDimensions(t,e);if(this.offsetX+this.offsetCorrectionX+this.viewportWidth<o){const o=this.getters.getNumberCols(t);let s=e;for(;this.getters.isColHidden(t,s)&&s<o;)s++;const n=this.getters.getColDimensions(t,s).end,i=this.searchHeaderIndex("COL",n-this.viewportWidth-this.offsetCorrectionX,this.boundaries.left);this.offsetScrollbarX=this.getters.getColDimensions(t,i).end-this.offsetCorrectionX}else if(this.left>e){let o=e;for(;this.getters.isColHidden(t,o)&&o>0;)o--;this.offsetScrollbarX=this.getters.getColDimensions(t,o).start-this.offsetCorrectionX}this.adjustViewportZoneX()}adjustPositionY(e){const t=this.sheetId,{end:o}=this.getters.getRowDimensions(t,e);if(this.offsetY+this.viewportHeight+this.offsetCorrectionY<o){const o=this.getters.getNumberRows(t);let s=e;for(;this.getters.isRowHidden(t,s)&&s<o;)s++;const n=this.getters.getRowDimensions(t,s).end,i=this.searchHeaderIndex("ROW",n-this.viewportHeight-this.offsetCorrectionY,this.boundaries.top);this.offsetScrollbarY=this.getters.getRowDimensions(t,i).end-this.offsetCorrectionY}else if(this.top>e){let o=e;for(;this.getters.isRowHidden(t,o)&&o>0;)o--;this.offsetScrollbarY=this.getters.getRowDimensions(t,o).start-this.offsetCorrectionY}this.adjustViewportZoneY()}setViewportOffset(e,t){this.setViewportOffsetX(e),this.setViewportOffsetY(t)}adjustViewportZone(){this.adjustViewportZoneX(),this.adjustViewportZoneY()}getRect(e){const t=mn(e,this);if(t){return{x:this.getters.getColRowOffset("COL",this.left,t.left)+this.offsetCorrectionX,y:this.getters.getColRowOffset("ROW",this.top,t.top)+this.offsetCorrectionY,width:Math.min(this.getters.getColRowOffset("COL",t.left,t.right+1),this.viewportWidth),height:Math.min(this.getters.getColRowOffset("ROW",t.top,t.bottom+1),this.viewportHeight)}}}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){const s=this.sheetId,n=this.getters.getNumberHeaders(s,e);let i=o,r=n;for(;i<=r&&i!==n&&-1!==r;){const n=Math.floor((i+r)/2),a=this.getters.getColRowOffset(e,o,n),l=this.getters.getHeaderSize(s,e,n);if(t>=a&&t<a+l)return n;t>=a+l?i=n+1:r=n-1}return-1}setViewportOffsetX(e){this.canScrollHorizontally&&(this.offsetScrollbarX=e,this.adjustViewportZoneX())}setViewportOffsetY(e){this.canScrollVertically&&(this.offsetScrollbarY=e,this.adjustViewportZoneY())}adjustViewportOffsetX(){if(this.canScrollHorizontally){const{width:e}=this.getMaxSize();this.viewportWidth+this.offsetScrollbarX>e&&(this.offsetScrollbarX=Math.max(0,e-this.viewportWidth))}this.adjustViewportZoneX()}adjustViewportOffsetY(){if(this.canScrollVertically){const{height:e}=this.getMaxSize();this.viewportHeight+this.offsetScrollbarY>e&&(this.offsetScrollbarY=Math.max(0,e-this.viewportHeight))}this.adjustViewportZoneY()}adjustViewportZoneX(){const e=this.sheetId;this.left=this.searchHeaderIndex("COL",this.offsetScrollbarX,this.boundaries.left),this.right=Math.min(this.boundaries.right,this.searchHeaderIndex("COL",this.viewportWidth,this.left)),-1===this.left&&(this.left=this.boundaries.left),-1===this.right&&(this.right=this.getters.getNumberCols(e)-1),this.offsetX=this.getters.getColDimensions(e,this.left).start-this.getters.getColDimensions(e,this.boundaries.left).start}adjustViewportZoneY(){const e=this.sheetId;this.top=this.searchHeaderIndex("ROW",this.offsetScrollbarY,this.boundaries.top),this.bottom=Math.min(this.boundaries.bottom,this.searchHeaderIndex("ROW",this.viewportHeight,this.top)),-1===this.top&&(this.top=this.boundaries.top),-1===this.bottom&&(this.bottom=this.getters.getNumberRows(e)-1),this.offsetY=this.getters.getRowDimensions(e,this.top).start-this.getters.getRowDimensions(e,this.boundaries.top).start}}const SR=(new Pi).add("settings",class extends dx{static getters=["getLocale"];locale=ho;allowDispatch(e){return"UPDATE_LOCALE"===e.type?Jr(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,n]of Object.entries(this.getters.getCells(o))){let o;if(n.format===e.dateFormat&&(o=t.dateFormat),n.format===e.timeFormat&&(o=t.timeFormat),n.format===da(e)&&(o=da(t)),o){const{col:e,row:t,sheetId:n}=this.getters.getCellPosition(s);this.dispatch("UPDATE_CELL",{col:e,row:t,sheetId:n,format:o})}}}import(e){this.locale=e.settings?.locale??ho}export(e){e.settings={locale:this.locale}}}).add("sheet",class extends dx{static getters=["getSheetName","tryGetSheetName","getSheet","tryGetSheet","getSheetIdByName","getSheetIds","getVisibleSheetIds","isSheetVisible","getEvaluationSheets","doesHeaderExist","doesHeadersExist","getCell","getCellPosition","getColsZone","getRowCells","getRowsZone","getNumberCols","getNumberRows","getNumberHeaders","getGridLinesVisibility","getNextSheetName","isEmpty","getSheetSize","getSheetZone","getPaneDivisions","checkZonesExistInSheet","getCommandZones","getUnboundedZone","checkElementsIncludeAllNonFrozenHeaders"];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"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"DELETE_SHEET":return this.orderedSheetIds.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=Math.min(...e.elements),o=Math.max(...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"DELETE_CONTENT":this.clearZones(e.sheetId,e.target);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.name);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);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(let t of e.sheets)this.sheetIdsMapName[t.name]=t.id;for(let t of e.sheets){const e=t.name||Xt("Sheet")+(Object.keys(this.sheets).length+1),{colNumber:o,rowNumber:s}=this.getImportedSheetSize(t),n={id:t.id,name:e,numberOfCols:o,rows:kn(s),areGridLinesVisible:void 0===t.areGridLinesVisible||t.areGridLinesVisible,isVisible:t.isVisible,panes:{xSplit:t.panes?.xSplit||0,ySplit:t.panes?.ySplit||0}};this.orderedSheetIds.push(n.id),this.sheets[n.id]=n}}exportSheets(e){e.sheets=this.orderedSheetIds.filter(Ie).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:{},conditionalFormats:[],figures:[],filterTables:[],areGridLinesVisible:void 0===t.areGridLinesVisible||t.areGridLinesVisible,isVisible:t.isVisible};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=ce(e);for(const e in this.sheetIdsMapName)if(e.toUpperCase()===t.toUpperCase())return this.sheetIdsMapName[e]}}getSheetIds(){return this.orderedSheetIds}getVisibleSheetIds(){return this.orderedSheetIds.filter(this.isSheetVisible.bind(this))}getEvaluationSheets(){return this.sheets}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)))}getRow(e,t){const o=this.getSheet(e).rows[t];if(!o)throw new Error(`Row ${o} not found.`);return o}getCell({sheetId:e,col:t,row:o}){const s=this.tryGetSheet(e),n=s?.rows[o]?.cells[t];if(void 0!==n)return this.getters.getCellById(n)}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(Ie)}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"){let t=1;const o=this.orderedSheetIds.map(this.getSheetName.bind(this));let s=`${e}${t}`;for(;o.includes(s);)s=`${e}${t}`,t++;return s}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){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),n="ROW"===t?s.ySplit:s.xSplit,i=this.getters.getNumberHeaders(e,t);if(!n)return!1;return De(o,ue(n,i))}isEmpty(e,t){return xn(t).map((({col:t,row:o})=>this.getCell({sheetId:e,col:t,row:o}))).every((e=>!e||""===e.content))}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&&"row"in e&&t.push({top:e.row,left:e.col,bottom:e.row,right:e.col}),t}checkZonesExistInSheet(e,t){if(!t.every(an))return"InvalidRange";if(t.length){const o=this.getSheetZone(e);return t.every((e=>Sn(e,o)))?"Success":"TargetOutOfSheet"}return"Success"}updateCellPosition(e){const{sheetId:t,cellId:o,col:s,row:n}=e;o?this.setNewPosition(o,t,s,n):this.clearPosition(t,s,n)}setNewPosition(e,t,o,s){const n=this.cellPosition[e];n&&this.clearPosition(t,n.col,n.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)}clearZones(e,t){for(let o of t)for(let t=o.left;t<=o.right;t++)for(let s=o.top;s<=o.bottom;s++){this.sheets[e].rows[s].cells[t]&&this.dispatch("UPDATE_CELL",{sheetId:e,content:"",col:t,row:s})}}createSheet(e,t,o,s,n){const i={id:e,name:t,numberOfCols:o,rows:kn(s),areGridLinesVisible:!0,isVisible:!0,panes:{xSplit:0,ySplit:0}},r=this.orderedSheetIds.slice();r.splice(n,0,i.id);const a=this.sheets;return this.history.update("orderedSheetIds",r),this.history.update("sheets",Object.assign({},a,{[i.id]:i})),i}moveSheet(e,t){const o=this.orderedSheetIds.slice(),s=o.findIndex((t=>t===e)),n=o.splice(s,1);let i=this.findIndexOfTargetSheet(s,t);o.splice(i,0,n[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(Xt("There is not enough visible sheets"))}checkSheetName(e){const t=this.getters.tryGetSheetName(e.sheetId);if(void 0!==t&&e.name===t)return"UnchangedSheetName";const{orderedSheetIds:o,sheets:s}=this,n=e.name&&e.name.trim().toLowerCase();return o.find((t=>s[t]?.name.toLowerCase()===n&&t!==e.sheetId))?"DuplicatedSheetName":J.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(let 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(let o of t)if(o.left<e.quantity&&e.quantity<=o.right)return"MergeOverlap";return"Success"}isRenameAllowed(e){return e.name&&e.name.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){const o=this.getSheet(e),s=this.getDuplicateSheetName(o.name),n=le(o);n.id=t,n.name=s;for(let e=0;e<=n.numberOfCols;e++)for(let t=0;t<=n.rows.length;t++)n.rows[t]&&(n.rows[t].cells[e]=void 0);const i=this.orderedSheetIds.slice(),r=i.indexOf(e);i.splice(r+1,0,n.id),this.history.update("orderedSheetIds",i),this.history.update("sheets",Object.assign({},this.sheets,{[n.id]:n}));for(const t of Object.values(this.getters.getCells(e))){const{col:e,row:o}=this.getCellPosition(t.id);this.dispatch("UPDATE_CELL",{sheetId:n.id,col:e,row:o,content:t.content,format:t.format,style:t.style})}const a=Object.assign({},this.sheetIdsMapName);a[n.name]=n.id,this.history.update("sheetIdsMapName",a)}getDuplicateSheetName(e){let t=1;const o=this.orderedSheetIds.map(this.getSheetName.bind(this)),s=Xt("Copy of %s",e);let n=s.toString();for(;o.includes(n);)n=`${s} (${t})`,t++;return n}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(),n=s.indexOf(e.id);s.splice(n,1),this.history.update("orderedSheetIds",s);const i=Object.assign({},this.sheetIdsMapName);delete i[t],this.history.update("sheetIdsMapName",i)}removeColumns(e,t){t.sort(((e,t)=>t-e));for(let 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(let o of ge(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 n="before"===o?t:t+1;this.moveCellsOnAddition(e,n,s,"columns");const i=this.sheets[e.id].numberOfCols;this.history.update("sheets",e.id,"numberOfCols",i+s),n<e.panes.xSplit&&this.setPaneDivisions(e.id,e.panes.xSplit+s,"COL")}addRows(e,t,o,s){const n="before"===o?t:t+1;this.addEmptyRows(e,s),this.moveCellsOnAddition(e,n,s,"rows"),n<e.panes.ySplit&&this.setPaneDivisions(e.id,e.panes.ySplit+s,"ROW")}moveCellOnColumnsDeletion(e,t){for(let o=0;o<e.rows.length;o++){const s=e.rows[o];for(let n in s.cells){const i=Number(n),r=s.cells[n];r&&(i===t&&this.dispatch("CLEAR_CELL",{sheetId:e.id,col:i,row:o}),i>t&&this.dispatch("UPDATE_CELL_POSITION",{sheetId:e.id,cellId:r,col:i-1,row:o}))}}}moveCellsOnAddition(e,t,o,s){const n=[];for(let i=0;i<e.rows.length;i++){const r=e.rows[i];if("rows"!==s||i>=t)for(let a in r.cells){const l=Number(a),c=r.cells[a];c&&("rows"===s||l>=t)&&n.push({type:"UPDATE_CELL_POSITION",sheetId:e.id,cellId:c,col:l+("columns"===s?o:0),row:i+("rows"===s?o:0)})}}for(let e of n.reverse())this.dispatch(e.type,e)}moveCellOnRowsDeletion(e,t,o){const s=o-t+1;for(let n=0;n<e.rows.length;n++){const i=e.rows[n];if(n>=t&&n<=o)for(let t in i.cells){const o=Number(t);i.cells[t]&&this.dispatch("CLEAR_CELL",{sheetId:e.id,col:o,row:n})}if(n>o)for(let t in i.cells){const o=Number(t),r=i.cells[t];r&&this.dispatch("UPDATE_CELL_POSITION",{sheetId:e.id,cellId:r,col:o,row:n-s})}}}updateRowsStructureOnDeletion(e,t,o){const s=[],n=e.rows.map((e=>e.cells)).reverse();for(let i in e.rows){const e=Number(i);e>=t&&e<=o||s.push({cells:n.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(dt);let o=e.rowNumber,s=e.colNumber;for(let{col:e,row:n}of t)o=Math.max(o,n+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?this.checkZonesExistInSheet(e.sheetId,this.getCommandZones(e)):"Success"}}).add("header grouping",class extends dx{static getters=["getHeaderGroups","getGroupsLayers","getVisibleGroupLayers","getHeaderGroup","getHeaderGroupsInZone","isGroupFolded","isRowFolded","isColFolded"];groups={};allowDispatch(e){switch(e.type){case"GROUP_HEADERS":{const{start:t,end:o}=e;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}=e;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":const t=this.findGroupWithStartEnd(e.sheetId,e.dimension,e.start,e.end);if(!t)return"UnknownHeaderGroup";if(ue(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=le(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=Ne(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(),n="ROW"===e.dimension?e.zone.top:e.zone.left,i="ROW"===e.dimension?e.zone.bottom:e.zone.right,r=new Set;for(let e=n;e<=i;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,n="ROW"===t?o.bottom:o.right;return this.doGroupOverlap(e,s,n)}))}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 n=s[o];if(0===n.start)continue;ue(n.start-1,n.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 n={};for(const t of e)n[this.getGroupId(t)]=t.isFolded;const i={};for(const t of e)for(let e=t.start;e<=t.end;e++)i[e]=i[e]?i[e]+1:1;for(let e=t;e<=o;e++)i[e]=i[e]?i[e]+s:s;const r=Math.max(...Object.values(i),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=i[o]||0;for(let t=0;t<e;t++){const e=a[t].at(-1);if(e&&Ue([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=n[this.getGroupId(t)];return a}groupHeaders(e,t,o,s){const n=this.getHeaderGroups(e,t),i=this.bricksFallingAlgorithm(n,o,s,1).flat();this.history.update("groups",e,t,this.removeDuplicateGroups(i))}unGroupHeaders(e,t,o,s){const n=this.getHeaderGroups(e,t),i=this.bricksFallingAlgorithm(n,o,s,-1).flat();this.history.update("groups",e,t,this.removeDuplicateGroups(i))}moveGroupsOnHeaderInsertion(e,t,o,s){const n=this.groups[e][t];for(let i=0;i<n.length;i++){const r=n[i],[a,l]=Vn(o,s,[r.start,r.end]);a===r.start&&l===r.end||this.history.update("groups",e,t,i,{...r,start:a,end:l})}}moveGroupsOnHeaderDeletion(e,t,o){const s=this.getHeaderGroups(e,t),n=[];for(const e of s){const t=Un(o,ue(e.start,e.end+1));0!==t.length&&n.push({...e,start:Math.min(...t),end:Math.max(...t)})}this.history.update("groups",e,t,this.bricksFallingAlgorithm(n,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 n=this.getters.getHeaderGroups(e,t);for(let s=0;s<n.length;s++){const i=n[s];i.start===o.start&&i.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 n=this.getters.getHeaderGroups(e,t);for(let s=0;s<n.length;s++){const i=n[s];i.start===o.start&&i.end>=o.end&&this.history.update("groups",e,t,s,"isFolded",!1)}}getGroupIndex(e,t,o,s){const n=this.groups[e][t].findIndex((e=>e.start===o&&e.end===s));return-1===n?void 0:n}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]}}).add("header visibility",class extends dx{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":Math.min(...e.elements)<0||Math.max(...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,le(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(let 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=Ne(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(let t of e.elements)this.history.update("hiddenHeaders",e.sheetId,e.dimension,t,!0);break;case"UNHIDE_COLUMNS_ROWS":for(let t of e.elements)this.history.update("hiddenHeaders",e.sheetId,e.dimension,t,!1)}}checkElementsIncludeAllVisibleHeaders(e,t,o){return De(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=ue(0,this.getters.getNumberHeaders(e,t)),s=[];return this.getters.getHeaderGroups(e,t).forEach((e=>{e.isFolded&&s.push(...ue(e.start,e.end+1))})),o.filter((o=>!this.hiddenHeaders[e][t][o]&&!s.includes(o)))}import(e){for(let 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(let 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("filters",class extends dx{static getters=["doesZonesContainFilter","getFilter","getFilters","getFilterTable","getFilterTables","getFilterTablesInZone","getFilterId","getFilterHeaders","isFilterHeader"];tables={};allowDispatch(e){switch(e.type){case"CREATE_FILTER_TABLE":if(!Mn(...e.target))return"NonContinuousTargets";const t=pn(...e.target),o=()=>this.getFilterTables(e.sheetId).some((e=>vn(e.zone,t)))?"FilterOverlap":"Success",s=()=>{const o=this.getters.getMergesInZone(e.sheetId,t);for(let e of o)if(vn(t,e))return"MergeInFilter";return"Success"};return this.checkValidations(e,o,s);case"ADD_MERGE":for(let t of e.target)for(let o of this.getFilterTables(e.sheetId))if(vn(o.zone,t))return"MergeInFilter"}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 o={};for(const t of Object.values(this.tables[e.sheetId]||{}))if(t){const e=le(t);o[e.id]=e}this.history.update("tables",e.sheetIdTo,o);break;case"ADD_COLUMNS_ROWS":this.onAddColumnsRows(e);break;case"REMOVE_COLUMNS_ROWS":this.onDeleteColumnsRows(e);break;case"CREATE_FILTER_TABLE":{const t=pn(...e.target),o=this.createFilterTable(t);this.history.update("tables",e.sheetId,o.id,o);break}case"REMOVE_FILTER_TABLE":{const t={};for(const o of this.getFilterTables(e.sheetId))e.target.every((e=>!mn(e,o.zone)))&&(t[o.id]=o);this.history.update("tables",e.sheetId,t);break}case"UPDATE_CELL":{const t=e.sheetId;for(let o of this.getFilterTables(t))this.canUpdateCellCmdExtendTable(e,o)&&this.extendTableDown(t,o);break}}}getFilters(e){return this.getFilterTables(e).map((e=>e.filters)).flat()}getFilterTables(e){return this.tables[e]?Object.values(this.tables[e]).filter(Ie):[]}getFilter(e){return this.getFilterTable(e)?.filters.find((t=>t.col===e.col))}getFilterId(e){return this.getFilter(e)?.id}getFilterTable({sheetId:e,col:t,row:o}){return this.getFilterTables(e).find((e=>bn(t,o,e.zone)))}getFilterTablesInZone(e,t){return this.getFilterTables(e).filter((e=>Sn(e.zone,t)))}doesZonesContainFilter(e,t){for(const o of t)for(const t of this.getFilterTables(e))if(mn(o,t.zone))return!0;return!1}getFilterHeaders(e){const t=[];for(let o of this.getFilterTables(e)){const e=o.zone,s=e.top;for(let o=e.left;o<=e.right;o++)t.push({col:o,row:s})}return t}isFilterHeader({sheetId:e,col:t,row:o}){return this.getFilterHeaders(e).some((e=>e.col===t&&e.row===o))}onAddColumnsRows(e){for(const t of this.getFilterTables(e.sheetId)){const o=hn(t.zone,"COL"===e.dimension?"left":"top",e.base,e.position,e.quantity),s=[];for(const o of t.filters){const t=hn(o.zoneWithHeaders,"COL"===e.dimension?"left":"top",e.base,e.position,e.quantity);s.push(new jx(o.id,t))}if(s.length<wn(o).numberOfCols){for(let e=o.left;e<=o.right;e++)s.find((t=>t.col===e))||s.push(new jx(this.uuidGenerator.uuidv4(),{...o,left:e,right:e}));s.sort(((e,t)=>e.col-t.col))}this.history.update("tables",e.sheetId,t.id,"zone",o),this.history.update("tables",e.sheetId,t.id,"filters",s)}}onDeleteColumnsRows(e){for(const t of this.getFilterTables(e.sheetId)){if("ROW"===e.dimension&&e.elements.includes(t.zone.top)){const o={...this.tables[e.sheetId]};delete o[t.id],this.history.update("tables",e.sheetId,o);continue}const o=gn(t.zone,"COL"===e.dimension?"left":"top",e.elements);if(o){if(cn(o)!==cn(t.zone)){const s=[];for(const o of t.filters){const t=gn(o.zoneWithHeaders,"COL"===e.dimension?"left":"top",e.elements);t&&s.push(new jx(o.id,t))}this.history.update("tables",e.sheetId,t.id,"zone",o),this.history.update("tables",e.sheetId,t.id,"filters",s)}}else{const o={...this.tables[e.sheetId]};delete o[t.id],this.history.update("tables",e.sheetId,o)}}}createFilterTable(e){return new Yx(e)}extendTableDown(e,t){const o={...t.zone,bottom:t.zone.bottom+1};this.history.update("tables",e,t.id,"zone",o);for(let o=0;o<t.filters.length;o++){const s=t.filters[o],n={...s.zoneWithHeaders,bottom:s.zoneWithHeaders.bottom+1};this.history.update("tables",e,t.id,"filters",o,"zoneWithHeaders",n)}}canUpdateCellCmdExtendTable({content:e,sheetId:t,col:o,row:s},n){if(!e)return;const i=n.zone;if(!(i.bottom+1===s&&o>=i.left&&o<=i.right))return!1;for(const e of ue(i.left,i.right+1)){const o={sheetId:t,col:e,row:s},n=this.getters.getCell(o)?.content;if(n)return!1;if(this.getters.getFilter(o))return!1;if(this.getters.isInMerge(o))return!1}return!0}import(e){for(const t of e.sheets)for(const e of t.filterTables||[]){const o=this.createFilterTable(rn(e.range));this.history.update("tables",t.id,o.id,o)}}export(e){for(const t of e.sheets)for(const e of this.getFilterTables(t.id))t.filterTables.push({range:cn(e.zone)})}exportForExcel(e){this.export(e)}}).add("cell",class extends dx{static getters=["zoneToXC","getCells","getTranslatedCellFormula","getCellStyle","getCellById"];nextId=1;cells={};adaptRanges(e,t){for(const o of Object.keys(this.cells))for(const s of Object.values(this.cells[o]||{}))if(s.isFormula)for(const n of s.compiledFormula.dependencies)if(!t||n.sheetId===t){const t=e(n);"NONE"!==t.changeType&&this.history.update("cells",o,s.id,"compiledFormula","dependencies",s.compiledFormula.dependencies.indexOf(n),t.range)}}allowDispatch(e){switch(e.type){case"UPDATE_CELL":return this.checkCellOutOfSheet(e);case"CLEAR_CELL":return this.checkValidations(e,this.chainValidations(this.checkCellOutOfSheet,this.checkUselessClearCell));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:""})}}setFormatter(e,t,o){for(let s of t)for(let t=s.top;t<=s.bottom;t++)for(let n=s.left;n<=s.right;n++)this.dispatch("UPDATE_CELL",{sheetId:e,col:n,row:t,format:o})}clearFormatting(e,t){for(let 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,style:null,format:""})}handleAddColumnsRows(e,t){let o,s;"before"===e.position?(o=ue(e.base,e.base+e.quantity),s=e.base+e.quantity):(o=ue(e.base+1,e.base+e.quantity+1),s=e.base),t(e.sheetId,s,o)}import(e){for(let t of e.sheets)for(let o in t.cells){const s=t.cells[o],{col:n,row:i}=dt(o);if(s?.content||s?.format||s?.style){const o=this.importCell(t.id,s,e.styles,e.formats);this.history.update("cells",t.id,o.id,o),this.dispatch("UPDATE_CELL_POSITION",{cellId:o.id,col:n,row:i,sheetId:t.id})}}}export(e){const t={},o={};for(let s of e.sheets){const e={},n=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 n){const n=this.getters.getCell(s),i=ut(s.col,s.row),r=this.removeDefaultStyleValues(n.style);e[i]={style:Object.keys(r).length?Ae(r,t):void 0,format:n.format?Ae(n.format,o):void 0,content:n.content||void 0}}s.cells=e}e.styles=t,e.formats=o}importCell(e,t,o,s){const n=t.style&&o[t.style]||void 0,i=t.format&&s[t.format]||void 0,r=this.getNextUid();return this.createCell(r,t?.content||"",i,n,e)}exportForExcel(e){this.export(e)}removeDefaultStyleValues(e){const t={...e};for(const[e,o]of Object.entries(P))t[e]===o&&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]}getFormulaCellContent(e,t,o){let s=0;return Oe(t.tokens.map((t=>{if("REFERENCE"===t.type){const t=o[s++];return this.getters.getRangeString(t,e)}return t.value})))}getTranslatedCellFormula(e,t,o,s){const n=this.getters.createAdaptedRanges(s.dependencies,t,o,e);return this.getFormulaCellContent(e,s,n)}getCellStyle(e){return this.getters.getCell(e)?.style||{}}zoneToXC(e,t,o=[{colFixed:!1,rowFixed:!1}]){const s=ut((t=this.getters.expandZone(e,t)).left,t.top,o[0]),n=ut(t.right,t.bottom,o.length>1?o[1]:o[0]),i=this.getters.getMainCellPosition({sheetId:e,col:t.left,row:t.top}),r=this.getters.getMainCellPosition({sheetId:e,col:t.right,row:t.bottom}),a=i.col===r.col&&i.row===r.row;return s==n||a?s:s+":"+n}setStyle(e,t,o){for(let s of t)for(let t=s.left;t<=s.right;t++)for(let n=s.top;n<=s.bottom;n++){const s=this.getters.getCell({sheetId:e,col:t,row:n});this.dispatch("UPDATE_CELL",{sheetId:e,col:t,row:n,style:o?{...s?.style,...o}:void 0})}}copyColumnStyle(e,t,o){for(let s=0;s<this.getters.getNumberRows(e);s++){const n=this.getFormat(e,t,s);if(n.style||n.format)for(let t of o)this.dispatch("UPDATE_CELL",{sheetId:e,col:t,row:s,...n})}}copyRowStyle(e,t,o){for(let s=0;s<this.getters.getNumberCols(e);s++){const n=this.getFormat(e,s,t);if(n.style||n.format)for(let t of o)this.dispatch("UPDATE_CELL",{sheetId:e,col:s,row:t,...n})}}getFormat(e,t,o){const s={},n=this.getters.getMainCellPosition({sheetId:e,col:t,row:o}),i=this.getters.getCell(n);return i&&(i.style&&(s.style=i.style),i.format&&(s.format=i.format)),s}getNextUid(){const e=this.nextId.toString();return this.history.update("nextId",this.nextId+1),e}updateCell(e,t,o,s){const n=this.getters.getCell({sheetId:e,col:t,row:o}),i="content"in s||"formula"in s,r=i?Ve(s?.content):n?.content||"";let a;a=void 0!==s.style?s.style||void 0:n?n.style:void 0;const l=this.getters.getLocale();let c=("format"in s?s.format:n&&n.format)||Fs(r,l)||Ds(r);if((i&&!r&&!s.formula||!i&&(!n||""===n.content))&&!a&&!c)return void(n&&(this.history.update("cells",e,n.id,void 0),this.dispatch("UPDATE_CELL_POSITION",{cellId:void 0,col:t,row:o,sheetId:e})));const h=n?.id||this.getNextUid(),d=this.createCell(h,r,c,a,e);this.history.update("cells",e,d.id,d),this.dispatch("UPDATE_CELL_POSITION",{cellId:d.id,col:t,row:o,sheetId:e})}createCell(e,t,o,s,n){if(!t.startsWith("="))return this.createLiteralCell(e,t,o,s);try{return this.createFormulaCell(e,t,o,s,n)}catch(n){return this.createErrorFormula(e,t,o,s,n)}}createLiteralCell(e,t,o,s){const n=this.getters.getLocale();return o===lo||Ro(t)||(t=Lo(qi(t,n))),{id:e,content:t,style:s,format:o,isFormula:!1}}createFormulaCell(e,t,o,s,n){const i=Vx(t);return i.dependencies.length?this.createFormulaCellWithDependencies(e,i,o,s,n):{id:e,content:t,style:s,format:o,isFormula:!0,compiledFormula:{...i,dependencies:[]}}}createFormulaCellWithDependencies(e,t,o,s,n){const i=t.dependencies.map((e=>this.getters.getRangeFromSheetXC(n,e)));return new Wx(e,t,o,s,i,n,this.getters.getRangeString.bind(this))}createErrorFormula(e,t,o,s,n){return{id:e,content:t,style:s,format:o,isFormula:!0,compiledFormula:{tokens:Br(t),dependencies:[],execute:function(){throw n}}}}checkCellOutOfSheet(e){const{sheetId:t,col:o,row:s}=e;if(!this.getters.tryGetSheet(t))return"InvalidSheetId";return bn(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"}}).add("merge",class extends dx{static getters=["isInMerge","isInSameMerge","isMergeHidden","getMainCellPosition","getBottomLeftCell","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(Ie))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){const o=t?[t]:Object.keys(this.merges);for(const t of o)this.applyRangeChangeOnSheet(t,e)}getMerges(e){return Object.keys(this.merges[e]||{}).map((t=>this.getMergeById(e,parseInt(t,10)))).filter(Ie)}getMerge({sheetId:e,col:t,row:o}){const s=this.mergeCellMap[e],n=s?t in s&&s[t]?.[o]:void 0;return n?this.getMergeById(e,n):void 0}getMergesInZone(e,t){const o=this.mergeCellMap[e];if(!o)return[];const s=new Set;for(const{col:e,row:n}of xn(t)){const t=o[e]?.[n];t&&s.add(t)}return Array.from(s).map((t=>this.getMergeById(e,t))).filter(Ie)}getSelectionRangeString(e,t){const o=Nn.fromRange(e,this.getters),s=this.getters.expandZone(o.sheetId,o.zone),n=o.clone({zone:{...s,bottom:o.isFullCol?void 0:s.bottom,right:o.isFullRow?void 0:s.right}}),i=this.getters.getRangeString(n,t);if(this.isSingleCellOrMerge(o.sheetId,o.zone)){const{sheetName:e,xc:t}=on(i);return sn(e,t.split(":")[0])}return i}doesIntersectMerge(e,t){return xn(t).some((({col:t,row:o})=>void 0!==this.getMerge({sheetId:e,col:t,row:o})))}doesColumnsHaveCommonMerges(e,t,o){const s=this.getters.getSheet(e);for(let n=0;n<this.getters.getNumberRows(e);n++)if(this.isInSameMerge(s.id,t,n,o,n))return!0;return!1}doesRowsHaveCommonMerges(e,t,o){const s=this.getters.getSheet(e);for(let n=0;n<=this.getters.getNumberCols(e);n++)if(this.isInSameMerge(s.id,n,t,n,o))return!0;return!1}expandZone(e,t){let{left:o,right:s,top:n,bottom:i}=t,r={left:o,right:s,top:n,bottom:i};for(let t in this.merges[e]){const o=this.getMergeById(e,parseInt(t));o&&vn(o,r)&&(r=pn(o,r))}return fn(r,t)?r:this.expandZone(e,r)}isInSameMerge(e,t,o,s,n){const i=this.getMerge({sheetId:e,col:t,row:o}),r=this.getMerge({sheetId:e,col:s,row:n});return!(!i||!r)&&fn(i,r)}isInMerge({sheetId:e,col:t,row:o}){const s=this.mergeCellMap[e];return!!s&&(t in s&&Boolean(s[t]?.[o]))}getMainCellPosition(e){if(!this.isInMerge(e))return e;const t=this.getMerge(e).topLeft;return{sheetId:e.sheetId,col:t.col,row:t.row}}getBottomLeftCell(e){if(!this.isInMerge(e))return e;const{bottom:t,left:o}=this.getMerge(e);return{sheetId:e.sheetId,col:o,row:t}}isMergeHidden(e,t){const o=this.getters.getHiddenColsGroups(e),s=this.getters.getHiddenRowsGroups(e);for(let e of o)if(t.left>=e[0]&&t.right<=e[e.length-1])return!0;for(let 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 fn(t,o);const{numberOfCols:s,numberOfRows:n}=wn(t);return 1===s&&1===n}isMainCellPosition(e){return Fe(this.getMainCellPosition(e),e)}isMergeDestructive(e,t){let{left:o,right:s,top:n,bottom:i}=t;s=de(s,0,this.getters.getNumberCols(e)-1),i=de(i,0,this.getters.getNumberRows(e)-1);for(let t=n;t<=i;t++)for(let i=o;i<=s;i++)if(i!==o||t!==n){const o=this.getters.getCell({sheetId:e,col:i,row:t});if(o&&""!==o.content)return!0}return!1}getMergeById(e,t){const o=this.merges[e]?.[t];return void 0!==o?Kx(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&&vn(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);for(const e of t)if(e.left<o&&e.right>=o||e.top<s&&e.bottom>=s)return"FrozenPaneOverlap";return"Success"}checkMergedContentUpdate(e){const{col:t,row:o,content:s}=e;if(void 0===s)return"Success";const{col:n,row:i}=this.getMainCellPosition(e);return n===t&&i===o?"Success":"CellIsMerged"}checkMergeExists(e){const{sheetId:t,target:o}=e;for(const e of o){const{left:o,top:s}=e,n=this.getMerge({sheetId:t,col:o,row:s});if(void 0===n||!fn(e,n))return"InvalidTarget"}return"Success"}addMerge(e,t){let{left:o,right:s,top:n,bottom:i}=t;s=de(s,0,this.getters.getNumberCols(e)-1),i=de(i,0,this.getters.getNumberRows(e)-1);if(ut(o,n)===ut(s,i))return;const r=this.getters.getCell({sheetId:e,col:o,row:n});let a=this.nextId++;this.history.update("merges",e,a,this.getters.getRangeFromSheetXC(e,cn({left:o,top:n,right:s,bottom:i})));let l=new Set;for(let t=n;t<=i;t++)for(let i=o;i<=s;i++){i===o&&t===n||this.dispatch("UPDATE_CELL",{sheetId:e,col:i,row:t,style:r?r.style:null,content:""});const s=this.getMerge({sheetId:e,col:i,row:t});s&&l.add(s.id),this.history.update("mergeCellMap",e,i,t,a)}for(let t of l){const{top:o,bottom:s,left:n,right:i}=this.getMergeById(e,t);for(let t=o;t<=s;t++)for(let o=n;o<=i;o++){const s={sheetId:e,col:o,row:t},n=this.getMerge(s);n&&n.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:n,right:i}=t,r=this.getMerge({sheetId:e,col:o,row:s});if(void 0!==r&&fn(t,r)){this.history.update("merges",e,r.id,void 0);for(let t=s;t<=n;t++)for(let s=o;s<=i;s++)this.history.update("mergeCellMap",e,s,t,void 0)}}applyRangeChangeOnSheet(e,t){const o=Object.entries(this.merges[e]||{});for(const[s,n]of o)if(n){const o=n.zone,i=t(n);switch(i.changeType){case"NONE":break;case"REMOVE":this.removeMerge(e,o);break;default:const{numberOfCols:t,numberOfRows:n}=wn(i.range.zone);1===t&&1===n?this.removeMerge(e,o):this.history.update("merges",e,parseInt(s,10),i.range)}}this.history.update("mergeCellMap",e,{});for(const t of this.getMerges(e))for(const{col:o,row:s}of xn(t))this.history.update("mergeCellMap",e,o,s,t.id)}import(e){const t=e.sheets||[];for(let 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(let o of t)this.addMerge(e,rn(o))}export(e){for(let t of e.sheets){const e=this.merges[t.id];e&&t.merges.push(...Xx(e))}}exportForExcel(e){this.export(e)}}).add("headerSize",class extends dx{static getters=["getUserRowSize","getColSize"];sizes={};handle(e){switch(e.type){case"CREATE_SHEET":this.history.update("sizes",e.sheetId,{COL:[],ROW:[]});break;case"DUPLICATE_SHEET":this.history.update("sizes",e.sheetIdTo,le(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=ze(this.sizes[e.sheetId][e.dimension],e.elements);this.history.update("sizes",e.sheetId,e.dimension,t);break}case"ADD_COLUMNS_ROWS":{let t=[...this.sizes[e.sheetId][e.dimension]];const o=Ne(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]||T)}getUserRowSize(e,t){const o=this.sizes[e]?.ROW[t];return o?Math.round(o):void 0}import(e){for(let t of e.sheets){const e={COL:Array(t.colNumber).fill(void 0),ROW:Array(t.rowNumber).fill(void 0)};for(let[o,s]of Object.entries(t.rows))s.size&&(e.ROW[o]=s.size);for(let[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(let o of e.sheets){void 0===o.rows&&(o.rows={});for(const e of ue(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)??A});void 0===o.cols&&(o.cols={});for(let e of ue(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 dx{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=>({...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_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||z,color:e.border.color||G})}break;case"CLEAR_FORMATTING":this.clearBorders(e.sheetId,e.target);break;case"REMOVE_COLUMNS_ROWS":for(let t of e.elements)"COL"===e.dimension?this.shiftBordersHorizontally(e.sheetId,t+1,-1):this.shiftBordersVertically(e.sheetId,t+1,-1);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,{moveFirstLeftBorder:!0}),t=e.base-1,o=e.base+e.quantity):(this.shiftBordersHorizontally(e.sheetId,e.base+1,e.quantity,{moveFirstLeftBorder:!1}),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,{moveFirstTopBorder:!0}),t=e.base-1,o=e.base+e.quantity):(this.shiftBordersVertically(e.sheetId,e.base+1,e.quantity,{moveFirstTopBorder:!1}),t=e.base,o=e.base+e.quantity+1),this.ensureRowBorderContinuity(e.sheetId,t,o)}getCellBorder({sheetId:e,col:t,row:o}){const s={top:this.borders[e]?.[t]?.[o]?.horizontal,bottom:this.borders[e]?.[t]?.[o+1]?.horizontal,left:this.borders[e]?.[t]?.[o]?.vertical,right:this.borders[e]?.[t+1]?.[o]?.vertical};return s.bottom||s.left||s.right||s.top?s:null}getBordersColors(e){const t=[],o=this.borders[e];if(o)for(const e of o.filter(Ie))for(const o of e)o?.horizontal&&t.push(o.horizontal.color),o?.vertical&&t.push(o.vertical.color);return t}ensureColumnBorderContinuity(e,t,o){const s=ue(t+1,o);for(let n=0;n<this.getters.getNumberRows(e);n++){const i=this.getCellBorder({sheetId:e,col:t,row:n}),r=this.getCellBorder({sheetId:e,col:o,row:n});if(i&&r){const t=this.getCommonSides(i,r);for(let o of s)this.addBorder(e,o,n,t)}}}ensureRowBorderContinuity(e,t,o){const s=ue(t+1,o);for(let n=0;n<this.getters.getNumberCols(e);n++){const i=this.getCellBorder({sheetId:e,col:n,row:t}),r=this.getCellBorder({sheetId:e,col:n,row:o});if(i&&r){const t=this.getCommonSides(i,r);for(let o of s)this.addBorder(e,n,o,t)}}}getCommonSides(e,t){const o={};for(let s of["top","bottom","left","right"])e[s]&&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))):[]}getRowsRange(e){return this.borders[e]?ue(0,this.getters.getNumberRows(e)+1):[]}shiftBordersHorizontally(e,t,o,{moveFirstLeftBorder:s}={}){this.borders[e]&&(o<0&&this.moveBordersOfColumn(e,t,o,"vertical",{destructive:!1}),this.getColumnsWithBorders(e).filter((e=>e>=t)).sort(((e,t)=>o<0?e-t:t-e)).forEach((n=>{(n===t&&s||n!==t)&&this.moveBordersOfColumn(e,n,o,"vertical"),this.moveBordersOfColumn(e,n,o,"horizontal")})))}shiftBordersVertically(e,t,o,{moveFirstTopBorder:s}={}){this.borders[e]&&(o<0&&this.moveBordersOfRow(e,t,o,"horizontal",{destructive:!1}),this.getRowsRange(e).filter((e=>e>=t)).sort(((e,t)=>o<0?e-t:t-e)).forEach((n=>{(n===t&&s||n!==t)&&this.moveBordersOfRow(e,n,o,"horizontal"),this.moveBordersOfRow(e,n,o,"vertical")})))}moveBordersOfRow(e,t,o,s,{destructive:n}={destructive:!0}){const i=this.borders[e];i&&this.getColumnsWithBorders(e).forEach((r=>{const a=i[r]?.[t+o]?.[s],l=i[r]?.[t]?.[s];this.history.update("borders",e,r,t+o,s,n?l:l||a),this.history.update("borders",e,r,t,s,void 0)}))}moveBordersOfColumn(e,t,o,s,{destructive:n}={destructive:!0}){const i=this.borders[e];i&&this.getRowsRange(e).forEach((r=>{const a=i[t+o]?.[r]?.[s],l=i[t]?.[r]?.[s];this.history.update("borders",e,t+o,r,s,n?l:l||a),this.history.update("borders",e,t,r,s,void 0)}))}setBorder(e,t,o,s,n=!0){!n&&this.borders?.[e]?.[t]?.[o]?.vertical||this.history.update("borders",e,t,o,"vertical",s?.left),!n&&this.borders?.[e]?.[t]?.[o]?.horizontal||this.history.update("borders",e,t,o,"horizontal",s?.top),!n&&this.borders?.[e]?.[t+1]?.[o]?.vertical||this.history.update("borders",e,t+1,o,"vertical",s?.right),!n&&this.borders?.[e]?.[t]?.[o+1]?.horizontal||this.history.update("borders",e,t,o+1,"horizontal",s?.bottom)}clearBorders(e,t){for(let o of t){for(let t=o.top;t<=o.bottom;t++){this.history.update("borders",e,o.right+1,t,"vertical",void 0);for(let s=o.left;s<=o.right;s++)this.history.update("borders",e,s,t,void 0)}for(let t=o.left;t<=o.right;t++)this.history.update("borders",e,t,o.bottom+1,"horizontal",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);for(let n of t){if("h"===o||"hv"===o||"all"===o)for(let t=n.top+1;t<=n.bottom;t++)for(let o=n.left;o<=n.right;o++)this.addBorder(e,o,t,{top:s});if("v"===o||"hv"===o||"all"===o)for(let t=n.top;t<=n.bottom;t++)for(let o=n.left+1;o<=n.right;o++)this.addBorder(e,o,t,{left:s});if("left"===o||"all"===o||"external"===o)for(let t=n.top;t<=n.bottom;t++)this.addBorder(e,n.left,t,{left:s});if("right"===o||"all"===o||"external"===o)for(let t=n.top;t<=n.bottom;t++)this.addBorder(e,n.right+1,t,{left:s});if("top"===o||"all"===o||"external"===o)for(let t=n.left;t<=n.right;t++)this.addBorder(e,t,n.top,{top:s});if("bottom"===o||"all"===o||"external"===o)for(let t=n.left;t<=n.right;t++)this.addBorder(e,t,n.bottom+1,{top:s})}}addBordersToMerge(e,t){const{left:o,right:s,top:n,bottom:i}=t,r=this.getCellBorder({sheetId:e,col:o,row:n}),a=this.getCellBorder({sheetId:e,col:s,row:i});this.clearBorders(e,[t]),r?.top&&this.setBorders(e,[{...t,bottom:n}],"top",r.top),r?.left&&this.setBorders(e,[{...t,right:o}],"left",r.left),a?.bottom?this.setBorders(e,[{...t,top:i}],"bottom",a.bottom):r?.bottom&&this.setBorders(e,[{...t,top:i}],"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||Fe(t,e.border)?"NoChanges":"Success"}import(e){if(Object.keys(e.borders||{}).length)for(let t of e.sheets)for(const o in t.cells){const s=t.cells[o];if(s?.border){const n=e.borders[s.border],{col:i,row:r}=dt(o);this.setBorder(t.id,i,r,n,!1)}}for(let t of e.sheets)if(t.merges)for(let e of t.merges)this.addBordersToMerge(t.id,rn(e))}export(e){let t=0;const o={};function s(e){for(let[t,s]of Object.entries(o))if(Fe(s,e))return parseInt(t,10);return o[++t]=e,t}for(let t of e.sheets)for(let e=0;e<t.colNumber;e++)for(let o=0;o<t.rowNumber;o++){const n=this.getCellBorder({sheetId:t.id,col:e,row:o});if(n){const i=ut(e,o),r=t.cells[i],a=s(n);r?r.border=a:t.cells[i]={border:a}}}e.borders=o}exportForExcel(e){this.export(e)}}).add("conditional formatting",class extends dx{static getters=["getConditionalFormats","getRulesSelection","getRulesByCell","getAdaptedCfRanges"];cfRules={};loopThroughRangesOfSheet(e,t){for(const o of this.cfRules[e])for(const s of o.ranges){const n=t(s);switch(n.changeType){case"REMOVE":let 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),n.range)}}}adaptRanges(e,t){if(t)this.loopThroughRangesOfSheet(t,e);else for(const t of Object.keys(this.cfRules))this.loopThroughRangesOfSheet(t,e)}allowDispatch(e){switch(e.type){case"ADD_CONDITIONAL_FORMAT":return this.checkValidations(e,this.checkCFRule,this.checkEmptyRange);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(let t of e.sheets)this.cfRules[t.id]=t.conditionalFormats.map((e=>this.mapToConditionalFormatInternal(t.id,e)))}export(e){if(e.sheets)for(let t of e.sheets)this.cfRules[t.id]&&(t.conditionalFormats=this.cfRules[t.id].map((e=>this.mapToConditionalFormat(t.id,e))))}exportForExcel(e){this.export(e)}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 n=t.left;n<=t.right;n++){this.getRulesByCell(e,n,s).forEach((e=>{o.add(e.id)}))}return o}getRulesByCell(e,t,o){const s=[];for(let n of this.cfRules[e])for(let e of n.ranges)bn(t,o,e.zone)&&s.push(n);return new Set(s.map((t=>this.mapToConditionalFormat(e,t))))}getAdaptedCfRanges(e,t,o,s){if(0===o.length&&0===s.length)return;const n=this.getters.getConditionalFormats(e),i=n.findIndex((e=>e.id===t.id));let r=[];return i>-1&&(r=n[i].ranges),r=r.concat(o),Cn(r,s)}mapToConditionalFormat(e,t){return{...t,ranges:t.ranges.map((t=>this.getters.getRangeString(t,e)))}}mapToConditionalFormatInternal(e,t){const o={...t,ranges:t.ranges.map((t=>this.getters.getRangeFromSheetXC(e,t)))};return o}addConditionalFormatting(e,t){const o=this.cfRules[t].slice(),s=o.findIndex((t=>t.id===e.id)),n=this.mapToConditionalFormatInternal(t,e);s>-1?o.splice(s,1,n):o.push(n),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 n=s-t;return n<0||n>=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(2,["Between","NotBetween"]),this.checkOperatorArgsNumber(1,["BeginsWith","ContainsText","EndsWith","GreaterThan","GreaterThanOrEqual","LessThan","LessThanOrEqual","NotContains"]),this.checkOperatorArgsNumber(0,["IsEmpty","IsNotEmpty"]));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"}checkOperatorArgsNumber(e,t){if(e>2)throw new Error("Checking more than 2 arguments is currently not supported. Add the appropriate CommandResult if you want to.");return o=>{if(t.includes(o.operator)){const t=[],s=e=>void 0===e||""===e;return e>=1&&s(o.values[0])&&t.push("FirstArgMissing"),e>=2&&s(o.values[1])&&t.push("SecondArgMissing"),t.length?t:"Success"}return"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";try{Vx(e.value||"")}catch(e){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&&Zx(t)>=Zx(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&&Zx(t)>=Zx(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&&Zx(t)>=Zx(o)?"MinBiggerThanMid":"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)),n=this.cfRules[o][s],i=s-t,r=[...this.cfRules[o]];r.splice(s,1),r.splice(i,0,n),this.history.update("cfRules",o,r)}}).add("figures",class extends dx{static getters=["getFigures","getFigure","getFigureSheetId"];figures={};allowDispatch(e){switch(e.type){case"CREATE_FIGURE":return this.checkFigureDuplicate(e.figure.id);case"UPDATE_FIGURE":case"DELETE_FIGURE":return this.checkFigureExists(e.sheetId,e.id);default:return"Success"}}handle(e){switch(e.type){case"CREATE_SHEET":this.figures[e.sheetId]={};break;case"DELETE_SHEET":this.deleteSheet(e.sheetId);break;case"CREATE_FIGURE":this.addFigure(e.figure,e.sheetId);break;case"UPDATE_FIGURE":const{type:t,sheetId:o,...s}=e,n=s;this.updateFigure(o,n);break;case"DELETE_FIGURE":this.removeFigure(e.id,e.sheetId);break;case"REMOVE_COLUMNS_ROWS":this.onRowColDelete(e.sheetId,e.dimension)}}onRowColDelete(e,t){"ROW"===t?this.onRowDeletion(e):this.onColDeletion(e)}onRowDeletion(e){const t=this.getters.getNumberRows(e);let o=0;for(let s=0;s<t;s++)o+=this.getters.getUserRowSize(e,s)||A;const s=this.getters.getFigures(e);for(const t of s){const s=Math.min(t.y,o-t.height);s!==t.y&&this.dispatch("UPDATE_FIGURE",{sheetId:e,id:t.id,y:s})}}onColDeletion(e){const t=this.getters.getNumberCols(e);let o=0;for(let s=0;s<t;s++)o+=this.getters.getColSize(e,s);const s=this.getters.getFigures(e);for(const t of s){const s=Math.min(t.x,o-t.width);s!==t.x&&this.dispatch("UPDATE_FIGURE",{sheetId:e,id:t.id,x:s})}}updateFigure(e,t){if("id"in t)for(const[o,s]of Object.entries(t))switch(o){case"x":case"y":void 0!==s&&this.history.update("figures",e,t.id,o,Math.max(s,0));break;case"width":case"height":void 0!==s&&this.history.update("figures",e,t.id,o,s)}}addFigure(e,t){this.history.update("figures",t,e.id,e)}deleteSheet(e){this.history.update("figures",e,void 0)}removeFigure(e,t){this.history.update("figures",t,e,void 0)}checkFigureExists(e,t){return void 0===this.figures[e]?.[t]?"FigureDoesNotExist":"Success"}checkFigureDuplicate(e){return Object.values(this.figures).find((t=>t?.[e]))?"DuplicatedFigureId":"Success"}getFigures(e){return Object.values(this.figures[e]||{}).filter(Ie)}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(let t of e.sheets){const e={};t.figures.forEach((t=>{e[t.id]=t})),this.figures[t.id]=e}}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){this.export(e)}}).add("chart",class extends dx{static getters=["isChartDefined","getChartDefinition","getChartType","getChartIds","getChart","getContextCreationChart"];charts={};createChart=function(e){const t=gl.getAll().sort(((e,t)=>e.sequence-t.sequence));return function(o,s,n){const i=t.find((e=>e.match(s.type)));if(!i)throw new Error(`No builder for this chart: ${s.type}`);return i.createChart(s,n,e)}}(this.getters);validateChartDefinition=e=>function(e,t){const o=gl.getAll().find((e=>e.match(t.type)));if(!o)throw new Error("Unknown chart type.");return o.validateChartDefinition(e,t)}(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));default:return"Success"}}handle(e){switch(e.type){case"CREATE_CHART":this.addFigure(e.id,e.sheetId,e.position,e.size),this.addChart(e.id,e.definition);break;case"UPDATE_CHART":this.addChart(e.id,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(Y).pop(),s=`${e.sheetIdTo}${Y}${t}`,n=this.charts[o.id]?.copyForSheetId(e.sheetIdTo);n&&this.dispatch("CREATE_CHART",{id:s,position:{x:o.x,y:o.y},size:{width:o.width,height:o.height},definition:n.getDefinition(),sheetId:e.sheetIdTo})}break}case"DELETE_FIGURE":this.history.update("charts",e.id,void 0);break;case"DELETE_SHEET":for(let 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(let t of e.sheets)if(t.figures)for(let 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(let t of e.sheets){const e=this.getters.getFigures(t.id),o=[];for(let 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={x:0,y:0},s={width:536,height:335}){if(this.getters.getFigure(t,e))return;const n={id:e,x:o.x,y:o.y,width:s.width,height:s.height,tag:"chart"};this.dispatch("CREATE_FIGURE",{sheetId:t,figure:n})}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.id)?"DuplicatedChartId":"Success"}checkChartExists(e){return this.getters.getFigureSheetId(e.id)?"Success":"ChartDoesNotExist"}}).add("image",class extends dx{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.addImage(e.figureId,e.sheetId,e.position,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(Y).pop(),s=`${e.sheetIdTo}${Y}${t}`,n=this.getImage(o.id);if(n){const t={width:o.width,height:o.height};this.dispatch("CREATE_IMAGE",{sheetId:e.sheetIdTo,figureId:s,position:{x:o.x,y:o.y},size:t,definition:le(n)})}}break}case"DELETE_FIGURE":this.history.update("images",e.sheetId,e.id,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}addImage(e,t,o,s){const n={id:e,x:o.x,y:o.y,width:s.width,height:s.height,tag:"image"};this.dispatch("CREATE_FIGURE",{sheetId:t,figure:n})}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:le(e)})}t.images=[...t.images,...o]}}getAllImages(){const e=[];for(const t in this.images)e.push(...Object.values(this.images[t]||{}).filter(Ie));return e}}).add("dataValidation",class extends dx{static getters=["cellHasListDataValidationIcon","getDataValidationRule","getDataValidationRules","getValidationRuleForCell"];rules={};adaptRanges(e,t){const o=t?[t]:Object.keys(this.rules);for(const t of o)this.loopThroughRangesOfSheet(t,e)}loopThroughRangesOfSheet(e,t){for(let o=this.rules[e].length-1;o>=0;o--){const s=this.rules[e][o];for(let n=s.ranges.length-1;n>=0;n--){const i=t(s.ranges[n]);switch(i.changeType){case"REMOVE":if(1===s.ranges.length)this.removeDataValidationRule(e,s.id);else{const t=s.ranges.slice();t.splice(n,1),this.history.update("rules",e,o,"ranges",t)}break;case"RESIZE":case"MOVE":case"CHANGE":this.history.update("rules",e,o,"ranges",n,i.range)}}}}allowDispatch(e){switch(e.type){case"ADD_DATA_VALIDATION_RULE":return this.checkValidations(e,this.chainValidations(this.checkCriterionTypeIsValid,this.checkCriterionHasValidNumberOfValues,this.checkCriterionValuesAreValid));case"REMOVE_DATA_VALIDATION_RULE":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=le(this.rules[e.sheetId]).map((t=>({...t,ranges:t.ranges.map((t=>Fn(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}}}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(bn(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)}addDataValidationRule(e,t){const o=this.rules[e];"isBoolean"===t.criterion.type&&this.setCenterStyleToBooleanCells(t);const s=this.removeRangesFromRules(e,t.ranges,o),n=s.findIndex((e=>e.id===t.id));-1!==n?(s[n]=t,this.history.update("rules",e,s)):this.history.update("rules",e,[...s,t])}removeRangesFromRules(e,t,o){o=le(o);const s=t.map((t=>this.getters.getRangeString(t,e)));for(const t of o){const o=t.ranges.map((t=>this.getters.getRangeString(t,e)));t.ranges=Cn(o,s).map((t=>this.getters.getRangeFromSheetXC(e,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 Ln(e.ranges)){const e=this.getters.getCell(t),{sheetId:o,col:s,row:n}=t,i={...e?.style,align:e?.style?.align??"center",verticalAlign:e?.style?.verticalAlign??"middle"};this.dispatch("UPDATE_CELL",{sheetId:o,col:s,row:n,style:i})}}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)))})}}checkCriterionTypeIsValid(e){return rC.contains(e.rule.criterion.type)?"Success":"UnknownDataValidationCriterionType"}checkCriterionHasValidNumberOfValues(e){const t=e.rule.criterion,o=rC.get(t.type).numberOfValues(t);return void 0!==o&&t.values.length!==o?"InvalidNumberOfCriterionValues":"Success"}checkCriterionValuesAreValid(e){const t=e.rule.criterion,o=rC.get(t.type);return t.values.some((e=>e.startsWith("=")?"onlyLiterals"===o.allowedValues:"onlyFormulas"===o.allowedValues||!o.isCriterionValueValid(e)))?"InvalidDataValidationCriterionValue":"Success"}}),CR=(new Pi).add("ui_sheet",class extends Jx{static getters=["doesCellHaveGridIcon","getCellWidth","getTextWidth","getCellText","getCellMultiLineText","getContiguousZone","isCellEmpty"];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(let 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":for(let t of e.rows)this.dispatch("RESIZE_COLUMNS_ROWS",{elements:[t],dimension:"ROW",size:null,sheetId:e.sheetId})}}getCellWidth(e){const t=this.getters.getCellComputedStyle(e);let o=0;const s=this.getters.getEvaluatedCell(e).formattedValue;if(s){const e=Zn(this.ctx,s,t,void 0);o+=Math.max(...e.map((e=>zn(this.ctx,e,t))))}if(this.getters.getConditionalIcon(e)&&(o+=function(e){return Wn(e)+8}(t)),this.getters.doesCellHaveGridIcon(e)&&(o+=20),0===o)return 0;if(o+=2*M,"wrap"===t.wrapping){const t=this.getters.getColSize(this.getters.getActiveSheetId(),e.col);return Math.min(t,o)}return o}getTextWidth(e,t){return zn(this.ctx,e,t)}getCellText(e,t=!1){const o=this.getters.getCell(e);return t&&o?.isFormula?na(o.content,this.getters.getLocale()):this.getters.getEvaluatedCell(e).formattedValue}getCellMultiLineText(e,t){const o=this.getters.getCellStyle(e),s=this.getters.getCellText(e,this.getters.shouldShowFormulas());return Zn(this.ctx,s,o,t)}doesCellHaveGridIcon(e){const t=this.getters.isFilterHeader(e),o=!this.getters.isReadonly()&&this.getters.cellHasListDataValidationIcon(e);return t||o}getContiguousZone(e,t){const o=t=>{for(const o of ue(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 ue(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,n=t;do{s=!1;const e=o(n);fn(n,e)||(s=!0,n=e)}while(s);return n}isCellEmpty(e){const t=this.getters.getMainCellPosition(e);return this.getters.getEvaluatedCell(t).type===Qt.empty}getColMaxWidth(e,t){const o=xn(this.getters.getColsZone(e,t,t)).map((t=>this.getCellWidth({sheetId:e,...t})));return Math.max(0,...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(),o=this.getters.getCommandZones(e);return!t&&o.length>0?"NoActiveSheet":t&&o.length>0?this.getters.checkZonesExistInSheet(t,o):"Success"}}).add("ui_options",class extends Jx{static getters=["shouldShowFormulas"];showFormulas=!1;handle(e){if("SET_FORMULA_VISIBILITY"===e.type)this.showFormulas=e.show}shouldShowFormulas(){return this.showFormulas}}).add("selectionInputManager",class extends Jx{config;static layers=[1];static getters=["getSelectionInput","getSelectionInputValue","isRangeValid","getSelectionInputHighlights"];inputs={};focusedInputId=null;get currentInput(){return this.focusedInputId?this.inputs[this.focusedInputId]:null}constructor(e){super(e),this.config=e}allowDispatch(e){if("FOCUS_RANGE"===e.type){const t=this.currentInput?.getIndex(e.rangeId);if(this.focusedInputId===e.id&&this.currentInput?.focusedRangeIndex===t)return"InputAlreadyFocused"}return this.currentInput?this.currentInput.allowDispatch(e):"Success"}handle(e){switch(e.type){case"ENABLE_NEW_SELECTION_INPUT":this.initInput(e.id,e.initialRanges||[],e.hasSingleRange);break;case"DISABLE_SELECTION_INPUT":this.focusedInputId===e.id&&this.unfocus(),delete this.inputs[e.id];break;case"UNFOCUS_SELECTION_INPUT":this.unfocus();break;case"ADD_RANGE":case"ADD_EMPTY_RANGE":case"REMOVE_RANGE":if(e.id!==this.focusedInputId){const t=this.inputs[e.id];this.selection.capture(t,{cell:{col:0,row:0},zone:An({col:0,row:0})},{handleEvent:t.handleEvent.bind(t),release:()=>this.focusedInputId=null}),this.focusedInputId=e.id}break;case"FOCUS_RANGE":case"CHANGE_RANGE":if(e.id!==this.focusedInputId){const t=this.inputs[e.id],o=t.ranges.find((t=>t.id===e.rangeId));if(this.isRangeValid(o?.xc||"A1")){const e=this.getters.getActiveSheetId(),s=this.getters.getRangeFromSheetXC(e,o?.xc||"A1").zone;this.selection.capture(t,{cell:{col:s.left,row:s.top},zone:s},{handleEvent:t.handleEvent.bind(t),release:()=>this.focusedInputId=null})}this.focusedInputId=e.id}}this.currentInput?.handle(e)}getSelectionInput(e){return this.inputs[e]?this.inputs[e].ranges.map(((t,o)=>Object.assign({},t,{color:this.focusedInputId===e&&null!==this.inputs[e].focusedRangeIndex&&this.isRangeValid(t.xc)?t.color:null,isFocused:this.focusedInputId===e&&this.inputs[e].focusedRangeIndex===o}))):[]}isRangeValid(e){if(!e)return!1;const{xc:t,sheetName:o}=on(e);return null!==t.match(Xs)&&(!o||void 0!==this.getters.getSheetIdByName(o))}getSelectionInputValue(e){return this.inputs[e].getSelectionInputValue()}getSelectionInputHighlights(){return this.focusedInputId?this.inputs[this.focusedInputId].getSelectionInputHighlights():[]}initInput(e,t,o=!1){if(this.inputs[e]&&this.unfocus(),this.inputs[e]=new KI(this.config,t,o),0===t.length){const t=this.inputs[e],o={zone:An({col:0,row:0}),cell:{col:0,row:0}};this.selection.capture(t,o,{handleEvent:t.handleEvent.bind(t),release:()=>{this.focusedInputId=null,t.focusedRangeIndex=null}}),this.focusedInputId=e}}unfocus(){this.selection.release(this.currentInput),this.focusedInputId=null}}).add("highlight",class extends Jx{static layers=[1];static getters=["getHighlights"];getHighlights(){return this.prepareHighlights(this.getters.getComposerHighlights().concat(this.getters.getSelectionInputHighlights()))}prepareHighlights(e){return e.filter((e=>e.zone.top>=0&&e.zone.left>=0&&e.zone.bottom<this.getters.getNumberRows(e.sheetId)&&e.zone.right<this.getters.getNumberCols(e.sheetId))).map((e=>{const{numberOfRows:t,numberOfCols:o}=wn(e.zone),s=t*o==1?this.getters.expandZone(e.sheetId,e.zone):e.zone;return{...e,zone:s}}))}drawGrid(e){const{ctx:t,thinLineWidth:o}=e,s=this.getters.getActiveSheetId(),n=3*o;t.lineWidth=n;const i=this.getHighlights();for(let e of i.filter(((e,t)=>i.findIndex((t=>fn(t.zone,e.zone)&&t.sheetId===s))===t))){const{x:o,y:s,width:i,height:r}=this.getters.getVisibleRect(e.zone);i>0&&r>0&&(t.strokeStyle=e.color,t.strokeRect(o+n/2,s+n/2,i-n,r-n),t.globalCompositeOperation="source-over",t.fillStyle=e.color+"20",t.fillRect(o+n,s+n,i-2*n,r-2*n))}}}).add("grid renderer",class extends Jx{static layers=[0,7];static getters=["getColDimensionsInViewport","getRowDimensionsInViewport"];boxes=[];getColDimensionsInViewport(e,t){const o=Math.min(...this.getters.getSheetViewVisibleCols()),s=this.getters.getColRowOffsetInViewport("COL",o,t),n=this.getters.getColSize(e,t);return{start:s,size:n,end:s+(this.getters.isColHidden(e,t)?0:n)}}getRowDimensionsInViewport(e,t){const o=Math.min(...this.getters.getSheetViewVisibleRows()),s=this.getters.getColRowOffsetInViewport("ROW",o,t),n=this.getters.getRowSize(e,t);return{start:s,size:n,end:s+(this.getters.isRowHidden(e,t)?0:n)}}getHeaderOffset(e,t,o){let s=this.getters.getColRowOffsetInViewport(e,t,o);return this.getters.isDashboard()||(s+="ROW"===e?I:R),s}drawGrid(e,t){switch(t){case 0:this.boxes=this.getGridBoxes(),this.drawBackground(e),this.drawOverflowingCellBackground(e),this.drawCellBackground(e),this.drawBorders(e),this.drawTexts(e),this.drawIcon(e),this.drawFrozenPanes(e);break;case 7:this.getters.isDashboard()||(this.drawHeaders(e),this.drawFrozenPanesHeaders(e))}}drawBackground(e){const{ctx:t,thinLineWidth:s}=e,{width:n,height:i}=this.getters.getSheetViewDimensionWithHeaders();t.fillStyle="#ffffff",t.fillRect(0,0,n+o,i+o);const r=!this.getters.isDashboard()&&this.getters.getGridLinesVisibility(this.getters.getActiveSheetId()),a=r?.1*s:0;if(r)for(const e of this.boxes)t.strokeStyle="#E2E3E3",t.lineWidth=s,t.strokeRect(e.x+a,e.y+a,e.width-2*a,e.height-2*a)}drawCellBackground(e){const{ctx:t}=e;for(const e of this.boxes){let o=e.style;o.fillColor&&"#ffffff"!==o.fillColor&&(t.fillStyle=o.fillColor||"#ffffff",t.fillRect(e.x,e.y,e.width,e.height)),e.isError&&(t.fillStyle="red",t.beginPath(),t.moveTo(e.x+e.width-5,e.y),t.lineTo(e.x+e.width,e.y),t.lineTo(e.x+e.width,e.y+5),t.fill())}}drawOverflowingCellBackground(e){const{ctx:t,thinLineWidth:o}=e;for(const e of this.boxes)if(e.content&&e.isOverflow){const s=e.content.align||"left";let n,i;const r=e.y+o/2,a=e.height-o,l=Math.min(e.clipRect?.width||1/0,e.content.width);"left"===s?(n=e.x+o/2,i=l-2*o):"right"===s?(n=e.x+e.width-o/2,i=2*o-l):(n=(e.clipRect?.x||e.x+e.width/2-e.content.width/2)+o/2,i=l-2*o),t.fillStyle="#ffffff",t.fillRect(n,r,i,a)}}drawBorders(e){const{ctx:t}=e;for(let e of this.boxes){const t=e.border;if(t){const{x:s,y:n,width:i,height:r}=e;t.left&&o(t.left,s,n,s,n+r),t.top&&o(t.top,s,n,s+i,n),t.right&&o(t.right,s+i,n,s+i,n+r),t.bottom&&o(t.bottom,s,n+r,s+i,n+r)}}function o({style:e,color:o},s,n,i,r){switch(t.strokeStyle=o,e){case"medium":t.lineWidth=2,n+=(s+=n===r?-.5:.5)===(i+=n===r?1.5:.5)?-.5:.5,r+=s===i?1.5:.5;break;case"thick":t.lineWidth=3,n===r&&(s--,i++),s===i&&(n--,r++);break;case"dashed":t.lineWidth=1,t.setLineDash([1,3]);break;case"dotted":t.lineWidth=1,n===r&&(s+=.5,i+=.5),s===i&&(n+=.5,r+=.5),t.setLineDash([1,1]);break;default:t.lineWidth=1}t.beginPath(),t.moveTo(s,n),t.lineTo(i,r),t.stroke(),t.lineWidth=1,t.setLineDash([])}}drawTexts(e){const{ctx:t}=e;let o;t.textBaseline="top";for(let e of this.boxes)if(e.content){const s=e.style||{},n=e.content.align||"left",i=$n(s);i!==o&&(o=i,t.font=i),t.fillStyle=s.textColor||"#000";let r=e.x;if(r+="left"===n?_+(e.image?e.image.size+4:0):"right"===n?e.width-_-(e.hasIcon?19:0):e.width/2,t.textAlign=n,e.clipRect){t.save(),t.beginPath();const{x:o,y:s,width:n,height:i}=e.clipRect;t.rect(o,s,n,i),t.clip()}const a=Wn(s),l=e.content.textLines.length;let c=this.computeTextYCoordinate(e,a,l);for(let o of e.content.textLines)Xn(t,o,{x:Math.round(r),y:Math.round(c)},s.underline,s.strikethrough),c+=_+a;e.clipRect&&t.restore()}}drawIcon(e){const{ctx:t}=e;for(const e of this.boxes)if(e.image){const o=e.image.image;if(e.image.clipIcon){t.save(),t.beginPath();const{x:o,y:s,width:n,height:i}=e.image.clipIcon;t.rect(o,s,n,i),t.clip()}const s=e.image.size,n=this.computeTextYCoordinate(e,s);t.drawImage(o,e.x+4,n,s,s),e.image.clipIcon&&t.restore()}}computeTextYCoordinate(e,t,o=1){const s=e.y+1,n=Bn(t,o),i=e.height>n+2*_,r=e.verticalAlign||k;if(i){if("middle"===r)return s+(e.height-n)/2;if("bottom"===r)return s+e.height-n-_}return s+_}drawHeaders(e){const{ctx:t,thinLineWidth:o}=e,s=this.getters.getSheetViewVisibleCols(),l=s[0],c=s[s.length-1],h=this.getters.getSheetViewVisibleRows(),d=h[0],u=h[h.length-1],{width:g,height:p}=this.getters.getSheetViewDimensionWithHeaders(),b=this.getters.getSelectedZones(),S=function(e){const t=new Set;for(let o of e)for(let e of ue(o.left,o.right+1))t.add(e);return t}(b),C=function(e){const t=new Set;for(let o of e)for(let e of ue(o.top,o.bottom+1))t.add(e);return t}(b),E=this.getters.getActiveSheetId(),w=this.getters.getNumberCols(E),y=this.getters.getNumberRows(E),x=this.getters.getActiveCols(),T=this.getters.getActiveRows();t.font=`400 11px ${H}`,t.textAlign="center",t.textBaseline="middle",t.lineWidth=o,t.strokeStyle="#333";for(let e=l;e<=c;e++){const o={left:e,right:e,top:0,bottom:y-1},{x:s,width:a}=this.getters.getVisibleRect(o),l=this.getters.doesZonesContainFilter(E,[o]),c=x.has(e),h=S.has(e);t.fillStyle=c?l?m:r:h?l?v:i:l?f:n,t.fillRect(s,0,a,I)}for(let e=d;e<=u;e++){const o={top:e,bottom:e,left:0,right:w-1},{y:s,height:a}=this.getters.getVisibleRect(o),l=this.getters.doesZonesContainFilter(E,[o]),c=T.has(e),h=C.has(e);t.fillStyle=c?l?m:r:h?l?v:i:l?f:n,t.fillRect(0,s,R,a)}t.beginPath(),t.moveTo(R,0),t.lineTo(R,p),t.moveTo(0,I),t.lineTo(g,I),t.strokeStyle="#C0C0C0",t.stroke(),t.beginPath();for(const e of s){const o=this.getters.getColSize(E,e),s=rt(e);t.fillStyle=x.has(e)?"#fff":a;let n=this.getHeaderOffset("COL",l,e);t.fillText(s,n+o/2,13),t.moveTo(n+o,0),t.lineTo(n+o,I)}for(const e of h){const o=this.getters.getRowSize(E,e);t.fillStyle=T.has(e)?"#fff":a;let s=this.getHeaderOffset("ROW",d,e);t.fillText(String(e+1),24,s+o/2),t.moveTo(0,s+o),t.lineTo(R,s+o)}t.stroke()}drawFrozenPanesHeaders(e){const{ctx:t,thinLineWidth:o}=e,{x:s,y:n}=this.getters.getMainViewportCoordinates(),i=this.getters.isDashboard()?0:R,r=this.getters.isDashboard()?0:I;t.lineWidth=6*o,t.strokeStyle=w,t.beginPath(),s&&(t.moveTo(i+s,0),t.lineTo(i+s,r)),n&&(t.moveTo(0,r+n),t.lineTo(i,r+n)),t.stroke()}drawFrozenPanes(e){const{ctx:t,thinLineWidth:o}=e,{x:s,y:n}=this.getters.getMainViewportCoordinates(),i=this.getters.getSheetViewVisibleCols(),r=i[0],a=i[i.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:R,u=this.getters.isDashboard()?0:I;t.lineWidth=6*o,t.strokeStyle="#DADFE8",t.beginPath(),s&&(t.moveTo(d+s,u),t.lineTo(d+s,h.height+u)),n&&(t.moveTo(d,u+n),t.lineTo(h.width+d,u+n)),t.stroke()}findNextEmptyCol(e,t,o){const s=this.getters.getActiveSheetId();let n=e;for(;n<t;){const e={sheetId:s,col:n+1,row:o},t=this.getters.getEvaluatedCell(e),i=this.getters.getCellBorderWithFilterBorder(e),r=this.getters.doesCellHaveGridIcon(e),a=this.getters.isCellValidCheckbox(e);if(t.type!==Qt.empty||this.getters.isInMerge(e)||i?.left||r||a)return n;n++}return n}findPreviousEmptyCol(e,t,o){const s=this.getters.getActiveSheetId();let n=e;for(;n>t;){const e={sheetId:s,col:n-1,row:o},t=this.getters.getEvaluatedCell(e),i=this.getters.getCellBorderWithFilterBorder(e),r=this.getters.doesCellHaveGridIcon(e),a=this.getters.isCellValidCheckbox(e);if(t.type!==Qt.empty||this.getters.isInMerge(e)||i?.right||r||a)return n;n--}return n}computeCellAlignment(e,t){const o=this.getters.getCell(e);if(o?.isFormula&&this.getters.shouldShowFormulas())return"left";const{align:s}=this.getters.getCellStyle(e),n=this.getters.getEvaluatedCell(e);return t&&n.type===Qt.number?"center"!==s?"left":s:s||n.defaultAlign}createZoneBox(e,t,o){const{left:s,right:n}=o,i=t.left,r=t.top,a={sheetId:e,col:i,row:r},l=this.getters.getEvaluatedCell(a),c=this.getters.shouldShowFormulas(),{x:h,y:d,width:u,height:g}=this.getters.getVisibleRect(t),{verticalAlign:p}=this.getters.getCellStyle(a),m={x:h,y:d,width:u,height:g,border:this.getters.getCellBorderWithFilterBorder(a)||void 0,style:this.getters.getCellComputedStyle(a),verticalAlign:p,isError:l.type===Qt.error&&!!l.message||this.getters.isDataValidationInvalid(a)};if(l.type===Qt.empty||this.getters.isCellValidCheckbox(a))return m;const f=this.getters.getConditionalIcon(a),v=Wn(m.style),b=f?4+v:0;f&&(m.image={type:"icon",size:v,clipIcon:{x:m.x,y:m.y,width:Math.min(b,u),height:g},image:zS[f].img}),m.hasIcon=this.getters.doesCellHaveGridIcon(a);const S=m.hasIcon?19:0,C=this.getters.getCellComputedStyle(a),E=C.wrapping||"overflow",w="wrap"!==E||c?void 0:u-2*_,y=this.getters.getCellMultiLineText(a,w),x=Math.max(...y.map((e=>this.getters.getTextWidth(e,C)+_))),I=b+x+S,R=this.computeCellAlignment(a,I>u);m.content={textLines:y,width:"overflow"===E?x:u,align:R};const T=I>u||v>g;if(f||m.hasIcon)m.clipRect={x:m.x+b,y:m.y,width:Math.max(0,u-b-S),height:g};else if(T&&"overflow"===E){let e,o;switch(this.getters.isInMerge(a)?(e=this.getters.getMerge(a).right,o=i):(e=this.findNextEmptyCol(i,n,r),o=this.findPreviousEmptyCol(i,s,r),m.isOverflow=!0),R){case"left":{const o=An({col:e,row:r}),{x:s,y:n,width:i,height:a}=this.getters.getVisibleRect(pn(t,o));(i<I||v>a||y.length>1)&&(m.clipRect={x:s,y:n,width:i,height:a});break}case"right":{const e=An({col:o,row:r}),{x:s,y:n,width:i,height:a}=this.getters.getVisibleRect(pn(t,e));(i<I||v>a||y.length>1)&&(m.clipRect={x:s,y:n,width:i,height:a});break}case"center":{const s={...t,left:o,right:e},{x:n,y:i,height:r,width:a}=this.getters.getVisibleRect(s),l=I/2,c=m.x+m.width/2;if(n+a<c+l||n>c-l||v>r||y.length>1){const e=n>c-l?n:c-l,t=n+a-e;m.clipRect={x:e,y:i,width:t,height:r}}break}}}else("clip"===E||"wrap"===E||y.length>1)&&(m.clipRect={x:m.x,y:m.y,width:u,height:g});return m}getGridBoxes(){const e=[],t=this.getters.getSheetViewVisibleCols(),o=t[0],s=t[t.length-1],n=this.getters.getSheetViewVisibleRows(),i={left:o,right:s,top:n[0],bottom:n[n.length-1]},r=this.getters.getActiveSheetId();for(const o of n)for(const s of t){const t={sheetId:r,col:s,row:o};this.getters.isInMerge(t)||e.push(this.createZoneBox(r,An(t),i))}for(const t of this.getters.getMerges(r))if(!this.getters.isMergeHidden(r,t)&&vn(t,i)){const o=this.createZoneBox(r,t,i),s=this.getters.getCellBorder({sheetId:r,col:t.right,row:t.bottom});o.border={...o.border,bottom:s?s.bottom:void 0,right:s?s.right:void 0},o.isMerge=!0,e.push(o)}return e}}).add("autofill",class extends Jx{static layers=[5];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:de(e.col,0,this.getters.getNumberCols(t)),this.lastCellSelected.row=-1===e.row?this.lastCellSelected.row:de(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();break;case"AUTOFILL_CELL":this.autoFillMerge(e.originCol,e.originRow,e.col,e.row);const t=this.getters.getActiveSheetId();this.dispatch("UPDATE_CELL",{sheetId:t,col:e.col,row:e.row,style:e.style||null,content:e.content||"",format:e.format||""}),this.dispatch("SET_BORDER",{sheetId:t,col:e.col,row:e.row,border:e.border}),this.autofillCF(e.originCol,e.originRow,e.col,e.row),this.autofillDV(e.originCol,e.originRow,e.col,e.row)}}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;switch(this.direction){case"down":for(let s=t.left;s<=t.right;s++){const n=[];for(let e=t.top;e<=t.bottom;e++)n.push(ut(s,e));const i=this.createGenerator(n);for(let t=o.top;t<=o.bottom;t++)this.computeNewCell(i,s,t,e)}break;case"up":for(let s=t.left;s<=t.right;s++){const n=[];for(let e=t.bottom;e>=t.top;e--)n.push(ut(s,e));const i=this.createGenerator(n);for(let t=o.bottom;t>=o.top;t--)this.computeNewCell(i,s,t,e)}break;case"left":for(let s=t.top;s<=t.bottom;s++){const n=[];for(let e=t.right;e>=t.left;e--)n.push(ut(e,s));const i=this.createGenerator(n);for(let t=o.right;t>=o.left;t--)this.computeNewCell(i,t,s,e)}break;case"right":for(let s=t.top;s<=t.bottom;s++){const n=[];for(let e=t.left;e<=t.right;e++)n.push(ut(e,s));const i=this.createGenerator(n);for(let t=o.left;t<=o.right;t++)this.computeNewCell(i,t,s,e)}}e&&(this.autofillZone=void 0,this.selection.resizeAnchorZone(this.direction,this.steps),this.lastCellSelected={},this.direction=void 0,this.steps=0,this.tooltip=void 0)}select(e,t){const o=this.getters.getSelectedZone();if(bn(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.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.getCorrespondingFormulaCell(e)||this.getters.getCell(e)?.content;)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.getCorrespondingFormulaCell(e)||this.getters.getCell(e)?.content;)s+=1,e={sheetId:t,col:o+1,row:s}}s!==e.bottom&&(this.select(e.left,s-1),this.autofill(!0))}computeNewCell(e,t,o,s){const{cellData:n,tooltip:i,origin:r}=e.next(),{content:a,style:l,border:c,format:h}=n;this.tooltip=i,s&&this.dispatch("AUTOFILL_CELL",{originCol:r.col,originRow:r.row,col:t,row:o,content:a,style:l,border:c,format:h})}getRule(e,t){const o=Ji.getAll().sort(((e,t)=>e.sequence-t.sequence)).find((o=>o.condition(e,t)));return o&&o.generateRule(e,t)}createGenerator(e){const t=[],o=[],s=this.getters.getActiveSheetId();for(let t of e){const{col:e,row:n}=dt(t),i=this.getters.getCell({sheetId:s,col:e,row:n});o.push({col:e,row:n,cell:i,sheetId:s})}const n=o.map((e=>e.cell));for(let e of o){let o={type:"COPY_MODIFIER"};if(e&&e.cell){o=this.getRule(e.cell,n)||o}const s=this.getters.getCellBorder(e)||void 0;t.push({data:{...e,border:s},rule:o})}return new FI(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 n=s.up.number>0?"up":"down",i=s.left.number>0?"left":"right";return Math.abs(s[n].number)>=Math.abs(s[i].number)?s[n].value:s[i].value}autoFillMerge(e,t,o,s){const n=this.getters.getActiveSheetId(),i={sheetId:n,col:o,row:s},r={sheetId:n,col:e,row:t};if(this.getters.isInMerge(i)&&!this.getters.isInMerge(r)){const e=this.getters.getMerge(i);e&&this.dispatch("REMOVE_MERGE",{sheetId:n,target:[e]})}const a=this.getters.getMerge(r);a?.topLeft.col===e&&a?.topLeft.row===t&&this.dispatch("ADD_MERGE",{sheetId:n,target:[{top:s,bottom:s+a.bottom-a.top,left:o,right:o+a.right-a.left}]})}autofillCF(e,t,o,s){const n=this.getters.getActiveSheetId(),i=this.getters.getRulesByCell(n,e,t);for(const e of i){const t=this.getters.getAdaptedCfRanges(n,e,[ut(o,s)],[]);t&&this.dispatch("ADD_CONDITIONAL_FORMAT",{cf:le(e),ranges:t.map((e=>this.getters.getRangeDataFromXc(n,e))),sheetId:n})}}autofillDV(e,t,o,s){const n=this.getters.getActiveSheetId(),i={sheetId:n,col:e,row:t},r=this.getters.getValidationRuleForCell(i);if(!r)return;const a=r.ranges.map((e=>this.getters.getRangeString(e,n))),l=Cn(a.concat(ut(o,s)),[]);this.dispatch("ADD_DATA_VALIDATION_RULE",{rule:r,ranges:l.map((e=>this.getters.getRangeDataFromXc(n,e))),sheetId:n})}drawGrid(e){if(!this.autofillZone)return;const{ctx:t,thinLineWidth:o}=e,{x:s,y:n,width:i,height:r}=this.getters.getVisibleRect(this.autofillZone);i>0&&r>0&&(t.strokeStyle="black",t.lineWidth=o,t.setLineDash([3]),t.strokeRect(s,n,i,r),t.setLineDash([]))}}).add("find_and_replace",class extends Jx{static layers=[3];static getters=["getSearchMatches","getCurrentSelectedMatchIndex","getSearchOptions","getAllSheetMatchesCount","getActiveSheetMatchesCount","getSpecificRangeMatchesCount"];allSheetsMatches=[];activeSheetMatches=[];specificRangeMatches=[];selectedMatchIndex=null;currentSearchRegex=null;searchOptions={matchCase:!1,exactMatch:!1,searchFormulas:!1,searchScope:"allSheets",specificRange:void 0};toSearch="";isSearchDirty=!1;get searchMatches(){switch(this.searchOptions.searchScope){case"allSheets":return this.allSheetsMatches;case"activeSheet":return this.activeSheetMatches;case"specificRange":return this.specificRangeMatches}}handle(e){switch(e.type){case"UPDATE_SEARCH":const t=e.searchOptions.specificRange,o=t&&this.getters.getRangeFromRangeData(t);this.updateSearch(e.toSearch,{...e.searchOptions,specificRange:o});break;case"CLEAR_SEARCH":this.clearSearch();break;case"SELECT_SEARCH_PREVIOUS_MATCH":this.selectNextCell(XI.previous);break;case"SELECT_SEARCH_NEXT_MATCH":this.selectNextCell(XI.next);break;case"REPLACE_SEARCH":this.replace(e.replaceWith);break;case"REPLACE_ALL_SEARCH":this.replaceAll(e.replaceWith);break;case"UNDO":case"REDO":case"REMOVE_FILTER_TABLE":case"UPDATE_FILTER":case"REMOVE_COLUMNS_ROWS":case"HIDE_COLUMNS_ROWS":case"UNHIDE_COLUMNS_ROWS":case"ADD_COLUMNS_ROWS":case"EVALUATE_CELLS":case"UPDATE_CELL":this.isSearchDirty=!0;break;case"ACTIVATE_SHEET":"activeSheet"===this.searchOptions.searchScope&&(this.isSearchDirty=!0)}}finalize(){this.isSearchDirty&&(this.refreshSearch(),this.isSearchDirty=!1)}getSearchMatches(){return this.searchMatches}getCurrentSelectedMatchIndex(){return this.selectedMatchIndex}getSearchOptions(){return{...this.searchOptions,specificRange:this.searchOptions.specificRange?.rangeData}}getAllSheetMatchesCount(){return this.allSheetsMatches.length}getActiveSheetMatchesCount(){return this.activeSheetMatches.length}getSpecificRangeMatchesCount(){return this.specificRangeMatches.length}updateSearch(e,t){this.searchOptions=t,e!==this.toSearch&&(this.selectedMatchIndex=null),this.toSearch=e,this.updateRegex(),this.refreshSearch()}refreshSearch(){this.selectedMatchIndex=null,this.findMatches(),this.selectNextCell(XI.current)}updateRegex(){let e=ae(this.toSearch);const t=this.searchOptions.matchCase?"":"i";this.searchOptions.exactMatch&&(e=`^${e}$`),this.currentSearchRegex=RegExp(e,t)}getSheetsInSearchOrder(){switch(this.searchOptions.searchScope){case"allSheets":const e=this.getters.getSheetIds(),t=e.findIndex((e=>e===this.getters.getActiveSheetId()));return[e[t],...e.slice(t+1),...e.slice(0,t)];case"activeSheet":return[this.getters.getActiveSheetId()];case"specificRange":const o=this.searchOptions.specificRange;return o&&o?[o.sheetId]:[]}}findMatches(){const e=[];if(this.toSearch)for(const t of this.getters.getSheetIds())e.push(...this.findMatchesInSheet(t));if(this.allSheetsMatches=e,this.activeSheetMatches=e.filter((e=>e.sheetId===this.getters.getActiveSheetId())),this.searchOptions.specificRange){const{sheetId:t,zone:o}=this.searchOptions.specificRange;this.specificRangeMatches=e.filter((e=>e.sheetId===t&&bn(e.col,e.row,o)))}else this.specificRangeMatches=[]}findMatchesInSheet(e){const t=[],{left:o,right:s,top:n,bottom:i}=this.getters.getSheetZone(e);for(let r=n;r<=i;r++)for(let n=o;n<=s;n++){const o=this.getters.isColHidden(e,n),s=this.getters.isRowHidden(e,r);if(o||s)continue;const i={sheetId:e,col:n,row:r};if(this.currentSearchRegex?.test(this.getSearchableString(i))){const o={sheetId:e,col:n,row:r};t.push(o)}}return t}selectNextCell(e){const t=this.searchMatches;if(!t.length)return void(this.selectedMatchIndex=null);let o;if(null===this.selectedMatchIndex){let e=-1;for(const o of this.getSheetsInSearchOrder())if(e=t.findIndex((e=>e.sheetId===o)),-1!==e)break;o=e}else o=this.selectedMatchIndex+e;o=(o+t.length)%t.length,this.selectedMatchIndex=o;const s=t[o];this.getters.getActiveSheetId()!==s.sheetId&&this.dispatch("ACTIVATE_SHEET",{sheetIdFrom:this.getters.getActiveSheetId(),sheetIdTo:s.sheetId}),this.selection.getBackToDefault(),this.selection.selectCell(s.col,s.row)}clearSearch(){this.toSearch="",this.selectedMatchIndex=null,this.currentSearchRegex=null,this.allSheetsMatches=[],this.activeSheetMatches=[],this.specificRangeMatches=[],this.searchOptions={matchCase:!1,exactMatch:!1,searchFormulas:!1,searchScope:"allSheets",specificRange:void 0}}replaceMatch(e,t){if(!this.currentSearchRegex)return;const o=this.getters.getCell(e);if(!o?.content)return;if(o?.isFormula&&!this.searchOptions.searchFormulas)return;const s=new RegExp(this.currentSearchRegex.source,this.currentSearchRegex.flags+"g"),n=ea(this.getSearchableString(e).replace(s,t),this.getters.getLocale());this.dispatch("UPDATE_CELL",{...e,content:n})}replace(e){if(null===this.selectedMatchIndex)return;const t=this.searchMatches[this.selectedMatchIndex];this.replaceMatch(t,e),this.selectNextCell(XI.next)}replaceAll(e){const t=this.searchMatches.length;for(let o=0;o<t;o++)this.replaceMatch(this.searchMatches[o],e)}getSearchableString(e){return this.getters.getCellText(e,this.searchOptions.searchFormulas)}drawGrid(e){const{ctx:t}=e,o=this.getters.getActiveSheetId();for(const[e,s]of this.searchMatches.entries()){if(s.sheetId!==o)continue;const n=this.getters.getMerge({sheetId:o,col:s.col,row:s.row}),i=n?n.left:s.col,r=n?n.right:s.col,a=n?n.top:s.row,l=n?n.bottom:s.row,{x:c,y:h,width:d,height:u}=this.getters.getVisibleRect({top:a,left:i,right:r,bottom:l});d>0&&u>0&&(t.fillStyle="#8B008B33",t.fillRect(c,h,d,u),e===this.selectedMatchIndex&&(t.strokeStyle=jI,t.strokeRect(c,h,d,u)))}if("specificRange"===this.searchOptions.searchScope){const e=this.searchOptions.specificRange;if(!e||e.sheetId!==o)return;const{x:s,y:n,width:i,height:r}=this.getters.getVisibleRect(e.zone);t.strokeStyle=jI,t.strokeRect(s,n,i,r)}}}).add("sort",class extends Jx{allowDispatch(e){if("SORT_CELLS"===e.type){if(!bn(e.col,e.row,e.zone))throw new Error(Xt("The anchor must be part of the provided zone"));return this.checkValidations(e,this.checkMerge,this.checkMergeSizes)}return"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 xn(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=>vn(e,t))),s=wn(o[0]);let[n,i]=[s.numberOfCols,s.numberOfRows];return o.every((e=>{let[t,o]=[e.right-e.left+1,e.bottom-e.top+1];return t===n&&o===i}))?"Success":"InvalidSortZone"}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]===Qt.empty&&(o=o.slice(1)),!o.some((e=>e[0]===Qt.empty))&&!!o.some((e=>e[1]!==Qt.empty&&e[0]!==e[1]))}sortZone(e,t,o,s,n){const[i,r]=this.mainCellsSteps(e,o);let a=this.getters.getMainCellPosition({sheetId:e,col:t.col,row:t.row}).col,l=Object.assign({},o),c=this.mainCells(e,o);!n.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===Qt.empty?{...e,type:Qt.number,value:0}:e)):s).sort(Ag(t))}(c[a-l.left].map((e=>this.getters.getEvaluatedCell(e))),s,Boolean(n.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++){let{col:o,row:s,sheetId:n}=c[e][d[t]];const a=this.getters.getCell({sheetId:n,col:o,row:s});let h=l.left+e*i,u=l.top+t*r,g={sheetId:n,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(n,0,u-t.row,a.compiledFormula)}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),n=[],i=ue(t.left,t.right+1,o),r=ue(t.top,t.bottom+1,s);for(const t of i){const o=[];n.push(o);for(const s of r)o.push({sheetId:e,col:t,row:s})}return n}}).add("automatic_sum",class extends Jx{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:n}=bn(o.col,o.row,t)?o:{col:t.left,row:t.top},i=this.findAdjacentData(e,s,n);return i?this.getters.isSingleCellOrMerge(e,t)||yn(pn(i,t))?[{position:{col:s,row:n},zone:i}]:this.sumDimensions(e,pn(i,t),this.transpose(this.dimensionsToSum(e,t))):[]}findAdjacentData(e,t,o){const s=this.getters.getSheet(e),n=this.getters.getMainCellPosition({sheetId:e,col:t,row:o}),i=this.findSuitableZoneToSum(s,n.col,n.row);if(i)return this.getters.expandZone(e,i)}findSuitableZoneToSum(e,t,o){const s=this.getters.getEvaluatedCell({sheetId:e.id,col:t,row:o-1}),n=this.getters.getEvaluatedCell({sheetId:e.id,col:t-1,row:o});if(this.isNumber(n)&&!this.isNumber(s))return this.findHorizontalZone(e,t,o);const i=this.findVerticalZone(e,t,o);if(this.isZoneValid(i))return i;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},n=this.reduceZoneStart(e,s,s.bottom);return{...s,top:n}}findHorizontalZone(e,t,o){const s={top:o,bottom:o,left:0,right:t-1},n=this.reduceZoneStart(e,s,s.right);return{...s,left:n}}reduceZoneStart(e,t,o){const s=this.getters.getEvaluatedCellsInZone(e.id,t),n=ue(o,-1,-1),i=n.filter((e=>s[e]&&!s[e].isAutoSummable)),r=Math.max(...i),a=ge(n.filter((e=>this.isNumber(s[e]))))[0]||[];return Math.max(...a)<r?1/0:Math.min(...a)}shouldFindData(e,t){return this.getters.isEmpty(e,t)||this.getters.isSingleCellOrMerge(e,t)}isNumber(e){return e.type===Qt.number&&!(e.format&&Rs(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 yn(t)?(o.add(1===wn(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)},xn(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)},xn(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:n}=t;for(;!this.getters.isEmpty(e,{bottom:o,top:o,left:s,right:n});)o++;return{...t,top:o,bottom:o}}nextEmptyCol(e,t){let o=t.right+1;const{top:s,bottom:n}=t;for(;!this.getters.isEmpty(e,{left:o,right:o,top:s,bottom:n});)o++;return{...t,left:o,right:o}}transpose(e){return new Set([...e.values()].map((e=>"COL"===e?"ROW":"COL")))}}).add("format",class extends Jx{handle(e){if("SET_DECIMAL"===e.type)this.setDecimal(e.sheetId,e.target,e.step)}setDecimal(e,t,o){for(const s of t)for(const t of xn(s)){const s=this.getCellNumberFormat({sheetId:e,...t});if(void 0!==s){this.getters.getLocale();const n=Vs(s,o);this.dispatch("SET_FORMATTING",{sheetId:e,target:[An(t)],format:n})}}}getCellNumberFormat(e){for(const t of[e]){const e=this.getters.getEvaluatedCell(t);if(!(e.type!==Qt.number||e.format&&Rs(e.format)))return e.format||Ns(e.value)}}}).add("split_to_columns",class extends Jx{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===Qt.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(),n=this.getSplittedCols(o,e);t&&this.addColsToAvoidCollisions(o,n),this.removeMergesInSplitZone(o,n),this.addColumnsToNotOverflowSheet(o,n);for(let e=0;e<n.length;e++){const t=o.top+e,i=n[e],r=o.left,a=this.getters.getCell({sheetId:s,col:r,row:t});if(1!==i.length||i[0]!==a?.content)for(const[e,o]of i.entries())this.dispatch("UPDATE_CELL",{sheetId:s,col:r+e,row:t,content:ea(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 n of ue(e.top,e.bottom+1)){const i=this.getters.getEvaluatedCell({sheetId:o,col:e.left,row:n}).formattedValue;s.push(this.splitAndRemoveTrailingEmpty(i,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 ue(e.top,e.bottom+1)){const n=t[s-e.top];for(let t=1;t<n.length;t++){const n=this.getters.getCell({sheetId:o,col:e.left+t,row:s});if(n&&n.content)return!0}}return!1}removeMergesInSplitZone(e,t){const o=this.getters.getActiveSheetId(),s=Math.max(...t.map((e=>e.length))),n={...e,right:e.left+s-1},i=this.getters.getMergesInZone(o,n);this.dispatch("REMOVE_MERGE",{sheetId:o,target:i})}addColsToAvoidCollisions(e,t){const o=this.getters.getActiveSheetId();let s=0;for(const n of ue(e.top,e.bottom+1)){const i={sheetId:o,col:e.left,row:n},r=t[n-e.top],a=this.getColsToAddToAvoidCollision(i,r);s=Math.max(s,a)}s&&this.dispatch("ADD_COLUMNS_ROWS",{dimension:"COL",base:e.left,sheetId:o,quantity:s,position:"after"})}getColsToAddToAvoidCollision(e,t){const o=t.length;for(let t=1;t<o;t++){const s=e.col+t,n=this.getters.getCell({...e,col:s});if(n&&n.content)return o-t}return 0}addColumnsToNotOverflowSheet(e,t){const o=this.getters.getActiveSheetId(),s=Math.max(...t.map((e=>e.length-1))),n=this.getters.getNumberCols(o)-1;e.left+s>n&&this.dispatch("ADD_COLUMNS_ROWS",{dimension:"COL",base:n,sheetId:o,quantity:e.left+s-n,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("cell_popovers",class extends Jx{static getters=["getCellPopover","getPersistentPopoverTypeAtPosition","hasOpenedPopover"];persistentPopover;allowDispatch(e){if("OPEN_CELL_POPOVER"===e.type){try{ya.get(e.popoverType)}catch(e){return"InvalidCellPopover"}return"Success"}return"Success"}handle(e){switch(e.type){case"ACTIVATE_SHEET":case"CLOSE_CELL_POPOVER":this.persistentPopover=void 0;break;case"OPEN_CELL_POPOVER":this.persistentPopover={col:e.col,row:e.row,sheetId:this.getters.getActiveSheetId(),type:e.popoverType}}}getCellPopover({col:e,row:t}){const o=this.getters.getActiveSheetId();if(this.persistentPopover&&this.getters.isVisibleInViewport(this.persistentPopover)){const e=this.getters.getMainCellPosition(this.persistentPopover),t=ya.get(this.persistentPopover.type).onOpen?.(e,this.getters);return t?.isOpen?{...t,anchorRect:this.computePopoverAnchorRect(this.persistentPopover)}:{isOpen:!1}}if(void 0===e||void 0===t||!this.getters.isVisibleInViewport({sheetId:o,col:e,row:t}))return{isOpen:!1};const s=this.getters.getMainCellPosition({sheetId:o,col:e,row:t}),n=ya.getAll().map((e=>e.onHover?.(s,this.getters))).find((e=>e?.isOpen));return n?.isOpen?{...n,anchorRect:this.computePopoverAnchorRect(s)}:{isOpen:!1}}hasOpenedPopover(){return void 0!==this.persistentPopover}getPersistentPopoverTypeAtPosition({col:e,row:t}){if(this.persistentPopover&&this.persistentPopover.col===e&&this.persistentPopover.row===t)return this.persistentPopover.type}computePopoverAnchorRect({col:e,row:t}){const o=this.getters.getActiveSheetId(),s=this.getters.getMerge({sheetId:o,col:e,row:t});return s?this.getters.getVisibleRect(s):this.getters.getVisibleRect(An({col:e,row:t}))}}).add("collaborative",class extends Jx{static getters=["getClientsToDisplay","getClient","getConnectedClients","isFullySynchronized"];static layers=[6];availableColors=new Set(qI);colors={};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)}chooseNewColor(){0===this.availableColors.size&&(this.availableColors=new Set(qI));const e=(t=[...this.availableColors.values()])[Math.floor(Math.random()*t.length)];var t;return this.availableColors.delete(e),e}getClient(){return this.session.getClient()}getConnectedClients(){return this.session.getConnectedClients()}isFullySynchronized(){return this.session.isFullySynchronized()}getClientsToDisplay(){try{this.getters.getClient()}catch(e){if(e instanceof $I)return[];throw e}const e=this.getters.getActiveSheetId(),t=[];for(const o of this.getters.getConnectedClients())if(o.id!==this.getters.getClient().id&&o.position&&o.position.sheetId===e&&this.isPositionValid(o.position)){const e=o.position;this.colors[o.id]||(this.colors[o.id]=this.chooseNewColor());const s=this.colors[o.id];t.push({...o,position:e,color:s})}return t}drawGrid(e){if(this.getters.isDashboard())return;const{ctx:t,thinLineWidth:o}=e,s=this.getters.getActiveSheetId();for(const e of this.getClientsToDisplay()){const{row:n,col:i}=e.position,r=this.getters.expandZone(s,{top:n,bottom:n,left:i,right:i}),{x:a,y:l,width:c,height:h}=this.getters.getVisibleRect(r);if(c<=0||h<=0)continue;const d=e.color,u=`${d}10`;t.fillStyle=u,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 ${B+1}px ${H}`}}}).add("history",class extends Jx{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("pending-revisions-dropped",this,(({revisionIds:e})=>this.drop(e))),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=hR(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)&&(io(t.rootCommand)?rR.contains(t.rootCommand.type):aR.contains(t.rootCommand.type));var t}drop(e){this.undoStack=this.undoStack.filter((t=>!e.includes(t))),this.redoStack=[]}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 Jx{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 n=this.getUniqueRowsIndexes(o,s.top,s.bottom,e),i=n.length;if(i===wn(s).numberOfRows)return void this.notifyRowsRemovedAndRemaining(0,i);const r=n.map((e=>({left:s.left,top:e,right:s.right,bottom:e}))),a=new YI(r,"COPY",this.getters,this.dispatch,this.selection);for(const{col:e,row:t}of xn(s))this.dispatch("CLEAR_CELL",{col:e,row:t,sheetId:o});const l={left:s.left,top:s.top,right:s.left,bottom:s.top};a.paste([l]);const c={left:s.left,top:s.top-(t?1:0),right:s.right,bottom:s.top+i-1};this.selection.selectZone({cell:{col:c.left,row:c.top},zone:c});const h=s.bottom-s.top+1-i;this.notifyRowsRemovedAndRemaining(h,i)}getUniqueRowsIndexes(e,t,o,s){const n=new Map;for(const i of ue(t,o+1)){const t=s.map((t=>this.getters.getEvaluatedCell({sheetId:e,col:t,row:i}).value));!Object.values(n).some((e=>Fe(e,t)))&&(n[i]=t)}return Object.keys(n).map((e=>parseInt(e)))}notifyRowsRemovedAndRemaining(e,t){this.ui.notifyUI({type:"info",text:Xt("%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=this.getters.getSelectedZones(),t=this.getters.getActiveSheetId();let o=0;for(const{col:s,row:n}of e.map(xn).flat()){const e=this.getters.getCell({col:s,row:n,sheetId:t});if(!e)continue;const i=Ge(e.content);i!==e.content&&(o+=1,this.dispatch("UPDATE_CELL",{sheetId:t,col:s,row:n,content:i}))}const s=o?Xt("Trimmed whitespace from %s cells.",o):Xt("No selected cells had whitespace trimmed.");this.ui.notifyUI({type:"info",text:s,sticky:!1})}}),ER=(new Pi).add("selection",class extends Jx{static layers=[6];static getters=["getActiveSheet","getActiveSheetId","getActiveCell","getActiveCols","getActiveRows","getCurrentStyle","getSelectedZones","getSelectedZone","getSelectedCells","getStatisticFnResults","getAggregate","getSelectedFigureId","getSelection","getActivePosition","getSheetPosition","isSelected","isSingleColSelected","getElementsFromSelection","tryGetActiveSheetId","isGridSelectionActive"];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;activeSheet=null;constructor(e){super(e),this.moveClient=e.moveClient}allowDispatch(e){switch(e.type){case"ACTIVATE_SHEET":try{this.getters.getSheet(e.sheetIdTo);break}catch(e){return"InvalidSheetId"}case"MOVE_COLUMNS_ROWS":return this.isMoveElementAllowed(e)}return"Success"}handleEvent(e){const t=e.anchor;let o=[];switch(e.mode){case"overrideSelection":o=[t.zone];break;case"updateAnchor":o=[...this.gridSelection.zones];const s=o.findIndex((t=>fn(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,le(this.gridSelection.anchor));const{col:s,row:n}=this.gridSelection.anchor.cell;this.moveClient({sheetId:this.getters.getActiveSheetId(),col:s,row:n}),this.selectedFigureId=null}handle(e){switch(e.type){case"START_EDITION":case"ACTIVATE_SHEET":this.selectedFigureId=null;break;case"DELETE_FIGURE":this.selectedFigureId===e.id&&(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.id;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 n=Object.keys(this.sheetsData).filter((e=>!this.getters.tryGetSheet(e)));for(const e of n)delete this.sheetsData[e];for(const e in this.sheetsData){const t=this.clipSelection(e,this.sheetsData[e].gridSelection);this.sheetsData[e]={gridSelection:le(t)}}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})}const i=this.getters.getActiveSheetId();this.gridSelection.zones=this.gridSelection.zones.map((e=>this.getters.expandZone(i,e))),this.gridSelection.anchor.zone=this.getters.expandZone(i,this.gridSelection.anchor.zone),this.setSelectionMixin(this.gridSelection.anchor,this.gridSelection.zones)}this.selection.resetDefaultAnchor(this,le(this.gridSelection.anchor))}isGridSelectionActive(){return this.selection.isListening(this)}getActiveSheet(){return this.activeSheet}getActiveSheetId(){return this.activeSheet.id}tryGetActiveSheetId(){return this.activeSheet?.id}getActiveCell(){return this.getters.getEvaluatedCell(this.getActivePosition())}getActiveCols(){const e=new Set;for(let 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(let 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 le(this.gridSelection.zones)}getSelectedZone(){return le(this.gridSelection.anchor.zone)}getSelection(){return le(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})}}getStatisticFnResults(){const e=this.getters.getActiveSheetId(),t=new Set;for(const o of this.gridSelection.zones)for(const{col:s,row:n}of xn(o)){if(this.getters.isRowHidden(e,n)||this.getters.isColHidden(e,s))continue;const o=this.getters.getEvaluatedCell({sheetId:e,col:s,row:n});o.type!==Qt.empty&&t.add(o)}const o=this.getters.getLocale();let s={};for(let e of vR){let n;const i=[...t].filter((t=>e.types.includes(t.type)));i.length&&(n=e.compute(i,o)),s[e.name]=n}return s}getAggregate(){let e=0,t=0;const o=this.getters.getActiveSheetId(),s=this.gridSelection.zones.map(xn).flat();for(const{col:n,row:i}of s){const s=this.getters.getEvaluatedCell({sheetId:o,col:n,row:i});s.type===Qt.number&&(t++,e+=s.value)}const n=this.getters.getLocale();return t<2?null:Ss(e,{locale:n})}isSelected(e){return!!this.getters.getSelectedZones().find((t=>fn(t,e)))}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",n="COL"===e?"right":"bottom";for(const e of t){const t=Array.from({length:e[n]-e[s]+1},((t,o)=>e[s]+o));o=o.concat(t)}return[...new Set(o)].sort()}activateSheet(e,t){if(this.getters.isSheetVisible(t)||this.dispatch("SHOW_SHEET",{sheetId:t}),this.setActiveSheet(t),this.sheetsData[e]={gridSelection:le(this.gridSelection)},t in this.sheetsData)Object.assign(this,this.sheetsData[t]),this.selection.resetDefaultAnchor(this,le(this.gridSelection.anchor));else{const{col:e,row:o}=this.getters.getNextVisibleCellPosition({sheetId:t,col:0,row:0});this.selectCell(e,o)}}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){const t=this.getters.getSheet(e);this.activeSheet=t}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=un(o,"left",[...e.elements]);let n={left:t.col,right:t.col,top:t.row,bottom:t.row};n=un(n,"left",[...e.elements]);const i={cell:{col:n.left,row:n.top},zone:s},r=this.gridSelection.zones.map((t=>un(t,"left",[...e.elements])));this.setSelectionMixin(i,r)}onRowsRemoved(e){const{cell:t,zone:o}=this.gridSelection.anchor,s=un(o,"top",[...e.elements]);let n={left:t.col,right:t.col,top:t.row,bottom:t.row};n=un(n,"top",[...e.elements]);const i={cell:{col:n.left,row:n.top},zone:s},r=this.gridSelection.zones.map((t=>un(t,"top",[...e.elements])));this.setSelectionMixin(i,r)}onAddElements(e){const t="COL"===e.dimension?"left":"top",o=dn(this.gridSelection.anchor.zone,t,e.base,e.position,e.quantity),s=this.gridSelection.zones.map((o=>dn(o,t,e.base,e.position,e.quantity))),n={cell:{col:o.left,row:o.top},zone:o};this.setSelectionMixin(n,s)}onMoveElements(e){const t=e.elements.length;this.dispatch("ADD_COLUMNS_ROWS",{dimension:e.dimension,sheetId:e.sheetId,base:e.base,quantity:t,position:e.position});const o="COL"===e.dimension,s=e.elements[0],n=e.elements[t-1],i=e.base<s,r=i&&o?t:0,a=i&&!o?t:0,l=[{left:o?s+r:0,right:o?n+r:this.getters.getNumberCols(e.sheetId)-1,top:o?0:s+a,bottom:o?this.getters.getNumberRows(e.sheetId)-1:n+a}],c=new YI(l,"CUT",this.getters,this.dispatch,this.selection),h=i?e.base:e.base+1,d=[{left:o?h:0,right:o?h+t-1:this.getters.getNumberCols(e.sheetId)-1,top:o?0:h,bottom:o?this.getters.getNumberRows(e.sheetId)-1:h+t-1}];c.paste(d,{selectTarget:!0});const u=i?e.elements.map((e=>e+t)):e.elements;let g=e.base;for(const t of u){const o=this.getters.getHeaderSize(e.sheetId,e.dimension,t);this.dispatch("RESIZE_COLUMNS_ROWS",{dimension:e.dimension,sheetId:e.sheetId,size:o,elements:[g]}),g+=1}this.dispatch("REMOVE_COLUMNS_ROWS",{dimension:e.dimension,sheetId:e.sheetId,elements:u})}isMoveElementAllowed(e){const t="COL"===e.dimension,o=e.elements[0],s=e.elements[e.elements.length-1],n=e.sheetId,i=t?this.getters.doesColumnsHaveCommonMerges:this.getters.doesRowsHaveCommonMerges;if(i(n,o-1,o)||i(n,s,s+1)||i(n,e.base-1,e.base))return"WillRemoveExistingMerge";const r=[e.base,...e.elements],a=t?this.getters.getNumberCols(n):this.getters.getNumberRows(n);return r.some((e=>e<0||e>=a))?"InvalidHeaderIndex":"Success"}clipSelection(e,t){const o=this.getters.getNumberCols(e)-1,s=this.getters.getNumberRows(e)-1;return{zones:t.zones.map((e=>({left:de(e.left,0,o),right:de(e.right,0,o),top:de(e.top,0,s),bottom:de(e.bottom,0,s)}))),anchor:{cell:{col:de(t.anchor.cell.col,0,o),row:de(t.anchor.cell.row,0,s)},zone:{left:de(t.anchor.zone.left,0,o),right:de(t.anchor.zone.right,0,o),top:de(t.anchor.zone.top,0,s),bottom:de(t.anchor.zone.bottom,0,s)}}}}drawGrid(e){if(this.getters.isDashboard())return;const{ctx:t,thinLineWidth:o}=e,s=this.getSelectedZones();t.fillStyle="#f3f7fe";const n=1===s.length&&s[0].left===s[0].right&&s[0].top===s[0].bottom;t.fillStyle=n?"#f3f7fe":"#e9f0ff",t.strokeStyle=c,t.lineWidth=1.5*o;for(const e of s){const{x:o,y:s,width:n,height:i}=this.getters.getVisibleRect(e);t.globalCompositeOperation="multiply",t.fillRect(o,s,n,i),t.globalCompositeOperation="source-over",t.strokeRect(o,s,n,i)}t.globalCompositeOperation="source-over";const i=this.getActivePosition();let r;t.strokeStyle=c,t.lineWidth=3*o,r=this.getters.isInMerge(i)?this.getters.getMerge(i):An(i);const{x:a,y:l,width:h,height:d}=this.getters.getVisibleRect(r);h>0&&d>0&&t.strokeRect(a,l,h,d)}}).add("evaluation_filter",class extends Jx{static getters=["getCellBorderWithFilterBorder","getFilterValues","isRowFiltered","isFilterActive"];filterValues={};hiddenRows=new Set;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_FILTER_TABLE":case"ADD_COLUMNS_ROWS":case"REMOVE_COLUMNS_ROWS":this.isEvaluationDirty=!0;break;case"START":for(const e of this.getters.getSheetIds()){this.filterValues[e]={};for(const t of this.getters.getFilters(e))this.filterValues[e][t.id]=[]}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":this.updateHiddenRows();break;case"UPDATE_FILTER":this.updateFilter(e),this.updateHiddenRows();break;case"DUPLICATE_SHEET":const t={};for(const o of this.getters.getFilters(e.sheetIdTo)){const s=o.zoneWithHeaders;t[o.id]=this.getFilterValues({sheetId:e.sheetId,col:s.left,row:s.top})}this.filterValues[e.sheetIdTo]=t}}finalize(){this.isEvaluationDirty&&(this.updateHiddenRows(),this.isEvaluationDirty=!1)}isRowFiltered(e,t){return e===this.getters.getActiveSheetId()&&this.hiddenRows.has(t)}getCellBorderWithFilterBorder(e){const{sheetId:t,col:o,row:s}=e;let n;for(let e of this.getters.getFilterTables(t)){const i=e.zone;if(bn(o,s,i)){const e=this.intersectZoneWithViewport(t,i);n={top:s===e.top?$:void 0,bottom:s===e.bottom?$:void 0,left:o===e.left?$:void 0,right:o===e.right?$:void 0}}}const i=this.getters.getCellBorder(e),r={...n,...Le(i||{})};return Te(r)?null:r}getFilterValues(e){const t=this.getters.getFilterId(e),o=e.sheetId;return t&&this.filterValues[o]&&this.filterValues[o][t]||[]}isFilterActive(e){const t=this.getters.getFilterId(e),o=e.sheetId;return Boolean(t&&this.filterValues[o]?.[t]?.length)}intersectZoneWithViewport(e,t){return{left:this.getters.findVisibleHeader(e,"COL",t.left,t.right),right:this.getters.findVisibleHeader(e,"COL",t.right,t.left),top:this.getters.findVisibleHeader(e,"ROW",t.top,t.bottom),bottom:this.getters.findVisibleHeader(e,"ROW",t.bottom,t.top)}}updateFilter({col:e,row:t,hiddenValues:o,sheetId:s}){const n=this.getters.getFilterId({sheetId:s,col:e,row:t});n&&(this.filterValues[s]||(this.filterValues[s]={}),this.filterValues[s][n]=o)}updateHiddenRows(){const e=this.getters.getActiveSheetId(),t=this.getters.getFilters(e).sort(((e,t)=>e.zoneWithHeaders.top-t.zoneWithHeaders.top)),o=new Set;for(let s of t){if(o.has(s.zoneWithHeaders.top)||this.getters.isRowHiddenByUser(e,s.zoneWithHeaders.top))continue;const t=this.filterValues[e]?.[s.id]?.map(Yn);if(t&&s.filteredZone)for(let n=s.filteredZone.top;n<=s.filteredZone.bottom;n++){const i=this.getCellValueAsString(e,s.col,n);t.includes(i)&&o.add(n)}}this.hiddenRows=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.filterTables){const s=rn(o.range),n=[],i=[];for(const o of ue(0,wn(s).numberOfCols)){const r={sheetId:t.id,col:s.left+o,row:s.top},a=this.getFilterValues(r),l=this.getters.getFilter(r);if(!l)continue;const c=l.filteredZone?xn(l.filteredZone).map((t=>this.getters.getEvaluatedCell({sheetId:e,...t}).formattedValue)):[];if(a.length){const e=c.filter((e=>e)).filter((e=>!a.includes(e)));n.push({colId:o,displayedValues:[...new Set(e)],displayBlanks:!a.includes("")&&c.some((e=>!e))})}const h={col:l.col,row:l.zoneWithHeaders.top,sheetId:e},d=this.getters.getEvaluatedCell(h).formattedValue,u=this.getUniqueColNameForExcel(o,d,i);i.push(u),t.cells[ut(h.col,h.row)]={...t.cells[ut(h.col,h.row)],content:u,value:u,isFormula:!1}}o.filters=n}}}getUniqueColNameForExcel(e,t,o){t||(t=`Column${e}`);let s=t,n=2;for(;o.includes(s);)s=t+String(n),n++;return s}}).add("header_visibility_ui",class extends Jx{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 n=o;n<=s;n++)if(this.getters.doesHeaderExist(e,t,n)&&!this.isHeaderHidden(e,t,n))return n;if(o>s)for(let n=o;n>=s;n--)if(this.getters.doesHeaderExist(e,t,n)&&!this.isHeaderHidden(e,t,n))return n}findLastVisibleColRowIndex(e,t,{last:o,first:s}){return ue(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)){const s=this.isRowHidden(t.id,Number(e));o.isHidden=s}}}).add("header_positions",class extends Jx{static getters=["getColDimensions","getRowDimensions","getColRowOffset"];headerPositions={};isDirty=!0;handle(e){switch(eo.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":"content"in e||"format"in e?(this.headerPositions={},this.isDirty=!0):this.headerPositions[e.sheetId]=this.computeHeaderPositionsOfSheet(e.sheetId);break;case"UPDATE_FILTER":case"REMOVE_FILTER_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.headerPositions[e.sheetId]=this.computeHeaderPositionsOfSheet(e.sheetId);break;case"DUPLICATE_SHEET":this.headerPositions[e.sheetIdTo]=le(this.headerPositions[e.sheetId])}}finalize(){if(this.isDirty){for(const e of this.getters.getSheetIds())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 n=this.headerPositions[s][e][t];return this.headerPositions[s][e][o]-n}computeHeaderPositionsOfSheet(e){return{COL:this.computePositions(e,"COL"),ROW:this.computePositions(e,"ROW")}}computePositions(e,t){const o={};let s=0;for(let n=0;n<this.getters.getNumberHeaders(e,t)+1;n++)o[n]=s,this.getters.isHeaderHidden(e,t,n)||(s+=this.getters.getHeaderSize(e,t,n));return o}}).add("viewport",class extends Jx{static getters=["getColIndex","getRowIndex","getActiveMainViewport","getSheetViewDimension","getSheetViewDimensionWithHeaders","getMainViewportRect","isVisibleInViewport","getEdgeScrollCol","getEdgeScrollRow","getVisibleFigures","getVisibleRect","getColRowOffsetInViewport","getMainViewportCoordinates","getActiveSheetScrollInfo","getActiveSheetDOMScrollInfo","getSheetViewVisibleCols","getSheetViewVisibleRows","getFrozenSheetViewRatio","isPositionVisible"];viewports={};sheetViewWidth=se();sheetViewHeight=se();gridOffsetX=0;gridOffsetY=0;sheetsWithDirtyViewports=new Set;shouldAdjustViewports=!1;allowDispatch(e){switch(e.type){case"SET_VIEWPORT_OFFSET":return this.checkScrollingDirection(e);case"RESIZE_SHEETVIEW":return this.chainValidations(this.checkValuesAreDifferent,this.checkPositiveDimension)(e);default:return"Success"}}handleEvent(e){if(e.options.scrollIntoView){let{col:t,row:o}=Rn(e.previousAnchor.zone,e.anchor.zone);if("updateAnchor"===e.mode){const s=e.previousAnchor.zone,n=e.anchor.zone,{top:i,bottom:r,left:a,right:l}=this.getters.getActiveMainViewport();s.left===n.left&&s.right===n.right&&(t=a>t||t>l?a:t),s.top===n.top&&s.bottom===n.bottom&&(o=i>o||o>r?i:o)}const s=this.getters.getActiveSheetId();t=Math.min(t,this.getters.getNumberCols(s)-1),o=Math.min(o,this.getters.getNumberRows(s)-1),this.sheetsWithDirtyViewports.has(s)||this.refreshViewport(this.getters.getActiveSheetId(),{col:t,row:o})}}handle(e){if(this.cleanViewports(),eo.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":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{top:t}=this.getActiveMainViewport(),o=this.getters.getActiveSheetId(),s=this.clipOffsetY(this.getters.getRowDimensions(o,t).start+this.sheetViewHeight);this.shiftVertically(s);break;case"SHIFT_VIEWPORT_UP":{const{top:e}=this.getActiveMainViewport(),t=this.getters.getActiveSheetId(),o=this.clipOffsetY(this.getters.getRowDimensions(t,e).end-this.sheetViewHeight);this.shiftVertically(o);break}case"REMOVE_FILTER_TABLE":case"UPDATE_FILTER":this.sheetsWithDirtyViewports.add(e.sheetId);break;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":{const t="sheetId"in e?e.sheetId:this.getters.getActiveSheetId();this.sheetsWithDirtyViewports.add(t);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"ACTIVATE_SHEET":this.sheetsWithDirtyViewports.add(e.sheetIdTo);break;case"UNFREEZE_ROWS":case"UNFREEZE_COLUMNS":case"FREEZE_COLUMNS":case"FREEZE_ROWS":case"UNFREEZE_COLUMNS_ROWS":this.resetViewports(this.getters.getActiveSheetId());break;case"DELETE_SHEET":this.sheetsWithDirtyViewports.delete(e.sheetId);break;case"START_EDITION":const{col:n,row:i}=this.getters.getActivePosition();this.refreshViewport(this.getters.getActiveSheetId(),{col:n,row:i})}}finalize(){for(const e of this.sheetsWithDirtyViewports)if(this.resetViewports(e),this.shouldAdjustViewports){const t=this.getters.getSheetPosition(e),o=this.getSubViewports(e);Object.values(o).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}}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}}getActiveSheetDOMScrollInfo(){const e=this.getters.getActiveSheetId(),t=this.getMainInternalViewport(e);return{scrollX:t.offsetScrollbarX,scrollY:t.offsetScrollbarY}}getSheetViewVisibleCols(){const e=this.getters.getActiveSheetId(),t=this.getSubViewports(e);return[...new Set(t.map((e=>ue(e.left,e.right+1))).flat())].filter((t=>!this.getters.isHeaderHidden(e,"COL",t)))}getSheetViewVisibleRows(){const e=this.getters.getActiveSheetId(),t=this.getSubViewports(e);return[...new Set(t.map((e=>ue(e.top,e.bottom+1))).flat())].filter((t=>!this.getters.isHeaderHidden(e,"ROW",t)))}getMainViewportRect(){const e=this.getters.getActiveSheetId(),t=this.getMainInternalViewport(e),{xSplit:o,ySplit:s}=this.getters.getPaneDivisions(e);let{width:n,height:i}=t.getMaxSize();return{x:this.getters.getColDimensions(e,o).start,y:this.getters.getRowDimensions(e,s).start,width:n,height:i}}getMaximumSheetOffset(){const e=this.getters.getActiveSheetId(),{width:t,height:o}=this.getMainViewportRect(),s=this.getMainInternalViewport(e);return{maxOffsetX:Math.max(0,t-s.viewportWidth+1),maxOffsetY:Math.max(0,o-s.viewportHeight+1)}}getColRowOffsetInViewport(e,t,o){const s=this.getters.getActiveSheetId(),n=this.getters.getSheetViewVisibleCols(),i=this.getters.getSheetViewVisibleRows();if(o<t)return-this.getColRowOffsetInViewport(e,o,t);let r=0;const a="COL"===e?n:i;for(let n=t;n<o;n++)a.includes(n)&&(r+=this.getters.getHeaderSize(s,e,n));return r}isVisibleInViewport({sheetId:e,col:t,row:o}){return this.getSubViewports(e).some((e=>e.isVisible(t,o)))}getEdgeScrollCol(e,t,o){let s=!1,n=0,i=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,i=hs(e-a),n=1):e<l&&o>=l&&c>0?(s=!0,i=hs(l-e),n=-1):r&&t<l&&e>l&&(s=!0,i=hs(e),n="reset"),{canEdgeScroll:s,direction:n,delay:i}}getEdgeScrollRow(e,t,o){let s=!1,n=0,i=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,i=hs(e-a),n=1):e<l&&o>=l&&c>0?(s=!0,i=hs(l-e),n=-1):r&&t<l&&e>l&&(s=!0,i=hs(e),n="reset"),{canEdgeScroll:s,direction:n,delay:i}}getVisibleRect(e){const t=this.getters.getActiveSheetId(),o=this.getSubViewports(t).map((t=>t.getRect(e))).filter(Ie);if(0===o.length)return{x:0,y:0,width:0,height:0};const s=Math.min(...o.map((e=>e.x))),n=Math.min(...o.map((e=>e.y))),i=Math.max(...o.map((e=>e.x+e.width)))-s,r=Math.max(...o.map((e=>e.y+e.height)))-n;return{x:s+this.gridOffsetX,y:n+this.gridOffsetY,width:i,height:r}}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}}ensureMainViewportExist(e){this.viewports[e]||this.resetViewports(e)}getSubViewports(e){return this.ensureMainViewportExist(e),Object.values(this.viewports[e]).filter(Ie)}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"}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=this.getters.getSheetIds();for(let t of Object.keys(this.viewports))e.includes(t)||delete this.viewports[t]}resizeSheetView(e,t,o=0,s=0){this.sheetViewHeight=e,this.sheetViewWidth=t,this.gridOffsetX=o,this.gridOffsetY=s,this.recomputeViewports()}recomputeViewports(){for(let e of Object.keys(this.viewports))this.resetViewports(e)}setSheetViewOffset(e,t){const o=this.getters.getActiveSheetId(),{maxOffsetX:s,maxOffsetY:n}=this.getMaximumSheetOffset();Object.values(this.getSubViewports(o)).forEach((o=>o.setViewportOffset(de(e,0,s),de(t,0,n))))}clipOffsetY(e){const{height:t}=this.getMainViewportRect(),o=t-this.sheetViewHeight;return e=Math.min(e,o),e=Math.max(e,0)}getViewportOffset(e){return{x:this.viewports[e]?.bottomRight.offsetScrollbarX||0,y:this.viewports[e]?.bottomRight.offsetScrollbarY||0}}resetViewports(e){if(!this.getters.tryGetSheet(e))return;const{xSplit:t,ySplit:o}=this.getters.getPaneDivisions(e),s=this.getters.getNumberCols(e),n=this.getters.getNumberRows(e),i=this.getters.getColRowOffset("COL",0,t,e),r=this.getters.getColRowOffset("ROW",0,o,e),{xRatio:a,yRatio:l}=this.getFrozenSheetViewRatio(e),c=a<1,h=l<1,d=this.getViewportOffset(e),u={topLeft:o&&t&&new bR(this.getters,e,{left:0,right:t-1,top:0,bottom:o-1},{width:i,height:r},{canScrollHorizontally:!1,canScrollVertically:!1},{x:0,y:0})||void 0,topRight:o&&new bR(this.getters,e,{left:t,right:s-1,top:0,bottom:o-1},{width:this.sheetViewWidth-i,height:r},{canScrollHorizontally:c,canScrollVertically:!1},{x:c?d.x:0,y:0})||void 0,bottomLeft:t&&new bR(this.getters,e,{left:0,right:t-1,top:o,bottom:n-1},{width:i,height:this.sheetViewHeight-r},{canScrollHorizontally:!1,canScrollVertically:h},{x:0,y:h?d.y:0})||void 0,bottomRight:new bR(this.getters,e,{left:t,right:s-1,top:o,bottom:n-1},{width:this.sheetViewWidth-i,height:this.sheetViewHeight-r},{canScrollHorizontally:c,canScrollVertically:h},{x:c?d.x:0,y:h?d.y:0})};this.viewports[e]=u}refreshViewport(e,t){Object.values(this.getSubViewports(e)).forEach((e=>{e.adjustViewportZone(),e.adjustPosition(t)}))}shiftVertically(e){const{top:t}=this.getActiveMainViewport(),{scrollX:o}=this.getActiveSheetScrollInfo();this.setSheetViewOffset(o,e);const{anchor:s}=this.getters.getSelection(),n=this.getActiveMainViewport().top-t;this.selection.selectCell(s.cell.col,s.cell.row+n)}getVisibleFigures(){const e=this.getters.getActiveSheetId(),t=[],o=this.getters.getFigures(e),{scrollX:s,scrollY:n}=this.getActiveSheetScrollInfo(),{x:i,y:r}=this.getters.getMainViewportCoordinates(),{width:a,height:l}=this.getters.getSheetViewDimensionWithHeaders();for(const e of o)e.x>=i&&(e.x+e.width<=i+s||e.x>=a+s+i)||e.y>=r&&(e.y+e.height<=r+n||e.y>=l+n+r)||t.push(e);return t}isPositionVisible(e){const{scrollX:t,scrollY:o}=this.getters.getActiveSheetScrollInfo(),{x:s,y:n}=this.getters.getMainViewportCoordinates(),{width:i,height:r}=this.getters.getSheetViewDimension();return!(e.x>=s&&(e.x<s+t||e.x>i+t+s))&&!(e.y>=n&&(e.y<n+o||e.y>r+o+n))}getFrozenSheetViewRatio(e){const{xSplit:t,ySplit:o}=this.getters.getPaneDivisions(e),s=this.getters.getColDimensions(e,t).start,n=this.getters.getRowDimensions(e,o).start;return{xRatio:s/(this.sheetViewWidth+this.gridOffsetX),yRatio:n/(this.sheetViewHeight+this.gridOffsetY)}}}).add("clipboard",class extends Jx{static layers=[2];static getters=["getClipboardContent","getClipboardTextContent","isCutOperation","isPaintingFormat"];status="invisible";state;lastPasteState;paintFormatStatus="inactive";originSheetId;allowDispatch(e){switch(e.type){case"CUT":const t=this.getters.getSelectedZones();return this.getClipboardState(t,e.type).isCutAllowed(t);case"PASTE":if(!this.state)return"EmptyClipboard";const o=e.pasteOption||("inactive"!==this.paintFormatStatus?"onlyFormat":void 0);return this.state.isPasteAllowed(e.target,{pasteOption:o});case"PASTE_FROM_OS_CLIPBOARD":return new mR(e.text,this.getters,this.dispatch,this.selection).isPasteAllowed(e.target,{pasteOption:e.pasteOption});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);return this.getClipboardStateForCopyCells(t,"CUT").isPasteAllowed(o)}case"DELETE_CELL":{const{cut:t,paste:o}=this.getDeleteCellsTargets(e.zone,e.shiftDimension);return this.getClipboardStateForCopyCells(t,"CUT").isPasteAllowed(o)}case"ACTIVATE_PAINT_FORMAT":if("inactive"!==this.paintFormatStatus)return"AlreadyInPaintingFormatMode"}return"Success"}handle(e){switch(e.type){case"COPY":case"CUT":const t=this.getters.getSelectedZones();this.state=this.getClipboardState(t,e.type),this.status="visible",this.originSheetId=this.getters.getActiveSheetId();break;case"PASTE":if(!this.state)break;const o=e.pasteOption||("inactive"!==this.paintFormatStatus?"onlyFormat":void 0);this.state.paste(e.target,{pasteOption:o,shouldPasteCF:!0,selectTarget:!0}),"CUT"===this.state.operation&&(this.state=void 0),this.lastPasteState=this.state,"oneOff"===this.paintFormatStatus&&(this.paintFormatStatus="inactive"),this.status="invisible";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.getClipboardStateForCopyCells([o],"COPY").paste([e],{pasteOption:void 0,shouldPasteCF:!0,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.getClipboardStateForCopyCells([o],"COPY").paste([e],{pasteOption:void 0,shouldPasteCF:!0,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(!an(t[0])){for(const{col:t,row:o}of xn(e.zone))this.dispatch("CLEAR_CELL",{col:t,row:o,sheetId:this.getters.getActiveSheetId()});break}this.getClipboardStateForCopyCells(t,"CUT").paste(o);break}case"INSERT_CELL":{const{cut:t,paste:o}=this.getInsertCellsTargets(e.zone,e.shiftDimension);this.getClipboardStateForCopyCells(t,"CUT").paste(o);break}case"ADD_COLUMNS_ROWS":if(this.status="invisible","CUT"!==this.state?.operation)return;this.state.isColRowDirtyingClipboard("before"===e.position?e.base:e.base+1,e.dimension)&&(this.state=void 0);break;case"REMOVE_COLUMNS_ROWS":if(this.status="invisible","CUT"!==this.state?.operation)return;for(let t of e.elements){if(this.state.isColRowDirtyingClipboard(t,e.dimension)){this.state=void 0;break}}this.status="invisible";break;case"PASTE_FROM_OS_CLIPBOARD":this.state=new mR(e.text,this.getters,this.dispatch,this.selection),this.state.paste(e.target,{pasteOption:e.pasteOption}),this.lastPasteState=this.state,this.status="invisible";break;case"REPEAT_PASTE":this.lastPasteState?.paste(e.target,{pasteOption:e.pasteOption,shouldPasteCF:!0,selectTarget:!0});break;case"ACTIVATE_PAINT_FORMAT":{const t=this.getters.getSelectedZones();this.state=this.getClipboardStateForCopyCells(t,"COPY"),this.status="visible",e.persistent?this.paintFormatStatus="persistent":this.paintFormatStatus="oneOff";break}case"DELETE_SHEET":if("CUT"!==this.state?.operation)return;this.originSheetId===e.sheetId&&(this.state=void 0,this.status="invisible");break;case"CANCEL_PAINT_FORMAT":this.paintFormatStatus="inactive",this.status="invisible";break;default:io(e)&&(this.status="invisible")}}getClipboardContent(){return this.state?.getClipboardContent()||{[Jt.PlainText]:"\t"}}getClipboardTextContent(){return this.state?.getClipboardContent()[Jt.PlainText]||"\t"}isCutOperation(){return!!this.state&&"CUT"===this.state.operation}isPaintingFormat(){return"inactive"!==this.paintFormatStatus}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,n;return"COL"===t?(s={...e,right:this.getters.getNumberCols(o)-1},n={...e,left:e.right+1,right:e.right+1}):(s={...e,bottom:this.getters.getNumberRows(o)-1},n={...e,top:e.bottom+1,bottom:this.getters.getNumberRows(o)-1}),{cut:[s],paste:[n]}}getClipboardStateForCopyCells(e,t){return new YI(e,t,this.getters,this.dispatch,this.selection)}getClipboardState(e,t){return this.getters.getSelectedFigureId()?new dR(t,this.getters,this.dispatch):new YI(e,t,this.getters,this.dispatch,this.selection)}drawGrid(e){"visible"===this.status&&this.state&&this.state.drawClipboard(e)}}).add("edition",class extends Jx{static getters=["getEditionMode","isSelectingForComposer","showSelectionIndicator","getCurrentContent","getComposerSelection","getCurrentTokens","getTokenAtCursor","getComposerHighlights","getCurrentEditedCell","getCycledReference","getAutoCompleteDataValidationValues"];col=0;row=0;mode="inactive";sheetId="";currentContent="";currentTokens=[];selectionStart=0;selectionEnd=0;initialContent="";colorIndexByRange={};allowDispatch(e){switch(e.type){case"CHANGE_COMPOSER_CURSOR_SELECTION":return this.validateSelection(this.currentContent.length,e.start,e.end);case"SET_CURRENT_CONTENT":if(e.selection)return this.validateSelection(e.content.length,e.selection.start,e.selection.end);break;case"START_EDITION":if(e.selection){const t=e.text||this.getComposerContent(this.getters.getActivePosition());return this.validateSelection(t.length,e.selection.start,e.selection.end)}break;case"STOP_EDITION":return"inactive"===this.mode?"Success":this.checkDataValidation(e)}return"Success"}handleEvent(e){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.mode&&this.insertSelectedRange(o);else"selecting"===this.mode?this.replaceSelectedRange(o):this.updateComposerRange(e.previousAnchor.zone,o)}handle(e){switch(e.type){case"CHANGE_COMPOSER_CURSOR_SELECTION":this.selectionStart=e.start,this.selectionEnd=e.end;break;case"STOP_COMPOSER_RANGE_SELECTION":this.isSelectingForComposer()&&(this.mode="editing");break;case"START_EDITION":"inactive"!==this.mode&&e.text?this.setContent(e.text,e.selection):this.startEdition(e.text,e.selection),this.updateRangeColor();break;case"STOP_EDITION":this.stopEdition(),this.colorIndexByRange={};break;case"CANCEL_EDITION":this.cancelEditionAndActivateSheet(),this.resetContent(),this.colorIndexByRange={};break;case"SET_CURRENT_CONTENT":this.setContent(e.content,e.selection,!0),this.updateRangeColor();break;case"REPLACE_COMPOSER_CURSOR_SELECTION":this.replaceSelection(e.text);break;case"SELECT_FIGURE":this.cancelEditionAndActivateSheet(),this.resetContent();break;case"ADD_COLUMNS_ROWS":this.onAddElements(e);break;case"REMOVE_COLUMNS_ROWS":"COL"===e.dimension?this.onColumnsRemoved(e):this.onRowsRemoved(e);break;case"START_CHANGE_HIGHLIGHT":const{left:t,top:o}=e.zone;this.isSelectingForComposer()&&(this.mode="editing"),this.selection.resetAnchor(this,{cell:{col:t,row:o},zone:e.zone});break;case"ACTIVATE_SHEET":if(this.currentContent.startsWith("=")||(this.cancelEdition(),this.resetContent()),e.sheetIdFrom!==e.sheetIdTo){const t=this.getters.getActivePosition(),{col:o,row:s}=this.getters.getNextVisibleCellPosition({sheetId:e.sheetIdTo,col:t.col,row:t.row}),n=this.getters.expandZone(e.sheetIdTo,An({col:o,row:s}));this.selection.resetAnchor(this,{cell:{col:o,row:s},zone:n})}break;case"DELETE_SHEET":case"UNDO":case"REDO":!!this.getters.tryGetSheet(this.sheetId)||"inactive"===this.mode||(this.sheetId=this.getters.getActiveSheetId(),this.cancelEditionAndActivateSheet(),this.resetContent(),this.ui.raiseBlockingErrorUI(fR));break;case"CYCLE_EDITION_REFERENCES":this.cycleReferences()}}getEditionMode(){return this.mode}getCurrentContent(){return"inactive"===this.mode?this.getComposerContent(this.getters.getActivePosition()):this.currentContent}getComposerSelection(){return{start:this.selectionStart,end:this.selectionEnd}}getCurrentEditedCell(){return{sheetId:this.sheetId,col:this.col,row:this.row}}isSelectingForComposer(){return"selecting"===this.mode}showSelectionIndicator(){return this.isSelectingForComposer()&&this.canStartComposerRangeSelection()}getCurrentTokens(){return this.currentTokens}getTokenAtCursor(){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))}getCycledReference(e,t){const o=this.getters.getLocale(),s=(t.startsWith("=")?zx(t,o):[]).filter((t=>t.start<=e.start&&t.end>=e.start||t.start>=e.start&&t.start<e.end)),n=s.filter((e=>"REFERENCE"===e.type));if(0===n.length)return;const i=s.map(dm).map((e=>e.value)).join(""),r=s[0].start,a=s[s.length-1].end,l=t.slice(0,r)+i+t.slice(a),c=l.length-t.length,h={start:n[0].start,end:n[n.length-1].end+c};return 1===n.length&&e.start===e.end&&(h.start=h.end),{content:l,selection:h}}getInitialComposerContent(){return this.initialContent}cycleReferences(){const e=this.getCycledReference(this.getComposerSelection(),this.currentContent);void 0!==e&&this.dispatch("SET_CURRENT_CONTENT",{content:e.content,selection:e.selection})}validateSelection(e,t,o){return t>=0&&t<=e&&o>=0&&o<=e?"Success":"WrongComposerSelection"}onColumnsRemoved(e){if(e.elements.includes(this.col)&&"inactive"!==this.mode)return this.dispatch("CANCEL_EDITION"),void this.ui.raiseBlockingErrorUI(fR);const{top:t,left:o}=un({left:this.col,right:this.col,top:this.row,bottom:this.row},"left",[...e.elements]);this.col=o,this.row=t}onRowsRemoved(e){if(e.elements.includes(this.row)&&"inactive"!==this.mode)return this.dispatch("CANCEL_EDITION"),void this.ui.raiseBlockingErrorUI(fR);const{top:t,left:o}=un({left:this.col,right:this.col,top:this.row,bottom:this.row},"top",[...e.elements]);this.col=o,this.row=t}onAddElements(e){const{top:t,left:o}=dn({left:this.col,right:this.col,top:this.row,bottom:this.row},"COL"===e.dimension?"left":"top",e.base,e.position,e.quantity);this.col=o,this.row=t}startComposerRangeSelection(){if(this.sheetId===this.getters.getActiveSheetId()){const e=An({col:this.col,row:this.row});this.selection.resetAnchor(this,{cell:{col:this.col,row:this.row},zone:e})}this.mode="selecting"}startEdition(e,t){const o=this.getters.getActiveCell(),s=this.getters.getLocale();e&&o.format?.includes("%")&&Gt(e,s)&&(t=t||{start:e.length,end:e.length},e=`${e}%`);const{col:n,row:i,sheetId:r}=this.getters.getActivePosition();this.col=n,this.sheetId=r,this.row=i,this.initialContent=this.getComposerContent({sheetId:r,col:n,row:i}),this.mode="editing",this.setContent(e||this.initialContent,t),this.colorIndexByRange={};const a=An({col:this.col,row:this.row});this.selection.capture(this,{cell:{col:this.col,row:this.row},zone:a},{handleEvent:this.handleEvent.bind(this),release:()=>{this.stopEdition()}})}stopEdition(){if("inactive"!==this.mode){this.cancelEditionAndActivateSheet();const e=this.col,t=this.row;let o=this.getCurrentCanonicalContent();if(!(this.initialContent!==o))return;if(o){const s=this.getters.getActiveSheetId(),n=this.getters.getEvaluatedCell({sheetId:s,col:this.col,row:this.row});if(o.startsWith("=")){const e=this.currentTokens.filter((e=>"LEFT_PAREN"===e.type)).length-this.currentTokens.filter((e=>"RIGHT_PAREN"===e.type)).length;e>0&&(o+=Oe(new Array(e).fill(")")))}else n.link&&(o=Se(o,n.link.url));this.dispatch("UPDATE_CELL",{sheetId:this.sheetId,col:e,row:t,content:o})}else this.dispatch("UPDATE_CELL",{sheetId:this.sheetId,content:"",col:e,row:t});this.setContent("")}}getCurrentCanonicalContent(){return ea(this.currentContent,this.getters.getLocale())}cancelEditionAndActivateSheet(){if("inactive"===this.mode)return;this.cancelEdition();this.getters.getActiveSheetId()!==this.sheetId&&this.dispatch("ACTIVATE_SHEET",{sheetIdFrom:this.getters.getActiveSheetId(),sheetIdTo:this.sheetId})}getComposerContent(e){const t=this.getters.getLocale(),o=this.getters.getCell(e);if(o?.isFormula)return na(o.content,t);const{format:s,value:n,type:i,formattedValue:r}=this.getters.getEvaluatedCell(e);switch(i){case Qt.text:case Qt.empty:case Qt.error:return n;case Qt.boolean:return r;case Qt.number:if(s&&Rs(s)){if(null!==At(r,t))return r;return Ss(n,{locale:t,format:Number.isInteger(n)?t.dateFormat:da(t)})}return this.numberComposerContent(n,s,t)}}numberComposerContent(e,t,o){return t?.includes("%")?`${Is(100*e,o.decimalSeparator)}%`:Is(e,o.decimalSeparator)}cancelEdition(){"inactive"!==this.mode&&(this.mode="inactive",this.selection.release(this))}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.mode){const t=this.getters.getLocale();this.currentTokens=e.startsWith("=")?zx(e,t):[],this.currentTokens.length>100&&o&&this.ui.raiseBlockingErrorUI(Xt("This formula has over 100 parts. It can't be processed properly, consider splitting it into multiple cells"))}this.canStartComposerRangeSelection()&&this.startComposerRangeSelection()}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.getTokenAtCursor(),s="REFERENCE"===o?.type?o.start:this.selectionStart;this.replaceText(t,s,this.selectionEnd)}updateComposerRange(e,t){const o=this.getters.getActiveSheetId(),s=this.getTokenAtCursor(),n=(s?[s,...this.currentTokens]:this.currentTokens).filter((e=>"REFERENCE"===e.type)).find((t=>{const{xc:s,sheetName:n}=on(t.value),i=n||this.getters.getSheetName(this.sheetId);if(this.getters.getSheetName(o)!==i)return!1;const r=this.getters.getRangeFromSheetXC(o,s);return fn(this.getters.expandZone(o,r.zone),e)}));if(!n)throw new Error("Previous range not found");const i=this.getters.getRangeFromSheetXC(o,n.value);this.selectionStart=n.start,this.selectionEnd=this.selectionStart+n.value.length;const r=this.getters.getRangeFromZone(o,t),a=this.getRangeReference(r,i.parts);this.replaceSelection(a)}getZoneReference(e){const t=this.getters.getCurrentEditedCell().sheetId,o=this.getters.getActiveSheetId(),s=this.getters.getRangeFromZone(o,e);return this.getters.getSelectionRangeString(s,t)}getRangeReference(e,t){let o=[...t];const s=e.clone({parts:o});return this.getters.getSelectionRangeString(s,this.getters.getCurrentEditedCell().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.dispatch("SET_CURRENT_CONTENT",{content:o,selection:{start:s,end:s}})}updateRangeColor(){if(!this.currentContent.startsWith("=")||"inactive"===this.mode)return;const e=this.getters.getCurrentEditedCell().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 n=0;const i=()=>{for(;s.has(n);)n++;return s.add(n),n};for(const e of t){const t=e in o?o[e]:i();o[e]=t}this.colorIndexByRange=o}getComposerHighlights(){if(!this.currentContent.startsWith("=")||"inactive"===this.mode)return[];const e=this.getters.getCurrentEditedCell().sheetId,t=e=>{const t=this.colorIndexByRange[e];return Ze[t%Ze.length]};return this.getReferencedRanges().map((o=>{const s=this.getters.getRangeString(o,e);return{zone:o.zone,color:t(s),sheetId:o.sheetId}}))}getReferencedRanges(){const e=this.getters.getCurrentEditedCell().sheetId;return this.currentTokens.filter((e=>"REFERENCE"===e.type)).map((t=>this.getters.getRangeFromSheetXC(e,t.value)))}getAutoCompleteDataValidationValues(){if("inactive"===this.mode)return[];const e=this.getters.getValidationRuleForCell(this.getCurrentEditedCell());if(!e||"isValueInList"!==e.criterion.type&&"isValueInRange"!==e.criterion.type)return[];let t;if("isValueInList"===e.criterion.type)t=e.criterion.values;else{const o=this.getters.getRangeFromSheetXC(this.sheetId,e.criterion.values[0]);t=this.getters.getRangeValues(o).filter(Re).map((e=>e.toString())).filter((e=>""!==e))}const o=this.getCurrentContent();if(o&&o!==this.getInitialComposerContent()){const e=Pn(o,t,(e=>e));t=e.length?e:t}return t}canStartComposerRangeSelection(){if(this.currentContent.startsWith("=")){const e=this.getTokenAtCursor();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)||Vr.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}checkDataValidation(e){const t={sheetId:this.sheetId,col:this.col,row:this.row};try{const e=this.getCurrentCanonicalContent(),o=e.startsWith("=")?this.getters.evaluateFormula(this.sheetId,e):qi(e,this.getters.getLocale());if(go(o))return"Success";const s=this.getters.getValidationResultForCellValue(o,t);return!s.isValid&&s.rule.isBlocking?"BlockingValidationRule":"Success"}catch(e){return"Success"}}}),wR=(new Pi).add("evaluation",class extends Jx{static getters=["evaluateFormula","getCorrespondingFormulaCell","getRangeFormattedValues","getRangeValues","getRangeFormats","getEvaluatedCell","getEvaluatedCells","getEvaluatedCellsInZone","getSpreadPositionsOf","getArrayFormulaSpreadingOn"];shouldRebuildDependenciesGraph=!0;evaluator;positionsToUpdate=[];constructor(e){super(e),this.evaluator=new AI(e.custom,this.getters)}beforeHandle(e){(eo.has(e.type)||to.has(e.type))&&(this.shouldRebuildDependenciesGraph=!0)}handle(e){switch(e.type){case"UPDATE_CELL":if(!("content"in e)&&!("format"in e)||this.shouldRebuildDependenciesGraph)return;this.positionsToUpdate.push(e),"content"in e&&this.evaluator.updateDependencies(e);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){try{return this.evaluator.evaluateFormula(e,t)}catch(e){return e.value||fo.GenericError}}getRangeFormattedValues(e){const t=this.getters.tryGetSheet(e.sheetId);return void 0===t?[]:this.getters.getEvaluatedCellsInZone(t.id,e.zone).map((e=>e.formattedValue))}getRangeValues(e){const t=this.getters.tryGetSheet(e.sheetId);return void 0===t?[]:this.getters.getEvaluatedCellsInZone(t.id,e.zone).map((e=>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){const t=this.getters.getCells(e)||{},o={};for(let e of Object.keys(t)){const t=this.getters.getCellPosition(e);o[e]=this.getEvaluatedCell(t)}return o}getEvaluatedCellsInZone(e,t){return xn(t).map((({col:t,row:o})=>this.getters.getEvaluatedCell({sheetId:e,col:t,row:o})))}getSpreadPositionsOf(e){return this.evaluator.getSpreadPositionsOf(e)}getArrayFormulaSpreadingOn(e){return this.evaluator.getArrayFormulaSpreadingOn(e)}exportForExcel(e){for(const t of this.evaluator.getEvaluatedPositions()){const o=this.evaluator.getEvaluatedCell(t),s=ut(t.col,t.row),n=o.value;let i,r,a=!1,l=!0;const c=this.getCorrespondingFormulaCell(t);c&&(l=$x(c.compiledFormula.tokens),a=l,l||(i=n.toString(),r=o.format));const h=e.sheets.find((e=>e.id===t.sheetId)),d=h.cells[s]||{},u=r?Ae(r,e.formats):d.format,g=l?d.content:i;h.cells[s]={...d,value:n,isFormula:a,content:g,format:u}}}getCorrespondingFormulaCell(e){const t=this.getters.getCell(e);if(t&&t.isFormula)return function(e){try{return Ux(e),!1}catch(e){return!0}}(t.compiledFormula.tokens)?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 Jx{static getters=["getChartRuntime","getStyleOfSingleCellChart"];charts={};createRuntimeChart=function(e){const t=gl.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)}}(this.getters);handle(e){if(eo.has(e.type)||oo.has(e.type)||"EVALUATE_CELLS"===e.type||"UPDATE_CELL"===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.id]=void 0;break;case"DELETE_SHEET":for(let 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:fi(e)};if(!t)return{background:h,fontColor:fi(h)};const o=t.zone.left,s=t.zone.top,n=t.sheetId,i=this.getters.getCellComputedStyle({sheetId:n,col:o,row:s}),r=i.fillColor||h;return{background:r,fontColor:i.textColor||fi(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,n=this.getters.getChart(e)?.getDefinitionForExcel();if(n)o.push({...s,data:n});else{if(!this.getters.getChart(e))continue;const o=this.getters.getChartType(e),n=qa(this.getters.getChartRuntime(e),s,o);t.images.push({...s,tag:"image",data:{mimetype:"image/png",path:n,size:{width:s.width,height:s.height}}})}}t.charts=o}}}).add("evaluation_cf",class extends Jx{static getters=["getConditionalIcon","getCellComputedStyle"];isStale=!0;computedStyles={};computedIcons={};handle(e){(eo.has(e.type)||oo.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]=_e((()=>this.getComputedStyles(e))),this.computedIcons[e]=_e((()=>this.getComputedIcons(e)));this.isStale=!1}}getCellComputedStyle(e){const{sheetId:t,col:o,row:s}=e,n=this.getters.getCell(e),i=this.computedStyles[t](),r=i&&i[o]?.[s],a={...n?.style,...r};return this.getters.getEvaluatedCell(e).link&&!a.textColor&&(a.textColor=p),this.getters.isFilterHeader(e)&&(a.bold=!0),a}getConditionalIcon({sheetId:e,col:t,row:o}){const s=this.computedIcons[e]();return s&&s[t]?.[o]}getComputedStyles(e){const t={};for(let o of this.getters.getConditionalFormats(e).reverse())switch(o.rule.type){case"ColorScaleRule":for(let s of o.ranges)this.applyColorScale(e,s,o.rule,t);break;case"CellIsRule":const s=o.rule.values.map((e=>e.startsWith("=")?Vx(e):void 0));for(let n of o.ranges){const i=this.getters.getRangeFromSheetXC(e,n).zone;for(let n=i.top;n<=i.bottom;n++)for(let r=i.left;r<=i.right;r++){const a=this.rulePredicate[o.rule.type],l={sheetId:e,col:r,row:n},c=o.rule.values.map(((t,o)=>{const a=s[o];return a?this.getters.getTranslatedCellFormula(e,r-i.left,n-i.top,{...a,dependencies:a.dependencies.map((t=>this.getters.getRangeFromSheetXC(e,t)))}):t}));a&&a(l,{...o.rule,values:c})&&(t[r]||(t[r]=[]),t[r][n]=Object.assign(t[r]?.[n]||{},o.rule.style))}}}return t}getComputedIcons(e){const t={};for(let o of this.getters.getConditionalFormats(e).reverse())if("IconSetRule"===o.rule.type)for(let s of o.ranges)this.applyIcon(e,s,o.rule,t);return t}parsePoint(e,t,o,s){const n=this.getters.getEvaluatedCellsInZone(e,this.getters.getRangeFromSheetXC(e,t).zone).filter((e=>e.type===Qt.number)).map((e=>e.value));switch(o.type){case"value":return"max"===s?Math.max(...n):Math.min(...n);case"number":return Number(o.value);case"percentage":const t=Math.min(...n);return t+(Math.max(...n)-t)*Number(o.value)/100;case"percentile":return qt(n,Number(o.value)/100,!0);case"formula":const i=o.value&&this.getters.evaluateFormula(e,o.value);return"number"==typeof i?i:null;default:return null}}applyIcon(e,t,o,s){const n=this.parsePoint(e,t,o.lowerInflectionPoint),i=this.parsePoint(e,t,o.upperInflectionPoint);if(null===n||null===i||n>i)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!==Qt.number)continue;const c=this.computeIcon(r.value,i,o.upperInflectionPoint.operator,n,o.lowerInflectionPoint.operator,a);s[l]||(s[l]=[]),s[l][t]=c}}computeIcon(e,t,o,s,n,i){return"ge"===o&&e>=t||"gt"===o&&e>t?i[0]:"ge"===n&&e>=s||"gt"===n&&e>s?i[1]:i[2]}applyColorScale(e,t,o,s){const n=this.parsePoint(e,t,o.minimum,"min"),i=o.midpoint?this.parsePoint(e,t,o.midpoint):null,r=this.parsePoint(e,t,o.maximum,"max");if(null===n||null===r||n>=r||i&&(n>=i||i>=r))return;const a=this.getters.getRangeFromSheetXC(e,t).zone,l=[];o.midpoint&&i?(l.push({minValue:n,minColor:o.minimum.color,colorDiffUnit:this.computeColorDiffUnits(n,i,o.minimum.color,o.midpoint.color)}),l.push({minValue:i,minColor:o.midpoint.color,colorDiffUnit:this.computeColorDiffUnits(i,r,o.midpoint.color,o.maximum.color)})):l.push({minValue:n,minColor:o.minimum.color,colorDiffUnit:this.computeColorDiffUnits(n,r,o.minimum.color,o.maximum.color)});for(let t=a.top;t<=a.bottom;t++)for(let o=a.left;o<=a.right;o++){const a=this.getters.getEvaluatedCell({sheetId:e,col:o,row:t});if(a.type===Qt.number){const e=de(a.value,n,r);let c;c=2===l.length&&i?e<=i?this.colorCell(e,l[0].minValue,l[0].minColor,l[0].colorDiffUnit):this.colorCell(e,l[1].minValue,l[1].minColor,l[1].colorDiffUnit):this.colorCell(e,l[0].minValue,l[0].minColor,l[0].colorDiffUnit),s[o]||(s[o]=[]),s[o][t]=s[o]?.[t]||{},s[o][t].fillColor=Ye(c)}}}computeColorDiffUnits(e,t,o,s){const n=t-e;return[((o>>16)%256-(s>>16)%256)/n,((o>>8)%256-(s>>8)%256)/n,(o%256-s%256)/n]}colorCell(e,t,o,s){const[n,i,r]=s;return Math.round((o>>16)%256-n*(e-t))<<16|Math.round((o>>8)%256-i*(e-t))<<8|Math.round(o%256-r*(e-t))}rulePredicate={CellIsRule:(e,t)=>{const o=this.getters.getEvaluatedCell(e);if(o.type===Qt.error)return!1;const[s,n]=t.values.map((t=>t.startsWith("=")?this.getters.evaluateFormula(e.sheetId,t)??"":qi(t,ho)));if(go(s)||go(n))return!1;switch(t.operator){case"IsEmpty":return""===o.value.toString().trim();case"IsNotEmpty":return""!==o.value.toString().trim();case"BeginsWith":return""!==s&&o.value.toString().startsWith(s.toString());case"EndsWith":return""!==s&&o.value.toString().endsWith(s.toString());case"Between":return o.value>=s&&o.value<=n;case"NotBetween":return!(o.value>=s&&o.value<=n);case"ContainsText":return o.value.toString().indexOf(s.toString())>-1;case"NotContains":return!o.value||-1===o.value.toString().indexOf(s.toString());case"GreaterThan":return o.value>s;case"GreaterThanOrEqual":return o.value>=s;case"LessThan":return o.value<s;case"LessThanOrEqual":return o.value<=s;case"NotEqual":return""!==s&&o.value!==s;case"Equal":return""===s||o.value===s;default:console.warn(Xt("Not implemented operator %s for kind of conditional formatting: %s",t.operator,t.type))}return!1}}}).add("row_size",class extends Jx{static getters=["getRowSize","getHeaderSize"];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=le(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=ze(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=Ne(e.position,e.base),o=Array(e.quantity).fill(void 0),s=function(e,t,o){const s=[...e];return s.splice(o,0,...t),s}(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 ue(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 xn(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??A)}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 n=this.getCellHeight({sheetId:e,col:o,row:t});if(!(n<=A)&&(!s&&n>A||s&&n>s.size)){const s={cell:{sheetId:e,col:o,row:t},size:n};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 A;const t=this.getters.getCell(e),o=this.getters.getColSize(e.sheetId,e.col);return function(e,t,o){if(!t||!t.content)return A;const s="wrap"===t.style?.wrapping?o-2*_:void 0,n=t.isFormula?1:Zn(e,t.content,t.style,s).length;return Bn(Wn(t.style),n)+6}(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,n=0;for(let e=0;e<o.length;e++){const t=this.getters.getCellById(o[e]);if(!t)continue;const i=this.getters.getCellPosition(t.id),r=this.getCellHeight(i);r>n&&r>A&&(n=r,s={cell:i,size:r})}return s&&s.size>A?s:void 0}}).add("custom_colors",class extends Jx{customColors={};shouldUpdateColors=!1;static getters=["getCustomColors"];handle(e){switch(e.type){case"UPDATE_CELL":case"UPDATE_CHART":case"CREATE_CHART":case"ADD_CONDITIONAL_FORMAT":case"SET_BORDER":case"SET_ZONE_BORDERS":case"SET_FORMATTING":this.history.update("shouldUpdateColors",!0)}}finalize(){if(this.shouldUpdateColors){this.history.update("shouldUpdateColors",!1);for(const e of this.getCustomColors())this.tryToAddColor(e)}}getCustomColors(){let e=[];for(const t of this.getters.getSheetIds())e=e.concat(this.getColorsFromCells(t),this.getFormattingColors(t),this.getChartColors(t));return function(e){const t=[{leadColor:Qe(255,0,0),colors:[]},{leadColor:Qe(255,128,0),colors:[]},{leadColor:Qe(128,128,0),colors:[]},{leadColor:Qe(128,255,0),colors:[]},{leadColor:Qe(0,255,0),colors:[]},{leadColor:Qe(0,255,128),colors:[]},{leadColor:Qe(0,255,255),colors:[]},{leadColor:Qe(0,127,255),colors:[]},{leadColor:Qe(0,0,255),colors:[]},{leadColor:Qe(127,0,255),colors:[]},{leadColor:Qe(128,0,128),colors:[]},{leadColor:Qe(255,0,128),colors:[]}];for(const o of e.map(tt)){let e=500,s=0;t.forEach(((t,n)=>{const i=(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>i&&(e=i,s=n)})),t[s].colors.push(o)}return t.map((e=>e.colors.sort(((e,t)=>st(e).s-st(t).s)))).flat().map(et)}([...new Set([...new Set([...e,...Object.keys(this.customColors)])].filter(Xe).map(je))]).filter((e=>!x.includes(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(Ye(t.minimum.color)),o.push(t.midpoint?Ye(t.midpoint.color):void 0),o.push(Ye(t.maximum.color)))}return o.filter(Ie)}getChartColors(e){const t=this.getters.getChartIds(e).map((e=>this.getters.getChart(e)));let o=new Set;for(let e of t){if(void 0===e)continue;const t=e.getDefinition().background;switch(void 0!==t&&o.add(t),e.type){case"gauge":const t=e.sectionRule.colors;o.add(t.lowerColor),o.add(t.middleColor),o.add(t.upperColor);break;case"scorecard":const s=e;o.add(s.baselineColorDown),o.add(s.baselineColorUp)}}return[...o]}tryToAddColor(e){const t=je(e);e&&!x.includes(t)&&this.history.update("customColors",t,!0)}}).add("data_validation_ui",class extends Jx{static getters=["getDataValidationInvalidCriterionValueMessage","getDataValidationCheckBoxCellPositions","getDataValidationListCellsPositions","getInvalidDataValidationMessage","getValidationResultForCellValue","isCellValidCheckbox","isDataValidationInvalid"];validationResults={};handle(e){if(eo.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}getInvalidDataValidationMessage(e){const t=this.getValidationResultForCell(e);return t.isValid?void 0:t.error}getDataValidationInvalidCriterionValueMessage(e,t){const o=rC.get(e);return t.startsWith("=")?"onlyLiterals"===o.allowedValues?Xt("The value must not be a formula"):void 0:"onlyFormulas"===o.allowedValues?Xt("The value must be a formula"):o.isCriterionValueValid(t)?void 0:o.criterionValueErrorString}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 NI;const s=this.getRuleErrorForCellValue(e,t,o);return s?{error:s,rule:o,isValid:!1}:NI}getDataValidationCheckBoxCellPositions(){return Ln(this.getters.getDataValidationRules(this.getters.getActiveSheetId()).filter((e=>"isBoolean"===e.criterion.type)).map((e=>e.ranges)).flat()).filter((e=>this.isCellValidCheckbox(e)))}getDataValidationListCellsPositions(){return Ln(this.getters.getDataValidationRules(this.getters.getActiveSheetId()).filter((e=>("isValueInList"===e.criterion.type||"isValueInRange"===e.criterion.type)&&"arrow"===e.criterion.displayStyle)).map((e=>e.ranges)).flat())}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]?.()||NI}computeSheetValidationResults(e){const t={},o=this.getters.getDataValidationRules(e).map((e=>e.ranges));for(const e of Ln(o.flat())){const{col:o,row:s}=e;t[o]||(t[o]=[]),t[o][s]=_e((()=>{const t=this.getters.getEvaluatedCell(e);return t.type===Qt.empty?NI:this.getValidationResultForCellValue(t.value,e)}))}return t}getRuleErrorForCellValue(e,t,o){const{sheetId:s}=t,n=o.criterion,i=rC.get(n.type),r=this.getCellOffsetInRule(t,o),a=this.getEvaluatedCriterionValues(s,r,n),l={...n,values:a};if(!i.isValueValid(e,l,this.getters,s))return i.getErrorString(l,this.getters,s)}getCellOffsetInRule(e,t){const o=t.ranges.find((t=>bn(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 o;const s=Vx(o),n=this.getters.getTranslatedCellFormula(e,t.col,t.row,{...s,dependencies:s.dependencies.map((t=>this.getters.getRangeFromSheetXC(e,t)))}),i=this.getters.evaluateFormula(e,n);return i&&!go(i)?i.toString():""}))}}),yR=new Pi;yR.add("link",{condition:(e,t)=>!!t.model.getters.getEvaluatedCell(e).link,execute:(e,t)=>Gi(t.model.getters.getEvaluatedCell(e).link,t),sequence:5});class xR{fileStore;constructor(e){this.fileStore=e}async requestImage(){const e=await this.getImageFromUser(),t=await this.fileStore.upload(e);return{path:t,size:await this.getImageOriginalSize(t),mimetype:e.type}}getImageFromUser(){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.src=e,s.addEventListener("load",(()=>{const e={width:s.width,height:s.height};t(e)})),s.addEventListener("error",o)}))}}const IR=[{transform:"scale(0)"},{transform:"scale(0.8)",offset:.33},{opacity:"0",transform:"scale(1)",offset:1}];ar`
1449
1449
  .o-ripple {
1450
1450
  z-index: 1;
1451
1451
  }
@@ -2603,4 +2603,4 @@
2603
2603
  <tableParts count="${e.filterTables.length}">
2604
2604
  ${Ay(a)}
2605
2605
  </tableParts>
2606
- `}var XT;!function(e){e[e.Ready=0]="Ready",e[e.Running=1]="Running",e[e.RunningCore=2]="RunningCore",e[e.Finalizing=3]="Finalizing"}(XT||(XT={}));function KT(e,t={}){const o=le(t);return o.type=e,o}const QT={},JT={MIN_ROW_HEIGHT:10,MIN_COL_WIDTH:5,HEADER_HEIGHT:I,HEADER_WIDTH:R,TOPBAR_HEIGHT:63,BOTTOMBAR_HEIGHT:36,DEFAULT_CELL_WIDTH:T,DEFAULT_CELL_HEIGHT:A,SCROLLBAR_WIDTH:O},eA={autofillModifiersRegistry:Qi,autofillRulesRegistry:Ji,cellMenuRegistry:Ev,colMenuRegistry:aS,errorTypes:vo,linkMenuRegistry:Ca,functionRegistry:Wf,featurePluginRegistry:CR,statefulUIPluginRegistry:ER,coreViewsPluginRegistry:wR,corePluginRegistry:SR,rowMenuRegistry:hS,sidePanelRegistry:AC,figureRegistry:Sl,chartSidePanelComponentRegistry:US,chartComponentRegistry:pl,chartRegistry:gl,topbarMenuRegistry:dS,topbarComponentRegistry:OC,clickableCellRegistry:yR,otRegistry:uS,inverseCommandRegistry:yl,urlRegistry:Vi,cellPopoverRegistry:ya,numberFormatMenuRegistry:lS,repeatLocalCommandTransformRegistry:aR,repeatCommandTransformRegistry:rR},tA={arg:gc,isEvaluationError:Ro,toBoolean:Vo,toJsDate:Uo,toNumber:Ao,toString:Lo,toXC:ut,toZone:rn,toUnboundedZone:nn,toCartesian:dt,numberToLetters:rt,lettersToNumber:lt,UuidGenerator:Kn,formatValue:Ss,createCurrencyFormat:Ls,computeTextWidth:zn,createEmptyWorkbookData:lx,createEmptySheet:ax,createEmptyExcelSheet:cx,getDefaultChartJsRuntime:Ha,chartFontColor:fi,ChartColors:mi,getFillingMode:Wa,rgbaToHex:et,colorToRGBA:tt,positionToZone:An,isDefined:Ie,isMatrix:go,lazy:_e,genericRepeat:lR,createAction:ei,createActions:Qn,transformRangeData:oi},oA={isMarkdownLink:ve,parseMarkdownLink:Ce,markdownLink:Se,openLink:Gi,urlRepresentation:zi},sA={ChartPanel:BS,ChartFigure:fl,ChartJsComponent:si,Grid:ME,GridOverlay:fE,ScorecardChart:Li,LineConfigPanel:PS,LineBarPieDesignPanel:FS,BarConfigPanel:xS,LineBarPieConfigPanel:yS,GaugeChartConfigPanel:DS,GaugeChartDesignPanel:LS,ScorecardChartConfigPanel:kS,ScorecardChartDesignPanel:VS,FigureComponent:_C,Menu:Lr,SelectionInput:fS,ValidationMessages:vS},nA={useDragAndDropListItems:WS};const iA={DEFAULT_LOCALE:ho};e.AbstractChart=ni,e.CellErrorType=fo,e.CorePlugin=dx,e.DispatchResult=ro,e.EvaluationError=bo,e.Model=class extends DI{corePlugins=[];featurePlugins=[];statefulUIPlugins=[];coreViewsPlugins=[];range;session;isReplayingCommand=!1;renderers=[];status=0;config;corePluginConfig;uiPluginConfig;state;selection;getters;coreGetters;uuidGenerator;handlers=[];uiHandlers=[];coreHandlers=[];constructor(e={},o={},s=[],n=new Kn,i=!0){super(),s=ix(e,s);const r=sx(e,i);this.state=new lT,this.uuidGenerator=n,this.config=this.setupConfig(o),this.session=this.setupSession(r.revisionId),this.coreGetters={},this.range=new Qx(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.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.getters={isReadonly:()=>"readonly"===this.config.mode||"dashboard"===this.config.mode,isDashboard:()=>"dashboard"===this.config.mode},this.uuidGenerator.setIsFastStrategy(!0),this.selection=new aT(this.getters),this.coreHandlers.push(this.range),this.handlers.push(this.range),this.corePluginConfig=this.setupCorePluginConfig(),this.uiPluginConfig=this.setupUiPluginConfig();for(let e of SR.getAll())this.setupCorePlugin(e,r);Object.assign(this.getters,this.coreGetters),this.session.loadInitialMessages(s);for(let e of wR.getAll()){const t=this.setupUiPlugin(e);this.coreViewsPlugins.push(t),this.handlers.push(t),this.uiHandlers.push(t),this.coreHandlers.push(t)}for(let e of ER.getAll()){const t=this.setupUiPlugin(e);this.statefulUIPlugins.push(t),this.handlers.push(t),this.uiHandlers.push(t)}for(let e of CR.getAll()){const t=this.setupUiPlugin(e);this.featurePlugins.push(t),this.handlers.push(t),this.uiHandlers.push(t)}this.uuidGenerator.setIsFastStrategy(!1),this.dispatch("START"),this.selection.observe(this,{handleEvent:()=>this.trigger("update")}),this.setupSessionEvents(),this.joinSession(),o.snapshotRequested&&(this.session.snapshot(this.exportData()),this.garbageCollectExternalResources()),t.markRaw(this)}joinSession(){this.session.join(this.config.client)}leaveSession(){this.session.leave()}setupUiPlugin(e){const t=new e(this.uiPluginConfig);for(let 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)}const o=e.layers.map((e=>[t,e]));return this.renderers.push(...o),this.renderers.sort(((e,t)=>e[1]-t[1])),t}setupCorePlugin(e,t){const o=new e(this.corePluginConfig);for(let 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(let t of e){const e=this.status;this.status=2,this.dispatchToHandlers(this.statefulUIPlugins,t),this.status=e}this.finalize()}setupSession(e){return new WI(nT({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.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.uuidv4(),name:Xt("Anonymous").toString()},o=e.transportService||new jR;return{...e,mode:e.mode||"normal",custom:e.custom||{},defaultCurrencyFormat:e.defaultCurrencyFormat||"[$$]#,##0.00",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})}}setupExternalConfig(e){const t=e.loadLocales||(()=>Promise.resolve(co));return{...e,loadLocales:t}}setupCorePluginConfig(){return{getters:this.coreGetters,stateObserver:this.state,range:this.range,dispatch:this.dispatchFromCorePlugin,uuidGenerator:this.uuidGenerator,custom:this.config.custom,external:this.config.external}}setupUiPluginConfig(){return{getters:this.getters,stateObserver:this.state,dispatch:this.dispatch,selection:this.selection,moveClient:this.session.move.bind(this.session),custom:this.config.custom,uiActions:this.config,session:this.session}}checkDispatchAllowed(e){const t=io(e)?this.checkDispatchAllowedCoreCommand(e):this.checkDispatchAllowedLocalCommand(e);return t.some((e=>"Success"!==e))?new ro(t.flat()):ro.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}canDispatch=(e,t)=>this.checkDispatchAllowed(KT(e,t));dispatch=(e,t)=>{const o=KT(e,t);let s=this.status;if(this.getters.isReadonly()&&(n=o,!so.has(n.type)))return new ro("Readonly");var n;if(!this.session.canApplyOptimisticUpdate())return new ro("WaitingSessionConfirmation");switch(s){case 0:const t=this.checkDispatchAllowed(o);if(!t.isSuccessful)return t;this.status=1;const{changes:s,commands:n}=this.state.recordChanges((()=>{io(o)&&this.state.addCommand(o),this.dispatchToHandlers(this.handlers,o),this.finalize()}));this.session.save(o,n,s),this.status=0,this.trigger("update");break;case 1:if(io(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(io(o))throw new Error(`A UI plugin cannot dispatch ${e} while handling a core command`);this.dispatchToHandlers(this.handlers,o)}return ro.Success};dispatchFromCorePlugin=(e,t)=>{const o=KT(e,t),s=this.status;this.status=2;const n=this.isReplayingCommand?this.coreHandlers:this.handlers;return this.dispatchToHandlers(n,o),this.status=s,ro.Success};dispatchToHandlers(e,t){const o=io(t);for(const s of e)!o&&s instanceof dx||s.beforeHandle(t);for(const s of e)!o&&s instanceof dx||s.handle(t)}drawGrid(e){for(let[t,o]of this.renderers)e.ctx.save(),t.drawGrid(e,o),e.ctx.restore()}exportData(){let e=lx();for(let t of this.handlers)t instanceof dx&&t.export(e);return e.revisionId=this.session.getRevisionId()||W,e=le(e),e}updateMode(e){"normal"!==e&&this.dispatch("CANCEL_EDITION"),this.config.mode=e,this.trigger("update")}exportXLSX(){this.dispatch("EVALUATE_CELLS");let e={...lx(),sheets:[cx(ox,"Sheet1")]};for(let t of this.handlers)t instanceof hx&&t.exportForExcel(e);return e=le(e),YT(e)}garbageCollectExternalResources(){for(const e of this.corePlugins)e.garbageCollectExternalResources()}},e.Registry=Pi,e.Revision=GI,e.SPREADSHEET_DIMENSIONS=JT,e.Spreadsheet=YR,e.UIPlugin=Jx,e.__info__=QT,e.addFunction=function e(t,o){return Wf.add(t,o),{addFunction:(t,o)=>e(t,o)}},e.astToFormula=Mx,e.compile=Vx,e.compileTokens=Ux,e.components=sA,e.constants=iA,e.convertAstNodes=Tx,e.coreTypes=no,e.findCellInNewZone=Rn,e.functionCache=kx,e.helpers=tA,e.hooks=nA,e.invalidateCFEvaluationCommands=oo,e.invalidateDependenciesCommands=to,e.invalidateEvaluationCommands=eo,e.iterateAstNodes=Ax,e.links=oA,e.load=sx,e.parse=Ix,e.parseTokens=Rx,e.readonlyAllowedCommands=so,e.registries=eA,e.setDefaultSheetViewSize=function(e){oe=e},e.setTranslationMethod=function(e,t=(()=>!0)){Zt=e,Yt=t},e.tokenize=Br,QT.version="17.1.1",QT.date="2024-01-17T10:33:34.825Z",QT.hash="b62675c"}(this.o_spreadsheet=this.o_spreadsheet||{},owl);
2606
+ `}var XT;!function(e){e[e.Ready=0]="Ready",e[e.Running=1]="Running",e[e.RunningCore=2]="RunningCore",e[e.Finalizing=3]="Finalizing"}(XT||(XT={}));function KT(e,t={}){const o=le(t);return o.type=e,o}const QT={},JT={MIN_ROW_HEIGHT:10,MIN_COL_WIDTH:5,HEADER_HEIGHT:I,HEADER_WIDTH:R,TOPBAR_HEIGHT:63,BOTTOMBAR_HEIGHT:36,DEFAULT_CELL_WIDTH:T,DEFAULT_CELL_HEIGHT:A,SCROLLBAR_WIDTH:O},eA={autofillModifiersRegistry:Qi,autofillRulesRegistry:Ji,cellMenuRegistry:Ev,colMenuRegistry:aS,errorTypes:vo,linkMenuRegistry:Ca,functionRegistry:Wf,featurePluginRegistry:CR,statefulUIPluginRegistry:ER,coreViewsPluginRegistry:wR,corePluginRegistry:SR,rowMenuRegistry:hS,sidePanelRegistry:AC,figureRegistry:Sl,chartSidePanelComponentRegistry:US,chartComponentRegistry:pl,chartRegistry:gl,topbarMenuRegistry:dS,topbarComponentRegistry:OC,clickableCellRegistry:yR,otRegistry:uS,inverseCommandRegistry:yl,urlRegistry:Vi,cellPopoverRegistry:ya,numberFormatMenuRegistry:lS,repeatLocalCommandTransformRegistry:aR,repeatCommandTransformRegistry:rR},tA={arg:gc,isEvaluationError:Ro,toBoolean:Vo,toJsDate:Uo,toNumber:Ao,toString:Lo,toXC:ut,toZone:rn,toUnboundedZone:nn,toCartesian:dt,numberToLetters:rt,lettersToNumber:lt,UuidGenerator:Kn,formatValue:Ss,createCurrencyFormat:Ls,computeTextWidth:zn,createEmptyWorkbookData:lx,createEmptySheet:ax,createEmptyExcelSheet:cx,getDefaultChartJsRuntime:Ha,chartFontColor:fi,ChartColors:mi,getFillingMode:Wa,rgbaToHex:et,colorToRGBA:tt,positionToZone:An,isDefined:Ie,isMatrix:go,lazy:_e,genericRepeat:lR,createAction:ei,createActions:Qn,transformRangeData:oi},oA={isMarkdownLink:ve,parseMarkdownLink:Ce,markdownLink:Se,openLink:Gi,urlRepresentation:zi},sA={ChartPanel:BS,ChartFigure:fl,ChartJsComponent:si,Grid:ME,GridOverlay:fE,ScorecardChart:Li,LineConfigPanel:PS,LineBarPieDesignPanel:FS,BarConfigPanel:xS,LineBarPieConfigPanel:yS,GaugeChartConfigPanel:DS,GaugeChartDesignPanel:LS,ScorecardChartConfigPanel:kS,ScorecardChartDesignPanel:VS,FigureComponent:_C,Menu:Lr,SelectionInput:fS,ValidationMessages:vS},nA={useDragAndDropListItems:WS};const iA={DEFAULT_LOCALE:ho};e.AbstractChart=ni,e.CellErrorType=fo,e.CorePlugin=dx,e.DispatchResult=ro,e.EvaluationError=bo,e.Model=class extends DI{corePlugins=[];featurePlugins=[];statefulUIPlugins=[];coreViewsPlugins=[];range;session;isReplayingCommand=!1;renderers=[];status=0;config;corePluginConfig;uiPluginConfig;state;selection;getters;coreGetters;uuidGenerator;handlers=[];uiHandlers=[];coreHandlers=[];constructor(e={},o={},s=[],n=new Kn,i=!0){super(),s=ix(e,s);const r=sx(e,i);this.state=new lT,this.uuidGenerator=n,this.config=this.setupConfig(o),this.session=this.setupSession(r.revisionId),this.coreGetters={},this.range=new Qx(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.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.getters={isReadonly:()=>"readonly"===this.config.mode||"dashboard"===this.config.mode,isDashboard:()=>"dashboard"===this.config.mode},this.uuidGenerator.setIsFastStrategy(!0),this.selection=new aT(this.getters),this.coreHandlers.push(this.range),this.handlers.push(this.range),this.corePluginConfig=this.setupCorePluginConfig(),this.uiPluginConfig=this.setupUiPluginConfig();for(let e of SR.getAll())this.setupCorePlugin(e,r);Object.assign(this.getters,this.coreGetters),this.session.loadInitialMessages(s);for(let e of wR.getAll()){const t=this.setupUiPlugin(e);this.coreViewsPlugins.push(t),this.handlers.push(t),this.uiHandlers.push(t),this.coreHandlers.push(t)}for(let e of ER.getAll()){const t=this.setupUiPlugin(e);this.statefulUIPlugins.push(t),this.handlers.push(t),this.uiHandlers.push(t)}for(let e of CR.getAll()){const t=this.setupUiPlugin(e);this.featurePlugins.push(t),this.handlers.push(t),this.uiHandlers.push(t)}this.uuidGenerator.setIsFastStrategy(!1),this.dispatch("START"),this.selection.observe(this,{handleEvent:()=>this.trigger("update")}),this.setupSessionEvents(),this.joinSession(),o.snapshotRequested&&(this.session.snapshot(this.exportData()),this.garbageCollectExternalResources()),t.markRaw(this)}joinSession(){this.session.join(this.config.client)}leaveSession(){this.session.leave()}setupUiPlugin(e){const t=new e(this.uiPluginConfig);for(let 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)}const o=e.layers.map((e=>[t,e]));return this.renderers.push(...o),this.renderers.sort(((e,t)=>e[1]-t[1])),t}setupCorePlugin(e,t){const o=new e(this.corePluginConfig);for(let 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(let t of e){const e=this.status;this.status=2,this.dispatchToHandlers(this.statefulUIPlugins,t),this.status=e}this.finalize()}setupSession(e){return new WI(nT({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.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.uuidv4(),name:Xt("Anonymous").toString()},o=e.transportService||new jR;return{...e,mode:e.mode||"normal",custom:e.custom||{},defaultCurrencyFormat:e.defaultCurrencyFormat||"[$$]#,##0.00",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})}}setupExternalConfig(e){const t=e.loadLocales||(()=>Promise.resolve(co));return{...e,loadLocales:t}}setupCorePluginConfig(){return{getters:this.coreGetters,stateObserver:this.state,range:this.range,dispatch:this.dispatchFromCorePlugin,uuidGenerator:this.uuidGenerator,custom:this.config.custom,external:this.config.external}}setupUiPluginConfig(){return{getters:this.getters,stateObserver:this.state,dispatch:this.dispatch,selection:this.selection,moveClient:this.session.move.bind(this.session),custom:this.config.custom,uiActions:this.config,session:this.session}}checkDispatchAllowed(e){const t=io(e)?this.checkDispatchAllowedCoreCommand(e):this.checkDispatchAllowedLocalCommand(e);return t.some((e=>"Success"!==e))?new ro(t.flat()):ro.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}canDispatch=(e,t)=>this.checkDispatchAllowed(KT(e,t));dispatch=(e,t)=>{const o=KT(e,t);let s=this.status;if(this.getters.isReadonly()&&(n=o,!so.has(n.type)))return new ro("Readonly");var n;if(!this.session.canApplyOptimisticUpdate())return new ro("WaitingSessionConfirmation");switch(s){case 0:const t=this.checkDispatchAllowed(o);if(!t.isSuccessful)return t;this.status=1;const{changes:s,commands:n}=this.state.recordChanges((()=>{io(o)&&this.state.addCommand(o),this.dispatchToHandlers(this.handlers,o),this.finalize()}));this.session.save(o,n,s),this.status=0,this.trigger("update");break;case 1:if(io(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(io(o))throw new Error(`A UI plugin cannot dispatch ${e} while handling a core command`);this.dispatchToHandlers(this.handlers,o)}return ro.Success};dispatchFromCorePlugin=(e,t)=>{const o=KT(e,t),s=this.status;this.status=2;const n=this.isReplayingCommand?this.coreHandlers:this.handlers;return this.dispatchToHandlers(n,o),this.status=s,ro.Success};dispatchToHandlers(e,t){const o=io(t);for(const s of e)!o&&s instanceof dx||s.beforeHandle(t);for(const s of e)!o&&s instanceof dx||s.handle(t)}drawGrid(e){for(let[t,o]of this.renderers)e.ctx.save(),t.drawGrid(e,o),e.ctx.restore()}exportData(){let e=lx();for(let t of this.handlers)t instanceof dx&&t.export(e);return e.revisionId=this.session.getRevisionId()||W,e=le(e),e}updateMode(e){"normal"!==e&&this.dispatch("CANCEL_EDITION"),this.config.mode=e,this.trigger("update")}exportXLSX(){this.dispatch("EVALUATE_CELLS");let e={...lx(),sheets:[cx(ox,"Sheet1")]};for(let t of this.handlers)t instanceof hx&&t.exportForExcel(e);return e=le(e),YT(e)}garbageCollectExternalResources(){for(const e of this.corePlugins)e.garbageCollectExternalResources()}},e.Registry=Pi,e.Revision=GI,e.SPREADSHEET_DIMENSIONS=JT,e.Spreadsheet=YR,e.UIPlugin=Jx,e.__info__=QT,e.addFunction=function e(t,o){return Wf.add(t,o),{addFunction:(t,o)=>e(t,o)}},e.astToFormula=Mx,e.compile=Vx,e.compileTokens=Ux,e.components=sA,e.constants=iA,e.convertAstNodes=Tx,e.coreTypes=no,e.findCellInNewZone=Rn,e.functionCache=kx,e.helpers=tA,e.hooks=nA,e.invalidateCFEvaluationCommands=oo,e.invalidateDependenciesCommands=to,e.invalidateEvaluationCommands=eo,e.iterateAstNodes=Ax,e.links=oA,e.load=sx,e.parse=Ix,e.parseTokens=Rx,e.readonlyAllowedCommands=so,e.registries=eA,e.setDefaultSheetViewSize=function(e){oe=e},e.setTranslationMethod=function(e,t=(()=>!0)){Zt=e,Yt=t},e.tokenize=Br,QT.version="17.2.0-alpha.1",QT.date="2024-01-17T10:27:26.763Z",QT.hash="296f467"}(this.o_spreadsheet=this.o_spreadsheet||{},owl);