@sheetxl/grid-react 0.7.4 → 0.7.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,6 +1,10 @@
1
1
  # Grid React
2
2
 
3
- ![SheetXL](https://www.sheetxl.com/logo-text.svg)
3
+ <p align="center">
4
+ <a href="https://www.sheetxl.com" target="_blank">
5
+ <img src="https://www.sheetxl.com/logo-text.svg" alt="SheetXL Logo" width="180" />
6
+ </a>
7
+ </p>
4
8
 
5
9
  An advanced standalone data-grid component available for all [SheetXL](https://www.sheetxl.com) projects.
6
10
 
@@ -10,12 +14,12 @@ This package will generally not be used by itself but rather as a dependency of
10
14
 
11
15
  Whether you're ready to build, need help, or just want to see more examples, here's where to go next.
12
16
 
17
+ * 💬 **[Join our Discord Community](https://discord.gg/NTKdwUgK9p)** - Get help and connect with the team.
18
+ * ⭐ **[Star us on GitHub](https://github.com/sheetxl/sheetxl)** - If you like SheetXL give us a star ⭐ and help others find us!
13
19
  * 📘 **[Developer Docs](https://www.sheetxl.com/docs)** - Guides and tutorials.
14
20
  * 🔌 **[API Reference](https://api.sheetxl.com)** - Detailed documentation for all packages.
15
- * 🌐 **[Live Demo Gallery](https://www.sheetxl.com/demos)** - A showcase of interactive examples.
16
- * ✨ **[Storybook](https://storybook.sheetxl.com)** - Explore and test individual UI components.
17
- * 💬 **[Join our Discord Community](https://discord.gg/NTKdwUgK9p)** - Get help and connect with the team.
18
- * ⭐ **[Star us on GitHub](https://github.com/sheetxl)** - If you find SheetXL useful, we'd appreciate a star!
21
+ * 👀 **[Live Demo Gallery](https://www.sheetxl.com/demos)** - A showcase of interactive examples.
22
+ * 🖼️ **[Storybook](https://storybook.sheetxl.com)** - Explore and test individual UI components.
19
23
  * 🌐 **[Website](https://www.sheetxl.com)** - Our Website.
20
24
 
21
25
  ---
@@ -1,6 +1,6 @@
1
1
  (function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode("._sheetxl-grid_h9wwa_7{position:relative;box-sizing:border-box;user-select:none}._sheetxl-grid_h9wwa_7 *{box-sizing:border-box!important}._sheetxl-grid_h9wwa_7 *:focus{outline:none}._sheetxl-grid_h9wwa_7 .cell-container{position:absolute;overflow:visible;white-space:pre}._sheetxl-grid_h9wwa_7 .cell-container>*{inset:0;position:absolute}._sheetxl-grid_h9wwa_7 .sheetxl-stage{contain:strict}._sheetxl-grid_h9wwa_7 .sheetxl-stage>*{contain:strict}")),document.head.appendChild(e)}}catch(t){console.error("vite-plugin-css-injected-by-js",t)}})();
2
2
  "use strict";/**
3
- * @license @sheetxl/grid-react - Grid React - Advanced grid component for React - v0.7.4
3
+ * @license @sheetxl/grid-react - Grid React - Advanced grid component for React - v0.7.6
4
4
  *
5
5
  * (C) 2025-present SheetXL Inc. & Michael T. Ford
6
6
  * License: The license can be found at https://www.sheetxl.com/license.
@@ -9,4 +9,4 @@
9
9
  stroke-dashoffset: 0px;
10
10
  }
11
11
  }`,se=document.createElement("style");return se.appendChild(document.createTextNode(F)),document.head.appendChild(se),se.sheet.insertRule(F,0),()=>{document.head.removeChild(se)}},[z]),z&&(D={strokeDasharray:`${q.dashLength}px ${q.dashGap}px`,strokeDashoffset:`${N}px`,animation:`${_} ${J}ms linear infinite`,willChange:"stroke-dashoffset"}),ne.jsx(ro,{x:c,y:u,width:d,height:a,stroke:o,fill:i,shapeRendering:"crispEdges",style:{...D,...s},...U})});function lo(t){var o,i,c="";if(typeof t=="string"||typeof t=="number")c+=t;else if(typeof t=="object")if(Array.isArray(t)){var u=t.length;for(o=0;o<u;o++)t[o]&&(i=lo(t[o]))&&(c&&(c+=" "),c+=i)}else for(i in t)t[i]&&(c&&(c+=" "),c+=i);return c}function Wt(){for(var t,o,i=0,c="",u=arguments.length;i<u;i++)(t=arguments[i])&&(o=lo(t))&&(c&&(c+=" "),c+=o);return c}zn.displayName="Selection";const Tn=l.memo(l.forwardRef((t,o)=>{const{x:i=0,y:c=0,borderWidth:u=1,size:d=6,borderStroke:a,corner:s,style:w,className:M,background:A,...k}=t;if(i===0||c===0)return null;let U=!0,z=!0,q=!0,N=!0;switch(s){case"tl":U=!1,z=!1;break;case"bl":U=!1,N=!1;break;case"br":q=!1,N=!1;break;case"tr":z=!1,q=!1}return ne.jsx("div",{className:Wt("fill-handle",M),style:{position:"absolute",left:i-(d+(U?u:0))/2,top:c-(d+(z?u:0))/2,width:d,height:d,borderLeft:U?`${u}px ${a}`:void 0,borderTop:z?`${u}px ${a}`:void 0,borderRight:q?`${u}px ${a}`:void 0,borderBottom:N?`${u}px ${a}`:void 0,background:A,cursor:"crosshair",pointerEvents:"all",transitionDuration:"0ms",transitionTimingFunction:"linear",transitionDelay:"0",transitionProperty:"left, top",willChange:"left, top",...w},tabIndex:-1,...k})}));function Mn(t,o){if(typeof t=="function")return t(o);t&&(t.current=o)}Tn.displayName="FillHandle";var Po=parseInt(l.version.split(".")[0],10)>=19?function(t){return o=>{const i=[];for(const c of t){const u=Mn(c,o),d=typeof u=="function";i.push(d?u:()=>Mn(c,null))}return()=>{for(const c of i)c()}}}:function(t){return o=>{for(const i of t)Mn(i,o)}};const Uo=n.ReactUtils.detectIt().supportsTouchEvents,fn=l.memo(l.forwardRef((t,o)=>{const{range:i,view:c,anchor:u,borderStroke:d="rgb(33, 115, 70)",background:a="white",borderWidth:s=1.5,size:w=22,style:M,className:A,selectionTouchPointerHandler:k,onTouchSelectStart:U,onTouchSelectEnd:z,currentTouchAnchor:q,scrollableElement:N,scrollableRoot:J,...Ce}=t;if(!Uo)return null;const _=n.useCallbackRef(U,[U]),D=n.useCallbackRef(z,[z]),{bounds:F,coordsPivot:se,key:P}=l.useMemo(()=>{if(!i||!c)return null;let Se=null,G=null;switch(u){case"tl":Se={colIndex:i.colEnd,rowIndex:i.rowEnd},G={colIndex:i.colStart,rowIndex:i.rowStart};break;case"br":Se={colIndex:i.colStart,rowIndex:i.rowStart},G={colIndex:i.colEnd,rowIndex:i.rowEnd};break;case"t":case"l":Se={colIndex:i.colEnd,rowIndex:i.rowEnd};break;case"b":Se={colIndex:i.colStart,rowIndex:i.rowStart};break;case"r":Se={colIndex:i.colStart,rowIndex:i.rowEnd}}let L=c.getRangeCoordsBounds(G?{rowStart:G.rowIndex,colStart:G.colIndex,rowEnd:G.rowIndex,colEnd:G.colIndex}:i);const Y=c.getBounds(),mt=c.getViewportSize(),gt=Y.x,it=Y.y,ot=mt.width,de=mt.height;switch(u){case"tl":break;case"br":L.x=L.x+L.width,L.y=L.y+L.height;break;case"t":L.x=ot/2-gt;break;case"b":L.x=ot/2-gt,L.y=L.y+L.height;break;case"l":L.y=de/2-it;break;case"r":L.x=L.x+L.width,L.y=de/2-it}const Pt=c.toClipBounds(L,0);return!Pt||Pt.width<=0||Pt.height<=0||L.x<0||L.y<0||L.x>ot||L.y>de?{bounds:null,coordsAnchor:null,coordsPivot:null,key:null}:{bounds:L,coordsAnchor:null,coordsPivot:Se,key:"touchSelect-"+c.getAnchor()+"-"+u}},[i,c,u]),ie=l.useRef(null),ze=l.useMemo(()=>{const Se=G=>u==="t"||u==="b"?{...G,colIndex:void 0}:u==="l"||u==="r"?{...G,rowIndex:void 0}:G;return{processTouch:!0,consumeTouch:!0,onPointerDown:(G,L)=>{const Y=Se(c.getCellCoordsFromClient(G.clientX,G.clientY));return ie.current={coordsPivot:se},_?.(u),k.onSelectionPointerDown(G,L,c,Y,se,!1,!0)},onPointerMoveOrWait:(G,L,Y)=>{const mt=Se(c.getCellCoordsFromClient(G.clientX,G.clientY));return k.onSelectionPointerMoveOrWait(G,L,Y,c,mt,ie.current?.coordsPivot,!0,!0)},onPointerUp:(G,L,Y)=>(ie.current=null,D?.(u),k.onPointerUp(G,L,Y))}},[k,i,c,u]),ve=n.useSynchronizedPointerHandler(ze),[Ae,{y:ae,x:xe}]=oo(),$=l.useRef(null),{getPortalContainer:C,isFullscreen:Fe}=n.useFullscreenPortal(),[Ve,ee]=l.useState(null);return l.useEffect(()=>{const Se=$.current?.getBoundingClientRect();if(!Se||!F)return void ee(null);let G=0,L=0,Y=N;for(;Y;)G+=Y.scrollLeft,L+=Y.scrollTop,Y=J&&Y===J.parentElement?null:Y.parentElement;ee(Jn.createPortal(ne.jsx("div",{className:Wt("touch-select-handle",A),ref:o,style:{position:"absolute",left:G+(Se?.x??0)-(w+s)/2,top:L+(Se?.y??0)-(w+s)/2,width:w,height:w,borderWidth:`${s}px`,border:d,borderRadius:"50%",background:a,boxShadow:`0 0 0 1.5px ${a}`,cursor:"grab",pointerEvents:"all",opacity:q?0:1,transitionDuration:"160ms",transitionProperty:"opacity",...M},tabIndex:-1,onPointerDown:ve,...Ce}),J??C(),P))},[ae,xe,F?.x,F?.y,F?.width,F?.height,A,q,a,w,s,d,N,Fe]),F?ne.jsxs(ne.Fragment,{children:[ne.jsx("div",{ref:Po([Ae,$]),style:{position:"absolute",left:F.x,top:F.y,opacity:0}}),Ve]}):null}));fn.displayName="TouchSelectHandle";const It=-10,To=Object.freeze({rowStart:0,colStart:0,rowEnd:0,colEnd:0}),io=Object.freeze({colIndex:0,rowIndex:0}),Ln=Object.freeze([]),Rt=t=>{if(t&&t.cell&&t.ranges&&t.rangeIndex>-1&&t.rangeIndex<=t.ranges.length)return t;const o={cell:null,ranges:t?.ranges??Ln};return o.rangeIndex=t?.rangeIndex??o.ranges.length-1,o.cell=t?.cell,!o.cell&&o.ranges.length>0&&(o.cell={rowIndex:o.ranges[o.rangeIndex].rowStart,colIndex:o.ranges[o.rangeIndex].colStart}),o.cell||(o.cell=io),r.CoordUtils.isEqualSelectionCoords(o,t)?t:o},hn=(t,o,i)=>{const c=t.getVisibleRangeCoords(),u=t.getScrollOrientation();!u.horizontal&&(o.colIndex>c.colEnd||o.colIndex<c.colStart)&&(o={...o,colIndex:o.colIndex>c.colEnd?c.colEnd+1:c.colEnd-1},t=i.current.getViewFromLocation(r.AnchorLocation.Center)),!u.vertical&&(o.rowIndex>c.rowEnd||o.rowIndex<c.rowStart)&&(o={...o,rowIndex:o.rowIndex>c.rowEnd?c.rowEnd+1:c.rowEnd-1},t=i.current.getViewFromLocation(r.AnchorLocation.Center)),t.scrollCellCoordsIntoView(o)},Lo=()=>!1;function gn(t,o){if(!t)throw new Error("Invariant failed")}const _n={"sheetxl-grid":"_sheetxl-grid_h9wwa_7"},Oo=Object.freeze({top:0,left:0}),zo=Object.freeze({bottom:-4,right:-4}),Ao=Object.freeze({horizontal:!0,vertical:!0}),Gn=[r.AnchorLocation.TopLeft,r.AnchorLocation.Top,r.AnchorLocation.Left,r.AnchorLocation.Center],zt=3e3,Dn={},An=l.memo(l.forwardRef((t,o)=>{const{width:i,height:c,rowCount:u=1,columnCount:d=1,defaultRowHeight:a,defaultColumnWidth:s,getRowHeight:w,getColumnWidth:M,layout:A,onViewportScroll:k,onImmediateScroll:U,showGridLines:z=!0,gridLineColor:q="rgb(224, 224, 224)",gridLineRowsProps:N,gridLineColumnsProps:J,clipCells:Ce=!0,cursor:_,freezeLeft:D=0,freezeTop:F=0,freezeLeftProps:se,freezeTopProps:P,cellRenderer:ie,onViewportChange:ze,onFirstRender:ve,overlayRenderer:Ae,overlayProps:ae,overlays:xe,overlaysProps:$,allowOverlaysOverflow:C=!1,stageProps:Fe,stageWrapper:Ve=null,hiddenRowsAt:ee,hiddenColumnsAt:Se,hiddenCellAt:G,getVisibleCells:L,zoom:Y=1,enableMouseWheel:mt=!0,onWheelScroll:gt,getCellCoordsAsRangeCoords:it=r.CoordUtils.cellToRange,scrollPoint:ot=Oo,style:de={},...Pt}=t;gn(ie),gn(!t?.children);const T=n.useCallbackRef(U,[U]),y=n.useCallbackRef(ze,[ze]),ye=n.useCallbackRef(k,[k]),oe=n.useCallbackRef(gt,[gt]),he=n.useCallbackRef(ve,[ve]),$e=l.useRef(null),Ge=l.useRef(null),xt=l.useRef(null),[Ze,Tt]=l.useReducer(x=>x+1,0),[ct,S]=l.useState({left:ot?.left??0,top:ot?.top??0,horizontalScrollDirection:null,verticalScrollDirection:null}),re=l.useRef(null),Ne=l.useRef(ct),{top:rt,left:qe,verticalScrollDirection:Ht,horizontalScrollDirection:$t}=ct,St=l.useRef(!1),Xt=eo({rowCount:u,columnCount:d,defaultRowHeight:a,defaultColumnWidth:s,getRowHeight:w,getColumnWidth:M}),At=l.useRef(null),Re=l.useMemo(()=>{const x=A||Xt;return At.current=null,{getColOffset:b=>x.getColOffset(b)*Y,getColIndex:b=>x.getColIndex(b/Y),getRowOffset:b=>x.getRowOffset(b)*Y,getRowIndex:b=>x.getRowIndex(b/Y)}},[Xt,A,Y]),Ut=(x,b,O)=>{const R=(b?.left??0)+0,v=(b?.top??0)+0;return{getColOffset:B=>x.getColOffset(B)-R,getColIndex:B=>x.getColIndex(B+R),getRowOffset:B=>x.getRowOffset(B)-v,getRowIndex:B=>x.getRowIndex(B+v)}},at=l.useCallback((x,b=!1)=>wn(x,b,Re.getRowOffset,b?0:u),[u,Re?.getRowOffset]),kt=n.useCallbackRef(ee??at,[ee]),en=l.useCallback((x,b=!1)=>wn(x,b,Re.getColOffset,b?d:0),[d,Re?.getColOffset]),jt=n.useCallbackRef(Se??en,[Se]),Be=l.useMemo(()=>Math.min(i??800,Re.getColOffset(d)),[Re.getColOffset,d,i]),Te=l.useMemo(()=>Math.min(c??600,Re.getRowOffset(u)),[Re.getRowOffset,u,c]),Kt=l.useCallback(x=>{r.CommonUtils.canUseDOM&&setTimeout(()=>{$e.current?.focus({preventScroll:!0,...x})},0)},[]),dt=l.useCallback(x=>$e.current?.contains(x)||Ge.current?.contains(x),[]);l.useEffect(()=>{St.current&&(re.current&&re.current.left!==Ne.current?.left&&re.current.top!==Ne.current?.top||(re.current=null,ye?.({left:qe,top:rt})))},[qe,rt]);const Lt=n.useCallbackRef(()=>({top:rt,left:qe}),[rt,qe]),Ee=l.useMemo(()=>{const x=[];let b=0,O=0;typeof F=="number"?b=F:(b=F.index??0,O=(F.scrollOffset??0)*Y);const R=O,v=Re.getRowOffset(b),B=v-R;if(b>0){const He=Ut(Re,{top:O+Re.getRowOffset(0)}),ke=Re.getRowIndex(R),De=Re.getRowIndex(v-1);let Ke;x[1]={minIndex:ke,maxIndex:De,minCoord:0,maxCoord:b-1,minBounds:0,maxBounds:B,visibleIndices:()=>Ke||(Ke=Object.freeze(un(kt,ke,De)),Ke),layout:He,maxVirtualBounds:v,scrollOffset:O,freezeOffset:O}}const Z=Math.max(0,Te-B),te=Ut(Re,{top:rt+B}),le=te.getRowIndex(0),K=te.getRowIndex(Z);let pe;return x[0]={minIndex:le,maxIndex:K,minCoord:b,maxCoord:u-1,minBounds:B,maxBounds:Z,visibleIndices:()=>pe||(pe=Object.freeze(un(kt,le,K)),pe),layout:te,maxVirtualBounds:Re.getRowOffset(u),scrollOffset:rt,freezeOffset:(b>0?Re.getRowOffset(b):0)-O},x},[Re.getRowIndex,Re.getRowOffset,kt,Te,u,F,rt,Y]),We=l.useMemo(()=>{const x=[];let b=0,O=0;typeof D=="number"?b=D:(b=D.index??0,O=(D.scrollOffset??0)*Y);const R=O,v=Re.getColOffset(b),B=v-R;if(b>0){const He=Ut(Re,{left:O+Re.getColOffset(0)}),ke=Re.getColIndex(R),De=Re.getColIndex(v-1);let Ke;x[1]={minIndex:ke,maxIndex:De,minCoord:0,maxCoord:b-1,minBounds:0,maxBounds:B,visibleIndices:()=>Ke||(Ke=Object.freeze(un(jt,ke,De)),Ke),layout:He,maxVirtualBounds:v,scrollOffset:O,freezeOffset:O}}const Z=Math.max(0,Be-B),te=Ut(Re,{left:qe+B}),le=te.getColIndex(0),K=te.getColIndex(Z);let pe;return x[0]={minIndex:le,maxIndex:K,minCoord:b,maxCoord:d-1,minBounds:B,maxBounds:Z,visibleIndices:()=>pe||(pe=Object.freeze(un(jt,le,K)),pe),layout:te,maxVirtualBounds:Re.getColOffset(d),scrollOffset:qe,freezeOffset:(b>0?Re.getColOffset(b):0)-O},x},[Re.getColIndex,Re.getColOffset,jt,Be,d,D,qe,Y]),lt=l.useRef({}),wt=l.useRef([]),Ie=l.useMemo(()=>{let x={};const b=(R,v,B,Z,te)=>{const le={vertical:Z?.vertical||!1,horizontal:Z?.horizontal||!1};if(R>=We.length||v>=Ee.length)return null;const K={rowStart:Ee[v].minIndex,colStart:We[R].minIndex,rowEnd:Ee[v].maxIndex,colEnd:We[R].maxIndex};if(K.rowStart>K.rowEnd||K.colStart>K.colEnd)return null;const pe={getColIndex:ge=>We[R].layout.getColIndex(ge),getColOffset:ge=>We[R].layout.getColOffset(ge),getRowIndex:ge=>Ee[v].layout.getRowIndex(ge),getRowOffset:ge=>Ee[v].layout.getRowOffset(ge)},He=Object.freeze({left:te?.left??0,top:te?.top??0,right:te?.right??0,bottom:te?.bottom??0}),ke=Object.freeze({x:We[R].minBounds,y:Ee[v].minBounds,width:We[R].maxBounds,height:Ee[v].maxBounds}),De=(ge,je)=>Yn(pe,ge??K,je),Ke={width:We[R].maxVirtualBounds,height:Ee[v].maxVirtualBounds},be={left:We[R].scrollOffset,top:Ee[v].scrollOffset},ut={left:We[R].freezeOffset,top:Ee[v].freezeOffset},Qe={width:Be,height:Te};let Ue=null,me=null;const Je=(ut.top+(Z.vertical?be.top:0))/Y,vt=(ut.left+(Z.horizontal?be.left:0))/Y;return{getStage:()=>$e.current??null,getVisibleRangeCoords:()=>K,toClipBounds:(ge,je)=>{let Ct,Le=0;return je===void 0||typeof je=="number"?(Ct=De(K),Le=je):Ct=je,((Xe,Pe,Me=0)=>{if(Xe.x>Pe.width||Xe.y>Pe.height)return null;const st={left:Xe.x,top:Xe.y,bottom:Xe.height+Xe.y,right:Xe.width+Xe.x},et={left:Pe.x+Me,top:Pe.y+Me,bottom:Pe.height-2*Me+Pe.y,right:Pe.width-2*Me+Pe.x},ht={left:Math.max(st.left,et.left),top:Math.max(st.top,et.top),bottom:Math.min(st.bottom,et.bottom),right:Math.min(st.right,et.right)},Et={x:ht.left,y:ht.top,width:ht.right-ht.left,height:ht.bottom-ht.top};return Et.height<0||Et.width<0?null:Et})(ge??{x:0,y:0,width:ke.width,height:ke.height},Ct,Le)},toViewBounds:ge=>vt===0&&Je===0&&Y===1?ge:{x:(ge.x-vt)*Y,y:(ge.y-Je)*Y,width:ge.width*Y,height:ge.height*Y},toAbsoluteBounds:ge=>vt===0&&Je===0&&Y===1?ge:{x:ge.x/Y+vt,y:ge.y/Y+Je,width:ge.width/Y,height:ge.height/Y},getRelativePointFromClient:(ge,je)=>{const Ct=Nt(ge,je);return{x:Ct.x-ke.x,y:Ct.y-ke.y}},getLayout:()=>pe,getCellCoordsAsRangeCoords:it,getVisibleColumns:()=>We[R].visibleIndices(),getVisibleRows:()=>Ee[v].visibleIndices(),getVisibleColumnOffsets:()=>(Ue||(Ue=qn(We[R].layout,!0,We[R].visibleIndices(),K.colStart,K.colEnd)),Ue),getVisibleRowOffsets:()=>(me||(me=qn(Ee[v].layout,!1,Ee[v].visibleIndices(),K.rowStart,K.rowEnd)),me),getTotalRangeCoords:()=>({colStart:We[R].minCoord,colEnd:We[R].maxCoord,rowStart:Ee[v].minCoord,rowEnd:Ee[v].maxCoord}),getRangeCoordsBounds:De,scrollCellCoordsIntoView:(ge,je)=>_t(ge,je,B),getCellCoordsFromClient:(ge,je,Ct=!1)=>{const Le=Nt(ge,je);if(!Le)return null;const Xe=pe.getColIndex(Le.x-ke.x),Pe={rowIndex:pe.getRowIndex(Le.y-ke.y),colIndex:Xe};if(Ct)return Pe;const Me=it(Pe);return{rowIndex:Me.rowStart,colIndex:Me.colStart}},getZoom:()=>Y,getAnchor:()=>B,getBounds:()=>ke,getInsets:()=>He,getTotalSize:()=>Ke,getViewportSize:()=>Qe,getScrollTopLeft:()=>be,getFreezeTopLeft:()=>ut,getScrollOrientation:()=>le,allViews:()=>x}};let O=x[r.AnchorLocation.Center]=b(0,0,r.AnchorLocation.Center,Ao,zo);return O&&(x[r.AnchorLocation.Center]=O),O=b(0,1,r.AnchorLocation.Top,{horizontal:!0}),O&&(x[r.AnchorLocation.Top]=O),O=b(1,0,r.AnchorLocation.Left,{vertical:!0}),O&&(x[r.AnchorLocation.Left]=O),O=b(1,1,r.AnchorLocation.TopLeft,{}),O&&(x[r.AnchorLocation.TopLeft]=O),lt.current=null,x=Object.freeze(x)},[Ee,We,it]),Bt=Object.keys(Ie),bt=We[0]?.maxVirtualBounds??0,Ye=Ee[0]?.maxVirtualBounds??0,pt=l.useMemo(()=>({left:We[1]?We[1].layout.getColOffset(We[1].maxIndex+1):0,top:Ee[1]?Ee[1].layout.getRowOffset(Ee[1].maxIndex+1):0}),[Ie]);l.useEffect(()=>{if(wt.current.length>0){for(let x=0;x<wt.current.length;x++)wt.current[x]();wt.current=[]}},[Ie]);const yt=n.useCallbackRef(()=>({containerWidth:Be,containerHeight:Te,totalWidth:bt,totalHeight:Ye}),[Be,Te,Re]);l.useEffect(()=>{!re.current&&St.current&&y({top:rt,left:qe,width:Be,height:Te,totalWidth:bt,totalHeight:Ye})},[rt,qe,bt,Ye]),l.useEffect(()=>{St.current&&y({top:rt,left:qe,width:Be,height:Te,totalWidth:bt,totalHeight:Ye})},[Be,Te]);const Nt=l.useCallback((x,b)=>{gn(typeof x=="number"&&typeof b=="number");const O=$e.current?.getBoundingClientRect();return O?{x:x-O.x,y:b-O.y}:{x,y:b}},[]),xn=n.useCallbackRef(x=>Ie[x]||null,[Ie]),pn=n.useCallbackRef((x,b)=>{if(Object.keys(Ie).length===1)return Ie[r.AnchorLocation.Center];const O=Nt(x,b);if(!O)return null;const{x:R,y:v}=O;let B=null;const Z=Gn,te=Z.length;for(let le=0;!B&&le<te;le++){const K=Ie[Z[le]];K&&Do(R,v,K.getBounds())&&(B=K)}return B||(B=Ie[r.AnchorLocation.Center]),B},[Ie,it]),_e=n.useCallbackRef(()=>Ie[r.AnchorLocation.Center].getVisibleRangeCoords(),[Ie[r.AnchorLocation.Center]]),Ot=l.useRef(null),mn=l.useCallback(()=>{Ot.current!==null&&r.CommonUtils.cancelTimeout(Ot.current),Ot.current=r.CommonUtils.requestTimeout(Cn,150)},[]),Cn=l.useCallback(()=>{Ot.current=null,S(x=>{const b={...x,verticalScrollDirection:null,horizontalScrollDirection:null};return Ne.current=b,b})},[]),Ft=n.useCallbackRef(x=>{const b=x?.left??x?.[0],O=x?.top??x?.[1],R=b!==void 0?Math.min(bt-Be,Math.max(We?.[1]?.scrollOffset??0,b)):Ne.current.left,v=O!==void 0?Math.min(Ye-Te,Math.max(Ee?.[1]?.scrollOffset??0,O)):Ne.current.top;if(Ne.current.left===R&&Ne.current.top===v)return;let B=null,Z=null;Ne.current.left>R?B=r.Direction.Left:Ne.current.left<R&&(B=r.Direction.Right),Ne.current.top>v?Z=r.Direction.Up:Ne.current.top<v&&(Z=r.Direction.Down),r.CommonUtils.throttle(()=>{S(te=>{const le={...te,left:R,top:v,horizontalScrollDirection:B,verticalScrollDirection:Z};return Ne.current=le,le})},17)(),re.current?.top===v&&re.current?.left===R||(re.current={left:R,top:v},T({left:R,top:v}),y({left:R,top:v,width:Be,height:Te,totalWidth:bt,totalHeight:Ye})),mn()},[bt,Ye,Ee,We]);l.useEffect(()=>{re.current||Ft({left:qe,top:rt})},[bt,Be,Ye,Te]),l.useLayoutEffect(()=>{re.current={left:ot?.left,top:ot?.top},Ft(re.current)},[ot?.left,ot?.top]);const tn=n.useCallbackRef(x=>{const b=x?.left??x?.[0],O=x?.top??x?.[1],R=x?.behavior??"auto",v={left:Ne.current.left+(b??0),top:Ne.current.top+(O??0)};R&&(v.behavior=R),Ft(v)},[bt,Be,Ye,Te]),nn=l.useCallback(x=>{let b=null;if(Object.keys(Ie).length>1){const O=Gn,R=O.length;for(let v=0;!b&&v<R;v++){const B=Ie[O[v]];B&&r.CoordUtils.isCellWithinRange(x,B.getVisibleRangeCoords())&&(b=B)}}return b||(b=Ie[r.AnchorLocation.Center]),b},[Ie]),_t=n.useCallbackRef((x,b={inline:"nearest",block:"nearest"},O=null)=>{const R={rowIndex:0,colIndex:0,...x};let v=null;if(O!==null){if(v=Ie[O],v===null)return new Promise((Qe,Ue)=>{Ue("Invalid view")})}else v=nn(R);const B=it(R),Z=v.getLayout(),te=Z.getColOffset(B.colStart),le=Z.getRowOffset(B.rowStart),K=Z.getColOffset(B.colEnd+1),pe=Z.getRowOffset(B.rowEnd+1),He=v.getBounds(),ke=v.getTotalSize(),De=v.getScrollTopLeft(),Ke=((Qe,Ue,me=!0)=>(me=me===!0?{block:"start",inline:"end"}:me===!1?{block:"end",inline:"end"}:{block:"end",inline:"end",...me},{left:Hn(me.inline,Qe.x,Qe.x+Qe.width,Ue.left,Ue.left+Ue.width,Ue.totalWidth),top:Hn(me.block,Qe.y,Qe.y+Qe.height,Ue.top,Ue.top+Ue.height,Ue.totalHeight)}))({x:te+De.left,y:le+De.top,width:K-te,height:pe-le},{left:De.left,top:De.top,width:He.width,height:He.height,totalWidth:ke.width,totalHeight:ke.height},b),be={...Ke};be.left>qe?be.left+=20:be.left<qe&&(be.left-=0),be.top>rt?be.top+=20:be.top<rt&&(be.top-=0);const ut=v.getScrollOrientation();return ut.horizontal&&x.colIndex!==void 0||delete be.left,ut.vertical&&x.rowIndex!==void 0||delete be.top,new Promise((Qe,Ue)=>{try{Ft(be),Qe(be)}catch(me){Ue(me)}})},[bt,Ye,Ie,it]),qt=n.useCallbackRef(x=>{const b=x.shiftKey;x.preventDefault();const{deltaX:O,deltaY:R,deltaMode:v}=x;if(xt.current||oe?.(x)===!1)return;let Z=b?R:O,te=R;const le=b||Math.abs(Z)>Math.abs(te);v===1&&(te*=0),xt.current=window.requestAnimationFrame(()=>{xt.current=null,tn(le?{left:Z}:{top:te})})},[bt,Be,Ye,Te,oe]),Gt=l.useCallback((x=null)=>{At.current=null,lt.current=null,Tt()},[]);l.useLayoutEffect(()=>{Gt()},[ie]);const Vt=n.useImperativeElement(o,()=>({stage:$e.current,focus:Kt,contains:dt,invalidate:Gt,scrollTo:Ft,scrollBy:tn,scrollCellCoordsIntoView:_t,getScrollPosition:Lt,getDimensions:yt,getViewport:_e,handleWheel:qt,rowCount:u,columnCount:d,getLayout:()=>Re,getRelativePointFromClient:Nt,getViewFromClient:pn,getViewFromCellCoords:nn,getViewFromLocation:xn,onViewChangeOnce:x=>{wt.current.push(x)}}),[u,d,Ie]);l.useEffect(()=>(mt&&Vt.current?.addEventListener("wheel",qt,{passive:!1}),St.current=!0,re.current=null,()=>{Vt.current?.removeEventListener("wheel",qt)}),[mt]);const Zt=l.useRef([]),Sn=(x,b)=>{!x||!Ae||(Zt.current=[],b.push(((O,R)=>{const v=`view:${O.getAnchor()}:overlay:${b.length}`,B=Ae?.({key:v,view:O},te=>Zt.current[R]=te);if(!B)return null;const Z=O.getBounds();return ne.jsx("div",{style:{position:"absolute",left:"0px",top:"0px",width:`${Z.width}px`,height:`${Z.height}px`,overflow:"hidden"},children:B},`overlay-${O.getAnchor()}-${R}`)})(x,0)))},bn=l.useMemo(()=>{const x={},b=Object.keys(Ie),O=b.length;for(let R=0;R<O;R++){const v=b[R],B=[];Sn(Ie[v],B),x[v]={overlays:B}}return x},[Ze,Ae,u,d,Ee,We]),on=(x,b,O,R,v,B,Z)=>{if(!x)return;const te=x.getVisibleColumns(),le=x.getVisibleRows();if(te.length===0||le.length===0)return;let K=null;if(L)K=L(x);else{K=[];const Le=le.length,Xe=te.length;for(let Pe=0;Pe<Le;Pe++){const Me=le[Pe];for(let st=0;st<Xe;st++){const et={rowIndex:Me,colIndex:te[st]};if(G?.(et))continue;const ht={coords:et,range:it(et)};K.push(ht)}}}const pe=x.getVisibleColumnOffsets(),He=x.getVisibleRowOffsets(),ke=x.getScrollTopLeft(),De=x.getFreezeTopLeft(),Ke=ke.left+De.left,be=ke.top+De.top,ut=Math.trunc(Ke/zt),Qe=Math.trunc(be/zt),Ue={},me=(Le,Xe,Pe,Me,st)=>{const et=`view:${Le.getAnchor()}:cell:${Wn(Xe.rowIndex,Xe.colIndex)}`,ht=Me.x,Et=Me.y,e=Math.trunc((Ke+ht)/zt)-ut,h=Math.trunc((be+Et)/zt)-Qe;Ue[h]||(Ue[h]={});let g=Ue[h][e];g||(g=Ue[h][e]=[]);let f=B?.get(et);if(!f){const p=(Ke+ht)%zt,I=(be+Et)%zt;f=ie({key:et,coords:Xe,bounds:Me,zoom:Y,range:Pe,view:Le,value:st,style:{left:n.ReactUtils.boundPixel(p),top:n.ReactUtils.boundPixel(I),width:n.ReactUtils.boundPixel(Me.width,!0),height:n.ReactUtils.boundPixel(Me.height,!0)}})}Z?.set(et,f),g.push(f)},Je=K.length;for(let Le=0;K&&Le<Je;Le++){const Xe=K[Le],Pe=Xe?.coords??Xe;if(!Pe)continue;const Me=Xe?.range??{rowStart:Pe.rowIndex,colStart:Pe.colIndex,rowEnd:Pe.rowIndex,colEnd:Pe.colIndex},st=x.getVisibleRangeCoords();if(!r.CoordUtils.isRangesIntersect(Me,st)&&!r.CoordUtils.isRangeWithinRange(Me,st))continue;const et=Me&&!r.CoordUtils.isSingleCell(Me);if(!et&&G?.(Pe))continue;const ht=Pe.rowIndex,Et=Pe.colIndex,e=He[ht],h=pe[Et];let g=null;e&&h&&(g={x:h.offset,y:e.offset,width:h.size,height:e.size});const f=Wn(Me.rowStart,Me.colStart);if(et){if(v.has(f))continue;v.add(f),Me.rowEnd-Me.rowStart>0&&O.push(Me),Me.colEnd-Me.colStart>0&&R.push(Me)}if(et&&(g=Yn(x.getLayout(),Me)),!g){console.warn("no bounds for cell",f);continue}const p=Xe?.value;me(x,Pe,Me,g,p)}const vt=Ke%zt,ge=be%zt,je=Object.keys(Ue),Ct=je.length;for(let Le=0;Le<Ct;Le++){const Xe=je[Le],Pe=Ue[Xe];if(!Pe)continue;const Me=Object.keys(Pe),st=Me.length;for(let et=0;et<st;et++){const ht=Me[et],Et=Pe[ht];if(!Et)continue;const e=parseInt(Xe),h=parseInt(ht),g=e+Qe,f=h+ut,p=`view:${x.getAnchor()}:segment:${f}:${g}`;b.push(ne.jsx("div",{className:"cell-container",style:{transform:`translate(${n.ReactUtils.boundPixel(h*zt-vt,!0)}px, ${n.ReactUtils.boundPixel(e*zt-ge,!0)}px)`,willChange:"transform"},children:Et},p))}}},Mt=l.useMemo(()=>{const x=At.current,b=new Map,O={},R=Object.keys(Ie),v=R.length;for(let B=0;B<v;B++){const Z=R[B],te=[],le=[],K=[];on(Ie[Z],K,te,le,new Set,x,b),O[Z]={cells:K,rangesH:te,rangesV:le}}return At.current=b,O},[Ze,u,d,Ee,We,z,de,Ce,G,L,it]),rn=(x,b,O,R,v)=>{if(x)if(b){const B=`view:${x.getAnchor()}:hl:`,Z=x.getVisibleRows();if(!Z||Z.length===0)return;const te=0,le=x.getBounds().width;let K=[];const pe=v.sort(r.CoordUtils.rowFirstRangeComparator),He=x.getVisibleRangeCoords();for(let ke=0;ke<Z.length&&Z[ke]<=He.rowEnd;ke++){const De=Z[ke];if(De<He.rowStart)continue;let Ke=!1;for(;pe.length>0&&pe[0].rowStart<=De;){const me=pe.shift();me.rowEnd>De&&(K.push(me),Ke=!0)}Ke&&(K=K.sort(r.CoordUtils.columnFirstRangeComparator));const be=x.getLayout(),ut=be.getRowOffset(De+1);let Qe=te;const Ue=K.length;for(let me=0;me<Ue+1;me++){let Je=Qe,vt=le;const ge=K[me];me<Ue&&(vt=Math.min(le,be.getColOffset(ge.colStart)),Qe=Math.min(le,be.getColOffset(ge.colEnd+1))),R.push(l.createElement("path",{d:`M ${n.ReactUtils.boundPixel(Je)} ${n.ReactUtils.boundPixel(ut,!1,O)} L ${n.ReactUtils.boundPixel(vt)} ${n.ReactUtils.boundPixel(ut,!1,O)}`,stroke:q,strokeWidth:1,vectorEffect:"non-scaling-stroke",...N,key:B+De+":"+me}))}for(let me=Ue-1;me>=0;me--)K[me].rowEnd<=Z[ke+1]&&K.splice(me,1)}}else{const B=`view:${x.getAnchor()}:vl:`,Z=x.getVisibleColumns();if(!Z||Z.length===0)return;const te=0,le=x.getBounds().height;let K=[];const pe=v.sort(r.CoordUtils.columnFirstRangeComparator),He=x.getVisibleRangeCoords(),ke=Z.length;for(let De=0;De<ke&&Z[De]<=He.colEnd;De++){const Ke=Z[De];if(Ke<He.colStart)continue;let be=!1;for(;pe.length>0&&pe[0].colStart<=Ke;){const Je=pe.shift();Je.colEnd>Ke&&(K.push(Je),be=!0)}be&&(K=K.sort(r.CoordUtils.rowFirstRangeComparator));const ut=x.getLayout(),Qe=ut.getColOffset(Ke+1);let Ue=te;const me=K.length;for(let Je=0;Je<me+1;Je++){let vt=Ue,ge=le;const je=K[Je];Je<me&&(ge=Math.min(le,ut.getRowOffset(je.rowStart)),Ue=Math.min(le,ut.getRowOffset(je.rowEnd+1)));let Ct=q;R.push(ne.jsx("path",{d:`M ${n.ReactUtils.boundPixel(Qe,!1,O)} ${n.ReactUtils.boundPixel(vt)} L ${n.ReactUtils.boundPixel(Qe,!1,O)} ${n.ReactUtils.boundPixel(ge)}`,stroke:Ct,strokeWidth:1,vectorEffect:"non-scaling-stroke",...J},B+Ke+":"+Je))}for(let Je=me-1;Je>=0;Je--)K[Je].colEnd<=Z[De+1]&&K.splice(Je,1)}}},Jt=x=>{if(!Mt)return;const b={},O=Bt.length;for(let R=0;R<O;R++){const v=Bt[R],B=Ie[v],Z=[];rn(B,x,0,Z,x?Mt[v].rangesH:Mt[v].rangesV);const te=B.getRangeCoordsBounds(),le=Math.ceil(te.width),K=Math.ceil(te.height);b[v]=ne.jsx("svg",{width:`${le}`,height:`${K}`,viewBox:`0 0 ${le} ${K}`,preserveAspectRatio:"none",shapeRendering:"crispEdges",style:{position:"absolute"},children:Z})}return b},ln=l.useMemo(()=>z===!0||z?.horizontal===!0?Jt(!0):null,[Ze,z,Ee,F,D,q,N,u,d,Be,bt,Mt]),cn=l.useMemo(()=>z===!0||z?.vertical===!0?Jt(!1):null,[Ze,z,We,F,D,q,J,u,d,Te,Ye,Mt]),yn=l.useMemo(()=>pt.left===0?null:ne.jsx(Un,{linePoints:[0,0,0,Te+1],bounds:{x:pt.left,y:0,width:1,height:Te+1},...se}),[Ze,pt.left,Te,se]),vn=l.useMemo(()=>pt.top===0?null:ne.jsx(Un,{linePoints:[0,0,Be+1,0],bounds:{x:0,y:pt.top,width:Be+1,height:1},...P}),[Ze,pt.top,Be,P]),Qt=l.useMemo(()=>{const x=[],b=R=>{if(!R||!Ie[R])return;const v=Ie[R].getBounds();return ne.jsxs("div",{style:{position:"absolute",pointerEvents:"none",left:v.x,top:v.y,width:v.width,height:v.height,clip:`rect(0, ${v.width+1}px, ${v.height+1}px, 0)`},className:`view view-${R}`,children:[ln?.[R],cn?.[R],Mt?.[R].cells]},`view:${R}`)},O=Bt.length;for(let R=0;R<O;R++)x.push(b(Bt[R]));return ne.jsx(ne.Fragment,{children:x})},[Ie,ln,cn,Mt]),Rn=l.useMemo(()=>{if(!o)return;const x=(te,le,K,pe)=>{if(!pe||pe.length===0)return;const He=[],ke=pe.length;for(let De=0;De<ke;De++){const Ke=pe[De];let be=te?.get(Ke);be!==Dn&&(be=Ke(K)??Dn),le.set(Ke,be),be&&be!==Dn&&He.push(be)}return He},b=(te,le,K)=>{if(!K)return;const pe=K.getBounds(),He=K.getInsets(),ke=K.getAnchor();return ne.jsxs("div",{className:Wt("view",`view-${ke}`,_n.view),style:{position:"absolute",pointerEvents:"none",left:pe.x-He.left,top:pe.y-He.top,width:pe.width-(He.left+He.right),height:pe.height-(He.top+He.bottom),clipPath:C?"inset(-2px)":"inset(0px)"},children:[x(te,le,K,xe),bn?.[ke].overlays]},`view:${ke}`)},O=lt.current,R={},v=[],B=Object.keys(Ie),Z=B.length;for(let te=0;te<Z;te++){const le=B[te],K=O?.[le],pe=R[le]=new Map;v.push(b(K,pe,Ie[le]))}return lt.current=R,v},[Ze,Ie,C,xe]),En=l.useMemo(()=>{const{style:x,...b}=Fe??{};return ne.jsx("div",{style:{width:Be,height:Te,...x},className:"sheetxl-stage",tabIndex:0,ref:$e,...b,...Pt,children:Ve?Ve(Qt):Qt})},[Be,Te,Qt,Fe,Ve]),sn=l.useRef(!1);return l.useEffect(()=>{!sn.current&&Mt&&(sn.current=!0,he?.(Vt.current))},[Mt]),ne.jsxs("div",{className:Wt("sheetxl-grid",_n["sheetxl-grid"]),style:{overflow:"visible",cursor:_,maxWidth:Be,maxHeight:Te,width:Be,height:Te,...de},ref:Vt,children:[En,ne.jsxs("div",{className:Wt("sheetxl-overlays"),ref:Ge,...$,children:[Rn,yn,vn]})]})}));An.displayName="BaseGrid";const $n=l.memo(l.forwardRef((t,o)=>{const{width:i,height:c,style:u={},className:d,...a}=t,[s,{width:w,height:M}]=no(),A=i??w,k=c??M;return ne.jsx("div",{className:d,style:{...u},children:ne.jsx("div",{style:{position:"relative",top:"0px",left:"0px",width:"100%",height:"100%",maxWidth:"100%",maxHeight:"100%",boxSizing:"content-box"},ref:s,children:ne.jsx(An,{ref:o,width:A,height:k,...a})})})}));$n.displayName="Grid";const co=l.memo(l.forwardRef((t,o)=>{const{showVerticalScrollbar:i,showHorizontalScrollbar:c,createHorizontalScrollbar:u,createVerticalScrollbar:d,createScrollCorner:a,viewport:s,onScrollViewport:w,style:M={},className:A,onScroll:k,...U}=t,[z,q]=l.useState(null),N=l.useRef(null),J=l.useRef(null);gn(!s),l.useImperativeHandle(o,()=>J.current&&N.current?Object.assign(J.current,N.current):null);const Ce=l.useCallback(_=>{J.current?.scrollTo(_),w?.(_)},[]);return ne.jsx(n.ScrollPane,{className:A,style:M,ref:N,showVerticalScrollbar:i,showHorizontalScrollbar:c,createHorizontalScrollbar:u,createVerticalScrollbar:d,createScrollCorner:a,viewport:z,onScrollViewport:Ce,children:ne.jsx($n,{style:{width:"100%",height:"100%"},...U,onViewportChange:_=>q(_),ref:J})})}));co.displayName="ScrollableGrid";const Zn=()=>!1,so=l.memo(t=>{const{index:o,value:i,zoom:c,zoomScale:u=100,headerText:d=xe=>`${xe}`,headerStyle:a,headerStyleSelect:s=a,headerStyleSelectAll:w=s,headerStyleHover:M=w,verticalPadding:A=0,horizontalPadding:k=0,isSelected:U=Zn,isSelectedAll:z=Zn,coords:q,bounds:N,range:J,orientation:Ce,view:_,style:D,...F}=t,se=u/100,P=l.useRef(null),[ie,ze]=l.useState(!1),ve=U?.(o)||!1,Ae=z?.(o)?w:ve?s:a;let ae=Ae;if(ie){let xe=M;typeof M=="function"&&(xe=M(Ae)),ae=r.CommonUtils.mergeContentful(Ae,xe)}return ne.jsx("div",{ref:P,style:{background:ae.fill,color:ae.text?.fill,fontFamily:ae.text?.fontFamily??a.text?.fontFamily,fontSize:96*(ae.text?.fontSize??11)/72*se,fontStyle:ae.text?.fontStyle,fontWeight:ae.text?.fontWeight,lineHeight:1.2,display:"flex",justifyContent:"center",alignItems:"end",pointerEvents:"auto",paddingBottom:`${se}px`,...D,left:D.left-(Ce===r.RangeOrientation.Column?1:0),top:D.top-(Ce===r.RangeOrientation.Row?1:0),width:D.width+1,height:D.height+1,overflow:"hidden"},...F,onMouseMove:xe=>{n.ReactUtils.detectIt().primaryInput!=="touch"&&xe.buttons===0&&ze(!0)},onMouseOut:xe=>{ze(!1)},children:d(o)})});so.displayName="HeaderRenderer";const ao="ew-resize",uo="ns-resize",ho=l.memo(l.forwardRef((t,o)=>{const{orientation:i,view:c,index:u,className:d,style:a,disabled:s=!1,disabledResize:w=!1,isNextHidden:M,isHidden:A,isSelected:k,isSelectedAll:U,showTouchDivider:z,headerStyle:q,headerStyleSelect:N,headerStyleSelectAll:J,headerStyleHover:Ce,bounds:_,onPointerDown:D,onAutoFit:F,...se}=t,P=i===r.RangeOrientation.Column;let ie=q;k&&N&&(ie=N),U&&J&&(ie=J);const ze=n.ReactUtils.detectIt().primaryInput==="touch";let ve=P?14:8,Ae=ve/2,ae=0;M&&(ae=-2),A&&(ae=2),A&&(ve=ve/2+ae,Ae=2*ae);let xe=ie.dividerStrokeFill??ie.strokeFill;return!(k||U)&&ae===0&&(xe=`linear-gradient(${P?180:90}deg, ${ie.fill}, ${xe} 55%, ${xe} 100%)`),ne.jsxs("div",{className:Wt("header-divider",{disabled:s},d,`index-${u}`),ref:o,onPointerDown:ze?void 0:D,onDoubleClick:ze?void 0:()=>F?.(),style:{top:(P?0:-ve/2+(ae-1))+"px",left:(P?-ve/2+(ae-1):0)+"px",width:P?ve:"calc(100% + 1px)",height:P?"calc(100% + 1px)":ve,position:"absolute",overflow:"visible",pointerEvents:"all",cursor:s||w||ze?void 0:P?ao:uo,...a},...se,children:[ne.jsx("div",{style:{position:"relative",top:`${P?0:Ae}px`,left:`${P?Ae:0}px`,width:P?1:"100%",height:P?"100%":1,background:xe},onDoubleClick:()=>F?.()}),z&&ze?ne.jsx("div",{style:{position:"absolute",cursor:"grab",zIndex:1,borderRadius:"4px",right:P?"-6px":"2px",bottom:P?"2px":"-9px",height:"24px",width:P?"24px":"18px",maxHeight:P?"calc(100% - 4px)":void 0,maxWidth:P?void 0:"calc(100% - 4px)",background:ie.fill,border:`${J.edgeStrokeFill} solid 1px`,boxShadow:`0.5px 0.5px 0px 0px ${q.text.fill}`,display:"flex",alignItems:"center",justifyContent:"center"},onPointerDown:D,children:ne.jsx("div",{style:{width:"6.4px",height:"12px",backgroundImage:`url("data:image/svg+xml,%3Csvg width='6.4' height='12' viewBox='0 0 9.6 16' version='1.1' fill='${encodeURIComponent(N.text.fill)}' xmlns='http://www.w3.org/2000/svg' xmlns:svg='http://www.w3.org/2000/svg'%3E%3Cpath d='M 9.60008,14.40009 C 9.60008,15.28374 8.88368,16 8.00003,16 7.11639,16 6.40012,15.28374 6.40012,14.40009 c 0,-0.88365 0.71627,-1.60005 1.59991,-1.60005 0.88365,0 1.60005,0.7164 1.60005,1.60005 m 0,-6.40012 c 0,0.88364 -0.7164,1.60004 -1.60005,1.60004 -0.88364,0 -1.59991,-0.7164 -1.59991,-1.60004 0,-0.88365 0.71627,-1.60005 1.59991,-1.60005 0.88365,0 1.60005,0.7164 1.60005,1.60005 m 0,-6.40006 c 0,0.88365 -0.7164,1.60005 -1.60005,1.60005 -0.88364,0 -1.59991,-0.7164 -1.59991,-1.60005 C 6.40012,0.71626 7.11639,0 8.00003,0 8.88368,0 9.60008,0.71626 9.60008,1.59991 M 3.19996,14.40009 C 3.19996,15.28374 2.48369,16 1.60005,16 0.7164,16 0,15.28374 0,14.40009 c 0,-0.88365 0.7164,-1.60005 1.60005,-1.60005 0.88364,0 1.59991,0.7164 1.59991,1.60005 m 0,-6.40012 c 0,0.88364 -0.71627,1.60004 -1.59991,1.60004 C 0.7164,9.60001 0,8.88361 0,7.99997 0,7.11632 0.7164,6.39992 1.60005,6.39992 c 0.88364,0 1.59991,0.7164 1.59991,1.60005 m 0,-6.40006 c 0,0.88365 -0.71627,1.60005 -1.59991,1.60005 C 0.7164,3.19996 0,2.48356 0,1.59991 0,0.71626 0.7164,0 1.60005,0 2.48369,0 3.19996,0.71626 3.19996,1.59991' /%3E%3C/svg%3E%0A")`,backgroundRepeat:"no-repeat",backgroundPosition:"center",transform:P?void 0:"rotate(90deg)"}})}):null]})})),$o=(t,o)=>ne.jsx(ho,{...t,ref:o}),Bo=l.memo(l.forwardRef((t,o)=>{const{orientation:i,view:c,index:u,disabled:d=!1,disabledResize:a=!1,resizeThreshold:s=1,dividerRenderer:w=$o,onDividerMouseDown:M,onDividerResizeStart:A,onDividerResize:k,onDividerResizeEnd:U,onDividerMouseUp:z,onDividerAutoFit:q,onPointerDown:N,...J}=t,Ce=n.useCallbackRef(N,[N]),_=n.useCallbackRef(q,[q]),D=i===r.RangeOrientation.Column;let F=D?c.getVisibleColumns():c.getVisibleRows(),se=null;F.length>0&&(D?se=c.getRangeCoordsBounds({rowStart:0,rowEnd:0,colStart:F[0],colEnd:F[F.length-1]}):c.getRangeCoordsBounds({rowStart:F[0],rowEnd:F[F.length-1],colStart:0,colEnd:0}),se=c.toClipBounds(se,It));const P=l.useRef(null),[ie,ze]=l.useState(null),ve=(ee,Se)=>D?ee.clientX-Se.clientX:ee.clientY-Se.clientY,Ae=c.getLayout(),ae=D?Ae.getColOffset(u+1):Ae.getRowOffset(u+1),xe=n.useSynchronizedPointerHandler({processTouch:!0,onPointerDown:ee=>{if(Ce?.(ee),!d&&!a){const Se=D?Ae.getColOffset(u):Ae.getRowOffset(u),G=ae-Se;P.current={isResizing:!1,startSize:G,index:u,view:c,orientation:i,onDividerMouseDown:M,onDividerResizeStart:A,onDividerResize:k,onDividerResizeEnd:U,onDividerMouseUp:z},ze(P.current),M?.(u,G)}ee.stopPropagation(),ee.preventDefault()},onPointerUp:(ee,Se,G)=>{if(!P.current)return;P.current.isResizing&&P.current.onDividerResizeEnd?.(P.current.index,Math.max(0,P.current.startSize+ve(ee,G)),P.current.startSize);const L=P.current;P.current=null,ze(P.current),L.onDividerMouseUp?.(L.index)},onPointerMoveOrWait:(ee,Se,G)=>{if(!P.current)return;const L=ve(ee,G);P.current.isResizing?P.current.onDividerResize?.(P.current.index,Math.max(0,P.current.startSize+L),P.current.startSize):Math.abs(L)>Math.max(1,s)&&(P.current={...P.current,isResizing:!0},ze(P.current),P.current.onDividerResizeStart?.(P.current.index,Math.max(0,P.current.startSize+L))),ee.stopPropagation(),ee.preventDefault()}}),$=n.useCallbackRef(()=>{_?.(u)},[u]);if(!se)return;const C=w({bounds:se,orientation:i,view:c,index:u,disabled:d,disabledResize:a,onAutoFit:$,onPointerDown:xe,...J},o);if(!C)return;const{getPortalContainer:Fe}=n.useFullscreenPortal();let Ve=null;return ie&&ie.isResizing&&ie.index===u&&(Ve=Jn.createPortal(ne.jsx("div",{style:{position:"absolute",cursor:D?ao:uo,left:0,top:0,width:"100%",height:"100%"}}),Fe(),"divider:"+u)),ne.jsxs(ne.Fragment,{children:[Ve,ne.jsx("div",{className:Wt("header-divider-anchor"),style:{position:"absolute",pointerEvents:"auto",top:`${D?se.y:ae}px`,left:`${D?ae:se.x}px`,width:(D?0:se.width-1)+"px",height:(D?se.height-1:0)+"px",display:"flex"},tabIndex:-1,children:C})]})}));class Ko{naturalDimensions(o,i={}){const c=document.createElement("div");let u=i?.lineHeight??"1";!i?.lineHeight&&i.paintableText?.fontSize&&(u=Math.ceil(1.2*i.paintableText.fontSize)+"px");const d=document.createElement("div");d.style.visibility="hidden",d.style.position="absolute",d.style.textRendering="geometricprecision",d.style.display="inline-grid",d.style.overflowWrap="break-word",d.style.maxWidth=i.maxWidth?i.maxWidth+"px":"100%",d.style.lineHeight=u,d.style.letterSpacing=(i.paintableText?.letterSpacing??0)+"px",d.style.fontSize=i.paintableText?.fontSize?i.paintableText.fontSize+"px":"unset",d.style.fontFamily=i.paintableText?.fontSize?i.paintableText.fontFamily:"unset",d.style.fontWeight=i.paintableText?.fontWeight?""+i.paintableText.fontWeight:"400",d.style.fontStyle=i.paintableText?.fontStyle?i.paintableText.fontStyle:"normal",d.style.whiteSpace=i.paintableText?.wrap==="wrap"?"break-spaces":"pre",c.appendChild(d);const a=o.split(`
12
- `);for(let w=0;w<a.length;w++){let M=document.createElement("span");d.appendChild(M),M.textContent=a[w]}a.length!==0&&a[a.length-1].length!==0||d.appendChild(document.createElement("br")),document.body.appendChild(d);let s=d.getBoundingClientRect();return d.remove(),{width:s.width,height:s.height,maxLineHeight:1.2*(i.paintableText?.fontSize||1056/72)}}}const fo=(t=void 0)=>Object.freeze({clean:t,dirty:void 0,editMode:!1}),Fo=fo(),Vo=l.memo(l.forwardRef((t,o)=>{const{editState:i=Fo,defaultTextStyle:c,onStartEdit:u,onChangeEdit:d,onSubmitEdit:a,onCancelEdit:s,onDoneEdit:w,containerBounds:M,setNaturalDimensions:A,onNavigate:k,textProperties:U,style:z,autoFocus:q,...N}=t,J=l.useRef(null),{width:Ce=0}=M??{},[_,D]=l.useState(()=>i);l.useEffect(()=>{D(i)},[i]);const F=U?.align||"left",se=U?.vAlign||"middle",P=U?.fill||"#040404",ie=U?.wrap||"wrap",ze=U?.fontFamily||"Calibri",ve=U?.fontSize||11,Ae=U?.fontWeight||400,ae=U?.fontStyle||"normal",xe=_.dirty??_.clean??"";let $=2;const C=96*ve/72,Fe=1.2*C;se==="right"&&($+=1);const Ve=l.useMemo(()=>new Ko().naturalDimensions(xe,{maxWidth:ie==="wrap"?Ce-$:void 0,lineHeight:`${Fe}px`,paintableText:{fontStyle:ae,wrap:ie,letterSpacing:-.25}}),[xe,ie,$,C,ze,Ae,ae,A,Ce]),ee=l.useCallback(()=>Ve.maxLineHeight?Ve.maxLineHeight+"px":"1.2",[Ve]),[Se,G]=l.useState(ee);l.useLayoutEffect(()=>{G(ee())},[M,Ve]),l.useLayoutEffect(()=>{A?.({width:ie==="wrap"?void 0:Ve.width+$,height:Ve.height})},[Ve,A]);const L=n.useCallbackRef(d,[d]),Y=n.useCallbackRef(y=>{if(_.dirty===y)return;const ye={..._};ye.dirty=y,J.current,D(ye),L?.(ye)},[_]),mt=n.useCallbackRef(y=>{if(_.editMode===y)return;const ye={..._};ye.editMode=y,D(ye),L?.(ye)},[_]),gt=n.useCallbackRef(()=>{try{return a?.(_),w?.(),!0}catch{return!1}},[a,_]),it=n.useCallbackRef(()=>{D(i),s?.(),w?.()},[s,i]),ot=n.useCallbackRef(y=>{if(!J.current)return;if(y.isDefaultPrevented(),!(y.isTrusted||y.nativeEvent.ctrlKey||y.nativeEvent.metaKey||y.nativeEvent.altKey||y.nativeEvent.isComposing)&&On.indexOf(y.nativeEvent.key)!==-1){const oe={..._};return oe.dirty=y.nativeEvent.key==="Backspace"?"":(oe.dirty??"")+y.key,D(oe),L?.(oe),void y.preventDefault()}const ye=y.nativeEvent.shiftKey;if(y.which===n.KeyCodes.Escape)return y.preventDefault(),void it();if(y.which===n.KeyCodes.F2)return mt(!0),void y.preventDefault();if(y.which===n.KeyCodes.Enter&&(y.preventDefault(),gt()&&k?.(ye?r.Direction.Up:r.Direction.Down)),y.which===n.KeyCodes.Tab)return y.preventDefault(),void(gt()&&k?.(ye?r.Direction.Left:r.Direction.Right));if(!_.editMode){let oe=null;switch(y.which){case n.KeyCodes.Left:oe=r.Direction.Left;break;case n.KeyCodes.Right:oe=r.Direction.Right;break;case n.KeyCodes.Up:oe=r.Direction.Up;break;case n.KeyCodes.Down:oe=r.Direction.Down}if(oe)return void gt()}},[_,k]),[de,Pt]=l.useState(!q);l.useEffect(()=>{Pt(!1)},[]);const T=n.useImperativeElement(o,()=>({startEdit(y){let ye=y?.initialSelection;if(!ye){const he=J.current.value.length??0;ye={start:he,end:he,direction:"forward"}}J.current?.setSelectionRange(ye.start,ye.end,ye.direction);const oe={...i,editMode:y?.editMode??!1};y?.text!==void 0&&(oe.dirty=y.text),oe.editMode===i.editMode&&oe.dirty===i.dirty||(D(oe),L?.(oe))},submitEdit:()=>gt(),cancelEdit(){it()},autoFocus(){J.current?.focus()},getLineHeight:()=>Ve?.maxLineHeight??Fe,dispatchEvent:y=>J.current.dispatchEvent(y)}),[i,u]);return ne.jsx("div",{ref:T,...N,style:{background:"transparent",display:"flex",flexGrow:1,alignSelf:"center",height:Ve.height,maxWidth:"100%",maxHeight:"100%",...z},children:ne.jsx("textarea",{spellCheck:"false",ref:J,value:xe,autoFocus:!1,disabled:de,name:"cell-editor",autoComplete:"off",autoCapitalize:"off",style:{flex:"1 1 100%",position:"relative",fontSize:`${C}px`,fontFamily:`${ze}`,fontWeight:`${Ae}`,fontStyle:`${ae}`,padding:"0px",marginRight:F==="right"?"3px":"0px",marginLeft:F==="left"?"2px":"0px",lineHeight:Se,height:Ve.height,textRendering:"geometricPrecision",letterSpacing:"-0.25px",boxSizing:"border-box",borderWidth:0,outline:"none",resize:"none",overflow:"hidden",verticalAlign:"baseline",textAlign:F,background:"transparent",color:P,marginBottom:"0px",userSelect:"text",maxHeight:"100%",whiteSpace:ie==="wrap"?"break-spaces":"pre",wordWrap:"break-word"},onChange:y=>{Y(y.target.value)},onDoubleClick:y=>{y.isTrusted},onMouseDown:y=>{mt(!0)},onKeyDown:ot})})})),Wo=l.memo(t=>{const{value:o,view:i,bounds:c,range:u,zoom:d,children:a,style:s,...w}=t,M=s?.fontSize||1056/72;return ne.jsx("div",{style:{padding:"2px 4px",fontFamily:"Calibri",letterSpacing:-.25,lineHeight:1.2,fontSize:M,...s},...w,children:o})});exports.BaseGrid=An,exports.DefaultCellEditor=Vo,exports.DefaultCellRenderer=Wo,exports.DefaultHeaderDivider=ho,exports.FillHandle=Tn,exports.Grid=$n,exports.HeaderDivider=Bo,exports.HeaderRenderer=so,exports.RESET_SCROLL_EVENTS_DEBOUNCE_INTERVAL=150,exports.SELECTION_CLIP_INSETS=It,exports.STANDARD_KEY_CHARS=On,exports.SVGLine=Un,exports.SVGRect=ro,exports.ScrollableGrid=co,exports.Selection=zn,exports.TouchSelectHandle=fn,exports.defaultSelectionRenderer=Xn,exports.getDefaultStringEditState=fo,exports.safeSelectionCoords=Rt,exports.useAnimatedMeasure=oo,exports.useCellLayout=eo,exports.useHeaderSelection=({gridRef:t,gridMainRef:o,orientation:i=r.RangeOrientation.Row,headerCount:c,selectionPolicy:u="multiple",newSelectionMode:d="clear",alwaysScrollToActiveCoords:a=!0,onDragStart:s,onDragEnd:w,pointerDownInterceptor:M,pointerMoveInterceptor:A,onPointerUp:k,newSelection:U,modifySelection:z,appendSelection:q,clearSelections:N})=>{const J=c??((i===r.RangeOrientation.Row?t.current?.rowCount:t.current?.columnCount)||0),Ce=l.useRef(null),_=l.useRef(null),D=l.useRef(!1),F=l.useRef(null),se=l.useCallback($=>i===r.RangeOrientation.Column?{rowIndex:0,colIndex:$.colIndex}:{rowIndex:$.rowIndex,colIndex:0},[i]),P=l.useCallback($=>i===r.RangeOrientation.Column?{rowIndex:o.current?o.current.rowCount-1:0,colIndex:$.colIndex}:{rowIndex:$.rowIndex,colIndex:o.current?o.current.columnCount-1:0},[i]),ie=$=>{_.current=P($),z(_.current,Ce.current)},ze=l.useCallback(($,C)=>{if(!t.current)return;const Fe=t.current.getViewFromClient($,C)?.getCellCoordsFromClient($,C);return Fe?(i===r.RangeOrientation.Column?Fe.rowIndex=o.current.getViewport().rowStart:Fe.colIndex=o.current.getViewport().colStart,Fe):void 0},[]),ve=l.useCallback(($,C=!1)=>{let Fe=$;return C||(Fe={...$},i===r.RangeOrientation.Row?delete Fe.colIndex:delete Fe.rowIndex),o.current?.scrollCellCoordsIntoView(Fe)},[i]),Ae=n.useCallbackRef(w,[w]),ae=n.useCallbackRef(s,[s]),xe=l.useMemo(()=>({onPointerDown:$=>{if(!t||!t.current||$.nativeEvent.defaultPrevented)return;const C=ze($.nativeEvent.clientX,$.nativeEvent.clientY);if(!C)return;$.nativeEvent.which,n.MouseButtonCodes.Right;const Fe=$.nativeEvent.shiftKey,Ve=$.nativeEvent.ctrlKey||$.nativeEvent.metaKey;if(M?.($,C)===!1)return;ae?.(),D.current=!0;const ee=o.current?.getViewFromClient($.nativeEvent.clientX,$.nativeEvent.clientY),Se=((G,L)=>i===r.RangeOrientation.Column?{...G,rowIndex:L.rowStart}:{...G,colIndex:L.colStart})(C,ee.getVisibleRangeCoords());if(Fe)ie(C);else{if(Ve)return((G,L=G,Y)=>{Ce.current=se(G),_.current=P(L),q(Ce.current,_.current,Y)})(C,C,Se),void(a&&ve(Se,!0));((G,L=G,Y)=>{Ce.current=se(G),_.current=P(L),U(Ce.current,_.current,Y)})(C,C,Se),ie(C),a&&ve(Se,!0)}},onPointerMoveOrWait:r.CommonUtils.throttle($=>{if(!D.current||!t?.current)return;const C=ze($.clientX,$.clientY);if(C&&A?.($,C)!==!1){if(r.CoordUtils.isEqualCells(F.current,C))return N();ie(C),ve(C)}},60),onPointerUp:$=>{D.current=!1,Ae?.(),k?.($)},processTouch:!0,consumeTouch:!0}),[u,a,J,d,N,M,k]);return{onPointerDown:n.useCallbackRef(n.useSynchronizedPointerHandler(xe),[]),getCellCoordsFromClient:ze}},exports.useKeyboardEditorOverlay=t=>{const{view:o,canEdit:i=po,getCellEditor:c,onBeforeStartEdit:u,onStartEdit:d,onSubmitEdit:a,onCancelEdit:s,onDoneEdit:w,isEditorStartKeyEvent:M=mo,isEditorStartPointerEvent:A=Co,containerProps:k,borderStrokeFill:U,borderStrokeWidth:z=2,getRangeCoords:q=null,activeCoords:N,alignment:J=n.HorizontalAlignment.Left}=t,[Ce,_]=l.useState(!1),[D,F]=l.useState(void 0),se=n.useCallbackRef((T,y,ye,oe,he,$e)=>{if(!y)return null;const Ge=he?.(y,T),xt=T.getRangeCoordsBounds(Ge),Ze=T.toClipBounds(xt),Tt=xt,ct=T.getZoom();if(!Ze)return null;ye&&(ye*=ct),oe&&(oe*=ct);let S=Tt,re=!1;if(ye!==void 0){let qe={...Ge},Ht=0;for(;!re&&S.width<=ye&&Ht<20;){Ht++,Ht>19&&console.warn("max width reached");const $t=T.getTotalRangeCoords(),St=T.getLayout();$e===n.HorizontalAlignment.Left?qe.colEnd+1<$t.colEnd?qe.colEnd=St.getColIndex(S.x+ye):re=!0:$e===n.HorizontalAlignment.Right?qe.colStart-1>=0?qe.colStart=St.getColIndex(S.x-(ye-S.width)):re=!0:$e===n.HorizontalAlignment.Center&&qe.colEnd+1<$t.colEnd&&qe.colStart-1>=0?(qe.colStart=St.getColIndex(S.x-(ye-S.width)/2),qe.colEnd=St.getColIndex(S.x+S.width+(ye-S.width)/2)):re=!0,re||(S=T.getRangeCoordsBounds(qe))}}S.height=Tt.height,oe!==void 0&&(S.height=Math.max(oe+1,Tt.height));const{width:Ne,height:rt}=T.getViewportSize();return{x:S.x??0,y:S.y??0,height:Math.min(rt-S.y,S.height)+1,width:Math.min(Ne-S.x,S.width)+1}},[J]),P=n.useCallbackRef(i,[i]),ie=l.useCallback(()=>{o?.getStage()?.focus()},[o]),ze=l.useRef(null),ve=n.useCallbackRef(T=>{u?.(T),L(),_(!0),ze.current=null},[u]),Ae=n.useCallbackRef(T=>{d?.(T.coords)},[d]),ae=n.useCallbackRef(T=>{T.isSubmitted||T.isCancelled||(C.current.isEditorClosed=!0,ie(),T.isCancelled=!0,s?.(T.coords),L())},[s]),xe=n.useCallbackRef(T=>{if(T.isSubmitted||T.isCancelled)return!1;try{return ze.current=T.coords,T.isEditorClosing=!0,T.isSubmitted=!0,T.isEditorSubmitted||(T.isEditorSubmitted=!0,T.editorRefs[0]?.submitEdit?.()),T.coords,a?.(T.coords),T.isEditorClosed=!0,ie(),L(),!0}catch(y){throw T.isEditorClosing=!1,T.isSubmitted=!1,y}},[a]),$=n.useCallbackRef(T=>{_(!1),w?.(T.coords),L()},[w]),C=l.useRef(null),Fe=l.useRef(null),Ve=l.useRef(null),ee=l.useRef([]),[Se,G]=l.useReducer(T=>T+1,0),L=l.useCallback(T=>{T&&ee.current.push(T),G()},[]),Y=n.useCallbackRef(T=>{if(T.defaultPrevented||T.isSynthetic||!o)return;const y=o?.getCellCoordsFromClient(T.clientX,T.clientY);y&&L({eventType:"pointer",event:T,coords:y})},[o]),mt=n.useCallbackRef(T=>{const y=T.nativeEvent;Y(y)},[o]),gt=n.useCallbackRef(T=>{if(T.defaultPrevented||T.isSynthetic||!o?.getStage())return;const y=Fe.current;M(T,y)&&(T.stopPropagation(),T.preventDefault()),T.key,L({eventType:"keyboard",event:T,coords:y})},[o]);l.useLayoutEffect(()=>{const T=(oe,he)=>{const $e=he?.cell??oe;if(!$e)return null;const Ge=$e;if(!P($e))return null;ve?.($e);const xt=r.CommonUtils.uuidV4();he=Object.freeze({autoFocus:!0,...he}),Ve.current=$e;const Ze={coords:Ge,startEvent:he,uuid:xt,isMounted:!1,isStarted:!1,isSubmitted:!1,isEditorSubmitted:!1,isEditorClosing:!1,isEditorClosed:!1,isCancelled:!1,events:[],editorRefsDispatchEditorEvent:[],editorRefs:[],onMount:Tt=>{Ze.isMounted||(Ze.isMounted=!0,L())},onUnmount:Tt=>{if(Ze.editorRefs.length===0){const ct=()=>{Ze.isMounted=!1,L()};if(document.activeElement!==document.body)ct();else{const S=re=>{re.defaultPrevented||re.target!==document.body||gt(re)};window.addEventListener("keydown",S,!0),o.getStage()?.addEventListener("focusin",()=>{window.removeEventListener("keydown",S),ct()},{once:!0}),ie()}}}};return Ze};if(ee.current.length<=0&&!C.current)return;const y=ee.current[0];Fn(y),(oe=>{const he=[],$e=oe?.length??0;for(let Ge=0;Ge<$e;Ge++){const xt=oe[Ge];he.push(Fn(xt))}})(ee.current),C.current,C.current;let ye=C.current;if(C.current){if(C.current.isDone)C.current=null;else if(C.current.isSubmitted||C.current.isCancelled){if(C.current.isMounted)return;C.current.isDone||($(C.current),C.current.isDone=!0)}}if(y){if(y.eventType==="start"){const oe=y,he=oe.startEvent?.cell??Fe.current;C.current&&r.CoordUtils.isEqualCells(C.current.coords,he)||(C.current=T(he,oe.startEvent))}else if(y.eventType==="keyboard"){const oe=y.event;if(C.current){let he=!1;switch(oe.which){case n.KeyCodes.Left:case n.KeyCodes.Right:case n.KeyCodes.Up:case n.KeyCodes.Down:case n.KeyCodes.Enter:case n.KeyCodes.Tab:he=!0}if(!he){C.current.events.push(y);for(let $e=0;$e<C.current.editorRefsDispatchEditorEvent.length;$e++)C.current.editorRefsDispatchEditorEvent[$e](y)}}else if(M(oe,y.coords)){let he;const $e=T(he?.cell??Fe.current,he);$e&&$e.events.push(y),C.current=$e}}else if(y.eventType==="pointer"){const oe=y.event;if(C.current){C.current.events.push(y);for(let he=0;he<C.current.editorRefsDispatchEditorEvent.length;he++)C.current.editorRefsDispatchEditorEvent[he](y)}else{const he=y?.coords??Fe.current,$e=A(oe,he);if($e){let Ge;typeof Ge!="boolean"&&(Ge=$e);const xt=T(he,Ge);xt&&xt.events.push(y),C.current=xt}}}else if(y.eventType==="submit"){if(C.current&&!C.current.isSubmitted&&!C.current.isCancelled){if(!C.current.isMounted)return;xe(C.current)}}else if(y.eventType==="cancel"){if(C.current&&!C.current.isSubmitted&&!C.current.isCancelled){if(!C.current.isMounted)return;ae(C.current)}}else if(y.eventType==="coordsChange"){const oe=y;if(Fe.current=oe.activeCoords,C.current,C.current&&!C.current.isSubmitted&&!C.current.isCancelled){if(!C.current.isMounted)return;try{xe(C.current)}catch{}}}}ee.current.length>0&&(ee.current.shift(),L()),ee.current.length===0&&(!C.current||C.current.isEditorClosing||C.current.isEditorClosed?!C.current&&ye&&ie():C.current.isMounted&&!C.current.isStarted&&(C.current.isStarted=!0,C.current.startEvent.autoFocus&&(typeof C.current.startEvent.autoFocus=="string"?C.current.editorRefs[0]?.autoFocus(C.current.startEvent.autoFocus):C.current.editorRefs[0]?.autoFocus()),Ae?.(C.current),requestAnimationFrame(()=>{o&&C.current?.coords&&o.scrollCellCoordsIntoView(C.current.coords)})))},[Se]),l.useEffect(()=>{Ve.current=N;const T=C.current?.coords;r.CoordUtils.isEqualCells(T,N)||(C.current&&(C.current.isEditorClosing=!0),L({eventType:"coordsChange",activeCoords:N}))},[N]);const it=l.useCallback(T=>{gt(T.nativeEvent)},[]),{width:ot=0,height:de=0}=D??{width:0,height:0},Pt=n.useCallbackRef(c,[c]);return{overlay:n.useCallbackRef(T=>{if(!C.current||C.current.isEditorClosed)return C.current,null;C.current.coords;let y=se(T,C.current.coords,ot,de,q,J),ye=!0;y&&y.width!==0&&y.height!==0||(y={x:0,y:0,width:ot,height:ot},ye=!1);const oe=T.getZoom(),he={containerBounds:{x:0,y:0,width:y.width/oe,height:y.height/oe},setNaturalDimensions:F,zoom:oe};return ne.jsx(So,{session:C.current,refLatestCoords:Ve,handleSubmitEdit:xe,handleCancelEdit:ae,cellBounds:y,borderStrokeWidth:z,borderStrokeFill:U,isInBounds:ye,getCellEditor:Pt,propsEditor:he,alignment:J,...k},"editor:"+C.current.uuid)},[c,q,Se,ot,de,J,z,U]),startEdit:l.useCallback(T=>{L({eventType:"start",startEvent:T})},[]),submitEdit:l.useCallback(()=>{L({eventType:"submit"})},[]),cancelEdit:l.useCallback(()=>{L({eventType:"cancel"})},[]),onKeyboardEvent:it,onPointerEvent:mt,onKeyboardEventNative:gt,onPointerEventNative:Y,isEditing:Ce}},exports.useSelection=({gridRef:t,commands:o,layout:i,selection:c,onSelectionChange:u,onSelectionDragStart:d,onSelectionDragEnd:a,selectionPolicy:s="multiple",newSelectionMode:w="clear",allowDeselectSelection:M=!0,onFillPreview:A,onFillCancel:k,onFillDone:U,onFill:z,disableFillDrag:q=!z,fillHandleBorderColor:N="white",hiddenRowsAt:J,hiddenColumnsAt:Ce,isContentfulCell:_,contentfulCellFinder:D=Mo,getDataCoords:F,alwaysScrollToActiveCoords:se=!1,selectionBounds:P,pointerDownInterceptor:ie,pointerMoveInterceptor:ze,mergedRanges:ve,canSelectionSpanMergedCells:Ae=Lo,onMoveDragStart:ae,onMoveDragUpdate:xe,onMoveDragEnd:$,onMoveDragDone:C,selectionRenderer:Fe=Xn,disableMoveDrag:Ve=!$,getCellCoordsAsRangeCoords:ee=r.CoordUtils.cellToRange,moveDragHitSize:Se=6,moveDragOutlineSize:G=4,selectionBackgroundColor:L="rgba(16, 124, 65, 0.1)",selectionBorderColor:Y="rgb(33, 115, 70)",selectionRemoveBorderColor:mt="rgb(255, 0, 0)",selectionRemoveBackgroundColor:gt="rgba(250, 10, 10, 0.1)",disableTouchSelection:it=!1,touchSelectHandleProps:ot})=>{const de=l.useCallback(()=>({top:P?.top??0,left:P?.left??0,bottom:t.current?.rowCount-1||0,right:t.current?.columnCount-1||0}),[]),Pt=n.useCallbackRef(z,[z]),T=n.useCallbackRef(A,[A]),y=n.useCallbackRef(k,[k]),ye=n.useCallbackRef(U,[U]),oe=n.useCallbackRef(_,[_]),he=n.useCallbackRef(Fe,[Fe]),$e=n.useCallbackRef((e,h=!1)=>wn(e,h,i.getRowOffset,h?de().bottom:de().top),[i?.getRowOffset]),Ge=n.useCallbackRef(J??$e,[J]),xt=n.useCallbackRef((e,h=!1)=>wn(e,h,i.getColOffset,h?de().right:de().left),[i?.getColOffset]),Ze=n.useCallbackRef(Ce??xt,[Ce]),[Tt,ct]=l.useState(()=>Rt(c)),S=l.useMemo(()=>Rt(Tt),[Tt]),re=l.useRef(S),Ne=l.useRef(!0);l.useLayoutEffect(r.CommonUtils.throttle(()=>{ct(e=>{Ne.current=!0;const h=Rt(c);return r.CoordUtils.isEqualSelectionCoords(h,e)?e:h})},0),[c]),l.useLayoutEffect(()=>{re.current=S},[S]),l.useEffect(()=>{Ne.current||!u||r.CoordUtils.isEqualSelectionCoords(c,S)||u(S)},[S]);const rt=l.useCallback(e=>{ct(h=>{Ne.current=!1,h=Rt(h);let g=typeof e=="function"?e(h.ranges):e??Ln;if(r.CoordUtils.isEqualRangesArrays(g,h.ranges))return h;let f=Math.max(g.length?0:-1,Math.min(h.rangeIndex,g.length-1)),p=h.cell;f===-1||r.CoordUtils.isCellWithinRange(p,g[f])||(p={rowIndex:g[f].rowStart,colIndex:g[f].colStart}),g.length===1&&r.CoordUtils.isSingleCell(g[0])&&r.CoordUtils.isCellWithinRange(p,g[0])&&(g=[],f=-1);const I={cell:p,ranges:g,rangeIndex:f};return r.CoordUtils.isEqualSelectionCoords(I,h)?h:I})},[]),qe=n.useCallbackRef(e=>{ct(h=>{Ne.current=!1,h=Rt(h);const g=e??io,f=ee(g);if(!r.CoordUtils.isSingleCell(f)&&h.ranges.length===0)return{ranges:[f],rangeIndex:0,cell:g};if(r.CoordUtils.isEqualCells(g,h.cell))return h;let p=h.ranges,I=h.rangeIndex;h.ranges.length===1&&(r.CoordUtils.isSingleCell(h.ranges[0])&&r.CoordUtils.isCellWithinRange(g,h.ranges[0])||!r.CoordUtils.isCellWithinRange(g,h.ranges[0]))&&(p=[],I=-1);const m={ranges:p,rangeIndex:I,cell:g};return r.CoordUtils.isEqualSelectionCoords(m,h)?h:m})},[ee]),[Ht,$t]=l.useState(null),[St,Xt]=l.useState(null),At=l.useRef(null),[Re,Ut]=l.useState(null),at=l.useRef(null),kt=l.useRef(null),[en,jt]=l.useState(null),Be=l.useRef(null),Te=l.useRef(null),Kt=l.useRef(ve);l.useEffect(()=>{Kt.current=ve},[ve]);const dt=n.useCallbackRef((e,h={inline:"nearest",block:"nearest"})=>{let{rowIndex:g,colIndex:f}=e;g===void 0&&S?.cell&&(g=S.cell.rowIndex),f===void 0&&S?.cell&&(f=S.cell.colIndex),g!==void 0&&f!==void 0&&t.current?.scrollCellCoordsIntoView({rowIndex:g,colIndex:f},h)},[S]),Lt=l.useCallback(e=>{const h=de();return e.rowIndex<h.top||e.colIndex<h.left||e.colIndex>h.right||e.rowIndex>h.bottom},[]),Ee=n.useCallbackRef((e,h)=>{if(!t?.current)return null;const g={rowStart:Math.min(e.rowIndex,h.rowIndex),colStart:Math.min(e.colIndex,h.colIndex),rowEnd:Math.max(e.rowIndex,h.rowIndex),colEnd:Math.max(e.colIndex,h.colIndex)};if(Ae?.(g))return g;const p=ee(e),I=ee(h),m={rowStart:Math.min(p.rowStart,I.rowStart),colStart:Math.min(p.colStart,I.colStart),rowEnd:Math.max(p.rowEnd,I.rowEnd),colEnd:Math.max(p.colEnd,I.colEnd)};let X;return typeof Kt.current=="function"?X=Kt.current(m):ve&&(X=ve),X?r.CoordUtils.extendRangeToUnionRanges(m,X):m},[Ae,ee]),We=n.useCallbackRef((e,h,g)=>{const f=e.ranges.length>0?e.ranges[e.rangeIndex]:{rowStart:e.cell.rowIndex,colStart:e.cell.colIndex,rowEnd:e.cell.rowIndex,colEnd:e.cell.colIndex},p={rowStart:Math.min(h.rowIndex??f.rowStart,g.rowIndex??f.rowStart),colStart:Math.min(h.colIndex??f.colStart,g.colIndex??f.colStart),rowEnd:Math.max(h.rowIndex??f.rowEnd,g.rowIndex??f.rowEnd),colEnd:Math.max(h.colIndex??f.colEnd,g.colIndex??f.colEnd)},I={rowIndex:p.rowStart,colIndex:p.colStart},m={rowIndex:p.rowEnd,colIndex:p.colEnd};if(!(Lt(I)||Lt(m)))return Ee(I,m)},[Ee]),lt=n.useCallbackRef((e,h,g)=>{if(s==="single"||!re.current)return;const f=We(re.current,e,h??re.current.cell);if(!f)return;const p=re.current.rangeIndex;rt(I=>I.length?I.map((m,X)=>p===X?f:m):[f]),g&&f&&qe({colIndex:f.colStart,rowIndex:f.rowStart})},[]),wt=l.useCallback((e,h,g)=>{if(!re.current)return;e={...re.current?.cell,...e},h=h??e;const f=We(re.current,e,h);if(!f)return;const p={rowIndex:f.rowStart,colIndex:f.colStart},I={...p,...g};w==="clear"?(Be.current=I,Bt()):w==="modify"?lt(p):Ie(p),qe(I)},[]),Ie=l.useCallback((e,h=e,g)=>{s!=="multiple"||!e||Lt(e)||Lt(h)||ct(f=>{Ne.current=!1,f=Rt(f);const p=Ee(e,h);if(!p)return f;let I=f.ranges.length>0?[...f.ranges]:[Ee(f.cell,f.cell)];I.push(p);const m={ranges:I,cell:{rowIndex:p.rowStart,colIndex:p.colStart,...g},rangeIndex:I.length-1};return r.CoordUtils.isEqualSelectionCoords(m,f)?f:m})},[]),Bt=()=>{rt(Ln)},bt=n.ReactUtils.detectIt().primaryInput==="touch",Ye=l.useRef(null),pt=l.useRef(null),yt=l.useRef(null),Nt=l.useMemo(()=>({onPointerDown:e=>{if(!t||!t.current)return!1;const h=e.nativeEvent,g=t.current.getViewFromClient(h.clientX,h.clientY);if(h.pointerType==="touch"||h.type==="touchstart")return pt.current={topLeft:g.getScrollTopLeft(),point:{x:h.clientX,y:h.clientY}},!0;const f=g.getCellCoordsFromClient(e.nativeEvent.clientX,e.nativeEvent.clientY);if(!f)return!1;Ye.current={anchor:g.getAnchor(),coords:f},Te.current=null;const p=e.nativeEvent.which===n.MouseButtonCodes.Right;if(p&&r.CoordUtils.indexOfCoords(f,S.ranges)!==-1)return!1;const I=e.nativeEvent.shiftKey,m=e.nativeEvent.ctrlKey||e.nativeEvent.metaKey,X=m,V=M,W=S.ranges.length>0,Q=m&&V;if(ie?.(e,f,S)===!1)return!1;d?.(re.current,e.nativeEvent);const we=!p&&s!=="single";if(I)return lt(f),we;const j=r.CoordUtils.isEqualCells(f,S.cell);if(X){if(j&&(!Q||!W))return we;if(m&&r.CoordUtils.indexOfCoords(f,S.ranges)!==-1&&V){at.current=f;const H=Ee(f,f);return kt.current=H,Ut(H),we}return Ie(f),we}se&&dt(f),j&&S.ranges.length===0||wt(f)},onPointerMoveOrWait:r.CommonUtils.throttle((e,h)=>{if(!t?.current||e.pointerType==="touch"||e.type==="touchmove"||!Ye.current)return;const g=Ye.current.anchor;let f=t.current.getViewFromLocation(g),p=f.getCellCoordsFromClient(e.clientX,e.clientY);if(!r.CoordUtils.isEqualCells(p,Ye.current?.coords)&&(Ye.current={anchor:g,coords:p},p&&ze?.(e,p,re.current)!==!1)){if(at.current){const I={rowStart:Math.min(p.rowIndex,at.current.rowIndex),colStart:Math.min(p.colIndex,at.current.colIndex),rowEnd:Math.max(p.rowIndex,at.current.rowIndex),colEnd:Math.max(p.colIndex,at.current.colIndex)},m={rowIndex:I.rowStart,colIndex:I.colStart},X={rowIndex:I.rowEnd,colIndex:I.colEnd};if(Lt(m)||Lt(X))return;const V=Ee(m,X);kt.current=V,Ut(V)}else lt(p);yt.current=h,hn(f,p,t)}},60),onPointerUp:e=>{if(Ye.current=null,e.pointerType==="touch"||e.type==="touchend"){if(pt.current){const g=t.current.getViewFromClient(pt.current.point.x,pt.current.point.y),f=g.getScrollTopLeft();if(f.left===pt.current.topLeft.left&&f.top===pt.current.topLeft.top){const p=g.getCellCoordsFromClient(pt.current.point.x,pt.current.point.y);wt(p)}}return pt.current=null,void(Ye.current=null)}try{a?.(re.current,e)}catch(g){console.warn(g)}if(!at.current)return;const h=kt.current;at.current=null,kt.current=null,Ut(null),ct(g=>{if(Ne.current=!1,(g=Rt(g)).ranges.length===0)return g;let f=[],p=-1,I=g.cell;for(let X=0;X<g.ranges.length;X++){const V=g.ranges[X];if(r.CoordUtils.isRangesIntersect(V,h)){const W=r.CommonUtils.subtractRect({top:V.rowStart,left:V.colStart,bottom:V.rowEnd+1,right:V.colEnd+1},{top:h.rowStart,left:h.colStart,bottom:h.rowEnd+1,right:h.colEnd+1});for(let Q=0;Q<W.length;Q++){const we={rowStart:W[Q].top,colStart:W[Q].left,rowEnd:W[Q].bottom-1,colEnd:W[Q].right-1};f.push(we),r.CoordUtils.isCellWithinRange(g.cell,we)&&(p=f.length-1)}}else f.push(V);f.length>0&&p===-1&&r.CoordUtils.isCellWithinRange(g.cell,V)&&(p=f.length-1,I={rowIndex:f[f.length-1].rowStart,colIndex:f[f.length-1].colStart})}const m={cell:I,rangeIndex:p,ranges:f};return r.CoordUtils.isEqualSelectionCoords(m,g)?g:m})},processTouch:!0,consumeTouch:!1}),[S,s,M,se,w]),xn=n.useCallbackRef(n.useSynchronizedPointerHandler(Nt),[]),pn=l.useMemo(()=>({onSelectionPointerDown:(e,h,g,f,p=S.cell,I=se,m=e.nativeEvent.shiftKey,X=!1)=>{if(!t||!t.current)return!1;e.stopPropagation(),e.preventDefault(),e.nativeEvent.stopImmediatePropagation();const V=g??t.current.getViewFromClient(e.nativeEvent.clientX,e.nativeEvent.clientY),W=f??V.getCellCoordsFromClient(e.nativeEvent.clientX,e.nativeEvent.clientY);if(!W)return!1;Ye.current={anchor:V.getAnchor(),coords:W},Te.current=null;const Q=e.nativeEvent.which===n.MouseButtonCodes.Right;if(Q&&r.CoordUtils.indexOfCoords(W,S.ranges)!==-1)return!1;const we=e.nativeEvent.ctrlKey||e.nativeEvent.metaKey,j=we,H=M,nt=S.ranges.length>0,E=we&&H;if(ie?.(e,W,S)===!1)return!1;d?.(re.current,e.nativeEvent);const fe=!Q&&s!=="single";if(m)return lt(W,p,X),fe;const ft=r.CoordUtils.isEqualCells(W,p);if(j){if(ft&&(!E||!nt))return fe;if(E&&r.CoordUtils.indexOfCoords(W,S.ranges)!==-1&&H){at.current=W;const ue=Ee(W,W);return kt.current=ue,Ut(ue),fe}return Ie(W),fe}I&&dt(W),ft&&S.ranges.length===0||wt(W)},onSelectionPointerMoveOrWait:(e,h,g,f,p,I=S.cell,m=!0,X=!1)=>{if(!t?.current||(e.stopPropagation(),e.preventDefault(),e.stopImmediatePropagation(),!Ye.current))return;const V=Ye.current.anchor;let W=f??t.current.getViewFromLocation(V),Q=p??W.getCellCoordsFromClient(e.clientX,e.clientY);if(!r.CoordUtils.isEqualCells(Q,Ye.current?.coords)&&(Ye.current={anchor:V,coords:Q},Q&&ze?.(e,Q,re.current)!==!1)){if(at.current){const we={rowStart:Math.min(Q.rowIndex,at.current.rowIndex),colStart:Math.min(Q.colIndex,at.current.colIndex),rowEnd:Math.max(Q.rowIndex,at.current.rowIndex),colEnd:Math.max(Q.colIndex,at.current.colIndex)},j={rowIndex:we.rowStart,colIndex:we.colStart},H={rowIndex:we.rowEnd,colIndex:we.colEnd};if(Lt(j)||Lt(H))return;const nt=Ee(j,H);kt.current=nt,Ut(nt)}else lt(Q,I,X);m&&hn(W,Q,t)}},onPointerUp:e=>{Ye.current=null,e.stopPropagation(),e.preventDefault(),e.stopImmediatePropagation();try{a?.(re.current,e)}catch(g){console.warn(g)}if(!at.current)return;const h=kt.current;at.current=null,kt.current=null,Ut(null),ct(g=>{if(Ne.current=!1,(g=Rt(g)).ranges.length===0)return g;let f=[],p=-1,I=g.cell;for(let X=0;X<g.ranges.length;X++){const V=g.ranges[X];if(r.CoordUtils.isRangesIntersect(V,h)){const W=r.CommonUtils.subtractRect({top:V.rowStart,left:V.colStart,bottom:V.rowEnd+1,right:V.colEnd+1},{top:h.rowStart,left:h.colStart,bottom:h.rowEnd+1,right:h.colEnd+1});for(let Q=0;Q<W.length;Q++){const we={rowStart:W[Q].top,colStart:W[Q].left,rowEnd:W[Q].bottom-1,colEnd:W[Q].right-1};f.push(we),r.CoordUtils.isCellWithinRange(g.cell,we)&&(p=f.length-1)}}else f.push(V);f.length>0&&p===-1&&r.CoordUtils.isCellWithinRange(g.cell,V)&&(p=f.length-1,I={rowIndex:f[f.length-1].rowStart,colIndex:f[f.length-1].colStart})}const m={cell:I,rangeIndex:p,ranges:f};return r.CoordUtils.isEqualSelectionCoords(m,g)?g:m})}}),[S,s,M,se,w]),_e=n.useCallbackRef((e,h=!1,g=!1,f=0)=>{if(!t.current||!S.cell)return;let p=S.cell,I=S.cell;if(h&&S.ranges.length>0){const E=S.ranges[S.rangeIndex],fe=S.cell;switch(e){case r.Direction.Up:I={rowIndex:fe.rowIndex===E.rowStart?E.rowEnd:E.rowStart,colIndex:E.colEnd},p={rowIndex:fe.rowIndex===E.rowStart?E.rowStart:E.rowEnd,colIndex:E.colStart};break;case r.Direction.Down:I={rowIndex:fe.rowIndex===E.rowEnd?E.rowStart:E.rowEnd,colIndex:E.colEnd},p={rowIndex:fe.rowIndex===E.rowEnd?E.rowEnd:E.rowStart,colIndex:E.colStart};break;case r.Direction.Left:I={rowIndex:E.rowEnd,colIndex:fe.colIndex===E.colStart?E.colEnd:E.colStart},p={rowIndex:E.rowStart,colIndex:fe.colIndex===E.colStart?E.colStart:E.colEnd};break;case r.Direction.Right:I={rowIndex:E.rowEnd,colIndex:fe.colIndex===E.colEnd?E.colStart:E.colEnd},p={rowIndex:E.rowStart,colIndex:fe.colIndex===E.colEnd?E.colEnd:E.colStart}}}const m=ee(I);let{rowStart:X,colStart:V}=m;const W=de();if(Te.current)switch(e){case r.Direction.Up:case r.Direction.Down:Te.current.colIndex>=m.colStart&&Te.current.colIndex<=m.colEnd&&(V=Te.current.colIndex);break;case r.Direction.Left:case r.Direction.Right:Te.current.rowIndex>=m.rowStart&&Te.current.rowIndex<=m.rowEnd&&(X=Te.current.rowIndex)}if(!f){switch(e){case r.Direction.Up:X=Oe(Ge,Math.max(m.rowStart-1,W.top),e);break;case r.Direction.Down:X=Oe(Ge,Math.min(m.rowEnd+1,W.bottom),e);break;case r.Direction.Left:V=Oe(Ze,Math.max(m.colStart-1,W.left),e);break;case r.Direction.Right:V=Oe(Ze,Math.min(m.colEnd+1,W.right),e)}if(g)switch(e){case r.Direction.Up:X=D({...I,colIndex:S.cell.colIndex},oe,Ge,e,!1,Math.max(W.top,Ge(W.top,!1)));break;case r.Direction.Down:X=D({...I,colIndex:S.cell.colIndex},oe,Ge,e,!1,Math.min(W.bottom,W.bottom-Ge(W.bottom,!0)));break;case r.Direction.Left:V=D({...I,rowIndex:S.cell.rowIndex},oe,Ze,e,!1,Math.max(W.left,Ze(W.left,!1)));break;case r.Direction.Right:V=D({...I,rowIndex:S.cell.rowIndex},oe,Ze,e,!1,Math.min(W.right,W.right-Ze(W.right,!0)))}}let Q=null;if(f){let E=0;switch(e){case r.Direction.Up:E=i.getRowOffset(X+1),X=Math.max(W.top,i.getRowIndex(E-f)),Q={top:i.getRowOffset(X+1)-(E-t.current.getScrollPosition().top)};break;case r.Direction.Down:E=i.getRowOffset(X),X=Math.min(W.bottom,i.getRowIndex(E+f)),Q={top:i.getRowOffset(X)-(E-t.current.getScrollPosition().top)};break;case r.Direction.Left:E=i.getColOffset(V+1),V=Math.max(W.left,i.getColIndex(E-f)),Q={left:i.getColOffset(V+1)-(E-t.current.getScrollPosition().left)};break;case r.Direction.Right:E=i.getColOffset(V),V=Math.min(W.right,i.getColIndex(E+f)),Q={left:i.getColOffset(V)-(E-t.current.getScrollPosition().left)}}}const we={rowIndex:X,colIndex:V},j=ee(we),H={rowIndex:j.rowStart,colIndex:j.colStart};h||(Te.current=we);const nt=r.CoordUtils.isEqualCells(Be.current,H)&&r.CoordUtils.isEqualCells(Be.current,p);if(h&&!nt?lt(H,p):wt(H),Q)t.current.scrollTo(Q);else{if(h&&Be.current){const E=de();if(e===r.Direction.Right&&Be.current.colIndex===E.left||e===r.Direction.Left&&Be.current.colIndex===E.right||e===r.Direction.Up&&Be.current.rowIndex===E.bottom||e===r.Direction.Down&&Be.current.rowIndex===E.top)return}e===r.Direction.Left||e===r.Direction.Right?dt({colIndex:we.colIndex}):e!==r.Direction.Up&&e!==r.Direction.Down||dt({rowIndex:we.rowIndex})}},[S,ee]),Ot=n.useCallbackRef(e=>{if(!t.current)return;if(S.ranges.length===0)return void _e(e);const h=ee(S.cell);if(r.CoordUtils.isEqualRangesArrays([h],S.ranges))return void _e(e);const g=Pn(S,e,ee,Ge,Ze);ct(f=>{Ne.current=!1,f=Rt(f);const p={...f,cell:g.cell,rangeIndex:g.rangeIndex};return r.CoordUtils.isEqualSelectionCoords(p,f)?f:p}),g.cell&&dt(g.cell)},[S,ee]),mn=l.useCallback(()=>{const e=de();lt({rowIndex:e.top},{rowIndex:e.bottom})},[]),Cn=l.useCallback(()=>{const e=de();lt({colIndex:e.left},{colIndex:e.right})},[]),Ft=n.useCallbackRef(()=>{S.cell&&t?.current&&dt(S.cell)},[S.cell]),tn=l.useCallback((e=!1)=>{const h={rowIndex:de().top};e?lt(h):wt(h),dt(h)},[]),nn=l.useCallback((e=!1)=>{const h={rowIndex:de().bottom};e?lt(h):wt(h),dt(h)},[]),_t=l.useCallback((e=!1)=>{const h={colIndex:de().left};e?lt(h):wt(h),dt(h)},[]),qt=l.useCallback((e=!1)=>{const h=de(),g={rowIndex:h.top,colIndex:h.left};e?lt(g):wt(g),dt(g)},[]),Gt=l.useCallback((e=!1)=>{const h=de(),g={colIndex:F?.()?.colEnd??h.right};e?lt(g):wt(g),dt(g)},[F]),Vt=l.useCallback((e=!1)=>{const h=de(),g={rowIndex:F?.()?.rowEnd??h.bottom,colIndex:F?.()?.colEnd??h.right};e?lt(g):wt(g),dt(g)},[F]),Zt=n.useCallbackRef(e=>{if(!t.current||S.ranges.length<=1)return;const h=e===r.Direction.Left||e===r.Direction.Up;let g=S.rangeIndex+(h?-1:1);g<0?g=S.ranges.length-1:g>S.ranges.length-1&&(g=0);const f=S.ranges[g],p=Pn({cell:{rowIndex:f.rowEnd,colIndex:f.colEnd},rangeIndex:0,ranges:[f]},r.Direction.Right,ee,Ge,Ze);ct(I=>{Ne.current=!1,I=Rt(I);const m={...I,cell:p.cell,rangeIndex:g};return r.CoordUtils.isEqualSelectionCoords(m,I)?I:m}),p.cell&&dt(p.cell)},[S,ee]),Sn=n.useCallbackRef(()=>{const e=jn(S);ct(h=>{Ne.current=!1,h=Rt(h);const g={...h,visibleSelection:e};return r.CoordUtils.isEqualSelectionCoords(g,h)?h:g}),e.cell&&dt(e.cell)},[S,ee]),bn=n.useCallbackRef(()=>{if(!t.current||S.ranges.length===0)return;const e=S.cell,h=S.ranges[S.rangeIndex],g=jn({cell:e,rangeIndex:0,ranges:[h]}),f=g.ranges[g.rangeIndex];let p;p=f.rowStart===e.rowIndex&&f.colStart===e.colIndex?{rowIndex:f.rowStart,colIndex:f.colEnd}:f.rowStart===e.rowIndex&&f.colEnd===e.colIndex?{rowIndex:f.rowEnd,colIndex:f.colStart}:f.rowEnd===e.rowIndex&&f.colStart===e.colIndex?{rowIndex:f.rowEnd,colIndex:f.colEnd}:{rowIndex:f.rowStart,colIndex:f.colStart},ct(I=>{I=Rt(I);const m={...I,cell:p};return r.CoordUtils.isEqualSelectionCoords(m,I)?I:m}),p&&dt(p)},[S,ee]),on=l.useCallback((e=!1)=>{_e(r.Direction.Down,e,!1,t.current.getDimensions().containerHeight)},[]),Mt=l.useCallback((e=!1)=>{_e(r.Direction.Up,e,!1,t.current.getDimensions().containerHeight)},[]),rn=l.useCallback((e=!1)=>{_e(r.Direction.Right,e,!1,t.current.getDimensions().containerWidth)},[]),Jt=l.useCallback((e=!1)=>{_e(r.Direction.Left,e,!1,t.current.getDimensions().containerWidth)},[]),ln=l.useCallback(()=>{Ot(r.Direction.Left)},[]),cn=l.useCallback(()=>{Ot(r.Direction.Right)},[]),yn=l.useCallback(()=>{Ot(r.Direction.Up)},[]),vn=l.useCallback(()=>{Ot(r.Direction.Down)},[]),Qt=l.useCallback(()=>{Zt(r.Direction.Left)},[]),Rn=l.useCallback(()=>{Zt(r.Direction.Right)},[]),En=l.useCallback(()=>{bn()},[]),sn=l.useCallback(()=>{_e(r.Direction.Left,!1,!1)},[]),x=l.useCallback(()=>{_e(r.Direction.Left,!0,!1)},[]),b=l.useCallback(()=>{_e(r.Direction.Left,!1,!0)},[]),O=l.useCallback(()=>{_e(r.Direction.Left,!0,!0)},[]),R=l.useCallback(()=>{_e(r.Direction.Right,!1,!1)},[]),v=l.useCallback(()=>{_e(r.Direction.Right,!0,!1)},[]),B=l.useCallback(()=>{_e(r.Direction.Right,!1,!0)},[]),Z=l.useCallback(()=>{_e(r.Direction.Right,!0,!0)},[]),te=l.useCallback(()=>{_e(r.Direction.Up,!1,!1)},[]),le=l.useCallback(()=>{_e(r.Direction.Up,!0,!1)},[]),K=l.useCallback(()=>{_e(r.Direction.Up,!1,!0)},[]),pe=l.useCallback(()=>{_e(r.Direction.Up,!0,!0)},[]),He=l.useCallback(()=>{_e(r.Direction.Down,!1,!1)},[]),ke=l.useCallback(()=>{_e(r.Direction.Down,!0,!1)},[]),De=l.useCallback(()=>{_e(r.Direction.Down,!1,!0)},[]),Ke=l.useCallback(()=>{_e(r.Direction.Down,!0,!0)},[]),be=l.useCallback(()=>{rt(e=>e.slice(0,-1))},[]),ut=l.useMemo(()=>{const e=de();return((h,g,f,p,I)=>{for(let m=0;m<h.length;m++){const X=h[m];if(X.rowStart===g&&X.colStart===f&&X.rowEnd===p&&X.colEnd===I)return!0}return!1})(S.ranges,e.top,e.left,e.bottom,e.right)},[P,S.ranges]),Qe=l.useCallback((e,h=!0)=>{Be.current=e,qe(e),h&&e&&t?.current&&dt(e)},[]),Ue=n.useCallbackRef((e=!0)=>{const h=At.current;if(!re.current?.cell)return;const g=re.current?.ranges,f=re.current?.cell;if(!f||!h||!h)return;let p=null;if(p=g.length>0?g[g.length-1]:ee(f),p.colEnd>=p.colStart&&p.rowEnd>=p.rowStart){const I=Nn(p,h);let m=e?Pt:T;try{m?.(p,h,I.direction)}catch(X){console.warn(X)}finally{e&&ye?.()}}},[ee]),me=l.useRef(null),Je=l.useMemo(()=>({onPointerDown:(e,h)=>{if(yt.current=h,!t||!t.current)return!1;const g=t.current.getViewFromClient(e.nativeEvent.clientX,e.nativeEvent.clientY),f=g?.getCellCoordsFromClient(e.nativeEvent.clientX,e.nativeEvent.clientY);f&&(e.stopPropagation(),$t("crosshair"),me.current={anchor:g.getAnchor(),coords:f})},onPointerMoveOrWait:(e,h)=>{if(q||!t?.current||!re.current||!me.current)return;const g=me.current.anchor;let f=t.current.getViewFromLocation(g),p=f.getCellCoordsFromClient(e.clientX,e.clientY);if(!p)return;me.current={anchor:g,coords:p};const I=re.current.ranges;let m=Ee(re.current.cell,p);if(!m)return;const X=I.length>0,V=X?I[I.length-1]:ee(re.current.cell);if(!m)return;const W=m.rowStart<V.rowStart?r.Direction.Up:m.rowEnd>V.rowEnd?r.Direction.Down:m.colEnd>V.colEnd?r.Direction.Right:r.Direction.Left,Q=de();W===r.Direction.Left&&(m={...V,colStart:Math.max(Q.left,m.colStart)}),W===r.Direction.Up&&(m={...V,rowStart:Math.max(Q.top,m.rowStart)}),W===r.Direction.Right&&(m={...V,colEnd:Math.min(Q.right,m.colEnd)}),W===r.Direction.Down&&(m={...V,rowEnd:Math.min(Q.bottom,m.rowEnd)});const we=Nn(V,m);if(!Ae?.(V)){let j;typeof Kt.current=="function"?j=Kt.current(V):ve&&(j=ve),m=((H,nt,E,fe,ft,ue)=>{const ce={...nt};if(E.length===0)return ce;if(ft===r.Direction.Left){const tt=H.colEnd+1-H.colStart;ce.colStart=H.colStart-Math.ceil(ue/tt)*tt,ce.colStart<fe.left&&(ce.colStart=ce.colStart+Math.ceil((fe.left-ce.colStart)/tt)*tt)}else if(ft===r.Direction.Right){const tt=H.colEnd+1-H.colStart;ce.colEnd=H.colEnd+Math.ceil(ue/tt)*tt,ce.colEnd>fe.right&&(ce.colEnd=ce.colEnd-Math.ceil((fe.right-ce.colEnd)/tt)*tt)}else if(ft===r.Direction.Up){const tt=H.rowEnd+1-H.rowStart;ce.rowStart=H.rowStart-Math.ceil(ue/tt)*tt,ce.rowStart<fe.top&&(ce.rowStart=ce.rowStart+Math.ceil((fe.top-ce.rowStart)/tt)*tt)}else if(ft===r.Direction.Down){const tt=H.rowEnd+1-H.rowStart;ce.rowEnd=H.rowEnd+Math.ceil(ue/tt)*tt,ce.rowEnd>fe.bottom&&(ce.rowEnd=ce.rowEnd-Math.ceil((fe.bottom-ce.rowEnd)/tt)*tt)}return ce})(V,m,j,Q,we.direction,we.amount)}if(X&&r.CoordUtils.isRangeWithinRange(m,V)&&(m=null),!r.CoordUtils.isEqualRanges(m,At.current)){if(Xt(m),At.current=m,!m){try{y?.()}catch{}return void ye?.()}Ue(!1)}yt.current=h,hn(f,p,t)},onPointerUp:(e,h)=>{yt.current=h,Promise.resolve(Ue(!0)).finally(()=>{ye?.(),Xt(null),At.current=null,me.current=null,$t(null),t.current?.focus()})}}),[ee]),vt=n.useSynchronizedPointerHandler(Je),ge=l.useMemo(()=>({onPointerDown:vt}),[vt]),[je,Ct]=l.useState(null),Le=l.useRef(null),Xe=l.useMemo(()=>({onPointerDown:(e,h)=>{if(yt.current=h,!t||!t.current)return!1;const g=t.current.getViewFromClient(e.nativeEvent.clientX,e.nativeEvent.clientY),f=g?.getCellCoordsFromClient(e.nativeEvent.clientX,e.nativeEvent.clientY);if(!f)return;if(ie?.(e,f,S)===!1)return!1;e.stopPropagation(),$t("default");const p=g.getRelativePointFromClient(0,0),I=re.current?.ranges[re.current?.ranges.length-1]??r.CoordUtils.cellToRange(re.current?.cell),m=g.toClipBounds(g.getRangeCoordsBounds(I)),X={x:0,y:0};m.x-p.x>e.nativeEvent.clientX?X.x=e.nativeEvent.clientX-(m.x-p.x):e.nativeEvent.clientX>=m.x-p.x+m.width&&(X.x=Math.max(0,e.nativeEvent.clientX-(m.x-p.x+m.width))+1),m.y-p.y>e.nativeEvent.clientY?X.y=e.nativeEvent.clientY-(m.y-p.y):e.nativeEvent.clientY>=m.y-p.y+m.height&&(X.y=Math.max(0,e.nativeEvent.clientY-(m.y-p.y+m.height))+1),ae?.(I,e.nativeEvent,h),Le.current={range:I,anchor:g.getAnchor(),cell:f,isMoving:!1,extrusion:X}},onPointerMoveOrWait:(e,h,g)=>{if(Ve||!t?.current||!re.current||!Le.current)return;const f=e.clientX-g.clientX,p=e.clientY-g.clientY;if(Le.current.isMoving=Le.current.isMoving||Math.abs(f)>Math.max(1,2)||Math.abs(p)>Math.max(1,2)||performance.now()-g.timeStamp>500,!Le.current.isMoving)return;const I=Le.current.anchor,m=Le.current.extrusion;let X=t.current.getViewFromLocation(I),V=X.getCellCoordsFromClient(e.clientX-m.x,e.clientY-m.y,!0);if(!V)return;const W=Le.current.cell,Q=Le.current.range,we=de(),j=Q.colEnd-Q.colStart+1,H=Math.min(Math.max(0,W.colIndex-Q.colStart),j-1),nt=Math.min(we.right-j+1,Math.max(we.left,V.colIndex-H)),E=Q.rowEnd-Q.rowStart+1,fe=Math.min(Math.max(0,W.rowIndex-Q.rowStart),E-1),ft=Math.min(we.bottom-E+1,Math.max(we.top,V.rowIndex-fe)),ue={colStart:nt,colEnd:nt+j-1,rowStart:ft,rowEnd:ft+E-1};r.CoordUtils.isEqualRanges(je,ue)&&!(ce=>!ce||!yt.current||yt.current.ctrlKey!==ce.ctrlKey||yt.current.shiftKey!==ce.shiftKey||yt.current.altKey!==ce.altKey||yt.current.metaKey!==ce.metaKey)(e)||(Ct(ue),xe?.(ue,e,h)),yt.current=h,hn(X,V,t)},onPointerUp:(e,h)=>{yt.current=h;const g=()=>{Ct(null),Le.current=null,$t(null),t.current?.focus()};if(!Le.current)return void g();const f=Le.current.range,p=je;$?.(f,e,h),Promise.resolve(f&&p&&C?.(f,p,e,h)).finally(()=>{g()})}}),[je]),Pe=n.useSynchronizedPointerHandler(Xe),Me=l.useMemo(()=>({onPointerDown:Pe}),[Pe]),st=l.useRef(null),et=l.useMemo(()=>{const e=r.CoordUtils.isEqualSelectionCoords(S,st.current)?st.current:S;return st.current=e,e},[S]),ht=l.useCallback(e=>{let h=null,g="br";const f=[],p={stroke:N,fill:L,strokeWidth:.5},I=(j,H,nt)=>{const E=e.toClipBounds(e.getRangeCoordsBounds(j),It);if(!E)return;E.x=E.width>0?E.x:E.x-p.strokeWidth/2,E.y=E.height>0?E.y:E.y-p.strokeWidth/2,E.width=Math.max(E.width,p.strokeWidth),E.height=Math.max(E.height,p.strokeWidth);const fe={key:`selection-fill-${H}`,range:j,...E,...p};if(nt){const ft=e.getCellCoordsAsRangeCoords(nt);fe.cell=nt,fe.pathBounds=e.toClipBounds(e.getRangeCoordsBounds(ft),It),fe.pathBounds&&(fe.pathBounds.width<=0||fe.pathBounds.height<=0)&&(delete fe.pathBounds,delete fe.cell)}return he(fe)};let m=S?Rt(S):null;const X=m?.cell?e.getCellCoordsAsRangeCoords(m?.cell):To;!m||m.ranges&&m.ranges.length!==0||(m={ranges:[X],rangeIndex:0,cell:m.cell});for(let j=0;m&&j<m.ranges.length;j++){const H=m.ranges[j],nt=I(H,j,j===m.rangeIndex?m.cell:null);nt&&f.push(nt);const E=2,fe=.5,ft=e.toClipBounds(e.getRangeCoordsBounds(H,{top:0,left:0,right:0,bottom:0}),It);if(ft){const ue=(m.ranges.length,4);f.push(he({range:H,key:`selection-inside-edge-${j}`,x:ft.x-1,y:ft.y-1,width:Math.max(ft.width+1,0),height:Math.max(ft.height+1,0),style:{overflow:"hidden"},stroke:N,strokeWidth:ue}))}if(m.ranges.length===1){const ue=e.toClipBounds(e.getRangeCoordsBounds(H),It);if(ue){Ve||f.push(he({range:H,key:`move-selection-hit-box-${j}`,x:ue.width>1?ue.x:ue.x-(Se/2+1),y:ue.height>1?ue.y:ue.y-(Se/2+1),width:Math.max(ue.width+2,1),height:Math.max(ue.height+2,1),stroke:"transparent",style:{boxShadow:"none"},pathProps:{cursor:je?void 0:"move",pointerEvents:"stroke"},strokeWidth:Se,...Me}));const ce=E;f.push(he({range:H,key:`selection-single-${j}`,x:ue.x-ce/2,y:ue.y-ce/2,width:Math.max(ue.width+ce/2,1),height:Math.max(ue.height+ce/2,1),stroke:Y,strokeWidth:ce}))}}else{const ue=e.toClipBounds(e.getRangeCoordsBounds(H,{top:-1,left:-1,right:-2,bottom:-2}),It);ue&&f.push(he({range:H,key:`selection-multi-${j}`,x:ue.width>1?ue.x:ue.x-fe/2,y:ue.height>1?ue.y:ue.y-fe/2,width:Math.max(ue.width,fe)+1,height:Math.max(ue.height,fe)+1,stroke:Y,style:{overflow:"hidden"},strokeWidth:2}))}if(m.ranges.length>1&&j===m.rangeIndex){const ue=e.getCellCoordsAsRangeCoords(m.cell),ce=e.toClipBounds(e.getRangeCoordsBounds(ue,{top:1,left:1,right:-1,bottom:-1}),It);ce&&f.push(he({range:H,key:`selection-anchor-${j}`,x:ce.x,y:ce.y,width:Math.max(ce.width,fe),height:Math.max(ce.height,fe),stroke:Y,style:{overflow:"hidden"},strokeWidth:2}))}if(j===m.ranges.length-1){h=null,g=null;const ue=H.rowStart===de().top&&H.rowEnd===de().bottom,ce=H.colStart===de().left&&H.colEnd===de().right,tt=e.getRangeCoordsBounds(H);let Dt=null;if(ue||ce){if(Dt=e.toClipBounds(tt,It),Object.keys(e.allViews()).length>1){const an=e.getVisibleRangeCoords(),Bn=e.allViews()[r.AnchorLocation.TopLeft],go=e.allViews()[r.AnchorLocation.Top],wo=e.allViews()[r.AnchorLocation.Left],dn=e.getAnchor();(ce&&(dn===r.AnchorLocation.Top&&Bn||dn===r.AnchorLocation.Center&&wo||!r.CoordUtils.isCellWithinRange({colIndex:H.colStart,rowIndex:H.rowEnd},an)&&!r.CoordUtils.isCellWithinRange({colIndex:H.colStart,rowIndex:H.rowEnd+1},an))||ue&&(dn===r.AnchorLocation.Left&&Bn||dn===r.AnchorLocation.Center&&go||!r.CoordUtils.isCellWithinRange({colIndex:H.colEnd,rowIndex:H.rowStart},an)&&!r.CoordUtils.isCellWithinRange({colIndex:H.colEnd+1,rowIndex:H.rowStart},an)))&&(Dt=null)}}else Dt=e.toClipBounds(tt,It);if(!Dt||Dt.width===0||Dt.height===0)continue;h={x:Dt.x+Dt.width+1,y:Dt.y+Dt.height+1},Dt.width===0||Dt.height===0||H.rowStart===de().top&&H.colStart===de().left&&H.rowEnd===de().bottom&&H.colEnd===de().right||(ue?(h.y=E,g="tr"):ce&&(h.x=E,g="bl"))}}let V=null;if(Re){const j=e.toClipBounds(e.getRangeCoordsBounds(Re,{top:0,left:0,right:0,bottom:0}),It);j&&(V=he({...p,range:Re,key:"remove-selection",x:j.x,y:j.y,width:j.width,height:j.height,strokeWidth:2,stroke:mt,fill:gt}))}let W=null;if(St){const j=e.toClipBounds(e.getRangeCoordsBounds(St,{top:0,left:0,right:0,bottom:0}),It);j&&(W=he({range:St,key:"selection-fill-outline",x:j.x-2/2,y:j.y-2/2,width:j.width+2/2,height:j.height+2/2,strokeWidth:2,stroke:Y,strokeDasharray:"3 2"}))}let Q=null;!q&&h&&!je&&(Q=l.createElement(Tn,{...h,corner:g,size:7.5,borderStroke:`${N} solid`,style:{borderRadius:1},background:Y,...ge,key:"fillHandle"}));const we=[...f];if(V&&we.push(V),W&&we.push(W),Q&&we.push(Q),!it&&bt&&m?.ranges.length===1&&m.ranges[m.ranges.length-1]){const j=m.ranges[m.ranges.length-1],H=j.rowStart===de().top&&j.rowEnd===de().bottom,nt=j.colStart===de().left&&j.colEnd===de().right,E={view:e,range:j,borderStroke:`${Y} solid`,background:N,selectionTouchPointerHandler:pn,...ot,onTouchSelectStart:fe=>jt(fe),onTouchSelectEnd:()=>jt(null),currentTouchAnchor:en};we.push(ne.jsx(fn,{anchor:nt?"b":H?"r":"br",scrollableElement:t.current,...E},"touch-select-handle-after")),we.push(ne.jsx(fn,{anchor:nt?"t":H?"l":"tl",scrollableElement:t.current,...E},"touch-select-handle-before"))}if(je){const j=e.toClipBounds(e.getRangeCoordsBounds(je,{top:1,left:1,right:1,bottom:1}),It);j&&we.push(he({range:je,key:"selection-move-outline",x:j.x-G/2,y:j.y-G/2,width:Math.max(j.width+G/2,1),height:Math.max(j.height+G/2,1),stroke:Y,style:{boxShadow:"none",transitionDuration:"70ms",transitionTimingFunction:"ease-in",transitionProperty:"left, top, width, height",willChange:"left, top, width, height"},strokeWidth:G}))}return ne.jsx("div",{children:we},"selection")},[et,Re,q,St,Ve,je,de,N,Y,L,mt,gt,it,ot,en]),Et=l.useMemo(()=>{const e=()=>t.current;return[new n.SimpleCommand("moveToPageDown",e,{label:"Page Down",description:"Shift viewport down one page.",shortcut:[{key:"PageDown"}]},()=>on(!1)),new n.SimpleCommand("selectToPageDown",e,{label:"Select To Page Down",description:"Shift viewport and select down one page.",shortcut:[{key:"PageDown",modifiers:[n.KeyModifiers.Shift]}]},()=>on(!0)),new n.SimpleCommand("moveToPageRight",e,{label:"Page Right",description:"Shift viewport right one page.",shortcut:[{key:"PageDown",modifiers:[n.KeyModifiers.Alt]}]},()=>rn(!1)),new n.SimpleCommand("selectToPageRight",e,{label:"Page Right",description:"Shift viewport right one page.",shortcut:[{key:"PageDown",modifiers:[n.KeyModifiers.Alt,n.KeyModifiers.Shift]}]},()=>rn(!0)),new n.SimpleCommand("moveToPageUp",e,{label:"Page Up",description:"Shift viewport up one page.",shortcut:[{key:"PageUp"}]},()=>Mt(!1)),new n.SimpleCommand("selectToPageUp",e,{label:"Page Up",description:"Shift viewport up one page.",shortcut:[{key:"PageUp",modifiers:[n.KeyModifiers.Shift]}]},()=>Mt(!0)),new n.SimpleCommand("moveToPageLeft",e,{label:"Page Left",description:"Shift viewport left one page.",shortcut:[{key:"PageUp",modifiers:[n.KeyModifiers.Alt]}]},()=>Jt(!1)),new n.SimpleCommand("selectToPageLeft",e,{label:"Page Left",description:"Shift viewport left one page.",shortcut:[{key:"PageUp",modifiers:[n.KeyModifiers.Alt,n.KeyModifiers.Shift]}]},()=>Jt(!0)),new n.SimpleCommand("selectColumn",e,{label:"Select Column",description:"Select the columns for the selected cells.",shortcut:{key:"Space",modifiers:[n.KeyModifiers.Ctrl]}},mn),new n.SimpleCommand("selectRow",e,{label:"Select Row",description:"Select the rows for the selected cells.",shortcut:{key:"Space",modifiers:[n.KeyModifiers.Shift]}},Cn),new n.SimpleCommand("selectToColumnStart",e,{label:"Select To Column Start",description:"Select the columns to the beginning of the sheet."},()=>tn(!0)),new n.SimpleCommand("selectToColumnEnd",e,{label:"Select To Column End",description:"Select the columns to the end of the sheet."},()=>nn(!0)),new n.SimpleCommand("moveToRowStart",e,{label:"Move to Row Home",description:"Move to the beginning of the row.",shortcut:[{key:"Home"}]},()=>_t(!1)),new n.SimpleCommand("selectToRowStart",e,{label:"Select to Row Home",description:"Select to the beginning of the row.",shortcut:[{key:"Home",modifiers:[n.KeyModifiers.Shift]}]},()=>_t(!0)),new n.SimpleCommand("moveToSheetStart",e,{label:"Move to Sheet Home",description:"Move to the beginning of the sheet.",shortcut:[{key:"Home",modifiers:[n.KeyModifiers.Ctrl]}]},()=>qt(!1)),new n.SimpleCommand("selectToSheetStart",e,{label:"Select to Sheet Home",description:"Select to the beginning of the sheet.",shortcut:[{key:"Home",modifiers:[n.KeyModifiers.Ctrl,n.KeyModifiers.Shift]}]},()=>qt(!0)),new n.SimpleCommand("moveToRowEnd",e,{label:"Move to Row End",description:"Move to the end of the row.",shortcut:[{key:"End"}]},()=>Gt(!1)),new n.SimpleCommand("selectToRowEnd",e,{label:"Select to Row End",description:"Select to the end of the row.",shortcut:[{key:"End",modifiers:[n.KeyModifiers.Shift]}]},()=>Gt(!0)),new n.SimpleCommand("moveToSheetEnd",e,{label:"Move to Sheet End",description:"Move to the end of the sheet.",shortcut:[{key:"End",modifiers:[n.KeyModifiers.Ctrl]}]},()=>Vt(!1)),new n.SimpleCommand("selectToSheetEnd",e,{label:"Select to Sheet End",description:"Select to the end of the sheet.",shortcut:[{key:"End",modifiers:[n.KeyModifiers.Ctrl,n.KeyModifiers.Shift]}]},()=>Vt(!0)),new n.SimpleCommand("scrollToActiveCoords",e,{label:"Scroll to Active Cell",description:"Scroll to the Active Cell.",shortcut:{key:"Backspace",modifiers:[n.KeyModifiers.Ctrl]}},Ft),new n.SimpleCommand("scrollToActiveCoordsClearSelection",e,{label:"Scroll to Active Cell",description:"Scroll to the Active Cell and clear selection.",shortcut:{key:"Backspace",modifiers:[n.KeyModifiers.Shift]}},()=>{Bt(),Qe(S.cell,!0)}),new n.SimpleCommand("traverseSelectionRight",e,{label:"Traverse Right",description:"Traverse the selection moving rightward.",shortcut:{key:"Tab"}},cn),new n.SimpleCommand("traverseSelectionLeft",e,{label:"Traverse Left",description:"Traverse the selection moving leftward.",shortcut:{key:"Tab",modifiers:[n.KeyModifiers.Shift]}},ln),new n.SimpleCommand("traverseSelectionDown",e,{label:"Traverse Down",description:"Traverse the selection moving downward.",shortcut:[{key:"Enter"},{key:"NumpadEnter"}]},vn),new n.SimpleCommand("traverseSelectionUp",e,{label:"Traverse Up",description:"Traverse the selection moving upward.",shortcut:[{key:"Enter",modifiers:[n.KeyModifiers.Shift]},{key:"NumpadEnter",modifiers:[n.KeyModifiers.Shift]}]},yn),new n.SimpleCommand("moveLeft",e,{label:"Move Left",description:"Move active cell to the left.",shortcut:[{key:"ArrowLeft"}]},sn),new n.SimpleCommand("selectLeft",e,{label:"Select Left",description:"Extend selection left.",shortcut:[{key:"ArrowLeft",modifiers:[n.KeyModifiers.Shift]}]},x),new n.SimpleCommand("moveContentfulLeft",e,{label:"Move Left Contentful",description:"Move left to the next cell with content.",shortcut:[{key:"ArrowLeft",modifiers:[n.KeyModifiers.Ctrl]}]},b),new n.SimpleCommand("selectContentfulLeft",e,{label:"Select Left Contentful",description:"Extend selection left to the next cell with content.",shortcut:[{key:"ArrowLeft",modifiers:[n.KeyModifiers.Ctrl,n.KeyModifiers.Shift]}]},O),new n.SimpleCommand("moveRight",e,{label:"Move Right",description:"Move active cell to the right.",shortcut:[{key:"ArrowRight"}]},R),new n.SimpleCommand("selectRight",e,{label:"Select Right",description:"Extend selection right.",shortcut:[{key:"ArrowRight",modifiers:[n.KeyModifiers.Shift]}]},v),new n.SimpleCommand("moveContentfulRight",e,{label:"Move Right Contentful",description:"Move right to the next cell with content.",shortcut:[{key:"ArrowRight",modifiers:[n.KeyModifiers.Ctrl]}]},B),new n.SimpleCommand("selectContentfulRight",e,{label:"Select Right Contentful",description:"Extend selection right to the next cell with content.",shortcut:[{key:"ArrowRight",modifiers:[n.KeyModifiers.Ctrl,n.KeyModifiers.Shift]}]},Z),new n.SimpleCommand("moveUp",e,{label:"Move Up",description:"Move active cell to the up.",shortcut:[{key:"ArrowUp"}]},te),new n.SimpleCommand("selectUp",e,{label:"Select Up",description:"Extend selection up.",shortcut:[{key:"ArrowUp",modifiers:[n.KeyModifiers.Shift]}]},le),new n.SimpleCommand("moveContentfulUp",e,{label:"Move Up Contentful",description:"Move up to the next cell with content.",shortcut:[{key:"ArrowUp",modifiers:[n.KeyModifiers.Ctrl]}]},K),new n.SimpleCommand("selectContentfulUp",e,{label:"Select Up Contentful",description:"Extend selection up to the next cell with content.",shortcut:[{key:"ArrowUp",modifiers:[n.KeyModifiers.Ctrl,n.KeyModifiers.Shift]}]},pe),new n.SimpleCommand("moveDown",e,{label:"Move Down",description:"Move active cell to the down.",shortcut:[{key:"ArrowDown"}]},He),new n.SimpleCommand("selectDown",e,{label:"Select Down",description:"Extend selection down.",shortcut:[{key:"ArrowDown",modifiers:[n.KeyModifiers.Shift]}]},ke),new n.SimpleCommand("moveContentfulDown",e,{label:"Move Down Contentful",description:"Move down to the next cell with content.",shortcut:[{key:"ArrowDown",modifiers:[n.KeyModifiers.Ctrl]}]},De),new n.SimpleCommand("selectContentfulDown",e,{label:"Select Down Contentful",description:"Extend selection down to the next cell with content.",shortcut:[{key:"ArrowDown",modifiers:[n.KeyModifiers.Ctrl,n.KeyModifiers.Shift]}]},Ke),new n.SimpleCommand("selectVisible",e,{label:"Select Visible",description:"Select visible cells only.",shortcut:{key:";",modifiers:[n.KeyModifiers.Alt]}},Sn),new n.SimpleCommand("traverseSelectionPreviousRange",e,{label:"Traverse Previous Range",description:"Traverse the selection to the previous range.",shortcut:{key:"ArrowLeft",modifiers:[n.KeyModifiers.Ctrl,n.KeyModifiers.Alt]}},Qt),new n.SimpleCommand("traverseSelectionNextRange",e,{label:"Traverse Next Range",description:"Traverse the selection to the next range.",shortcut:{key:"ArrowRight",modifiers:[n.KeyModifiers.Ctrl,n.KeyModifiers.Alt]}},Rn),new n.SimpleCommand("traverseSelectionCorners",e,{label:"Traverse Corners",description:"Traverse the selection through the corners of the selected range.",shortcut:{key:".",modifiers:[n.KeyModifiers.Ctrl]}},En)]},[]);return l.useMemo(()=>{o?.addCommands(Et,!0)},[o]),{selection:et,setSelectionCell:Qe,setSelectionRanges:rt,overlay:ht,cursor:Ht,onPointerDown:xn,clearLastSelection:be,newSelection:wt,modifySelection:lt,appendSelection:Ie,clearSelections:Bt,isEntire:ut,navigate:_e,navigateSelection:Ot}};
12
+ `);for(let w=0;w<a.length;w++){let M=document.createElement("span");d.appendChild(M),M.textContent=a[w]}a.length!==0&&a[a.length-1].length!==0||d.appendChild(document.createElement("br")),document.body.appendChild(d);let s=d.getBoundingClientRect();return d.remove(),{width:s.width,height:s.height,maxLineHeight:1.2*(i.paintableText?.fontSize||1056/72)}}}const fo=(t=void 0)=>Object.freeze({clean:t,dirty:void 0,editMode:!1}),Fo=fo(),Vo=l.memo(l.forwardRef((t,o)=>{const{editState:i=Fo,defaultTextStyle:c,onStartEdit:u,onChangeEdit:d,onSubmitEdit:a,onCancelEdit:s,onDoneEdit:w,containerBounds:M,setNaturalSize:A,onNavigate:k,textProperties:U,style:z,autoFocus:q,...N}=t,J=l.useRef(null),{width:Ce=0}=M??{},[_,D]=l.useState(()=>i);l.useEffect(()=>{D(i)},[i]);const F=U?.align||"left",se=U?.vAlign||"middle",P=U?.fill||"#040404",ie=U?.wrap||"wrap",ze=U?.fontFamily||"Calibri",ve=U?.fontSize||11,Ae=U?.fontWeight||400,ae=U?.fontStyle||"normal",xe=_.dirty??_.clean??"";let $=2;const C=96*ve/72,Fe=1.2*C;se==="right"&&($+=1);const Ve=l.useMemo(()=>new Ko().naturalDimensions(xe,{maxWidth:ie==="wrap"?Ce-$:void 0,lineHeight:`${Fe}px`,paintableText:{fontStyle:ae,wrap:ie,letterSpacing:-.25}}),[xe,ie,$,C,ze,Ae,ae,A,Ce]),ee=l.useCallback(()=>Ve.maxLineHeight?Ve.maxLineHeight+"px":"1.2",[Ve]),[Se,G]=l.useState(ee);l.useLayoutEffect(()=>{G(ee())},[M,Ve]),l.useLayoutEffect(()=>{A?.({width:ie==="wrap"?void 0:Ve.width+$,height:Ve.height})},[Ve,A]);const L=n.useCallbackRef(d,[d]),Y=n.useCallbackRef(y=>{if(_.dirty===y)return;const ye={..._};ye.dirty=y,J.current,D(ye),L?.(ye)},[_]),mt=n.useCallbackRef(y=>{if(_.editMode===y)return;const ye={..._};ye.editMode=y,D(ye),L?.(ye)},[_]),gt=n.useCallbackRef(()=>{try{return a?.(_),w?.(),!0}catch{return!1}},[a,_]),it=n.useCallbackRef(()=>{D(i),s?.(),w?.()},[s,i]),ot=n.useCallbackRef(y=>{if(!J.current)return;if(y.isDefaultPrevented(),!(y.isTrusted||y.nativeEvent.ctrlKey||y.nativeEvent.metaKey||y.nativeEvent.altKey||y.nativeEvent.isComposing)&&On.indexOf(y.nativeEvent.key)!==-1){const oe={..._};return oe.dirty=y.nativeEvent.key==="Backspace"?"":(oe.dirty??"")+y.key,D(oe),L?.(oe),void y.preventDefault()}const ye=y.nativeEvent.shiftKey;if(y.which===n.KeyCodes.Escape)return y.preventDefault(),void it();if(y.which===n.KeyCodes.F2)return mt(!0),void y.preventDefault();if(y.which===n.KeyCodes.Enter&&(y.preventDefault(),gt()&&k?.(ye?r.Direction.Up:r.Direction.Down)),y.which===n.KeyCodes.Tab)return y.preventDefault(),void(gt()&&k?.(ye?r.Direction.Left:r.Direction.Right));if(!_.editMode){let oe=null;switch(y.which){case n.KeyCodes.Left:oe=r.Direction.Left;break;case n.KeyCodes.Right:oe=r.Direction.Right;break;case n.KeyCodes.Up:oe=r.Direction.Up;break;case n.KeyCodes.Down:oe=r.Direction.Down}if(oe)return void gt()}},[_,k]),[de,Pt]=l.useState(!q);l.useEffect(()=>{Pt(!1)},[]);const T=n.useImperativeElement(o,()=>({startEdit(y){let ye=y?.initialSelection;if(!ye){const he=J.current.value.length??0;ye={start:he,end:he,direction:"forward"}}J.current?.setSelectionRange(ye.start,ye.end,ye.direction);const oe={...i,editMode:y?.editMode??!1};y?.text!==void 0&&(oe.dirty=y.text),oe.editMode===i.editMode&&oe.dirty===i.dirty||(D(oe),L?.(oe))},submitEdit:()=>gt(),cancelEdit(){it()},autoFocus(){J.current?.focus()},getLineHeight:()=>Ve?.maxLineHeight??Fe,dispatchEvent:y=>J.current.dispatchEvent(y)}),[i,u]);return ne.jsx("div",{ref:T,...N,style:{background:"transparent",display:"flex",flexGrow:1,alignSelf:"center",height:Ve.height,maxWidth:"100%",maxHeight:"100%",...z},children:ne.jsx("textarea",{spellCheck:"false",ref:J,value:xe,autoFocus:!1,disabled:de,name:"cell-editor",autoComplete:"off",autoCapitalize:"off",style:{flex:"1 1 100%",position:"relative",fontSize:`${C}px`,fontFamily:`${ze}`,fontWeight:`${Ae}`,fontStyle:`${ae}`,padding:"0px",marginRight:F==="right"?"3px":"0px",marginLeft:F==="left"?"2px":"0px",lineHeight:Se,height:Ve.height,textRendering:"geometricPrecision",letterSpacing:"-0.25px",boxSizing:"border-box",borderWidth:0,outline:"none",resize:"none",overflow:"hidden",verticalAlign:"baseline",textAlign:F,background:"transparent",color:P,marginBottom:"0px",userSelect:"text",maxHeight:"100%",whiteSpace:ie==="wrap"?"break-spaces":"pre",wordWrap:"break-word"},onChange:y=>{Y(y.target.value)},onDoubleClick:y=>{y.isTrusted},onMouseDown:y=>{mt(!0)},onKeyDown:ot})})})),Wo=l.memo(t=>{const{value:o,view:i,bounds:c,range:u,zoom:d,children:a,style:s,...w}=t,M=s?.fontSize||1056/72;return ne.jsx("div",{style:{padding:"2px 4px",fontFamily:"Calibri",letterSpacing:-.25,lineHeight:1.2,fontSize:M,...s},...w,children:o})});exports.BaseGrid=An,exports.DefaultCellEditor=Vo,exports.DefaultCellRenderer=Wo,exports.DefaultHeaderDivider=ho,exports.FillHandle=Tn,exports.Grid=$n,exports.HeaderDivider=Bo,exports.HeaderRenderer=so,exports.RESET_SCROLL_EVENTS_DEBOUNCE_INTERVAL=150,exports.SELECTION_CLIP_INSETS=It,exports.STANDARD_KEY_CHARS=On,exports.SVGLine=Un,exports.SVGRect=ro,exports.ScrollableGrid=co,exports.Selection=zn,exports.TouchSelectHandle=fn,exports.defaultSelectionRenderer=Xn,exports.getDefaultStringEditState=fo,exports.safeSelectionCoords=Rt,exports.useAnimatedMeasure=oo,exports.useCellLayout=eo,exports.useHeaderSelection=({gridRef:t,gridMainRef:o,orientation:i=r.RangeOrientation.Row,headerCount:c,selectionPolicy:u="multiple",newSelectionMode:d="clear",alwaysScrollToActiveCoords:a=!0,onDragStart:s,onDragEnd:w,pointerDownInterceptor:M,pointerMoveInterceptor:A,onPointerUp:k,newSelection:U,modifySelection:z,appendSelection:q,clearSelections:N})=>{const J=c??((i===r.RangeOrientation.Row?t.current?.rowCount:t.current?.columnCount)||0),Ce=l.useRef(null),_=l.useRef(null),D=l.useRef(!1),F=l.useRef(null),se=l.useCallback($=>i===r.RangeOrientation.Column?{rowIndex:0,colIndex:$.colIndex}:{rowIndex:$.rowIndex,colIndex:0},[i]),P=l.useCallback($=>i===r.RangeOrientation.Column?{rowIndex:o.current?o.current.rowCount-1:0,colIndex:$.colIndex}:{rowIndex:$.rowIndex,colIndex:o.current?o.current.columnCount-1:0},[i]),ie=$=>{_.current=P($),z(_.current,Ce.current)},ze=l.useCallback(($,C)=>{if(!t.current)return;const Fe=t.current.getViewFromClient($,C)?.getCellCoordsFromClient($,C);return Fe?(i===r.RangeOrientation.Column?Fe.rowIndex=o.current.getViewport().rowStart:Fe.colIndex=o.current.getViewport().colStart,Fe):void 0},[]),ve=l.useCallback(($,C=!1)=>{let Fe=$;return C||(Fe={...$},i===r.RangeOrientation.Row?delete Fe.colIndex:delete Fe.rowIndex),o.current?.scrollCellCoordsIntoView(Fe)},[i]),Ae=n.useCallbackRef(w,[w]),ae=n.useCallbackRef(s,[s]),xe=l.useMemo(()=>({onPointerDown:$=>{if(!t||!t.current||$.nativeEvent.defaultPrevented)return;const C=ze($.nativeEvent.clientX,$.nativeEvent.clientY);if(!C)return;$.nativeEvent.which,n.MouseButtonCodes.Right;const Fe=$.nativeEvent.shiftKey,Ve=$.nativeEvent.ctrlKey||$.nativeEvent.metaKey;if(M?.($,C)===!1)return;ae?.(),D.current=!0;const ee=o.current?.getViewFromClient($.nativeEvent.clientX,$.nativeEvent.clientY),Se=((G,L)=>i===r.RangeOrientation.Column?{...G,rowIndex:L.rowStart}:{...G,colIndex:L.colStart})(C,ee.getVisibleRangeCoords());if(Fe)ie(C);else{if(Ve)return((G,L=G,Y)=>{Ce.current=se(G),_.current=P(L),q(Ce.current,_.current,Y)})(C,C,Se),void(a&&ve(Se,!0));((G,L=G,Y)=>{Ce.current=se(G),_.current=P(L),U(Ce.current,_.current,Y)})(C,C,Se),ie(C),a&&ve(Se,!0)}},onPointerMoveOrWait:r.CommonUtils.throttle($=>{if(!D.current||!t?.current)return;const C=ze($.clientX,$.clientY);if(C&&A?.($,C)!==!1){if(r.CoordUtils.isEqualCells(F.current,C))return N();ie(C),ve(C)}},60),onPointerUp:$=>{D.current=!1,Ae?.(),k?.($)},processTouch:!0,consumeTouch:!0}),[u,a,J,d,N,M,k]);return{onPointerDown:n.useCallbackRef(n.useSynchronizedPointerHandler(xe),[]),getCellCoordsFromClient:ze}},exports.useKeyboardEditorOverlay=t=>{const{view:o,canEdit:i=po,getCellEditor:c,onBeforeStartEdit:u,onStartEdit:d,onSubmitEdit:a,onCancelEdit:s,onDoneEdit:w,isEditorStartKeyEvent:M=mo,isEditorStartPointerEvent:A=Co,containerProps:k,borderStrokeFill:U,borderStrokeWidth:z=2,getRangeCoords:q=null,activeCoords:N,alignment:J=n.HorizontalAlignment.Left}=t,[Ce,_]=l.useState(!1),[D,F]=l.useState(void 0),se=n.useCallbackRef((T,y,ye,oe,he,$e)=>{if(!y)return null;const Ge=he?.(y,T),xt=T.getRangeCoordsBounds(Ge),Ze=T.toClipBounds(xt),Tt=xt,ct=T.getZoom();if(!Ze)return null;ye&&(ye*=ct),oe&&(oe*=ct);let S=Tt,re=!1;if(ye!==void 0){let qe={...Ge},Ht=0;for(;!re&&S.width<=ye&&Ht<20;){Ht++,Ht>19&&console.warn("max width reached");const $t=T.getTotalRangeCoords(),St=T.getLayout();$e===n.HorizontalAlignment.Left?qe.colEnd+1<$t.colEnd?qe.colEnd=St.getColIndex(S.x+ye):re=!0:$e===n.HorizontalAlignment.Right?qe.colStart-1>=0?qe.colStart=St.getColIndex(S.x-(ye-S.width)):re=!0:$e===n.HorizontalAlignment.Center&&qe.colEnd+1<$t.colEnd&&qe.colStart-1>=0?(qe.colStart=St.getColIndex(S.x-(ye-S.width)/2),qe.colEnd=St.getColIndex(S.x+S.width+(ye-S.width)/2)):re=!0,re||(S=T.getRangeCoordsBounds(qe))}}S.height=Tt.height,oe!==void 0&&(S.height=Math.max(oe+1,Tt.height));const{width:Ne,height:rt}=T.getViewportSize();return{x:S.x??0,y:S.y??0,height:Math.min(rt-S.y,S.height)+1,width:Math.min(Ne-S.x,S.width)+1}},[J]),P=n.useCallbackRef(i,[i]),ie=l.useCallback(()=>{o?.getStage()?.focus()},[o]),ze=l.useRef(null),ve=n.useCallbackRef(T=>{u?.(T),L(),_(!0),ze.current=null},[u]),Ae=n.useCallbackRef(T=>{d?.(T.coords)},[d]),ae=n.useCallbackRef(T=>{T.isSubmitted||T.isCancelled||(C.current.isEditorClosed=!0,ie(),T.isCancelled=!0,s?.(T.coords),L())},[s]),xe=n.useCallbackRef(T=>{if(T.isSubmitted||T.isCancelled)return!1;try{return ze.current=T.coords,T.isEditorClosing=!0,T.isSubmitted=!0,T.isEditorSubmitted||(T.isEditorSubmitted=!0,T.editorRefs[0]?.submitEdit?.()),T.coords,a?.(T.coords),T.isEditorClosed=!0,ie(),L(),!0}catch(y){throw T.isEditorClosing=!1,T.isSubmitted=!1,y}},[a]),$=n.useCallbackRef(T=>{_(!1),w?.(T.coords),L()},[w]),C=l.useRef(null),Fe=l.useRef(null),Ve=l.useRef(null),ee=l.useRef([]),[Se,G]=l.useReducer(T=>T+1,0),L=l.useCallback(T=>{T&&ee.current.push(T),G()},[]),Y=n.useCallbackRef(T=>{if(T.defaultPrevented||T.isSynthetic||!o)return;const y=o?.getCellCoordsFromClient(T.clientX,T.clientY);y&&L({eventType:"pointer",event:T,coords:y})},[o]),mt=n.useCallbackRef(T=>{const y=T.nativeEvent;Y(y)},[o]),gt=n.useCallbackRef(T=>{if(T.defaultPrevented||T.isSynthetic||!o?.getStage())return;const y=Fe.current;M(T,y)&&(T.stopPropagation(),T.preventDefault()),T.key,L({eventType:"keyboard",event:T,coords:y})},[o]);l.useLayoutEffect(()=>{const T=(oe,he)=>{const $e=he?.cell??oe;if(!$e)return null;const Ge=$e;if(!P($e))return null;ve?.($e);const xt=r.CommonUtils.uuidV4();he=Object.freeze({autoFocus:!0,...he}),Ve.current=$e;const Ze={coords:Ge,startEvent:he,uuid:xt,isMounted:!1,isStarted:!1,isSubmitted:!1,isEditorSubmitted:!1,isEditorClosing:!1,isEditorClosed:!1,isCancelled:!1,events:[],editorRefsDispatchEditorEvent:[],editorRefs:[],onMount:Tt=>{Ze.isMounted||(Ze.isMounted=!0,L())},onUnmount:Tt=>{if(Ze.editorRefs.length===0){const ct=()=>{Ze.isMounted=!1,L()};if(document.activeElement!==document.body)ct();else{const S=re=>{re.defaultPrevented||re.target!==document.body||gt(re)};window.addEventListener("keydown",S,!0),o.getStage()?.addEventListener("focusin",()=>{window.removeEventListener("keydown",S),ct()},{once:!0}),ie()}}}};return Ze};if(ee.current.length<=0&&!C.current)return;const y=ee.current[0];Fn(y),(oe=>{const he=[],$e=oe?.length??0;for(let Ge=0;Ge<$e;Ge++){const xt=oe[Ge];he.push(Fn(xt))}})(ee.current),C.current,C.current;let ye=C.current;if(C.current){if(C.current.isDone)C.current=null;else if(C.current.isSubmitted||C.current.isCancelled){if(C.current.isMounted)return;C.current.isDone||($(C.current),C.current.isDone=!0)}}if(y){if(y.eventType==="start"){const oe=y,he=oe.startEvent?.cell??Fe.current;C.current&&r.CoordUtils.isEqualCells(C.current.coords,he)||(C.current=T(he,oe.startEvent))}else if(y.eventType==="keyboard"){const oe=y.event;if(C.current){let he=!1;switch(oe.which){case n.KeyCodes.Left:case n.KeyCodes.Right:case n.KeyCodes.Up:case n.KeyCodes.Down:case n.KeyCodes.Enter:case n.KeyCodes.Tab:he=!0}if(!he){C.current.events.push(y);for(let $e=0;$e<C.current.editorRefsDispatchEditorEvent.length;$e++)C.current.editorRefsDispatchEditorEvent[$e](y)}}else if(M(oe,y.coords)){let he;const $e=T(he?.cell??Fe.current,he);$e&&$e.events.push(y),C.current=$e}}else if(y.eventType==="pointer"){const oe=y.event;if(C.current){C.current.events.push(y);for(let he=0;he<C.current.editorRefsDispatchEditorEvent.length;he++)C.current.editorRefsDispatchEditorEvent[he](y)}else{const he=y?.coords??Fe.current,$e=A(oe,he);if($e){let Ge;typeof Ge!="boolean"&&(Ge=$e);const xt=T(he,Ge);xt&&xt.events.push(y),C.current=xt}}}else if(y.eventType==="submit"){if(C.current&&!C.current.isSubmitted&&!C.current.isCancelled){if(!C.current.isMounted)return;xe(C.current)}}else if(y.eventType==="cancel"){if(C.current&&!C.current.isSubmitted&&!C.current.isCancelled){if(!C.current.isMounted)return;ae(C.current)}}else if(y.eventType==="coordsChange"){const oe=y;if(Fe.current=oe.activeCoords,C.current,C.current&&!C.current.isSubmitted&&!C.current.isCancelled){if(!C.current.isMounted)return;try{xe(C.current)}catch{}}}}ee.current.length>0&&(ee.current.shift(),L()),ee.current.length===0&&(!C.current||C.current.isEditorClosing||C.current.isEditorClosed?!C.current&&ye&&ie():C.current.isMounted&&!C.current.isStarted&&(C.current.isStarted=!0,C.current.startEvent.autoFocus&&(typeof C.current.startEvent.autoFocus=="string"?C.current.editorRefs[0]?.autoFocus(C.current.startEvent.autoFocus):C.current.editorRefs[0]?.autoFocus()),Ae?.(C.current),requestAnimationFrame(()=>{o&&C.current?.coords&&o.scrollCellCoordsIntoView(C.current.coords)})))},[Se]),l.useEffect(()=>{Ve.current=N;const T=C.current?.coords;r.CoordUtils.isEqualCells(T,N)||(C.current&&(C.current.isEditorClosing=!0),L({eventType:"coordsChange",activeCoords:N}))},[N]);const it=l.useCallback(T=>{gt(T.nativeEvent)},[]),{width:ot=0,height:de=0}=D??{width:0,height:0},Pt=n.useCallbackRef(c,[c]);return{overlay:n.useCallbackRef(T=>{if(!C.current||C.current.isEditorClosed)return C.current,null;C.current.coords;let y=se(T,C.current.coords,ot,de,q,J),ye=!0;y&&y.width!==0&&y.height!==0||(y={x:0,y:0,width:ot,height:ot},ye=!1);const oe=T.getZoom(),he={containerBounds:{x:0,y:0,width:y.width/oe,height:y.height/oe},setNaturalSize:F,zoom:oe};return ne.jsx(So,{session:C.current,refLatestCoords:Ve,handleSubmitEdit:xe,handleCancelEdit:ae,cellBounds:y,borderStrokeWidth:z,borderStrokeFill:U,isInBounds:ye,getCellEditor:Pt,propsEditor:he,alignment:J,...k},"editor:"+C.current.uuid)},[c,q,Se,ot,de,J,z,U]),startEdit:l.useCallback(T=>{L({eventType:"start",startEvent:T})},[]),submitEdit:l.useCallback(()=>{L({eventType:"submit"})},[]),cancelEdit:l.useCallback(()=>{L({eventType:"cancel"})},[]),onKeyboardEvent:it,onPointerEvent:mt,onKeyboardEventNative:gt,onPointerEventNative:Y,isEditing:Ce}},exports.useSelection=({gridRef:t,commands:o,layout:i,selection:c,onSelectionChange:u,onSelectionDragStart:d,onSelectionDragEnd:a,selectionPolicy:s="multiple",newSelectionMode:w="clear",allowDeselectSelection:M=!0,onFillPreview:A,onFillCancel:k,onFillDone:U,onFill:z,disableFillDrag:q=!z,fillHandleBorderColor:N="white",hiddenRowsAt:J,hiddenColumnsAt:Ce,isContentfulCell:_,contentfulCellFinder:D=Mo,getDataCoords:F,alwaysScrollToActiveCoords:se=!1,selectionBounds:P,pointerDownInterceptor:ie,pointerMoveInterceptor:ze,mergedRanges:ve,canSelectionSpanMergedCells:Ae=Lo,onMoveDragStart:ae,onMoveDragUpdate:xe,onMoveDragEnd:$,onMoveDragDone:C,selectionRenderer:Fe=Xn,disableMoveDrag:Ve=!$,getCellCoordsAsRangeCoords:ee=r.CoordUtils.cellToRange,moveDragHitSize:Se=6,moveDragOutlineSize:G=4,selectionBackgroundColor:L="rgba(16, 124, 65, 0.1)",selectionBorderColor:Y="rgb(33, 115, 70)",selectionRemoveBorderColor:mt="rgb(255, 0, 0)",selectionRemoveBackgroundColor:gt="rgba(250, 10, 10, 0.1)",disableTouchSelection:it=!1,touchSelectHandleProps:ot})=>{const de=l.useCallback(()=>({top:P?.top??0,left:P?.left??0,bottom:t.current?.rowCount-1||0,right:t.current?.columnCount-1||0}),[]),Pt=n.useCallbackRef(z,[z]),T=n.useCallbackRef(A,[A]),y=n.useCallbackRef(k,[k]),ye=n.useCallbackRef(U,[U]),oe=n.useCallbackRef(_,[_]),he=n.useCallbackRef(Fe,[Fe]),$e=n.useCallbackRef((e,h=!1)=>wn(e,h,i.getRowOffset,h?de().bottom:de().top),[i?.getRowOffset]),Ge=n.useCallbackRef(J??$e,[J]),xt=n.useCallbackRef((e,h=!1)=>wn(e,h,i.getColOffset,h?de().right:de().left),[i?.getColOffset]),Ze=n.useCallbackRef(Ce??xt,[Ce]),[Tt,ct]=l.useState(()=>Rt(c)),S=l.useMemo(()=>Rt(Tt),[Tt]),re=l.useRef(S),Ne=l.useRef(!0);l.useLayoutEffect(r.CommonUtils.throttle(()=>{ct(e=>{Ne.current=!0;const h=Rt(c);return r.CoordUtils.isEqualSelectionCoords(h,e)?e:h})},0),[c]),l.useLayoutEffect(()=>{re.current=S},[S]),l.useEffect(()=>{Ne.current||!u||r.CoordUtils.isEqualSelectionCoords(c,S)||u(S)},[S]);const rt=l.useCallback(e=>{ct(h=>{Ne.current=!1,h=Rt(h);let g=typeof e=="function"?e(h.ranges):e??Ln;if(r.CoordUtils.isEqualRangesArrays(g,h.ranges))return h;let f=Math.max(g.length?0:-1,Math.min(h.rangeIndex,g.length-1)),p=h.cell;f===-1||r.CoordUtils.isCellWithinRange(p,g[f])||(p={rowIndex:g[f].rowStart,colIndex:g[f].colStart}),g.length===1&&r.CoordUtils.isSingleCell(g[0])&&r.CoordUtils.isCellWithinRange(p,g[0])&&(g=[],f=-1);const I={cell:p,ranges:g,rangeIndex:f};return r.CoordUtils.isEqualSelectionCoords(I,h)?h:I})},[]),qe=n.useCallbackRef(e=>{ct(h=>{Ne.current=!1,h=Rt(h);const g=e??io,f=ee(g);if(!r.CoordUtils.isSingleCell(f)&&h.ranges.length===0)return{ranges:[f],rangeIndex:0,cell:g};if(r.CoordUtils.isEqualCells(g,h.cell))return h;let p=h.ranges,I=h.rangeIndex;h.ranges.length===1&&(r.CoordUtils.isSingleCell(h.ranges[0])&&r.CoordUtils.isCellWithinRange(g,h.ranges[0])||!r.CoordUtils.isCellWithinRange(g,h.ranges[0]))&&(p=[],I=-1);const m={ranges:p,rangeIndex:I,cell:g};return r.CoordUtils.isEqualSelectionCoords(m,h)?h:m})},[ee]),[Ht,$t]=l.useState(null),[St,Xt]=l.useState(null),At=l.useRef(null),[Re,Ut]=l.useState(null),at=l.useRef(null),kt=l.useRef(null),[en,jt]=l.useState(null),Be=l.useRef(null),Te=l.useRef(null),Kt=l.useRef(ve);l.useEffect(()=>{Kt.current=ve},[ve]);const dt=n.useCallbackRef((e,h={inline:"nearest",block:"nearest"})=>{let{rowIndex:g,colIndex:f}=e;g===void 0&&S?.cell&&(g=S.cell.rowIndex),f===void 0&&S?.cell&&(f=S.cell.colIndex),g!==void 0&&f!==void 0&&t.current?.scrollCellCoordsIntoView({rowIndex:g,colIndex:f},h)},[S]),Lt=l.useCallback(e=>{const h=de();return e.rowIndex<h.top||e.colIndex<h.left||e.colIndex>h.right||e.rowIndex>h.bottom},[]),Ee=n.useCallbackRef((e,h)=>{if(!t?.current)return null;const g={rowStart:Math.min(e.rowIndex,h.rowIndex),colStart:Math.min(e.colIndex,h.colIndex),rowEnd:Math.max(e.rowIndex,h.rowIndex),colEnd:Math.max(e.colIndex,h.colIndex)};if(Ae?.(g))return g;const p=ee(e),I=ee(h),m={rowStart:Math.min(p.rowStart,I.rowStart),colStart:Math.min(p.colStart,I.colStart),rowEnd:Math.max(p.rowEnd,I.rowEnd),colEnd:Math.max(p.colEnd,I.colEnd)};let X;return typeof Kt.current=="function"?X=Kt.current(m):ve&&(X=ve),X?r.CoordUtils.extendRangeToUnionRanges(m,X):m},[Ae,ee]),We=n.useCallbackRef((e,h,g)=>{const f=e.ranges.length>0?e.ranges[e.rangeIndex]:{rowStart:e.cell.rowIndex,colStart:e.cell.colIndex,rowEnd:e.cell.rowIndex,colEnd:e.cell.colIndex},p={rowStart:Math.min(h.rowIndex??f.rowStart,g.rowIndex??f.rowStart),colStart:Math.min(h.colIndex??f.colStart,g.colIndex??f.colStart),rowEnd:Math.max(h.rowIndex??f.rowEnd,g.rowIndex??f.rowEnd),colEnd:Math.max(h.colIndex??f.colEnd,g.colIndex??f.colEnd)},I={rowIndex:p.rowStart,colIndex:p.colStart},m={rowIndex:p.rowEnd,colIndex:p.colEnd};if(!(Lt(I)||Lt(m)))return Ee(I,m)},[Ee]),lt=n.useCallbackRef((e,h,g)=>{if(s==="single"||!re.current)return;const f=We(re.current,e,h??re.current.cell);if(!f)return;const p=re.current.rangeIndex;rt(I=>I.length?I.map((m,X)=>p===X?f:m):[f]),g&&f&&qe({colIndex:f.colStart,rowIndex:f.rowStart})},[]),wt=l.useCallback((e,h,g)=>{if(!re.current)return;e={...re.current?.cell,...e},h=h??e;const f=We(re.current,e,h);if(!f)return;const p={rowIndex:f.rowStart,colIndex:f.colStart},I={...p,...g};w==="clear"?(Be.current=I,Bt()):w==="modify"?lt(p):Ie(p),qe(I)},[]),Ie=l.useCallback((e,h=e,g)=>{s!=="multiple"||!e||Lt(e)||Lt(h)||ct(f=>{Ne.current=!1,f=Rt(f);const p=Ee(e,h);if(!p)return f;let I=f.ranges.length>0?[...f.ranges]:[Ee(f.cell,f.cell)];I.push(p);const m={ranges:I,cell:{rowIndex:p.rowStart,colIndex:p.colStart,...g},rangeIndex:I.length-1};return r.CoordUtils.isEqualSelectionCoords(m,f)?f:m})},[]),Bt=()=>{rt(Ln)},bt=n.ReactUtils.detectIt().primaryInput==="touch",Ye=l.useRef(null),pt=l.useRef(null),yt=l.useRef(null),Nt=l.useMemo(()=>({onPointerDown:e=>{if(!t||!t.current)return!1;const h=e.nativeEvent,g=t.current.getViewFromClient(h.clientX,h.clientY);if(h.pointerType==="touch"||h.type==="touchstart")return pt.current={topLeft:g.getScrollTopLeft(),point:{x:h.clientX,y:h.clientY}},!0;const f=g.getCellCoordsFromClient(e.nativeEvent.clientX,e.nativeEvent.clientY);if(!f)return!1;Ye.current={anchor:g.getAnchor(),coords:f},Te.current=null;const p=e.nativeEvent.which===n.MouseButtonCodes.Right;if(p&&r.CoordUtils.indexOfCoords(f,S.ranges)!==-1)return!1;const I=e.nativeEvent.shiftKey,m=e.nativeEvent.ctrlKey||e.nativeEvent.metaKey,X=m,V=M,W=S.ranges.length>0,Q=m&&V;if(ie?.(e,f,S)===!1)return!1;d?.(re.current,e.nativeEvent);const we=!p&&s!=="single";if(I)return lt(f),we;const j=r.CoordUtils.isEqualCells(f,S.cell);if(X){if(j&&(!Q||!W))return we;if(m&&r.CoordUtils.indexOfCoords(f,S.ranges)!==-1&&V){at.current=f;const H=Ee(f,f);return kt.current=H,Ut(H),we}return Ie(f),we}se&&dt(f),j&&S.ranges.length===0||wt(f)},onPointerMoveOrWait:r.CommonUtils.throttle((e,h)=>{if(!t?.current||e.pointerType==="touch"||e.type==="touchmove"||!Ye.current)return;const g=Ye.current.anchor;let f=t.current.getViewFromLocation(g),p=f.getCellCoordsFromClient(e.clientX,e.clientY);if(!r.CoordUtils.isEqualCells(p,Ye.current?.coords)&&(Ye.current={anchor:g,coords:p},p&&ze?.(e,p,re.current)!==!1)){if(at.current){const I={rowStart:Math.min(p.rowIndex,at.current.rowIndex),colStart:Math.min(p.colIndex,at.current.colIndex),rowEnd:Math.max(p.rowIndex,at.current.rowIndex),colEnd:Math.max(p.colIndex,at.current.colIndex)},m={rowIndex:I.rowStart,colIndex:I.colStart},X={rowIndex:I.rowEnd,colIndex:I.colEnd};if(Lt(m)||Lt(X))return;const V=Ee(m,X);kt.current=V,Ut(V)}else lt(p);yt.current=h,hn(f,p,t)}},60),onPointerUp:e=>{if(Ye.current=null,e.pointerType==="touch"||e.type==="touchend"){if(pt.current){const g=t.current.getViewFromClient(pt.current.point.x,pt.current.point.y),f=g.getScrollTopLeft();if(f.left===pt.current.topLeft.left&&f.top===pt.current.topLeft.top){const p=g.getCellCoordsFromClient(pt.current.point.x,pt.current.point.y);wt(p)}}return pt.current=null,void(Ye.current=null)}try{a?.(re.current,e)}catch(g){console.warn(g)}if(!at.current)return;const h=kt.current;at.current=null,kt.current=null,Ut(null),ct(g=>{if(Ne.current=!1,(g=Rt(g)).ranges.length===0)return g;let f=[],p=-1,I=g.cell;for(let X=0;X<g.ranges.length;X++){const V=g.ranges[X];if(r.CoordUtils.isRangesIntersect(V,h)){const W=r.CommonUtils.subtractRect({top:V.rowStart,left:V.colStart,bottom:V.rowEnd+1,right:V.colEnd+1},{top:h.rowStart,left:h.colStart,bottom:h.rowEnd+1,right:h.colEnd+1});for(let Q=0;Q<W.length;Q++){const we={rowStart:W[Q].top,colStart:W[Q].left,rowEnd:W[Q].bottom-1,colEnd:W[Q].right-1};f.push(we),r.CoordUtils.isCellWithinRange(g.cell,we)&&(p=f.length-1)}}else f.push(V);f.length>0&&p===-1&&r.CoordUtils.isCellWithinRange(g.cell,V)&&(p=f.length-1,I={rowIndex:f[f.length-1].rowStart,colIndex:f[f.length-1].colStart})}const m={cell:I,rangeIndex:p,ranges:f};return r.CoordUtils.isEqualSelectionCoords(m,g)?g:m})},processTouch:!0,consumeTouch:!1}),[S,s,M,se,w]),xn=n.useCallbackRef(n.useSynchronizedPointerHandler(Nt),[]),pn=l.useMemo(()=>({onSelectionPointerDown:(e,h,g,f,p=S.cell,I=se,m=e.nativeEvent.shiftKey,X=!1)=>{if(!t||!t.current)return!1;e.stopPropagation(),e.preventDefault(),e.nativeEvent.stopImmediatePropagation();const V=g??t.current.getViewFromClient(e.nativeEvent.clientX,e.nativeEvent.clientY),W=f??V.getCellCoordsFromClient(e.nativeEvent.clientX,e.nativeEvent.clientY);if(!W)return!1;Ye.current={anchor:V.getAnchor(),coords:W},Te.current=null;const Q=e.nativeEvent.which===n.MouseButtonCodes.Right;if(Q&&r.CoordUtils.indexOfCoords(W,S.ranges)!==-1)return!1;const we=e.nativeEvent.ctrlKey||e.nativeEvent.metaKey,j=we,H=M,nt=S.ranges.length>0,E=we&&H;if(ie?.(e,W,S)===!1)return!1;d?.(re.current,e.nativeEvent);const fe=!Q&&s!=="single";if(m)return lt(W,p,X),fe;const ft=r.CoordUtils.isEqualCells(W,p);if(j){if(ft&&(!E||!nt))return fe;if(E&&r.CoordUtils.indexOfCoords(W,S.ranges)!==-1&&H){at.current=W;const ue=Ee(W,W);return kt.current=ue,Ut(ue),fe}return Ie(W),fe}I&&dt(W),ft&&S.ranges.length===0||wt(W)},onSelectionPointerMoveOrWait:(e,h,g,f,p,I=S.cell,m=!0,X=!1)=>{if(!t?.current||(e.stopPropagation(),e.preventDefault(),e.stopImmediatePropagation(),!Ye.current))return;const V=Ye.current.anchor;let W=f??t.current.getViewFromLocation(V),Q=p??W.getCellCoordsFromClient(e.clientX,e.clientY);if(!r.CoordUtils.isEqualCells(Q,Ye.current?.coords)&&(Ye.current={anchor:V,coords:Q},Q&&ze?.(e,Q,re.current)!==!1)){if(at.current){const we={rowStart:Math.min(Q.rowIndex,at.current.rowIndex),colStart:Math.min(Q.colIndex,at.current.colIndex),rowEnd:Math.max(Q.rowIndex,at.current.rowIndex),colEnd:Math.max(Q.colIndex,at.current.colIndex)},j={rowIndex:we.rowStart,colIndex:we.colStart},H={rowIndex:we.rowEnd,colIndex:we.colEnd};if(Lt(j)||Lt(H))return;const nt=Ee(j,H);kt.current=nt,Ut(nt)}else lt(Q,I,X);m&&hn(W,Q,t)}},onPointerUp:e=>{Ye.current=null,e.stopPropagation(),e.preventDefault(),e.stopImmediatePropagation();try{a?.(re.current,e)}catch(g){console.warn(g)}if(!at.current)return;const h=kt.current;at.current=null,kt.current=null,Ut(null),ct(g=>{if(Ne.current=!1,(g=Rt(g)).ranges.length===0)return g;let f=[],p=-1,I=g.cell;for(let X=0;X<g.ranges.length;X++){const V=g.ranges[X];if(r.CoordUtils.isRangesIntersect(V,h)){const W=r.CommonUtils.subtractRect({top:V.rowStart,left:V.colStart,bottom:V.rowEnd+1,right:V.colEnd+1},{top:h.rowStart,left:h.colStart,bottom:h.rowEnd+1,right:h.colEnd+1});for(let Q=0;Q<W.length;Q++){const we={rowStart:W[Q].top,colStart:W[Q].left,rowEnd:W[Q].bottom-1,colEnd:W[Q].right-1};f.push(we),r.CoordUtils.isCellWithinRange(g.cell,we)&&(p=f.length-1)}}else f.push(V);f.length>0&&p===-1&&r.CoordUtils.isCellWithinRange(g.cell,V)&&(p=f.length-1,I={rowIndex:f[f.length-1].rowStart,colIndex:f[f.length-1].colStart})}const m={cell:I,rangeIndex:p,ranges:f};return r.CoordUtils.isEqualSelectionCoords(m,g)?g:m})}}),[S,s,M,se,w]),_e=n.useCallbackRef((e,h=!1,g=!1,f=0)=>{if(!t.current||!S.cell)return;let p=S.cell,I=S.cell;if(h&&S.ranges.length>0){const E=S.ranges[S.rangeIndex],fe=S.cell;switch(e){case r.Direction.Up:I={rowIndex:fe.rowIndex===E.rowStart?E.rowEnd:E.rowStart,colIndex:E.colEnd},p={rowIndex:fe.rowIndex===E.rowStart?E.rowStart:E.rowEnd,colIndex:E.colStart};break;case r.Direction.Down:I={rowIndex:fe.rowIndex===E.rowEnd?E.rowStart:E.rowEnd,colIndex:E.colEnd},p={rowIndex:fe.rowIndex===E.rowEnd?E.rowEnd:E.rowStart,colIndex:E.colStart};break;case r.Direction.Left:I={rowIndex:E.rowEnd,colIndex:fe.colIndex===E.colStart?E.colEnd:E.colStart},p={rowIndex:E.rowStart,colIndex:fe.colIndex===E.colStart?E.colStart:E.colEnd};break;case r.Direction.Right:I={rowIndex:E.rowEnd,colIndex:fe.colIndex===E.colEnd?E.colStart:E.colEnd},p={rowIndex:E.rowStart,colIndex:fe.colIndex===E.colEnd?E.colEnd:E.colStart}}}const m=ee(I);let{rowStart:X,colStart:V}=m;const W=de();if(Te.current)switch(e){case r.Direction.Up:case r.Direction.Down:Te.current.colIndex>=m.colStart&&Te.current.colIndex<=m.colEnd&&(V=Te.current.colIndex);break;case r.Direction.Left:case r.Direction.Right:Te.current.rowIndex>=m.rowStart&&Te.current.rowIndex<=m.rowEnd&&(X=Te.current.rowIndex)}if(!f){switch(e){case r.Direction.Up:X=Oe(Ge,Math.max(m.rowStart-1,W.top),e);break;case r.Direction.Down:X=Oe(Ge,Math.min(m.rowEnd+1,W.bottom),e);break;case r.Direction.Left:V=Oe(Ze,Math.max(m.colStart-1,W.left),e);break;case r.Direction.Right:V=Oe(Ze,Math.min(m.colEnd+1,W.right),e)}if(g)switch(e){case r.Direction.Up:X=D({...I,colIndex:S.cell.colIndex},oe,Ge,e,!1,Math.max(W.top,Ge(W.top,!1)));break;case r.Direction.Down:X=D({...I,colIndex:S.cell.colIndex},oe,Ge,e,!1,Math.min(W.bottom,W.bottom-Ge(W.bottom,!0)));break;case r.Direction.Left:V=D({...I,rowIndex:S.cell.rowIndex},oe,Ze,e,!1,Math.max(W.left,Ze(W.left,!1)));break;case r.Direction.Right:V=D({...I,rowIndex:S.cell.rowIndex},oe,Ze,e,!1,Math.min(W.right,W.right-Ze(W.right,!0)))}}let Q=null;if(f){let E=0;switch(e){case r.Direction.Up:E=i.getRowOffset(X+1),X=Math.max(W.top,i.getRowIndex(E-f)),Q={top:i.getRowOffset(X+1)-(E-t.current.getScrollPosition().top)};break;case r.Direction.Down:E=i.getRowOffset(X),X=Math.min(W.bottom,i.getRowIndex(E+f)),Q={top:i.getRowOffset(X)-(E-t.current.getScrollPosition().top)};break;case r.Direction.Left:E=i.getColOffset(V+1),V=Math.max(W.left,i.getColIndex(E-f)),Q={left:i.getColOffset(V+1)-(E-t.current.getScrollPosition().left)};break;case r.Direction.Right:E=i.getColOffset(V),V=Math.min(W.right,i.getColIndex(E+f)),Q={left:i.getColOffset(V)-(E-t.current.getScrollPosition().left)}}}const we={rowIndex:X,colIndex:V},j=ee(we),H={rowIndex:j.rowStart,colIndex:j.colStart};h||(Te.current=we);const nt=r.CoordUtils.isEqualCells(Be.current,H)&&r.CoordUtils.isEqualCells(Be.current,p);if(h&&!nt?lt(H,p):wt(H),Q)t.current.scrollTo(Q);else{if(h&&Be.current){const E=de();if(e===r.Direction.Right&&Be.current.colIndex===E.left||e===r.Direction.Left&&Be.current.colIndex===E.right||e===r.Direction.Up&&Be.current.rowIndex===E.bottom||e===r.Direction.Down&&Be.current.rowIndex===E.top)return}e===r.Direction.Left||e===r.Direction.Right?dt({colIndex:we.colIndex}):e!==r.Direction.Up&&e!==r.Direction.Down||dt({rowIndex:we.rowIndex})}},[S,ee]),Ot=n.useCallbackRef(e=>{if(!t.current)return;if(S.ranges.length===0)return void _e(e);const h=ee(S.cell);if(r.CoordUtils.isEqualRangesArrays([h],S.ranges))return void _e(e);const g=Pn(S,e,ee,Ge,Ze);ct(f=>{Ne.current=!1,f=Rt(f);const p={...f,cell:g.cell,rangeIndex:g.rangeIndex};return r.CoordUtils.isEqualSelectionCoords(p,f)?f:p}),g.cell&&dt(g.cell)},[S,ee]),mn=l.useCallback(()=>{const e=de();lt({rowIndex:e.top},{rowIndex:e.bottom})},[]),Cn=l.useCallback(()=>{const e=de();lt({colIndex:e.left},{colIndex:e.right})},[]),Ft=n.useCallbackRef(()=>{S.cell&&t?.current&&dt(S.cell)},[S.cell]),tn=l.useCallback((e=!1)=>{const h={rowIndex:de().top};e?lt(h):wt(h),dt(h)},[]),nn=l.useCallback((e=!1)=>{const h={rowIndex:de().bottom};e?lt(h):wt(h),dt(h)},[]),_t=l.useCallback((e=!1)=>{const h={colIndex:de().left};e?lt(h):wt(h),dt(h)},[]),qt=l.useCallback((e=!1)=>{const h=de(),g={rowIndex:h.top,colIndex:h.left};e?lt(g):wt(g),dt(g)},[]),Gt=l.useCallback((e=!1)=>{const h=de(),g={colIndex:F?.()?.colEnd??h.right};e?lt(g):wt(g),dt(g)},[F]),Vt=l.useCallback((e=!1)=>{const h=de(),g={rowIndex:F?.()?.rowEnd??h.bottom,colIndex:F?.()?.colEnd??h.right};e?lt(g):wt(g),dt(g)},[F]),Zt=n.useCallbackRef(e=>{if(!t.current||S.ranges.length<=1)return;const h=e===r.Direction.Left||e===r.Direction.Up;let g=S.rangeIndex+(h?-1:1);g<0?g=S.ranges.length-1:g>S.ranges.length-1&&(g=0);const f=S.ranges[g],p=Pn({cell:{rowIndex:f.rowEnd,colIndex:f.colEnd},rangeIndex:0,ranges:[f]},r.Direction.Right,ee,Ge,Ze);ct(I=>{Ne.current=!1,I=Rt(I);const m={...I,cell:p.cell,rangeIndex:g};return r.CoordUtils.isEqualSelectionCoords(m,I)?I:m}),p.cell&&dt(p.cell)},[S,ee]),Sn=n.useCallbackRef(()=>{const e=jn(S);ct(h=>{Ne.current=!1,h=Rt(h);const g={...h,visibleSelection:e};return r.CoordUtils.isEqualSelectionCoords(g,h)?h:g}),e.cell&&dt(e.cell)},[S,ee]),bn=n.useCallbackRef(()=>{if(!t.current||S.ranges.length===0)return;const e=S.cell,h=S.ranges[S.rangeIndex],g=jn({cell:e,rangeIndex:0,ranges:[h]}),f=g.ranges[g.rangeIndex];let p;p=f.rowStart===e.rowIndex&&f.colStart===e.colIndex?{rowIndex:f.rowStart,colIndex:f.colEnd}:f.rowStart===e.rowIndex&&f.colEnd===e.colIndex?{rowIndex:f.rowEnd,colIndex:f.colStart}:f.rowEnd===e.rowIndex&&f.colStart===e.colIndex?{rowIndex:f.rowEnd,colIndex:f.colEnd}:{rowIndex:f.rowStart,colIndex:f.colStart},ct(I=>{I=Rt(I);const m={...I,cell:p};return r.CoordUtils.isEqualSelectionCoords(m,I)?I:m}),p&&dt(p)},[S,ee]),on=l.useCallback((e=!1)=>{_e(r.Direction.Down,e,!1,t.current.getDimensions().containerHeight)},[]),Mt=l.useCallback((e=!1)=>{_e(r.Direction.Up,e,!1,t.current.getDimensions().containerHeight)},[]),rn=l.useCallback((e=!1)=>{_e(r.Direction.Right,e,!1,t.current.getDimensions().containerWidth)},[]),Jt=l.useCallback((e=!1)=>{_e(r.Direction.Left,e,!1,t.current.getDimensions().containerWidth)},[]),ln=l.useCallback(()=>{Ot(r.Direction.Left)},[]),cn=l.useCallback(()=>{Ot(r.Direction.Right)},[]),yn=l.useCallback(()=>{Ot(r.Direction.Up)},[]),vn=l.useCallback(()=>{Ot(r.Direction.Down)},[]),Qt=l.useCallback(()=>{Zt(r.Direction.Left)},[]),Rn=l.useCallback(()=>{Zt(r.Direction.Right)},[]),En=l.useCallback(()=>{bn()},[]),sn=l.useCallback(()=>{_e(r.Direction.Left,!1,!1)},[]),x=l.useCallback(()=>{_e(r.Direction.Left,!0,!1)},[]),b=l.useCallback(()=>{_e(r.Direction.Left,!1,!0)},[]),O=l.useCallback(()=>{_e(r.Direction.Left,!0,!0)},[]),R=l.useCallback(()=>{_e(r.Direction.Right,!1,!1)},[]),v=l.useCallback(()=>{_e(r.Direction.Right,!0,!1)},[]),B=l.useCallback(()=>{_e(r.Direction.Right,!1,!0)},[]),Z=l.useCallback(()=>{_e(r.Direction.Right,!0,!0)},[]),te=l.useCallback(()=>{_e(r.Direction.Up,!1,!1)},[]),le=l.useCallback(()=>{_e(r.Direction.Up,!0,!1)},[]),K=l.useCallback(()=>{_e(r.Direction.Up,!1,!0)},[]),pe=l.useCallback(()=>{_e(r.Direction.Up,!0,!0)},[]),He=l.useCallback(()=>{_e(r.Direction.Down,!1,!1)},[]),ke=l.useCallback(()=>{_e(r.Direction.Down,!0,!1)},[]),De=l.useCallback(()=>{_e(r.Direction.Down,!1,!0)},[]),Ke=l.useCallback(()=>{_e(r.Direction.Down,!0,!0)},[]),be=l.useCallback(()=>{rt(e=>e.slice(0,-1))},[]),ut=l.useMemo(()=>{const e=de();return((h,g,f,p,I)=>{for(let m=0;m<h.length;m++){const X=h[m];if(X.rowStart===g&&X.colStart===f&&X.rowEnd===p&&X.colEnd===I)return!0}return!1})(S.ranges,e.top,e.left,e.bottom,e.right)},[P,S.ranges]),Qe=l.useCallback((e,h=!0)=>{Be.current=e,qe(e),h&&e&&t?.current&&dt(e)},[]),Ue=n.useCallbackRef((e=!0)=>{const h=At.current;if(!re.current?.cell)return;const g=re.current?.ranges,f=re.current?.cell;if(!f||!h||!h)return;let p=null;if(p=g.length>0?g[g.length-1]:ee(f),p.colEnd>=p.colStart&&p.rowEnd>=p.rowStart){const I=Nn(p,h);let m=e?Pt:T;try{m?.(p,h,I.direction)}catch(X){console.warn(X)}finally{e&&ye?.()}}},[ee]),me=l.useRef(null),Je=l.useMemo(()=>({onPointerDown:(e,h)=>{if(yt.current=h,!t||!t.current)return!1;const g=t.current.getViewFromClient(e.nativeEvent.clientX,e.nativeEvent.clientY),f=g?.getCellCoordsFromClient(e.nativeEvent.clientX,e.nativeEvent.clientY);f&&(e.stopPropagation(),$t("crosshair"),me.current={anchor:g.getAnchor(),coords:f})},onPointerMoveOrWait:(e,h)=>{if(q||!t?.current||!re.current||!me.current)return;const g=me.current.anchor;let f=t.current.getViewFromLocation(g),p=f.getCellCoordsFromClient(e.clientX,e.clientY);if(!p)return;me.current={anchor:g,coords:p};const I=re.current.ranges;let m=Ee(re.current.cell,p);if(!m)return;const X=I.length>0,V=X?I[I.length-1]:ee(re.current.cell);if(!m)return;const W=m.rowStart<V.rowStart?r.Direction.Up:m.rowEnd>V.rowEnd?r.Direction.Down:m.colEnd>V.colEnd?r.Direction.Right:r.Direction.Left,Q=de();W===r.Direction.Left&&(m={...V,colStart:Math.max(Q.left,m.colStart)}),W===r.Direction.Up&&(m={...V,rowStart:Math.max(Q.top,m.rowStart)}),W===r.Direction.Right&&(m={...V,colEnd:Math.min(Q.right,m.colEnd)}),W===r.Direction.Down&&(m={...V,rowEnd:Math.min(Q.bottom,m.rowEnd)});const we=Nn(V,m);if(!Ae?.(V)){let j;typeof Kt.current=="function"?j=Kt.current(V):ve&&(j=ve),m=((H,nt,E,fe,ft,ue)=>{const ce={...nt};if(E.length===0)return ce;if(ft===r.Direction.Left){const tt=H.colEnd+1-H.colStart;ce.colStart=H.colStart-Math.ceil(ue/tt)*tt,ce.colStart<fe.left&&(ce.colStart=ce.colStart+Math.ceil((fe.left-ce.colStart)/tt)*tt)}else if(ft===r.Direction.Right){const tt=H.colEnd+1-H.colStart;ce.colEnd=H.colEnd+Math.ceil(ue/tt)*tt,ce.colEnd>fe.right&&(ce.colEnd=ce.colEnd-Math.ceil((fe.right-ce.colEnd)/tt)*tt)}else if(ft===r.Direction.Up){const tt=H.rowEnd+1-H.rowStart;ce.rowStart=H.rowStart-Math.ceil(ue/tt)*tt,ce.rowStart<fe.top&&(ce.rowStart=ce.rowStart+Math.ceil((fe.top-ce.rowStart)/tt)*tt)}else if(ft===r.Direction.Down){const tt=H.rowEnd+1-H.rowStart;ce.rowEnd=H.rowEnd+Math.ceil(ue/tt)*tt,ce.rowEnd>fe.bottom&&(ce.rowEnd=ce.rowEnd-Math.ceil((fe.bottom-ce.rowEnd)/tt)*tt)}return ce})(V,m,j,Q,we.direction,we.amount)}if(X&&r.CoordUtils.isRangeWithinRange(m,V)&&(m=null),!r.CoordUtils.isEqualRanges(m,At.current)){if(Xt(m),At.current=m,!m){try{y?.()}catch{}return void ye?.()}Ue(!1)}yt.current=h,hn(f,p,t)},onPointerUp:(e,h)=>{yt.current=h,Promise.resolve(Ue(!0)).finally(()=>{ye?.(),Xt(null),At.current=null,me.current=null,$t(null),t.current?.focus()})}}),[ee]),vt=n.useSynchronizedPointerHandler(Je),ge=l.useMemo(()=>({onPointerDown:vt}),[vt]),[je,Ct]=l.useState(null),Le=l.useRef(null),Xe=l.useMemo(()=>({onPointerDown:(e,h)=>{if(yt.current=h,!t||!t.current)return!1;const g=t.current.getViewFromClient(e.nativeEvent.clientX,e.nativeEvent.clientY),f=g?.getCellCoordsFromClient(e.nativeEvent.clientX,e.nativeEvent.clientY);if(!f)return;if(ie?.(e,f,S)===!1)return!1;e.stopPropagation(),$t("default");const p=g.getRelativePointFromClient(0,0),I=re.current?.ranges[re.current?.ranges.length-1]??r.CoordUtils.cellToRange(re.current?.cell),m=g.toClipBounds(g.getRangeCoordsBounds(I)),X={x:0,y:0};m.x-p.x>e.nativeEvent.clientX?X.x=e.nativeEvent.clientX-(m.x-p.x):e.nativeEvent.clientX>=m.x-p.x+m.width&&(X.x=Math.max(0,e.nativeEvent.clientX-(m.x-p.x+m.width))+1),m.y-p.y>e.nativeEvent.clientY?X.y=e.nativeEvent.clientY-(m.y-p.y):e.nativeEvent.clientY>=m.y-p.y+m.height&&(X.y=Math.max(0,e.nativeEvent.clientY-(m.y-p.y+m.height))+1),ae?.(I,e.nativeEvent,h),Le.current={range:I,anchor:g.getAnchor(),cell:f,isMoving:!1,extrusion:X}},onPointerMoveOrWait:(e,h,g)=>{if(Ve||!t?.current||!re.current||!Le.current)return;const f=e.clientX-g.clientX,p=e.clientY-g.clientY;if(Le.current.isMoving=Le.current.isMoving||Math.abs(f)>Math.max(1,2)||Math.abs(p)>Math.max(1,2)||performance.now()-g.timeStamp>500,!Le.current.isMoving)return;const I=Le.current.anchor,m=Le.current.extrusion;let X=t.current.getViewFromLocation(I),V=X.getCellCoordsFromClient(e.clientX-m.x,e.clientY-m.y,!0);if(!V)return;const W=Le.current.cell,Q=Le.current.range,we=de(),j=Q.colEnd-Q.colStart+1,H=Math.min(Math.max(0,W.colIndex-Q.colStart),j-1),nt=Math.min(we.right-j+1,Math.max(we.left,V.colIndex-H)),E=Q.rowEnd-Q.rowStart+1,fe=Math.min(Math.max(0,W.rowIndex-Q.rowStart),E-1),ft=Math.min(we.bottom-E+1,Math.max(we.top,V.rowIndex-fe)),ue={colStart:nt,colEnd:nt+j-1,rowStart:ft,rowEnd:ft+E-1};r.CoordUtils.isEqualRanges(je,ue)&&!(ce=>!ce||!yt.current||yt.current.ctrlKey!==ce.ctrlKey||yt.current.shiftKey!==ce.shiftKey||yt.current.altKey!==ce.altKey||yt.current.metaKey!==ce.metaKey)(e)||(Ct(ue),xe?.(ue,e,h)),yt.current=h,hn(X,V,t)},onPointerUp:(e,h)=>{yt.current=h;const g=()=>{Ct(null),Le.current=null,$t(null),t.current?.focus()};if(!Le.current)return void g();const f=Le.current.range,p=je;$?.(f,e,h),Promise.resolve(f&&p&&C?.(f,p,e,h)).finally(()=>{g()})}}),[je]),Pe=n.useSynchronizedPointerHandler(Xe),Me=l.useMemo(()=>({onPointerDown:Pe}),[Pe]),st=l.useRef(null),et=l.useMemo(()=>{const e=r.CoordUtils.isEqualSelectionCoords(S,st.current)?st.current:S;return st.current=e,e},[S]),ht=l.useCallback(e=>{let h=null,g="br";const f=[],p={stroke:N,fill:L,strokeWidth:.5},I=(j,H,nt)=>{const E=e.toClipBounds(e.getRangeCoordsBounds(j),It);if(!E)return;E.x=E.width>0?E.x:E.x-p.strokeWidth/2,E.y=E.height>0?E.y:E.y-p.strokeWidth/2,E.width=Math.max(E.width,p.strokeWidth),E.height=Math.max(E.height,p.strokeWidth);const fe={key:`selection-fill-${H}`,range:j,...E,...p};if(nt){const ft=e.getCellCoordsAsRangeCoords(nt);fe.cell=nt,fe.pathBounds=e.toClipBounds(e.getRangeCoordsBounds(ft),It),fe.pathBounds&&(fe.pathBounds.width<=0||fe.pathBounds.height<=0)&&(delete fe.pathBounds,delete fe.cell)}return he(fe)};let m=S?Rt(S):null;const X=m?.cell?e.getCellCoordsAsRangeCoords(m?.cell):To;!m||m.ranges&&m.ranges.length!==0||(m={ranges:[X],rangeIndex:0,cell:m.cell});for(let j=0;m&&j<m.ranges.length;j++){const H=m.ranges[j],nt=I(H,j,j===m.rangeIndex?m.cell:null);nt&&f.push(nt);const E=2,fe=.5,ft=e.toClipBounds(e.getRangeCoordsBounds(H,{top:0,left:0,right:0,bottom:0}),It);if(ft){const ue=(m.ranges.length,4);f.push(he({range:H,key:`selection-inside-edge-${j}`,x:ft.x-1,y:ft.y-1,width:Math.max(ft.width+1,0),height:Math.max(ft.height+1,0),style:{overflow:"hidden"},stroke:N,strokeWidth:ue}))}if(m.ranges.length===1){const ue=e.toClipBounds(e.getRangeCoordsBounds(H),It);if(ue){Ve||f.push(he({range:H,key:`move-selection-hit-box-${j}`,x:ue.width>1?ue.x:ue.x-(Se/2+1),y:ue.height>1?ue.y:ue.y-(Se/2+1),width:Math.max(ue.width+2,1),height:Math.max(ue.height+2,1),stroke:"transparent",style:{boxShadow:"none"},pathProps:{cursor:je?void 0:"move",pointerEvents:"stroke"},strokeWidth:Se,...Me}));const ce=E;f.push(he({range:H,key:`selection-single-${j}`,x:ue.x-ce/2,y:ue.y-ce/2,width:Math.max(ue.width+ce/2,1),height:Math.max(ue.height+ce/2,1),stroke:Y,strokeWidth:ce}))}}else{const ue=e.toClipBounds(e.getRangeCoordsBounds(H,{top:-1,left:-1,right:-2,bottom:-2}),It);ue&&f.push(he({range:H,key:`selection-multi-${j}`,x:ue.width>1?ue.x:ue.x-fe/2,y:ue.height>1?ue.y:ue.y-fe/2,width:Math.max(ue.width,fe)+1,height:Math.max(ue.height,fe)+1,stroke:Y,style:{overflow:"hidden"},strokeWidth:2}))}if(m.ranges.length>1&&j===m.rangeIndex){const ue=e.getCellCoordsAsRangeCoords(m.cell),ce=e.toClipBounds(e.getRangeCoordsBounds(ue,{top:1,left:1,right:-1,bottom:-1}),It);ce&&f.push(he({range:H,key:`selection-anchor-${j}`,x:ce.x,y:ce.y,width:Math.max(ce.width,fe),height:Math.max(ce.height,fe),stroke:Y,style:{overflow:"hidden"},strokeWidth:2}))}if(j===m.ranges.length-1){h=null,g=null;const ue=H.rowStart===de().top&&H.rowEnd===de().bottom,ce=H.colStart===de().left&&H.colEnd===de().right,tt=e.getRangeCoordsBounds(H);let Dt=null;if(ue||ce){if(Dt=e.toClipBounds(tt,It),Object.keys(e.allViews()).length>1){const an=e.getVisibleRangeCoords(),Bn=e.allViews()[r.AnchorLocation.TopLeft],go=e.allViews()[r.AnchorLocation.Top],wo=e.allViews()[r.AnchorLocation.Left],dn=e.getAnchor();(ce&&(dn===r.AnchorLocation.Top&&Bn||dn===r.AnchorLocation.Center&&wo||!r.CoordUtils.isCellWithinRange({colIndex:H.colStart,rowIndex:H.rowEnd},an)&&!r.CoordUtils.isCellWithinRange({colIndex:H.colStart,rowIndex:H.rowEnd+1},an))||ue&&(dn===r.AnchorLocation.Left&&Bn||dn===r.AnchorLocation.Center&&go||!r.CoordUtils.isCellWithinRange({colIndex:H.colEnd,rowIndex:H.rowStart},an)&&!r.CoordUtils.isCellWithinRange({colIndex:H.colEnd+1,rowIndex:H.rowStart},an)))&&(Dt=null)}}else Dt=e.toClipBounds(tt,It);if(!Dt||Dt.width===0||Dt.height===0)continue;h={x:Dt.x+Dt.width+1,y:Dt.y+Dt.height+1},Dt.width===0||Dt.height===0||H.rowStart===de().top&&H.colStart===de().left&&H.rowEnd===de().bottom&&H.colEnd===de().right||(ue?(h.y=E,g="tr"):ce&&(h.x=E,g="bl"))}}let V=null;if(Re){const j=e.toClipBounds(e.getRangeCoordsBounds(Re,{top:0,left:0,right:0,bottom:0}),It);j&&(V=he({...p,range:Re,key:"remove-selection",x:j.x,y:j.y,width:j.width,height:j.height,strokeWidth:2,stroke:mt,fill:gt}))}let W=null;if(St){const j=e.toClipBounds(e.getRangeCoordsBounds(St,{top:0,left:0,right:0,bottom:0}),It);j&&(W=he({range:St,key:"selection-fill-outline",x:j.x-2/2,y:j.y-2/2,width:j.width+2/2,height:j.height+2/2,strokeWidth:2,stroke:Y,strokeDasharray:"3 2"}))}let Q=null;!q&&h&&!je&&(Q=l.createElement(Tn,{...h,corner:g,size:7.5,borderStroke:`${N} solid`,style:{borderRadius:1},background:Y,...ge,key:"fillHandle"}));const we=[...f];if(V&&we.push(V),W&&we.push(W),Q&&we.push(Q),!it&&bt&&m?.ranges.length===1&&m.ranges[m.ranges.length-1]){const j=m.ranges[m.ranges.length-1],H=j.rowStart===de().top&&j.rowEnd===de().bottom,nt=j.colStart===de().left&&j.colEnd===de().right,E={view:e,range:j,borderStroke:`${Y} solid`,background:N,selectionTouchPointerHandler:pn,...ot,onTouchSelectStart:fe=>jt(fe),onTouchSelectEnd:()=>jt(null),currentTouchAnchor:en};we.push(ne.jsx(fn,{anchor:nt?"b":H?"r":"br",scrollableElement:t.current,...E},"touch-select-handle-after")),we.push(ne.jsx(fn,{anchor:nt?"t":H?"l":"tl",scrollableElement:t.current,...E},"touch-select-handle-before"))}if(je){const j=e.toClipBounds(e.getRangeCoordsBounds(je,{top:1,left:1,right:1,bottom:1}),It);j&&we.push(he({range:je,key:"selection-move-outline",x:j.x-G/2,y:j.y-G/2,width:Math.max(j.width+G/2,1),height:Math.max(j.height+G/2,1),stroke:Y,style:{boxShadow:"none",transitionDuration:"70ms",transitionTimingFunction:"ease-in",transitionProperty:"left, top, width, height",willChange:"left, top, width, height"},strokeWidth:G}))}return ne.jsx("div",{children:we},"selection")},[et,Re,q,St,Ve,je,de,N,Y,L,mt,gt,it,ot,en]),Et=l.useMemo(()=>{const e=()=>t.current;return[new n.SimpleCommand("moveToPageDown",e,{label:"Page Down",description:"Shift viewport down one page.",shortcut:[{key:"PageDown"}]},()=>on(!1)),new n.SimpleCommand("selectToPageDown",e,{label:"Select To Page Down",description:"Shift viewport and select down one page.",shortcut:[{key:"PageDown",modifiers:[n.KeyModifiers.Shift]}]},()=>on(!0)),new n.SimpleCommand("moveToPageRight",e,{label:"Page Right",description:"Shift viewport right one page.",shortcut:[{key:"PageDown",modifiers:[n.KeyModifiers.Alt]}]},()=>rn(!1)),new n.SimpleCommand("selectToPageRight",e,{label:"Page Right",description:"Shift viewport right one page.",shortcut:[{key:"PageDown",modifiers:[n.KeyModifiers.Alt,n.KeyModifiers.Shift]}]},()=>rn(!0)),new n.SimpleCommand("moveToPageUp",e,{label:"Page Up",description:"Shift viewport up one page.",shortcut:[{key:"PageUp"}]},()=>Mt(!1)),new n.SimpleCommand("selectToPageUp",e,{label:"Page Up",description:"Shift viewport up one page.",shortcut:[{key:"PageUp",modifiers:[n.KeyModifiers.Shift]}]},()=>Mt(!0)),new n.SimpleCommand("moveToPageLeft",e,{label:"Page Left",description:"Shift viewport left one page.",shortcut:[{key:"PageUp",modifiers:[n.KeyModifiers.Alt]}]},()=>Jt(!1)),new n.SimpleCommand("selectToPageLeft",e,{label:"Page Left",description:"Shift viewport left one page.",shortcut:[{key:"PageUp",modifiers:[n.KeyModifiers.Alt,n.KeyModifiers.Shift]}]},()=>Jt(!0)),new n.SimpleCommand("selectColumn",e,{label:"Select Column",description:"Select the columns for the selected cells.",shortcut:{key:"Space",modifiers:[n.KeyModifiers.Ctrl]}},mn),new n.SimpleCommand("selectRow",e,{label:"Select Row",description:"Select the rows for the selected cells.",shortcut:{key:"Space",modifiers:[n.KeyModifiers.Shift]}},Cn),new n.SimpleCommand("selectToColumnStart",e,{label:"Select To Column Start",description:"Select the columns to the beginning of the sheet."},()=>tn(!0)),new n.SimpleCommand("selectToColumnEnd",e,{label:"Select To Column End",description:"Select the columns to the end of the sheet."},()=>nn(!0)),new n.SimpleCommand("moveToRowStart",e,{label:"Move to Row Home",description:"Move to the beginning of the row.",shortcut:[{key:"Home"}]},()=>_t(!1)),new n.SimpleCommand("selectToRowStart",e,{label:"Select to Row Home",description:"Select to the beginning of the row.",shortcut:[{key:"Home",modifiers:[n.KeyModifiers.Shift]}]},()=>_t(!0)),new n.SimpleCommand("moveToSheetStart",e,{label:"Move to Sheet Home",description:"Move to the beginning of the sheet.",shortcut:[{key:"Home",modifiers:[n.KeyModifiers.Ctrl]}]},()=>qt(!1)),new n.SimpleCommand("selectToSheetStart",e,{label:"Select to Sheet Home",description:"Select to the beginning of the sheet.",shortcut:[{key:"Home",modifiers:[n.KeyModifiers.Ctrl,n.KeyModifiers.Shift]}]},()=>qt(!0)),new n.SimpleCommand("moveToRowEnd",e,{label:"Move to Row End",description:"Move to the end of the row.",shortcut:[{key:"End"}]},()=>Gt(!1)),new n.SimpleCommand("selectToRowEnd",e,{label:"Select to Row End",description:"Select to the end of the row.",shortcut:[{key:"End",modifiers:[n.KeyModifiers.Shift]}]},()=>Gt(!0)),new n.SimpleCommand("moveToSheetEnd",e,{label:"Move to Sheet End",description:"Move to the end of the sheet.",shortcut:[{key:"End",modifiers:[n.KeyModifiers.Ctrl]}]},()=>Vt(!1)),new n.SimpleCommand("selectToSheetEnd",e,{label:"Select to Sheet End",description:"Select to the end of the sheet.",shortcut:[{key:"End",modifiers:[n.KeyModifiers.Ctrl,n.KeyModifiers.Shift]}]},()=>Vt(!0)),new n.SimpleCommand("scrollToActiveCoords",e,{label:"Scroll to Active Cell",description:"Scroll to the Active Cell.",shortcut:{key:"Backspace",modifiers:[n.KeyModifiers.Ctrl]}},Ft),new n.SimpleCommand("scrollToActiveCoordsClearSelection",e,{label:"Scroll to Active Cell",description:"Scroll to the Active Cell and clear selection.",shortcut:{key:"Backspace",modifiers:[n.KeyModifiers.Shift]}},()=>{Bt(),Qe(S.cell,!0)}),new n.SimpleCommand("traverseSelectionRight",e,{label:"Traverse Right",description:"Traverse the selection moving rightward.",shortcut:{key:"Tab"}},cn),new n.SimpleCommand("traverseSelectionLeft",e,{label:"Traverse Left",description:"Traverse the selection moving leftward.",shortcut:{key:"Tab",modifiers:[n.KeyModifiers.Shift]}},ln),new n.SimpleCommand("traverseSelectionDown",e,{label:"Traverse Down",description:"Traverse the selection moving downward.",shortcut:[{key:"Enter"},{key:"NumpadEnter"}]},vn),new n.SimpleCommand("traverseSelectionUp",e,{label:"Traverse Up",description:"Traverse the selection moving upward.",shortcut:[{key:"Enter",modifiers:[n.KeyModifiers.Shift]},{key:"NumpadEnter",modifiers:[n.KeyModifiers.Shift]}]},yn),new n.SimpleCommand("moveLeft",e,{label:"Move Left",description:"Move active cell to the left.",shortcut:[{key:"ArrowLeft"}]},sn),new n.SimpleCommand("selectLeft",e,{label:"Select Left",description:"Extend selection left.",shortcut:[{key:"ArrowLeft",modifiers:[n.KeyModifiers.Shift]}]},x),new n.SimpleCommand("moveContentfulLeft",e,{label:"Move Left Contentful",description:"Move left to the next cell with content.",shortcut:[{key:"ArrowLeft",modifiers:[n.KeyModifiers.Ctrl]}]},b),new n.SimpleCommand("selectContentfulLeft",e,{label:"Select Left Contentful",description:"Extend selection left to the next cell with content.",shortcut:[{key:"ArrowLeft",modifiers:[n.KeyModifiers.Ctrl,n.KeyModifiers.Shift]}]},O),new n.SimpleCommand("moveRight",e,{label:"Move Right",description:"Move active cell to the right.",shortcut:[{key:"ArrowRight"}]},R),new n.SimpleCommand("selectRight",e,{label:"Select Right",description:"Extend selection right.",shortcut:[{key:"ArrowRight",modifiers:[n.KeyModifiers.Shift]}]},v),new n.SimpleCommand("moveContentfulRight",e,{label:"Move Right Contentful",description:"Move right to the next cell with content.",shortcut:[{key:"ArrowRight",modifiers:[n.KeyModifiers.Ctrl]}]},B),new n.SimpleCommand("selectContentfulRight",e,{label:"Select Right Contentful",description:"Extend selection right to the next cell with content.",shortcut:[{key:"ArrowRight",modifiers:[n.KeyModifiers.Ctrl,n.KeyModifiers.Shift]}]},Z),new n.SimpleCommand("moveUp",e,{label:"Move Up",description:"Move active cell to the up.",shortcut:[{key:"ArrowUp"}]},te),new n.SimpleCommand("selectUp",e,{label:"Select Up",description:"Extend selection up.",shortcut:[{key:"ArrowUp",modifiers:[n.KeyModifiers.Shift]}]},le),new n.SimpleCommand("moveContentfulUp",e,{label:"Move Up Contentful",description:"Move up to the next cell with content.",shortcut:[{key:"ArrowUp",modifiers:[n.KeyModifiers.Ctrl]}]},K),new n.SimpleCommand("selectContentfulUp",e,{label:"Select Up Contentful",description:"Extend selection up to the next cell with content.",shortcut:[{key:"ArrowUp",modifiers:[n.KeyModifiers.Ctrl,n.KeyModifiers.Shift]}]},pe),new n.SimpleCommand("moveDown",e,{label:"Move Down",description:"Move active cell to the down.",shortcut:[{key:"ArrowDown"}]},He),new n.SimpleCommand("selectDown",e,{label:"Select Down",description:"Extend selection down.",shortcut:[{key:"ArrowDown",modifiers:[n.KeyModifiers.Shift]}]},ke),new n.SimpleCommand("moveContentfulDown",e,{label:"Move Down Contentful",description:"Move down to the next cell with content.",shortcut:[{key:"ArrowDown",modifiers:[n.KeyModifiers.Ctrl]}]},De),new n.SimpleCommand("selectContentfulDown",e,{label:"Select Down Contentful",description:"Extend selection down to the next cell with content.",shortcut:[{key:"ArrowDown",modifiers:[n.KeyModifiers.Ctrl,n.KeyModifiers.Shift]}]},Ke),new n.SimpleCommand("selectVisible",e,{label:"Select Visible",description:"Select visible cells only.",shortcut:{key:";",modifiers:[n.KeyModifiers.Alt]}},Sn),new n.SimpleCommand("traverseSelectionPreviousRange",e,{label:"Traverse Previous Range",description:"Traverse the selection to the previous range.",shortcut:{key:"ArrowLeft",modifiers:[n.KeyModifiers.Ctrl,n.KeyModifiers.Alt]}},Qt),new n.SimpleCommand("traverseSelectionNextRange",e,{label:"Traverse Next Range",description:"Traverse the selection to the next range.",shortcut:{key:"ArrowRight",modifiers:[n.KeyModifiers.Ctrl,n.KeyModifiers.Alt]}},Rn),new n.SimpleCommand("traverseSelectionCorners",e,{label:"Traverse Corners",description:"Traverse the selection through the corners of the selected range.",shortcut:{key:".",modifiers:[n.KeyModifiers.Ctrl]}},En)]},[]);return l.useMemo(()=>{o?.addCommands(Et,!0)},[o]),{selection:et,setSelectionCell:Qe,setSelectionRanges:rt,overlay:ht,cursor:Ht,onPointerDown:xn,clearLastSelection:be,newSelection:wt,modifySelection:lt,appendSelection:Ie,clearSelections:Bt,isEntire:ut,navigate:_e,navigateSelection:Ot}};
@@ -5,7 +5,7 @@ import { useRef as ie, useReducer as Ln, useState as dt, useEffect as pt, useCal
5
5
  import { CoordUtils as F, CommonUtils as Nt, RangeOrientation as Ht, Direction as w, AnchorLocation as _e } from "@sheetxl/utils";
6
6
  import { createPortal as po } from "react-dom";
7
7
  /**
8
- * @license @sheetxl/grid-react - Grid React - Advanced grid component for React - v0.7.4
8
+ * @license @sheetxl/grid-react - Grid React - Advanced grid component for React - v0.7.6
9
9
  *
10
10
  * (C) 2025-present SheetXL Inc. & Michael T. Ford
11
11
  * License: The license can be found at https://www.sheetxl.com/license.
@@ -258,7 +258,7 @@ const dn = ({ itemType: t, index: n, itemSize: o, instanceProps: r, scale: s = 1
258
258
  p.current.coords;
259
259
  let S = he(D, p.current.coords, ut, fe, Y, ee), Me = !0;
260
260
  S && S.width !== 0 && S.height !== 0 || (S = { x: 0, y: 0, width: ut, height: ut }, Me = !1);
261
- const re = D.getZoom(), xe = { containerBounds: { x: 0, y: 0, width: S.width / re, height: S.height / re }, setNaturalDimensions: U, zoom: re };
261
+ const re = D.getZoom(), xe = { containerBounds: { x: 0, y: 0, width: S.width / re, height: S.height / re }, setNaturalSize: U, zoom: re };
262
262
  return Ce(Uo, { session: p.current, refLatestCoords: Ye, handleSubmitEdit: Se, handleCancelEdit: ge, cellBounds: S, borderStrokeWidth: z, borderStrokeFill: P, isInBounds: Me, getCellEditor: Wt, propsEditor: xe, alignment: ee, ...E }, "editor:" + p.current.uuid);
263
263
  }, [r, Y, Ee, ut, fe, ee, z, P]), startEdit: $((D) => {
264
264
  T({ eventType: "start", startEvent: D });
@@ -1777,7 +1777,7 @@ class ur {
1777
1777
  }
1778
1778
  }
1779
1779
  const hr = (t = void 0) => Object.freeze({ clean: t, dirty: void 0, editMode: !1 }), gr = hr(), Ir = Kt(en((t, n) => {
1780
- const { editState: o = gr, defaultTextStyle: r, onStartEdit: s, onChangeEdit: c, onSubmitEdit: i, onCancelEdit: l, onDoneEdit: h, containerBounds: k, setNaturalDimensions: A, onNavigate: E, textProperties: P, style: z, autoFocus: Y, ...j } = t, ee = ie(null), { width: Ie = 0 } = k ?? {}, [Z, R] = dt(() => o);
1780
+ const { editState: o = gr, defaultTextStyle: r, onStartEdit: s, onChangeEdit: c, onSubmitEdit: i, onCancelEdit: l, onDoneEdit: h, containerBounds: k, setNaturalSize: A, onNavigate: E, textProperties: P, style: z, autoFocus: Y, ...j } = t, ee = ie(null), { width: Ie = 0 } = k ?? {}, [Z, R] = dt(() => o);
1781
1781
  pt(() => {
1782
1782
  R(o);
1783
1783
  }, [o]);