diff --git a/dist/main.cjs b/dist/main.cjs index 222c1f7..fd184bd 100644 --- a/dist/main.cjs +++ b/dist/main.cjs @@ -1,7 +1,7 @@ -"use strict";var _=Object.defineProperty;var z=(r,t,e)=>t in r?_(r,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[t]=e;var s=(r,t,e)=>(z(r,typeof t!="symbol"?t+"":t,e),e);Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});var u;(function(r){r.CELL_CLICK="CELL_CLICK",r.SELECTION_CHANGE="CHANGE_SELECTION",r.CELL_CHANGE="CELL_CHANGE",r.COPY_CELLS="COPY_CELLS"})(u||(u={}));class O{constructor(t){s(this,"root");s(this,"cellClick",(t,e)=>{var c,a;if(t.button!==0)return;const{offsetX:o,offsetY:l}=t,i=this.root.getCellByCoords(o,l),n=this.root.getCell(i),h=new S;h.selectedCell=i,h.selectedRange={from:i,to:i},e.setSelectingMode(!0),this.changeSelection(h,!0),(a=(c=this.root.config).onCellClick)==null||a.call(c,t,n)});s(this,"changeSelection",(t,e=!1)=>{var o,l;this.root.selection=t,e&&((l=(o=this.root.config).onSelectonChange)==null||l.call(o,t)),this.root.renderSheet(),this.root.renderColumnsBar(),this.root.renderRowsBar()});s(this,"copy",(t,e,o)=>{var l,i;(i=(l=this.root.config).onCopy)==null||i.call(l,t,e,o)});this.root=t}dispatch(t){switch(t.type){case u.CELL_CLICK:{const{event:e,scroller:o}=t;this.cellClick(e,o);break}case u.SELECTION_CHANGE:{const{selection:e,enableCallback:o}=t;this.changeSelection(e,o);break}case u.CELL_CHANGE:{const{cell:e,enableCallback:o}=t;this.changeCellValues(e,o);break}case u.COPY_CELLS:{const{data:e,dataAsString:o,range:l}=t;this.copy(l,e,o);break}}}changeCellValues(t,e=!0){var o,l;e&&((l=(o=this.root.config).onCellChange)==null||l.call(o,t))}}class g{constructor(t,e){s(this,"x");s(this,"y");s(this,"width");s(this,"height");this.x=this.getXCoord(e.column,t),this.y=this.getYCoord(e.row,t),this.width=t.columns[e.column].width,this.height=t.rows[e.row].height}getXCoord(t,e){let o=0;for(let l=0;l{const{key:e}=t;switch(e){case"Escape":{this.hide();break}case"Enter":{if(!this.root.selection.selectedCell)return;this.root.changeCellValues(this.root.selection.selectedCell,{value:this.element.value,displayValue:this.element.value}),this.root.events.dispatch({type:u.CELL_CHANGE,cell:this.root.getCell(this.root.selection.selectedCell)}),this.hide(),this.root.renderSelection()}}});s(this,"handleClickOutside",t=>{const e=t.target;this.element.contains(e)||this.hide()});this.root=t;const e=document.createElement("input");e.classList.add(C+"editor"),this.element=e,this.hide()}hide(){this.element.style.display="none",this.element.classList.add("hide"),this.element.blur(),window.removeEventListener("click",this.handleClickOutside),this.element.removeEventListener("keydown",this.handleKeydown),this.root.focusTable()}show(t,e){const{height:o,width:l,x:i,y:n}=new g(this.root.config,t),h=this.root.getCell(t);this.element.classList.remove("hide"),this.element.style.top=n-this.root.viewport.top+this.root.columnsBarHeight+"px",this.element.style.left=i-this.root.viewport.left+this.root.rowsBarWidth+"px",this.element.style.width=l+"px",this.element.style.height=o+"px",this.element.style.display="block",window.addEventListener("click",this.handleClickOutside),this.element.addEventListener("keydown",this.handleKeydown),this.element.value=e||h.value,this.element.focus(),e||this.element.select()}}function B(r,t){return r.column===t.column&&r.row===t.row}class K{constructor(t){s(this,"element");s(this,"verticalScroller");s(this,"horizontalScroller");s(this,"root");s(this,"isSelecting",!1);s(this,"handleMouseMove",t=>{if(!this.isSelecting)return;const{offsetX:e,offsetY:o}=t,l=this.root.getCellByCoords(e,o);let i=!1;this.root.selection.selectedRange&&(i=!B(this.root.selection.selectedRange.to,l),i&&(this.root.selection.selectedRange.to=l,this.root.events.dispatch({type:u.SELECTION_CHANGE,selection:this.root.selection,enableCallback:!0})))});s(this,"handleMouseUp",()=>{this.isSelecting=!1;const t={...this.root.selection};this.root.selection.selectedRange&&B(this.root.selection.selectedRange.from,this.root.selection.selectedRange.to)&&(t.selectedRange=null,this.root.events.dispatch({type:u.SELECTION_CHANGE,selection:t,enableCallback:!1})),this.root.renderSheet(),this.root.renderColumnsBar(),this.root.renderRowsBar()});s(this,"handleDoubleClick",t=>{t.preventDefault();const e=this.root.getCellByCoords(t.offsetX,t.offsetY);this.root.showEditor(e)});s(this,"handleKeydown",t=>{if(["ArrowLeft","ArrowRight","ArrowUp","ArrowDown"].includes(t.key)){switch(t.preventDefault(),this.root.selection.selectedRange=null,t.key){case"ArrowLeft":{this.root.selection.selectedCell&&this.root.selection.selectedCell.column>0&&(this.root.selection.selectedCell.column-=1);break}case"ArrowRight":{this.root.selection.selectedCell&&this.root.selection.selectedCell.column0&&(this.root.selection.selectedCell.row-=1);break}case"ArrowDown":{this.root.selection.selectedCell&&this.root.selection.selectedCell.rowa.slice(i.column,n.column+1))]}else if(this.root.selection.selectedCell){const{column:i,row:n}=this.root.selection.selectedCell;o=[[this.root.data[n][i]]],l.selectedRange={from:this.root.selection.selectedCell,to:this.root.selection.selectedCell}}else return;this.root.clipboard.copy(o,l.selectedRange);return}t.code}});s(this,"handleClick",t=>{this.root.events.dispatch({type:u.CELL_CLICK,event:t,scroller:this})});s(this,"handleScroll",()=>{const t=this.getViewportBoundlingRect();this.root.viewport.updateValues(t),this.root.renderSheet(),this.root.renderColumnsBar(),this.root.renderRowsBar()});this.root=t;const{horizontalScroller:e,scroller:o,verticalScroller:l}=this.buildComponent();this.element=o,this.verticalScroller=l,this.horizontalScroller=e,this.element.style.height=this.root.config.view.height+"px",this.element.style.width=this.root.config.view.width+"px",this.element.style.top=this.root.columnsBarHeight+"px",this.element.style.left=this.root.rowsBarWidth+"px",this.element.tabIndex=-1,this.updateScrollerSize(),this.element.addEventListener("scroll",this.handleScroll),this.element.addEventListener("mousedown",this.handleClick),this.element.addEventListener("mousemove",this.handleMouseMove),this.element.addEventListener("mouseup",this.handleMouseUp),this.element.addEventListener("dblclick",this.handleDoubleClick),this.element.addEventListener("keydown",this.handleKeydown),this.element.addEventListener("paste",i=>{this.root.selection.selectedCell&&this.root.clipboard.paste(this.root,this.root.selection.selectedCell,i)})}setSelectingMode(t){this.isSelecting=t}getViewportBoundlingRect(){const{scrollTop:t,scrollLeft:e}=this.element,{height:o,width:l}=this.element.getBoundingClientRect(),i=t+o,n=e+l;return{top:t,left:e,bottom:i,right:n}}buildComponent(){const t=document.createElement("div"),e=document.createElement("div"),o=document.createElement("div"),l=document.createElement("div"),i=document.createElement("div");return e.style.width="0px",e.style.pointerEvents="none",o.style.pointerEvents="none",l.style.display="flex",i.appendChild(e),i.appendChild(o),l.appendChild(i),this.verticalScroller=e,this.horizontalScroller=o,t.appendChild(l),t.contentEditable="false",t.classList.add(C+"scroller"),{scroller:t,verticalScroller:e,horizontalScroller:o}}getActualHeight(){return this.root.config.rows.reduce((t,e)=>(t+=e.height,t),0)}getActualWidth(){return this.root.config.columns.reduce((t,e)=>(t+=e.width,t),0)}updateScrollerSize(){const t=this.getActualHeight(),e=this.getActualWidth();this.setScrollerHeight(t),this.setScrollerWidth(e)}setScrollerHeight(t){this.verticalScroller.style.height=t+"px"}setScrollerWidth(t){this.horizontalScroller.style.width=t+"px"}}class b{constructor(t){s(this,"fontSize",16);s(this,"fontColor","black");s(this,"background","white");s(this,"borderColor","black");s(this,"selectedBackground","#4287f5");s(this,"selectedFontColor","#ffffff");t&&Object.assign(this,t)}}class L{constructor(t,e){s(this,"row");s(this,"column");this.row=t,this.column=e}}class V{constructor(t){s(this,"value");s(this,"displayValue");s(this,"resultValue");s(this,"position");s(this,"style");this.value=t.value,this.displayValue=t.displayValue,this.resultValue=t.resultValue,this.position=t.position,this.style=t.style}}class p{constructor(t){s(this,"value");s(this,"displayValue");s(this,"resultValue");s(this,"position");s(this,"style",null);this.value=t.value,this.displayValue=t.displayValue,this.resultValue=t.resultValue,this.position=t.position,this.style=t.style}getSerializableCell(){return new V({displayValue:this.displayValue,position:this.position,resultValue:this.resultValue,style:this.style,value:this.value})}changeStyles(t){this.style=t}changeValues(t){Object.assign(this,t)}render(t){const e=new g(t.config,this.position);let{x:o,y:l}=e;const{height:i,width:n}=e,{ctx:h}=t;l-=t.viewport.top,o-=t.viewport.left;const c=this.style??t.styles.cells;h.clearRect(o,l,n,i),h.fillStyle=c.background,h.strokeStyle="black",h.fillRect(o,l,n-1,i-1),h.strokeRect(o,l,n,i),h.fillStyle=c.fontColor,h.textAlign="left",h.font=`${c.fontSize}px Arial`,h.textBaseline="middle",h.fillText(this.displayValue,o+2,l+i/2)}}class W{constructor(t){s(this,"element");s(this,"ctx");s(this,"root");this.root=t;const e=document.createElement("canvas");e.classList.add(C+"sheet"),e.height=this.root.config.view.height,e.width=this.root.config.view.width,e.style.width=this.root.config.view.width+"px",e.style.height=this.root.config.view.height+"px",e.style.left="0px",this.element=e;const o=this.element.getContext("2d");if(!o)throw new Error("Enable hardware acceleration");this.ctx=o}getCellByCoords(t,e){let o=0,l=0;for(;l<=e&&(l+=this.root.config.rows[o].height,!(l>=e));)o++;let i=0,n=0;for(;n<=t&&(n+=this.root.config.columns[i].width,!(n>=t));)i++;return new L(o,i)}renderCell(t){const{column:e,row:o}=t;this.root.data[o][e].render(this.root)}getSelectionRange(){const{selectedCell:t,selectedRange:e}=this.root.selection;if(!(!t&&!e)){if(e){const o=Math.min(e.from.row,e.to.row),l=Math.min(e.from.column,e.to.column),i=Math.max(e.from.row,e.to.row),n=Math.max(e.from.column,e.to.column),h=new g(this.root.config,{row:o,column:l});let c=0;for(let d=l;d<=n;d++)c+=this.root.config.columns[d].width;let a=0;for(let d=o;d<=i;d++)a+=this.root.config.rows[d].height;const f=h.x-this.root.viewport.left,m=h.y-this.root.viewport.top;return{x:f,y:m,height:a,width:c}}if(!e&&t){const o=new g(this.root.config,t);return o.x-=this.root.viewport.left,o.y-=this.root.viewport.top,o}}}renderSelectionRange(t,e,o,l){this.ctx.save(),this.ctx.strokeStyle="#47d1ff",this.ctx.lineWidth=3,this.ctx.strokeRect(t,e,o,l),this.ctx.fillStyle="#7da8ff50",this.ctx.fillRect(t,e,o,l),this.ctx.restore()}renderSelection(){const t=this.getSelectionRange();if(!t)return;const{height:e,width:o,x:l,y:i}=t;this.renderSelectionRange(l,i,o,e)}renderSheet(){const t=this.root.viewport.firstRow,e=this.root.viewport.lastCol+3,o=this.root.viewport.lastRow+3,l=this.root.viewport.firstCol;for(let i=t;i<=o;i++)for(let n=l;n<=e&&!(!this.root.config.columns[n]||!this.root.config.rows[i]);n++)this.renderCell({column:n,row:i});this.renderSelection()}}class F{constructor(t){s(this,"element");s(this,"root");this.root=t;const e=document.createElement("div");e.classList.add(C+"spreadsheet_container"),this.element=e,this.changeElementSizes(this.root.viewProps)}changeElementSizes(t){const{height:e,width:o}=t;this.element.style.width=o+this.root.rowsBarWidth+"px",this.element.style.height=e+this.root.columnsBarHeight+"px"}}class Y{constructor(t){s(this,"element");s(this,"root");s(this,"height",0);this.root=t;const e=document.createElement("div");e.classList.add(C+"toolbar"),this.element=e}}class x{constructor(t){s(this,"rows");s(this,"columns");s(this,"view",{width:800,height:600});s(this,"onCellClick",null);s(this,"onSelectonChange",null);s(this,"onCellChange",null);s(this,"onCopy");this.columns=t.columns,this.rows=t.rows,this.view=t.view,this.onCellClick=t.onCellClick??null,this.onSelectonChange=t.onSelectionChange??null,this.onCellChange=t.onCellChange??null,this.onCopy=t.onCopy??null}}class S{constructor(){s(this,"selectedCell",null);s(this,"selectedRange",null)}}class I{constructor(){s(this,"cells");this.cells=new b}}class v{constructor(t,e){s(this,"root");s(this,"top");s(this,"left");s(this,"right");s(this,"bottom");s(this,"firstRow");s(this,"lastRow");s(this,"firstCol");s(this,"lastCol");this.root=t,this.top=e.top,this.left=e.left,this.right=e.right,this.bottom=e.bottom,this.firstRow=this.getFirstRow(),this.lastCol=this.getFirstRow();//!Temp +"use strict";var D=Object.defineProperty;var z=(r,t,e)=>t in r?D(r,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[t]=e;var s=(r,t,e)=>(z(r,typeof t!="symbol"?t+"":t,e),e);Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});var u;(function(r){r.CELL_CLICK="CELL_CLICK",r.SELECTION_CHANGE="CHANGE_SELECTION",r.CELL_CHANGE="CELL_CHANGE",r.COPY_CELLS="COPY_CELLS"})(u||(u={}));class O{constructor(t){s(this,"root");s(this,"cellClick",(t,e)=>{var c,a;if(t.button!==0)return;const{offsetX:o,offsetY:l}=t,i=this.root.getCellByCoords(o,l),n=this.root.getCell(i),h=new S;h.selectedCell=i,h.selectedRange={from:i,to:i},e.setSelectingMode(!0),this.changeSelection(h,!0),(a=(c=this.root.config).onCellClick)==null||a.call(c,t,n)});s(this,"changeSelection",(t,e=!1)=>{var o,l;this.root.selection=t,e&&((l=(o=this.root.config).onSelectonChange)==null||l.call(o,t)),this.root.renderSheet(),this.root.renderColumnsBar(),this.root.renderRowsBar()});s(this,"copy",(t,e,o)=>{var l,i;(i=(l=this.root.config).onCopy)==null||i.call(l,t,e,o)});this.root=t}dispatch(t){switch(t.type){case u.CELL_CLICK:{const{event:e,scroller:o}=t;this.cellClick(e,o);break}case u.SELECTION_CHANGE:{const{selection:e,enableCallback:o}=t;this.changeSelection(e,o);break}case u.CELL_CHANGE:{const{cell:e,enableCallback:o}=t;this.changeCellValues(e,o);break}case u.COPY_CELLS:{const{data:e,dataAsString:o,range:l}=t;this.copy(l,e,o);break}}}changeCellValues(t,e=!0){var o,l;e&&((l=(o=this.root.config).onCellChange)==null||l.call(o,t))}}class g{constructor(t,e){s(this,"x");s(this,"y");s(this,"width");s(this,"height");this.x=this.getXCoord(e.column,t),this.y=this.getYCoord(e.row,t),this.width=t.columns[e.column].width,this.height=t.rows[e.row].height}getXCoord(t,e){let o=0;for(let l=0;l{const{key:e}=t;switch(e){case"Escape":{this.hide();break}case"Enter":{if(!this.root.selection.selectedCell)return;this.root.changeCellValues(this.root.selection.selectedCell,{value:this.element.value,displayValue:this.element.value}),this.root.events.dispatch({type:u.CELL_CHANGE,cell:this.root.getCell(this.root.selection.selectedCell)}),this.hide(),this.root.renderSelection()}}});s(this,"handleClickOutside",t=>{const e=t.target;this.element.contains(e)||this.hide()});this.root=t;const e=document.createElement("input");e.classList.add(C+"editor"),this.element=e,this.hide()}hide(){this.element.style.display="none",this.element.classList.add("hide"),this.element.blur(),window.removeEventListener("click",this.handleClickOutside),this.element.removeEventListener("keydown",this.handleKeydown),this.root.focusTable()}show(t,e){const{height:o,width:l,x:i,y:n}=new g(this.root.config,t),h=this.root.getCell(t);this.element.classList.remove("hide"),this.element.style.top=n-this.root.viewport.top+this.root.columnsBarHeight+"px",this.element.style.left=i-this.root.viewport.left+this.root.rowsBarWidth+"px",this.element.style.width=l+"px",this.element.style.height=o+"px",this.element.style.display="block",window.addEventListener("click",this.handleClickOutside),this.element.addEventListener("keydown",this.handleKeydown),this.element.value=e||h.value,this.element.focus(),e||this.element.select()}}function B(r,t){return r.column===t.column&&r.row===t.row}class K{constructor(t){s(this,"element");s(this,"verticalScroller");s(this,"horizontalScroller");s(this,"root");s(this,"isSelecting",!1);s(this,"handleMouseMove",t=>{if(!this.isSelecting)return;const{offsetX:e,offsetY:o}=t,l=this.root.getCellByCoords(e,o);let i=!1;this.root.selection.selectedRange&&(i=!B(this.root.selection.selectedRange.to,l),i&&(this.root.selection.selectedRange.to=l,this.root.events.dispatch({type:u.SELECTION_CHANGE,selection:this.root.selection,enableCallback:!0})))});s(this,"handleMouseUp",()=>{this.isSelecting=!1;const t={...this.root.selection};this.root.selection.selectedRange&&B(this.root.selection.selectedRange.from,this.root.selection.selectedRange.to)&&(t.selectedRange=null,this.root.events.dispatch({type:u.SELECTION_CHANGE,selection:t,enableCallback:!1})),this.root.renderSheet(),this.root.renderColumnsBar(),this.root.renderRowsBar()});s(this,"handleDoubleClick",t=>{t.preventDefault();const e=this.root.getCellByCoords(t.offsetX,t.offsetY);this.root.showEditor(e)});s(this,"handleKeydown",t=>{if(["ArrowLeft","ArrowRight","ArrowUp","ArrowDown"].includes(t.key)){switch(t.preventDefault(),this.root.selection.selectedRange=null,t.key){case"ArrowLeft":{this.root.selection.selectedCell&&this.root.selection.selectedCell.column>0&&(this.root.selection.selectedCell.column-=1);break}case"ArrowRight":{this.root.selection.selectedCell&&this.root.selection.selectedCell.column0&&(this.root.selection.selectedCell.row-=1);break}case"ArrowDown":{this.root.selection.selectedCell&&this.root.selection.selectedCell.rowa.slice(i.column,n.column+1))]}else if(this.root.selection.selectedCell){const{column:i,row:n}=this.root.selection.selectedCell;o=[[this.root.data[n][i]]],l.selectedRange={from:this.root.selection.selectedCell,to:this.root.selection.selectedCell}}else return;this.root.clipboard.copy(o,l.selectedRange);return}t.code}});s(this,"handleClick",t=>{this.root.events.dispatch({type:u.CELL_CLICK,event:t,scroller:this})});s(this,"handleScroll",()=>{const t=this.getViewportBoundlingRect();this.root.viewport.updateValues(t),this.root.renderSheet(),this.root.renderColumnsBar(),this.root.renderRowsBar()});this.root=t;const{horizontalScroller:e,scroller:o,verticalScroller:l}=this.buildComponent();this.element=o,this.verticalScroller=l,this.horizontalScroller=e,this.element.style.height=this.root.config.view.height+"px",this.element.style.width=this.root.config.view.width+"px",this.element.style.top=this.root.columnsBarHeight+"px",this.element.style.left=this.root.rowsBarWidth+"px",this.element.tabIndex=-1,this.updateScrollerSize(),this.element.addEventListener("scroll",this.handleScroll),this.element.addEventListener("mousedown",this.handleClick),this.element.addEventListener("mousemove",this.handleMouseMove),this.element.addEventListener("mouseup",this.handleMouseUp),this.element.addEventListener("dblclick",this.handleDoubleClick),this.element.addEventListener("keydown",this.handleKeydown),this.element.addEventListener("paste",i=>{this.root.selection.selectedCell&&this.root.clipboard.paste(this.root,this.root.selection.selectedCell,i)})}setSelectingMode(t){this.isSelecting=t}getViewportBoundlingRect(){const{scrollTop:t,scrollLeft:e}=this.element,{height:o,width:l}=this.element.getBoundingClientRect(),i=t+o,n=e+l;return{top:t,left:e,bottom:i,right:n}}buildComponent(){const t=document.createElement("div"),e=document.createElement("div"),o=document.createElement("div"),l=document.createElement("div"),i=document.createElement("div");return e.style.width="0px",e.style.pointerEvents="none",o.style.pointerEvents="none",l.style.display="flex",i.appendChild(e),i.appendChild(o),l.appendChild(i),this.verticalScroller=e,this.horizontalScroller=o,t.appendChild(l),t.contentEditable="false",t.classList.add(C+"scroller"),{scroller:t,verticalScroller:e,horizontalScroller:o}}getActualHeight(){return this.root.config.rows.reduce((t,e)=>(t+=e.height,t),0)}getActualWidth(){return this.root.config.columns.reduce((t,e)=>(t+=e.width,t),0)}updateScrollerSize(){const t=this.getActualHeight(),e=this.getActualWidth();this.setScrollerHeight(t),this.setScrollerWidth(e)}setScrollerHeight(t){this.verticalScroller.style.height=t+"px"}setScrollerWidth(t){this.horizontalScroller.style.width=t+"px"}}class b{constructor(t){s(this,"fontSize",16);s(this,"fontColor","black");s(this,"background","white");s(this,"borderColor","black");s(this,"selectedBackground","#4287f5");s(this,"selectedFontColor","#ffffff");t&&Object.assign(this,t)}}class L{constructor(t,e){s(this,"row");s(this,"column");this.row=t,this.column=e}}class V{constructor(t){s(this,"value");s(this,"displayValue");s(this,"resultValue");s(this,"position");s(this,"style");this.value=t.value,this.displayValue=t.displayValue,this.resultValue=t.resultValue,this.position=t.position,this.style=t.style}}class p{constructor(t){s(this,"value");s(this,"displayValue");s(this,"resultValue");s(this,"position");s(this,"style",null);this.value=t.value,this.displayValue=t.displayValue,this.resultValue=t.resultValue,this.position=t.position,this.style=t.style}getSerializableCell(){return new V({displayValue:this.displayValue,position:this.position,resultValue:this.resultValue,style:this.style,value:this.value})}changeStyles(t){this.style=t}changeValues(t){Object.assign(this,t)}render(t){const e=new g(t.config,this.position);let{x:o,y:l}=e;const{height:i,width:n}=e,{ctx:h}=t;l-=t.viewport.top,o-=t.viewport.left;const c=this.style??t.styles.cells;h.clearRect(o,l,n,i),h.fillStyle=c.background,h.strokeStyle="black",h.fillRect(o,l,n-1,i-1),h.strokeRect(o,l,n,i),h.fillStyle=c.fontColor,h.textAlign="left",h.font=`${c.fontSize}px Arial`,h.textBaseline="middle",h.fillText(this.displayValue,o+2,l+i/2)}}class W{constructor(t){s(this,"element");s(this,"ctx");s(this,"root");this.root=t;const e=document.createElement("canvas");e.classList.add(C+"sheet"),e.height=this.root.config.view.height,e.width=this.root.config.view.width,e.style.width=this.root.config.view.width+"px",e.style.height=this.root.config.view.height+"px",e.style.left="0px",this.element=e;const o=this.element.getContext("2d");if(!o)throw new Error("Enable hardware acceleration");this.ctx=o}getCellByCoords(t,e){let o=0,l=0;for(;l<=e&&(l+=this.root.config.rows[o].height,!(l>=e));)o++;let i=0,n=0;for(;n<=t&&(n+=this.root.config.columns[i].width,!(n>=t));)i++;return new L(o,i)}renderCell(t){const{column:e,row:o}=t;this.root.data[o][e].render(this.root)}getSelectionRange(){const{selectedCell:t,selectedRange:e}=this.root.selection;if(!(!t&&!e)){if(e){const o=Math.min(e.from.row,e.to.row),l=Math.min(e.from.column,e.to.column),i=Math.max(e.from.row,e.to.row),n=Math.max(e.from.column,e.to.column),h=new g(this.root.config,{row:o,column:l});let c=0;for(let d=l;d<=n;d++)c+=this.root.config.columns[d].width;let a=0;for(let d=o;d<=i;d++)a+=this.root.config.rows[d].height;const f=h.x-this.root.viewport.left,m=h.y-this.root.viewport.top;return{x:f,y:m,height:a,width:c}}if(!e&&t){const o=new g(this.root.config,t);return o.x-=this.root.viewport.left,o.y-=this.root.viewport.top,o}}}renderSelectionRange(t,e,o,l){this.ctx.save(),this.ctx.strokeStyle="#7da8ff",this.ctx.lineWidth=3,this.ctx.strokeRect(t,e,o,l),this.ctx.fillStyle="#7da8ff35",this.ctx.fillRect(t,e,o,l),this.ctx.restore()}renderSelection(){const t=this.getSelectionRange();if(!t)return;const{height:e,width:o,x:l,y:i}=t;this.renderSelectionRange(l,i,o,e)}renderSheet(){const t=this.root.viewport.firstRow,e=this.root.viewport.lastCol+3,o=this.root.viewport.lastRow+3,l=this.root.viewport.firstCol;for(let i=t;i<=o;i++)for(let n=l;n<=e&&!(!this.root.config.columns[n]||!this.root.config.rows[i]);n++)this.renderCell({column:n,row:i});this.renderSelection()}}class F{constructor(t){s(this,"element");s(this,"root");this.root=t;const e=document.createElement("div");e.classList.add(C+"spreadsheet_container"),this.element=e,this.changeElementSizes(this.root.viewProps)}changeElementSizes(t){const{height:e,width:o}=t;this.element.style.width=o+this.root.rowsBarWidth+"px",this.element.style.height=e+this.root.columnsBarHeight+"px"}}class Y{constructor(t){s(this,"element");s(this,"root");s(this,"height",0);this.root=t;const e=document.createElement("div");e.classList.add(C+"toolbar"),this.element=e}}class x{constructor(t){s(this,"rows");s(this,"columns");s(this,"view",{width:800,height:600});s(this,"onCellClick",null);s(this,"onSelectonChange",null);s(this,"onCellChange",null);s(this,"onCopy");this.columns=t.columns,this.rows=t.rows,this.view=t.view,this.onCellClick=t.onCellClick??null,this.onSelectonChange=t.onSelectionChange??null,this.onCellChange=t.onCellChange??null,this.onCopy=t.onCopy??null}}class S{constructor(){s(this,"selectedCell",null);s(this,"selectedRange",null)}}class I{constructor(){s(this,"cells");this.cells=new b}}class v{constructor(t,e){s(this,"root");s(this,"top");s(this,"left");s(this,"right");s(this,"bottom");s(this,"firstRow");s(this,"lastRow");s(this,"firstCol");s(this,"lastCol");this.root=t,this.top=e.top,this.left=e.left,this.right=e.right,this.bottom=e.bottom,this.firstRow=this.getFirstRow(),this.lastCol=this.getFirstRow();//!Temp this.firstCol=this.getFirstRow();//!Temp -this.lastRow=this.getLastRow(),this.updateValues({top:0,left:0,right:this.root.viewProps.width,bottom:this.root.viewProps.height})}updateValues(t){this.top=t.top,this.left=t.left,this.right=t.right,this.bottom=t.bottom,this.firstRow=this.getFirstRow(),this.lastRow=this.getLastRow(),this.firstCol=this.getFirstCol(),this.lastCol=this.getLastCol()}getFirstRow(){return this.root.cache.getRowByYCoord(this.top)}getLastRow(){return this.root.cache.getRowByYCoord(this.bottom)}getFirstCol(){return this.root.cache.getColumnByXCoord(this.left)}getLastCol(){return this.root.cache.getColumnByXCoord(this.right)}}class R{constructor(t){s(this,"width");s(this,"title");this.width=t.width,this.title=t.title}}class E{constructor(t){s(this,"height");s(this,"title");this.height=t.height,this.title=t.title}}function k(r,t,e=!1){const o=[];for(let l=0;l<=r;l++){const i=[];for(let n=0;n<=t;n++){const h=e?`${l}:${n}`:"",c=new p({displayValue:h,resultValue:h,value:h,position:{column:n,row:l},style:null});i.push(c)}o.push(i)}return o}function A(r,t){const e=[];for(let i=0;i<=r;i++){const n=new E({height:40,title:String(i)});e.push(n)}const o=[];for(let i=0;i<=t;i++){const n=new R({title:String(i),width:150});o.push(n)}return new x({columns:o,rows:e,view:{height:600,width:800}})}function G(r,t){const e=k(r,t),o=A(r,t);return{data:e,config:o}}class P{constructor(t){s(this,"xPos");s(this,"colIdx");this.xPos=t.xPos,this.colIdx=t.colIdx}}class T{constructor(t){s(this,"yPos");s(this,"rowIdx");this.yPos=t.yPos,this.rowIdx=t.rowIdx}}class D{constructor(t){s(this,"columns");s(this,"rows");this.columns=t.columns,this.rows=t.rows}getRowByYCoord(t){let e=0;for(let o=0;o=Math.min(o.from.column,o.to.column)&&t<=Math.max(o.from.column,o.to.column):!1}renderText(t,e){const{width:o,x:l}=e;this.ctx.fillStyle="black",this.ctx.textAlign="center",this.ctx.textBaseline="middle",this.ctx.font="12px Arial",this.ctx.fillText(this.root.config.columns[t].title,l+o/2-this.root.viewport.left,0+this.height/2)}renderRect(t,e){const{width:o,x:l}=e,i=this.isColumnSelected(t);this.ctx.fillStyle=i?"#c7ebff":"white",this.ctx.strokeStyle="black",this.ctx.lineWidth=1;const n=l-this.root.viewport.left;this.ctx.fillRect(n-1,0,o,this.height),this.ctx.strokeRect(n-1,0,o,this.height)}renderSingleColumn(t){const e=new g(this.root.config,{row:0,column:t});this.renderRect(t,e),this.renderText(t,e)}renderBar(){const t=this.root.viewport.lastCol+3,e=this.root.viewport.firstCol;this.ctx.beginPath(),this.ctx.strokeStyle="black",this.ctx.lineWidth=1,this.ctx.moveTo(0,0),this.ctx.lineTo(0,this.height),this.ctx.closePath(),this.ctx.stroke();for(let o=e;o<=t&&this.root.config.columns[o];o++)this.renderSingleColumn(o)}}class j{constructor(t){s(this,"element");s(this,"ctx");s(this,"root");s(this,"width",35);s(this,"height");s(this,"resizerHeight",1);this.root=t,this.element=this.createElement();const e=this.element.getContext("2d");if(!e)throw new Error("Enable hardware acceleration");this.ctx=e,this.height=this.root.viewProps.height}createElement(){const t=document.createElement("canvas");return t.style.position="absolute",t.style.height=this.root.viewProps.height+"px",t.style.width=this.width+"px",t.style.display="block",t.style.borderTop="1px solid black",t.width=this.width,t.height=this.root.viewProps.height,t}setElementPosition(t,e){this.element.style.top=t+"px",this.element.style.left=e+"px"}isRowSelected(t){const{selectedCell:e,selectedRange:o}=this.root.selection;return e&&e.row===t?!0:o?t>=Math.min(o.from.row,o.to.row)&&t<=Math.max(o.from.row,o.to.row):!1}renderText(t,e){const{y:o,height:l}=e;this.ctx.fillStyle="black",this.ctx.textAlign="center",this.ctx.textBaseline="middle",this.ctx.font="12px Arial",this.ctx.fillText(this.root.config.rows[t].title,this.width/2,o-this.root.viewport.top+l/2)}renderRect(t,e){const{y:o,height:l}=e,i=this.isRowSelected(t);this.ctx.fillStyle=i?"#c7ebff":"white",this.ctx.strokeStyle="black",this.ctx.lineWidth=this.resizerHeight;const n=o-this.root.viewport.top;this.ctx.fillRect(0,n-1,this.width,l),this.ctx.strokeRect(0,n-1,this.width,l)}renderSingleRow(t){const e=new g(this.root.config,{column:0,row:t});this.renderRect(t,e),this.renderText(t,e)}renderBar(){const t=this.root.viewport.lastRow+3,e=this.root.viewport.firstRow;this.ctx.beginPath(),this.ctx.moveTo(0,0),this.ctx.strokeStyle="black",this.ctx.lineWidth=16,this.ctx.lineTo(35,0),this.ctx.closePath(),this.ctx.stroke();for(let o=e;o<=t&&this.root.config.rows[o];o++)this.renderSingleRow(o)}}class ${constructor(t){s(this,"saved",null);s(this,"root");this.root=t}copy(t,e){const o=t.map(l=>l.map(i=>i.displayValue).join(" ")).join(` +this.lastRow=this.getLastRow(),this.updateValues({top:0,left:0,right:this.root.viewProps.width,bottom:this.root.viewProps.height})}updateValues(t){this.top=t.top,this.left=t.left,this.right=t.right,this.bottom=t.bottom,this.firstRow=this.getFirstRow(),this.lastRow=this.getLastRow(),this.firstCol=this.getFirstCol(),this.lastCol=this.getLastCol()}getFirstRow(){return this.root.cache.getRowByYCoord(this.top)}getLastRow(){return this.root.cache.getRowByYCoord(this.bottom)}getFirstCol(){return this.root.cache.getColumnByXCoord(this.left)}getLastCol(){return this.root.cache.getColumnByXCoord(this.right)}}class R{constructor(t){s(this,"width");s(this,"title");this.width=t.width,this.title=t.title}}class E{constructor(t){s(this,"height");s(this,"title");this.height=t.height,this.title=t.title}}function k(r,t,e=!1){const o=[];for(let l=0;l<=r;l++){const i=[];for(let n=0;n<=t;n++){const h=e?`${l}:${n}`:"",c=new p({displayValue:h,resultValue:h,value:h,position:{column:n,row:l},style:null});i.push(c)}o.push(i)}return o}function A(r,t){const e=[];for(let i=0;i<=r;i++){const n=new E({height:40,title:String(i)});e.push(n)}const o=[];for(let i=0;i<=t;i++){const n=new R({title:String(i),width:150});o.push(n)}return new x({columns:o,rows:e,view:{height:600,width:800}})}function G(r,t){const e=k(r,t),o=A(r,t);return{data:e,config:o}}class P{constructor(t){s(this,"xPos");s(this,"colIdx");this.xPos=t.xPos,this.colIdx=t.colIdx}}class T{constructor(t){s(this,"yPos");s(this,"rowIdx");this.yPos=t.yPos,this.rowIdx=t.rowIdx}}class H{constructor(t){s(this,"columns");s(this,"rows");this.columns=t.columns,this.rows=t.rows}getRowByYCoord(t){let e=0;for(let o=0;o=Math.min(o.from.column,o.to.column)&&t<=Math.max(o.from.column,o.to.column):!1}renderText(t,e){const{width:o,x:l}=e;this.ctx.fillStyle="black",this.ctx.textAlign="center",this.ctx.textBaseline="middle",this.ctx.font="12px Arial",this.ctx.fillText(this.root.config.columns[t].title,l+o/2-this.root.viewport.left,0+this.height/2)}renderRect(t,e){const{width:o,x:l}=e,i=this.isColumnSelected(t);this.ctx.fillStyle=i?"#c7ebff":"white",this.ctx.strokeStyle="black",this.ctx.lineWidth=1;const n=l-this.root.viewport.left;this.ctx.fillRect(n-1,0,o,this.height),this.ctx.strokeRect(n-1,0,o,this.height)}renderSingleColumn(t){const e=new g(this.root.config,{row:0,column:t});this.renderRect(t,e),this.renderText(t,e)}renderBar(){const t=this.root.viewport.lastCol+3,e=this.root.viewport.firstCol;this.ctx.beginPath(),this.ctx.strokeStyle="black",this.ctx.lineWidth=1,this.ctx.moveTo(0,0),this.ctx.lineTo(0,this.height),this.ctx.closePath(),this.ctx.stroke();for(let o=e;o<=t&&this.root.config.columns[o];o++)this.renderSingleColumn(o)}}class j{constructor(t){s(this,"element");s(this,"ctx");s(this,"root");s(this,"width",35);s(this,"height");s(this,"resizerHeight",1);this.root=t,this.element=this.createElement();const e=this.element.getContext("2d");if(!e)throw new Error("Enable hardware acceleration");this.ctx=e,this.height=this.root.viewProps.height}createElement(){const t=document.createElement("canvas");return t.style.position="absolute",t.style.height=this.root.viewProps.height+"px",t.style.width=this.width+"px",t.style.display="block",t.style.borderTop="1px solid black",t.width=this.width,t.height=this.root.viewProps.height,t}setElementPosition(t,e){this.element.style.top=t+"px",this.element.style.left=e+"px"}isRowSelected(t){const{selectedCell:e,selectedRange:o}=this.root.selection;return e&&e.row===t?!0:o?t>=Math.min(o.from.row,o.to.row)&&t<=Math.max(o.from.row,o.to.row):!1}renderText(t,e){const{y:o,height:l}=e;this.ctx.fillStyle="black",this.ctx.textAlign="center",this.ctx.textBaseline="middle",this.ctx.font="12px Arial",this.ctx.fillText(this.root.config.rows[t].title,this.width/2,o-this.root.viewport.top+l/2)}renderRect(t,e){const{y:o,height:l}=e,i=this.isRowSelected(t);this.ctx.fillStyle=i?"#c7ebff":"white",this.ctx.strokeStyle="black",this.ctx.lineWidth=this.resizerHeight;const n=o-this.root.viewport.top;this.ctx.fillRect(0,n-1,this.width,l),this.ctx.strokeRect(0,n-1,this.width,l)}renderSingleRow(t){const e=new g(this.root.config,{column:0,row:t});this.renderRect(t,e),this.renderText(t,e)}renderBar(){const t=this.root.viewport.lastRow+3,e=this.root.viewport.firstRow;this.ctx.beginPath(),this.ctx.moveTo(0,0),this.ctx.strokeStyle="black",this.ctx.lineWidth=16,this.ctx.lineTo(35,0),this.ctx.closePath(),this.ctx.stroke();for(let o=e;o<=t&&this.root.config.rows[o];o++)this.renderSingleRow(o)}}class ${constructor(t){s(this,"saved",null);s(this,"root");this.root=t}copy(t,e){const o=t.map(l=>l.map(i=>i.displayValue).join(" ")).join(` `);this.saved=t,navigator.clipboard.writeText(o),this.root.events.dispatch({type:u.COPY_CELLS,data:t,dataAsString:o,range:e})}paste(t,{column:e,row:o},l){if(!this.saved){if(!l.clipboardData)return;const h=l.clipboardData.getData("text");try{const a=h.split(` -`).map(d=>d.split(" ")).map(d=>d.map(w=>{const y={displayValue:w,position:{column:e,row:o},resultValue:w,style:new b,value:w};return new p(y)})),f=a.length,m=a[0]?a[0].length:0;for(let d=0;d{this.changeCellValues(t.position,{displayValue:"",resultValue:"",value:""})});else{if(!this.selection.selectedCell)return;this.changeCellValues(this.selection.selectedCell,{displayValue:"",resultValue:"",value:""})}}showEditor(t,e){this.editor.show(t,e)}renderSheet(){this.sheet.renderSheet()}renderSelection(){this.sheet.renderSelection()}renderColumnsBar(){this.columnsBar.renderBar()}renderRowsBar(){this.rowsBar.renderBar()}renderCell(t,e){this.data[t][e].render(this)}loadData(t){const e=t.length,o=t[0]?t[0].length:0;console.log("!!FORMATTED DATA",e,o,t[0]),this.data=[];const l=[];for(let i=0;id.split(" ")).map(d=>d.map(w=>{const y={displayValue:w,position:{column:e,row:o},resultValue:w,style:new b,value:w};return new p(y)})),f=a.length,m=a[0]?a[0].length:0;for(let d=0;d{this.changeCellValues(t.position,{displayValue:"",resultValue:"",value:""})});else{if(!this.selection.selectedCell)return;this.changeCellValues(this.selection.selectedCell,{displayValue:"",resultValue:"",value:""})}}showEditor(t,e){this.editor.show(t,e)}renderSheet(){this.sheet.renderSheet()}renderSelection(){this.sheet.renderSelection()}renderColumnsBar(){this.columnsBar.renderBar()}renderRowsBar(){this.rowsBar.renderBar()}renderCell(t,e){this.data[t][e].render(this)}loadData(t){const e=t.length,o=t[0]?t[0].length:0;this.data=[];const l=[];for(let n=0;n {\n if (event.button !== 0)\n return; // Left mouse button\n const { offsetX, offsetY } = event;\n const clickedCell = this.root.getCellByCoords(offsetX, offsetY);\n const cell = this.root.getCell(clickedCell);\n const selection = new Selection();\n selection.selectedCell = clickedCell;\n selection.selectedRange = {\n from: clickedCell,\n to: clickedCell,\n };\n scroller.setSelectingMode(true);\n this.changeSelection(selection, true);\n this.root.config.onCellClick?.(event, cell);\n };\n changeSelection = (selection, enableCallback = false) => {\n this.root.selection = selection;\n if (enableCallback)\n this.root.config.onSelectonChange?.(selection);\n this.root.renderSheet();\n this.root.renderColumnsBar();\n this.root.renderRowsBar();\n };\n changeCellValues(cell, enableCallback = true) {\n if (enableCallback)\n this.root.config.onCellChange?.(cell);\n }\n copy = (range, data, dataAsString) => {\n this.root.config.onCopy?.(range, data, dataAsString);\n };\n}\n","export class RenderBox {\n x;\n y;\n width;\n height;\n constructor(config, cellPosition) {\n this.x = this.getXCoord(cellPosition.column, config);\n this.y = this.getYCoord(cellPosition.row, config);\n this.width = config.columns[cellPosition.column].width;\n this.height = config.rows[cellPosition.row].height;\n }\n getXCoord(column, config) {\n let x = 0;\n for (let i = 0; i < column; i++) {\n x += config.columns[i].width;\n }\n return x;\n }\n getYCoord(row, config) {\n let y = 0;\n for (let i = 0; i < row; i++) {\n y += config.rows[i].height;\n }\n return y;\n }\n}\n","import { CSS_PREFIX } from \"../main\";\nimport { EventTypes } from \"../modules/events\";\nimport { RenderBox } from \"../modules/renderBox\";\nexport class Editor {\n element;\n root;\n constructor(root) {\n this.root = root;\n const element = document.createElement(\"input\");\n element.classList.add(CSS_PREFIX + \"editor\");\n this.element = element;\n this.hide();\n }\n hide() {\n this.element.style.display = \"none\";\n this.element.classList.add(\"hide\");\n this.element.blur();\n window.removeEventListener(\"click\", this.handleClickOutside);\n this.element.removeEventListener(\"keydown\", this.handleKeydown);\n this.root.focusTable();\n }\n show(position, initialString) {\n const { height, width, x, y } = new RenderBox(this.root.config, position);\n const cell = this.root.getCell(position);\n this.element.classList.remove(\"hide\");\n this.element.style.top =\n y - this.root.viewport.top + this.root.columnsBarHeight + \"px\";\n this.element.style.left =\n x - this.root.viewport.left + this.root.rowsBarWidth + \"px\";\n this.element.style.width = width + \"px\";\n this.element.style.height = height + \"px\";\n this.element.style.display = \"block\";\n window.addEventListener(\"click\", this.handleClickOutside);\n this.element.addEventListener(\"keydown\", this.handleKeydown);\n this.element.value = initialString ? initialString : cell.value;\n this.element.focus();\n if (!initialString)\n this.element.select();\n }\n handleKeydown = (event) => {\n const { key } = event;\n switch (key) {\n case \"Escape\": {\n this.hide();\n break;\n }\n case \"Enter\": {\n if (!this.root.selection.selectedCell)\n return;\n this.root.changeCellValues(this.root.selection.selectedCell, {\n value: this.element.value,\n displayValue: this.element.value,\n });\n this.root.events.dispatch({\n type: EventTypes.CELL_CHANGE,\n cell: this.root.getCell(this.root.selection.selectedCell),\n });\n this.hide();\n this.root.renderSelection();\n }\n }\n };\n handleClickOutside = (event) => {\n const target = event.target;\n if (!this.element.contains(target)) {\n this.hide();\n }\n };\n}\n","export function checkEqualRanges(range1, range2) {\n const equalRows = range1.from.row === range2.to.row;\n const equalColumns = range1.from.column === range2.to.column;\n return equalRows && equalColumns;\n}\nexport function checkEqualCellSelections(selection1, selection2) {\n return (selection1.column === selection2.column && selection1.row === selection2.row);\n}\n","import { CSS_PREFIX, Selection } from \"../main\";\nimport { EventTypes } from \"../modules/events\";\nimport { checkEqualCellSelections } from \"../utils/position\";\nexport class Scroller {\n element;\n verticalScroller;\n horizontalScroller;\n root;\n isSelecting = false;\n constructor(root) {\n this.root = root;\n const { horizontalScroller, scroller, verticalScroller } = this.buildComponent();\n this.element = scroller;\n this.verticalScroller = verticalScroller;\n this.horizontalScroller = horizontalScroller;\n this.element.style.height = this.root.config.view.height + \"px\";\n this.element.style.width = this.root.config.view.width + \"px\";\n this.element.style.top = this.root.columnsBarHeight + \"px\";\n this.element.style.left = this.root.rowsBarWidth + \"px\";\n this.element.tabIndex = -1;\n this.updateScrollerSize(); //* Init size set\n this.element.addEventListener(\"scroll\", this.handleScroll);\n this.element.addEventListener(\"mousedown\", this.handleClick);\n this.element.addEventListener(\"mousemove\", this.handleMouseMove);\n this.element.addEventListener(\"mouseup\", this.handleMouseUp);\n this.element.addEventListener(\"dblclick\", this.handleDoubleClick);\n this.element.addEventListener(\"keydown\", this.handleKeydown);\n this.element.addEventListener(\"paste\", (event) => {\n if (!this.root.selection.selectedCell)\n return;\n this.root.clipboard.paste(this.root, this.root.selection.selectedCell, event);\n });\n }\n setSelectingMode(mode) {\n this.isSelecting = mode;\n }\n handleMouseMove = (event) => {\n if (!this.isSelecting)\n return;\n const { offsetX, offsetY } = event;\n const lastSelectedCell = this.root.getCellByCoords(offsetX, offsetY);\n let isRangeChanged = false;\n if (this.root.selection.selectedRange) {\n isRangeChanged = !checkEqualCellSelections(this.root.selection.selectedRange.to, lastSelectedCell);\n if (isRangeChanged) {\n this.root.selection.selectedRange.to = lastSelectedCell;\n this.root.events.dispatch({\n type: EventTypes.SELECTION_CHANGE,\n selection: this.root.selection,\n enableCallback: true,\n });\n }\n }\n };\n handleMouseUp = () => {\n this.isSelecting = false;\n const newSelection = { ...this.root.selection };\n if (this.root.selection.selectedRange) {\n if (checkEqualCellSelections(this.root.selection.selectedRange.from, this.root.selection.selectedRange.to)) {\n newSelection.selectedRange = null;\n this.root.events.dispatch({\n type: EventTypes.SELECTION_CHANGE,\n selection: newSelection,\n enableCallback: false,\n });\n }\n }\n this.root.renderSheet();\n this.root.renderColumnsBar();\n this.root.renderRowsBar();\n };\n handleDoubleClick = (event) => {\n event.preventDefault();\n const position = this.root.getCellByCoords(event.offsetX, event.offsetY);\n this.root.showEditor(position);\n };\n handleKeydown = (event) => {\n //* Navigation\n if ([\"ArrowLeft\", \"ArrowRight\", \"ArrowUp\", \"ArrowDown\"].includes(event.key)) {\n event.preventDefault();\n this.root.selection.selectedRange = null;\n switch (event.key) {\n case \"ArrowLeft\": {\n if (this.root.selection.selectedCell &&\n this.root.selection.selectedCell.column > 0) {\n this.root.selection.selectedCell.column -= 1;\n // this.root.renderSheet();\n }\n break;\n }\n case \"ArrowRight\": {\n if (this.root.selection.selectedCell &&\n this.root.selection.selectedCell.column <\n this.root.config.columns.length - 1) {\n this.root.selection.selectedCell.column += 1;\n // this.root.renderSheet();\n }\n break;\n }\n case \"ArrowUp\": {\n if (this.root.selection.selectedCell &&\n this.root.selection.selectedCell.row > 0) {\n this.root.selection.selectedCell.row -= 1;\n // this.root.renderSheet();\n }\n break;\n }\n case \"ArrowDown\": {\n if (this.root.selection.selectedCell &&\n this.root.selection.selectedCell.row <\n this.root.config.rows.length - 1) {\n this.root.selection.selectedCell.row += 1;\n // this.root.renderSheet();\n }\n break;\n }\n }\n this.root.events.dispatch({\n type: EventTypes.SELECTION_CHANGE,\n selection: this.root.selection,\n enableCallback: true,\n });\n }\n //* Start typings\n const keysRegex = /^([a-z]|[а-я]|[0-9])$/;\n if (!event.metaKey && !event.ctrlKey) {\n //* Prevent handle shortcutrs\n const isPressedLetterKey = keysRegex.test(event.key.toLowerCase());\n if (event.key === \"F2\" || isPressedLetterKey) {\n //* English and Russian keyboard. Or F2 button\n event.preventDefault();\n if (!this.root.selection.selectedCell)\n return;\n this.root.showEditor(this.root.selection.selectedCell, isPressedLetterKey ? event.key : undefined);\n }\n }\n if (event.key === \"Delete\") {\n event.preventDefault();\n this.root.deleteSelectedCellsValues();\n this.root.renderSheet();\n }\n if (event.metaKey || event.ctrlKey) {\n if (event.code === \"KeyC\") {\n let cells = undefined;\n const selection = new Selection();\n if (this.root.selection.selectedRange) {\n const { from, to } = this.root.selection.selectedRange;\n selection.selectedRange = this.root.selection.selectedRange;\n const subArrByRows = this.root.data.slice(from.row, to.row + 1);\n const subArrByCols = subArrByRows.map((row) => {\n return row.slice(from.column, to.column + 1);\n });\n cells = [...subArrByCols];\n }\n else if (this.root.selection.selectedCell) {\n const { column, row } = this.root.selection.selectedCell;\n cells = [[this.root.data[row][column]]];\n selection.selectedRange = {\n from: this.root.selection.selectedCell,\n to: this.root.selection.selectedCell,\n };\n }\n else {\n return;\n }\n this.root.clipboard.copy(cells, selection.selectedRange);\n return;\n }\n if (event.code === \"KeyV\") {\n // if (!this.root.selection.selectedCell) return;\n // this.root.clipboard.paste(this.root, this.root.selection.selectedCell);\n }\n }\n };\n handleClick = (event) => {\n this.root.events.dispatch({\n type: EventTypes.CELL_CLICK,\n event,\n scroller: this,\n });\n };\n handleScroll = () => {\n const rect = this.getViewportBoundlingRect();\n this.root.viewport.updateValues(rect);\n this.root.renderSheet();\n this.root.renderColumnsBar();\n this.root.renderRowsBar();\n };\n getViewportBoundlingRect() {\n const { scrollTop, scrollLeft } = this.element;\n const { height, width } = this.element.getBoundingClientRect();\n const bottom = scrollTop + height;\n const right = scrollLeft + width;\n return {\n top: scrollTop,\n left: scrollLeft,\n bottom,\n right,\n };\n }\n buildComponent() {\n const scroller = document.createElement(\"div\");\n const verticalScroller = document.createElement(\"div\");\n const horizontalScroller = document.createElement(\"div\");\n const groupScrollers = document.createElement(\"div\");\n const stack = document.createElement(\"div\");\n verticalScroller.style.width = \"0px\";\n verticalScroller.style.pointerEvents = \"none\";\n horizontalScroller.style.pointerEvents = \"none\";\n groupScrollers.style.display = \"flex\";\n stack.appendChild(verticalScroller);\n stack.appendChild(horizontalScroller);\n groupScrollers.appendChild(stack);\n this.verticalScroller = verticalScroller;\n this.horizontalScroller = horizontalScroller;\n scroller.appendChild(groupScrollers);\n scroller.contentEditable = \"false\";\n scroller.classList.add(CSS_PREFIX + \"scroller\");\n return { scroller, verticalScroller, horizontalScroller };\n }\n getActualHeight() {\n return this.root.config.rows.reduce((acc, curr) => {\n acc += curr.height;\n return acc;\n }, 0);\n }\n getActualWidth() {\n return this.root.config.columns.reduce((acc, curr) => {\n acc += curr.width;\n return acc;\n }, 0);\n }\n updateScrollerSize() {\n const totalHeight = this.getActualHeight();\n const totalWidth = this.getActualWidth();\n this.setScrollerHeight(totalHeight);\n this.setScrollerWidth(totalWidth);\n }\n setScrollerHeight(height) {\n this.verticalScroller.style.height = height + \"px\";\n }\n setScrollerWidth(width) {\n this.horizontalScroller.style.width = width + \"px\";\n }\n}\n","import { RenderBox } from \"./renderBox\";\nexport class CellStyles {\n fontSize = 16;\n fontColor = \"black\";\n background = \"white\";\n borderColor = \"black\";\n selectedBackground = \"#4287f5\";\n selectedFontColor = \"#ffffff\";\n constructor(props) {\n if (props) {\n Object.assign(this, props); // Override default styles\n }\n }\n}\nexport class Position {\n row;\n column;\n constructor(row, column) {\n this.row = row;\n this.column = column;\n }\n}\nexport class SerializableCell {\n value;\n displayValue;\n resultValue;\n position;\n style;\n constructor(props) {\n this.value = props.value;\n this.displayValue = props.displayValue;\n this.resultValue = props.resultValue;\n this.position = props.position;\n this.style = props.style;\n }\n}\nexport class Cell {\n /** True value (data) */\n value;\n /** Value to render */\n displayValue;\n /** This refers to the values that were obtained by calculations, for example, after calculating the formula */\n resultValue;\n position;\n style = null;\n constructor(props) {\n this.value = props.value;\n this.displayValue = props.displayValue;\n this.resultValue = props.resultValue;\n this.position = props.position;\n this.style = props.style;\n }\n getSerializableCell() {\n const cell = new SerializableCell({\n displayValue: this.displayValue,\n position: this.position,\n resultValue: this.resultValue,\n style: this.style,\n value: this.value,\n });\n return cell;\n }\n changeStyles(styles) {\n this.style = styles;\n }\n changeValues(values) {\n Object.assign(this, values);\n }\n // private isCellInRange(root: Spreadsheet): boolean {\n // const { column, row } = this.position;\n // const { selectedRange } = root.selection;\n // if (!selectedRange) return false;\n // const isCellInRow =\n // row >= Math.min(selectedRange.from.row, selectedRange.to.row) &&\n // row <= Math.max(selectedRange.to.row, selectedRange.from.row);\n // const isCellInCol =\n // column >= Math.min(selectedRange.from.column, selectedRange.to.column) &&\n // column <= Math.max(selectedRange.to.column, selectedRange.from.column);\n // return isCellInCol && isCellInRow;\n // }\n render(root) {\n const renderBox = new RenderBox(root.config, this.position);\n let { x, y } = renderBox;\n const { height, width } = renderBox;\n const { ctx } = root;\n // const isCellSelected =\n // root.selection.selectedCell?.row === this.position.row &&\n // root.selection.selectedCell.column === this.position.column;\n // const isCellInRange = this.isCellInRange(root);\n y -= root.viewport.top;\n x -= root.viewport.left;\n const styles = this.style ?? root.styles.cells;\n ctx.clearRect(x, y, width, height);\n ctx.fillStyle = styles.background;\n ctx.strokeStyle = \"black\";\n ctx.fillRect(x, y, width - 1, height - 1);\n ctx.strokeRect(x, y, width, height);\n ctx.fillStyle = styles.fontColor;\n ctx.textAlign = \"left\";\n ctx.font = `${styles.fontSize}px Arial`;\n ctx.textBaseline = \"middle\";\n ctx.fillText(this.displayValue, x + 2, y + height / 2);\n }\n}\n","import { CSS_PREFIX, RenderBox } from \"../main\";\nimport { Position } from \"../modules/cell\";\n/**\n * Display (CANVAS) element where cells render\n */\nexport class Sheet {\n element;\n ctx;\n root;\n constructor(root) {\n this.root = root;\n const canvas = document.createElement(\"canvas\");\n canvas.classList.add(CSS_PREFIX + \"sheet\");\n //* Set up canvas sizes based on provided root config\n canvas.height = this.root.config.view.height;\n canvas.width = this.root.config.view.width;\n canvas.style.width = this.root.config.view.width + \"px\";\n canvas.style.height = this.root.config.view.height + \"px\";\n canvas.style.left = \"0px\";\n this.element = canvas;\n const ctx = this.element.getContext(\"2d\");\n if (!ctx)\n throw new Error(\"Enable hardware acceleration\");\n this.ctx = ctx;\n }\n getCellByCoords(x, y) {\n let row = 0;\n let height = 0;\n while (height <= y) {\n height += this.root.config.rows[row].height;\n if (height >= y)\n break;\n row++;\n }\n let col = 0;\n let width = 0;\n while (width <= x) {\n width += this.root.config.columns[col].width;\n if (width >= x)\n break;\n col++;\n }\n return new Position(row, col);\n }\n renderCell(position) {\n const { column, row } = position;\n this.root.data[row][column].render(this.root);\n }\n getSelectionRange() {\n const { selectedCell, selectedRange } = this.root.selection;\n if (!selectedCell && !selectedRange)\n return;\n if (selectedRange) {\n const startRow = Math.min(selectedRange.from.row, selectedRange.to.row);\n const startCol = Math.min(selectedRange.from.column, selectedRange.to.column);\n const lastRow = Math.max(selectedRange.from.row, selectedRange.to.row);\n const lastCol = Math.max(selectedRange.from.column, selectedRange.to.column);\n const startCellBox = new RenderBox(this.root.config, {\n row: startRow,\n column: startCol,\n });\n let width = 0;\n for (let col = startCol; col <= lastCol; col++) {\n width += this.root.config.columns[col].width;\n }\n let height = 0;\n for (let row = startRow; row <= lastRow; row++) {\n height += this.root.config.rows[row].height;\n }\n const x = startCellBox.x - this.root.viewport.left;\n const y = startCellBox.y - this.root.viewport.top;\n return { x, y, height, width };\n }\n if (!selectedRange && selectedCell) {\n const box = new RenderBox(this.root.config, selectedCell);\n box.x -= this.root.viewport.left;\n box.y -= this.root.viewport.top;\n return box;\n }\n }\n renderSelectionRange(x, y, width, height) {\n this.ctx.save();\n this.ctx.strokeStyle = \"#47d1ff\";\n this.ctx.lineWidth = 3;\n this.ctx.strokeRect(x, y, width, height);\n this.ctx.fillStyle = \"#7da8ff50\";\n this.ctx.fillRect(x, y, width, height);\n this.ctx.restore();\n }\n renderSelection() {\n const box = this.getSelectionRange();\n if (!box)\n return;\n const { height, width, x, y } = box;\n this.renderSelectionRange(x, y, width, height);\n }\n renderSheet() {\n const firstRowIdx = this.root.viewport.firstRow;\n const lastColIdx = this.root.viewport.lastCol + 3;\n const lastRowIdx = this.root.viewport.lastRow + 3;\n const firstColIdx = this.root.viewport.firstCol;\n for (let row = firstRowIdx; row <= lastRowIdx; row++) {\n for (let col = firstColIdx; col <= lastColIdx; col++) {\n if (!this.root.config.columns[col] || !this.root.config.rows[row])\n break; //* Prevent read undefined\n this.renderCell({ column: col, row });\n }\n }\n this.renderSelection();\n }\n}\n","import { CSS_PREFIX } from \"../main\";\n/** Base (root) component */\nexport class Table {\n element;\n root;\n constructor(root) {\n this.root = root;\n const container = document.createElement(\"div\");\n container.classList.add(CSS_PREFIX + \"spreadsheet_container\");\n this.element = container;\n this.changeElementSizes(this.root.viewProps);\n }\n changeElementSizes(sizes) {\n const { height, width } = sizes;\n this.element.style.width = width + this.root.rowsBarWidth + \"px\";\n this.element.style.height = height + this.root.columnsBarHeight + \"px\";\n }\n}\n","import { CSS_PREFIX } from \"../main\";\nexport class Toolbar {\n element;\n root;\n height = 0;\n constructor(root) {\n this.root = root;\n const toolbarElement = document.createElement(\"div\");\n toolbarElement.classList.add(CSS_PREFIX + \"toolbar\");\n this.element = toolbarElement;\n }\n}\n","export class Config {\n rows;\n columns;\n view = {\n width: 800,\n height: 600,\n };\n onCellClick = null;\n onSelectonChange = null;\n onCellChange = null;\n onCopy;\n constructor(props) {\n this.columns = props.columns;\n this.rows = props.rows;\n this.view = props.view;\n this.onCellClick = props.onCellClick ?? null;\n this.onSelectonChange = props.onSelectionChange ?? null;\n this.onCellChange = props.onCellChange ?? null;\n this.onCopy = props.onCopy ?? null;\n }\n}\n","export class Selection {\n selectedCell = null;\n selectedRange = null;\n}\n","import { CellStyles } from \"./cell\";\nexport class Styles {\n cells;\n constructor() {\n this.cells = new CellStyles();\n }\n}\n","export class Viewport {\n root;\n top;\n left;\n right;\n bottom;\n firstRow;\n lastRow;\n firstCol;\n lastCol;\n constructor(root, props) {\n this.root = root;\n this.top = props.top;\n this.left = props.left;\n this.right = props.right;\n this.bottom = props.bottom;\n this.firstRow = this.getFirstRow();\n this.lastCol = this.getFirstRow(); //!Temp\n this.firstCol = this.getFirstRow(); //!Temp\n this.lastRow = this.getLastRow();\n this.updateValues({\n top: 0,\n left: 0,\n right: this.root.viewProps.width,\n bottom: this.root.viewProps.height,\n });\n }\n updateValues(props) {\n this.top = props.top;\n this.left = props.left;\n this.right = props.right;\n this.bottom = props.bottom;\n this.firstRow = this.getFirstRow();\n this.lastRow = this.getLastRow();\n this.firstCol = this.getFirstCol();\n this.lastCol = this.getLastCol();\n }\n /** Get index of first row in viewport */\n getFirstRow() {\n const rowIdx = this.root.cache.getRowByYCoord(this.top);\n return rowIdx;\n }\n getLastRow() {\n const rowIdx = this.root.cache.getRowByYCoord(this.bottom);\n return rowIdx;\n }\n getFirstCol() {\n const colIdx = this.root.cache.getColumnByXCoord(this.left);\n return colIdx;\n }\n getLastCol() {\n const colIdx = this.root.cache.getColumnByXCoord(this.right);\n return colIdx;\n }\n}\n","export class Column {\n width;\n title;\n constructor(props) {\n this.width = props.width;\n this.title = props.title;\n }\n}\n","export class Row {\n height;\n title;\n constructor(props) {\n this.height = props.height;\n this.title = props.title;\n }\n}\n","import { Cell } from \"../modules/cell\";\nimport { Column } from \"../modules/column\";\nimport { Config } from \"../modules/config\";\nimport { Row } from \"../modules/row\";\nexport function createSampleData(rows, columns, fillCellsByCoords = false) {\n const data = [];\n for (let row = 0; row <= rows; row++) {\n const innerRow = [];\n for (let col = 0; col <= columns; col++) {\n const value = fillCellsByCoords ? `${row}:${col}` : \"\";\n const cell = new Cell({\n displayValue: value,\n resultValue: value,\n value,\n position: {\n column: col,\n row: row,\n },\n style: null,\n });\n innerRow.push(cell);\n }\n data.push(innerRow);\n }\n return data;\n}\nexport function createSampleConfig(rows, columns) {\n const rowsArr = [];\n for (let i = 0; i <= rows; i++) {\n const rowItem = new Row({\n height: 40,\n title: String(i),\n });\n rowsArr.push(rowItem);\n }\n const colsArr = [];\n for (let i = 0; i <= columns; i++) {\n const colItem = new Column({\n title: String(i),\n width: 150,\n });\n colsArr.push(colItem);\n }\n const config = new Config({\n columns: colsArr,\n rows: rowsArr,\n view: {\n height: 600,\n width: 800,\n },\n });\n return config;\n}\nexport function makeSpreadsheetConfigAndData(rows, columns) {\n const data = createSampleData(rows, columns);\n const config = createSampleConfig(rows, columns);\n return { data, config };\n}\n","export class CachedColumn {\n xPos;\n colIdx;\n constructor(props) {\n this.xPos = props.xPos;\n this.colIdx = props.colIdx;\n }\n}\nexport class CachedRow {\n yPos;\n rowIdx;\n constructor(props) {\n this.yPos = props.yPos;\n this.rowIdx = props.rowIdx;\n }\n}\nexport class Cache {\n columns;\n rows;\n constructor(initial) {\n this.columns = initial.columns;\n this.rows = initial.rows;\n }\n getRowByYCoord(y) {\n let rowIdx = 0;\n for (let i = 0; i < this.rows.length; i++) {\n if (y <= this.rows[i].yPos) {\n //* Intersection detect\n rowIdx = i;\n break;\n }\n }\n return rowIdx;\n }\n getColumnByXCoord(x) {\n let colIdx = 0;\n for (let i = 0; i < this.columns.length; i++) {\n if (x <= this.columns[i].xPos) {\n //* Intersection detect\n colIdx = i;\n break;\n }\n }\n return colIdx;\n }\n}\n","import { RenderBox } from \"../main\";\nexport class ColumnsBar {\n element;\n root;\n height = 35;\n width;\n // private resizerWidth = 1;\n ctx;\n constructor(root) {\n this.root = root;\n this.element = this.createElement();\n const ctx = this.element.getContext(\"2d\");\n if (!ctx)\n throw new Error(\"Enable hardware acceleration\");\n this.ctx = ctx;\n this.width = this.root.viewProps.width;\n }\n createElement() {\n const element = document.createElement(\"canvas\");\n element.style.position = \"absolute\";\n element.style.height = this.height + \"px\";\n element.style.width = this.root.viewProps.width + \"px\";\n element.style.display = \"block\";\n element.style.borderLeft = \"1px solid black\";\n // element.style.boxSizing = 'border-box'\n element.width = this.root.viewProps.width;\n element.height = this.height;\n return element;\n }\n setElementPosition(top, left) {\n this.element.style.top = top + \"px\";\n this.element.style.left = left + \"px\";\n }\n isColumnSelected(column) {\n const { selectedCell, selectedRange } = this.root.selection;\n if (selectedCell && selectedCell.column === column)\n return true;\n if (selectedRange) {\n const inRange = column >=\n Math.min(selectedRange.from.column, selectedRange.to.column) &&\n column <= Math.max(selectedRange.from.column, selectedRange.to.column);\n return inRange;\n }\n return false;\n }\n // private getYCoordWithOffset(renderBox: RenderBox): number {\n // const {y} = renderBox\n // return y + this.root.toolbarHeight\n // }\n // private getXCoordWithOffset(renderBox: RenderBox): number {\n // const {x} = renderBox\n // return x\n // }\n renderText(column, renderBox) {\n const { width, x } = renderBox;\n this.ctx.fillStyle = \"black\";\n this.ctx.textAlign = \"center\";\n this.ctx.textBaseline = \"middle\";\n this.ctx.font = \"12px Arial\";\n this.ctx.fillText(this.root.config.columns[column].title, x + width / 2 - this.root.viewport.left, 0 + this.height / 2);\n }\n renderRect(column, renderBox) {\n const { width, x } = renderBox;\n const isColSelected = this.isColumnSelected(column);\n this.ctx.fillStyle = isColSelected ? \"#c7ebff\" : \"white\";\n this.ctx.strokeStyle = \"black\";\n this.ctx.lineWidth = 1;\n const specialX = x - this.root.viewport.left;\n this.ctx.fillRect(specialX - 1, 0, width, this.height);\n this.ctx.strokeRect(specialX - 1, 0, width, this.height);\n }\n renderSingleColumn(column) {\n const renderBox = new RenderBox(this.root.config, {\n row: 0,\n column: column,\n });\n this.renderRect(column, renderBox);\n this.renderText(column, renderBox);\n }\n renderBar() {\n const lastColIdx = this.root.viewport.lastCol + 3;\n const firstColIdx = this.root.viewport.firstCol;\n this.ctx.beginPath();\n this.ctx.strokeStyle = \"black\";\n this.ctx.lineWidth = 1;\n this.ctx.moveTo(0, 0);\n this.ctx.lineTo(0, this.height);\n this.ctx.closePath();\n this.ctx.stroke();\n for (let col = firstColIdx; col <= lastColIdx; col++) {\n if (!this.root.config.columns[col])\n break;\n this.renderSingleColumn(col);\n }\n }\n}\n","import { RenderBox } from \"../main\";\nexport class RowsBar {\n element;\n ctx;\n root;\n width = 35;\n height;\n resizerHeight = 1;\n constructor(root) {\n this.root = root;\n this.element = this.createElement();\n const ctx = this.element.getContext(\"2d\");\n if (!ctx)\n throw new Error(\"Enable hardware acceleration\");\n this.ctx = ctx;\n this.height = this.root.viewProps.height;\n }\n createElement() {\n const element = document.createElement(\"canvas\");\n element.style.position = \"absolute\";\n element.style.height = this.root.viewProps.height + \"px\";\n element.style.width = this.width + \"px\";\n element.style.display = \"block\";\n element.style.borderTop = \"1px solid black\";\n // element.style.boxSizing = 'border-box'\n element.width = this.width;\n element.height = this.root.viewProps.height;\n return element;\n }\n setElementPosition(top, left) {\n this.element.style.top = top + \"px\";\n this.element.style.left = left + \"px\";\n }\n isRowSelected(row) {\n const { selectedCell, selectedRange } = this.root.selection;\n if (selectedCell && selectedCell.row === row)\n return true;\n if (selectedRange) {\n const inRange = row >= Math.min(selectedRange.from.row, selectedRange.to.row) &&\n row <= Math.max(selectedRange.from.row, selectedRange.to.row);\n return inRange;\n }\n return false;\n }\n renderText(row, renderBox) {\n const { y, height } = renderBox;\n this.ctx.fillStyle = \"black\";\n this.ctx.textAlign = \"center\";\n this.ctx.textBaseline = \"middle\";\n this.ctx.font = \"12px Arial\";\n this.ctx.fillText(this.root.config.rows[row].title, this.width / 2, y - this.root.viewport.top + height / 2);\n }\n renderRect(column, renderBox) {\n const { y, height } = renderBox;\n const isRowSeleted = this.isRowSelected(column);\n this.ctx.fillStyle = isRowSeleted ? \"#c7ebff\" : \"white\";\n this.ctx.strokeStyle = \"black\";\n this.ctx.lineWidth = this.resizerHeight;\n const specialY = y - this.root.viewport.top;\n this.ctx.fillRect(0, specialY - 1, this.width, height);\n this.ctx.strokeRect(0, specialY - 1, this.width, height);\n }\n renderSingleRow(row) {\n const renderBox = new RenderBox(this.root.config, {\n column: 0,\n row: row,\n });\n this.renderRect(row, renderBox);\n this.renderText(row, renderBox);\n }\n renderBar() {\n const lastRowIdx = this.root.viewport.lastRow + 3;\n const firstRowIdx = this.root.viewport.firstRow;\n this.ctx.beginPath();\n this.ctx.moveTo(0, 0);\n this.ctx.strokeStyle = \"black\";\n this.ctx.lineWidth = 16;\n this.ctx.lineTo(35, 0);\n this.ctx.closePath();\n this.ctx.stroke();\n for (let row = firstRowIdx; row <= lastRowIdx; row++) {\n if (!this.root.config.rows[row])\n break;\n this.renderSingleRow(row);\n }\n }\n}\n","import { Cell, CellStyles } from \"./cell\";\nimport { EventTypes } from \"./events\";\nexport class Clipboard {\n saved = null;\n root;\n constructor(root) {\n this.root = root;\n }\n copy(data, range) {\n const mapedData = data\n .map((row) => {\n return row\n .map((item) => {\n return item.displayValue;\n })\n .join(\"\\t\");\n })\n .join(\"\\n\");\n this.saved = data;\n navigator.clipboard.writeText(mapedData);\n this.root.events.dispatch({\n type: EventTypes.COPY_CELLS,\n data,\n dataAsString: mapedData,\n range,\n });\n }\n paste(root, { column, row }, event) {\n if (!this.saved) {\n if (!event.clipboardData)\n return;\n const data = event.clipboardData.getData(\"text\");\n try {\n const arr = data.split(\"\\n\").map((item) => item.split(\"\\t\"));\n const arrayOfCells = arr.map((innerRow) => {\n return innerRow.map((item) => {\n const cellProps = {\n displayValue: item,\n position: {\n column,\n row,\n },\n resultValue: item,\n style: new CellStyles(),\n value: item,\n };\n return new Cell(cellProps);\n });\n });\n const rowsLength = arrayOfCells.length;\n const colsLength = arrayOfCells[0] ? arrayOfCells[0].length : 0;\n for (let i = 0; i < rowsLength; i++) {\n for (let j = 0; j < colsLength; j++) {\n const savedCell = arrayOfCells[i][j];\n const position = {\n column: column + j,\n row: row + i,\n };\n const values = {\n displayValue: savedCell.displayValue,\n value: savedCell.value,\n style: savedCell.style,\n };\n root.changeCellValues(position, values, false);\n }\n }\n }\n catch (err) {\n console.error(\"Cannot read clipboard. \", err);\n }\n root.renderSheet();\n return;\n }\n const rowsLength = this.saved.length;\n const colsLength = this.saved[0] ? this.saved[0].length : 0;\n for (let i = 0; i < rowsLength; i++) {\n for (let j = 0; j < colsLength; j++) {\n const savedCell = this.saved[i][j];\n const position = {\n column: column + j,\n row: row + i,\n };\n const values = {\n displayValue: savedCell.displayValue,\n value: savedCell.value,\n style: savedCell.style,\n };\n root.changeCellValues(position, values, false);\n }\n }\n }\n}\n","import { Editor } from \"./components/editor\";\nimport { Scroller } from \"./components/scroller\";\nimport { Sheet } from \"./components/sheet\";\nimport { Table } from \"./components/table\";\nimport { Toolbar } from \"./components/toolbar\";\nimport { Cell, } from \"./modules/cell\";\nimport { Config, } from \"./modules/config\";\nimport { Selection } from \"./modules/selection\";\nimport { Styles } from \"./modules/styles\";\nimport { Viewport } from \"./modules/viewport\";\nimport \"./scss/main.scss\";\nimport { createSampleData } from \"./utils/createData\";\nimport { Cache, CachedColumn, CachedRow } from \"./modules/cache\";\nimport { Row } from \"./modules/row\";\nimport { Column } from \"./modules/column\";\nimport { ColumnsBar } from \"./components/columnsBar\";\nimport { RowsBar } from \"./components/rowsBar\";\nimport { EventTypes, Events } from \"./modules/events\";\nimport { Clipboard } from \"./modules/clipboard\";\nexport const CSS_PREFIX = \"modern_sc_\";\nexport default class Spreadsheet {\n table;\n scroller;\n toolbar;\n rowsBar;\n columnsBar;\n sheet;\n editor;\n styles;\n config;\n data;\n viewport;\n selection;\n cache;\n events;\n clipboard;\n constructor(target, props) {\n const data = createSampleData(40, 40);\n const config = this.makeConfigFromData(data, props?.view ?? { height: 600, width: 800 });\n if (props?.view) {\n config.view = props.view;\n }\n this.config = new Config(config);\n this.config.onCellClick = props?.onCellClick ?? null;\n this.config.onSelectonChange = props?.onSelectionChange ?? null;\n this.config.onCellChange = props?.onCellChange ?? null;\n this.config.onCopy = props?.onCopy ?? null;\n this.rowsBar = new RowsBar(this);\n this.columnsBar = new ColumnsBar(this);\n this.sheet = new Sheet(this);\n this.table = new Table(this);\n this.scroller = new Scroller(this);\n this.toolbar = new Toolbar(this);\n this.editor = new Editor(this);\n this.cache = this.getInitialCache();\n this.viewport = new Viewport(this, this.scroller.getViewportBoundlingRect());\n this.selection = new Selection();\n this.events = new Events(this);\n this.clipboard = new Clipboard(this);\n this.data = data;\n this.styles = new Styles();\n this.buildComponent();\n this.setElementsPositions();\n this.appendTableToTarget(target);\n this.renderSheet();\n this.renderColumnsBar();\n this.renderRowsBar();\n }\n setRowsBarPosition() {\n const top = this.columnsBar.height + this.toolbar.height;\n const left = 0;\n this.rowsBar.setElementPosition(top, left);\n }\n setColumnsBarPosition() {\n const top = this.toolbar.height;\n const left = this.rowsBar.width;\n this.columnsBar.setElementPosition(top, left);\n }\n setElementsPositions() {\n this.setRowsBarPosition();\n this.setColumnsBarPosition();\n }\n getInitialCache() {\n const cachedCols = [];\n let currentWidth = 0;\n for (let i = 0; i <= this.config.columns.length - 1; i++) {\n const col = this.config.columns[i];\n currentWidth += col.width;\n const cacheCol = new CachedColumn({\n xPos: currentWidth,\n colIdx: i,\n });\n cachedCols.push(cacheCol);\n }\n const cachedRows = [];\n let currentHeight = 0;\n for (let i = 0; i <= this.config.rows.length - 1; i++) {\n const row = this.config.rows[i];\n currentHeight += row.height;\n const cacheRow = new CachedRow({\n yPos: currentHeight,\n rowIdx: i,\n });\n cachedRows.push(cacheRow);\n }\n const cache = new Cache({\n columns: cachedCols,\n rows: cachedRows,\n });\n return cache;\n }\n buildComponent() {\n const content = document.createElement(\"div\"); //* Abstract\n content.style.top = this.columnsBarHeight + \"px\";\n content.style.left = this.rowsBarWidth + \"px\";\n content.appendChild(this.sheet.element);\n content.classList.add(CSS_PREFIX + \"content\");\n this.table.element.appendChild(this.toolbar.element);\n this.table.element.appendChild(this.rowsBar.element);\n this.table.element.appendChild(this.columnsBar.element);\n this.table.element.appendChild(content);\n this.table.element.appendChild(this.scroller.element);\n this.table.element.append(this.editor.element);\n }\n /**Destroy spreadsheet DOM element.\n *\n * May be usefull when need to rerender component.\n */\n destroy() {\n this.table.element.remove();\n }\n appendTableToTarget(target) {\n if (typeof target === \"string\") {\n const element = document.querySelector(target);\n if (!element)\n throw new Error(`Element with selector ${target} is not finded in DOM.\\n Make sure it exists.`);\n element?.appendChild(this.table.element);\n }\n if (target instanceof HTMLElement) {\n target.append(this.table.element);\n }\n }\n /** Canvas rendering context 2D.\n *\n * Abble to draw on canvas with default CanvasAPI methods\n */\n get ctx() {\n return this.sheet.ctx;\n }\n get viewProps() {\n return this.config.view;\n }\n get columnsBarHeight() {\n return this.columnsBar.height;\n }\n get rowsBarWidth() {\n return this.rowsBar.width;\n }\n get toolbarHeight() {\n return this.toolbar.height;\n }\n /** Focusing on interactive part of spreadsheet */\n focusTable() {\n this.scroller.element.focus();\n }\n getCellByCoords(x, y) {\n return this.sheet.getCellByCoords(x, y);\n }\n getCell(position) {\n const { column, row } = position;\n return this.data[row][column];\n }\n changeCellValues(position, values, enableCallback = true) {\n const { column, row } = position;\n this.data[row][column].changeValues(values);\n this.events.dispatch({\n type: EventTypes.CELL_CHANGE,\n cell: this.data[row][column],\n enableCallback: enableCallback\n });\n this.renderCell(row, column);\n }\n changeCellStyles(position, styles) {\n const { column, row } = position;\n this.data[row][column].changeStyles(styles);\n this.renderCell(row, column);\n }\n applyActionToRange(range, callback) {\n const fromRow = Math.min(range.from.row, range.to.row);\n const toRow = Math.max(range.from.row, range.to.row);\n const fromCol = Math.min(range.from.column, range.to.column);\n const toCol = Math.max(range.from.column, range.to.column);\n for (let row = fromRow; row <= toRow; row++) {\n for (let col = fromCol; col <= toCol; col++) {\n const cell = this.data[row][col];\n callback(cell);\n }\n }\n }\n deleteSelectedCellsValues() {\n if (this.selection.selectedRange !== null) {\n this.applyActionToRange(this.selection.selectedRange, (cell) => {\n this.changeCellValues(cell.position, {\n displayValue: \"\",\n resultValue: \"\",\n value: \"\",\n });\n });\n }\n else {\n if (!this.selection.selectedCell)\n return;\n this.changeCellValues(this.selection.selectedCell, {\n displayValue: \"\",\n resultValue: \"\",\n value: \"\",\n });\n }\n }\n showEditor(position, initialString) {\n this.editor.show(position, initialString);\n }\n renderSheet() {\n this.sheet.renderSheet();\n }\n renderSelection() {\n this.sheet.renderSelection();\n }\n renderColumnsBar() {\n this.columnsBar.renderBar();\n }\n renderRowsBar() {\n this.rowsBar.renderBar();\n }\n renderCell(row, col) {\n this.data[row][col].render(this);\n }\n loadData(data) {\n const rowsLength = data.length;\n const colsLength = data[0] ? data[0].length : 0;\n console.log(\"!!FORMATTED DATA\", rowsLength, colsLength, data[0]);\n this.data = [];\n const formattedData = [];\n // Transform serialized objects to Cells\n for (let row = 0; row < rowsLength; row++) {\n const innerRow = [];\n for (let col = 0; col < colsLength; col++) {\n const cell = data[row][col];\n innerRow.push(new Cell({\n displayValue: cell.displayValue,\n position: cell.position,\n resultValue: cell.resultValue,\n value: cell.value,\n style: cell.style,\n }));\n }\n formattedData.push(innerRow);\n }\n this.data = formattedData;\n this.selection.selectedCell = null;\n this.selection.selectedRange = null;\n this.config = this.makeConfigFromData(formattedData, this.config.view);\n this.cache = this.getInitialCache();\n this.scroller.updateScrollerSize();\n this.viewport = new Viewport(this, this.scroller.getViewportBoundlingRect());\n this.renderSheet();\n return this;\n }\n makeConfigFromData(data, view) {\n const lastRowIdx = data.length - 1;\n const lastColIdx = data[0] ? data[0].length : 0;\n const rows = [];\n for (let row = 0; row < lastRowIdx; row++) {\n rows.push(new Row({\n height: 40,\n title: String(row),\n }));\n }\n const columns = [];\n for (let col = 0; col < lastColIdx; col++) {\n columns.push(new Column({\n width: 150,\n title: String(col),\n }));\n }\n const config = new Config({\n view,\n rows,\n columns,\n onCellClick: null,\n });\n return config;\n }\n serializeData() {\n const rowsLength = this.data.length;\n const colsLength = this.data[0] ? this.data[0].length : 0;\n const cellsArray = [];\n for (let row = 0; row < rowsLength; row++) {\n const innerRow = [];\n for (let col = 0; col < colsLength; col++) {\n innerRow.push(this.data[row][col].getSerializableCell());\n }\n cellsArray.push(innerRow);\n }\n return cellsArray;\n }\n}\nexport * from \"./modules/cache\";\nexport * from \"./modules/cell\";\nexport * from \"./modules/column\";\nexport * from \"./modules/config\";\nexport * from \"./modules/renderBox\";\nexport * from \"./modules/row\";\nexport * from \"./modules/selection\";\nexport * from \"./modules/styles\";\nexport * from \"./modules/viewport\";\nexport * from \"./utils/createData\";\n"],"names":["EventTypes","Events","root","__publicField","event","scroller","offsetX","offsetY","clickedCell","cell","selection","Selection","_b","_a","enableCallback","range","data","dataAsString","action","RenderBox","config","cellPosition","column","x","i","row","y","Editor","key","target","element","CSS_PREFIX","position","initialString","height","width","checkEqualCellSelections","selection1","selection2","Scroller","lastSelectedCell","isRangeChanged","newSelection","keysRegex","isPressedLetterKey","cells","from","to","rect","horizontalScroller","verticalScroller","mode","scrollTop","scrollLeft","bottom","right","groupScrollers","stack","acc","curr","totalHeight","totalWidth","CellStyles","props","Position","SerializableCell","Cell","styles","values","renderBox","ctx","Sheet","canvas","col","selectedCell","selectedRange","startRow","startCol","lastRow","lastCol","startCellBox","box","firstRowIdx","lastColIdx","lastRowIdx","firstColIdx","Table","container","sizes","Toolbar","toolbarElement","Config","Styles","Viewport","Column","Row","createSampleData","rows","columns","fillCellsByCoords","innerRow","value","createSampleConfig","rowsArr","rowItem","colsArr","colItem","makeSpreadsheetConfigAndData","CachedColumn","CachedRow","Cache","initial","rowIdx","colIdx","ColumnsBar","top","left","isColSelected","specialX","RowsBar","isRowSeleted","specialY","Clipboard","mapedData","item","arrayOfCells","cellProps","rowsLength","colsLength","j","savedCell","err","Spreadsheet","cachedCols","currentWidth","cacheCol","cachedRows","currentHeight","cacheRow","content","callback","fromRow","toRow","fromCol","toCol","formattedData","view","cellsArray"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"main.cjs","sources":["../src/modules/events.ts","../src/modules/renderBox.ts","../src/components/editor.ts","../src/utils/position.ts","../src/components/scroller.ts","../src/modules/cell.ts","../src/components/sheet.ts","../src/components/table.ts","../src/components/toolbar.ts","../src/modules/config.ts","../src/modules/selection.ts","../src/modules/styles.ts","../src/modules/viewport.ts","../src/modules/column.ts","../src/modules/row.ts","../src/utils/createData.ts","../src/modules/cache.ts","../src/components/columnsBar.ts","../src/components/rowsBar.ts","../src/modules/clipboard.ts","../src/main.ts"],"sourcesContent":["import { Selection } from \"../main\";\nexport var EventTypes;\n(function (EventTypes) {\n EventTypes[\"CELL_CLICK\"] = \"CELL_CLICK\";\n EventTypes[\"SELECTION_CHANGE\"] = \"CHANGE_SELECTION\";\n EventTypes[\"CELL_CHANGE\"] = \"CELL_CHANGE\";\n EventTypes[\"COPY_CELLS\"] = \"COPY_CELLS\";\n})(EventTypes || (EventTypes = {}));\nexport class Events {\n root;\n constructor(root) {\n this.root = root;\n }\n dispatch(action) {\n switch (action.type) {\n case EventTypes.CELL_CLICK: {\n const { event, scroller } = action;\n //\n //* Here may be side effects\n //\n this.cellClick(event, scroller);\n break;\n }\n case EventTypes.SELECTION_CHANGE: {\n const { selection, enableCallback } = action;\n //\n //* Here may be side effects\n //\n this.changeSelection(selection, enableCallback);\n break;\n }\n case EventTypes.CELL_CHANGE: {\n const { cell, enableCallback } = action;\n //\n //* Here may be side effects\n //\n this.changeCellValues(cell, enableCallback);\n break;\n }\n case EventTypes.COPY_CELLS: {\n const { data, dataAsString, range } = action;\n this.copy(range, data, dataAsString);\n break;\n }\n default: {\n break;\n }\n }\n }\n cellClick = (event, scroller) => {\n if (event.button !== 0)\n return; // Left mouse button\n const { offsetX, offsetY } = event;\n const clickedCell = this.root.getCellByCoords(offsetX, offsetY);\n const cell = this.root.getCell(clickedCell);\n const selection = new Selection();\n selection.selectedCell = clickedCell;\n selection.selectedRange = {\n from: clickedCell,\n to: clickedCell,\n };\n scroller.setSelectingMode(true);\n this.changeSelection(selection, true);\n this.root.config.onCellClick?.(event, cell);\n };\n changeSelection = (selection, enableCallback = false) => {\n this.root.selection = selection;\n if (enableCallback)\n this.root.config.onSelectonChange?.(selection);\n this.root.renderSheet();\n this.root.renderColumnsBar();\n this.root.renderRowsBar();\n };\n changeCellValues(cell, enableCallback = true) {\n if (enableCallback)\n this.root.config.onCellChange?.(cell);\n }\n copy = (range, data, dataAsString) => {\n this.root.config.onCopy?.(range, data, dataAsString);\n };\n}\n","export class RenderBox {\n x;\n y;\n width;\n height;\n constructor(config, cellPosition) {\n this.x = this.getXCoord(cellPosition.column, config);\n this.y = this.getYCoord(cellPosition.row, config);\n this.width = config.columns[cellPosition.column].width;\n this.height = config.rows[cellPosition.row].height;\n }\n getXCoord(column, config) {\n let x = 0;\n for (let i = 0; i < column; i++) {\n x += config.columns[i].width;\n }\n return x;\n }\n getYCoord(row, config) {\n let y = 0;\n for (let i = 0; i < row; i++) {\n y += config.rows[i].height;\n }\n return y;\n }\n}\n","import { CSS_PREFIX } from \"../main\";\nimport { EventTypes } from \"../modules/events\";\nimport { RenderBox } from \"../modules/renderBox\";\nexport class Editor {\n element;\n root;\n constructor(root) {\n this.root = root;\n const element = document.createElement(\"input\");\n element.classList.add(CSS_PREFIX + \"editor\");\n this.element = element;\n this.hide();\n }\n hide() {\n this.element.style.display = \"none\";\n this.element.classList.add(\"hide\");\n this.element.blur();\n window.removeEventListener(\"click\", this.handleClickOutside);\n this.element.removeEventListener(\"keydown\", this.handleKeydown);\n this.root.focusTable();\n }\n show(position, initialString) {\n const { height, width, x, y } = new RenderBox(this.root.config, position);\n const cell = this.root.getCell(position);\n this.element.classList.remove(\"hide\");\n this.element.style.top =\n y - this.root.viewport.top + this.root.columnsBarHeight + \"px\";\n this.element.style.left =\n x - this.root.viewport.left + this.root.rowsBarWidth + \"px\";\n this.element.style.width = width + \"px\";\n this.element.style.height = height + \"px\";\n this.element.style.display = \"block\";\n window.addEventListener(\"click\", this.handleClickOutside);\n this.element.addEventListener(\"keydown\", this.handleKeydown);\n this.element.value = initialString ? initialString : cell.value;\n this.element.focus();\n if (!initialString)\n this.element.select();\n }\n handleKeydown = (event) => {\n const { key } = event;\n switch (key) {\n case \"Escape\": {\n this.hide();\n break;\n }\n case \"Enter\": {\n if (!this.root.selection.selectedCell)\n return;\n this.root.changeCellValues(this.root.selection.selectedCell, {\n value: this.element.value,\n displayValue: this.element.value,\n });\n this.root.events.dispatch({\n type: EventTypes.CELL_CHANGE,\n cell: this.root.getCell(this.root.selection.selectedCell),\n });\n this.hide();\n this.root.renderSelection();\n }\n }\n };\n handleClickOutside = (event) => {\n const target = event.target;\n if (!this.element.contains(target)) {\n this.hide();\n }\n };\n}\n","export function checkEqualRanges(range1, range2) {\n const equalRows = range1.from.row === range2.to.row;\n const equalColumns = range1.from.column === range2.to.column;\n return equalRows && equalColumns;\n}\nexport function checkEqualCellSelections(selection1, selection2) {\n return (selection1.column === selection2.column && selection1.row === selection2.row);\n}\n","import { CSS_PREFIX, Selection } from \"../main\";\nimport { EventTypes } from \"../modules/events\";\nimport { checkEqualCellSelections } from \"../utils/position\";\nexport class Scroller {\n element;\n verticalScroller;\n horizontalScroller;\n root;\n isSelecting = false;\n constructor(root) {\n this.root = root;\n const { horizontalScroller, scroller, verticalScroller } = this.buildComponent();\n this.element = scroller;\n this.verticalScroller = verticalScroller;\n this.horizontalScroller = horizontalScroller;\n this.element.style.height = this.root.config.view.height + \"px\";\n this.element.style.width = this.root.config.view.width + \"px\";\n this.element.style.top = this.root.columnsBarHeight + \"px\";\n this.element.style.left = this.root.rowsBarWidth + \"px\";\n this.element.tabIndex = -1;\n this.updateScrollerSize(); //* Init size set\n this.element.addEventListener(\"scroll\", this.handleScroll);\n this.element.addEventListener(\"mousedown\", this.handleClick);\n this.element.addEventListener(\"mousemove\", this.handleMouseMove);\n this.element.addEventListener(\"mouseup\", this.handleMouseUp);\n this.element.addEventListener(\"dblclick\", this.handleDoubleClick);\n this.element.addEventListener(\"keydown\", this.handleKeydown);\n this.element.addEventListener(\"paste\", (event) => {\n if (!this.root.selection.selectedCell)\n return;\n this.root.clipboard.paste(this.root, this.root.selection.selectedCell, event);\n });\n }\n setSelectingMode(mode) {\n this.isSelecting = mode;\n }\n handleMouseMove = (event) => {\n if (!this.isSelecting)\n return;\n const { offsetX, offsetY } = event;\n const lastSelectedCell = this.root.getCellByCoords(offsetX, offsetY);\n let isRangeChanged = false;\n if (this.root.selection.selectedRange) {\n isRangeChanged = !checkEqualCellSelections(this.root.selection.selectedRange.to, lastSelectedCell);\n if (isRangeChanged) {\n this.root.selection.selectedRange.to = lastSelectedCell;\n this.root.events.dispatch({\n type: EventTypes.SELECTION_CHANGE,\n selection: this.root.selection,\n enableCallback: true,\n });\n }\n }\n };\n handleMouseUp = () => {\n this.isSelecting = false;\n const newSelection = { ...this.root.selection };\n if (this.root.selection.selectedRange) {\n if (checkEqualCellSelections(this.root.selection.selectedRange.from, this.root.selection.selectedRange.to)) {\n newSelection.selectedRange = null;\n this.root.events.dispatch({\n type: EventTypes.SELECTION_CHANGE,\n selection: newSelection,\n enableCallback: false,\n });\n }\n }\n this.root.renderSheet();\n this.root.renderColumnsBar();\n this.root.renderRowsBar();\n };\n handleDoubleClick = (event) => {\n event.preventDefault();\n const position = this.root.getCellByCoords(event.offsetX, event.offsetY);\n this.root.showEditor(position);\n };\n handleKeydown = (event) => {\n //* Navigation\n if ([\"ArrowLeft\", \"ArrowRight\", \"ArrowUp\", \"ArrowDown\"].includes(event.key)) {\n event.preventDefault();\n this.root.selection.selectedRange = null;\n switch (event.key) {\n case \"ArrowLeft\": {\n if (this.root.selection.selectedCell &&\n this.root.selection.selectedCell.column > 0) {\n this.root.selection.selectedCell.column -= 1;\n // this.root.renderSheet();\n }\n break;\n }\n case \"ArrowRight\": {\n if (this.root.selection.selectedCell &&\n this.root.selection.selectedCell.column <\n this.root.config.columns.length - 1) {\n this.root.selection.selectedCell.column += 1;\n // this.root.renderSheet();\n }\n break;\n }\n case \"ArrowUp\": {\n if (this.root.selection.selectedCell &&\n this.root.selection.selectedCell.row > 0) {\n this.root.selection.selectedCell.row -= 1;\n // this.root.renderSheet();\n }\n break;\n }\n case \"ArrowDown\": {\n if (this.root.selection.selectedCell &&\n this.root.selection.selectedCell.row <\n this.root.config.rows.length - 1) {\n this.root.selection.selectedCell.row += 1;\n // this.root.renderSheet();\n }\n break;\n }\n }\n this.root.events.dispatch({\n type: EventTypes.SELECTION_CHANGE,\n selection: this.root.selection,\n enableCallback: true,\n });\n }\n //* Start typings\n const keysRegex = /^([a-z]|[а-я]|[0-9])$/;\n if (!event.metaKey && !event.ctrlKey) {\n //* Prevent handle shortcutrs\n const isPressedLetterKey = keysRegex.test(event.key.toLowerCase());\n if (event.key === \"F2\" || isPressedLetterKey) {\n //* English and Russian keyboard. Or F2 button\n event.preventDefault();\n if (!this.root.selection.selectedCell)\n return;\n this.root.showEditor(this.root.selection.selectedCell, isPressedLetterKey ? event.key : undefined);\n }\n }\n if (event.key === \"Delete\") {\n event.preventDefault();\n this.root.deleteSelectedCellsValues();\n this.root.renderSheet();\n }\n if (event.metaKey || event.ctrlKey) {\n if (event.code === \"KeyC\") {\n let cells = undefined;\n const selection = new Selection();\n if (this.root.selection.selectedRange) {\n const { from, to } = this.root.selection.selectedRange;\n selection.selectedRange = this.root.selection.selectedRange;\n const subArrByRows = this.root.data.slice(from.row, to.row + 1);\n const subArrByCols = subArrByRows.map((row) => {\n return row.slice(from.column, to.column + 1);\n });\n cells = [...subArrByCols];\n }\n else if (this.root.selection.selectedCell) {\n const { column, row } = this.root.selection.selectedCell;\n cells = [[this.root.data[row][column]]];\n selection.selectedRange = {\n from: this.root.selection.selectedCell,\n to: this.root.selection.selectedCell,\n };\n }\n else {\n return;\n }\n this.root.clipboard.copy(cells, selection.selectedRange);\n return;\n }\n if (event.code === \"KeyV\") {\n // if (!this.root.selection.selectedCell) return;\n // this.root.clipboard.paste(this.root, this.root.selection.selectedCell);\n }\n }\n };\n handleClick = (event) => {\n this.root.events.dispatch({\n type: EventTypes.CELL_CLICK,\n event,\n scroller: this,\n });\n };\n handleScroll = () => {\n const rect = this.getViewportBoundlingRect();\n this.root.viewport.updateValues(rect);\n this.root.renderSheet();\n this.root.renderColumnsBar();\n this.root.renderRowsBar();\n };\n getViewportBoundlingRect() {\n const { scrollTop, scrollLeft } = this.element;\n const { height, width } = this.element.getBoundingClientRect();\n const bottom = scrollTop + height;\n const right = scrollLeft + width;\n return {\n top: scrollTop,\n left: scrollLeft,\n bottom,\n right,\n };\n }\n buildComponent() {\n const scroller = document.createElement(\"div\");\n const verticalScroller = document.createElement(\"div\");\n const horizontalScroller = document.createElement(\"div\");\n const groupScrollers = document.createElement(\"div\");\n const stack = document.createElement(\"div\");\n verticalScroller.style.width = \"0px\";\n verticalScroller.style.pointerEvents = \"none\";\n horizontalScroller.style.pointerEvents = \"none\";\n groupScrollers.style.display = \"flex\";\n stack.appendChild(verticalScroller);\n stack.appendChild(horizontalScroller);\n groupScrollers.appendChild(stack);\n this.verticalScroller = verticalScroller;\n this.horizontalScroller = horizontalScroller;\n scroller.appendChild(groupScrollers);\n scroller.contentEditable = \"false\";\n scroller.classList.add(CSS_PREFIX + \"scroller\");\n return { scroller, verticalScroller, horizontalScroller };\n }\n getActualHeight() {\n return this.root.config.rows.reduce((acc, curr) => {\n acc += curr.height;\n return acc;\n }, 0);\n }\n getActualWidth() {\n return this.root.config.columns.reduce((acc, curr) => {\n acc += curr.width;\n return acc;\n }, 0);\n }\n updateScrollerSize() {\n const totalHeight = this.getActualHeight();\n const totalWidth = this.getActualWidth();\n this.setScrollerHeight(totalHeight);\n this.setScrollerWidth(totalWidth);\n }\n setScrollerHeight(height) {\n this.verticalScroller.style.height = height + \"px\";\n }\n setScrollerWidth(width) {\n this.horizontalScroller.style.width = width + \"px\";\n }\n}\n","import { RenderBox } from \"./renderBox\";\nexport class CellStyles {\n fontSize = 16;\n fontColor = \"black\";\n background = \"white\";\n borderColor = \"black\";\n selectedBackground = \"#4287f5\";\n selectedFontColor = \"#ffffff\";\n constructor(props) {\n if (props) {\n Object.assign(this, props); // Override default styles\n }\n }\n}\nexport class Position {\n row;\n column;\n constructor(row, column) {\n this.row = row;\n this.column = column;\n }\n}\nexport class SerializableCell {\n value;\n displayValue;\n resultValue;\n position;\n style;\n constructor(props) {\n this.value = props.value;\n this.displayValue = props.displayValue;\n this.resultValue = props.resultValue;\n this.position = props.position;\n this.style = props.style;\n }\n}\nexport class Cell {\n /** True value (data) */\n value;\n /** Value to render */\n displayValue;\n /** This refers to the values that were obtained by calculations, for example, after calculating the formula */\n resultValue;\n position;\n style = null;\n constructor(props) {\n this.value = props.value;\n this.displayValue = props.displayValue;\n this.resultValue = props.resultValue;\n this.position = props.position;\n this.style = props.style;\n }\n getSerializableCell() {\n const cell = new SerializableCell({\n displayValue: this.displayValue,\n position: this.position,\n resultValue: this.resultValue,\n style: this.style,\n value: this.value,\n });\n return cell;\n }\n changeStyles(styles) {\n this.style = styles;\n }\n changeValues(values) {\n Object.assign(this, values);\n }\n // private isCellInRange(root: Spreadsheet): boolean {\n // const { column, row } = this.position;\n // const { selectedRange } = root.selection;\n // if (!selectedRange) return false;\n // const isCellInRow =\n // row >= Math.min(selectedRange.from.row, selectedRange.to.row) &&\n // row <= Math.max(selectedRange.to.row, selectedRange.from.row);\n // const isCellInCol =\n // column >= Math.min(selectedRange.from.column, selectedRange.to.column) &&\n // column <= Math.max(selectedRange.to.column, selectedRange.from.column);\n // return isCellInCol && isCellInRow;\n // }\n render(root) {\n const renderBox = new RenderBox(root.config, this.position);\n let { x, y } = renderBox;\n const { height, width } = renderBox;\n const { ctx } = root;\n // const isCellSelected =\n // root.selection.selectedCell?.row === this.position.row &&\n // root.selection.selectedCell.column === this.position.column;\n // const isCellInRange = this.isCellInRange(root);\n y -= root.viewport.top;\n x -= root.viewport.left;\n const styles = this.style ?? root.styles.cells;\n ctx.clearRect(x, y, width, height);\n ctx.fillStyle = styles.background;\n ctx.strokeStyle = \"black\";\n ctx.fillRect(x, y, width - 1, height - 1);\n ctx.strokeRect(x, y, width, height);\n ctx.fillStyle = styles.fontColor;\n ctx.textAlign = \"left\";\n ctx.font = `${styles.fontSize}px Arial`;\n ctx.textBaseline = \"middle\";\n ctx.fillText(this.displayValue, x + 2, y + height / 2);\n }\n}\n","import { CSS_PREFIX, RenderBox } from \"../main\";\nimport { Position } from \"../modules/cell\";\n/**\n * Display (CANVAS) element where cells render\n */\nexport class Sheet {\n element;\n ctx;\n root;\n constructor(root) {\n this.root = root;\n const canvas = document.createElement(\"canvas\");\n canvas.classList.add(CSS_PREFIX + \"sheet\");\n //* Set up canvas sizes based on provided root config\n canvas.height = this.root.config.view.height;\n canvas.width = this.root.config.view.width;\n canvas.style.width = this.root.config.view.width + \"px\";\n canvas.style.height = this.root.config.view.height + \"px\";\n canvas.style.left = \"0px\";\n this.element = canvas;\n const ctx = this.element.getContext(\"2d\");\n if (!ctx)\n throw new Error(\"Enable hardware acceleration\");\n this.ctx = ctx;\n }\n getCellByCoords(x, y) {\n let row = 0;\n let height = 0;\n while (height <= y) {\n height += this.root.config.rows[row].height;\n if (height >= y)\n break;\n row++;\n }\n let col = 0;\n let width = 0;\n while (width <= x) {\n width += this.root.config.columns[col].width;\n if (width >= x)\n break;\n col++;\n }\n return new Position(row, col);\n }\n renderCell(position) {\n const { column, row } = position;\n this.root.data[row][column].render(this.root);\n }\n getSelectionRange() {\n const { selectedCell, selectedRange } = this.root.selection;\n if (!selectedCell && !selectedRange)\n return;\n if (selectedRange) {\n const startRow = Math.min(selectedRange.from.row, selectedRange.to.row);\n const startCol = Math.min(selectedRange.from.column, selectedRange.to.column);\n const lastRow = Math.max(selectedRange.from.row, selectedRange.to.row);\n const lastCol = Math.max(selectedRange.from.column, selectedRange.to.column);\n const startCellBox = new RenderBox(this.root.config, {\n row: startRow,\n column: startCol,\n });\n let width = 0;\n for (let col = startCol; col <= lastCol; col++) {\n width += this.root.config.columns[col].width;\n }\n let height = 0;\n for (let row = startRow; row <= lastRow; row++) {\n height += this.root.config.rows[row].height;\n }\n const x = startCellBox.x - this.root.viewport.left;\n const y = startCellBox.y - this.root.viewport.top;\n return { x, y, height, width };\n }\n if (!selectedRange && selectedCell) {\n const box = new RenderBox(this.root.config, selectedCell);\n box.x -= this.root.viewport.left;\n box.y -= this.root.viewport.top;\n return box;\n }\n }\n renderSelectionRange(x, y, width, height) {\n this.ctx.save();\n this.ctx.strokeStyle = \"#7da8ff\";\n this.ctx.lineWidth = 3;\n this.ctx.strokeRect(x, y, width, height);\n this.ctx.fillStyle = \"#7da8ff35\";\n this.ctx.fillRect(x, y, width, height);\n this.ctx.restore();\n }\n renderSelection() {\n const box = this.getSelectionRange();\n if (!box)\n return;\n const { height, width, x, y } = box;\n this.renderSelectionRange(x, y, width, height);\n }\n renderSheet() {\n const firstRowIdx = this.root.viewport.firstRow;\n const lastColIdx = this.root.viewport.lastCol + 3;\n const lastRowIdx = this.root.viewport.lastRow + 3;\n const firstColIdx = this.root.viewport.firstCol;\n for (let row = firstRowIdx; row <= lastRowIdx; row++) {\n for (let col = firstColIdx; col <= lastColIdx; col++) {\n if (!this.root.config.columns[col] || !this.root.config.rows[row])\n break; //* Prevent read undefined\n this.renderCell({ column: col, row });\n }\n }\n this.renderSelection();\n }\n}\n","import { CSS_PREFIX } from \"../main\";\n/** Base (root) component */\nexport class Table {\n element;\n root;\n constructor(root) {\n this.root = root;\n const container = document.createElement(\"div\");\n container.classList.add(CSS_PREFIX + \"spreadsheet_container\");\n this.element = container;\n this.changeElementSizes(this.root.viewProps);\n }\n changeElementSizes(sizes) {\n const { height, width } = sizes;\n this.element.style.width = width + this.root.rowsBarWidth + \"px\";\n this.element.style.height = height + this.root.columnsBarHeight + \"px\";\n }\n}\n","import { CSS_PREFIX } from \"../main\";\nexport class Toolbar {\n element;\n root;\n height = 0;\n constructor(root) {\n this.root = root;\n const toolbarElement = document.createElement(\"div\");\n toolbarElement.classList.add(CSS_PREFIX + \"toolbar\");\n this.element = toolbarElement;\n }\n}\n","export class Config {\n rows;\n columns;\n view = {\n width: 800,\n height: 600,\n };\n onCellClick = null;\n onSelectonChange = null;\n onCellChange = null;\n onCopy;\n constructor(props) {\n this.columns = props.columns;\n this.rows = props.rows;\n this.view = props.view;\n this.onCellClick = props.onCellClick ?? null;\n this.onSelectonChange = props.onSelectionChange ?? null;\n this.onCellChange = props.onCellChange ?? null;\n this.onCopy = props.onCopy ?? null;\n }\n}\n","export class Selection {\n selectedCell = null;\n selectedRange = null;\n}\n","import { CellStyles } from \"./cell\";\nexport class Styles {\n cells;\n constructor() {\n this.cells = new CellStyles();\n }\n}\n","export class Viewport {\n root;\n top;\n left;\n right;\n bottom;\n firstRow;\n lastRow;\n firstCol;\n lastCol;\n constructor(root, props) {\n this.root = root;\n this.top = props.top;\n this.left = props.left;\n this.right = props.right;\n this.bottom = props.bottom;\n this.firstRow = this.getFirstRow();\n this.lastCol = this.getFirstRow(); //!Temp\n this.firstCol = this.getFirstRow(); //!Temp\n this.lastRow = this.getLastRow();\n this.updateValues({\n top: 0,\n left: 0,\n right: this.root.viewProps.width,\n bottom: this.root.viewProps.height,\n });\n }\n updateValues(props) {\n this.top = props.top;\n this.left = props.left;\n this.right = props.right;\n this.bottom = props.bottom;\n this.firstRow = this.getFirstRow();\n this.lastRow = this.getLastRow();\n this.firstCol = this.getFirstCol();\n this.lastCol = this.getLastCol();\n }\n /** Get index of first row in viewport */\n getFirstRow() {\n const rowIdx = this.root.cache.getRowByYCoord(this.top);\n return rowIdx;\n }\n getLastRow() {\n const rowIdx = this.root.cache.getRowByYCoord(this.bottom);\n return rowIdx;\n }\n getFirstCol() {\n const colIdx = this.root.cache.getColumnByXCoord(this.left);\n return colIdx;\n }\n getLastCol() {\n const colIdx = this.root.cache.getColumnByXCoord(this.right);\n return colIdx;\n }\n}\n","export class Column {\n width;\n title;\n constructor(props) {\n this.width = props.width;\n this.title = props.title;\n }\n}\n","export class Row {\n height;\n title;\n constructor(props) {\n this.height = props.height;\n this.title = props.title;\n }\n}\n","import { Cell } from \"../modules/cell\";\nimport { Column } from \"../modules/column\";\nimport { Config } from \"../modules/config\";\nimport { Row } from \"../modules/row\";\nexport function createSampleData(rows, columns, fillCellsByCoords = false) {\n const data = [];\n for (let row = 0; row <= rows; row++) {\n const innerRow = [];\n for (let col = 0; col <= columns; col++) {\n const value = fillCellsByCoords ? `${row}:${col}` : \"\";\n const cell = new Cell({\n displayValue: value,\n resultValue: value,\n value,\n position: {\n column: col,\n row: row,\n },\n style: null,\n });\n innerRow.push(cell);\n }\n data.push(innerRow);\n }\n return data;\n}\nexport function createSampleConfig(rows, columns) {\n const rowsArr = [];\n for (let i = 0; i <= rows; i++) {\n const rowItem = new Row({\n height: 40,\n title: String(i),\n });\n rowsArr.push(rowItem);\n }\n const colsArr = [];\n for (let i = 0; i <= columns; i++) {\n const colItem = new Column({\n title: String(i),\n width: 150,\n });\n colsArr.push(colItem);\n }\n const config = new Config({\n columns: colsArr,\n rows: rowsArr,\n view: {\n height: 600,\n width: 800,\n },\n });\n return config;\n}\nexport function makeSpreadsheetConfigAndData(rows, columns) {\n const data = createSampleData(rows, columns);\n const config = createSampleConfig(rows, columns);\n return { data, config };\n}\n","export class CachedColumn {\n xPos;\n colIdx;\n constructor(props) {\n this.xPos = props.xPos;\n this.colIdx = props.colIdx;\n }\n}\nexport class CachedRow {\n yPos;\n rowIdx;\n constructor(props) {\n this.yPos = props.yPos;\n this.rowIdx = props.rowIdx;\n }\n}\nexport class Cache {\n columns;\n rows;\n constructor(initial) {\n this.columns = initial.columns;\n this.rows = initial.rows;\n }\n getRowByYCoord(y) {\n let rowIdx = 0;\n for (let i = 0; i < this.rows.length; i++) {\n rowIdx = i;\n if (y <= this.rows[i].yPos) { //* Intersection detect\n break;\n }\n }\n return rowIdx;\n }\n getColumnByXCoord(x) {\n let colIdx = 0;\n for (let i = 0; i < this.columns.length; i++) {\n colIdx = i;\n if (x <= this.columns[i].xPos) { //* Intersection detect\n break;\n }\n }\n return colIdx;\n }\n}\n","import { RenderBox } from \"../main\";\nexport class ColumnsBar {\n element;\n root;\n height = 35;\n width;\n // private resizerWidth = 1;\n ctx;\n constructor(root) {\n this.root = root;\n this.element = this.createElement();\n const ctx = this.element.getContext(\"2d\");\n if (!ctx)\n throw new Error(\"Enable hardware acceleration\");\n this.ctx = ctx;\n this.width = this.root.viewProps.width;\n }\n createElement() {\n const element = document.createElement(\"canvas\");\n element.style.position = \"absolute\";\n element.style.height = this.height + \"px\";\n element.style.width = this.root.viewProps.width + \"px\";\n element.style.display = \"block\";\n element.style.borderLeft = \"1px solid black\";\n // element.style.boxSizing = 'border-box'\n element.width = this.root.viewProps.width;\n element.height = this.height;\n return element;\n }\n setElementPosition(top, left) {\n this.element.style.top = top + \"px\";\n this.element.style.left = left + \"px\";\n }\n isColumnSelected(column) {\n const { selectedCell, selectedRange } = this.root.selection;\n if (selectedCell && selectedCell.column === column)\n return true;\n if (selectedRange) {\n const inRange = column >=\n Math.min(selectedRange.from.column, selectedRange.to.column) &&\n column <= Math.max(selectedRange.from.column, selectedRange.to.column);\n return inRange;\n }\n return false;\n }\n // private getYCoordWithOffset(renderBox: RenderBox): number {\n // const {y} = renderBox\n // return y + this.root.toolbarHeight\n // }\n // private getXCoordWithOffset(renderBox: RenderBox): number {\n // const {x} = renderBox\n // return x\n // }\n renderText(column, renderBox) {\n const { width, x } = renderBox;\n this.ctx.fillStyle = \"black\";\n this.ctx.textAlign = \"center\";\n this.ctx.textBaseline = \"middle\";\n this.ctx.font = \"12px Arial\";\n this.ctx.fillText(this.root.config.columns[column].title, x + width / 2 - this.root.viewport.left, 0 + this.height / 2);\n }\n renderRect(column, renderBox) {\n const { width, x } = renderBox;\n const isColSelected = this.isColumnSelected(column);\n this.ctx.fillStyle = isColSelected ? \"#c7ebff\" : \"white\";\n this.ctx.strokeStyle = \"black\";\n this.ctx.lineWidth = 1;\n const specialX = x - this.root.viewport.left;\n this.ctx.fillRect(specialX - 1, 0, width, this.height);\n this.ctx.strokeRect(specialX - 1, 0, width, this.height);\n }\n renderSingleColumn(column) {\n const renderBox = new RenderBox(this.root.config, {\n row: 0,\n column: column,\n });\n this.renderRect(column, renderBox);\n this.renderText(column, renderBox);\n }\n renderBar() {\n const lastColIdx = this.root.viewport.lastCol + 3;\n const firstColIdx = this.root.viewport.firstCol;\n this.ctx.beginPath();\n this.ctx.strokeStyle = \"black\";\n this.ctx.lineWidth = 1;\n this.ctx.moveTo(0, 0);\n this.ctx.lineTo(0, this.height);\n this.ctx.closePath();\n this.ctx.stroke();\n for (let col = firstColIdx; col <= lastColIdx; col++) {\n if (!this.root.config.columns[col])\n break;\n this.renderSingleColumn(col);\n }\n }\n}\n","import { RenderBox } from \"../main\";\nexport class RowsBar {\n element;\n ctx;\n root;\n width = 35;\n height;\n resizerHeight = 1;\n constructor(root) {\n this.root = root;\n this.element = this.createElement();\n const ctx = this.element.getContext(\"2d\");\n if (!ctx)\n throw new Error(\"Enable hardware acceleration\");\n this.ctx = ctx;\n this.height = this.root.viewProps.height;\n }\n createElement() {\n const element = document.createElement(\"canvas\");\n element.style.position = \"absolute\";\n element.style.height = this.root.viewProps.height + \"px\";\n element.style.width = this.width + \"px\";\n element.style.display = \"block\";\n element.style.borderTop = \"1px solid black\";\n // element.style.boxSizing = 'border-box'\n element.width = this.width;\n element.height = this.root.viewProps.height;\n return element;\n }\n setElementPosition(top, left) {\n this.element.style.top = top + \"px\";\n this.element.style.left = left + \"px\";\n }\n isRowSelected(row) {\n const { selectedCell, selectedRange } = this.root.selection;\n if (selectedCell && selectedCell.row === row)\n return true;\n if (selectedRange) {\n const inRange = row >= Math.min(selectedRange.from.row, selectedRange.to.row) &&\n row <= Math.max(selectedRange.from.row, selectedRange.to.row);\n return inRange;\n }\n return false;\n }\n renderText(row, renderBox) {\n const { y, height } = renderBox;\n this.ctx.fillStyle = \"black\";\n this.ctx.textAlign = \"center\";\n this.ctx.textBaseline = \"middle\";\n this.ctx.font = \"12px Arial\";\n this.ctx.fillText(this.root.config.rows[row].title, this.width / 2, y - this.root.viewport.top + height / 2);\n }\n renderRect(column, renderBox) {\n const { y, height } = renderBox;\n const isRowSeleted = this.isRowSelected(column);\n this.ctx.fillStyle = isRowSeleted ? \"#c7ebff\" : \"white\";\n this.ctx.strokeStyle = \"black\";\n this.ctx.lineWidth = this.resizerHeight;\n const specialY = y - this.root.viewport.top;\n this.ctx.fillRect(0, specialY - 1, this.width, height);\n this.ctx.strokeRect(0, specialY - 1, this.width, height);\n }\n renderSingleRow(row) {\n const renderBox = new RenderBox(this.root.config, {\n column: 0,\n row: row,\n });\n this.renderRect(row, renderBox);\n this.renderText(row, renderBox);\n }\n renderBar() {\n const lastRowIdx = this.root.viewport.lastRow + 3;\n const firstRowIdx = this.root.viewport.firstRow;\n this.ctx.beginPath();\n this.ctx.moveTo(0, 0);\n this.ctx.strokeStyle = \"black\";\n this.ctx.lineWidth = 16;\n this.ctx.lineTo(35, 0);\n this.ctx.closePath();\n this.ctx.stroke();\n for (let row = firstRowIdx; row <= lastRowIdx; row++) {\n if (!this.root.config.rows[row])\n break;\n this.renderSingleRow(row);\n }\n }\n}\n","import { Cell, CellStyles } from \"./cell\";\nimport { EventTypes } from \"./events\";\nexport class Clipboard {\n saved = null;\n root;\n constructor(root) {\n this.root = root;\n }\n copy(data, range) {\n const mapedData = data\n .map((row) => {\n return row\n .map((item) => {\n return item.displayValue;\n })\n .join(\"\\t\");\n })\n .join(\"\\n\");\n this.saved = data;\n navigator.clipboard.writeText(mapedData);\n this.root.events.dispatch({\n type: EventTypes.COPY_CELLS,\n data,\n dataAsString: mapedData,\n range,\n });\n }\n paste(root, { column, row }, event) {\n if (!this.saved) {\n if (!event.clipboardData)\n return;\n const data = event.clipboardData.getData(\"text\");\n try {\n const arr = data.split(\"\\n\").map((item) => item.split(\"\\t\"));\n const arrayOfCells = arr.map((innerRow) => {\n return innerRow.map((item) => {\n const cellProps = {\n displayValue: item,\n position: {\n column,\n row,\n },\n resultValue: item,\n style: new CellStyles(),\n value: item,\n };\n return new Cell(cellProps);\n });\n });\n const rowsLength = arrayOfCells.length;\n const colsLength = arrayOfCells[0] ? arrayOfCells[0].length : 0;\n for (let i = 0; i < rowsLength; i++) {\n for (let j = 0; j < colsLength; j++) {\n const savedCell = arrayOfCells[i][j];\n const position = {\n column: column + j,\n row: row + i,\n };\n const values = {\n displayValue: savedCell.displayValue,\n value: savedCell.value,\n style: savedCell.style,\n };\n root.changeCellValues(position, values, false);\n }\n }\n }\n catch (err) {\n console.error(\"Cannot read clipboard. \", err);\n }\n root.renderSheet();\n return;\n }\n const rowsLength = this.saved.length;\n const colsLength = this.saved[0] ? this.saved[0].length : 0;\n for (let i = 0; i < rowsLength; i++) {\n for (let j = 0; j < colsLength; j++) {\n const savedCell = this.saved[i][j];\n const position = {\n column: column + j,\n row: row + i,\n };\n const values = {\n displayValue: savedCell.displayValue,\n value: savedCell.value,\n style: savedCell.style,\n };\n root.changeCellValues(position, values, false);\n }\n }\n }\n}\n","import { Editor } from \"./components/editor\";\nimport { Scroller } from \"./components/scroller\";\nimport { Sheet } from \"./components/sheet\";\nimport { Table } from \"./components/table\";\nimport { Toolbar } from \"./components/toolbar\";\nimport { Cell, } from \"./modules/cell\";\nimport { Config, } from \"./modules/config\";\nimport { Selection } from \"./modules/selection\";\nimport { Styles } from \"./modules/styles\";\nimport { Viewport } from \"./modules/viewport\";\nimport \"./scss/main.scss\";\nimport { createSampleData } from \"./utils/createData\";\nimport { Cache, CachedColumn, CachedRow } from \"./modules/cache\";\nimport { Row } from \"./modules/row\";\nimport { Column } from \"./modules/column\";\nimport { ColumnsBar } from \"./components/columnsBar\";\nimport { RowsBar } from \"./components/rowsBar\";\nimport { EventTypes, Events } from \"./modules/events\";\nimport { Clipboard } from \"./modules/clipboard\";\nexport const CSS_PREFIX = \"modern_sc_\";\nexport default class Spreadsheet {\n table;\n scroller;\n toolbar;\n rowsBar;\n columnsBar;\n sheet;\n editor;\n styles;\n config;\n data;\n viewport;\n selection;\n cache;\n events;\n clipboard;\n constructor(target, props) {\n const data = createSampleData(40, 40);\n const config = this.makeConfigFromData(data, props?.view ?? { height: 600, width: 800 });\n if (props?.view) {\n config.view = props.view;\n }\n this.config = new Config(config);\n this.config.onCellClick = props?.onCellClick ?? null;\n this.config.onSelectonChange = props?.onSelectionChange ?? null;\n this.config.onCellChange = props?.onCellChange ?? null;\n this.config.onCopy = props?.onCopy ?? null;\n this.rowsBar = new RowsBar(this);\n this.columnsBar = new ColumnsBar(this);\n this.sheet = new Sheet(this);\n this.table = new Table(this);\n this.scroller = new Scroller(this);\n this.toolbar = new Toolbar(this);\n this.editor = new Editor(this);\n this.cache = this.getInitialCache();\n this.viewport = new Viewport(this, this.scroller.getViewportBoundlingRect());\n this.selection = new Selection();\n this.events = new Events(this);\n this.clipboard = new Clipboard(this);\n this.data = data;\n this.styles = new Styles();\n this.buildComponent();\n this.setElementsPositions();\n this.appendTableToTarget(target);\n this.renderSheet();\n this.renderColumnsBar();\n this.renderRowsBar();\n }\n setRowsBarPosition() {\n const top = this.columnsBar.height + this.toolbar.height;\n const left = 0;\n this.rowsBar.setElementPosition(top, left);\n }\n setColumnsBarPosition() {\n const top = this.toolbar.height;\n const left = this.rowsBar.width;\n this.columnsBar.setElementPosition(top, left);\n }\n setElementsPositions() {\n this.setRowsBarPosition();\n this.setColumnsBarPosition();\n }\n getInitialCache() {\n const cachedCols = [];\n let currentWidth = 0;\n for (let i = 0; i <= this.config.columns.length - 1; i++) {\n const col = this.config.columns[i];\n currentWidth += col.width;\n const cacheCol = new CachedColumn({\n xPos: currentWidth,\n colIdx: i,\n });\n cachedCols.push(cacheCol);\n }\n const cachedRows = [];\n let currentHeight = 0;\n for (let i = 0; i <= this.config.rows.length - 1; i++) {\n const row = this.config.rows[i];\n currentHeight += row.height;\n const cacheRow = new CachedRow({\n yPos: currentHeight,\n rowIdx: i,\n });\n cachedRows.push(cacheRow);\n }\n const cache = new Cache({\n columns: cachedCols,\n rows: cachedRows,\n });\n return cache;\n }\n buildComponent() {\n const content = document.createElement(\"div\"); //* Abstract\n content.style.top = this.columnsBarHeight + \"px\";\n content.style.left = this.rowsBarWidth + \"px\";\n content.appendChild(this.sheet.element);\n content.classList.add(CSS_PREFIX + \"content\");\n this.table.element.appendChild(this.toolbar.element);\n this.table.element.appendChild(this.rowsBar.element);\n this.table.element.appendChild(this.columnsBar.element);\n this.table.element.appendChild(content);\n this.table.element.appendChild(this.scroller.element);\n this.table.element.append(this.editor.element);\n }\n /**Destroy spreadsheet DOM element.\n *\n * May be usefull when need to rerender component.\n */\n destroy() {\n this.table.element.remove();\n }\n appendTableToTarget(target) {\n if (typeof target === \"string\") {\n const element = document.querySelector(target);\n if (!element)\n throw new Error(`Element with selector ${target} is not finded in DOM.\\n Make sure it exists.`);\n element?.appendChild(this.table.element);\n }\n if (target instanceof HTMLElement) {\n target.append(this.table.element);\n }\n }\n /** Canvas rendering context 2D.\n *\n * Abble to draw on canvas with default CanvasAPI methods\n */\n get ctx() {\n return this.sheet.ctx;\n }\n get viewProps() {\n return this.config.view;\n }\n get columnsBarHeight() {\n return this.columnsBar.height;\n }\n get rowsBarWidth() {\n return this.rowsBar.width;\n }\n get toolbarHeight() {\n return this.toolbar.height;\n }\n /** Focusing on interactive part of spreadsheet */\n focusTable() {\n this.scroller.element.focus();\n }\n getCellByCoords(x, y) {\n return this.sheet.getCellByCoords(x, y);\n }\n getCell(position) {\n const { column, row } = position;\n return this.data[row][column];\n }\n changeCellValues(position, values, enableCallback = true) {\n const { column, row } = position;\n this.data[row][column].changeValues(values);\n this.events.dispatch({\n type: EventTypes.CELL_CHANGE,\n cell: this.data[row][column],\n enableCallback: enableCallback\n });\n this.renderCell(row, column);\n }\n changeCellStyles(position, styles) {\n const { column, row } = position;\n this.data[row][column].changeStyles(styles);\n this.renderCell(row, column);\n }\n applyActionToRange(range, callback) {\n const fromRow = Math.min(range.from.row, range.to.row);\n const toRow = Math.max(range.from.row, range.to.row);\n const fromCol = Math.min(range.from.column, range.to.column);\n const toCol = Math.max(range.from.column, range.to.column);\n for (let row = fromRow; row <= toRow; row++) {\n for (let col = fromCol; col <= toCol; col++) {\n const cell = this.data[row][col];\n callback(cell);\n }\n }\n }\n deleteSelectedCellsValues() {\n if (this.selection.selectedRange !== null) {\n this.applyActionToRange(this.selection.selectedRange, (cell) => {\n this.changeCellValues(cell.position, {\n displayValue: \"\",\n resultValue: \"\",\n value: \"\",\n });\n });\n }\n else {\n if (!this.selection.selectedCell)\n return;\n this.changeCellValues(this.selection.selectedCell, {\n displayValue: \"\",\n resultValue: \"\",\n value: \"\",\n });\n }\n }\n showEditor(position, initialString) {\n this.editor.show(position, initialString);\n }\n renderSheet() {\n this.sheet.renderSheet();\n }\n renderSelection() {\n this.sheet.renderSelection();\n }\n renderColumnsBar() {\n this.columnsBar.renderBar();\n }\n renderRowsBar() {\n this.rowsBar.renderBar();\n }\n renderCell(row, col) {\n this.data[row][col].render(this);\n }\n loadData(data) {\n const rowsLength = data.length;\n const colsLength = data[0] ? data[0].length : 0;\n this.data = [];\n const formattedData = [];\n // Transform serialized objects to Cells\n for (let row = 0; row < rowsLength; row++) {\n const innerRow = [];\n for (let col = 0; col < colsLength; col++) {\n const cell = data[row][col];\n innerRow.push(new Cell({\n displayValue: cell.displayValue,\n position: cell.position,\n resultValue: cell.resultValue,\n value: cell.value,\n style: cell.style,\n }));\n }\n formattedData.push(innerRow);\n }\n const config = this.makeConfigFromData(formattedData, this.config.view);\n config.onCellChange = this.config.onCellChange;\n config.onCellClick = this.config.onCellClick;\n config.onCopy = this.config.onCopy;\n config.onSelectonChange = this.config.onSelectonChange;\n this.data = formattedData;\n this.selection.selectedCell = null;\n this.selection.selectedRange = null;\n this.config = config;\n this.cache = this.getInitialCache();\n this.scroller.updateScrollerSize();\n this.viewport = new Viewport(this, this.scroller.getViewportBoundlingRect());\n this.renderSheet();\n return this;\n }\n makeConfigFromData(data, view) {\n const lastRowIdx = data.length - 1;\n const lastColIdx = data[0] ? data[0].length : 0;\n const rows = [];\n for (let row = 0; row < lastRowIdx; row++) {\n rows.push(new Row({\n height: 40,\n title: String(row),\n }));\n }\n const columns = [];\n for (let col = 0; col < lastColIdx; col++) {\n columns.push(new Column({\n width: 150,\n title: String(col),\n }));\n }\n const config = new Config({\n view,\n rows,\n columns,\n onCellClick: null,\n });\n return config;\n }\n serializeData() {\n const rowsLength = this.data.length;\n const colsLength = this.data[0] ? this.data[0].length : 0;\n const cellsArray = [];\n for (let row = 0; row < rowsLength; row++) {\n const innerRow = [];\n for (let col = 0; col < colsLength; col++) {\n innerRow.push(this.data[row][col].getSerializableCell());\n }\n cellsArray.push(innerRow);\n }\n return cellsArray;\n }\n}\nexport * from \"./modules/cache\";\nexport * from \"./modules/cell\";\nexport * from \"./modules/column\";\nexport * from \"./modules/config\";\nexport * from \"./modules/renderBox\";\nexport * from \"./modules/row\";\nexport * from \"./modules/selection\";\nexport * from \"./modules/styles\";\nexport * from \"./modules/viewport\";\nexport * from \"./utils/createData\";\n"],"names":["EventTypes","Events","root","__publicField","event","scroller","offsetX","offsetY","clickedCell","cell","selection","Selection","_b","_a","enableCallback","range","data","dataAsString","action","RenderBox","config","cellPosition","column","x","i","row","y","Editor","key","target","element","CSS_PREFIX","position","initialString","height","width","checkEqualCellSelections","selection1","selection2","Scroller","lastSelectedCell","isRangeChanged","newSelection","keysRegex","isPressedLetterKey","cells","from","to","rect","horizontalScroller","verticalScroller","mode","scrollTop","scrollLeft","bottom","right","groupScrollers","stack","acc","curr","totalHeight","totalWidth","CellStyles","props","Position","SerializableCell","Cell","styles","values","renderBox","ctx","Sheet","canvas","col","selectedCell","selectedRange","startRow","startCol","lastRow","lastCol","startCellBox","box","firstRowIdx","lastColIdx","lastRowIdx","firstColIdx","Table","container","sizes","Toolbar","toolbarElement","Config","Styles","Viewport","Column","Row","createSampleData","rows","columns","fillCellsByCoords","innerRow","value","createSampleConfig","rowsArr","rowItem","colsArr","colItem","makeSpreadsheetConfigAndData","CachedColumn","CachedRow","Cache","initial","rowIdx","colIdx","ColumnsBar","top","left","isColSelected","specialX","RowsBar","isRowSeleted","specialY","Clipboard","mapedData","item","arrayOfCells","cellProps","rowsLength","colsLength","j","savedCell","err","Spreadsheet","cachedCols","currentWidth","cacheCol","cachedRows","currentHeight","cacheRow","content","callback","fromRow","toRow","fromCol","toCol","formattedData","view","cellsArray"],"mappings":"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"} \ No newline at end of file diff --git a/dist/main.js b/dist/main.js index e619702..51d5a14 100644 --- a/dist/main.js +++ b/dist/main.js @@ -12,7 +12,7 @@ class P { var c, a; if (t.button !== 0) return; - const { offsetX: o, offsetY: l } = t, i = this.root.getCellByCoords(o, l), n = this.root.getCell(i), h = new v(); + const { offsetX: o, offsetY: l } = t, i = this.root.getCellByCoords(o, l), n = this.root.getCell(i), h = new S(); h.selectedCell = i, h.selectedRange = { from: i, to: i @@ -108,7 +108,7 @@ class T { }); this.root = t; const e = document.createElement("input"); - e.classList.add(f + "editor"), this.element = e, this.hide(); + e.classList.add(C + "editor"), this.element = e, this.hide(); } hide() { this.element.style.display = "none", this.element.classList.add("hide"), this.element.blur(), window.removeEventListener("click", this.handleClickOutside), this.element.removeEventListener("keydown", this.handleKeydown), this.root.focusTable(); @@ -118,7 +118,7 @@ class T { this.element.classList.remove("hide"), this.element.style.top = n - this.root.viewport.top + this.root.columnsBarHeight + "px", this.element.style.left = i - this.root.viewport.left + this.root.rowsBarWidth + "px", this.element.style.width = l + "px", this.element.style.height = o + "px", this.element.style.display = "block", window.addEventListener("click", this.handleClickOutside), this.element.addEventListener("keydown", this.handleKeydown), this.element.value = e || h.value, this.element.focus(), e || this.element.select(); } } -function S(r, t) { +function v(r, t) { return r.column === t.column && r.row === t.row; } class H { @@ -133,7 +133,7 @@ class H { return; const { offsetX: e, offsetY: o } = t, l = this.root.getCellByCoords(e, o); let i = !1; - this.root.selection.selectedRange && (i = !S(this.root.selection.selectedRange.to, l), i && (this.root.selection.selectedRange.to = l, this.root.events.dispatch({ + this.root.selection.selectedRange && (i = !v(this.root.selection.selectedRange.to, l), i && (this.root.selection.selectedRange.to = l, this.root.events.dispatch({ type: u.SELECTION_CHANGE, selection: this.root.selection, enableCallback: !0 @@ -142,7 +142,7 @@ class H { s(this, "handleMouseUp", () => { this.isSelecting = !1; const t = { ...this.root.selection }; - this.root.selection.selectedRange && S(this.root.selection.selectedRange.from, this.root.selection.selectedRange.to) && (t.selectedRange = null, this.root.events.dispatch({ + this.root.selection.selectedRange && v(this.root.selection.selectedRange.from, this.root.selection.selectedRange.to) && (t.selectedRange = null, this.root.events.dispatch({ type: u.SELECTION_CHANGE, selection: t, enableCallback: !1 @@ -191,7 +191,7 @@ class H { if (t.key === "Delete" && (t.preventDefault(), this.root.deleteSelectedCellsValues(), this.root.renderSheet()), t.metaKey || t.ctrlKey) { if (t.code === "KeyC") { let o; - const l = new v(); + const l = new S(); if (this.root.selection.selectedRange) { const { from: i, to: n } = this.root.selection.selectedRange; l.selectedRange = this.root.selection.selectedRange, o = [...this.root.data.slice(i.row, n.row + 1).map((a) => a.slice(i.column, n.column + 1))]; @@ -240,7 +240,7 @@ class H { } buildComponent() { const t = document.createElement("div"), e = document.createElement("div"), o = document.createElement("div"), l = document.createElement("div"), i = document.createElement("div"); - return e.style.width = "0px", e.style.pointerEvents = "none", o.style.pointerEvents = "none", l.style.display = "flex", i.appendChild(e), i.appendChild(o), l.appendChild(i), this.verticalScroller = e, this.horizontalScroller = o, t.appendChild(l), t.contentEditable = "false", t.classList.add(f + "scroller"), { scroller: t, verticalScroller: e, horizontalScroller: o }; + return e.style.width = "0px", e.style.pointerEvents = "none", o.style.pointerEvents = "none", l.style.display = "flex", i.appendChild(e), i.appendChild(o), l.appendChild(i), this.verticalScroller = e, this.horizontalScroller = o, t.appendChild(l), t.contentEditable = "false", t.classList.add(C + "scroller"), { scroller: t, verticalScroller: e, horizontalScroller: o }; } getActualHeight() { return this.root.config.rows.reduce((t, e) => (t += e.height, t), 0); @@ -270,14 +270,14 @@ class R { t && Object.assign(this, t); } } -class D { +class M { constructor(t, e) { s(this, "row"); s(this, "column"); this.row = t, this.column = e; } } -class M { +class _ { constructor(t) { s(this, "value"); s(this, "displayValue"); @@ -300,7 +300,7 @@ class p { this.value = t.value, this.displayValue = t.displayValue, this.resultValue = t.resultValue, this.position = t.position, this.style = t.style; } getSerializableCell() { - return new M({ + return new _({ displayValue: this.displayValue, position: this.position, resultValue: this.resultValue, @@ -335,14 +335,14 @@ class p { h.clearRect(o, l, n, i), h.fillStyle = c.background, h.strokeStyle = "black", h.fillRect(o, l, n - 1, i - 1), h.strokeRect(o, l, n, i), h.fillStyle = c.fontColor, h.textAlign = "left", h.font = `${c.fontSize}px Arial`, h.textBaseline = "middle", h.fillText(this.displayValue, o + 2, l + i / 2); } } -class _ { +class D { constructor(t) { s(this, "element"); s(this, "ctx"); s(this, "root"); this.root = t; const e = document.createElement("canvas"); - e.classList.add(f + "sheet"), e.height = this.root.config.view.height, e.width = this.root.config.view.width, e.style.width = this.root.config.view.width + "px", e.style.height = this.root.config.view.height + "px", e.style.left = "0px", this.element = e; + e.classList.add(C + "sheet"), e.height = this.root.config.view.height, e.width = this.root.config.view.width, e.style.width = this.root.config.view.width + "px", e.style.height = this.root.config.view.height + "px", e.style.left = "0px", this.element = e; const o = this.element.getContext("2d"); if (!o) throw new Error("Enable hardware acceleration"); @@ -355,7 +355,7 @@ class _ { let i = 0, n = 0; for (; n <= t && (n += this.root.config.columns[i].width, !(n >= t)); ) i++; - return new D(o, i); + return new M(o, i); } renderCell(t) { const { column: e, row: o } = t; @@ -375,8 +375,8 @@ class _ { let a = 0; for (let d = o; d <= i; d++) a += this.root.config.rows[d].height; - const m = h.x - this.root.viewport.left, C = h.y - this.root.viewport.top; - return { x: m, y: C, height: a, width: c }; + const f = h.x - this.root.viewport.left, m = h.y - this.root.viewport.top; + return { x: f, y: m, height: a, width: c }; } if (!e && t) { const o = new g(this.root.config, t); @@ -385,7 +385,7 @@ class _ { } } renderSelectionRange(t, e, o, l) { - this.ctx.save(), this.ctx.strokeStyle = "#47d1ff", this.ctx.lineWidth = 3, this.ctx.strokeRect(t, e, o, l), this.ctx.fillStyle = "#7da8ff50", this.ctx.fillRect(t, e, o, l), this.ctx.restore(); + this.ctx.save(), this.ctx.strokeStyle = "#7da8ff", this.ctx.lineWidth = 3, this.ctx.strokeRect(t, e, o, l), this.ctx.fillStyle = "#7da8ff35", this.ctx.fillRect(t, e, o, l), this.ctx.restore(); } renderSelection() { const t = this.getSelectionRange(); @@ -408,21 +408,21 @@ class z { s(this, "root"); this.root = t; const e = document.createElement("div"); - e.classList.add(f + "spreadsheet_container"), this.element = e, this.changeElementSizes(this.root.viewProps); + e.classList.add(C + "spreadsheet_container"), this.element = e, this.changeElementSizes(this.root.viewProps); } changeElementSizes(t) { const { height: e, width: o } = t; this.element.style.width = o + this.root.rowsBarWidth + "px", this.element.style.height = e + this.root.columnsBarHeight + "px"; } } -class O { +class N { constructor(t) { s(this, "element"); s(this, "root"); s(this, "height", 0); this.root = t; const e = document.createElement("div"); - e.classList.add(f + "toolbar"), this.element = e; + e.classList.add(C + "toolbar"), this.element = e; } } class x { @@ -440,13 +440,13 @@ class x { this.columns = t.columns, this.rows = t.rows, this.view = t.view, this.onCellClick = t.onCellClick ?? null, this.onSelectonChange = t.onSelectionChange ?? null, this.onCellChange = t.onCellChange ?? null, this.onCopy = t.onCopy ?? null; } } -class v { +class S { constructor() { s(this, "selectedCell", null); s(this, "selectedRange", null); } } -class N { +class O { constructor() { s(this, "cells"); this.cells = new R(); @@ -578,20 +578,14 @@ class Y { } getRowByYCoord(t) { let e = 0; - for (let o = 0; o < this.rows.length; o++) - if (t <= this.rows[o].yPos) { - e = o; - break; - } + for (let o = 0; o < this.rows.length && (e = o, !(t <= this.rows[o].yPos)); o++) + ; return e; } getColumnByXCoord(t) { let e = 0; - for (let o = 0; o < this.columns.length; o++) - if (t <= this.columns[o].xPos) { - e = o; - break; - } + for (let o = 0; o < this.columns.length && (e = o, !(t <= this.columns[o].xPos)); o++) + ; return e; } } @@ -736,9 +730,9 @@ class j { value: w }; return new p(y); - })), m = a.length, C = a[0] ? a[0].length : 0; - for (let d = 0; d < m; d++) - for (let w = 0; w < C; w++) { + })), f = a.length, m = a[0] ? a[0].length : 0; + for (let d = 0; d < f; d++) + for (let w = 0; w < m; w++) { const y = a[d][w], B = { column: e + w, row: o + d @@ -758,19 +752,19 @@ class j { const i = this.saved.length, n = this.saved[0] ? this.saved[0].length : 0; for (let h = 0; h < i; h++) for (let c = 0; c < n; c++) { - const a = this.saved[h][c], m = { + const a = this.saved[h][c], f = { column: e + c, row: o + h - }, C = { + }, m = { displayValue: a.displayValue, value: a.value, style: a.style }; - t.changeCellValues(m, C, !1); + t.changeCellValues(f, m, !1); } } } -const f = "modern_sc_"; +const C = "modern_sc_"; class q { constructor(t, e) { s(this, "table"); @@ -789,7 +783,7 @@ class q { s(this, "events"); s(this, "clipboard"); const o = L(40, 40), l = this.makeConfigFromData(o, (e == null ? void 0 : e.view) ?? { height: 600, width: 800 }); - e != null && e.view && (l.view = e.view), this.config = new x(l), this.config.onCellClick = (e == null ? void 0 : e.onCellClick) ?? null, this.config.onSelectonChange = (e == null ? void 0 : e.onSelectionChange) ?? null, this.config.onCellChange = (e == null ? void 0 : e.onCellChange) ?? null, this.config.onCopy = (e == null ? void 0 : e.onCopy) ?? null, this.rowsBar = new X(this), this.columnsBar = new G(this), this.sheet = new _(this), this.table = new z(this), this.scroller = new H(this), this.toolbar = new O(this), this.editor = new T(this), this.cache = this.getInitialCache(), this.viewport = new b(this, this.scroller.getViewportBoundlingRect()), this.selection = new v(), this.events = new P(this), this.clipboard = new j(this), this.data = o, this.styles = new N(), this.buildComponent(), this.setElementsPositions(), this.appendTableToTarget(t), this.renderSheet(), this.renderColumnsBar(), this.renderRowsBar(); + e != null && e.view && (l.view = e.view), this.config = new x(l), this.config.onCellClick = (e == null ? void 0 : e.onCellClick) ?? null, this.config.onSelectonChange = (e == null ? void 0 : e.onSelectionChange) ?? null, this.config.onCellChange = (e == null ? void 0 : e.onCellChange) ?? null, this.config.onCopy = (e == null ? void 0 : e.onCopy) ?? null, this.rowsBar = new X(this), this.columnsBar = new G(this), this.sheet = new D(this), this.table = new z(this), this.scroller = new H(this), this.toolbar = new N(this), this.editor = new T(this), this.cache = this.getInitialCache(), this.viewport = new b(this, this.scroller.getViewportBoundlingRect()), this.selection = new S(), this.events = new P(this), this.clipboard = new j(this), this.data = o, this.styles = new O(), this.buildComponent(), this.setElementsPositions(), this.appendTableToTarget(t), this.renderSheet(), this.renderColumnsBar(), this.renderRowsBar(); } setRowsBarPosition() { const t = this.columnsBar.height + this.toolbar.height, e = 0; @@ -832,7 +826,7 @@ class q { } buildComponent() { const t = document.createElement("div"); - t.style.top = this.columnsBarHeight + "px", t.style.left = this.rowsBarWidth + "px", t.appendChild(this.sheet.element), t.classList.add(f + "content"), this.table.element.appendChild(this.toolbar.element), this.table.element.appendChild(this.rowsBar.element), this.table.element.appendChild(this.columnsBar.element), this.table.element.appendChild(t), this.table.element.appendChild(this.scroller.element), this.table.element.append(this.editor.element); + t.style.top = this.columnsBarHeight + "px", t.style.left = this.rowsBarWidth + "px", t.appendChild(this.sheet.element), t.classList.add(C + "content"), this.table.element.appendChild(this.toolbar.element), this.table.element.appendChild(this.rowsBar.element), this.table.element.appendChild(this.columnsBar.element), this.table.element.appendChild(t), this.table.element.appendChild(this.scroller.element), this.table.element.append(this.editor.element); } /**Destroy spreadsheet DOM element. * @@ -940,23 +934,24 @@ class q { } loadData(t) { const e = t.length, o = t[0] ? t[0].length : 0; - console.log("!!FORMATTED DATA", e, o, t[0]), this.data = []; + this.data = []; const l = []; - for (let i = 0; i < e; i++) { - const n = []; - for (let h = 0; h < o; h++) { - const c = t[i][h]; - n.push(new p({ - displayValue: c.displayValue, - position: c.position, - resultValue: c.resultValue, - value: c.value, - style: c.style + for (let n = 0; n < e; n++) { + const h = []; + for (let c = 0; c < o; c++) { + const a = t[n][c]; + h.push(new p({ + displayValue: a.displayValue, + position: a.position, + resultValue: a.resultValue, + value: a.value, + style: a.style })); } - l.push(n); + l.push(h); } - return this.data = l, this.selection.selectedCell = null, this.selection.selectedRange = null, this.config = this.makeConfigFromData(l, this.config.view), this.cache = this.getInitialCache(), this.scroller.updateScrollerSize(), this.viewport = new b(this, this.scroller.getViewportBoundlingRect()), this.renderSheet(), this; + const i = this.makeConfigFromData(l, this.config.view); + return i.onCellChange = this.config.onCellChange, i.onCellClick = this.config.onCellClick, i.onCopy = this.config.onCopy, i.onSelectonChange = this.config.onSelectonChange, this.data = l, this.selection.selectedCell = null, this.selection.selectedRange = null, this.config = i, this.cache = this.getInitialCache(), this.scroller.updateScrollerSize(), this.viewport = new b(this, this.scroller.getViewportBoundlingRect()), this.renderSheet(), this; } makeConfigFromData(t, e) { const o = t.length - 1, l = t[0] ? t[0].length : 0, i = []; @@ -990,7 +985,7 @@ class q { } } export { - f as CSS_PREFIX, + C as CSS_PREFIX, Y as Cache, W as CachedColumn, F as CachedRow, @@ -998,12 +993,12 @@ export { R as CellStyles, E as Column, x as Config, - D as Position, + M as Position, g as RenderBox, k as Row, - v as Selection, - M as SerializableCell, - N as Styles, + S as Selection, + _ as SerializableCell, + O as Styles, b as Viewport, K as createSampleConfig, L as createSampleData, diff --git a/dist/main.js.map b/dist/main.js.map index 08f3bf0..e895ef0 100644 --- a/dist/main.js.map +++ b/dist/main.js.map @@ -1 +1 @@ -{"version":3,"file":"main.js","sources":["../src/modules/events.ts","../src/modules/renderBox.ts","../src/components/editor.ts","../src/utils/position.ts","../src/components/scroller.ts","../src/modules/cell.ts","../src/components/sheet.ts","../src/components/table.ts","../src/components/toolbar.ts","../src/modules/config.ts","../src/modules/selection.ts","../src/modules/styles.ts","../src/modules/viewport.ts","../src/modules/column.ts","../src/modules/row.ts","../src/utils/createData.ts","../src/modules/cache.ts","../src/components/columnsBar.ts","../src/components/rowsBar.ts","../src/modules/clipboard.ts","../src/main.ts"],"sourcesContent":["import { Selection } from \"../main\";\nexport var EventTypes;\n(function (EventTypes) {\n EventTypes[\"CELL_CLICK\"] = \"CELL_CLICK\";\n EventTypes[\"SELECTION_CHANGE\"] = \"CHANGE_SELECTION\";\n EventTypes[\"CELL_CHANGE\"] = \"CELL_CHANGE\";\n EventTypes[\"COPY_CELLS\"] = \"COPY_CELLS\";\n})(EventTypes || (EventTypes = {}));\nexport class Events {\n root;\n constructor(root) {\n this.root = root;\n }\n dispatch(action) {\n switch (action.type) {\n case EventTypes.CELL_CLICK: {\n const { event, scroller } = action;\n //\n //* Here may be side effects\n //\n this.cellClick(event, scroller);\n break;\n }\n case EventTypes.SELECTION_CHANGE: {\n const { selection, enableCallback } = action;\n //\n //* Here may be side effects\n //\n this.changeSelection(selection, enableCallback);\n break;\n }\n case EventTypes.CELL_CHANGE: {\n const { cell, enableCallback } = action;\n //\n //* Here may be side effects\n //\n this.changeCellValues(cell, enableCallback);\n break;\n }\n case EventTypes.COPY_CELLS: {\n const { data, dataAsString, range } = action;\n this.copy(range, data, dataAsString);\n break;\n }\n default: {\n break;\n }\n }\n }\n cellClick = (event, scroller) => {\n if (event.button !== 0)\n return; // Left mouse button\n const { offsetX, offsetY } = event;\n const clickedCell = this.root.getCellByCoords(offsetX, offsetY);\n const cell = this.root.getCell(clickedCell);\n const selection = new Selection();\n selection.selectedCell = clickedCell;\n selection.selectedRange = {\n from: clickedCell,\n to: clickedCell,\n };\n scroller.setSelectingMode(true);\n this.changeSelection(selection, true);\n this.root.config.onCellClick?.(event, cell);\n };\n changeSelection = (selection, enableCallback = false) => {\n this.root.selection = selection;\n if (enableCallback)\n this.root.config.onSelectonChange?.(selection);\n this.root.renderSheet();\n this.root.renderColumnsBar();\n this.root.renderRowsBar();\n };\n changeCellValues(cell, enableCallback = true) {\n if (enableCallback)\n this.root.config.onCellChange?.(cell);\n }\n copy = (range, data, dataAsString) => {\n this.root.config.onCopy?.(range, data, dataAsString);\n };\n}\n","export class RenderBox {\n x;\n y;\n width;\n height;\n constructor(config, cellPosition) {\n this.x = this.getXCoord(cellPosition.column, config);\n this.y = this.getYCoord(cellPosition.row, config);\n this.width = config.columns[cellPosition.column].width;\n this.height = config.rows[cellPosition.row].height;\n }\n getXCoord(column, config) {\n let x = 0;\n for (let i = 0; i < column; i++) {\n x += config.columns[i].width;\n }\n return x;\n }\n getYCoord(row, config) {\n let y = 0;\n for (let i = 0; i < row; i++) {\n y += config.rows[i].height;\n }\n return y;\n }\n}\n","import { CSS_PREFIX } from \"../main\";\nimport { EventTypes } from \"../modules/events\";\nimport { RenderBox } from \"../modules/renderBox\";\nexport class Editor {\n element;\n root;\n constructor(root) {\n this.root = root;\n const element = document.createElement(\"input\");\n element.classList.add(CSS_PREFIX + \"editor\");\n this.element = element;\n this.hide();\n }\n hide() {\n this.element.style.display = \"none\";\n this.element.classList.add(\"hide\");\n this.element.blur();\n window.removeEventListener(\"click\", this.handleClickOutside);\n this.element.removeEventListener(\"keydown\", this.handleKeydown);\n this.root.focusTable();\n }\n show(position, initialString) {\n const { height, width, x, y } = new RenderBox(this.root.config, position);\n const cell = this.root.getCell(position);\n this.element.classList.remove(\"hide\");\n this.element.style.top =\n y - this.root.viewport.top + this.root.columnsBarHeight + \"px\";\n this.element.style.left =\n x - this.root.viewport.left + this.root.rowsBarWidth + \"px\";\n this.element.style.width = width + \"px\";\n this.element.style.height = height + \"px\";\n this.element.style.display = \"block\";\n window.addEventListener(\"click\", this.handleClickOutside);\n this.element.addEventListener(\"keydown\", this.handleKeydown);\n this.element.value = initialString ? initialString : cell.value;\n this.element.focus();\n if (!initialString)\n this.element.select();\n }\n handleKeydown = (event) => {\n const { key } = event;\n switch (key) {\n case \"Escape\": {\n this.hide();\n break;\n }\n case \"Enter\": {\n if (!this.root.selection.selectedCell)\n return;\n this.root.changeCellValues(this.root.selection.selectedCell, {\n value: this.element.value,\n displayValue: this.element.value,\n });\n this.root.events.dispatch({\n type: EventTypes.CELL_CHANGE,\n cell: this.root.getCell(this.root.selection.selectedCell),\n });\n this.hide();\n this.root.renderSelection();\n }\n }\n };\n handleClickOutside = (event) => {\n const target = event.target;\n if (!this.element.contains(target)) {\n this.hide();\n }\n };\n}\n","export function checkEqualRanges(range1, range2) {\n const equalRows = range1.from.row === range2.to.row;\n const equalColumns = range1.from.column === range2.to.column;\n return equalRows && equalColumns;\n}\nexport function checkEqualCellSelections(selection1, selection2) {\n return (selection1.column === selection2.column && selection1.row === selection2.row);\n}\n","import { CSS_PREFIX, Selection } from \"../main\";\nimport { EventTypes } from \"../modules/events\";\nimport { checkEqualCellSelections } from \"../utils/position\";\nexport class Scroller {\n element;\n verticalScroller;\n horizontalScroller;\n root;\n isSelecting = false;\n constructor(root) {\n this.root = root;\n const { horizontalScroller, scroller, verticalScroller } = this.buildComponent();\n this.element = scroller;\n this.verticalScroller = verticalScroller;\n this.horizontalScroller = horizontalScroller;\n this.element.style.height = this.root.config.view.height + \"px\";\n this.element.style.width = this.root.config.view.width + \"px\";\n this.element.style.top = this.root.columnsBarHeight + \"px\";\n this.element.style.left = this.root.rowsBarWidth + \"px\";\n this.element.tabIndex = -1;\n this.updateScrollerSize(); //* Init size set\n this.element.addEventListener(\"scroll\", this.handleScroll);\n this.element.addEventListener(\"mousedown\", this.handleClick);\n this.element.addEventListener(\"mousemove\", this.handleMouseMove);\n this.element.addEventListener(\"mouseup\", this.handleMouseUp);\n this.element.addEventListener(\"dblclick\", this.handleDoubleClick);\n this.element.addEventListener(\"keydown\", this.handleKeydown);\n this.element.addEventListener(\"paste\", (event) => {\n if (!this.root.selection.selectedCell)\n return;\n this.root.clipboard.paste(this.root, this.root.selection.selectedCell, event);\n });\n }\n setSelectingMode(mode) {\n this.isSelecting = mode;\n }\n handleMouseMove = (event) => {\n if (!this.isSelecting)\n return;\n const { offsetX, offsetY } = event;\n const lastSelectedCell = this.root.getCellByCoords(offsetX, offsetY);\n let isRangeChanged = false;\n if (this.root.selection.selectedRange) {\n isRangeChanged = !checkEqualCellSelections(this.root.selection.selectedRange.to, lastSelectedCell);\n if (isRangeChanged) {\n this.root.selection.selectedRange.to = lastSelectedCell;\n this.root.events.dispatch({\n type: EventTypes.SELECTION_CHANGE,\n selection: this.root.selection,\n enableCallback: true,\n });\n }\n }\n };\n handleMouseUp = () => {\n this.isSelecting = false;\n const newSelection = { ...this.root.selection };\n if (this.root.selection.selectedRange) {\n if (checkEqualCellSelections(this.root.selection.selectedRange.from, this.root.selection.selectedRange.to)) {\n newSelection.selectedRange = null;\n this.root.events.dispatch({\n type: EventTypes.SELECTION_CHANGE,\n selection: newSelection,\n enableCallback: false,\n });\n }\n }\n this.root.renderSheet();\n this.root.renderColumnsBar();\n this.root.renderRowsBar();\n };\n handleDoubleClick = (event) => {\n event.preventDefault();\n const position = this.root.getCellByCoords(event.offsetX, event.offsetY);\n this.root.showEditor(position);\n };\n handleKeydown = (event) => {\n //* Navigation\n if ([\"ArrowLeft\", \"ArrowRight\", \"ArrowUp\", \"ArrowDown\"].includes(event.key)) {\n event.preventDefault();\n this.root.selection.selectedRange = null;\n switch (event.key) {\n case \"ArrowLeft\": {\n if (this.root.selection.selectedCell &&\n this.root.selection.selectedCell.column > 0) {\n this.root.selection.selectedCell.column -= 1;\n // this.root.renderSheet();\n }\n break;\n }\n case \"ArrowRight\": {\n if (this.root.selection.selectedCell &&\n this.root.selection.selectedCell.column <\n this.root.config.columns.length - 1) {\n this.root.selection.selectedCell.column += 1;\n // this.root.renderSheet();\n }\n break;\n }\n case \"ArrowUp\": {\n if (this.root.selection.selectedCell &&\n this.root.selection.selectedCell.row > 0) {\n this.root.selection.selectedCell.row -= 1;\n // this.root.renderSheet();\n }\n break;\n }\n case \"ArrowDown\": {\n if (this.root.selection.selectedCell &&\n this.root.selection.selectedCell.row <\n this.root.config.rows.length - 1) {\n this.root.selection.selectedCell.row += 1;\n // this.root.renderSheet();\n }\n break;\n }\n }\n this.root.events.dispatch({\n type: EventTypes.SELECTION_CHANGE,\n selection: this.root.selection,\n enableCallback: true,\n });\n }\n //* Start typings\n const keysRegex = /^([a-z]|[а-я]|[0-9])$/;\n if (!event.metaKey && !event.ctrlKey) {\n //* Prevent handle shortcutrs\n const isPressedLetterKey = keysRegex.test(event.key.toLowerCase());\n if (event.key === \"F2\" || isPressedLetterKey) {\n //* English and Russian keyboard. Or F2 button\n event.preventDefault();\n if (!this.root.selection.selectedCell)\n return;\n this.root.showEditor(this.root.selection.selectedCell, isPressedLetterKey ? event.key : undefined);\n }\n }\n if (event.key === \"Delete\") {\n event.preventDefault();\n this.root.deleteSelectedCellsValues();\n this.root.renderSheet();\n }\n if (event.metaKey || event.ctrlKey) {\n if (event.code === \"KeyC\") {\n let cells = undefined;\n const selection = new Selection();\n if (this.root.selection.selectedRange) {\n const { from, to } = this.root.selection.selectedRange;\n selection.selectedRange = this.root.selection.selectedRange;\n const subArrByRows = this.root.data.slice(from.row, to.row + 1);\n const subArrByCols = subArrByRows.map((row) => {\n return row.slice(from.column, to.column + 1);\n });\n cells = [...subArrByCols];\n }\n else if (this.root.selection.selectedCell) {\n const { column, row } = this.root.selection.selectedCell;\n cells = [[this.root.data[row][column]]];\n selection.selectedRange = {\n from: this.root.selection.selectedCell,\n to: this.root.selection.selectedCell,\n };\n }\n else {\n return;\n }\n this.root.clipboard.copy(cells, selection.selectedRange);\n return;\n }\n if (event.code === \"KeyV\") {\n // if (!this.root.selection.selectedCell) return;\n // this.root.clipboard.paste(this.root, this.root.selection.selectedCell);\n }\n }\n };\n handleClick = (event) => {\n this.root.events.dispatch({\n type: EventTypes.CELL_CLICK,\n event,\n scroller: this,\n });\n };\n handleScroll = () => {\n const rect = this.getViewportBoundlingRect();\n this.root.viewport.updateValues(rect);\n this.root.renderSheet();\n this.root.renderColumnsBar();\n this.root.renderRowsBar();\n };\n getViewportBoundlingRect() {\n const { scrollTop, scrollLeft } = this.element;\n const { height, width } = this.element.getBoundingClientRect();\n const bottom = scrollTop + height;\n const right = scrollLeft + width;\n return {\n top: scrollTop,\n left: scrollLeft,\n bottom,\n right,\n };\n }\n buildComponent() {\n const scroller = document.createElement(\"div\");\n const verticalScroller = document.createElement(\"div\");\n const horizontalScroller = document.createElement(\"div\");\n const groupScrollers = document.createElement(\"div\");\n const stack = document.createElement(\"div\");\n verticalScroller.style.width = \"0px\";\n verticalScroller.style.pointerEvents = \"none\";\n horizontalScroller.style.pointerEvents = \"none\";\n groupScrollers.style.display = \"flex\";\n stack.appendChild(verticalScroller);\n stack.appendChild(horizontalScroller);\n groupScrollers.appendChild(stack);\n this.verticalScroller = verticalScroller;\n this.horizontalScroller = horizontalScroller;\n scroller.appendChild(groupScrollers);\n scroller.contentEditable = \"false\";\n scroller.classList.add(CSS_PREFIX + \"scroller\");\n return { scroller, verticalScroller, horizontalScroller };\n }\n getActualHeight() {\n return this.root.config.rows.reduce((acc, curr) => {\n acc += curr.height;\n return acc;\n }, 0);\n }\n getActualWidth() {\n return this.root.config.columns.reduce((acc, curr) => {\n acc += curr.width;\n return acc;\n }, 0);\n }\n updateScrollerSize() {\n const totalHeight = this.getActualHeight();\n const totalWidth = this.getActualWidth();\n this.setScrollerHeight(totalHeight);\n this.setScrollerWidth(totalWidth);\n }\n setScrollerHeight(height) {\n this.verticalScroller.style.height = height + \"px\";\n }\n setScrollerWidth(width) {\n this.horizontalScroller.style.width = width + \"px\";\n }\n}\n","import { RenderBox } from \"./renderBox\";\nexport class CellStyles {\n fontSize = 16;\n fontColor = \"black\";\n background = \"white\";\n borderColor = \"black\";\n selectedBackground = \"#4287f5\";\n selectedFontColor = \"#ffffff\";\n constructor(props) {\n if (props) {\n Object.assign(this, props); // Override default styles\n }\n }\n}\nexport class Position {\n row;\n column;\n constructor(row, column) {\n this.row = row;\n this.column = column;\n }\n}\nexport class SerializableCell {\n value;\n displayValue;\n resultValue;\n position;\n style;\n constructor(props) {\n this.value = props.value;\n this.displayValue = props.displayValue;\n this.resultValue = props.resultValue;\n this.position = props.position;\n this.style = props.style;\n }\n}\nexport class Cell {\n /** True value (data) */\n value;\n /** Value to render */\n displayValue;\n /** This refers to the values that were obtained by calculations, for example, after calculating the formula */\n resultValue;\n position;\n style = null;\n constructor(props) {\n this.value = props.value;\n this.displayValue = props.displayValue;\n this.resultValue = props.resultValue;\n this.position = props.position;\n this.style = props.style;\n }\n getSerializableCell() {\n const cell = new SerializableCell({\n displayValue: this.displayValue,\n position: this.position,\n resultValue: this.resultValue,\n style: this.style,\n value: this.value,\n });\n return cell;\n }\n changeStyles(styles) {\n this.style = styles;\n }\n changeValues(values) {\n Object.assign(this, values);\n }\n // private isCellInRange(root: Spreadsheet): boolean {\n // const { column, row } = this.position;\n // const { selectedRange } = root.selection;\n // if (!selectedRange) return false;\n // const isCellInRow =\n // row >= Math.min(selectedRange.from.row, selectedRange.to.row) &&\n // row <= Math.max(selectedRange.to.row, selectedRange.from.row);\n // const isCellInCol =\n // column >= Math.min(selectedRange.from.column, selectedRange.to.column) &&\n // column <= Math.max(selectedRange.to.column, selectedRange.from.column);\n // return isCellInCol && isCellInRow;\n // }\n render(root) {\n const renderBox = new RenderBox(root.config, this.position);\n let { x, y } = renderBox;\n const { height, width } = renderBox;\n const { ctx } = root;\n // const isCellSelected =\n // root.selection.selectedCell?.row === this.position.row &&\n // root.selection.selectedCell.column === this.position.column;\n // const isCellInRange = this.isCellInRange(root);\n y -= root.viewport.top;\n x -= root.viewport.left;\n const styles = this.style ?? root.styles.cells;\n ctx.clearRect(x, y, width, height);\n ctx.fillStyle = styles.background;\n ctx.strokeStyle = \"black\";\n ctx.fillRect(x, y, width - 1, height - 1);\n ctx.strokeRect(x, y, width, height);\n ctx.fillStyle = styles.fontColor;\n ctx.textAlign = \"left\";\n ctx.font = `${styles.fontSize}px Arial`;\n ctx.textBaseline = \"middle\";\n ctx.fillText(this.displayValue, x + 2, y + height / 2);\n }\n}\n","import { CSS_PREFIX, RenderBox } from \"../main\";\nimport { Position } from \"../modules/cell\";\n/**\n * Display (CANVAS) element where cells render\n */\nexport class Sheet {\n element;\n ctx;\n root;\n constructor(root) {\n this.root = root;\n const canvas = document.createElement(\"canvas\");\n canvas.classList.add(CSS_PREFIX + \"sheet\");\n //* Set up canvas sizes based on provided root config\n canvas.height = this.root.config.view.height;\n canvas.width = this.root.config.view.width;\n canvas.style.width = this.root.config.view.width + \"px\";\n canvas.style.height = this.root.config.view.height + \"px\";\n canvas.style.left = \"0px\";\n this.element = canvas;\n const ctx = this.element.getContext(\"2d\");\n if (!ctx)\n throw new Error(\"Enable hardware acceleration\");\n this.ctx = ctx;\n }\n getCellByCoords(x, y) {\n let row = 0;\n let height = 0;\n while (height <= y) {\n height += this.root.config.rows[row].height;\n if (height >= y)\n break;\n row++;\n }\n let col = 0;\n let width = 0;\n while (width <= x) {\n width += this.root.config.columns[col].width;\n if (width >= x)\n break;\n col++;\n }\n return new Position(row, col);\n }\n renderCell(position) {\n const { column, row } = position;\n this.root.data[row][column].render(this.root);\n }\n getSelectionRange() {\n const { selectedCell, selectedRange } = this.root.selection;\n if (!selectedCell && !selectedRange)\n return;\n if (selectedRange) {\n const startRow = Math.min(selectedRange.from.row, selectedRange.to.row);\n const startCol = Math.min(selectedRange.from.column, selectedRange.to.column);\n const lastRow = Math.max(selectedRange.from.row, selectedRange.to.row);\n const lastCol = Math.max(selectedRange.from.column, selectedRange.to.column);\n const startCellBox = new RenderBox(this.root.config, {\n row: startRow,\n column: startCol,\n });\n let width = 0;\n for (let col = startCol; col <= lastCol; col++) {\n width += this.root.config.columns[col].width;\n }\n let height = 0;\n for (let row = startRow; row <= lastRow; row++) {\n height += this.root.config.rows[row].height;\n }\n const x = startCellBox.x - this.root.viewport.left;\n const y = startCellBox.y - this.root.viewport.top;\n return { x, y, height, width };\n }\n if (!selectedRange && selectedCell) {\n const box = new RenderBox(this.root.config, selectedCell);\n box.x -= this.root.viewport.left;\n box.y -= this.root.viewport.top;\n return box;\n }\n }\n renderSelectionRange(x, y, width, height) {\n this.ctx.save();\n this.ctx.strokeStyle = \"#47d1ff\";\n this.ctx.lineWidth = 3;\n this.ctx.strokeRect(x, y, width, height);\n this.ctx.fillStyle = \"#7da8ff50\";\n this.ctx.fillRect(x, y, width, height);\n this.ctx.restore();\n }\n renderSelection() {\n const box = this.getSelectionRange();\n if (!box)\n return;\n const { height, width, x, y } = box;\n this.renderSelectionRange(x, y, width, height);\n }\n renderSheet() {\n const firstRowIdx = this.root.viewport.firstRow;\n const lastColIdx = this.root.viewport.lastCol + 3;\n const lastRowIdx = this.root.viewport.lastRow + 3;\n const firstColIdx = this.root.viewport.firstCol;\n for (let row = firstRowIdx; row <= lastRowIdx; row++) {\n for (let col = firstColIdx; col <= lastColIdx; col++) {\n if (!this.root.config.columns[col] || !this.root.config.rows[row])\n break; //* Prevent read undefined\n this.renderCell({ column: col, row });\n }\n }\n this.renderSelection();\n }\n}\n","import { CSS_PREFIX } from \"../main\";\n/** Base (root) component */\nexport class Table {\n element;\n root;\n constructor(root) {\n this.root = root;\n const container = document.createElement(\"div\");\n container.classList.add(CSS_PREFIX + \"spreadsheet_container\");\n this.element = container;\n this.changeElementSizes(this.root.viewProps);\n }\n changeElementSizes(sizes) {\n const { height, width } = sizes;\n this.element.style.width = width + this.root.rowsBarWidth + \"px\";\n this.element.style.height = height + this.root.columnsBarHeight + \"px\";\n }\n}\n","import { CSS_PREFIX } from \"../main\";\nexport class Toolbar {\n element;\n root;\n height = 0;\n constructor(root) {\n this.root = root;\n const toolbarElement = document.createElement(\"div\");\n toolbarElement.classList.add(CSS_PREFIX + \"toolbar\");\n this.element = toolbarElement;\n }\n}\n","export class Config {\n rows;\n columns;\n view = {\n width: 800,\n height: 600,\n };\n onCellClick = null;\n onSelectonChange = null;\n onCellChange = null;\n onCopy;\n constructor(props) {\n this.columns = props.columns;\n this.rows = props.rows;\n this.view = props.view;\n this.onCellClick = props.onCellClick ?? null;\n this.onSelectonChange = props.onSelectionChange ?? null;\n this.onCellChange = props.onCellChange ?? null;\n this.onCopy = props.onCopy ?? null;\n }\n}\n","export class Selection {\n selectedCell = null;\n selectedRange = null;\n}\n","import { CellStyles } from \"./cell\";\nexport class Styles {\n cells;\n constructor() {\n this.cells = new CellStyles();\n }\n}\n","export class Viewport {\n root;\n top;\n left;\n right;\n bottom;\n firstRow;\n lastRow;\n firstCol;\n lastCol;\n constructor(root, props) {\n this.root = root;\n this.top = props.top;\n this.left = props.left;\n this.right = props.right;\n this.bottom = props.bottom;\n this.firstRow = this.getFirstRow();\n this.lastCol = this.getFirstRow(); //!Temp\n this.firstCol = this.getFirstRow(); //!Temp\n this.lastRow = this.getLastRow();\n this.updateValues({\n top: 0,\n left: 0,\n right: this.root.viewProps.width,\n bottom: this.root.viewProps.height,\n });\n }\n updateValues(props) {\n this.top = props.top;\n this.left = props.left;\n this.right = props.right;\n this.bottom = props.bottom;\n this.firstRow = this.getFirstRow();\n this.lastRow = this.getLastRow();\n this.firstCol = this.getFirstCol();\n this.lastCol = this.getLastCol();\n }\n /** Get index of first row in viewport */\n getFirstRow() {\n const rowIdx = this.root.cache.getRowByYCoord(this.top);\n return rowIdx;\n }\n getLastRow() {\n const rowIdx = this.root.cache.getRowByYCoord(this.bottom);\n return rowIdx;\n }\n getFirstCol() {\n const colIdx = this.root.cache.getColumnByXCoord(this.left);\n return colIdx;\n }\n getLastCol() {\n const colIdx = this.root.cache.getColumnByXCoord(this.right);\n return colIdx;\n }\n}\n","export class Column {\n width;\n title;\n constructor(props) {\n this.width = props.width;\n this.title = props.title;\n }\n}\n","export class Row {\n height;\n title;\n constructor(props) {\n this.height = props.height;\n this.title = props.title;\n }\n}\n","import { Cell } from \"../modules/cell\";\nimport { Column } from \"../modules/column\";\nimport { Config } from \"../modules/config\";\nimport { Row } from \"../modules/row\";\nexport function createSampleData(rows, columns, fillCellsByCoords = false) {\n const data = [];\n for (let row = 0; row <= rows; row++) {\n const innerRow = [];\n for (let col = 0; col <= columns; col++) {\n const value = fillCellsByCoords ? `${row}:${col}` : \"\";\n const cell = new Cell({\n displayValue: value,\n resultValue: value,\n value,\n position: {\n column: col,\n row: row,\n },\n style: null,\n });\n innerRow.push(cell);\n }\n data.push(innerRow);\n }\n return data;\n}\nexport function createSampleConfig(rows, columns) {\n const rowsArr = [];\n for (let i = 0; i <= rows; i++) {\n const rowItem = new Row({\n height: 40,\n title: String(i),\n });\n rowsArr.push(rowItem);\n }\n const colsArr = [];\n for (let i = 0; i <= columns; i++) {\n const colItem = new Column({\n title: String(i),\n width: 150,\n });\n colsArr.push(colItem);\n }\n const config = new Config({\n columns: colsArr,\n rows: rowsArr,\n view: {\n height: 600,\n width: 800,\n },\n });\n return config;\n}\nexport function makeSpreadsheetConfigAndData(rows, columns) {\n const data = createSampleData(rows, columns);\n const config = createSampleConfig(rows, columns);\n return { data, config };\n}\n","export class CachedColumn {\n xPos;\n colIdx;\n constructor(props) {\n this.xPos = props.xPos;\n this.colIdx = props.colIdx;\n }\n}\nexport class CachedRow {\n yPos;\n rowIdx;\n constructor(props) {\n this.yPos = props.yPos;\n this.rowIdx = props.rowIdx;\n }\n}\nexport class Cache {\n columns;\n rows;\n constructor(initial) {\n this.columns = initial.columns;\n this.rows = initial.rows;\n }\n getRowByYCoord(y) {\n let rowIdx = 0;\n for (let i = 0; i < this.rows.length; i++) {\n if (y <= this.rows[i].yPos) {\n //* Intersection detect\n rowIdx = i;\n break;\n }\n }\n return rowIdx;\n }\n getColumnByXCoord(x) {\n let colIdx = 0;\n for (let i = 0; i < this.columns.length; i++) {\n if (x <= this.columns[i].xPos) {\n //* Intersection detect\n colIdx = i;\n break;\n }\n }\n return colIdx;\n }\n}\n","import { RenderBox } from \"../main\";\nexport class ColumnsBar {\n element;\n root;\n height = 35;\n width;\n // private resizerWidth = 1;\n ctx;\n constructor(root) {\n this.root = root;\n this.element = this.createElement();\n const ctx = this.element.getContext(\"2d\");\n if (!ctx)\n throw new Error(\"Enable hardware acceleration\");\n this.ctx = ctx;\n this.width = this.root.viewProps.width;\n }\n createElement() {\n const element = document.createElement(\"canvas\");\n element.style.position = \"absolute\";\n element.style.height = this.height + \"px\";\n element.style.width = this.root.viewProps.width + \"px\";\n element.style.display = \"block\";\n element.style.borderLeft = \"1px solid black\";\n // element.style.boxSizing = 'border-box'\n element.width = this.root.viewProps.width;\n element.height = this.height;\n return element;\n }\n setElementPosition(top, left) {\n this.element.style.top = top + \"px\";\n this.element.style.left = left + \"px\";\n }\n isColumnSelected(column) {\n const { selectedCell, selectedRange } = this.root.selection;\n if (selectedCell && selectedCell.column === column)\n return true;\n if (selectedRange) {\n const inRange = column >=\n Math.min(selectedRange.from.column, selectedRange.to.column) &&\n column <= Math.max(selectedRange.from.column, selectedRange.to.column);\n return inRange;\n }\n return false;\n }\n // private getYCoordWithOffset(renderBox: RenderBox): number {\n // const {y} = renderBox\n // return y + this.root.toolbarHeight\n // }\n // private getXCoordWithOffset(renderBox: RenderBox): number {\n // const {x} = renderBox\n // return x\n // }\n renderText(column, renderBox) {\n const { width, x } = renderBox;\n this.ctx.fillStyle = \"black\";\n this.ctx.textAlign = \"center\";\n this.ctx.textBaseline = \"middle\";\n this.ctx.font = \"12px Arial\";\n this.ctx.fillText(this.root.config.columns[column].title, x + width / 2 - this.root.viewport.left, 0 + this.height / 2);\n }\n renderRect(column, renderBox) {\n const { width, x } = renderBox;\n const isColSelected = this.isColumnSelected(column);\n this.ctx.fillStyle = isColSelected ? \"#c7ebff\" : \"white\";\n this.ctx.strokeStyle = \"black\";\n this.ctx.lineWidth = 1;\n const specialX = x - this.root.viewport.left;\n this.ctx.fillRect(specialX - 1, 0, width, this.height);\n this.ctx.strokeRect(specialX - 1, 0, width, this.height);\n }\n renderSingleColumn(column) {\n const renderBox = new RenderBox(this.root.config, {\n row: 0,\n column: column,\n });\n this.renderRect(column, renderBox);\n this.renderText(column, renderBox);\n }\n renderBar() {\n const lastColIdx = this.root.viewport.lastCol + 3;\n const firstColIdx = this.root.viewport.firstCol;\n this.ctx.beginPath();\n this.ctx.strokeStyle = \"black\";\n this.ctx.lineWidth = 1;\n this.ctx.moveTo(0, 0);\n this.ctx.lineTo(0, this.height);\n this.ctx.closePath();\n this.ctx.stroke();\n for (let col = firstColIdx; col <= lastColIdx; col++) {\n if (!this.root.config.columns[col])\n break;\n this.renderSingleColumn(col);\n }\n }\n}\n","import { RenderBox } from \"../main\";\nexport class RowsBar {\n element;\n ctx;\n root;\n width = 35;\n height;\n resizerHeight = 1;\n constructor(root) {\n this.root = root;\n this.element = this.createElement();\n const ctx = this.element.getContext(\"2d\");\n if (!ctx)\n throw new Error(\"Enable hardware acceleration\");\n this.ctx = ctx;\n this.height = this.root.viewProps.height;\n }\n createElement() {\n const element = document.createElement(\"canvas\");\n element.style.position = \"absolute\";\n element.style.height = this.root.viewProps.height + \"px\";\n element.style.width = this.width + \"px\";\n element.style.display = \"block\";\n element.style.borderTop = \"1px solid black\";\n // element.style.boxSizing = 'border-box'\n element.width = this.width;\n element.height = this.root.viewProps.height;\n return element;\n }\n setElementPosition(top, left) {\n this.element.style.top = top + \"px\";\n this.element.style.left = left + \"px\";\n }\n isRowSelected(row) {\n const { selectedCell, selectedRange } = this.root.selection;\n if (selectedCell && selectedCell.row === row)\n return true;\n if (selectedRange) {\n const inRange = row >= Math.min(selectedRange.from.row, selectedRange.to.row) &&\n row <= Math.max(selectedRange.from.row, selectedRange.to.row);\n return inRange;\n }\n return false;\n }\n renderText(row, renderBox) {\n const { y, height } = renderBox;\n this.ctx.fillStyle = \"black\";\n this.ctx.textAlign = \"center\";\n this.ctx.textBaseline = \"middle\";\n this.ctx.font = \"12px Arial\";\n this.ctx.fillText(this.root.config.rows[row].title, this.width / 2, y - this.root.viewport.top + height / 2);\n }\n renderRect(column, renderBox) {\n const { y, height } = renderBox;\n const isRowSeleted = this.isRowSelected(column);\n this.ctx.fillStyle = isRowSeleted ? \"#c7ebff\" : \"white\";\n this.ctx.strokeStyle = \"black\";\n this.ctx.lineWidth = this.resizerHeight;\n const specialY = y - this.root.viewport.top;\n this.ctx.fillRect(0, specialY - 1, this.width, height);\n this.ctx.strokeRect(0, specialY - 1, this.width, height);\n }\n renderSingleRow(row) {\n const renderBox = new RenderBox(this.root.config, {\n column: 0,\n row: row,\n });\n this.renderRect(row, renderBox);\n this.renderText(row, renderBox);\n }\n renderBar() {\n const lastRowIdx = this.root.viewport.lastRow + 3;\n const firstRowIdx = this.root.viewport.firstRow;\n this.ctx.beginPath();\n this.ctx.moveTo(0, 0);\n this.ctx.strokeStyle = \"black\";\n this.ctx.lineWidth = 16;\n this.ctx.lineTo(35, 0);\n this.ctx.closePath();\n this.ctx.stroke();\n for (let row = firstRowIdx; row <= lastRowIdx; row++) {\n if (!this.root.config.rows[row])\n break;\n this.renderSingleRow(row);\n }\n }\n}\n","import { Cell, CellStyles } from \"./cell\";\nimport { EventTypes } from \"./events\";\nexport class Clipboard {\n saved = null;\n root;\n constructor(root) {\n this.root = root;\n }\n copy(data, range) {\n const mapedData = data\n .map((row) => {\n return row\n .map((item) => {\n return item.displayValue;\n })\n .join(\"\\t\");\n })\n .join(\"\\n\");\n this.saved = data;\n navigator.clipboard.writeText(mapedData);\n this.root.events.dispatch({\n type: EventTypes.COPY_CELLS,\n data,\n dataAsString: mapedData,\n range,\n });\n }\n paste(root, { column, row }, event) {\n if (!this.saved) {\n if (!event.clipboardData)\n return;\n const data = event.clipboardData.getData(\"text\");\n try {\n const arr = data.split(\"\\n\").map((item) => item.split(\"\\t\"));\n const arrayOfCells = arr.map((innerRow) => {\n return innerRow.map((item) => {\n const cellProps = {\n displayValue: item,\n position: {\n column,\n row,\n },\n resultValue: item,\n style: new CellStyles(),\n value: item,\n };\n return new Cell(cellProps);\n });\n });\n const rowsLength = arrayOfCells.length;\n const colsLength = arrayOfCells[0] ? arrayOfCells[0].length : 0;\n for (let i = 0; i < rowsLength; i++) {\n for (let j = 0; j < colsLength; j++) {\n const savedCell = arrayOfCells[i][j];\n const position = {\n column: column + j,\n row: row + i,\n };\n const values = {\n displayValue: savedCell.displayValue,\n value: savedCell.value,\n style: savedCell.style,\n };\n root.changeCellValues(position, values, false);\n }\n }\n }\n catch (err) {\n console.error(\"Cannot read clipboard. \", err);\n }\n root.renderSheet();\n return;\n }\n const rowsLength = this.saved.length;\n const colsLength = this.saved[0] ? this.saved[0].length : 0;\n for (let i = 0; i < rowsLength; i++) {\n for (let j = 0; j < colsLength; j++) {\n const savedCell = this.saved[i][j];\n const position = {\n column: column + j,\n row: row + i,\n };\n const values = {\n displayValue: savedCell.displayValue,\n value: savedCell.value,\n style: savedCell.style,\n };\n root.changeCellValues(position, values, false);\n }\n }\n }\n}\n","import { Editor } from \"./components/editor\";\nimport { Scroller } from \"./components/scroller\";\nimport { Sheet } from \"./components/sheet\";\nimport { Table } from \"./components/table\";\nimport { Toolbar } from \"./components/toolbar\";\nimport { Cell, } from \"./modules/cell\";\nimport { Config, } from \"./modules/config\";\nimport { Selection } from \"./modules/selection\";\nimport { Styles } from \"./modules/styles\";\nimport { Viewport } from \"./modules/viewport\";\nimport \"./scss/main.scss\";\nimport { createSampleData } from \"./utils/createData\";\nimport { Cache, CachedColumn, CachedRow } from \"./modules/cache\";\nimport { Row } from \"./modules/row\";\nimport { Column } from \"./modules/column\";\nimport { ColumnsBar } from \"./components/columnsBar\";\nimport { RowsBar } from \"./components/rowsBar\";\nimport { EventTypes, Events } from \"./modules/events\";\nimport { Clipboard } from \"./modules/clipboard\";\nexport const CSS_PREFIX = \"modern_sc_\";\nexport default class Spreadsheet {\n table;\n scroller;\n toolbar;\n rowsBar;\n columnsBar;\n sheet;\n editor;\n styles;\n config;\n data;\n viewport;\n selection;\n cache;\n events;\n clipboard;\n constructor(target, props) {\n const data = createSampleData(40, 40);\n const config = this.makeConfigFromData(data, props?.view ?? { height: 600, width: 800 });\n if (props?.view) {\n config.view = props.view;\n }\n this.config = new Config(config);\n this.config.onCellClick = props?.onCellClick ?? null;\n this.config.onSelectonChange = props?.onSelectionChange ?? null;\n this.config.onCellChange = props?.onCellChange ?? null;\n this.config.onCopy = props?.onCopy ?? null;\n this.rowsBar = new RowsBar(this);\n this.columnsBar = new ColumnsBar(this);\n this.sheet = new Sheet(this);\n this.table = new Table(this);\n this.scroller = new Scroller(this);\n this.toolbar = new Toolbar(this);\n this.editor = new Editor(this);\n this.cache = this.getInitialCache();\n this.viewport = new Viewport(this, this.scroller.getViewportBoundlingRect());\n this.selection = new Selection();\n this.events = new Events(this);\n this.clipboard = new Clipboard(this);\n this.data = data;\n this.styles = new Styles();\n this.buildComponent();\n this.setElementsPositions();\n this.appendTableToTarget(target);\n this.renderSheet();\n this.renderColumnsBar();\n this.renderRowsBar();\n }\n setRowsBarPosition() {\n const top = this.columnsBar.height + this.toolbar.height;\n const left = 0;\n this.rowsBar.setElementPosition(top, left);\n }\n setColumnsBarPosition() {\n const top = this.toolbar.height;\n const left = this.rowsBar.width;\n this.columnsBar.setElementPosition(top, left);\n }\n setElementsPositions() {\n this.setRowsBarPosition();\n this.setColumnsBarPosition();\n }\n getInitialCache() {\n const cachedCols = [];\n let currentWidth = 0;\n for (let i = 0; i <= this.config.columns.length - 1; i++) {\n const col = this.config.columns[i];\n currentWidth += col.width;\n const cacheCol = new CachedColumn({\n xPos: currentWidth,\n colIdx: i,\n });\n cachedCols.push(cacheCol);\n }\n const cachedRows = [];\n let currentHeight = 0;\n for (let i = 0; i <= this.config.rows.length - 1; i++) {\n const row = this.config.rows[i];\n currentHeight += row.height;\n const cacheRow = new CachedRow({\n yPos: currentHeight,\n rowIdx: i,\n });\n cachedRows.push(cacheRow);\n }\n const cache = new Cache({\n columns: cachedCols,\n rows: cachedRows,\n });\n return cache;\n }\n buildComponent() {\n const content = document.createElement(\"div\"); //* Abstract\n content.style.top = this.columnsBarHeight + \"px\";\n content.style.left = this.rowsBarWidth + \"px\";\n content.appendChild(this.sheet.element);\n content.classList.add(CSS_PREFIX + \"content\");\n this.table.element.appendChild(this.toolbar.element);\n this.table.element.appendChild(this.rowsBar.element);\n this.table.element.appendChild(this.columnsBar.element);\n this.table.element.appendChild(content);\n this.table.element.appendChild(this.scroller.element);\n this.table.element.append(this.editor.element);\n }\n /**Destroy spreadsheet DOM element.\n *\n * May be usefull when need to rerender component.\n */\n destroy() {\n this.table.element.remove();\n }\n appendTableToTarget(target) {\n if (typeof target === \"string\") {\n const element = document.querySelector(target);\n if (!element)\n throw new Error(`Element with selector ${target} is not finded in DOM.\\n Make sure it exists.`);\n element?.appendChild(this.table.element);\n }\n if (target instanceof HTMLElement) {\n target.append(this.table.element);\n }\n }\n /** Canvas rendering context 2D.\n *\n * Abble to draw on canvas with default CanvasAPI methods\n */\n get ctx() {\n return this.sheet.ctx;\n }\n get viewProps() {\n return this.config.view;\n }\n get columnsBarHeight() {\n return this.columnsBar.height;\n }\n get rowsBarWidth() {\n return this.rowsBar.width;\n }\n get toolbarHeight() {\n return this.toolbar.height;\n }\n /** Focusing on interactive part of spreadsheet */\n focusTable() {\n this.scroller.element.focus();\n }\n getCellByCoords(x, y) {\n return this.sheet.getCellByCoords(x, y);\n }\n getCell(position) {\n const { column, row } = position;\n return this.data[row][column];\n }\n changeCellValues(position, values, enableCallback = true) {\n const { column, row } = position;\n this.data[row][column].changeValues(values);\n this.events.dispatch({\n type: EventTypes.CELL_CHANGE,\n cell: this.data[row][column],\n enableCallback: enableCallback\n });\n this.renderCell(row, column);\n }\n changeCellStyles(position, styles) {\n const { column, row } = position;\n this.data[row][column].changeStyles(styles);\n this.renderCell(row, column);\n }\n applyActionToRange(range, callback) {\n const fromRow = Math.min(range.from.row, range.to.row);\n const toRow = Math.max(range.from.row, range.to.row);\n const fromCol = Math.min(range.from.column, range.to.column);\n const toCol = Math.max(range.from.column, range.to.column);\n for (let row = fromRow; row <= toRow; row++) {\n for (let col = fromCol; col <= toCol; col++) {\n const cell = this.data[row][col];\n callback(cell);\n }\n }\n }\n deleteSelectedCellsValues() {\n if (this.selection.selectedRange !== null) {\n this.applyActionToRange(this.selection.selectedRange, (cell) => {\n this.changeCellValues(cell.position, {\n displayValue: \"\",\n resultValue: \"\",\n value: \"\",\n });\n });\n }\n else {\n if (!this.selection.selectedCell)\n return;\n this.changeCellValues(this.selection.selectedCell, {\n displayValue: \"\",\n resultValue: \"\",\n value: \"\",\n });\n }\n }\n showEditor(position, initialString) {\n this.editor.show(position, initialString);\n }\n renderSheet() {\n this.sheet.renderSheet();\n }\n renderSelection() {\n this.sheet.renderSelection();\n }\n renderColumnsBar() {\n this.columnsBar.renderBar();\n }\n renderRowsBar() {\n this.rowsBar.renderBar();\n }\n renderCell(row, col) {\n this.data[row][col].render(this);\n }\n loadData(data) {\n const rowsLength = data.length;\n const colsLength = data[0] ? data[0].length : 0;\n console.log(\"!!FORMATTED DATA\", rowsLength, colsLength, data[0]);\n this.data = [];\n const formattedData = [];\n // Transform serialized objects to Cells\n for (let row = 0; row < rowsLength; row++) {\n const innerRow = [];\n for (let col = 0; col < colsLength; col++) {\n const cell = data[row][col];\n innerRow.push(new Cell({\n displayValue: cell.displayValue,\n position: cell.position,\n resultValue: cell.resultValue,\n value: cell.value,\n style: cell.style,\n }));\n }\n formattedData.push(innerRow);\n }\n this.data = formattedData;\n this.selection.selectedCell = null;\n this.selection.selectedRange = null;\n this.config = this.makeConfigFromData(formattedData, this.config.view);\n this.cache = this.getInitialCache();\n this.scroller.updateScrollerSize();\n this.viewport = new Viewport(this, this.scroller.getViewportBoundlingRect());\n this.renderSheet();\n return this;\n }\n makeConfigFromData(data, view) {\n const lastRowIdx = data.length - 1;\n const lastColIdx = data[0] ? data[0].length : 0;\n const rows = [];\n for (let row = 0; row < lastRowIdx; row++) {\n rows.push(new Row({\n height: 40,\n title: String(row),\n }));\n }\n const columns = [];\n for (let col = 0; col < lastColIdx; col++) {\n columns.push(new Column({\n width: 150,\n title: String(col),\n }));\n }\n const config = new Config({\n view,\n rows,\n columns,\n onCellClick: null,\n });\n return config;\n }\n serializeData() {\n const rowsLength = this.data.length;\n const colsLength = this.data[0] ? this.data[0].length : 0;\n const cellsArray = [];\n for (let row = 0; row < rowsLength; row++) {\n const innerRow = [];\n for (let col = 0; col < colsLength; col++) {\n innerRow.push(this.data[row][col].getSerializableCell());\n }\n cellsArray.push(innerRow);\n }\n return cellsArray;\n }\n}\nexport * from \"./modules/cache\";\nexport * from \"./modules/cell\";\nexport * from \"./modules/column\";\nexport * from \"./modules/config\";\nexport * from \"./modules/renderBox\";\nexport * from \"./modules/row\";\nexport * from \"./modules/selection\";\nexport * from \"./modules/styles\";\nexport * from \"./modules/viewport\";\nexport * from \"./utils/createData\";\n"],"names":["EventTypes","Events","root","__publicField","event","scroller","_a","_b","offsetX","offsetY","clickedCell","cell","selection","Selection","enableCallback","range","data","dataAsString","action","RenderBox","config","cellPosition","column","x","i","row","y","Editor","key","target","element","CSS_PREFIX","position","initialString","height","width","checkEqualCellSelections","selection1","selection2","Scroller","lastSelectedCell","isRangeChanged","newSelection","keysRegex","isPressedLetterKey","cells","from","to","rect","horizontalScroller","verticalScroller","mode","scrollTop","scrollLeft","bottom","right","groupScrollers","stack","acc","curr","totalHeight","totalWidth","CellStyles","props","Position","SerializableCell","Cell","styles","values","renderBox","ctx","Sheet","canvas","col","selectedCell","selectedRange","startRow","startCol","lastRow","lastCol","startCellBox","box","firstRowIdx","lastColIdx","lastRowIdx","firstColIdx","Table","container","sizes","Toolbar","toolbarElement","Config","Styles","Viewport","Column","Row","createSampleData","rows","columns","fillCellsByCoords","innerRow","value","createSampleConfig","rowsArr","rowItem","colsArr","colItem","makeSpreadsheetConfigAndData","CachedColumn","CachedRow","Cache","initial","rowIdx","colIdx","ColumnsBar","top","left","isColSelected","specialX","RowsBar","isRowSeleted","specialY","Clipboard","mapedData","item","arrayOfCells","cellProps","rowsLength","colsLength","j","savedCell","err","Spreadsheet","cachedCols","currentWidth","cacheCol","cachedRows","currentHeight","cacheRow","content","callback","fromRow","toRow","fromCol","toCol","formattedData","view","cellsArray"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"main.js","sources":["../src/modules/events.ts","../src/modules/renderBox.ts","../src/components/editor.ts","../src/utils/position.ts","../src/components/scroller.ts","../src/modules/cell.ts","../src/components/sheet.ts","../src/components/table.ts","../src/components/toolbar.ts","../src/modules/config.ts","../src/modules/selection.ts","../src/modules/styles.ts","../src/modules/viewport.ts","../src/modules/column.ts","../src/modules/row.ts","../src/utils/createData.ts","../src/modules/cache.ts","../src/components/columnsBar.ts","../src/components/rowsBar.ts","../src/modules/clipboard.ts","../src/main.ts"],"sourcesContent":["import { Selection } from \"../main\";\nexport var EventTypes;\n(function (EventTypes) {\n EventTypes[\"CELL_CLICK\"] = \"CELL_CLICK\";\n EventTypes[\"SELECTION_CHANGE\"] = \"CHANGE_SELECTION\";\n EventTypes[\"CELL_CHANGE\"] = \"CELL_CHANGE\";\n EventTypes[\"COPY_CELLS\"] = \"COPY_CELLS\";\n})(EventTypes || (EventTypes = {}));\nexport class Events {\n root;\n constructor(root) {\n this.root = root;\n }\n dispatch(action) {\n switch (action.type) {\n case EventTypes.CELL_CLICK: {\n const { event, scroller } = action;\n //\n //* Here may be side effects\n //\n this.cellClick(event, scroller);\n break;\n }\n case EventTypes.SELECTION_CHANGE: {\n const { selection, enableCallback } = action;\n //\n //* Here may be side effects\n //\n this.changeSelection(selection, enableCallback);\n break;\n }\n case EventTypes.CELL_CHANGE: {\n const { cell, enableCallback } = action;\n //\n //* Here may be side effects\n //\n this.changeCellValues(cell, enableCallback);\n break;\n }\n case EventTypes.COPY_CELLS: {\n const { data, dataAsString, range } = action;\n this.copy(range, data, dataAsString);\n break;\n }\n default: {\n break;\n }\n }\n }\n cellClick = (event, scroller) => {\n if (event.button !== 0)\n return; // Left mouse button\n const { offsetX, offsetY } = event;\n const clickedCell = this.root.getCellByCoords(offsetX, offsetY);\n const cell = this.root.getCell(clickedCell);\n const selection = new Selection();\n selection.selectedCell = clickedCell;\n selection.selectedRange = {\n from: clickedCell,\n to: clickedCell,\n };\n scroller.setSelectingMode(true);\n this.changeSelection(selection, true);\n this.root.config.onCellClick?.(event, cell);\n };\n changeSelection = (selection, enableCallback = false) => {\n this.root.selection = selection;\n if (enableCallback)\n this.root.config.onSelectonChange?.(selection);\n this.root.renderSheet();\n this.root.renderColumnsBar();\n this.root.renderRowsBar();\n };\n changeCellValues(cell, enableCallback = true) {\n if (enableCallback)\n this.root.config.onCellChange?.(cell);\n }\n copy = (range, data, dataAsString) => {\n this.root.config.onCopy?.(range, data, dataAsString);\n };\n}\n","export class RenderBox {\n x;\n y;\n width;\n height;\n constructor(config, cellPosition) {\n this.x = this.getXCoord(cellPosition.column, config);\n this.y = this.getYCoord(cellPosition.row, config);\n this.width = config.columns[cellPosition.column].width;\n this.height = config.rows[cellPosition.row].height;\n }\n getXCoord(column, config) {\n let x = 0;\n for (let i = 0; i < column; i++) {\n x += config.columns[i].width;\n }\n return x;\n }\n getYCoord(row, config) {\n let y = 0;\n for (let i = 0; i < row; i++) {\n y += config.rows[i].height;\n }\n return y;\n }\n}\n","import { CSS_PREFIX } from \"../main\";\nimport { EventTypes } from \"../modules/events\";\nimport { RenderBox } from \"../modules/renderBox\";\nexport class Editor {\n element;\n root;\n constructor(root) {\n this.root = root;\n const element = document.createElement(\"input\");\n element.classList.add(CSS_PREFIX + \"editor\");\n this.element = element;\n this.hide();\n }\n hide() {\n this.element.style.display = \"none\";\n this.element.classList.add(\"hide\");\n this.element.blur();\n window.removeEventListener(\"click\", this.handleClickOutside);\n this.element.removeEventListener(\"keydown\", this.handleKeydown);\n this.root.focusTable();\n }\n show(position, initialString) {\n const { height, width, x, y } = new RenderBox(this.root.config, position);\n const cell = this.root.getCell(position);\n this.element.classList.remove(\"hide\");\n this.element.style.top =\n y - this.root.viewport.top + this.root.columnsBarHeight + \"px\";\n this.element.style.left =\n x - this.root.viewport.left + this.root.rowsBarWidth + \"px\";\n this.element.style.width = width + \"px\";\n this.element.style.height = height + \"px\";\n this.element.style.display = \"block\";\n window.addEventListener(\"click\", this.handleClickOutside);\n this.element.addEventListener(\"keydown\", this.handleKeydown);\n this.element.value = initialString ? initialString : cell.value;\n this.element.focus();\n if (!initialString)\n this.element.select();\n }\n handleKeydown = (event) => {\n const { key } = event;\n switch (key) {\n case \"Escape\": {\n this.hide();\n break;\n }\n case \"Enter\": {\n if (!this.root.selection.selectedCell)\n return;\n this.root.changeCellValues(this.root.selection.selectedCell, {\n value: this.element.value,\n displayValue: this.element.value,\n });\n this.root.events.dispatch({\n type: EventTypes.CELL_CHANGE,\n cell: this.root.getCell(this.root.selection.selectedCell),\n });\n this.hide();\n this.root.renderSelection();\n }\n }\n };\n handleClickOutside = (event) => {\n const target = event.target;\n if (!this.element.contains(target)) {\n this.hide();\n }\n };\n}\n","export function checkEqualRanges(range1, range2) {\n const equalRows = range1.from.row === range2.to.row;\n const equalColumns = range1.from.column === range2.to.column;\n return equalRows && equalColumns;\n}\nexport function checkEqualCellSelections(selection1, selection2) {\n return (selection1.column === selection2.column && selection1.row === selection2.row);\n}\n","import { CSS_PREFIX, Selection } from \"../main\";\nimport { EventTypes } from \"../modules/events\";\nimport { checkEqualCellSelections } from \"../utils/position\";\nexport class Scroller {\n element;\n verticalScroller;\n horizontalScroller;\n root;\n isSelecting = false;\n constructor(root) {\n this.root = root;\n const { horizontalScroller, scroller, verticalScroller } = this.buildComponent();\n this.element = scroller;\n this.verticalScroller = verticalScroller;\n this.horizontalScroller = horizontalScroller;\n this.element.style.height = this.root.config.view.height + \"px\";\n this.element.style.width = this.root.config.view.width + \"px\";\n this.element.style.top = this.root.columnsBarHeight + \"px\";\n this.element.style.left = this.root.rowsBarWidth + \"px\";\n this.element.tabIndex = -1;\n this.updateScrollerSize(); //* Init size set\n this.element.addEventListener(\"scroll\", this.handleScroll);\n this.element.addEventListener(\"mousedown\", this.handleClick);\n this.element.addEventListener(\"mousemove\", this.handleMouseMove);\n this.element.addEventListener(\"mouseup\", this.handleMouseUp);\n this.element.addEventListener(\"dblclick\", this.handleDoubleClick);\n this.element.addEventListener(\"keydown\", this.handleKeydown);\n this.element.addEventListener(\"paste\", (event) => {\n if (!this.root.selection.selectedCell)\n return;\n this.root.clipboard.paste(this.root, this.root.selection.selectedCell, event);\n });\n }\n setSelectingMode(mode) {\n this.isSelecting = mode;\n }\n handleMouseMove = (event) => {\n if (!this.isSelecting)\n return;\n const { offsetX, offsetY } = event;\n const lastSelectedCell = this.root.getCellByCoords(offsetX, offsetY);\n let isRangeChanged = false;\n if (this.root.selection.selectedRange) {\n isRangeChanged = !checkEqualCellSelections(this.root.selection.selectedRange.to, lastSelectedCell);\n if (isRangeChanged) {\n this.root.selection.selectedRange.to = lastSelectedCell;\n this.root.events.dispatch({\n type: EventTypes.SELECTION_CHANGE,\n selection: this.root.selection,\n enableCallback: true,\n });\n }\n }\n };\n handleMouseUp = () => {\n this.isSelecting = false;\n const newSelection = { ...this.root.selection };\n if (this.root.selection.selectedRange) {\n if (checkEqualCellSelections(this.root.selection.selectedRange.from, this.root.selection.selectedRange.to)) {\n newSelection.selectedRange = null;\n this.root.events.dispatch({\n type: EventTypes.SELECTION_CHANGE,\n selection: newSelection,\n enableCallback: false,\n });\n }\n }\n this.root.renderSheet();\n this.root.renderColumnsBar();\n this.root.renderRowsBar();\n };\n handleDoubleClick = (event) => {\n event.preventDefault();\n const position = this.root.getCellByCoords(event.offsetX, event.offsetY);\n this.root.showEditor(position);\n };\n handleKeydown = (event) => {\n //* Navigation\n if ([\"ArrowLeft\", \"ArrowRight\", \"ArrowUp\", \"ArrowDown\"].includes(event.key)) {\n event.preventDefault();\n this.root.selection.selectedRange = null;\n switch (event.key) {\n case \"ArrowLeft\": {\n if (this.root.selection.selectedCell &&\n this.root.selection.selectedCell.column > 0) {\n this.root.selection.selectedCell.column -= 1;\n // this.root.renderSheet();\n }\n break;\n }\n case \"ArrowRight\": {\n if (this.root.selection.selectedCell &&\n this.root.selection.selectedCell.column <\n this.root.config.columns.length - 1) {\n this.root.selection.selectedCell.column += 1;\n // this.root.renderSheet();\n }\n break;\n }\n case \"ArrowUp\": {\n if (this.root.selection.selectedCell &&\n this.root.selection.selectedCell.row > 0) {\n this.root.selection.selectedCell.row -= 1;\n // this.root.renderSheet();\n }\n break;\n }\n case \"ArrowDown\": {\n if (this.root.selection.selectedCell &&\n this.root.selection.selectedCell.row <\n this.root.config.rows.length - 1) {\n this.root.selection.selectedCell.row += 1;\n // this.root.renderSheet();\n }\n break;\n }\n }\n this.root.events.dispatch({\n type: EventTypes.SELECTION_CHANGE,\n selection: this.root.selection,\n enableCallback: true,\n });\n }\n //* Start typings\n const keysRegex = /^([a-z]|[а-я]|[0-9])$/;\n if (!event.metaKey && !event.ctrlKey) {\n //* Prevent handle shortcutrs\n const isPressedLetterKey = keysRegex.test(event.key.toLowerCase());\n if (event.key === \"F2\" || isPressedLetterKey) {\n //* English and Russian keyboard. Or F2 button\n event.preventDefault();\n if (!this.root.selection.selectedCell)\n return;\n this.root.showEditor(this.root.selection.selectedCell, isPressedLetterKey ? event.key : undefined);\n }\n }\n if (event.key === \"Delete\") {\n event.preventDefault();\n this.root.deleteSelectedCellsValues();\n this.root.renderSheet();\n }\n if (event.metaKey || event.ctrlKey) {\n if (event.code === \"KeyC\") {\n let cells = undefined;\n const selection = new Selection();\n if (this.root.selection.selectedRange) {\n const { from, to } = this.root.selection.selectedRange;\n selection.selectedRange = this.root.selection.selectedRange;\n const subArrByRows = this.root.data.slice(from.row, to.row + 1);\n const subArrByCols = subArrByRows.map((row) => {\n return row.slice(from.column, to.column + 1);\n });\n cells = [...subArrByCols];\n }\n else if (this.root.selection.selectedCell) {\n const { column, row } = this.root.selection.selectedCell;\n cells = [[this.root.data[row][column]]];\n selection.selectedRange = {\n from: this.root.selection.selectedCell,\n to: this.root.selection.selectedCell,\n };\n }\n else {\n return;\n }\n this.root.clipboard.copy(cells, selection.selectedRange);\n return;\n }\n if (event.code === \"KeyV\") {\n // if (!this.root.selection.selectedCell) return;\n // this.root.clipboard.paste(this.root, this.root.selection.selectedCell);\n }\n }\n };\n handleClick = (event) => {\n this.root.events.dispatch({\n type: EventTypes.CELL_CLICK,\n event,\n scroller: this,\n });\n };\n handleScroll = () => {\n const rect = this.getViewportBoundlingRect();\n this.root.viewport.updateValues(rect);\n this.root.renderSheet();\n this.root.renderColumnsBar();\n this.root.renderRowsBar();\n };\n getViewportBoundlingRect() {\n const { scrollTop, scrollLeft } = this.element;\n const { height, width } = this.element.getBoundingClientRect();\n const bottom = scrollTop + height;\n const right = scrollLeft + width;\n return {\n top: scrollTop,\n left: scrollLeft,\n bottom,\n right,\n };\n }\n buildComponent() {\n const scroller = document.createElement(\"div\");\n const verticalScroller = document.createElement(\"div\");\n const horizontalScroller = document.createElement(\"div\");\n const groupScrollers = document.createElement(\"div\");\n const stack = document.createElement(\"div\");\n verticalScroller.style.width = \"0px\";\n verticalScroller.style.pointerEvents = \"none\";\n horizontalScroller.style.pointerEvents = \"none\";\n groupScrollers.style.display = \"flex\";\n stack.appendChild(verticalScroller);\n stack.appendChild(horizontalScroller);\n groupScrollers.appendChild(stack);\n this.verticalScroller = verticalScroller;\n this.horizontalScroller = horizontalScroller;\n scroller.appendChild(groupScrollers);\n scroller.contentEditable = \"false\";\n scroller.classList.add(CSS_PREFIX + \"scroller\");\n return { scroller, verticalScroller, horizontalScroller };\n }\n getActualHeight() {\n return this.root.config.rows.reduce((acc, curr) => {\n acc += curr.height;\n return acc;\n }, 0);\n }\n getActualWidth() {\n return this.root.config.columns.reduce((acc, curr) => {\n acc += curr.width;\n return acc;\n }, 0);\n }\n updateScrollerSize() {\n const totalHeight = this.getActualHeight();\n const totalWidth = this.getActualWidth();\n this.setScrollerHeight(totalHeight);\n this.setScrollerWidth(totalWidth);\n }\n setScrollerHeight(height) {\n this.verticalScroller.style.height = height + \"px\";\n }\n setScrollerWidth(width) {\n this.horizontalScroller.style.width = width + \"px\";\n }\n}\n","import { RenderBox } from \"./renderBox\";\nexport class CellStyles {\n fontSize = 16;\n fontColor = \"black\";\n background = \"white\";\n borderColor = \"black\";\n selectedBackground = \"#4287f5\";\n selectedFontColor = \"#ffffff\";\n constructor(props) {\n if (props) {\n Object.assign(this, props); // Override default styles\n }\n }\n}\nexport class Position {\n row;\n column;\n constructor(row, column) {\n this.row = row;\n this.column = column;\n }\n}\nexport class SerializableCell {\n value;\n displayValue;\n resultValue;\n position;\n style;\n constructor(props) {\n this.value = props.value;\n this.displayValue = props.displayValue;\n this.resultValue = props.resultValue;\n this.position = props.position;\n this.style = props.style;\n }\n}\nexport class Cell {\n /** True value (data) */\n value;\n /** Value to render */\n displayValue;\n /** This refers to the values that were obtained by calculations, for example, after calculating the formula */\n resultValue;\n position;\n style = null;\n constructor(props) {\n this.value = props.value;\n this.displayValue = props.displayValue;\n this.resultValue = props.resultValue;\n this.position = props.position;\n this.style = props.style;\n }\n getSerializableCell() {\n const cell = new SerializableCell({\n displayValue: this.displayValue,\n position: this.position,\n resultValue: this.resultValue,\n style: this.style,\n value: this.value,\n });\n return cell;\n }\n changeStyles(styles) {\n this.style = styles;\n }\n changeValues(values) {\n Object.assign(this, values);\n }\n // private isCellInRange(root: Spreadsheet): boolean {\n // const { column, row } = this.position;\n // const { selectedRange } = root.selection;\n // if (!selectedRange) return false;\n // const isCellInRow =\n // row >= Math.min(selectedRange.from.row, selectedRange.to.row) &&\n // row <= Math.max(selectedRange.to.row, selectedRange.from.row);\n // const isCellInCol =\n // column >= Math.min(selectedRange.from.column, selectedRange.to.column) &&\n // column <= Math.max(selectedRange.to.column, selectedRange.from.column);\n // return isCellInCol && isCellInRow;\n // }\n render(root) {\n const renderBox = new RenderBox(root.config, this.position);\n let { x, y } = renderBox;\n const { height, width } = renderBox;\n const { ctx } = root;\n // const isCellSelected =\n // root.selection.selectedCell?.row === this.position.row &&\n // root.selection.selectedCell.column === this.position.column;\n // const isCellInRange = this.isCellInRange(root);\n y -= root.viewport.top;\n x -= root.viewport.left;\n const styles = this.style ?? root.styles.cells;\n ctx.clearRect(x, y, width, height);\n ctx.fillStyle = styles.background;\n ctx.strokeStyle = \"black\";\n ctx.fillRect(x, y, width - 1, height - 1);\n ctx.strokeRect(x, y, width, height);\n ctx.fillStyle = styles.fontColor;\n ctx.textAlign = \"left\";\n ctx.font = `${styles.fontSize}px Arial`;\n ctx.textBaseline = \"middle\";\n ctx.fillText(this.displayValue, x + 2, y + height / 2);\n }\n}\n","import { CSS_PREFIX, RenderBox } from \"../main\";\nimport { Position } from \"../modules/cell\";\n/**\n * Display (CANVAS) element where cells render\n */\nexport class Sheet {\n element;\n ctx;\n root;\n constructor(root) {\n this.root = root;\n const canvas = document.createElement(\"canvas\");\n canvas.classList.add(CSS_PREFIX + \"sheet\");\n //* Set up canvas sizes based on provided root config\n canvas.height = this.root.config.view.height;\n canvas.width = this.root.config.view.width;\n canvas.style.width = this.root.config.view.width + \"px\";\n canvas.style.height = this.root.config.view.height + \"px\";\n canvas.style.left = \"0px\";\n this.element = canvas;\n const ctx = this.element.getContext(\"2d\");\n if (!ctx)\n throw new Error(\"Enable hardware acceleration\");\n this.ctx = ctx;\n }\n getCellByCoords(x, y) {\n let row = 0;\n let height = 0;\n while (height <= y) {\n height += this.root.config.rows[row].height;\n if (height >= y)\n break;\n row++;\n }\n let col = 0;\n let width = 0;\n while (width <= x) {\n width += this.root.config.columns[col].width;\n if (width >= x)\n break;\n col++;\n }\n return new Position(row, col);\n }\n renderCell(position) {\n const { column, row } = position;\n this.root.data[row][column].render(this.root);\n }\n getSelectionRange() {\n const { selectedCell, selectedRange } = this.root.selection;\n if (!selectedCell && !selectedRange)\n return;\n if (selectedRange) {\n const startRow = Math.min(selectedRange.from.row, selectedRange.to.row);\n const startCol = Math.min(selectedRange.from.column, selectedRange.to.column);\n const lastRow = Math.max(selectedRange.from.row, selectedRange.to.row);\n const lastCol = Math.max(selectedRange.from.column, selectedRange.to.column);\n const startCellBox = new RenderBox(this.root.config, {\n row: startRow,\n column: startCol,\n });\n let width = 0;\n for (let col = startCol; col <= lastCol; col++) {\n width += this.root.config.columns[col].width;\n }\n let height = 0;\n for (let row = startRow; row <= lastRow; row++) {\n height += this.root.config.rows[row].height;\n }\n const x = startCellBox.x - this.root.viewport.left;\n const y = startCellBox.y - this.root.viewport.top;\n return { x, y, height, width };\n }\n if (!selectedRange && selectedCell) {\n const box = new RenderBox(this.root.config, selectedCell);\n box.x -= this.root.viewport.left;\n box.y -= this.root.viewport.top;\n return box;\n }\n }\n renderSelectionRange(x, y, width, height) {\n this.ctx.save();\n this.ctx.strokeStyle = \"#7da8ff\";\n this.ctx.lineWidth = 3;\n this.ctx.strokeRect(x, y, width, height);\n this.ctx.fillStyle = \"#7da8ff35\";\n this.ctx.fillRect(x, y, width, height);\n this.ctx.restore();\n }\n renderSelection() {\n const box = this.getSelectionRange();\n if (!box)\n return;\n const { height, width, x, y } = box;\n this.renderSelectionRange(x, y, width, height);\n }\n renderSheet() {\n const firstRowIdx = this.root.viewport.firstRow;\n const lastColIdx = this.root.viewport.lastCol + 3;\n const lastRowIdx = this.root.viewport.lastRow + 3;\n const firstColIdx = this.root.viewport.firstCol;\n for (let row = firstRowIdx; row <= lastRowIdx; row++) {\n for (let col = firstColIdx; col <= lastColIdx; col++) {\n if (!this.root.config.columns[col] || !this.root.config.rows[row])\n break; //* Prevent read undefined\n this.renderCell({ column: col, row });\n }\n }\n this.renderSelection();\n }\n}\n","import { CSS_PREFIX } from \"../main\";\n/** Base (root) component */\nexport class Table {\n element;\n root;\n constructor(root) {\n this.root = root;\n const container = document.createElement(\"div\");\n container.classList.add(CSS_PREFIX + \"spreadsheet_container\");\n this.element = container;\n this.changeElementSizes(this.root.viewProps);\n }\n changeElementSizes(sizes) {\n const { height, width } = sizes;\n this.element.style.width = width + this.root.rowsBarWidth + \"px\";\n this.element.style.height = height + this.root.columnsBarHeight + \"px\";\n }\n}\n","import { CSS_PREFIX } from \"../main\";\nexport class Toolbar {\n element;\n root;\n height = 0;\n constructor(root) {\n this.root = root;\n const toolbarElement = document.createElement(\"div\");\n toolbarElement.classList.add(CSS_PREFIX + \"toolbar\");\n this.element = toolbarElement;\n }\n}\n","export class Config {\n rows;\n columns;\n view = {\n width: 800,\n height: 600,\n };\n onCellClick = null;\n onSelectonChange = null;\n onCellChange = null;\n onCopy;\n constructor(props) {\n this.columns = props.columns;\n this.rows = props.rows;\n this.view = props.view;\n this.onCellClick = props.onCellClick ?? null;\n this.onSelectonChange = props.onSelectionChange ?? null;\n this.onCellChange = props.onCellChange ?? null;\n this.onCopy = props.onCopy ?? null;\n }\n}\n","export class Selection {\n selectedCell = null;\n selectedRange = null;\n}\n","import { CellStyles } from \"./cell\";\nexport class Styles {\n cells;\n constructor() {\n this.cells = new CellStyles();\n }\n}\n","export class Viewport {\n root;\n top;\n left;\n right;\n bottom;\n firstRow;\n lastRow;\n firstCol;\n lastCol;\n constructor(root, props) {\n this.root = root;\n this.top = props.top;\n this.left = props.left;\n this.right = props.right;\n this.bottom = props.bottom;\n this.firstRow = this.getFirstRow();\n this.lastCol = this.getFirstRow(); //!Temp\n this.firstCol = this.getFirstRow(); //!Temp\n this.lastRow = this.getLastRow();\n this.updateValues({\n top: 0,\n left: 0,\n right: this.root.viewProps.width,\n bottom: this.root.viewProps.height,\n });\n }\n updateValues(props) {\n this.top = props.top;\n this.left = props.left;\n this.right = props.right;\n this.bottom = props.bottom;\n this.firstRow = this.getFirstRow();\n this.lastRow = this.getLastRow();\n this.firstCol = this.getFirstCol();\n this.lastCol = this.getLastCol();\n }\n /** Get index of first row in viewport */\n getFirstRow() {\n const rowIdx = this.root.cache.getRowByYCoord(this.top);\n return rowIdx;\n }\n getLastRow() {\n const rowIdx = this.root.cache.getRowByYCoord(this.bottom);\n return rowIdx;\n }\n getFirstCol() {\n const colIdx = this.root.cache.getColumnByXCoord(this.left);\n return colIdx;\n }\n getLastCol() {\n const colIdx = this.root.cache.getColumnByXCoord(this.right);\n return colIdx;\n }\n}\n","export class Column {\n width;\n title;\n constructor(props) {\n this.width = props.width;\n this.title = props.title;\n }\n}\n","export class Row {\n height;\n title;\n constructor(props) {\n this.height = props.height;\n this.title = props.title;\n }\n}\n","import { Cell } from \"../modules/cell\";\nimport { Column } from \"../modules/column\";\nimport { Config } from \"../modules/config\";\nimport { Row } from \"../modules/row\";\nexport function createSampleData(rows, columns, fillCellsByCoords = false) {\n const data = [];\n for (let row = 0; row <= rows; row++) {\n const innerRow = [];\n for (let col = 0; col <= columns; col++) {\n const value = fillCellsByCoords ? `${row}:${col}` : \"\";\n const cell = new Cell({\n displayValue: value,\n resultValue: value,\n value,\n position: {\n column: col,\n row: row,\n },\n style: null,\n });\n innerRow.push(cell);\n }\n data.push(innerRow);\n }\n return data;\n}\nexport function createSampleConfig(rows, columns) {\n const rowsArr = [];\n for (let i = 0; i <= rows; i++) {\n const rowItem = new Row({\n height: 40,\n title: String(i),\n });\n rowsArr.push(rowItem);\n }\n const colsArr = [];\n for (let i = 0; i <= columns; i++) {\n const colItem = new Column({\n title: String(i),\n width: 150,\n });\n colsArr.push(colItem);\n }\n const config = new Config({\n columns: colsArr,\n rows: rowsArr,\n view: {\n height: 600,\n width: 800,\n },\n });\n return config;\n}\nexport function makeSpreadsheetConfigAndData(rows, columns) {\n const data = createSampleData(rows, columns);\n const config = createSampleConfig(rows, columns);\n return { data, config };\n}\n","export class CachedColumn {\n xPos;\n colIdx;\n constructor(props) {\n this.xPos = props.xPos;\n this.colIdx = props.colIdx;\n }\n}\nexport class CachedRow {\n yPos;\n rowIdx;\n constructor(props) {\n this.yPos = props.yPos;\n this.rowIdx = props.rowIdx;\n }\n}\nexport class Cache {\n columns;\n rows;\n constructor(initial) {\n this.columns = initial.columns;\n this.rows = initial.rows;\n }\n getRowByYCoord(y) {\n let rowIdx = 0;\n for (let i = 0; i < this.rows.length; i++) {\n rowIdx = i;\n if (y <= this.rows[i].yPos) { //* Intersection detect\n break;\n }\n }\n return rowIdx;\n }\n getColumnByXCoord(x) {\n let colIdx = 0;\n for (let i = 0; i < this.columns.length; i++) {\n colIdx = i;\n if (x <= this.columns[i].xPos) { //* Intersection detect\n break;\n }\n }\n return colIdx;\n }\n}\n","import { RenderBox } from \"../main\";\nexport class ColumnsBar {\n element;\n root;\n height = 35;\n width;\n // private resizerWidth = 1;\n ctx;\n constructor(root) {\n this.root = root;\n this.element = this.createElement();\n const ctx = this.element.getContext(\"2d\");\n if (!ctx)\n throw new Error(\"Enable hardware acceleration\");\n this.ctx = ctx;\n this.width = this.root.viewProps.width;\n }\n createElement() {\n const element = document.createElement(\"canvas\");\n element.style.position = \"absolute\";\n element.style.height = this.height + \"px\";\n element.style.width = this.root.viewProps.width + \"px\";\n element.style.display = \"block\";\n element.style.borderLeft = \"1px solid black\";\n // element.style.boxSizing = 'border-box'\n element.width = this.root.viewProps.width;\n element.height = this.height;\n return element;\n }\n setElementPosition(top, left) {\n this.element.style.top = top + \"px\";\n this.element.style.left = left + \"px\";\n }\n isColumnSelected(column) {\n const { selectedCell, selectedRange } = this.root.selection;\n if (selectedCell && selectedCell.column === column)\n return true;\n if (selectedRange) {\n const inRange = column >=\n Math.min(selectedRange.from.column, selectedRange.to.column) &&\n column <= Math.max(selectedRange.from.column, selectedRange.to.column);\n return inRange;\n }\n return false;\n }\n // private getYCoordWithOffset(renderBox: RenderBox): number {\n // const {y} = renderBox\n // return y + this.root.toolbarHeight\n // }\n // private getXCoordWithOffset(renderBox: RenderBox): number {\n // const {x} = renderBox\n // return x\n // }\n renderText(column, renderBox) {\n const { width, x } = renderBox;\n this.ctx.fillStyle = \"black\";\n this.ctx.textAlign = \"center\";\n this.ctx.textBaseline = \"middle\";\n this.ctx.font = \"12px Arial\";\n this.ctx.fillText(this.root.config.columns[column].title, x + width / 2 - this.root.viewport.left, 0 + this.height / 2);\n }\n renderRect(column, renderBox) {\n const { width, x } = renderBox;\n const isColSelected = this.isColumnSelected(column);\n this.ctx.fillStyle = isColSelected ? \"#c7ebff\" : \"white\";\n this.ctx.strokeStyle = \"black\";\n this.ctx.lineWidth = 1;\n const specialX = x - this.root.viewport.left;\n this.ctx.fillRect(specialX - 1, 0, width, this.height);\n this.ctx.strokeRect(specialX - 1, 0, width, this.height);\n }\n renderSingleColumn(column) {\n const renderBox = new RenderBox(this.root.config, {\n row: 0,\n column: column,\n });\n this.renderRect(column, renderBox);\n this.renderText(column, renderBox);\n }\n renderBar() {\n const lastColIdx = this.root.viewport.lastCol + 3;\n const firstColIdx = this.root.viewport.firstCol;\n this.ctx.beginPath();\n this.ctx.strokeStyle = \"black\";\n this.ctx.lineWidth = 1;\n this.ctx.moveTo(0, 0);\n this.ctx.lineTo(0, this.height);\n this.ctx.closePath();\n this.ctx.stroke();\n for (let col = firstColIdx; col <= lastColIdx; col++) {\n if (!this.root.config.columns[col])\n break;\n this.renderSingleColumn(col);\n }\n }\n}\n","import { RenderBox } from \"../main\";\nexport class RowsBar {\n element;\n ctx;\n root;\n width = 35;\n height;\n resizerHeight = 1;\n constructor(root) {\n this.root = root;\n this.element = this.createElement();\n const ctx = this.element.getContext(\"2d\");\n if (!ctx)\n throw new Error(\"Enable hardware acceleration\");\n this.ctx = ctx;\n this.height = this.root.viewProps.height;\n }\n createElement() {\n const element = document.createElement(\"canvas\");\n element.style.position = \"absolute\";\n element.style.height = this.root.viewProps.height + \"px\";\n element.style.width = this.width + \"px\";\n element.style.display = \"block\";\n element.style.borderTop = \"1px solid black\";\n // element.style.boxSizing = 'border-box'\n element.width = this.width;\n element.height = this.root.viewProps.height;\n return element;\n }\n setElementPosition(top, left) {\n this.element.style.top = top + \"px\";\n this.element.style.left = left + \"px\";\n }\n isRowSelected(row) {\n const { selectedCell, selectedRange } = this.root.selection;\n if (selectedCell && selectedCell.row === row)\n return true;\n if (selectedRange) {\n const inRange = row >= Math.min(selectedRange.from.row, selectedRange.to.row) &&\n row <= Math.max(selectedRange.from.row, selectedRange.to.row);\n return inRange;\n }\n return false;\n }\n renderText(row, renderBox) {\n const { y, height } = renderBox;\n this.ctx.fillStyle = \"black\";\n this.ctx.textAlign = \"center\";\n this.ctx.textBaseline = \"middle\";\n this.ctx.font = \"12px Arial\";\n this.ctx.fillText(this.root.config.rows[row].title, this.width / 2, y - this.root.viewport.top + height / 2);\n }\n renderRect(column, renderBox) {\n const { y, height } = renderBox;\n const isRowSeleted = this.isRowSelected(column);\n this.ctx.fillStyle = isRowSeleted ? \"#c7ebff\" : \"white\";\n this.ctx.strokeStyle = \"black\";\n this.ctx.lineWidth = this.resizerHeight;\n const specialY = y - this.root.viewport.top;\n this.ctx.fillRect(0, specialY - 1, this.width, height);\n this.ctx.strokeRect(0, specialY - 1, this.width, height);\n }\n renderSingleRow(row) {\n const renderBox = new RenderBox(this.root.config, {\n column: 0,\n row: row,\n });\n this.renderRect(row, renderBox);\n this.renderText(row, renderBox);\n }\n renderBar() {\n const lastRowIdx = this.root.viewport.lastRow + 3;\n const firstRowIdx = this.root.viewport.firstRow;\n this.ctx.beginPath();\n this.ctx.moveTo(0, 0);\n this.ctx.strokeStyle = \"black\";\n this.ctx.lineWidth = 16;\n this.ctx.lineTo(35, 0);\n this.ctx.closePath();\n this.ctx.stroke();\n for (let row = firstRowIdx; row <= lastRowIdx; row++) {\n if (!this.root.config.rows[row])\n break;\n this.renderSingleRow(row);\n }\n }\n}\n","import { Cell, CellStyles } from \"./cell\";\nimport { EventTypes } from \"./events\";\nexport class Clipboard {\n saved = null;\n root;\n constructor(root) {\n this.root = root;\n }\n copy(data, range) {\n const mapedData = data\n .map((row) => {\n return row\n .map((item) => {\n return item.displayValue;\n })\n .join(\"\\t\");\n })\n .join(\"\\n\");\n this.saved = data;\n navigator.clipboard.writeText(mapedData);\n this.root.events.dispatch({\n type: EventTypes.COPY_CELLS,\n data,\n dataAsString: mapedData,\n range,\n });\n }\n paste(root, { column, row }, event) {\n if (!this.saved) {\n if (!event.clipboardData)\n return;\n const data = event.clipboardData.getData(\"text\");\n try {\n const arr = data.split(\"\\n\").map((item) => item.split(\"\\t\"));\n const arrayOfCells = arr.map((innerRow) => {\n return innerRow.map((item) => {\n const cellProps = {\n displayValue: item,\n position: {\n column,\n row,\n },\n resultValue: item,\n style: new CellStyles(),\n value: item,\n };\n return new Cell(cellProps);\n });\n });\n const rowsLength = arrayOfCells.length;\n const colsLength = arrayOfCells[0] ? arrayOfCells[0].length : 0;\n for (let i = 0; i < rowsLength; i++) {\n for (let j = 0; j < colsLength; j++) {\n const savedCell = arrayOfCells[i][j];\n const position = {\n column: column + j,\n row: row + i,\n };\n const values = {\n displayValue: savedCell.displayValue,\n value: savedCell.value,\n style: savedCell.style,\n };\n root.changeCellValues(position, values, false);\n }\n }\n }\n catch (err) {\n console.error(\"Cannot read clipboard. \", err);\n }\n root.renderSheet();\n return;\n }\n const rowsLength = this.saved.length;\n const colsLength = this.saved[0] ? this.saved[0].length : 0;\n for (let i = 0; i < rowsLength; i++) {\n for (let j = 0; j < colsLength; j++) {\n const savedCell = this.saved[i][j];\n const position = {\n column: column + j,\n row: row + i,\n };\n const values = {\n displayValue: savedCell.displayValue,\n value: savedCell.value,\n style: savedCell.style,\n };\n root.changeCellValues(position, values, false);\n }\n }\n }\n}\n","import { Editor } from \"./components/editor\";\nimport { Scroller } from \"./components/scroller\";\nimport { Sheet } from \"./components/sheet\";\nimport { Table } from \"./components/table\";\nimport { Toolbar } from \"./components/toolbar\";\nimport { Cell, } from \"./modules/cell\";\nimport { Config, } from \"./modules/config\";\nimport { Selection } from \"./modules/selection\";\nimport { Styles } from \"./modules/styles\";\nimport { Viewport } from \"./modules/viewport\";\nimport \"./scss/main.scss\";\nimport { createSampleData } from \"./utils/createData\";\nimport { Cache, CachedColumn, CachedRow } from \"./modules/cache\";\nimport { Row } from \"./modules/row\";\nimport { Column } from \"./modules/column\";\nimport { ColumnsBar } from \"./components/columnsBar\";\nimport { RowsBar } from \"./components/rowsBar\";\nimport { EventTypes, Events } from \"./modules/events\";\nimport { Clipboard } from \"./modules/clipboard\";\nexport const CSS_PREFIX = \"modern_sc_\";\nexport default class Spreadsheet {\n table;\n scroller;\n toolbar;\n rowsBar;\n columnsBar;\n sheet;\n editor;\n styles;\n config;\n data;\n viewport;\n selection;\n cache;\n events;\n clipboard;\n constructor(target, props) {\n const data = createSampleData(40, 40);\n const config = this.makeConfigFromData(data, props?.view ?? { height: 600, width: 800 });\n if (props?.view) {\n config.view = props.view;\n }\n this.config = new Config(config);\n this.config.onCellClick = props?.onCellClick ?? null;\n this.config.onSelectonChange = props?.onSelectionChange ?? null;\n this.config.onCellChange = props?.onCellChange ?? null;\n this.config.onCopy = props?.onCopy ?? null;\n this.rowsBar = new RowsBar(this);\n this.columnsBar = new ColumnsBar(this);\n this.sheet = new Sheet(this);\n this.table = new Table(this);\n this.scroller = new Scroller(this);\n this.toolbar = new Toolbar(this);\n this.editor = new Editor(this);\n this.cache = this.getInitialCache();\n this.viewport = new Viewport(this, this.scroller.getViewportBoundlingRect());\n this.selection = new Selection();\n this.events = new Events(this);\n this.clipboard = new Clipboard(this);\n this.data = data;\n this.styles = new Styles();\n this.buildComponent();\n this.setElementsPositions();\n this.appendTableToTarget(target);\n this.renderSheet();\n this.renderColumnsBar();\n this.renderRowsBar();\n }\n setRowsBarPosition() {\n const top = this.columnsBar.height + this.toolbar.height;\n const left = 0;\n this.rowsBar.setElementPosition(top, left);\n }\n setColumnsBarPosition() {\n const top = this.toolbar.height;\n const left = this.rowsBar.width;\n this.columnsBar.setElementPosition(top, left);\n }\n setElementsPositions() {\n this.setRowsBarPosition();\n this.setColumnsBarPosition();\n }\n getInitialCache() {\n const cachedCols = [];\n let currentWidth = 0;\n for (let i = 0; i <= this.config.columns.length - 1; i++) {\n const col = this.config.columns[i];\n currentWidth += col.width;\n const cacheCol = new CachedColumn({\n xPos: currentWidth,\n colIdx: i,\n });\n cachedCols.push(cacheCol);\n }\n const cachedRows = [];\n let currentHeight = 0;\n for (let i = 0; i <= this.config.rows.length - 1; i++) {\n const row = this.config.rows[i];\n currentHeight += row.height;\n const cacheRow = new CachedRow({\n yPos: currentHeight,\n rowIdx: i,\n });\n cachedRows.push(cacheRow);\n }\n const cache = new Cache({\n columns: cachedCols,\n rows: cachedRows,\n });\n return cache;\n }\n buildComponent() {\n const content = document.createElement(\"div\"); //* Abstract\n content.style.top = this.columnsBarHeight + \"px\";\n content.style.left = this.rowsBarWidth + \"px\";\n content.appendChild(this.sheet.element);\n content.classList.add(CSS_PREFIX + \"content\");\n this.table.element.appendChild(this.toolbar.element);\n this.table.element.appendChild(this.rowsBar.element);\n this.table.element.appendChild(this.columnsBar.element);\n this.table.element.appendChild(content);\n this.table.element.appendChild(this.scroller.element);\n this.table.element.append(this.editor.element);\n }\n /**Destroy spreadsheet DOM element.\n *\n * May be usefull when need to rerender component.\n */\n destroy() {\n this.table.element.remove();\n }\n appendTableToTarget(target) {\n if (typeof target === \"string\") {\n const element = document.querySelector(target);\n if (!element)\n throw new Error(`Element with selector ${target} is not finded in DOM.\\n Make sure it exists.`);\n element?.appendChild(this.table.element);\n }\n if (target instanceof HTMLElement) {\n target.append(this.table.element);\n }\n }\n /** Canvas rendering context 2D.\n *\n * Abble to draw on canvas with default CanvasAPI methods\n */\n get ctx() {\n return this.sheet.ctx;\n }\n get viewProps() {\n return this.config.view;\n }\n get columnsBarHeight() {\n return this.columnsBar.height;\n }\n get rowsBarWidth() {\n return this.rowsBar.width;\n }\n get toolbarHeight() {\n return this.toolbar.height;\n }\n /** Focusing on interactive part of spreadsheet */\n focusTable() {\n this.scroller.element.focus();\n }\n getCellByCoords(x, y) {\n return this.sheet.getCellByCoords(x, y);\n }\n getCell(position) {\n const { column, row } = position;\n return this.data[row][column];\n }\n changeCellValues(position, values, enableCallback = true) {\n const { column, row } = position;\n this.data[row][column].changeValues(values);\n this.events.dispatch({\n type: EventTypes.CELL_CHANGE,\n cell: this.data[row][column],\n enableCallback: enableCallback\n });\n this.renderCell(row, column);\n }\n changeCellStyles(position, styles) {\n const { column, row } = position;\n this.data[row][column].changeStyles(styles);\n this.renderCell(row, column);\n }\n applyActionToRange(range, callback) {\n const fromRow = Math.min(range.from.row, range.to.row);\n const toRow = Math.max(range.from.row, range.to.row);\n const fromCol = Math.min(range.from.column, range.to.column);\n const toCol = Math.max(range.from.column, range.to.column);\n for (let row = fromRow; row <= toRow; row++) {\n for (let col = fromCol; col <= toCol; col++) {\n const cell = this.data[row][col];\n callback(cell);\n }\n }\n }\n deleteSelectedCellsValues() {\n if (this.selection.selectedRange !== null) {\n this.applyActionToRange(this.selection.selectedRange, (cell) => {\n this.changeCellValues(cell.position, {\n displayValue: \"\",\n resultValue: \"\",\n value: \"\",\n });\n });\n }\n else {\n if (!this.selection.selectedCell)\n return;\n this.changeCellValues(this.selection.selectedCell, {\n displayValue: \"\",\n resultValue: \"\",\n value: \"\",\n });\n }\n }\n showEditor(position, initialString) {\n this.editor.show(position, initialString);\n }\n renderSheet() {\n this.sheet.renderSheet();\n }\n renderSelection() {\n this.sheet.renderSelection();\n }\n renderColumnsBar() {\n this.columnsBar.renderBar();\n }\n renderRowsBar() {\n this.rowsBar.renderBar();\n }\n renderCell(row, col) {\n this.data[row][col].render(this);\n }\n loadData(data) {\n const rowsLength = data.length;\n const colsLength = data[0] ? data[0].length : 0;\n this.data = [];\n const formattedData = [];\n // Transform serialized objects to Cells\n for (let row = 0; row < rowsLength; row++) {\n const innerRow = [];\n for (let col = 0; col < colsLength; col++) {\n const cell = data[row][col];\n innerRow.push(new Cell({\n displayValue: cell.displayValue,\n position: cell.position,\n resultValue: cell.resultValue,\n value: cell.value,\n style: cell.style,\n }));\n }\n formattedData.push(innerRow);\n }\n const config = this.makeConfigFromData(formattedData, this.config.view);\n config.onCellChange = this.config.onCellChange;\n config.onCellClick = this.config.onCellClick;\n config.onCopy = this.config.onCopy;\n config.onSelectonChange = this.config.onSelectonChange;\n this.data = formattedData;\n this.selection.selectedCell = null;\n this.selection.selectedRange = null;\n this.config = config;\n this.cache = this.getInitialCache();\n this.scroller.updateScrollerSize();\n this.viewport = new Viewport(this, this.scroller.getViewportBoundlingRect());\n this.renderSheet();\n return this;\n }\n makeConfigFromData(data, view) {\n const lastRowIdx = data.length - 1;\n const lastColIdx = data[0] ? data[0].length : 0;\n const rows = [];\n for (let row = 0; row < lastRowIdx; row++) {\n rows.push(new Row({\n height: 40,\n title: String(row),\n }));\n }\n const columns = [];\n for (let col = 0; col < lastColIdx; col++) {\n columns.push(new Column({\n width: 150,\n title: String(col),\n }));\n }\n const config = new Config({\n view,\n rows,\n columns,\n onCellClick: null,\n });\n return config;\n }\n serializeData() {\n const rowsLength = this.data.length;\n const colsLength = this.data[0] ? this.data[0].length : 0;\n const cellsArray = [];\n for (let row = 0; row < rowsLength; row++) {\n const innerRow = [];\n for (let col = 0; col < colsLength; col++) {\n innerRow.push(this.data[row][col].getSerializableCell());\n }\n cellsArray.push(innerRow);\n }\n return cellsArray;\n }\n}\nexport * from \"./modules/cache\";\nexport * from \"./modules/cell\";\nexport * from \"./modules/column\";\nexport * from \"./modules/config\";\nexport * from \"./modules/renderBox\";\nexport * from \"./modules/row\";\nexport * from \"./modules/selection\";\nexport * from \"./modules/styles\";\nexport * from \"./modules/viewport\";\nexport * from \"./utils/createData\";\n"],"names":["EventTypes","Events","root","__publicField","event","scroller","_a","_b","offsetX","offsetY","clickedCell","cell","selection","Selection","enableCallback","range","data","dataAsString","action","RenderBox","config","cellPosition","column","x","i","row","y","Editor","key","target","element","CSS_PREFIX","position","initialString","height","width","checkEqualCellSelections","selection1","selection2","Scroller","lastSelectedCell","isRangeChanged","newSelection","keysRegex","isPressedLetterKey","cells","from","to","rect","horizontalScroller","verticalScroller","mode","scrollTop","scrollLeft","bottom","right","groupScrollers","stack","acc","curr","totalHeight","totalWidth","CellStyles","props","Position","SerializableCell","Cell","styles","values","renderBox","ctx","Sheet","canvas","col","selectedCell","selectedRange","startRow","startCol","lastRow","lastCol","startCellBox","box","firstRowIdx","lastColIdx","lastRowIdx","firstColIdx","Table","container","sizes","Toolbar","toolbarElement","Config","Styles","Viewport","Column","Row","createSampleData","rows","columns","fillCellsByCoords","innerRow","value","createSampleConfig","rowsArr","rowItem","colsArr","colItem","makeSpreadsheetConfigAndData","CachedColumn","CachedRow","Cache","initial","rowIdx","colIdx","ColumnsBar","top","left","isColSelected","specialX","RowsBar","isRowSeleted","specialY","Clipboard","mapedData","item","arrayOfCells","cellProps","rowsLength","colsLength","j","savedCell","err","Spreadsheet","cachedCols","currentWidth","cacheCol","cachedRows","currentHeight","cacheRow","content","callback","fromRow","toRow","fromCol","toCol","formattedData","view","cellsArray"],"mappings":";;;AACW,IAAAA;AAAA,CACV,SAAUA,GAAY;AACnBA,EAAAA,EAAW,aAAgB,cAC3BA,EAAW,mBAAsB,oBACjCA,EAAW,cAAiB,eAC5BA,EAAW,aAAgB;AAC/B,GAAGA,MAAeA,IAAa,CAAG,EAAA;AAC3B,MAAMC,EAAO;AAAA,EAEhB,YAAYC,GAAM;AADlB,IAAAC,EAAA;AAwCA,IAAAA,EAAA,mBAAY,CAACC,GAAOC,MAAa;AAhD1B,UAAAC,GAAAC;AAiDH,UAAIH,EAAM,WAAW;AACjB;AACE,YAAA,EAAE,SAAAI,GAAS,SAAAC,EAAY,IAAAL,GACvBM,IAAc,KAAK,KAAK,gBAAgBF,GAASC,CAAO,GACxDE,IAAO,KAAK,KAAK,QAAQD,CAAW,GACpCE,IAAY,IAAIC;AACtB,MAAAD,EAAU,eAAeF,GACzBE,EAAU,gBAAgB;AAAA,QACtB,MAAMF;AAAA,QACN,IAAIA;AAAA,MAAA,GAERL,EAAS,iBAAiB,EAAI,GACzB,KAAA,gBAAgBO,GAAW,EAAI,IACpCL,KAAAD,IAAA,KAAK,KAAK,QAAO,gBAAjB,QAAAC,EAAA,KAAAD,GAA+BF,GAAOO;AAAA,IAAI;AAE9C,IAAAR,EAAA,yBAAkB,CAACS,GAAWE,IAAiB,OAAU;AAhElD,UAAAR,GAAAC;AAiEH,WAAK,KAAK,YAAYK,GAClBE,OACKP,KAAAD,IAAA,KAAA,KAAK,QAAO,qBAAZ,QAAAC,EAAA,KAAAD,GAA+BM,KACxC,KAAK,KAAK,eACV,KAAK,KAAK,oBACV,KAAK,KAAK;IAAc;AAM5B,IAAAT,EAAA,cAAO,CAACY,GAAOC,GAAMC,MAAiB;AA5E/B,UAAAX,GAAAC;AA6EH,OAAAA,KAAAD,IAAA,KAAK,KAAK,QAAO,WAAjB,QAAAC,EAAA,KAAAD,GAA0BS,GAAOC,GAAMC;AAAA,IAAY;AAnEnD,SAAK,OAAOf;AAAA,EAChB;AAAA,EACA,SAASgB,GAAQ;AACb,YAAQA,EAAO,MAAM;AAAA,MACjB,KAAKlB,EAAW,YAAY;AAClB,cAAA,EAAE,OAAAI,GAAO,UAAAC,EAAa,IAAAa;AAIvB,aAAA,UAAUd,GAAOC,CAAQ;AAC9B;AAAA,MACJ;AAAA,MACA,KAAKL,EAAW,kBAAkB;AACxB,cAAA,EAAE,WAAAY,GAAW,gBAAAE,EAAmB,IAAAI;AAIjC,aAAA,gBAAgBN,GAAWE,CAAc;AAC9C;AAAA,MACJ;AAAA,MACA,KAAKd,EAAW,aAAa;AACnB,cAAA,EAAE,MAAAW,GAAM,gBAAAG,EAAmB,IAAAI;AAI5B,aAAA,iBAAiBP,GAAMG,CAAc;AAC1C;AAAA,MACJ;AAAA,MACA,KAAKd,EAAW,YAAY;AACxB,cAAM,EAAE,MAAAgB,GAAM,cAAAC,GAAc,OAAAF,EAAA,IAAUG;AACjC,aAAA,KAAKH,GAAOC,GAAMC,CAAY;AACnC;AAAA,MACJ;AAAA,IAIJ;AAAA,EACJ;AAAA,EAyBA,iBAAiBN,GAAMG,IAAiB,IAAM;AAxEvC,QAAAR,GAAAC;AAyEC,IAAAO,OACKP,KAAAD,IAAA,KAAA,KAAK,QAAO,iBAAZ,QAAAC,EAAA,KAAAD,GAA2BK;AAAA,EACxC;AAIJ;AChFO,MAAMQ,EAAU;AAAA,EAKnB,YAAYC,GAAQC,GAAc;AAJlC,IAAAlB,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AAEI,SAAK,IAAI,KAAK,UAAUkB,EAAa,QAAQD,CAAM,GACnD,KAAK,IAAI,KAAK,UAAUC,EAAa,KAAKD,CAAM,GAChD,KAAK,QAAQA,EAAO,QAAQC,EAAa,MAAM,EAAE,OACjD,KAAK,SAASD,EAAO,KAAKC,EAAa,GAAG,EAAE;AAAA,EAChD;AAAA,EACA,UAAUC,GAAQF,GAAQ;AACtB,QAAIG,IAAI;AACR,aAASC,IAAI,GAAGA,IAAIF,GAAQE;AACnB,MAAAD,KAAAH,EAAO,QAAQI,CAAC,EAAE;AAEpB,WAAAD;AAAA,EACX;AAAA,EACA,UAAUE,GAAKL,GAAQ;AACnB,QAAIM,IAAI;AACR,aAASF,IAAI,GAAGA,IAAIC,GAAKD;AAChB,MAAAE,KAAAN,EAAO,KAAKI,CAAC,EAAE;AAEjB,WAAAE;AAAA,EACX;AACJ;ACtBO,MAAMC,EAAO;AAAA,EAGhB,YAAYzB,GAAM;AAFlB,IAAAC,EAAA;AACA,IAAAA,EAAA;AAkCA,IAAAA,EAAA,uBAAgB,CAACC,MAAU;AACjB,YAAA,EAAE,KAAAwB,EAAQ,IAAAxB;AAChB,cAAQwB,GAAK;AAAA,QACT,KAAK,UAAU;AACX,eAAK,KAAK;AACV;AAAA,QACJ;AAAA,QACA,KAAK,SAAS;AACN,cAAA,CAAC,KAAK,KAAK,UAAU;AACrB;AACJ,eAAK,KAAK,iBAAiB,KAAK,KAAK,UAAU,cAAc;AAAA,YACzD,OAAO,KAAK,QAAQ;AAAA,YACpB,cAAc,KAAK,QAAQ;AAAA,UAAA,CAC9B,GACI,KAAA,KAAK,OAAO,SAAS;AAAA,YACtB,MAAM5B,EAAW;AAAA,YACjB,MAAM,KAAK,KAAK,QAAQ,KAAK,KAAK,UAAU,YAAY;AAAA,UAAA,CAC3D,GACD,KAAK,KAAK,GACV,KAAK,KAAK;QACd;AAAA,MACJ;AAAA,IAAA;AAEJ,IAAAG,EAAA,4BAAqB,CAACC,MAAU;AAC5B,YAAMyB,IAASzB,EAAM;AACrB,MAAK,KAAK,QAAQ,SAASyB,CAAM,KAC7B,KAAK,KAAK;AAAA,IACd;AA3DA,SAAK,OAAO3B;AACN,UAAA4B,IAAU,SAAS,cAAc,OAAO;AACtC,IAAAA,EAAA,UAAU,IAAIC,IAAa,QAAQ,GAC3C,KAAK,UAAUD,GACf,KAAK,KAAK;AAAA,EACd;AAAA,EACA,OAAO;AACE,SAAA,QAAQ,MAAM,UAAU,QACxB,KAAA,QAAQ,UAAU,IAAI,MAAM,GACjC,KAAK,QAAQ,QACN,OAAA,oBAAoB,SAAS,KAAK,kBAAkB,GAC3D,KAAK,QAAQ,oBAAoB,WAAW,KAAK,aAAa,GAC9D,KAAK,KAAK;EACd;AAAA,EACA,KAAKE,GAAUC,GAAe;AACpB,UAAA,EAAE,QAAAC,GAAQ,OAAAC,GAAO,GAAAZ,GAAG,GAAAG,EAAM,IAAA,IAAIP,EAAU,KAAK,KAAK,QAAQa,CAAQ,GAClErB,IAAO,KAAK,KAAK,QAAQqB,CAAQ;AAClC,SAAA,QAAQ,UAAU,OAAO,MAAM,GAC/B,KAAA,QAAQ,MAAM,MACfN,IAAI,KAAK,KAAK,SAAS,MAAM,KAAK,KAAK,mBAAmB,MACzD,KAAA,QAAQ,MAAM,OACfH,IAAI,KAAK,KAAK,SAAS,OAAO,KAAK,KAAK,eAAe,MACtD,KAAA,QAAQ,MAAM,QAAQY,IAAQ,MAC9B,KAAA,QAAQ,MAAM,SAASD,IAAS,MAChC,KAAA,QAAQ,MAAM,UAAU,SACtB,OAAA,iBAAiB,SAAS,KAAK,kBAAkB,GACxD,KAAK,QAAQ,iBAAiB,WAAW,KAAK,aAAa,GAC3D,KAAK,QAAQ,QAAQD,KAAgCtB,EAAK,OAC1D,KAAK,QAAQ,SACRsB,KACD,KAAK,QAAQ;EACrB;AA8BJ;AC/DgB,SAAAG,EAAyBC,GAAYC,GAAY;AAC7D,SAAQD,EAAW,WAAWC,EAAW,UAAUD,EAAW,QAAQC,EAAW;AACrF;ACJO,MAAMC,EAAS;AAAA,EAMlB,YAAYrC,GAAM;AALlB,IAAAC,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA,qBAAc;AA4Bd,IAAAA,EAAA,yBAAkB,CAACC,MAAU;AACzB,UAAI,CAAC,KAAK;AACN;AACE,YAAA,EAAE,SAAAI,GAAS,SAAAC,EAAY,IAAAL,GACvBoC,IAAmB,KAAK,KAAK,gBAAgBhC,GAASC,CAAO;AACnE,UAAIgC,IAAiB;AACjB,MAAA,KAAK,KAAK,UAAU,kBACpBA,IAAiB,CAACL,EAAyB,KAAK,KAAK,UAAU,cAAc,IAAII,CAAgB,GAC7FC,MACK,KAAA,KAAK,UAAU,cAAc,KAAKD,GAClC,KAAA,KAAK,OAAO,SAAS;AAAA,QACtB,MAAMxC,EAAW;AAAA,QACjB,WAAW,KAAK,KAAK;AAAA,QACrB,gBAAgB;AAAA,MAAA,CACnB;AAAA,IAET;AAEJ,IAAAG,EAAA,uBAAgB,MAAM;AAClB,WAAK,cAAc;AACnB,YAAMuC,IAAe,EAAE,GAAG,KAAK,KAAK,UAAU;AAC1C,MAAA,KAAK,KAAK,UAAU,iBAChBN,EAAyB,KAAK,KAAK,UAAU,cAAc,MAAM,KAAK,KAAK,UAAU,cAAc,EAAE,MACrGM,EAAa,gBAAgB,MACxB,KAAA,KAAK,OAAO,SAAS;AAAA,QACtB,MAAM1C,EAAW;AAAA,QACjB,WAAW0C;AAAA,QACX,gBAAgB;AAAA,MAAA,CACnB,IAGT,KAAK,KAAK,eACV,KAAK,KAAK,oBACV,KAAK,KAAK;IAAc;AAE5B,IAAAvC,EAAA,2BAAoB,CAACC,MAAU;AAC3B,MAAAA,EAAM,eAAe;AACrB,YAAM4B,IAAW,KAAK,KAAK,gBAAgB5B,EAAM,SAASA,EAAM,OAAO;AAClE,WAAA,KAAK,WAAW4B,CAAQ;AAAA,IAAA;AAEjC,IAAA7B,EAAA,uBAAgB,CAACC,MAAU;AAEnB,UAAA,CAAC,aAAa,cAAc,WAAW,WAAW,EAAE,SAASA,EAAM,GAAG,GAAG;AAGzE,gBAFAA,EAAM,eAAe,GAChB,KAAA,KAAK,UAAU,gBAAgB,MAC5BA,EAAM,KAAK;AAAA,UACf,KAAK,aAAa;AACV,YAAA,KAAK,KAAK,UAAU,gBACpB,KAAK,KAAK,UAAU,aAAa,SAAS,MACrC,KAAA,KAAK,UAAU,aAAa,UAAU;AAG/C;AAAA,UACJ;AAAA,UACA,KAAK,cAAc;AACf,YAAI,KAAK,KAAK,UAAU,gBACpB,KAAK,KAAK,UAAU,aAAa,SAC7B,KAAK,KAAK,OAAO,QAAQ,SAAS,MACjC,KAAA,KAAK,UAAU,aAAa,UAAU;AAG/C;AAAA,UACJ;AAAA,UACA,KAAK,WAAW;AACR,YAAA,KAAK,KAAK,UAAU,gBACpB,KAAK,KAAK,UAAU,aAAa,MAAM,MAClC,KAAA,KAAK,UAAU,aAAa,OAAO;AAG5C;AAAA,UACJ;AAAA,UACA,KAAK,aAAa;AACd,YAAI,KAAK,KAAK,UAAU,gBACpB,KAAK,KAAK,UAAU,aAAa,MAC7B,KAAK,KAAK,OAAO,KAAK,SAAS,MAC9B,KAAA,KAAK,UAAU,aAAa,OAAO;AAG5C;AAAA,UACJ;AAAA,QACJ;AACK,aAAA,KAAK,OAAO,SAAS;AAAA,UACtB,MAAMJ,EAAW;AAAA,UACjB,WAAW,KAAK,KAAK;AAAA,UACrB,gBAAgB;AAAA,QAAA,CACnB;AAAA,MACL;AAEA,YAAM2C,IAAY;AAClB,UAAI,CAACvC,EAAM,WAAW,CAACA,EAAM,SAAS;AAElC,cAAMwC,IAAqBD,EAAU,KAAKvC,EAAM,IAAI,aAAa;AAC7D,YAAAA,EAAM,QAAQ,QAAQwC,GAAoB;AAGtC,cADJxC,EAAM,eAAe,GACjB,CAAC,KAAK,KAAK,UAAU;AACrB;AACC,eAAA,KAAK,WAAW,KAAK,KAAK,UAAU,cAAcwC,IAAqBxC,EAAM,MAAM,MAAS;AAAA,QACrG;AAAA,MACJ;AAMI,UALAA,EAAM,QAAQ,aACdA,EAAM,eAAe,GACrB,KAAK,KAAK,6BACV,KAAK,KAAK,gBAEVA,EAAM,WAAWA,EAAM,SAAS;AAC5B,YAAAA,EAAM,SAAS,QAAQ;AACvB,cAAIyC;AACE,gBAAAjC,IAAY,IAAIC;AAClB,cAAA,KAAK,KAAK,UAAU,eAAe;AACnC,kBAAM,EAAE,MAAAiC,GAAM,IAAAC,EAAO,IAAA,KAAK,KAAK,UAAU;AAC/B,YAAAnC,EAAA,gBAAgB,KAAK,KAAK,UAAU,eAKtCiC,IAAA,CAAC,GAJY,KAAK,KAAK,KAAK,MAAMC,EAAK,KAAKC,EAAG,MAAM,CAAC,EAC5B,IAAI,CAACtB,MAC5BA,EAAI,MAAMqB,EAAK,QAAQC,EAAG,SAAS,CAAC,CAC9C,CACuB;AAAA,UAEnB,WAAA,KAAK,KAAK,UAAU,cAAc;AACvC,kBAAM,EAAE,QAAAzB,GAAQ,KAAAG,EAAQ,IAAA,KAAK,KAAK,UAAU;AACpC,YAAAoB,IAAA,CAAC,CAAC,KAAK,KAAK,KAAKpB,CAAG,EAAEH,CAAM,CAAC,CAAC,GACtCV,EAAU,gBAAgB;AAAA,cACtB,MAAM,KAAK,KAAK,UAAU;AAAA,cAC1B,IAAI,KAAK,KAAK,UAAU;AAAA,YAAA;AAAA,UAC5B;AAGA;AAEJ,eAAK,KAAK,UAAU,KAAKiC,GAAOjC,EAAU,aAAa;AACvD;AAAA,QACJ;AACI,QAAAR,EAAM;AAAA,MAId;AAAA,IAAA;AAEJ,IAAAD,EAAA,qBAAc,CAACC,MAAU;AAChB,WAAA,KAAK,OAAO,SAAS;AAAA,QACtB,MAAMJ,EAAW;AAAA,QACjB,OAAAI;AAAA,QACA,UAAU;AAAA,MAAA,CACb;AAAA,IAAA;AAEL,IAAAD,EAAA,sBAAe,MAAM;AACX,YAAA6C,IAAO,KAAK;AACb,WAAA,KAAK,SAAS,aAAaA,CAAI,GACpC,KAAK,KAAK,eACV,KAAK,KAAK,oBACV,KAAK,KAAK;IAAc;AAhLxB,SAAK,OAAO9C;AACZ,UAAM,EAAE,oBAAA+C,GAAoB,UAAA5C,GAAU,kBAAA6C,EAAiB,IAAI,KAAK;AAChE,SAAK,UAAU7C,GACf,KAAK,mBAAmB6C,GACxB,KAAK,qBAAqBD,GAC1B,KAAK,QAAQ,MAAM,SAAS,KAAK,KAAK,OAAO,KAAK,SAAS,MAC3D,KAAK,QAAQ,MAAM,QAAQ,KAAK,KAAK,OAAO,KAAK,QAAQ,MACzD,KAAK,QAAQ,MAAM,MAAM,KAAK,KAAK,mBAAmB,MACtD,KAAK,QAAQ,MAAM,OAAO,KAAK,KAAK,eAAe,MACnD,KAAK,QAAQ,WAAW,IACxB,KAAK,mBAAmB,GACxB,KAAK,QAAQ,iBAAiB,UAAU,KAAK,YAAY,GACzD,KAAK,QAAQ,iBAAiB,aAAa,KAAK,WAAW,GAC3D,KAAK,QAAQ,iBAAiB,aAAa,KAAK,eAAe,GAC/D,KAAK,QAAQ,iBAAiB,WAAW,KAAK,aAAa,GAC3D,KAAK,QAAQ,iBAAiB,YAAY,KAAK,iBAAiB,GAChE,KAAK,QAAQ,iBAAiB,WAAW,KAAK,aAAa,GAC3D,KAAK,QAAQ,iBAAiB,SAAS,CAAC7C,MAAU;AAC1C,MAAC,KAAK,KAAK,UAAU,gBAEpB,KAAA,KAAK,UAAU,MAAM,KAAK,MAAM,KAAK,KAAK,UAAU,cAAcA,CAAK;AAAA,IAAA,CAC/E;AAAA,EACL;AAAA,EACA,iBAAiB+C,GAAM;AACnB,SAAK,cAAcA;AAAA,EACvB;AAAA,EAyJA,2BAA2B;AACvB,UAAM,EAAE,WAAAC,GAAW,YAAAC,MAAe,KAAK,SACjC,EAAE,QAAAnB,GAAQ,OAAAC,EAAA,IAAU,KAAK,QAAQ,yBACjCmB,IAASF,IAAYlB,GACrBqB,IAAQF,IAAalB;AACpB,WAAA;AAAA,MACH,KAAKiB;AAAA,MACL,MAAMC;AAAA,MACN,QAAAC;AAAA,MACA,OAAAC;AAAA,IAAA;AAAA,EAER;AAAA,EACA,iBAAiB;AACP,UAAAlD,IAAW,SAAS,cAAc,KAAK,GACvC6C,IAAmB,SAAS,cAAc,KAAK,GAC/CD,IAAqB,SAAS,cAAc,KAAK,GACjDO,IAAiB,SAAS,cAAc,KAAK,GAC7CC,IAAQ,SAAS,cAAc,KAAK;AAC1C,WAAAP,EAAiB,MAAM,QAAQ,OAC/BA,EAAiB,MAAM,gBAAgB,QACvCD,EAAmB,MAAM,gBAAgB,QACzCO,EAAe,MAAM,UAAU,QAC/BC,EAAM,YAAYP,CAAgB,GAClCO,EAAM,YAAYR,CAAkB,GACpCO,EAAe,YAAYC,CAAK,GAChC,KAAK,mBAAmBP,GACxB,KAAK,qBAAqBD,GAC1B5C,EAAS,YAAYmD,CAAc,GACnCnD,EAAS,kBAAkB,SAClBA,EAAA,UAAU,IAAI0B,IAAa,UAAU,GACvC,EAAE,UAAA1B,GAAU,kBAAA6C,GAAkB,oBAAAD;EACzC;AAAA,EACA,kBAAkB;AACd,WAAO,KAAK,KAAK,OAAO,KAAK,OAAO,CAACS,GAAKC,OACtCD,KAAOC,EAAK,QACLD,IACR,CAAC;AAAA,EACR;AAAA,EACA,iBAAiB;AACb,WAAO,KAAK,KAAK,OAAO,QAAQ,OAAO,CAACA,GAAKC,OACzCD,KAAOC,EAAK,OACLD,IACR,CAAC;AAAA,EACR;AAAA,EACA,qBAAqB;AACX,UAAAE,IAAc,KAAK,mBACnBC,IAAa,KAAK;AACxB,SAAK,kBAAkBD,CAAW,GAClC,KAAK,iBAAiBC,CAAU;AAAA,EACpC;AAAA,EACA,kBAAkB3B,GAAQ;AACjB,SAAA,iBAAiB,MAAM,SAASA,IAAS;AAAA,EAClD;AAAA,EACA,iBAAiBC,GAAO;AACf,SAAA,mBAAmB,MAAM,QAAQA,IAAQ;AAAA,EAClD;AACJ;ACnPO,MAAM2B,EAAW;AAAA,EAOpB,YAAYC,GAAO;AANnB,IAAA5D,EAAA,kBAAW;AACX,IAAAA,EAAA,mBAAY;AACZ,IAAAA,EAAA,oBAAa;AACb,IAAAA,EAAA,qBAAc;AACd,IAAAA,EAAA,4BAAqB;AACrB,IAAAA,EAAA,2BAAoB;AAEhB,IAAI4D,KACO,OAAA,OAAO,MAAMA,CAAK;AAAA,EAEjC;AACJ;AACO,MAAMC,EAAS;AAAA,EAGlB,YAAYvC,GAAKH,GAAQ;AAFzB,IAAAnB,EAAA;AACA,IAAAA,EAAA;AAEI,SAAK,MAAMsB,GACX,KAAK,SAASH;AAAA,EAClB;AACJ;AACO,MAAM2C,EAAiB;AAAA,EAM1B,YAAYF,GAAO;AALnB,IAAA5D,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AAEI,SAAK,QAAQ4D,EAAM,OACnB,KAAK,eAAeA,EAAM,cAC1B,KAAK,cAAcA,EAAM,aACzB,KAAK,WAAWA,EAAM,UACtB,KAAK,QAAQA,EAAM;AAAA,EACvB;AACJ;AACO,MAAMG,EAAK;AAAA,EASd,YAAYH,GAAO;AAPnB;AAAA,IAAA5D,EAAA;AAEA;AAAA,IAAAA,EAAA;AAEA;AAAA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA,eAAQ;AAEJ,SAAK,QAAQ4D,EAAM,OACnB,KAAK,eAAeA,EAAM,cAC1B,KAAK,cAAcA,EAAM,aACzB,KAAK,WAAWA,EAAM,UACtB,KAAK,QAAQA,EAAM;AAAA,EACvB;AAAA,EACA,sBAAsB;AAQX,WAPM,IAAIE,EAAiB;AAAA,MAC9B,cAAc,KAAK;AAAA,MACnB,UAAU,KAAK;AAAA,MACf,aAAa,KAAK;AAAA,MAClB,OAAO,KAAK;AAAA,MACZ,OAAO,KAAK;AAAA,IAAA,CACf;AAAA,EAEL;AAAA,EACA,aAAaE,GAAQ;AACjB,SAAK,QAAQA;AAAA,EACjB;AAAA,EACA,aAAaC,GAAQ;AACV,WAAA,OAAO,MAAMA,CAAM;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,OAAOlE,GAAM;AACT,UAAMmE,IAAY,IAAIlD,EAAUjB,EAAK,QAAQ,KAAK,QAAQ;AACtD,QAAA,EAAE,GAAAqB,GAAG,GAAAG,EAAM,IAAA2C;AACT,UAAA,EAAE,QAAAnC,GAAQ,OAAAC,EAAU,IAAAkC,GACpB,EAAE,KAAAC,EAAQ,IAAApE;AAKhB,IAAAwB,KAAKxB,EAAK,SAAS,KACnBqB,KAAKrB,EAAK,SAAS;AACnB,UAAMiE,IAAS,KAAK,SAASjE,EAAK,OAAO;AACzC,IAAAoE,EAAI,UAAU/C,GAAGG,GAAGS,GAAOD,CAAM,GACjCoC,EAAI,YAAYH,EAAO,YACvBG,EAAI,cAAc,SAClBA,EAAI,SAAS/C,GAAGG,GAAGS,IAAQ,GAAGD,IAAS,CAAC,GACxCoC,EAAI,WAAW/C,GAAGG,GAAGS,GAAOD,CAAM,GAClCoC,EAAI,YAAYH,EAAO,WACvBG,EAAI,YAAY,QACZA,EAAA,OAAO,GAAGH,EAAO,QAAQ,YAC7BG,EAAI,eAAe,UACnBA,EAAI,SAAS,KAAK,cAAc/C,IAAI,GAAGG,IAAIQ,IAAS,CAAC;AAAA,EACzD;AACJ;AClGO,MAAMqC,EAAM;AAAA,EAIf,YAAYrE,GAAM;AAHlB,IAAAC,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AAEI,SAAK,OAAOD;AACN,UAAAsE,IAAS,SAAS,cAAc,QAAQ;AACvC,IAAAA,EAAA,UAAU,IAAIzC,IAAa,OAAO,GAEzCyC,EAAO,SAAS,KAAK,KAAK,OAAO,KAAK,QACtCA,EAAO,QAAQ,KAAK,KAAK,OAAO,KAAK,OACrCA,EAAO,MAAM,QAAQ,KAAK,KAAK,OAAO,KAAK,QAAQ,MACnDA,EAAO,MAAM,SAAS,KAAK,KAAK,OAAO,KAAK,SAAS,MACrDA,EAAO,MAAM,OAAO,OACpB,KAAK,UAAUA;AACf,UAAMF,IAAM,KAAK,QAAQ,WAAW,IAAI;AACxC,QAAI,CAACA;AACK,YAAA,IAAI,MAAM,8BAA8B;AAClD,SAAK,MAAMA;AAAA,EACf;AAAA,EACA,gBAAgB/C,GAAGG,GAAG;AAClB,QAAID,IAAM,GACNS,IAAS;AACb,WAAOA,KAAUR,MACbQ,KAAU,KAAK,KAAK,OAAO,KAAKT,CAAG,EAAE,QACjC,EAAAS,KAAUR;AAEd,MAAAD;AAEJ,QAAIgD,IAAM,GACNtC,IAAQ;AACZ,WAAOA,KAASZ,MACZY,KAAS,KAAK,KAAK,OAAO,QAAQsC,CAAG,EAAE,OACnC,EAAAtC,KAASZ;AAEb,MAAAkD;AAEG,WAAA,IAAIT,EAASvC,GAAKgD,CAAG;AAAA,EAChC;AAAA,EACA,WAAWzC,GAAU;AACX,UAAA,EAAE,QAAAV,GAAQ,KAAAG,EAAQ,IAAAO;AACnB,SAAA,KAAK,KAAKP,CAAG,EAAEH,CAAM,EAAE,OAAO,KAAK,IAAI;AAAA,EAChD;AAAA,EACA,oBAAoB;AAChB,UAAM,EAAE,cAAAoD,GAAc,eAAAC,EAAc,IAAI,KAAK,KAAK;AAC9C,QAAA,GAACD,KAAgB,CAACC,IAEtB;AAAA,UAAIA,GAAe;AACT,cAAAC,IAAW,KAAK,IAAID,EAAc,KAAK,KAAKA,EAAc,GAAG,GAAG,GAChEE,IAAW,KAAK,IAAIF,EAAc,KAAK,QAAQA,EAAc,GAAG,MAAM,GACtEG,IAAU,KAAK,IAAIH,EAAc,KAAK,KAAKA,EAAc,GAAG,GAAG,GAC/DI,IAAU,KAAK,IAAIJ,EAAc,KAAK,QAAQA,EAAc,GAAG,MAAM,GACrEK,IAAe,IAAI7D,EAAU,KAAK,KAAK,QAAQ;AAAA,UACjD,KAAKyD;AAAA,UACL,QAAQC;AAAA,QAAA,CACX;AACD,YAAI1C,IAAQ;AACZ,iBAASsC,IAAMI,GAAUJ,KAAOM,GAASN;AACrC,UAAAtC,KAAS,KAAK,KAAK,OAAO,QAAQsC,CAAG,EAAE;AAE3C,YAAIvC,IAAS;AACb,iBAAST,IAAMmD,GAAUnD,KAAOqD,GAASrD;AACrC,UAAAS,KAAU,KAAK,KAAK,OAAO,KAAKT,CAAG,EAAE;AAEzC,cAAMF,IAAIyD,EAAa,IAAI,KAAK,KAAK,SAAS,MACxCtD,IAAIsD,EAAa,IAAI,KAAK,KAAK,SAAS;AAC9C,eAAO,EAAE,GAAAzD,GAAG,GAAAG,GAAG,QAAAQ,GAAQ,OAAAC,EAAM;AAAA,MACjC;AACI,UAAA,CAACwC,KAAiBD,GAAc;AAChC,cAAMO,IAAM,IAAI9D,EAAU,KAAK,KAAK,QAAQuD,CAAY;AACpD,eAAAO,EAAA,KAAK,KAAK,KAAK,SAAS,MACxBA,EAAA,KAAK,KAAK,KAAK,SAAS,KACrBA;AAAA,MACX;AAAA;AAAA,EACJ;AAAA,EACA,qBAAqB1D,GAAGG,GAAGS,GAAOD,GAAQ;AACtC,SAAK,IAAI,QACT,KAAK,IAAI,cAAc,WACvB,KAAK,IAAI,YAAY,GACrB,KAAK,IAAI,WAAWX,GAAGG,GAAGS,GAAOD,CAAM,GACvC,KAAK,IAAI,YAAY,aACrB,KAAK,IAAI,SAASX,GAAGG,GAAGS,GAAOD,CAAM,GACrC,KAAK,IAAI;EACb;AAAA,EACA,kBAAkB;AACR,UAAA+C,IAAM,KAAK;AACjB,QAAI,CAACA;AACD;AACJ,UAAM,EAAE,QAAA/C,GAAQ,OAAAC,GAAO,GAAAZ,GAAG,GAAAG,MAAMuD;AAChC,SAAK,qBAAqB1D,GAAGG,GAAGS,GAAOD,CAAM;AAAA,EACjD;AAAA,EACA,cAAc;AACJ,UAAAgD,IAAc,KAAK,KAAK,SAAS,UACjCC,IAAa,KAAK,KAAK,SAAS,UAAU,GAC1CC,IAAa,KAAK,KAAK,SAAS,UAAU,GAC1CC,IAAc,KAAK,KAAK,SAAS;AACvC,aAAS5D,IAAMyD,GAAazD,KAAO2D,GAAY3D;AAC3C,eAASgD,IAAMY,GAAaZ,KAAOU,KAC3B,GAAC,KAAK,KAAK,OAAO,QAAQV,CAAG,KAAK,CAAC,KAAK,KAAK,OAAO,KAAKhD,CAAG,IADrBgD;AAG3C,aAAK,WAAW,EAAE,QAAQA,GAAK,KAAAhD,EAAK,CAAA;AAG5C,SAAK,gBAAgB;AAAA,EACzB;AACJ;AC5GO,MAAM6D,EAAM;AAAA,EAGf,YAAYpF,GAAM;AAFlB,IAAAC,EAAA;AACA,IAAAA,EAAA;AAEI,SAAK,OAAOD;AACN,UAAAqF,IAAY,SAAS,cAAc,KAAK;AACpC,IAAAA,EAAA,UAAU,IAAIxD,IAAa,uBAAuB,GAC5D,KAAK,UAAUwD,GACV,KAAA,mBAAmB,KAAK,KAAK,SAAS;AAAA,EAC/C;AAAA,EACA,mBAAmBC,GAAO;AAChB,UAAA,EAAE,QAAAtD,GAAQ,OAAAC,EAAU,IAAAqD;AAC1B,SAAK,QAAQ,MAAM,QAAQrD,IAAQ,KAAK,KAAK,eAAe,MAC5D,KAAK,QAAQ,MAAM,SAASD,IAAS,KAAK,KAAK,mBAAmB;AAAA,EACtE;AACJ;AChBO,MAAMuD,EAAQ;AAAA,EAIjB,YAAYvF,GAAM;AAHlB,IAAAC,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA,gBAAS;AAEL,SAAK,OAAOD;AACN,UAAAwF,IAAiB,SAAS,cAAc,KAAK;AACpC,IAAAA,EAAA,UAAU,IAAI3D,IAAa,SAAS,GACnD,KAAK,UAAU2D;AAAA,EACnB;AACJ;ACXO,MAAMC,EAAO;AAAA,EAWhB,YAAY5B,GAAO;AAVnB,IAAA5D,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA,cAAO;AAAA,MACH,OAAO;AAAA,MACP,QAAQ;AAAA,IAAA;AAEZ,IAAAA,EAAA,qBAAc;AACd,IAAAA,EAAA,0BAAmB;AACnB,IAAAA,EAAA,sBAAe;AACf,IAAAA,EAAA;AAEI,SAAK,UAAU4D,EAAM,SACrB,KAAK,OAAOA,EAAM,MAClB,KAAK,OAAOA,EAAM,MACb,KAAA,cAAcA,EAAM,eAAe,MACnC,KAAA,mBAAmBA,EAAM,qBAAqB,MAC9C,KAAA,eAAeA,EAAM,gBAAgB,MACrC,KAAA,SAASA,EAAM,UAAU;AAAA,EAClC;AACJ;ACpBO,MAAMlD,EAAU;AAAA,EAAhB;AACH,IAAAV,EAAA,sBAAe;AACf,IAAAA,EAAA,uBAAgB;AAAA;AACpB;ACFO,MAAMyF,EAAO;AAAA,EAEhB,cAAc;AADd,IAAAzF,EAAA;AAES,SAAA,QAAQ,IAAI2D;EACrB;AACJ;ACNO,MAAM+B,EAAS;AAAA,EAUlB,YAAY3F,GAAM6D,GAAO;AATzB,IAAA5D,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AAEI,SAAK,OAAOD,GACZ,KAAK,MAAM6D,EAAM,KACjB,KAAK,OAAOA,EAAM,MAClB,KAAK,QAAQA,EAAM,OACnB,KAAK,SAASA,EAAM,QACf,KAAA,WAAW,KAAK,eAChB,KAAA,UAAU,KAAK;IAAY;AAC3B,SAAA,WAAW,KAAK;IAAY;AAC5B,SAAA,UAAU,KAAK,cACpB,KAAK,aAAa;AAAA,MACd,KAAK;AAAA,MACL,MAAM;AAAA,MACN,OAAO,KAAK,KAAK,UAAU;AAAA,MAC3B,QAAQ,KAAK,KAAK,UAAU;AAAA,IAAA,CAC/B;AAAA,EACL;AAAA,EACA,aAAaA,GAAO;AAChB,SAAK,MAAMA,EAAM,KACjB,KAAK,OAAOA,EAAM,MAClB,KAAK,QAAQA,EAAM,OACnB,KAAK,SAASA,EAAM,QACf,KAAA,WAAW,KAAK,eAChB,KAAA,UAAU,KAAK,cACf,KAAA,WAAW,KAAK,eAChB,KAAA,UAAU,KAAK;EACxB;AAAA;AAAA,EAEA,cAAc;AAEH,WADQ,KAAK,KAAK,MAAM,eAAe,KAAK,GAAG;AAAA,EAE1D;AAAA,EACA,aAAa;AAEF,WADQ,KAAK,KAAK,MAAM,eAAe,KAAK,MAAM;AAAA,EAE7D;AAAA,EACA,cAAc;AAEH,WADQ,KAAK,KAAK,MAAM,kBAAkB,KAAK,IAAI;AAAA,EAE9D;AAAA,EACA,aAAa;AAEF,WADQ,KAAK,KAAK,MAAM,kBAAkB,KAAK,KAAK;AAAA,EAE/D;AACJ;ACtDO,MAAM+B,EAAO;AAAA,EAGhB,YAAY/B,GAAO;AAFnB,IAAA5D,EAAA;AACA,IAAAA,EAAA;AAEI,SAAK,QAAQ4D,EAAM,OACnB,KAAK,QAAQA,EAAM;AAAA,EACvB;AACJ;ACPO,MAAMgC,EAAI;AAAA,EAGb,YAAYhC,GAAO;AAFnB,IAAA5D,EAAA;AACA,IAAAA,EAAA;AAEI,SAAK,SAAS4D,EAAM,QACpB,KAAK,QAAQA,EAAM;AAAA,EACvB;AACJ;ACHO,SAASiC,EAAiBC,GAAMC,GAASC,IAAoB,IAAO;AACvE,QAAMnF,IAAO,CAAA;AACb,WAASS,IAAM,GAAGA,KAAOwE,GAAMxE,KAAO;AAClC,UAAM2E,IAAW,CAAA;AACjB,aAAS3B,IAAM,GAAGA,KAAOyB,GAASzB,KAAO;AACrC,YAAM4B,IAAQF,IAAoB,GAAG1E,CAAG,IAAIgD,CAAG,KAAK,IAC9C9D,IAAO,IAAIuD,EAAK;AAAA,QAClB,cAAcmC;AAAA,QACd,aAAaA;AAAA,QACb,OAAAA;AAAA,QACA,UAAU;AAAA,UACN,QAAQ5B;AAAA,UACR,KAAAhD;AAAA,QACJ;AAAA,QACA,OAAO;AAAA,MAAA,CACV;AACD,MAAA2E,EAAS,KAAKzF,CAAI;AAAA,IACtB;AACA,IAAAK,EAAK,KAAKoF,CAAQ;AAAA,EACtB;AACO,SAAApF;AACX;AACgB,SAAAsF,EAAmBL,GAAMC,GAAS;AAC9C,QAAMK,IAAU,CAAA;AAChB,WAAS,IAAI,GAAG,KAAKN,GAAM,KAAK;AACtB,UAAAO,IAAU,IAAIT,EAAI;AAAA,MACpB,QAAQ;AAAA,MACR,OAAO,OAAO,CAAC;AAAA,IAAA,CAClB;AACD,IAAAQ,EAAQ,KAAKC,CAAO;AAAA,EACxB;AACA,QAAMC,IAAU,CAAA;AAChB,WAAS,IAAI,GAAG,KAAKP,GAAS,KAAK;AACzB,UAAAQ,IAAU,IAAIZ,EAAO;AAAA,MACvB,OAAO,OAAO,CAAC;AAAA,MACf,OAAO;AAAA,IAAA,CACV;AACD,IAAAW,EAAQ,KAAKC,CAAO;AAAA,EACxB;AASO,SARQ,IAAIf,EAAO;AAAA,IACtB,SAASc;AAAA,IACT,MAAMF;AAAA,IACN,MAAM;AAAA,MACF,QAAQ;AAAA,MACR,OAAO;AAAA,IACX;AAAA,EAAA,CACH;AAEL;AACgB,SAAAI,EAA6BV,GAAMC,GAAS;AAClD,QAAAlF,IAAOgF,EAAiBC,GAAMC,CAAO,GACrC9E,IAASkF,EAAmBL,GAAMC,CAAO;AACxC,SAAA,EAAE,MAAAlF,GAAM,QAAAI;AACnB;ACzDO,MAAMwF,EAAa;AAAA,EAGtB,YAAY7C,GAAO;AAFnB,IAAA5D,EAAA;AACA,IAAAA,EAAA;AAEI,SAAK,OAAO4D,EAAM,MAClB,KAAK,SAASA,EAAM;AAAA,EACxB;AACJ;AACO,MAAM8C,EAAU;AAAA,EAGnB,YAAY9C,GAAO;AAFnB,IAAA5D,EAAA;AACA,IAAAA,EAAA;AAEI,SAAK,OAAO4D,EAAM,MAClB,KAAK,SAASA,EAAM;AAAA,EACxB;AACJ;AACO,MAAM+C,EAAM;AAAA,EAGf,YAAYC,GAAS;AAFrB,IAAA5G,EAAA;AACA,IAAAA,EAAA;AAEI,SAAK,UAAU4G,EAAQ,SACvB,KAAK,OAAOA,EAAQ;AAAA,EACxB;AAAA,EACA,eAAerF,GAAG;AACd,QAAIsF,IAAS;AACb,aAASxF,IAAI,GAAGA,IAAI,KAAK,KAAK,WACjBwF,IAAAxF,GACL,EAAAE,KAAK,KAAK,KAAKF,CAAC,EAAE,QAFYA;AAElC;AAIG,WAAAwF;AAAA,EACX;AAAA,EACA,kBAAkBzF,GAAG;AACjB,QAAI0F,IAAS;AACb,aAASzF,IAAI,GAAGA,IAAI,KAAK,QAAQ,WACpByF,IAAAzF,GACL,EAAAD,KAAK,KAAK,QAAQC,CAAC,EAAE,QAFYA;AAErC;AAIG,WAAAyF;AAAA,EACX;AACJ;AC1CO,MAAMC,EAAW;AAAA,EAOpB,YAAYhH,GAAM;AANlB,IAAAC,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA,gBAAS;AACT,IAAAA,EAAA;AAEA;AAAA,IAAAA,EAAA;AAEI,SAAK,OAAOD,GACP,KAAA,UAAU,KAAK;AACpB,UAAMoE,IAAM,KAAK,QAAQ,WAAW,IAAI;AACxC,QAAI,CAACA;AACK,YAAA,IAAI,MAAM,8BAA8B;AAClD,SAAK,MAAMA,GACN,KAAA,QAAQ,KAAK,KAAK,UAAU;AAAA,EACrC;AAAA,EACA,gBAAgB;AACN,UAAAxC,IAAU,SAAS,cAAc,QAAQ;AAC/C,WAAAA,EAAQ,MAAM,WAAW,YACjBA,EAAA,MAAM,SAAS,KAAK,SAAS,MACrCA,EAAQ,MAAM,QAAQ,KAAK,KAAK,UAAU,QAAQ,MAClDA,EAAQ,MAAM,UAAU,SACxBA,EAAQ,MAAM,aAAa,mBAEnBA,EAAA,QAAQ,KAAK,KAAK,UAAU,OACpCA,EAAQ,SAAS,KAAK,QACfA;AAAA,EACX;AAAA,EACA,mBAAmBqF,GAAKC,GAAM;AACrB,SAAA,QAAQ,MAAM,MAAMD,IAAM,MAC1B,KAAA,QAAQ,MAAM,OAAOC,IAAO;AAAA,EACrC;AAAA,EACA,iBAAiB9F,GAAQ;AACrB,UAAM,EAAE,cAAAoD,GAAc,eAAAC,EAAc,IAAI,KAAK,KAAK;AAC9C,WAAAD,KAAgBA,EAAa,WAAWpD,IACjC,KACPqD,IACgBrD,KACZ,KAAK,IAAIqD,EAAc,KAAK,QAAQA,EAAc,GAAG,MAAM,KAC3DrD,KAAU,KAAK,IAAIqD,EAAc,KAAK,QAAQA,EAAc,GAAG,MAAM,IAGtE;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,WAAWrD,GAAQ+C,GAAW;AACpB,UAAA,EAAE,OAAAlC,GAAO,GAAAZ,EAAM,IAAA8C;AACrB,SAAK,IAAI,YAAY,SACrB,KAAK,IAAI,YAAY,UACrB,KAAK,IAAI,eAAe,UACxB,KAAK,IAAI,OAAO,cAChB,KAAK,IAAI,SAAS,KAAK,KAAK,OAAO,QAAQ/C,CAAM,EAAE,OAAOC,IAAIY,IAAQ,IAAI,KAAK,KAAK,SAAS,MAAM,IAAI,KAAK,SAAS,CAAC;AAAA,EAC1H;AAAA,EACA,WAAWb,GAAQ+C,GAAW;AACpB,UAAA,EAAE,OAAAlC,GAAO,GAAAZ,EAAM,IAAA8C,GACfgD,IAAgB,KAAK,iBAAiB/F,CAAM;AAC7C,SAAA,IAAI,YAAY+F,IAAgB,YAAY,SACjD,KAAK,IAAI,cAAc,SACvB,KAAK,IAAI,YAAY;AACrB,UAAMC,IAAW/F,IAAI,KAAK,KAAK,SAAS;AACxC,SAAK,IAAI,SAAS+F,IAAW,GAAG,GAAGnF,GAAO,KAAK,MAAM,GACrD,KAAK,IAAI,WAAWmF,IAAW,GAAG,GAAGnF,GAAO,KAAK,MAAM;AAAA,EAC3D;AAAA,EACA,mBAAmBb,GAAQ;AACvB,UAAM+C,IAAY,IAAIlD,EAAU,KAAK,KAAK,QAAQ;AAAA,MAC9C,KAAK;AAAA,MACL,QAAAG;AAAA,IAAA,CACH;AACI,SAAA,WAAWA,GAAQ+C,CAAS,GAC5B,KAAA,WAAW/C,GAAQ+C,CAAS;AAAA,EACrC;AAAA,EACA,YAAY;AACR,UAAMc,IAAa,KAAK,KAAK,SAAS,UAAU,GAC1CE,IAAc,KAAK,KAAK,SAAS;AACvC,SAAK,IAAI,aACT,KAAK,IAAI,cAAc,SACvB,KAAK,IAAI,YAAY,GAChB,KAAA,IAAI,OAAO,GAAG,CAAC,GACpB,KAAK,IAAI,OAAO,GAAG,KAAK,MAAM,GAC9B,KAAK,IAAI,aACT,KAAK,IAAI;AACT,aAASZ,IAAMY,GAAaZ,KAAOU,KAC1B,KAAK,KAAK,OAAO,QAAQV,CAAG,GADUA;AAG3C,WAAK,mBAAmBA,CAAG;AAAA,EAEnC;AACJ;AC9FO,MAAM8C,EAAQ;AAAA,EAOjB,YAAYrH,GAAM;AANlB,IAAAC,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA,eAAQ;AACR,IAAAA,EAAA;AACA,IAAAA,EAAA,uBAAgB;AAEZ,SAAK,OAAOD,GACP,KAAA,UAAU,KAAK;AACpB,UAAMoE,IAAM,KAAK,QAAQ,WAAW,IAAI;AACxC,QAAI,CAACA;AACK,YAAA,IAAI,MAAM,8BAA8B;AAClD,SAAK,MAAMA,GACN,KAAA,SAAS,KAAK,KAAK,UAAU;AAAA,EACtC;AAAA,EACA,gBAAgB;AACN,UAAAxC,IAAU,SAAS,cAAc,QAAQ;AAC/C,WAAAA,EAAQ,MAAM,WAAW,YACzBA,EAAQ,MAAM,SAAS,KAAK,KAAK,UAAU,SAAS,MAC5CA,EAAA,MAAM,QAAQ,KAAK,QAAQ,MACnCA,EAAQ,MAAM,UAAU,SACxBA,EAAQ,MAAM,YAAY,mBAE1BA,EAAQ,QAAQ,KAAK,OACbA,EAAA,SAAS,KAAK,KAAK,UAAU,QAC9BA;AAAA,EACX;AAAA,EACA,mBAAmBqF,GAAKC,GAAM;AACrB,SAAA,QAAQ,MAAM,MAAMD,IAAM,MAC1B,KAAA,QAAQ,MAAM,OAAOC,IAAO;AAAA,EACrC;AAAA,EACA,cAAc3F,GAAK;AACf,UAAM,EAAE,cAAAiD,GAAc,eAAAC,EAAc,IAAI,KAAK,KAAK;AAC9C,WAAAD,KAAgBA,EAAa,QAAQjD,IAC9B,KACPkD,IACgBlD,KAAO,KAAK,IAAIkD,EAAc,KAAK,KAAKA,EAAc,GAAG,GAAG,KACxElD,KAAO,KAAK,IAAIkD,EAAc,KAAK,KAAKA,EAAc,GAAG,GAAG,IAG7D;AAAA,EACX;AAAA,EACA,WAAWlD,GAAK4C,GAAW;AACjB,UAAA,EAAE,GAAA3C,GAAG,QAAAQ,EAAW,IAAAmC;AACtB,SAAK,IAAI,YAAY,SACrB,KAAK,IAAI,YAAY,UACrB,KAAK,IAAI,eAAe,UACxB,KAAK,IAAI,OAAO,cAChB,KAAK,IAAI,SAAS,KAAK,KAAK,OAAO,KAAK5C,CAAG,EAAE,OAAO,KAAK,QAAQ,GAAGC,IAAI,KAAK,KAAK,SAAS,MAAMQ,IAAS,CAAC;AAAA,EAC/G;AAAA,EACA,WAAWZ,GAAQ+C,GAAW;AACpB,UAAA,EAAE,GAAA3C,GAAG,QAAAQ,EAAW,IAAAmC,GAChBmD,IAAe,KAAK,cAAclG,CAAM;AACzC,SAAA,IAAI,YAAYkG,IAAe,YAAY,SAChD,KAAK,IAAI,cAAc,SAClB,KAAA,IAAI,YAAY,KAAK;AAC1B,UAAMC,IAAW/F,IAAI,KAAK,KAAK,SAAS;AACxC,SAAK,IAAI,SAAS,GAAG+F,IAAW,GAAG,KAAK,OAAOvF,CAAM,GACrD,KAAK,IAAI,WAAW,GAAGuF,IAAW,GAAG,KAAK,OAAOvF,CAAM;AAAA,EAC3D;AAAA,EACA,gBAAgBT,GAAK;AACjB,UAAM4C,IAAY,IAAIlD,EAAU,KAAK,KAAK,QAAQ;AAAA,MAC9C,QAAQ;AAAA,MACR,KAAAM;AAAA,IAAA,CACH;AACI,SAAA,WAAWA,GAAK4C,CAAS,GACzB,KAAA,WAAW5C,GAAK4C,CAAS;AAAA,EAClC;AAAA,EACA,YAAY;AACR,UAAMe,IAAa,KAAK,KAAK,SAAS,UAAU,GAC1CF,IAAc,KAAK,KAAK,SAAS;AACvC,SAAK,IAAI,aACJ,KAAA,IAAI,OAAO,GAAG,CAAC,GACpB,KAAK,IAAI,cAAc,SACvB,KAAK,IAAI,YAAY,IAChB,KAAA,IAAI,OAAO,IAAI,CAAC,GACrB,KAAK,IAAI,aACT,KAAK,IAAI;AACT,aAASzD,IAAMyD,GAAazD,KAAO2D,KAC1B,KAAK,KAAK,OAAO,KAAK3D,CAAG,GADaA;AAG3C,WAAK,gBAAgBA,CAAG;AAAA,EAEhC;AACJ;ACpFO,MAAMiG,EAAU;AAAA,EAGnB,YAAYxH,GAAM;AAFlB,IAAAC,EAAA,eAAQ;AACR,IAAAA,EAAA;AAEI,SAAK,OAAOD;AAAA,EAChB;AAAA,EACA,KAAKc,GAAMD,GAAO;AACd,UAAM4G,IAAY3G,EACb,IAAI,CAACS,MACCA,EACF,IAAI,CAACmG,MACCA,EAAK,YACf,EACI,KAAK,GAAI,CACjB,EACI,KAAK;AAAA,CAAI;AACd,SAAK,QAAQ5G,GACH,UAAA,UAAU,UAAU2G,CAAS,GAClC,KAAA,KAAK,OAAO,SAAS;AAAA,MACtB,MAAM3H,EAAW;AAAA,MACjB,MAAAgB;AAAA,MACA,cAAc2G;AAAA,MACd,OAAA5G;AAAA,IAAA,CACH;AAAA,EACL;AAAA,EACA,MAAMb,GAAM,EAAE,QAAAoB,GAAQ,KAAAG,EAAA,GAAOrB,GAAO;AAC5B,QAAA,CAAC,KAAK,OAAO;AACb,UAAI,CAACA,EAAM;AACP;AACJ,YAAMY,IAAOZ,EAAM,cAAc,QAAQ,MAAM;AAC3C,UAAA;AAEA,cAAMyH,IADM7G,EAAK,MAAM;AAAA,CAAI,EAAE,IAAI,CAAC4G,MAASA,EAAK,MAAM,GAAI,CAAC,EAClC,IAAI,CAACxB,MACnBA,EAAS,IAAI,CAACwB,MAAS;AAC1B,gBAAME,IAAY;AAAA,YACd,cAAcF;AAAA,YACd,UAAU;AAAA,cACN,QAAAtG;AAAA,cACA,KAAAG;AAAA,YACJ;AAAA,YACA,aAAamG;AAAA,YACb,OAAO,IAAI9D,EAAW;AAAA,YACtB,OAAO8D;AAAA,UAAA;AAEJ,iBAAA,IAAI1D,EAAK4D,CAAS;AAAA,QAAA,CAC5B,CACJ,GACKC,IAAaF,EAAa,QAC1BG,IAAaH,EAAa,CAAC,IAAIA,EAAa,CAAC,EAAE,SAAS;AAC9D,iBAASrG,IAAI,GAAGA,IAAIuG,GAAYvG;AAC5B,mBAASyG,IAAI,GAAGA,IAAID,GAAYC,KAAK;AACjC,kBAAMC,IAAYL,EAAarG,CAAC,EAAEyG,CAAC,GAC7BjG,IAAW;AAAA,cACb,QAAQV,IAAS2G;AAAA,cACjB,KAAKxG,IAAMD;AAAA,YAAA,GAET4C,IAAS;AAAA,cACX,cAAc8D,EAAU;AAAA,cACxB,OAAOA,EAAU;AAAA,cACjB,OAAOA,EAAU;AAAA,YAAA;AAEhB,YAAAhI,EAAA,iBAAiB8B,GAAUoC,GAAQ,EAAK;AAAA,UACjD;AAAA,eAGD+D,GAAK;AACA,gBAAA,MAAM,2BAA2BA,CAAG;AAAA,MAChD;AACA,MAAAjI,EAAK,YAAY;AACjB;AAAA,IACJ;AACM,UAAA6H,IAAa,KAAK,MAAM,QACxBC,IAAa,KAAK,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,SAAS;AAC1D,aAASxG,IAAI,GAAGA,IAAIuG,GAAYvG;AAC5B,eAASyG,IAAI,GAAGA,IAAID,GAAYC,KAAK;AACjC,cAAMC,IAAY,KAAK,MAAM1G,CAAC,EAAEyG,CAAC,GAC3BjG,IAAW;AAAA,UACb,QAAQV,IAAS2G;AAAA,UACjB,KAAKxG,IAAMD;AAAA,QAAA,GAET4C,IAAS;AAAA,UACX,cAAc8D,EAAU;AAAA,UACxB,OAAOA,EAAU;AAAA,UACjB,OAAOA,EAAU;AAAA,QAAA;AAEhB,QAAAhI,EAAA,iBAAiB8B,GAAUoC,GAAQ,EAAK;AAAA,MACjD;AAAA,EAER;AACJ;ACxEO,MAAMrC,IAAa;AAC1B,MAAqBqG,EAAY;AAAA,EAgB7B,YAAYvG,GAAQkC,GAAO;AAf3B,IAAA5D,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AAEU,UAAAa,IAAOgF,EAAiB,IAAI,EAAE,GAC9B5E,IAAS,KAAK,mBAAmBJ,IAAM+C,KAAA,gBAAAA,EAAO,SAAQ,EAAE,QAAQ,KAAK,OAAO,IAAK,CAAA;AACvF,IAAIA,KAAA,QAAAA,EAAO,SACP3C,EAAO,OAAO2C,EAAM,OAEnB,KAAA,SAAS,IAAI4B,EAAOvE,CAAM,GAC1B,KAAA,OAAO,eAAc2C,KAAA,gBAAAA,EAAO,gBAAe,MAC3C,KAAA,OAAO,oBAAmBA,KAAA,gBAAAA,EAAO,sBAAqB,MACtD,KAAA,OAAO,gBAAeA,KAAA,gBAAAA,EAAO,iBAAgB,MAC7C,KAAA,OAAO,UAASA,KAAA,gBAAAA,EAAO,WAAU,MACjC,KAAA,UAAU,IAAIwD,EAAQ,IAAI,GAC1B,KAAA,aAAa,IAAIL,EAAW,IAAI,GAChC,KAAA,QAAQ,IAAI3C,EAAM,IAAI,GACtB,KAAA,QAAQ,IAAIe,EAAM,IAAI,GACtB,KAAA,WAAW,IAAI/C,EAAS,IAAI,GAC5B,KAAA,UAAU,IAAIkD,EAAQ,IAAI,GAC1B,KAAA,SAAS,IAAI9D,EAAO,IAAI,GACxB,KAAA,QAAQ,KAAK,mBAClB,KAAK,WAAW,IAAIkE,EAAS,MAAM,KAAK,SAAS,0BAA0B,GACtE,KAAA,YAAY,IAAIhF,KAChB,KAAA,SAAS,IAAIZ,EAAO,IAAI,GACxB,KAAA,YAAY,IAAIyH,EAAU,IAAI,GACnC,KAAK,OAAO1G,GACP,KAAA,SAAS,IAAI4E,KAClB,KAAK,eAAe,GACpB,KAAK,qBAAqB,GAC1B,KAAK,oBAAoB/D,CAAM,GAC/B,KAAK,YAAY,GACjB,KAAK,iBAAiB,GACtB,KAAK,cAAc;AAAA,EACvB;AAAA,EACA,qBAAqB;AACjB,UAAMsF,IAAM,KAAK,WAAW,SAAS,KAAK,QAAQ,QAC5CC,IAAO;AACR,SAAA,QAAQ,mBAAmBD,GAAKC,CAAI;AAAA,EAC7C;AAAA,EACA,wBAAwB;AACd,UAAAD,IAAM,KAAK,QAAQ,QACnBC,IAAO,KAAK,QAAQ;AACrB,SAAA,WAAW,mBAAmBD,GAAKC,CAAI;AAAA,EAChD;AAAA,EACA,uBAAuB;AACnB,SAAK,mBAAmB,GACxB,KAAK,sBAAsB;AAAA,EAC/B;AAAA,EACA,kBAAkB;AACd,UAAMiB,IAAa,CAAA;AACnB,QAAIC,IAAe;AACV,aAAA9G,IAAI,GAAGA,KAAK,KAAK,OAAO,QAAQ,SAAS,GAAGA,KAAK;AACtD,YAAMiD,IAAM,KAAK,OAAO,QAAQjD,CAAC;AACjC,MAAA8G,KAAgB7D,EAAI;AACd,YAAA8D,IAAW,IAAI3B,EAAa;AAAA,QAC9B,MAAM0B;AAAA,QACN,QAAQ9G;AAAA,MAAA,CACX;AACD,MAAA6G,EAAW,KAAKE,CAAQ;AAAA,IAC5B;AACA,UAAMC,IAAa,CAAA;AACnB,QAAIC,IAAgB;AACX,aAAAjH,IAAI,GAAGA,KAAK,KAAK,OAAO,KAAK,SAAS,GAAGA,KAAK;AACnD,YAAMC,IAAM,KAAK,OAAO,KAAKD,CAAC;AAC9B,MAAAiH,KAAiBhH,EAAI;AACf,YAAAiH,IAAW,IAAI7B,EAAU;AAAA,QAC3B,MAAM4B;AAAA,QACN,QAAQjH;AAAA,MAAA,CACX;AACD,MAAAgH,EAAW,KAAKE,CAAQ;AAAA,IAC5B;AAKO,WAJO,IAAI5B,EAAM;AAAA,MACpB,SAASuB;AAAA,MACT,MAAMG;AAAA,IAAA,CACT;AAAA,EAEL;AAAA,EACA,iBAAiB;AACP,UAAAG,IAAU,SAAS,cAAc,KAAK;AACpC,IAAAA,EAAA,MAAM,MAAM,KAAK,mBAAmB,MACpCA,EAAA,MAAM,OAAO,KAAK,eAAe,MACjCA,EAAA,YAAY,KAAK,MAAM,OAAO,GAC9BA,EAAA,UAAU,IAAI5G,IAAa,SAAS,GAC5C,KAAK,MAAM,QAAQ,YAAY,KAAK,QAAQ,OAAO,GACnD,KAAK,MAAM,QAAQ,YAAY,KAAK,QAAQ,OAAO,GACnD,KAAK,MAAM,QAAQ,YAAY,KAAK,WAAW,OAAO,GACjD,KAAA,MAAM,QAAQ,YAAY4G,CAAO,GACtC,KAAK,MAAM,QAAQ,YAAY,KAAK,SAAS,OAAO,GACpD,KAAK,MAAM,QAAQ,OAAO,KAAK,OAAO,OAAO;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU;AACD,SAAA,MAAM,QAAQ;EACvB;AAAA,EACA,oBAAoB9G,GAAQ;AACpB,QAAA,OAAOA,KAAW,UAAU;AACtB,YAAAC,IAAU,SAAS,cAAcD,CAAM;AAC7C,UAAI,CAACC;AACK,cAAA,IAAI,MAAM,yBAAyBD,CAAM;AAAA,sBAA+C;AACzF,MAAAC,KAAA,QAAAA,EAAA,YAAY,KAAK,MAAM;AAAA,IACpC;AACA,IAAID,aAAkB,eACXA,EAAA,OAAO,KAAK,MAAM,OAAO;AAAA,EAExC;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,MAAM;AACN,WAAO,KAAK,MAAM;AAAA,EACtB;AAAA,EACA,IAAI,YAAY;AACZ,WAAO,KAAK,OAAO;AAAA,EACvB;AAAA,EACA,IAAI,mBAAmB;AACnB,WAAO,KAAK,WAAW;AAAA,EAC3B;AAAA,EACA,IAAI,eAAe;AACf,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA,EACA,IAAI,gBAAgB;AAChB,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA;AAAA,EAEA,aAAa;AACJ,SAAA,SAAS,QAAQ;EAC1B;AAAA,EACA,gBAAgBN,GAAGG,GAAG;AAClB,WAAO,KAAK,MAAM,gBAAgBH,GAAGG,CAAC;AAAA,EAC1C;AAAA,EACA,QAAQM,GAAU;AACR,UAAA,EAAE,QAAAV,GAAQ,KAAAG,EAAQ,IAAAO;AACxB,WAAO,KAAK,KAAKP,CAAG,EAAEH,CAAM;AAAA,EAChC;AAAA,EACA,iBAAiBU,GAAUoC,GAAQtD,IAAiB,IAAM;AAChD,UAAA,EAAE,QAAAQ,GAAQ,KAAAG,EAAQ,IAAAO;AACxB,SAAK,KAAKP,CAAG,EAAEH,CAAM,EAAE,aAAa8C,CAAM,GAC1C,KAAK,OAAO,SAAS;AAAA,MACjB,MAAMpE,EAAW;AAAA,MACjB,MAAM,KAAK,KAAKyB,CAAG,EAAEH,CAAM;AAAA,MAC3B,gBAAAR;AAAA,IAAA,CACH,GACI,KAAA,WAAWW,GAAKH,CAAM;AAAA,EAC/B;AAAA,EACA,iBAAiBU,GAAUmC,GAAQ;AACzB,UAAA,EAAE,QAAA7C,GAAQ,KAAAG,EAAQ,IAAAO;AACxB,SAAK,KAAKP,CAAG,EAAEH,CAAM,EAAE,aAAa6C,CAAM,GACrC,KAAA,WAAW1C,GAAKH,CAAM;AAAA,EAC/B;AAAA,EACA,mBAAmBP,GAAO6H,GAAU;AAC1B,UAAAC,IAAU,KAAK,IAAI9H,EAAM,KAAK,KAAKA,EAAM,GAAG,GAAG,GAC/C+H,IAAQ,KAAK,IAAI/H,EAAM,KAAK,KAAKA,EAAM,GAAG,GAAG,GAC7CgI,IAAU,KAAK,IAAIhI,EAAM,KAAK,QAAQA,EAAM,GAAG,MAAM,GACrDiI,IAAQ,KAAK,IAAIjI,EAAM,KAAK,QAAQA,EAAM,GAAG,MAAM;AACzD,aAASU,IAAMoH,GAASpH,KAAOqH,GAAOrH;AAClC,eAASgD,IAAMsE,GAAStE,KAAOuE,GAAOvE,KAAO;AACzC,cAAM9D,IAAO,KAAK,KAAKc,CAAG,EAAEgD,CAAG;AAC/B,QAAAmE,EAASjI,CAAI;AAAA,MACjB;AAAA,EAER;AAAA,EACA,4BAA4B;AACpB,QAAA,KAAK,UAAU,kBAAkB;AACjC,WAAK,mBAAmB,KAAK,UAAU,eAAe,CAACA,MAAS;AACvD,aAAA,iBAAiBA,EAAK,UAAU;AAAA,UACjC,cAAc;AAAA,UACd,aAAa;AAAA,UACb,OAAO;AAAA,QAAA,CACV;AAAA,MAAA,CACJ;AAAA,SAEA;AACG,UAAA,CAAC,KAAK,UAAU;AAChB;AACC,WAAA,iBAAiB,KAAK,UAAU,cAAc;AAAA,QAC/C,cAAc;AAAA,QACd,aAAa;AAAA,QACb,OAAO;AAAA,MAAA,CACV;AAAA,IACL;AAAA,EACJ;AAAA,EACA,WAAWqB,GAAUC,GAAe;AAC3B,SAAA,OAAO,KAAKD,GAAUC,CAAa;AAAA,EAC5C;AAAA,EACA,cAAc;AACV,SAAK,MAAM;EACf;AAAA,EACA,kBAAkB;AACd,SAAK,MAAM;EACf;AAAA,EACA,mBAAmB;AACf,SAAK,WAAW;EACpB;AAAA,EACA,gBAAgB;AACZ,SAAK,QAAQ;EACjB;AAAA,EACA,WAAWR,GAAKgD,GAAK;AACjB,SAAK,KAAKhD,CAAG,EAAEgD,CAAG,EAAE,OAAO,IAAI;AAAA,EACnC;AAAA,EACA,SAASzD,GAAM;AACX,UAAM+G,IAAa/G,EAAK,QAClBgH,IAAahH,EAAK,CAAC,IAAIA,EAAK,CAAC,EAAE,SAAS;AAC9C,SAAK,OAAO;AACZ,UAAMiI,IAAgB,CAAA;AAEtB,aAASxH,IAAM,GAAGA,IAAMsG,GAAYtG,KAAO;AACvC,YAAM2E,IAAW,CAAA;AACjB,eAAS3B,IAAM,GAAGA,IAAMuD,GAAYvD,KAAO;AACvC,cAAM9D,IAAOK,EAAKS,CAAG,EAAEgD,CAAG;AACjB,QAAA2B,EAAA,KAAK,IAAIlC,EAAK;AAAA,UACnB,cAAcvD,EAAK;AAAA,UACnB,UAAUA,EAAK;AAAA,UACf,aAAaA,EAAK;AAAA,UAClB,OAAOA,EAAK;AAAA,UACZ,OAAOA,EAAK;AAAA,QACf,CAAA,CAAC;AAAA,MACN;AACA,MAAAsI,EAAc,KAAK7C,CAAQ;AAAA,IAC/B;AACA,UAAMhF,IAAS,KAAK,mBAAmB6H,GAAe,KAAK,OAAO,IAAI;AAC/D,WAAA7H,EAAA,eAAe,KAAK,OAAO,cAC3BA,EAAA,cAAc,KAAK,OAAO,aAC1BA,EAAA,SAAS,KAAK,OAAO,QACrBA,EAAA,mBAAmB,KAAK,OAAO,kBACtC,KAAK,OAAO6H,GACZ,KAAK,UAAU,eAAe,MAC9B,KAAK,UAAU,gBAAgB,MAC/B,KAAK,SAAS7H,GACT,KAAA,QAAQ,KAAK,mBAClB,KAAK,SAAS,sBACd,KAAK,WAAW,IAAIyE,EAAS,MAAM,KAAK,SAAS,0BAA0B,GAC3E,KAAK,YAAY,GACV;AAAA,EACX;AAAA,EACA,mBAAmB7E,GAAMkI,GAAM;AACrB,UAAA9D,IAAapE,EAAK,SAAS,GAC3BmE,IAAanE,EAAK,CAAC,IAAIA,EAAK,CAAC,EAAE,SAAS,GACxCiF,IAAO,CAAA;AACb,aAASxE,IAAM,GAAGA,IAAM2D,GAAY3D;AAC3B,MAAAwE,EAAA,KAAK,IAAIF,EAAI;AAAA,QACd,QAAQ;AAAA,QACR,OAAO,OAAOtE,CAAG;AAAA,MACpB,CAAA,CAAC;AAEN,UAAMyE,IAAU,CAAA;AAChB,aAASzB,IAAM,GAAGA,IAAMU,GAAYV;AACxB,MAAAyB,EAAA,KAAK,IAAIJ,EAAO;AAAA,QACpB,OAAO;AAAA,QACP,OAAO,OAAOrB,CAAG;AAAA,MACpB,CAAA,CAAC;AAQC,WANQ,IAAIkB,EAAO;AAAA,MACtB,MAAAuD;AAAA,MACA,MAAAjD;AAAA,MACA,SAAAC;AAAA,MACA,aAAa;AAAA,IAAA,CAChB;AAAA,EAEL;AAAA,EACA,gBAAgB;AACN,UAAA6B,IAAa,KAAK,KAAK,QACvBC,IAAa,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,SAAS,GAClDmB,IAAa,CAAA;AACnB,aAAS1H,IAAM,GAAGA,IAAMsG,GAAYtG,KAAO;AACvC,YAAM2E,IAAW,CAAA;AACjB,eAAS3B,IAAM,GAAGA,IAAMuD,GAAYvD;AACvB,QAAA2B,EAAA,KAAK,KAAK,KAAK3E,CAAG,EAAEgD,CAAG,EAAE,qBAAqB;AAE3D,MAAA0E,EAAW,KAAK/C,CAAQ;AAAA,IAC5B;AACO,WAAA+C;AAAA,EACX;AACJ;"} \ No newline at end of file diff --git a/package.json b/package.json index e6f034f..f0885ea 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "modern_spreadsheet", "private": false, - "version": "0.0.32", + "version": "0.0.33", "exports": { ".": { "import": "./dist/main.js", @@ -55,5 +55,8 @@ "tslib": "^2.6.0", "typescript": "^5.0.2", "vite": "^4.4.0" + }, + "dependencies": { + "fast-formula-parser": "^1.0.19" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 79e7d0e..7ee8b3f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,20 +1,25 @@ -lockfileVersion: "6.0" +lockfileVersion: '6.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false +dependencies: + fast-formula-parser: + specifier: ^1.0.19 + version: 1.0.19 + devDependencies: - "@rollup/plugin-typescript": + '@rollup/plugin-typescript': specifier: ^11.1.2 version: 11.1.2(tslib@2.6.0)(typescript@5.0.2) - "@types/node": + '@types/node': specifier: ^20.4.4 version: 20.4.4 - "@typescript-eslint/eslint-plugin": + '@typescript-eslint/eslint-plugin': specifier: ^6.2.0 version: 6.2.0(@typescript-eslint/parser@6.2.0)(eslint@8.45.0)(typescript@5.0.2) - "@typescript-eslint/parser": + '@typescript-eslint/parser': specifier: ^6.2.0 version: 6.2.0(eslint@8.45.0)(typescript@5.0.2) eslint: @@ -46,20 +51,15 @@ devDependencies: version: 4.4.0(@types/node@20.4.4)(sass@1.63.6) packages: + /@aashutoshrathi/word-wrap@1.2.6: - resolution: - { - integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} dev: true /@esbuild/android-arm64@0.18.14: - resolution: - { - integrity: sha512-rZ2v+Luba5/3D6l8kofWgTnqE+qsC/L5MleKIKFyllHTKHrNBMqeRCnZI1BtRx8B24xMYxeU32iIddRQqMsOsg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-rZ2v+Luba5/3D6l8kofWgTnqE+qsC/L5MleKIKFyllHTKHrNBMqeRCnZI1BtRx8B24xMYxeU32iIddRQqMsOsg==} + engines: {node: '>=12'} cpu: [arm64] os: [android] requiresBuild: true @@ -67,11 +67,8 @@ packages: optional: true /@esbuild/android-arm@0.18.14: - resolution: - { - integrity: sha512-blODaaL+lngG5bdK/t4qZcQvq2BBqrABmYwqPPcS5VRxrCSGHb9R/rA3fqxh7R18I7WU4KKv+NYkt22FDfalcg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-blODaaL+lngG5bdK/t4qZcQvq2BBqrABmYwqPPcS5VRxrCSGHb9R/rA3fqxh7R18I7WU4KKv+NYkt22FDfalcg==} + engines: {node: '>=12'} cpu: [arm] os: [android] requiresBuild: true @@ -79,11 +76,8 @@ packages: optional: true /@esbuild/android-x64@0.18.14: - resolution: - { - integrity: sha512-qSwh8y38QKl+1Iqg+YhvCVYlSk3dVLk9N88VO71U4FUjtiSFylMWK3Ugr8GC6eTkkP4Tc83dVppt2n8vIdlSGg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-qSwh8y38QKl+1Iqg+YhvCVYlSk3dVLk9N88VO71U4FUjtiSFylMWK3Ugr8GC6eTkkP4Tc83dVppt2n8vIdlSGg==} + engines: {node: '>=12'} cpu: [x64] os: [android] requiresBuild: true @@ -91,11 +85,8 @@ packages: optional: true /@esbuild/darwin-arm64@0.18.14: - resolution: - { - integrity: sha512-9Hl2D2PBeDYZiNbnRKRWuxwHa9v5ssWBBjisXFkVcSP5cZqzZRFBUWEQuqBHO4+PKx4q4wgHoWtfQ1S7rUqJ2Q==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-9Hl2D2PBeDYZiNbnRKRWuxwHa9v5ssWBBjisXFkVcSP5cZqzZRFBUWEQuqBHO4+PKx4q4wgHoWtfQ1S7rUqJ2Q==} + engines: {node: '>=12'} cpu: [arm64] os: [darwin] requiresBuild: true @@ -103,11 +94,8 @@ packages: optional: true /@esbuild/darwin-x64@0.18.14: - resolution: - { - integrity: sha512-ZnI3Dg4ElQ6tlv82qLc/UNHtFsgZSKZ7KjsUNAo1BF1SoYDjkGKHJyCrYyWjFecmXpvvG/KJ9A/oe0H12odPLQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-ZnI3Dg4ElQ6tlv82qLc/UNHtFsgZSKZ7KjsUNAo1BF1SoYDjkGKHJyCrYyWjFecmXpvvG/KJ9A/oe0H12odPLQ==} + engines: {node: '>=12'} cpu: [x64] os: [darwin] requiresBuild: true @@ -115,11 +103,8 @@ packages: optional: true /@esbuild/freebsd-arm64@0.18.14: - resolution: - { - integrity: sha512-h3OqR80Da4oQCIa37zl8tU5MwHQ7qgPV0oVScPfKJK21fSRZEhLE4IIVpmcOxfAVmqjU6NDxcxhYaM8aDIGRLw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-h3OqR80Da4oQCIa37zl8tU5MwHQ7qgPV0oVScPfKJK21fSRZEhLE4IIVpmcOxfAVmqjU6NDxcxhYaM8aDIGRLw==} + engines: {node: '>=12'} cpu: [arm64] os: [freebsd] requiresBuild: true @@ -127,11 +112,8 @@ packages: optional: true /@esbuild/freebsd-x64@0.18.14: - resolution: - { - integrity: sha512-ha4BX+S6CZG4BoH9tOZTrFIYC1DH13UTCRHzFc3GWX74nz3h/N6MPF3tuR3XlsNjMFUazGgm35MPW5tHkn2lzQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-ha4BX+S6CZG4BoH9tOZTrFIYC1DH13UTCRHzFc3GWX74nz3h/N6MPF3tuR3XlsNjMFUazGgm35MPW5tHkn2lzQ==} + engines: {node: '>=12'} cpu: [x64] os: [freebsd] requiresBuild: true @@ -139,11 +121,8 @@ packages: optional: true /@esbuild/linux-arm64@0.18.14: - resolution: - { - integrity: sha512-IXORRe22In7U65NZCzjwAUc03nn8SDIzWCnfzJ6t/8AvGx5zBkcLfknI+0P+hhuftufJBmIXxdSTbzWc8X/V4w==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-IXORRe22In7U65NZCzjwAUc03nn8SDIzWCnfzJ6t/8AvGx5zBkcLfknI+0P+hhuftufJBmIXxdSTbzWc8X/V4w==} + engines: {node: '>=12'} cpu: [arm64] os: [linux] requiresBuild: true @@ -151,11 +130,8 @@ packages: optional: true /@esbuild/linux-arm@0.18.14: - resolution: - { - integrity: sha512-5+7vehI1iqru5WRtJyU2XvTOvTGURw3OZxe3YTdE9muNNIdmKAVmSHpB3Vw2LazJk2ifEdIMt/wTWnVe5V98Kg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-5+7vehI1iqru5WRtJyU2XvTOvTGURw3OZxe3YTdE9muNNIdmKAVmSHpB3Vw2LazJk2ifEdIMt/wTWnVe5V98Kg==} + engines: {node: '>=12'} cpu: [arm] os: [linux] requiresBuild: true @@ -163,11 +139,8 @@ packages: optional: true /@esbuild/linux-ia32@0.18.14: - resolution: - { - integrity: sha512-BfHlMa0nibwpjG+VXbOoqJDmFde4UK2gnW351SQ2Zd4t1N3zNdmUEqRkw/srC1Sa1DRBE88Dbwg4JgWCbNz/FQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-BfHlMa0nibwpjG+VXbOoqJDmFde4UK2gnW351SQ2Zd4t1N3zNdmUEqRkw/srC1Sa1DRBE88Dbwg4JgWCbNz/FQ==} + engines: {node: '>=12'} cpu: [ia32] os: [linux] requiresBuild: true @@ -175,11 +148,8 @@ packages: optional: true /@esbuild/linux-loong64@0.18.14: - resolution: - { - integrity: sha512-j2/Ex++DRUWIAaUDprXd3JevzGtZ4/d7VKz+AYDoHZ3HjJzCyYBub9CU1wwIXN+viOP0b4VR3RhGClsvyt/xSw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-j2/Ex++DRUWIAaUDprXd3JevzGtZ4/d7VKz+AYDoHZ3HjJzCyYBub9CU1wwIXN+viOP0b4VR3RhGClsvyt/xSw==} + engines: {node: '>=12'} cpu: [loong64] os: [linux] requiresBuild: true @@ -187,11 +157,8 @@ packages: optional: true /@esbuild/linux-mips64el@0.18.14: - resolution: - { - integrity: sha512-qn2+nc+ZCrJmiicoAnJXJJkZWt8Nwswgu1crY7N+PBR8ChBHh89XRxj38UU6Dkthl2yCVO9jWuafZ24muzDC/A==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-qn2+nc+ZCrJmiicoAnJXJJkZWt8Nwswgu1crY7N+PBR8ChBHh89XRxj38UU6Dkthl2yCVO9jWuafZ24muzDC/A==} + engines: {node: '>=12'} cpu: [mips64el] os: [linux] requiresBuild: true @@ -199,11 +166,8 @@ packages: optional: true /@esbuild/linux-ppc64@0.18.14: - resolution: - { - integrity: sha512-aGzXzd+djqeEC5IRkDKt3kWzvXoXC6K6GyYKxd+wsFJ2VQYnOWE954qV2tvy5/aaNrmgPTb52cSCHFE+Z7Z0yg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-aGzXzd+djqeEC5IRkDKt3kWzvXoXC6K6GyYKxd+wsFJ2VQYnOWE954qV2tvy5/aaNrmgPTb52cSCHFE+Z7Z0yg==} + engines: {node: '>=12'} cpu: [ppc64] os: [linux] requiresBuild: true @@ -211,11 +175,8 @@ packages: optional: true /@esbuild/linux-riscv64@0.18.14: - resolution: - { - integrity: sha512-8C6vWbfr0ygbAiMFLS6OPz0BHvApkT2gCboOGV76YrYw+sD/MQJzyITNsjZWDXJwPu9tjrFQOVG7zijRzBCnLw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-8C6vWbfr0ygbAiMFLS6OPz0BHvApkT2gCboOGV76YrYw+sD/MQJzyITNsjZWDXJwPu9tjrFQOVG7zijRzBCnLw==} + engines: {node: '>=12'} cpu: [riscv64] os: [linux] requiresBuild: true @@ -223,11 +184,8 @@ packages: optional: true /@esbuild/linux-s390x@0.18.14: - resolution: - { - integrity: sha512-G/Lf9iu8sRMM60OVGOh94ZW2nIStksEcITkXdkD09/T6QFD/o+g0+9WVyR/jajIb3A0LvBJ670tBnGe1GgXMgw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-G/Lf9iu8sRMM60OVGOh94ZW2nIStksEcITkXdkD09/T6QFD/o+g0+9WVyR/jajIb3A0LvBJ670tBnGe1GgXMgw==} + engines: {node: '>=12'} cpu: [s390x] os: [linux] requiresBuild: true @@ -235,11 +193,8 @@ packages: optional: true /@esbuild/linux-x64@0.18.14: - resolution: - { - integrity: sha512-TBgStYBQaa3EGhgqIDM+ECnkreb0wkcKqL7H6m+XPcGUoU4dO7dqewfbm0mWEQYH3kzFHrzjOFNpSAVzDZRSJw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-TBgStYBQaa3EGhgqIDM+ECnkreb0wkcKqL7H6m+XPcGUoU4dO7dqewfbm0mWEQYH3kzFHrzjOFNpSAVzDZRSJw==} + engines: {node: '>=12'} cpu: [x64] os: [linux] requiresBuild: true @@ -247,11 +202,8 @@ packages: optional: true /@esbuild/netbsd-x64@0.18.14: - resolution: - { - integrity: sha512-stvCcjyCQR2lMTroqNhAbvROqRjxPEq0oQ380YdXxA81TaRJEucH/PzJ/qsEtsHgXlWFW6Ryr/X15vxQiyRXVg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-stvCcjyCQR2lMTroqNhAbvROqRjxPEq0oQ380YdXxA81TaRJEucH/PzJ/qsEtsHgXlWFW6Ryr/X15vxQiyRXVg==} + engines: {node: '>=12'} cpu: [x64] os: [netbsd] requiresBuild: true @@ -259,11 +211,8 @@ packages: optional: true /@esbuild/openbsd-x64@0.18.14: - resolution: - { - integrity: sha512-apAOJF14CIsN5ht1PA57PboEMsNV70j3FUdxLmA2liZ20gEQnfTG5QU0FhENo5nwbTqCB2O3WDsXAihfODjHYw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-apAOJF14CIsN5ht1PA57PboEMsNV70j3FUdxLmA2liZ20gEQnfTG5QU0FhENo5nwbTqCB2O3WDsXAihfODjHYw==} + engines: {node: '>=12'} cpu: [x64] os: [openbsd] requiresBuild: true @@ -271,11 +220,8 @@ packages: optional: true /@esbuild/sunos-x64@0.18.14: - resolution: - { - integrity: sha512-fYRaaS8mDgZcGybPn2MQbn1ZNZx+UXFSUoS5Hd2oEnlsyUcr/l3c6RnXf1bLDRKKdLRSabTmyCy7VLQ7VhGdOQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-fYRaaS8mDgZcGybPn2MQbn1ZNZx+UXFSUoS5Hd2oEnlsyUcr/l3c6RnXf1bLDRKKdLRSabTmyCy7VLQ7VhGdOQ==} + engines: {node: '>=12'} cpu: [x64] os: [sunos] requiresBuild: true @@ -283,11 +229,8 @@ packages: optional: true /@esbuild/win32-arm64@0.18.14: - resolution: - { - integrity: sha512-1c44RcxKEJPrVj62XdmYhxXaU/V7auELCmnD+Ri+UCt+AGxTvzxl9uauQhrFso8gj6ZV1DaORV0sT9XSHOAk8Q==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-1c44RcxKEJPrVj62XdmYhxXaU/V7auELCmnD+Ri+UCt+AGxTvzxl9uauQhrFso8gj6ZV1DaORV0sT9XSHOAk8Q==} + engines: {node: '>=12'} cpu: [arm64] os: [win32] requiresBuild: true @@ -295,11 +238,8 @@ packages: optional: true /@esbuild/win32-ia32@0.18.14: - resolution: - { - integrity: sha512-EXAFttrdAxZkFQmpvcAQ2bywlWUsONp/9c2lcfvPUhu8vXBBenCXpoq9YkUvVP639ld3YGiYx0YUQ6/VQz3Maw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-EXAFttrdAxZkFQmpvcAQ2bywlWUsONp/9c2lcfvPUhu8vXBBenCXpoq9YkUvVP639ld3YGiYx0YUQ6/VQz3Maw==} + engines: {node: '>=12'} cpu: [ia32] os: [win32] requiresBuild: true @@ -307,11 +247,8 @@ packages: optional: true /@esbuild/win32-x64@0.18.14: - resolution: - { - integrity: sha512-K0QjGbcskx+gY+qp3v4/940qg8JitpXbdxFhRDA1aYoNaPff88+aEwoq45aqJ+ogpxQxmU0ZTjgnrQD/w8iiUg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-K0QjGbcskx+gY+qp3v4/940qg8JitpXbdxFhRDA1aYoNaPff88+aEwoq45aqJ+ogpxQxmU0ZTjgnrQD/w8iiUg==} + engines: {node: '>=12'} cpu: [x64] os: [win32] requiresBuild: true @@ -319,11 +256,8 @@ packages: optional: true /@eslint-community/eslint-utils@4.4.0(eslint@8.45.0): - resolution: - { - integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: @@ -332,19 +266,13 @@ packages: dev: true /@eslint-community/regexpp@4.6.1: - resolution: - { - integrity: sha512-O7x6dMstWLn2ktjcoiNLDkAGG2EjveHL+Vvc+n0fXumkJYAcSqcVYKtwDU+hDZ0uDUsnUagSYaZrOLAYE8un1A==, - } - engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 } + resolution: {integrity: sha512-O7x6dMstWLn2ktjcoiNLDkAGG2EjveHL+Vvc+n0fXumkJYAcSqcVYKtwDU+hDZ0uDUsnUagSYaZrOLAYE8un1A==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true /@eslint/eslintrc@2.1.0: - resolution: - { - integrity: sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 debug: 4.3.4 @@ -360,21 +288,15 @@ packages: dev: true /@eslint/js@8.44.0: - resolution: - { - integrity: sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true /@humanwhocodes/config-array@0.11.10: - resolution: - { - integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==, - } - engines: { node: ">=10.10.0" } + resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} + engines: {node: '>=10.10.0'} dependencies: - "@humanwhocodes/object-schema": 1.2.1 + '@humanwhocodes/object-schema': 1.2.1 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: @@ -382,137 +304,101 @@ packages: dev: true /@humanwhocodes/module-importer@1.0.1: - resolution: - { - integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==, - } - engines: { node: ">=12.22" } + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} dev: true /@humanwhocodes/object-schema@1.2.1: - resolution: - { - integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==, - } + resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true /@nodelib/fs.scandir@2.1.5: - resolution: - { - integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} dependencies: - "@nodelib/fs.stat": 2.0.5 + '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 dev: true /@nodelib/fs.stat@2.0.5: - resolution: - { - integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} dev: true /@nodelib/fs.walk@1.2.8: - resolution: - { - integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} dependencies: - "@nodelib/fs.scandir": 2.1.5 + '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 dev: true /@rollup/plugin-typescript@11.1.2(tslib@2.6.0)(typescript@5.0.2): - resolution: - { - integrity: sha512-0ghSOCMcA7fl1JM+0gYRf+Q/HWyg+zg7/gDSc+fRLmlJWcW5K1I+CLRzaRhXf4Y3DRyPnnDo4M2ktw+a6JcDEg==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-0ghSOCMcA7fl1JM+0gYRf+Q/HWyg+zg7/gDSc+fRLmlJWcW5K1I+CLRzaRhXf4Y3DRyPnnDo4M2ktw+a6JcDEg==} + engines: {node: '>=14.0.0'} peerDependencies: rollup: ^2.14.0||^3.0.0 - tslib: "*" - typescript: ">=3.7.0" + tslib: '*' + typescript: '>=3.7.0' peerDependenciesMeta: rollup: optional: true tslib: optional: true dependencies: - "@rollup/pluginutils": 5.0.2 + '@rollup/pluginutils': 5.0.2 resolve: 1.22.2 tslib: 2.6.0 typescript: 5.0.2 dev: true /@rollup/pluginutils@5.0.2: - resolution: - { - integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==} + engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0 peerDependenciesMeta: rollup: optional: true dependencies: - "@types/estree": 1.0.1 + '@types/estree': 1.0.1 estree-walker: 2.0.2 picomatch: 2.3.1 dev: true /@types/estree@1.0.1: - resolution: - { - integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==, - } + resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} dev: true /@types/json-schema@7.0.12: - resolution: - { - integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==, - } + resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} dev: true /@types/node@20.4.4: - resolution: - { - integrity: sha512-CukZhumInROvLq3+b5gLev+vgpsIqC2D0deQr/yS1WnxvmYLlJXZpaQrQiseMY+6xusl79E04UjWoqyr+t1/Ew==, - } + resolution: {integrity: sha512-CukZhumInROvLq3+b5gLev+vgpsIqC2D0deQr/yS1WnxvmYLlJXZpaQrQiseMY+6xusl79E04UjWoqyr+t1/Ew==} dev: true /@types/semver@7.5.0: - resolution: - { - integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==, - } + resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} dev: true /@typescript-eslint/eslint-plugin@6.2.0(@typescript-eslint/parser@6.2.0)(eslint@8.45.0)(typescript@5.0.2): - resolution: - { - integrity: sha512-rClGrMuyS/3j0ETa1Ui7s6GkLhfZGKZL3ZrChLeAiACBE/tRc1wq8SNZESUuluxhLj9FkUefRs2l6bCIArWBiQ==, - } - engines: { node: ^16.0.0 || >=18.0.0 } + resolution: {integrity: sha512-rClGrMuyS/3j0ETa1Ui7s6GkLhfZGKZL3ZrChLeAiACBE/tRc1wq8SNZESUuluxhLj9FkUefRs2l6bCIArWBiQ==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - "@typescript-eslint/parser": ^6.0.0 || ^6.0.0-alpha + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha eslint: ^7.0.0 || ^8.0.0 - typescript: "*" + typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - "@eslint-community/regexpp": 4.6.1 - "@typescript-eslint/parser": 6.2.0(eslint@8.45.0)(typescript@5.0.2) - "@typescript-eslint/scope-manager": 6.2.0 - "@typescript-eslint/type-utils": 6.2.0(eslint@8.45.0)(typescript@5.0.2) - "@typescript-eslint/utils": 6.2.0(eslint@8.45.0)(typescript@5.0.2) - "@typescript-eslint/visitor-keys": 6.2.0 + '@eslint-community/regexpp': 4.6.1 + '@typescript-eslint/parser': 6.2.0(eslint@8.45.0)(typescript@5.0.2) + '@typescript-eslint/scope-manager': 6.2.0 + '@typescript-eslint/type-utils': 6.2.0(eslint@8.45.0)(typescript@5.0.2) + '@typescript-eslint/utils': 6.2.0(eslint@8.45.0)(typescript@5.0.2) + '@typescript-eslint/visitor-keys': 6.2.0 debug: 4.3.4 eslint: 8.45.0 graphemer: 1.4.0 @@ -527,22 +413,19 @@ packages: dev: true /@typescript-eslint/parser@6.2.0(eslint@8.45.0)(typescript@5.0.2): - resolution: - { - integrity: sha512-igVYOqtiK/UsvKAmmloQAruAdUHihsOCvplJpplPZ+3h4aDkC/UKZZNKgB6h93ayuYLuEymU3h8nF1xMRbh37g==, - } - engines: { node: ^16.0.0 || >=18.0.0 } + resolution: {integrity: sha512-igVYOqtiK/UsvKAmmloQAruAdUHihsOCvplJpplPZ+3h4aDkC/UKZZNKgB6h93ayuYLuEymU3h8nF1xMRbh37g==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 - typescript: "*" + typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - "@typescript-eslint/scope-manager": 6.2.0 - "@typescript-eslint/types": 6.2.0 - "@typescript-eslint/typescript-estree": 6.2.0(typescript@5.0.2) - "@typescript-eslint/visitor-keys": 6.2.0 + '@typescript-eslint/scope-manager': 6.2.0 + '@typescript-eslint/types': 6.2.0 + '@typescript-eslint/typescript-estree': 6.2.0(typescript@5.0.2) + '@typescript-eslint/visitor-keys': 6.2.0 debug: 4.3.4 eslint: 8.45.0 typescript: 5.0.2 @@ -551,31 +434,25 @@ packages: dev: true /@typescript-eslint/scope-manager@6.2.0: - resolution: - { - integrity: sha512-1ZMNVgm5nnHURU8ZSJ3snsHzpFeNK84rdZjluEVBGNu7jDymfqceB3kdIZ6A4xCfEFFhRIB6rF8q/JIqJd2R0Q==, - } - engines: { node: ^16.0.0 || >=18.0.0 } + resolution: {integrity: sha512-1ZMNVgm5nnHURU8ZSJ3snsHzpFeNK84rdZjluEVBGNu7jDymfqceB3kdIZ6A4xCfEFFhRIB6rF8q/JIqJd2R0Q==} + engines: {node: ^16.0.0 || >=18.0.0} dependencies: - "@typescript-eslint/types": 6.2.0 - "@typescript-eslint/visitor-keys": 6.2.0 + '@typescript-eslint/types': 6.2.0 + '@typescript-eslint/visitor-keys': 6.2.0 dev: true /@typescript-eslint/type-utils@6.2.0(eslint@8.45.0)(typescript@5.0.2): - resolution: - { - integrity: sha512-DnGZuNU2JN3AYwddYIqrVkYW0uUQdv0AY+kz2M25euVNlujcN2u+rJgfJsBFlUEzBB6OQkUqSZPyuTLf2bP5mw==, - } - engines: { node: ^16.0.0 || >=18.0.0 } + resolution: {integrity: sha512-DnGZuNU2JN3AYwddYIqrVkYW0uUQdv0AY+kz2M25euVNlujcN2u+rJgfJsBFlUEzBB6OQkUqSZPyuTLf2bP5mw==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 - typescript: "*" + typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - "@typescript-eslint/typescript-estree": 6.2.0(typescript@5.0.2) - "@typescript-eslint/utils": 6.2.0(eslint@8.45.0)(typescript@5.0.2) + '@typescript-eslint/typescript-estree': 6.2.0(typescript@5.0.2) + '@typescript-eslint/utils': 6.2.0(eslint@8.45.0)(typescript@5.0.2) debug: 4.3.4 eslint: 8.45.0 ts-api-utils: 1.0.1(typescript@5.0.2) @@ -585,27 +462,21 @@ packages: dev: true /@typescript-eslint/types@6.2.0: - resolution: - { - integrity: sha512-1nRRaDlp/XYJQLvkQJG5F3uBTno5SHPT7XVcJ5n1/k2WfNI28nJsvLakxwZRNY5spuatEKO7d5nZWsQpkqXwBA==, - } - engines: { node: ^16.0.0 || >=18.0.0 } + resolution: {integrity: sha512-1nRRaDlp/XYJQLvkQJG5F3uBTno5SHPT7XVcJ5n1/k2WfNI28nJsvLakxwZRNY5spuatEKO7d5nZWsQpkqXwBA==} + engines: {node: ^16.0.0 || >=18.0.0} dev: true /@typescript-eslint/typescript-estree@6.2.0(typescript@5.0.2): - resolution: - { - integrity: sha512-Mts6+3HQMSM+LZCglsc2yMIny37IhUgp1Qe8yJUYVyO6rHP7/vN0vajKu3JvHCBIy8TSiKddJ/Zwu80jhnGj1w==, - } - engines: { node: ^16.0.0 || >=18.0.0 } + resolution: {integrity: sha512-Mts6+3HQMSM+LZCglsc2yMIny37IhUgp1Qe8yJUYVyO6rHP7/vN0vajKu3JvHCBIy8TSiKddJ/Zwu80jhnGj1w==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - typescript: "*" + typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - "@typescript-eslint/types": 6.2.0 - "@typescript-eslint/visitor-keys": 6.2.0 + '@typescript-eslint/types': 6.2.0 + '@typescript-eslint/visitor-keys': 6.2.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -617,20 +488,17 @@ packages: dev: true /@typescript-eslint/utils@6.2.0(eslint@8.45.0)(typescript@5.0.2): - resolution: - { - integrity: sha512-RCFrC1lXiX1qEZN8LmLrxYRhOkElEsPKTVSNout8DMzf8PeWoQG7Rxz2SadpJa3VSh5oYKGwt7j7X/VRg+Y3OQ==, - } - engines: { node: ^16.0.0 || >=18.0.0 } + resolution: {integrity: sha512-RCFrC1lXiX1qEZN8LmLrxYRhOkElEsPKTVSNout8DMzf8PeWoQG7Rxz2SadpJa3VSh5oYKGwt7j7X/VRg+Y3OQ==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - "@eslint-community/eslint-utils": 4.4.0(eslint@8.45.0) - "@types/json-schema": 7.0.12 - "@types/semver": 7.5.0 - "@typescript-eslint/scope-manager": 6.2.0 - "@typescript-eslint/types": 6.2.0 - "@typescript-eslint/typescript-estree": 6.2.0(typescript@5.0.2) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.45.0) + '@types/json-schema': 7.0.12 + '@types/semver': 7.5.0 + '@typescript-eslint/scope-manager': 6.2.0 + '@typescript-eslint/types': 6.2.0 + '@typescript-eslint/typescript-estree': 6.2.0(typescript@5.0.2) eslint: 8.45.0 semver: 7.5.4 transitivePeerDependencies: @@ -639,21 +507,15 @@ packages: dev: true /@typescript-eslint/visitor-keys@6.2.0: - resolution: - { - integrity: sha512-QbaYUQVKKo9bgCzpjz45llCfwakyoxHetIy8CAvYCtd16Zu1KrpzNHofwF8kGkpPOxZB2o6kz+0nqH8ZkIzuoQ==, - } - engines: { node: ^16.0.0 || >=18.0.0 } + resolution: {integrity: sha512-QbaYUQVKKo9bgCzpjz45llCfwakyoxHetIy8CAvYCtd16Zu1KrpzNHofwF8kGkpPOxZB2o6kz+0nqH8ZkIzuoQ==} + engines: {node: ^16.0.0 || >=18.0.0} dependencies: - "@typescript-eslint/types": 6.2.0 + '@typescript-eslint/types': 6.2.0 eslint-visitor-keys: 3.4.1 dev: true /acorn-jsx@5.3.2(acorn@8.10.0): - resolution: - { - integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, - } + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: @@ -661,19 +523,13 @@ packages: dev: true /acorn@8.10.0: - resolution: - { - integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==, - } - engines: { node: ">=0.4.0" } + resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} + engines: {node: '>=0.4.0'} hasBin: true dev: true /ajv@6.12.6: - resolution: - { - integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==, - } + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 @@ -682,134 +538,104 @@ packages: dev: true /ansi-regex@5.0.1: - resolution: - { - integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} dev: true /ansi-styles@4.3.0: - resolution: - { - integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} dependencies: color-convert: 2.0.1 dev: true /anymatch@3.1.3: - resolution: - { - integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 dev: true /argparse@2.0.1: - resolution: - { - integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, - } + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true /array-union@1.0.2: - resolution: - { - integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==} + engines: {node: '>=0.10.0'} dependencies: array-uniq: 1.0.3 dev: true /array-union@2.1.0: - resolution: - { - integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} dev: true /array-uniq@1.0.3: - resolution: - { - integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} + engines: {node: '>=0.10.0'} dev: true /async@3.2.4: - resolution: - { - integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==, - } + resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} dev: true + /bahttext@1.1.0: + resolution: {integrity: sha512-3g7DbmCwYhLnnN5hJFB+Mtbst4q2gfXpAdqOMK6tz6FmgtlrhX1n1uhuzkIhEr+WcnFR6eRvebIE5msGuEtA7Q==} + dev: false + /balanced-match@1.0.2: - resolution: - { - integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, - } + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true + /bessel@1.0.2: + resolution: {integrity: sha512-Al3nHGQGqDYqqinXhQzmwmcRToe/3WyBv4N8aZc5Pef8xw2neZlR9VPi84Sa23JtgWcucu18HxVZrnI0fn2etw==} + engines: {node: '>=0.8'} + dev: false + /binary-extensions@2.2.0: - resolution: - { - integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} dev: true /brace-expansion@1.1.11: - resolution: - { - integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==, - } + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 dev: true /braces@3.0.2: - resolution: - { - integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} dependencies: fill-range: 7.0.1 dev: true /callsites@3.1.0: - resolution: - { - integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} dev: true /chalk@4.1.2: - resolution: - { - integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 dev: true + /chevrotain@7.1.2: + resolution: {integrity: sha512-9bQsXVQ7UAvzMs7iUBBJ9Yv//exOy7bIR3PByOEk4M64vIE/LsiOiX7VIkMF/vEMlrSStwsaE884Bp9CpjtC5g==} + dependencies: + regexp-to-ast: 0.5.0 + dev: false + /chokidar@3.5.3: - resolution: - { - integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==, - } - engines: { node: ">= 8.10.0" } + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} dependencies: anymatch: 3.1.3 braces: 3.0.2 @@ -823,49 +649,31 @@ packages: dev: true /color-convert@2.0.1: - resolution: - { - integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, - } - engines: { node: ">=7.0.0" } + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 dev: true /color-name@1.1.4: - resolution: - { - integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, - } + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} dev: true /commander@2.20.3: - resolution: - { - integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==, - } + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: true /commondir@1.0.1: - resolution: - { - integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==, - } + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} dev: true /concat-map@0.0.1: - resolution: - { - integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, - } + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true /cross-spawn@7.0.3: - resolution: - { - integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} dependencies: path-key: 3.1.1 shebang-command: 2.0.0 @@ -873,13 +681,10 @@ packages: dev: true /debug@4.3.4: - resolution: - { - integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==, - } - engines: { node: ">=6.0" } + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} peerDependencies: - supports-color: "*" + supports-color: '*' peerDependenciesMeta: supports-color: optional: true @@ -888,134 +693,101 @@ packages: dev: true /deep-is@0.1.4: - resolution: - { - integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, - } + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true /dir-glob@3.0.1: - resolution: - { - integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} dependencies: path-type: 4.0.0 dev: true /doctrine@3.0.0: - resolution: - { - integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==, - } - engines: { node: ">=6.0.0" } + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} dependencies: esutils: 2.0.3 dev: true /email-addresses@5.0.0: - resolution: - { - integrity: sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw==, - } + resolution: {integrity: sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw==} dev: true /esbuild@0.18.14: - resolution: - { - integrity: sha512-uNPj5oHPYmj+ZhSQeYQVFZ+hAlJZbAGOmmILWIqrGvPVlNLbyOvU5Bu6Woi8G8nskcx0vwY0iFoMPrzT86Ko+w==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-uNPj5oHPYmj+ZhSQeYQVFZ+hAlJZbAGOmmILWIqrGvPVlNLbyOvU5Bu6Woi8G8nskcx0vwY0iFoMPrzT86Ko+w==} + engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - "@esbuild/android-arm": 0.18.14 - "@esbuild/android-arm64": 0.18.14 - "@esbuild/android-x64": 0.18.14 - "@esbuild/darwin-arm64": 0.18.14 - "@esbuild/darwin-x64": 0.18.14 - "@esbuild/freebsd-arm64": 0.18.14 - "@esbuild/freebsd-x64": 0.18.14 - "@esbuild/linux-arm": 0.18.14 - "@esbuild/linux-arm64": 0.18.14 - "@esbuild/linux-ia32": 0.18.14 - "@esbuild/linux-loong64": 0.18.14 - "@esbuild/linux-mips64el": 0.18.14 - "@esbuild/linux-ppc64": 0.18.14 - "@esbuild/linux-riscv64": 0.18.14 - "@esbuild/linux-s390x": 0.18.14 - "@esbuild/linux-x64": 0.18.14 - "@esbuild/netbsd-x64": 0.18.14 - "@esbuild/openbsd-x64": 0.18.14 - "@esbuild/sunos-x64": 0.18.14 - "@esbuild/win32-arm64": 0.18.14 - "@esbuild/win32-ia32": 0.18.14 - "@esbuild/win32-x64": 0.18.14 + '@esbuild/android-arm': 0.18.14 + '@esbuild/android-arm64': 0.18.14 + '@esbuild/android-x64': 0.18.14 + '@esbuild/darwin-arm64': 0.18.14 + '@esbuild/darwin-x64': 0.18.14 + '@esbuild/freebsd-arm64': 0.18.14 + '@esbuild/freebsd-x64': 0.18.14 + '@esbuild/linux-arm': 0.18.14 + '@esbuild/linux-arm64': 0.18.14 + '@esbuild/linux-ia32': 0.18.14 + '@esbuild/linux-loong64': 0.18.14 + '@esbuild/linux-mips64el': 0.18.14 + '@esbuild/linux-ppc64': 0.18.14 + '@esbuild/linux-riscv64': 0.18.14 + '@esbuild/linux-s390x': 0.18.14 + '@esbuild/linux-x64': 0.18.14 + '@esbuild/netbsd-x64': 0.18.14 + '@esbuild/openbsd-x64': 0.18.14 + '@esbuild/sunos-x64': 0.18.14 + '@esbuild/win32-arm64': 0.18.14 + '@esbuild/win32-ia32': 0.18.14 + '@esbuild/win32-x64': 0.18.14 dev: true /escape-string-regexp@1.0.5: - resolution: - { - integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==, - } - engines: { node: ">=0.8.0" } + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} dev: true /escape-string-regexp@4.0.0: - resolution: - { - integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} dev: true /eslint-config-prettier@8.8.0(eslint@8.45.0): - resolution: - { - integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==, - } + resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==} hasBin: true peerDependencies: - eslint: ">=7.0.0" + eslint: '>=7.0.0' dependencies: eslint: 8.45.0 dev: true /eslint-scope@7.2.1: - resolution: - { - integrity: sha512-CvefSOsDdaYYvxChovdrPo/ZGt8d5lrJWleAc1diXRKhHGiTYEI26cvo8Kle/wGnsizoCJjK73FMg1/IkIwiNA==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-CvefSOsDdaYYvxChovdrPo/ZGt8d5lrJWleAc1diXRKhHGiTYEI26cvo8Kle/wGnsizoCJjK73FMg1/IkIwiNA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 dev: true /eslint-visitor-keys@3.4.1: - resolution: - { - integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true /eslint@8.45.0: - resolution: - { - integrity: sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - "@eslint-community/eslint-utils": 4.4.0(eslint@8.45.0) - "@eslint-community/regexpp": 4.6.1 - "@eslint/eslintrc": 2.1.0 - "@eslint/js": 8.44.0 - "@humanwhocodes/config-array": 0.11.10 - "@humanwhocodes/module-importer": 1.0.1 - "@nodelib/fs.walk": 1.2.8 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.45.0) + '@eslint-community/regexpp': 4.6.1 + '@eslint/eslintrc': 2.1.0 + '@eslint/js': 8.44.0 + '@humanwhocodes/config-array': 0.11.10 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 @@ -1051,11 +823,8 @@ packages: dev: true /espree@9.6.1: - resolution: - { - integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: acorn: 8.10.0 acorn-jsx: 5.3.2(acorn@8.10.0) @@ -1063,116 +832,86 @@ packages: dev: true /esquery@1.5.0: - resolution: - { - integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==, - } - engines: { node: ">=0.10" } + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 dev: true /esrecurse@4.3.0: - resolution: - { - integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} dependencies: estraverse: 5.3.0 dev: true /estraverse@5.3.0: - resolution: - { - integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} dev: true /estree-walker@2.0.2: - resolution: - { - integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, - } + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} dev: true /esutils@2.0.3: - resolution: - { - integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} dev: true /fast-deep-equal@3.1.3: - resolution: - { - integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, - } + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true - /fast-glob@3.3.1: - resolution: - { - integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==, - } - engines: { node: ">=8.6.0" } + /fast-formula-parser@1.0.19: + resolution: {integrity: sha512-8Roq7V1XjuYj3cWZ9tILyqBHGjS7NkejRaHxSWePu0qjIcvimZwe6WfeA9che03dgWrykZqrw691qg3lwiIkMg==} dependencies: - "@nodelib/fs.stat": 2.0.5 - "@nodelib/fs.walk": 1.2.8 + bahttext: 1.1.0 + bessel: 1.0.2 + chevrotain: 7.1.2 + jstat: 1.9.6 + dev: false + + /fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.5 dev: true /fast-json-stable-stringify@2.1.0: - resolution: - { - integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, - } + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} dev: true /fast-levenshtein@2.0.6: - resolution: - { - integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, - } + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true /fastq@1.15.0: - resolution: - { - integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==, - } + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: reusify: 1.0.4 dev: true /file-entry-cache@6.0.1: - resolution: - { - integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==, - } - engines: { node: ^10.12.0 || >=12.0.0 } + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: flat-cache: 3.0.4 dev: true /filename-reserved-regex@2.0.0: - resolution: - { - integrity: sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==} + engines: {node: '>=4'} dev: true /filenamify@4.3.0: - resolution: - { - integrity: sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==} + engines: {node: '>=8'} dependencies: filename-reserved-regex: 2.0.0 strip-outer: 1.0.1 @@ -1180,21 +919,15 @@ packages: dev: true /fill-range@7.0.1: - resolution: - { - integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 dev: true /find-cache-dir@3.3.2: - resolution: - { - integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} dependencies: commondir: 1.0.1 make-dir: 3.1.0 @@ -1202,51 +935,36 @@ packages: dev: true /find-up@4.1.0: - resolution: - { - integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} dependencies: locate-path: 5.0.0 path-exists: 4.0.0 dev: true /find-up@5.0.0: - resolution: - { - integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} dependencies: locate-path: 6.0.0 path-exists: 4.0.0 dev: true /flat-cache@3.0.4: - resolution: - { - integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==, - } - engines: { node: ^10.12.0 || >=12.0.0 } + resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: flatted: 3.2.7 rimraf: 3.0.2 dev: true /flatted@3.2.7: - resolution: - { - integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==, - } + resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} dev: true /fs-extra@8.1.0: - resolution: - { - integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==, - } - engines: { node: ">=6 <7 || >=8" } + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} dependencies: graceful-fs: 4.2.11 jsonfile: 4.0.0 @@ -1254,36 +972,24 @@ packages: dev: true /fs.realpath@1.0.0: - resolution: - { - integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==, - } + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true /fsevents@2.3.2: - resolution: - { - integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==, - } - engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true dev: true optional: true /function-bind@1.1.1: - resolution: - { - integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==, - } + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} dev: true /gh-pages@5.0.0: - resolution: - { - integrity: sha512-Nqp1SjkPIB94Xw/3yYNTUL+G2dxlhjvv1zeN/4kMC1jfViTEqhtVz/Ba1zSXHuvXCN9ADNS1dN4r5/J/nZWEQQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-Nqp1SjkPIB94Xw/3yYNTUL+G2dxlhjvv1zeN/4kMC1jfViTEqhtVz/Ba1zSXHuvXCN9ADNS1dN4r5/J/nZWEQQ==} + engines: {node: '>=10'} hasBin: true dependencies: async: 3.2.4 @@ -1296,30 +1002,21 @@ packages: dev: true /glob-parent@5.1.2: - resolution: - { - integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 dev: true /glob-parent@6.0.2: - resolution: - { - integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==, - } - engines: { node: ">=10.13.0" } + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} dependencies: is-glob: 4.0.3 dev: true /glob@7.2.3: - resolution: - { - integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==, - } + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -1330,21 +1027,15 @@ packages: dev: true /globals@13.20.0: - resolution: - { - integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} + engines: {node: '>=8'} dependencies: type-fest: 0.20.2 dev: true /globby@11.1.0: - resolution: - { - integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} dependencies: array-union: 2.1.0 dir-glob: 3.0.1 @@ -1355,11 +1046,8 @@ packages: dev: true /globby@6.1.0: - resolution: - { - integrity: sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==} + engines: {node: '>=0.10.0'} dependencies: array-union: 1.0.2 glob: 7.2.3 @@ -1369,330 +1057,220 @@ packages: dev: true /graceful-fs@4.2.11: - resolution: - { - integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, - } + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} dev: true /graphemer@1.4.0: - resolution: - { - integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==, - } + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} dev: true /has-flag@4.0.0: - resolution: - { - integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} dev: true /has@1.0.3: - resolution: - { - integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==, - } - engines: { node: ">= 0.4.0" } + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.1 dev: true /ignore@5.2.4: - resolution: - { - integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==, - } - engines: { node: ">= 4" } + resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + engines: {node: '>= 4'} dev: true /immutable@4.3.1: - resolution: - { - integrity: sha512-lj9cnmB/kVS0QHsJnYKD1uo3o39nrbKxszjnqS9Fr6NB7bZzW45U6WSGBPKXDL/CvDKqDNPA4r3DoDQ8GTxo2A==, - } + resolution: {integrity: sha512-lj9cnmB/kVS0QHsJnYKD1uo3o39nrbKxszjnqS9Fr6NB7bZzW45U6WSGBPKXDL/CvDKqDNPA4r3DoDQ8GTxo2A==} dev: true /import-fresh@3.3.0: - resolution: - { - integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 dev: true /imurmurhash@0.1.4: - resolution: - { - integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==, - } - engines: { node: ">=0.8.19" } + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} dev: true /inflight@1.0.6: - resolution: - { - integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==, - } + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: once: 1.4.0 wrappy: 1.0.2 dev: true /inherits@2.0.4: - resolution: - { - integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, - } + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: true /is-binary-path@2.1.0: - resolution: - { - integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} dependencies: binary-extensions: 2.2.0 dev: true /is-core-module@2.12.1: - resolution: - { - integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==, - } + resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==} dependencies: has: 1.0.3 dev: true /is-extglob@2.1.1: - resolution: - { - integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} dev: true /is-glob@4.0.3: - resolution: - { - integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 dev: true /is-number@7.0.0: - resolution: - { - integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, - } - engines: { node: ">=0.12.0" } + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} dev: true /is-path-inside@3.0.3: - resolution: - { - integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} dev: true /isexe@2.0.0: - resolution: - { - integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, - } + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true /js-yaml@4.1.0: - resolution: - { - integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==, - } + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true dependencies: argparse: 2.0.1 dev: true /json-schema-traverse@0.4.1: - resolution: - { - integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, - } + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true /json-stable-stringify-without-jsonify@1.0.1: - resolution: - { - integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==, - } + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: true /jsonfile@4.0.0: - resolution: - { - integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==, - } + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} optionalDependencies: graceful-fs: 4.2.11 dev: true + /jstat@1.9.6: + resolution: {integrity: sha512-rPBkJbK2TnA8pzs93QcDDPlKcrtZWuuCo2dVR0TFLOJSxhqfWOVCSp8aV3/oSbn+4uY4yw1URtLpHQedtmXfug==} + dev: false + /levn@0.4.1: - resolution: - { - integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 dev: true /locate-path@5.0.0: - resolution: - { - integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} dependencies: p-locate: 4.1.0 dev: true /locate-path@6.0.0: - resolution: - { - integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} dependencies: p-locate: 5.0.0 dev: true /lodash.merge@4.6.2: - resolution: - { - integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==, - } + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true /lru-cache@6.0.0: - resolution: - { - integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} dependencies: yallist: 4.0.0 dev: true /make-dir@3.1.0: - resolution: - { - integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} dependencies: semver: 6.3.1 dev: true /merge2@1.4.1: - resolution: - { - integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} dev: true /micromatch@4.0.5: - resolution: - { - integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==, - } - engines: { node: ">=8.6" } + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} dependencies: braces: 3.0.2 picomatch: 2.3.1 dev: true /minimatch@3.1.2: - resolution: - { - integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==, - } + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 dev: true /ms@2.1.2: - resolution: - { - integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==, - } + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: true /nanoid@3.3.6: - resolution: - { - integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==, - } - engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } + resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true dev: true /natural-compare-lite@1.4.0: - resolution: - { - integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==, - } + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} dev: true /natural-compare@1.4.0: - resolution: - { - integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==, - } + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true /normalize-path@3.0.0: - resolution: - { - integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} dev: true /object-assign@4.1.1: - resolution: - { - integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} dev: true /once@1.4.0: - resolution: - { - integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, - } + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 dev: true /optionator@0.9.3: - resolution: - { - integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} dependencies: - "@aashutoshrathi/word-wrap": 1.2.6 + '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 @@ -1701,159 +1279,105 @@ packages: dev: true /p-limit@2.3.0: - resolution: - { - integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} dependencies: p-try: 2.2.0 dev: true /p-limit@3.1.0: - resolution: - { - integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 dev: true /p-locate@4.1.0: - resolution: - { - integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} dependencies: p-limit: 2.3.0 dev: true /p-locate@5.0.0: - resolution: - { - integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} dependencies: p-limit: 3.1.0 dev: true /p-try@2.2.0: - resolution: - { - integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} dev: true /parent-module@1.0.1: - resolution: - { - integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} dependencies: callsites: 3.1.0 dev: true /path-exists@4.0.0: - resolution: - { - integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} dev: true /path-is-absolute@1.0.1: - resolution: - { - integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} dev: true /path-key@3.1.1: - resolution: - { - integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} dev: true /path-parse@1.0.7: - resolution: - { - integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, - } + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true /path-type@4.0.0: - resolution: - { - integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} dev: true /picocolors@1.0.0: - resolution: - { - integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==, - } + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} dev: true /picomatch@2.3.1: - resolution: - { - integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, - } - engines: { node: ">=8.6" } + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} dev: true /pify@2.3.0: - resolution: - { - integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} dev: true /pinkie-promise@2.0.1: - resolution: - { - integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} + engines: {node: '>=0.10.0'} dependencies: pinkie: 2.0.4 dev: true /pinkie@2.0.4: - resolution: - { - integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} + engines: {node: '>=0.10.0'} dev: true /pkg-dir@4.2.0: - resolution: - { - integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} dependencies: find-up: 4.1.0 dev: true /postcss@8.4.26: - resolution: - { - integrity: sha512-jrXHFF8iTloAenySjM/ob3gSj7pCu0Ji49hnjqzsgSRa50hkWCKD0HQ+gMNJkW38jBI68MpAAg7ZWwHwX8NMMw==, - } - engines: { node: ^10 || ^12 || >=14 } + resolution: {integrity: sha512-jrXHFF8iTloAenySjM/ob3gSj7pCu0Ji49hnjqzsgSRa50hkWCKD0HQ+gMNJkW38jBI68MpAAg7ZWwHwX8NMMw==} + engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.6 picocolors: 1.0.0 @@ -1861,60 +1385,43 @@ packages: dev: true /prelude-ls@1.2.1: - resolution: - { - integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} dev: true /prettier@3.0.0: - resolution: - { - integrity: sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==, - } - engines: { node: ">=14" } + resolution: {integrity: sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==} + engines: {node: '>=14'} hasBin: true dev: true /punycode@2.3.0: - resolution: - { - integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + engines: {node: '>=6'} dev: true /queue-microtask@1.2.3: - resolution: - { - integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, - } + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true /readdirp@3.6.0: - resolution: - { - integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==, - } - engines: { node: ">=8.10.0" } + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 dev: true + /regexp-to-ast@0.5.0: + resolution: {integrity: sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw==} + dev: false + /resolve-from@4.0.0: - resolution: - { - integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} dev: true /resolve@1.22.2: - resolution: - { - integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==, - } + resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} hasBin: true dependencies: is-core-module: 2.12.1 @@ -1923,60 +1430,42 @@ packages: dev: true /reusify@1.0.4: - resolution: - { - integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==, - } - engines: { iojs: ">=1.0.0", node: ">=0.10.0" } + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} dev: true /rimraf@3.0.2: - resolution: - { - integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==, - } + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true dependencies: glob: 7.2.3 dev: true /rollup-plugin-typescript-paths@1.4.0(typescript@5.0.2): - resolution: - { - integrity: sha512-6EgeLRjTVmymftEyCuYu91XzY5XMB5lR0YrJkeT0D7OG2RGSdbNL+C/hfPIdc/sjMa9Sl5NLsxIr6C/+/5EUpA==, - } + resolution: {integrity: sha512-6EgeLRjTVmymftEyCuYu91XzY5XMB5lR0YrJkeT0D7OG2RGSdbNL+C/hfPIdc/sjMa9Sl5NLsxIr6C/+/5EUpA==} peerDependencies: - typescript: ">=3.4" + typescript: '>=3.4' dependencies: typescript: 5.0.2 dev: true /rollup@3.26.3: - resolution: - { - integrity: sha512-7Tin0C8l86TkpcMtXvQu6saWH93nhG3dGQ1/+l5V2TDMceTxO7kDiK6GzbfLWNNxqJXm591PcEZUozZm51ogwQ==, - } - engines: { node: ">=14.18.0", npm: ">=8.0.0" } + resolution: {integrity: sha512-7Tin0C8l86TkpcMtXvQu6saWH93nhG3dGQ1/+l5V2TDMceTxO7kDiK6GzbfLWNNxqJXm591PcEZUozZm51ogwQ==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: fsevents: 2.3.2 dev: true /run-parallel@1.2.0: - resolution: - { - integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, - } + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 dev: true /sass@1.63.6: - resolution: - { - integrity: sha512-MJuxGMHzaOW7ipp+1KdELtqKbfAWbH7OLIdoSMnVe3EXPMTmxTmlaZDCTsgIpPCs3w99lLo9/zDKkOrJuT5byw==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-MJuxGMHzaOW7ipp+1KdELtqKbfAWbH7OLIdoSMnVe3EXPMTmxTmlaZDCTsgIpPCs3w99lLo9/zDKkOrJuT5byw==} + engines: {node: '>=14.0.0'} hasBin: true dependencies: chokidar: 3.5.3 @@ -1985,211 +1474,145 @@ packages: dev: true /semver@6.3.1: - resolution: - { - integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==, - } + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true dev: true /semver@7.5.4: - resolution: - { - integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} hasBin: true dependencies: lru-cache: 6.0.0 dev: true /shebang-command@2.0.0: - resolution: - { - integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 dev: true /shebang-regex@3.0.0: - resolution: - { - integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} dev: true /slash@3.0.0: - resolution: - { - integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} dev: true /source-map-js@1.0.2: - resolution: - { - integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} dev: true /strip-ansi@6.0.1: - resolution: - { - integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 dev: true /strip-json-comments@3.1.1: - resolution: - { - integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} dev: true /strip-outer@1.0.1: - resolution: - { - integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==} + engines: {node: '>=0.10.0'} dependencies: escape-string-regexp: 1.0.5 dev: true /supports-color@7.2.0: - resolution: - { - integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} dependencies: has-flag: 4.0.0 dev: true /supports-preserve-symlinks-flag@1.0.0: - resolution: - { - integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} dev: true /text-table@0.2.0: - resolution: - { - integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==, - } + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true /to-regex-range@5.0.1: - resolution: - { - integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, - } - engines: { node: ">=8.0" } + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 dev: true /trim-repeated@1.0.0: - resolution: - { - integrity: sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==} + engines: {node: '>=0.10.0'} dependencies: escape-string-regexp: 1.0.5 dev: true /ts-api-utils@1.0.1(typescript@5.0.2): - resolution: - { - integrity: sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==, - } - engines: { node: ">=16.13.0" } + resolution: {integrity: sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==} + engines: {node: '>=16.13.0'} peerDependencies: - typescript: ">=4.2.0" + typescript: '>=4.2.0' dependencies: typescript: 5.0.2 dev: true /tslib@2.6.0: - resolution: - { - integrity: sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==, - } + resolution: {integrity: sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==} dev: true /type-check@0.4.0: - resolution: - { - integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 dev: true /type-fest@0.20.2: - resolution: - { - integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} dev: true /typescript@5.0.2: - resolution: - { - integrity: sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==, - } - engines: { node: ">=12.20" } + resolution: {integrity: sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==} + engines: {node: '>=12.20'} hasBin: true dev: true /universalify@0.1.2: - resolution: - { - integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==, - } - engines: { node: ">= 4.0.0" } + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} dev: true /uri-js@4.4.1: - resolution: - { - integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, - } + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.3.0 dev: true /vite@4.4.0(@types/node@20.4.4)(sass@1.63.6): - resolution: - { - integrity: sha512-Wf+DCEjuM8aGavEYiF77hnbxEZ+0+/jC9nABR46sh5Xi+GYeSvkeEFRiVuI3x+tPjxgZeS91h1jTAQTPFgePpA==, - } - engines: { node: ^14.18.0 || >=16.0.0 } + resolution: {integrity: sha512-Wf+DCEjuM8aGavEYiF77hnbxEZ+0+/jC9nABR46sh5Xi+GYeSvkeEFRiVuI3x+tPjxgZeS91h1jTAQTPFgePpA==} + engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: - "@types/node": ">= 14" - less: "*" + '@types/node': '>= 14' + less: '*' lightningcss: ^1.21.0 - sass: "*" - stylus: "*" - sugarss: "*" + sass: '*' + stylus: '*' + sugarss: '*' terser: ^5.4.0 peerDependenciesMeta: - "@types/node": + '@types/node': optional: true less: optional: true @@ -2204,7 +1627,7 @@ packages: terser: optional: true dependencies: - "@types/node": 20.4.4 + '@types/node': 20.4.4 esbuild: 0.18.14 postcss: 8.4.26 rollup: 3.26.3 @@ -2214,34 +1637,22 @@ packages: dev: true /which@2.0.2: - resolution: - { - integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} hasBin: true dependencies: isexe: 2.0.0 dev: true /wrappy@1.0.2: - resolution: - { - integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, - } + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true /yallist@4.0.0: - resolution: - { - integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==, - } + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true /yocto-queue@0.1.0: - resolution: - { - integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} dev: true diff --git a/src/components/scroller.ts b/src/components/scroller.ts index e754596..a879bf3 100644 --- a/src/components/scroller.ts +++ b/src/components/scroller.ts @@ -169,7 +169,7 @@ export class Scroller { } //* Start typings - const keysRegex = /^([a-z]|[а-я]|[0-9])$/; + const keysRegex = /^([a-z]|[а-я]|[0-9]|=)$/; if (!event.metaKey && !event.ctrlKey) { //* Prevent handle shortcutrs const isPressedLetterKey = keysRegex.test(event.key.toLowerCase()); diff --git a/src/index.ts b/src/index.ts index 86f7811..8d7f10a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,4 @@ -import Spreadsheet, { SpreadsheetConstructorProperties, createSampleData } from "./main"; +import Spreadsheet, { SpreadsheetConstructorProperties } from "./main"; const options: SpreadsheetConstructorProperties = { onCellClick: (event, cell) => { @@ -17,9 +17,6 @@ const options: SpreadsheetConstructorProperties = { const sheet = new Spreadsheet("#spreadsheet", options); -const data = createSampleData(600, 800, true) -sheet.loadData(data) - function saveDataToLS() { const serializableData = sheet.serializeData(); localStorage.setItem("sheet", JSON.stringify(serializableData)); diff --git a/src/main.ts b/src/main.ts index b58296b..d6ee3a6 100644 --- a/src/main.ts +++ b/src/main.ts @@ -30,6 +30,7 @@ import { ColumnsBar } from "./components/columnsBar"; import { RowsBar } from "./components/rowsBar"; import { EventTypes, Events } from "./modules/events"; import { Clipboard } from "./modules/clipboard"; +import { FormulaParser } from "./modules/formulaParser"; /* ! Component structure @@ -69,6 +70,7 @@ export default class Spreadsheet { public cache: Cache; public events: Events; public clipboard: Clipboard; + public formulaParser: FormulaParser constructor( target: string | HTMLElement, @@ -105,6 +107,7 @@ export default class Spreadsheet { this.selection = new Selection(); this.events = new Events(this); this.clipboard = new Clipboard(this); + this.formulaParser = new FormulaParser(this) this.data = data; this.styles = new Styles(); diff --git a/src/modules/cell.ts b/src/modules/cell.ts index 17cbe32..05bb9d9 100644 --- a/src/modules/cell.ts +++ b/src/modules/cell.ts @@ -1,4 +1,5 @@ import Spreadsheet from "../main"; +import { FormulaParser } from "./formulaParser"; import { RenderBox } from "./renderBox"; export type CellConstructorProps = { @@ -69,6 +70,9 @@ export class Cell { position: Position; style: CellStyles | null = null; + cellsDependsOnThisCell: Position[] = [] + dependedFromCells: Position[] = [] + constructor(props: CellConstructorProps) { this.value = props.value; this.displayValue = props.displayValue; @@ -96,6 +100,15 @@ export class Cell { Object.assign(this, values); } + evalFormula(parser: FormulaParser) { + if (this.value.substring(0, 1) !== '=') return; + + this.resultValue = parser.parser.parse(this.value.slice(1), { + col: this.position.column, + row: this.position.row + }) + } + // private isCellInRange(root: Spreadsheet): boolean { // const { column, row } = this.position; // const { selectedRange } = root.selection; diff --git a/src/modules/events.ts b/src/modules/events.ts index d13bf9e..bfafc43 100644 --- a/src/modules/events.ts +++ b/src/modules/events.ts @@ -39,6 +39,7 @@ export type ActionTypes = | ChangeCellEvent | CopyAction; + export class Events { root: Spreadsheet; @@ -46,7 +47,7 @@ export class Events { this.root = root; } - dispatch(action: ActionTypes) { + async dispatch(action: ActionTypes) { switch (action.type) { case EventTypes.CELL_CLICK: { const { event, scroller } = action; @@ -68,9 +69,20 @@ export class Events { case EventTypes.CELL_CHANGE: { const { cell, enableCallback } = action; - // - //* Here may be side effects - // + if (cell.value.substring(0, 1).startsWith('=')) { + try { + await cell.evalFormula(this.root.formulaParser) + cell.displayValue = cell.resultValue + this.root.renderCell(cell.position.row, cell.position.column) + this.changeCellValues(cell, enableCallback); + return; + } + catch (err) { + console.error(err) + } + } + + this.root.renderCell(cell.position.row, cell.position.column) this.changeCellValues(cell, enableCallback); break; } diff --git a/src/modules/formulaParser.ts b/src/modules/formulaParser.ts new file mode 100644 index 0000000..e5819dc --- /dev/null +++ b/src/modules/formulaParser.ts @@ -0,0 +1,23 @@ +import Parser, { DepParser } from 'fast-formula-parser' +import Spreadsheet from '../main' + +export class FormulaParser { + parser: Parser + depParser: DepParser + root: Spreadsheet + constructor(root: Spreadsheet) { + this.root = root + + this.parser = new Parser({ + onCell: ({col, row}) => { + const cell = this.root.data[row - 1][col - 1] + const cellValue = cell.resultValue.length > 0 ? cell.resultValue : cell.value + if( cellValue && isNaN(Number(cellValue)) === false) return Number(cellValue) + return this.root.data[row - 1][col - 1].resultValue ?? '' + }, + }) + + this.depParser = new DepParser({}) + this.depParser + } +} \ No newline at end of file diff --git a/src/types/fast-formula-parser.d.ts b/src/types/fast-formula-parser.d.ts new file mode 100644 index 0000000..42c90b1 --- /dev/null +++ b/src/types/fast-formula-parser.d.ts @@ -0,0 +1,68 @@ +declare module 'fast-formula-parser' { + export type PositionWithSheet = { + sheet?: string + row: number + col: number + } + + export type FunctionArgument = { + isArray: boolean + isCellRef: boolean + isRangeRef: boolean + value: string | number + } + + export type Position = { + col: number + row: number + } + + export type RangeReference = { + sheet?: string + from: Position, + to: Position + } + + export type Config = { + functions?: Record string> + functionsNeedContext?: (context: Parser, ...args: FunctionArgument[]) => string + onCell?: (position: PositionWithSheet) => number | string + onRange?: (ref) => Array[] + onVariable?: (name: string, sheetName: string) => RangeReference + } + + export const Types = { + NUMBER: 0, + ARRAY: 1, + BOOLEAN: 2, + STRING: 3, + RANGE_REF: 4, // can be 'A:C' or '1:4', not only 'A1:C3' + CELL_REF: 5, + COLLECTIONS: 6, // Unions of references + NUMBER_NO_BOOLEAN: 10, + }; + + export const Factorials: number[] + + export default class Parser { + constructor(config: Config) + parse: (expression: string, position: PositionWithSheet) => string + parseAsync: (expression: string, position: PositionWithSheet) => Promise + + } + + + type FormulaHelpersType = { + accept: (param: FunctionArgument, type?: number, defValue?: number | string, flat?: boolean, allowSingleValue?: boolean) => number | string + type: (variable) => number + isRangeRef: (param) => boolean + isCellRef: (param) => boolean + } + + export class DepParser { + constructor(config?: {onVariable?: (name: string, sheetName: string) => RangeReference}) + parse(expression: string, position: PositionWithSheet): PositionWithSheet[] + } + + export const FormulaHelpers: FormulaHelpersType +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 376766e..182ee43 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,7 +5,7 @@ "types": ["vite/client", "node"], "allowJs": false, "skipLibCheck": true, - "esModuleInterop": false, + "esModuleInterop": true, "allowSyntheticDefaultImports": true, "strict": true, "forceConsistentCasingInFileNames": true,