react-spread-grid 0.2.7 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/src/index.js +5 -0
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import*as e from"react";var t={d:(e,o)=>{for(var n in o)t.o(o,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:o[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},o={};t.d(o,{A:()=>it});const n=(r={default:()=>e.default,useState:()=>e.useState},i={},t.d(i,r),i);var r,i;function s(e){return null===e?"null":Array.isArray(e)?`[${e.map(s).join(",")}]`:"object"==typeof e?(t=e,`{${Object.keys(t).sort().map((e=>`${e}:${s(t[e])}`)).join(",")}}`):JSON.stringify(e);var t}function l(e,t){const o="FILTER"===e.type,n="FILTER"===t.type;return o&&!n||!o&&n?"FILTER":"DATA"}function u(e,t,o,n){return e.map((e=>{const r=s(e.columnId),i=s(e.rowId);if(!o.has(r))return null;if(!n.has(i))return null;const u=o.get(r),d=n.get(i);return{edit:t.resolve(d,u).edit,cell:e,type:l(u,d)}})).filter((e=>e?.edit))}function d(e,t){return Math.round(e*t)/t}function c(e,t,o){const n=e.state,r=e.canvases[`${t}-${o}`],i=n.sections[t],s=n.sections[o],l=s.columns,u=i.rows,c=n.devicePixelRatio;if(0===u.length||0===l.length)return void(r.parentElement&&r.parentElement.removeChild(r));r.parentElement||e.element.appendChild(r);const a=r.getContext("2d",{alpha:!1}),h=n.scrollRect,f=n.textResolver,p=n.renderFormatResolver,m=n.borderWidth,g=i.showTopBorder,y=i.showBottomBorder,w=s.showLeftBorder,x=s.showRightBorder,b=m/2,R=u.length-1+(g?1:0)+(y?1:0),v=l.length-1+(w?1:0)+(x?1:0),C=u.map((e=>e.height)),A=l.map((e=>e.width)),k=A.reduce(((e,t)=>e+t),0)+v*m,E=C.reduce(((e,t)=>e+t),0)+R*m,I="center"===o?h.left:0,T="middle"===t?h.top:0,B="center"===o?h.width:s.width,D="middle"===t?h.height:i.height,L=A.reduce(((e,t,o)=>{const n=e[o]+t+m;return e.push(n),e}),[w?m:0]),M=C.reduce(((e,t,o)=>{const n=e[o]+t+m;return e.push(n),e}),[g?m:0]),F=L.slice(0,-1),S=M.slice(0,-1),z=Math.max(F.findLastIndex((e=>e<=I)),0),N=F.findLastIndex((e=>e<=I+B)),O=Math.max(S.findLastIndex((e=>e<=T)),0),H=S.findLastIndex((e=>e<=T+D)),K=Math.max(z,w?0:1),P=N+(x?1:0),W=Math.max(O,g?0:1),$=H+(y?1:0),q=Array.from({length:H-O+1},((e,t)=>{const o=u[t+O];return Array.from({length:N-z+1},((e,t)=>{const n=l[t+z];return p.resolve(o,n)}))})),V=(e,t)=>q[e-O][t-z];r.width=Math.round(B*c),r.height=Math.round(D*c),r.style.width=`${B}px`,r.style.height=`${D}px`,r.style.marginLeft=`${I}px`,r.style.marginTop=`${T}px`,r.style.marginRight=k-B-I+"px",r.style.marginBottom=E-D-T+"px",a.fillStyle="#E9E9E9",a.fillRect(0,0,r.width,r.height);const Y=(e,t)=>{a.setTransform(c,0,0,c,(e-I)*c,(t-T)*c)},G=(e,t,o,n)=>{a.beginPath(),a.rect(e,t,o,n),a.clip()};for(let e=z;e<=N;e++)for(let t=O;t<=H;t++){const o=V(t,e),n=o.style,r=M[t],i=L[e],s=A[e],l=C[t],u=o.text,h=n.textBaseline||"middle",p=o.padding,g=n.foreground||"black";if(Y(i,r),a.fillStyle=n.background||"white",a.fillRect(0,0,s,l),"draw"in o&&o.draw(a),n.highlight&&(a.fillStyle=n.highlight,a.fillRect(0,0,s,l)),n.corner&&(a.fillStyle=n.corner,a.beginPath(),a.moveTo(s-7,l),a.lineTo(s,l),a.lineTo(s,l-7),a.fill()),u&&"transparent"!==g){a.fillStyle=g,a.font=o.font;const e=f.getFontMetrics(o.font),t="center"==n.textAlign&&f.measureWidth(u,o.font)>s-p.left-p.right?"left":n.textAlign||"left";a.textAlign=t;const r=d("left"===t?p.left:"center"===t?s/2:"right"===t?s-p.right:0,c),i=d("top"===h?e.middle+e.topOffset+p.top:"middle"===h?l/2+e.middle:"bottom"===h?l+e.middle-e.bottomOffset-p.bottom:0,c);a.save(),G(0,2*m,s,l-4*m),a.fillText(u,r,i),a.restore()}}Y(0,0);const j=(e,t,o,n,r)=>{if(!r)return;if(0===r.width)return;const i=r.width/c,s=t===n,l=e-(s?i/2:0),u=t-(s?0:i/2),d=o+(s?i/2:0),h=n+(s?0:i/2);a.strokeStyle=r.color||"black",a.lineWidth=i,r.dash?(a.setLineDash(r.dash.map((e=>e/c))),a.lineDashOffset=s?l:u):a.setLineDash([]),a.beginPath(),a.moveTo(l,u),a.lineTo(d,h),a.stroke()},U=(e,t)=>e?t?e.index>t.index?e:t:e:t;for(let e=W;e<=$;e++){const t=e-1,o=e;for(let e=z;e<=N;e++){const n=U(t>=O?V(t,e).style.borderBottom:null,o<=H?V(o,e).style.borderTop:null);j(L[e]-b,M[o]-b,L[e+1]-b,M[o]-b,n)}}for(let e=K;e<=P;e++){const t=e-1,o=e;for(let e=O;e<=H;e++){const n=U(t>=z?V(e,t).style.borderRight:null,o<=N?V(e,o).style.borderLeft:null);j(L[o]-b,M[e]-b,L[o]-b,M[e+1]-b,n)}}}function a(e){if(!e.error)try{!function(e){c(e,"top","left"),c(e,"top","center"),c(e,"top","right"),c(e,"middle","left"),c(e,"middle","center"),c(e,"middle","right"),c(e,"bottom","left"),c(e,"bottom","center"),c(e,"bottom","right"),function(e){const t=e.element,o=e.input,n=e.state,r=n.inputPlacement;if(!r){if(o.parentElement){const e=document.activeElement===o;o.parentElement.removeChild(o),e&&t.focus({preventScroll:!0})}return}const i=e.canvases[r.section];if(o.style.left="left"in r?`${r.left}px`:"0",o.style.top="top"in r?`${r.top}px`:"0",o.style.right="right"in r?`${r.right}px`:"0",o.style.bottom="bottom"in r?`${r.bottom}px`:"0",o.style.marginLeft="marginLeft"in r?`${r.marginLeft}px`:"0",o.style.marginTop="marginTop"in r?`${r.marginTop}px`:"0",o.style.width=`${r.width}px`,o.style.height=`${r.height}px`,o.style.gridArea=i.style.gridArea,o.style.zIndex=i.style.zIndex,o.style.backgroundColor=n.isTextValid?"white":"#eb3434",!o.parentElement){const e=document.activeElement===t;t.appendChild(o),e&&o.focus({preventScroll:!0})}}(e),function(e){const t=e.element,o=e.state;e.isReordering?t.style.cursor="move":o.resizableColumn&&o.resizableRow?t.style.cursor="nwse-resize":o.resizableColumn?t.style.cursor="col-resize":o.resizableRow?t.style.cursor="row-resize":t.style.cursor="default"}(e),function(e){const t=e.element,o=e.tooltip,n=e.state.tooltip,r=e.state.tooltipPlacement;r?(o.innerHTML!==n&&(o.innerHTML=n),o.style.left=`calc(anchor(left) + ${r.left}px)`,o.style.top=`calc(anchor(top) + ${r.top}px)`,o.parentElement||(t.appendChild(o),o.showPopover({source:t}))):o.parentElement&&o.parentElement.removeChild(o)}(e)}(e)}catch(t){e.error=t}e.error&&function(e){if(e.errorRendered)return;e.errorRendered=!0;const t=e.element,o=e.error;t.style.backgroundColor="#9f0000",t.style.color="white",t.style.padding="20px",t.style.display="flex",t.style.flexDirection="column",t.style.userSelect="text",t.innerHTML=`\n <div style="font-size: 16px;">\n An error occurred while rendering the grid, please contact the support.\n </div>\n <div style="font-size: 20px; font-weight: bold; padding: 20px 0;">\n ${o.message}\n </div>\n <div style="font-size: 16px; white-space: pre-wrap;">${o.stack}</div>\n `}(e)}const h={value:({newValue:e})=>e||"",text:({newValue:e})=>e||"Search...",edit:{validate:()=>!0,parse:({string:e})=>e,autoCommit:!0}};function f(e,t,o){return[{column:{type:"DATA"},row:{type:"HEADER"},value:({column:e})=>void 0===e.header?e.id:e.header},{column:{type:"HEADER"},row:{type:"DATA"},value:({row:e})=>void 0===e.header?e.id:e.header},{column:{type:"HEADER"},row:{type:"SPECIAL"},value:""},{column:{type:"SPECIAL"},row:{type:"HEADER"},value:""},{column:{type:"DATA"},row:{type:"FILTER"},...h},{column:{type:"FILTER"},row:{type:"DATA"},...h},{column:{type:"DATA"},row:{type:"DATA"},value:t},...e,...o.map((({columnId:e,rowId:t,direction:n},r)=>({column:{id:e},row:{id:t},text:({value:e,text:t})=>`${o.length>1?r+1:""}${"ASC"===n?"⇣":"⇡"} ${t||e}`})))]}const p=["column","row","condition"];function m(e){return Object.keys(e).length>Object.keys(e).filter((e=>p.includes(e))).length}function g(e,t){const o=[...p,...t];return e.map((e=>function(e,t){const o={};for(const n of t)n in e&&(o[n]=e[n]);return o}(e,o))).filter(m)}function y(e){return g(e,["value","text","edit"])}function w(e,t){return t?e+"99":e+"33"}function x(e,t,o,n,r,i,l,u,d,c,a,h,f){e=g(e,["value","style","text","font","padding","edit","draw"]);const p=o?s(o.columnId):null,m=o?s(o.rowId):null,y=null!==d,x=null!==u||y,b=c+2,R=c+4,v=(e,t,o,r)=>{if(o<0||o>=e.length)return!1;if(r<0||r>=t.length)return!1;const i=e[o].key,s=t[r].key;return n.isKeySelected(i,s)},C=(e,t)=>e?[t]:[];return[{column:{type:"DATA"},row:{type:"FILTER"},style:({newValue:e})=>({background:"#FBFBFB",foreground:e?"black":"#cccccc",border:{width:1,color:"gray"}})},{column:{type:"FILTER"},row:{type:"DATA"},style:({newValue:e})=>({background:"#FBFBFB",foreground:e?"black":"#cccccc",border:{width:1,color:"gray"}})},{column:{type:"ANY"},row:{type:"HEADER"},style:{background:"#F5F5F5",border:{width:c,color:"gray"}}},{column:{type:"HEADER"},row:{type:"ANY"},style:{background:"#F5F5F5",border:{width:c,color:"gray"}}},{column:{type:"HEADER"},row:{type:"HEADER"},style:{background:"#E0E0E0"}},...e,...C(t&&!y,{column:{type:"ANY"},row:{id:t?.rowId},style:{highlight:"#81948133"}}),...C(t&&!x,{column:{id:t?.columnId},row:{id:t?.rowId},style:{highlight:"#81948188"}}),{column:{type:"ANY"},row:{type:"ANY"},condition:({rows:e,columns:t,row:o,column:n})=>v(e,t,o.index,n.index),style:({rows:e,columns:t,row:o,column:n,edit:r})=>({...v(e,t,o.index-1,n.index)?{}:{borderTop:{width:b,color:"#596959",index:Number.MAX_SAFE_INTEGER}},...v(e,t,o.index+1,n.index)?{}:{borderBottom:{width:b,color:"#596959",index:Number.MAX_SAFE_INTEGER}},...v(e,t,o.index,n.index-1)?{}:{borderLeft:{width:b,color:"#596959",index:Number.MAX_SAFE_INTEGER}},...v(e,t,o.index,n.index+1)?{}:{borderRight:{width:b,color:"#596959",index:Number.MAX_SAFE_INTEGER}},highlight:w(r?"#798d9c":"#819481",p!==n.key||m!==o.key)})},{column:{type:"ANY"},row:{type:"ANY"},condition:({row:e,column:t})=>r.isKeySelected(e.key,t.key),style:({row:e,column:t})=>({highlight:w("#93a8b8",p!==t.key||m!==e.key)})},...C(!!o,{column:{id:o?.columnId},row:{id:o?.rowId},style:{highlight:"#ffffffaa"}}),...l.map((({columnId:e,rowId:t,direction:o},n)=>({column:{id:e},row:{id:t},style:{highlight:"#0377fc44"}}))),{column:{type:"ANY"},row:{type:"ANY"},condition:({edit:e})=>!!e,style:{corner:"#77777720"}},{column:{type:"ANY"},row:{type:"ANY"},condition:({row:e,column:t})=>i.hasValueByKey(e.key,t.key),style:{corner:"darkgreen"}},...C(u,{column:{id:u},row:{type:"HEADER"},style:{borderRight:{width:R,color:"cornflowerblue"}}}),...C(d,{column:{type:"HEADER"},row:{id:d},style:{borderBottom:{width:R,color:"cornflowerblue"}}}),...C(a&&h,{column:{id:h},row:{type:"ANY"},style:{highlight:"#3a74e055"}}),...C(a&&f,{column:{type:"ANY"},row:{id:f},style:{highlight:"#3a74e055"}})]}function b(e,t){const o=t.filter((e=>"BEGIN"===e.pinned)).length,n=t.filter((e=>"END"===e.pinned)).length,r=t.length-o-n,i=e.filter((e=>"BEGIN"===e.pinned)).length,s=e.filter((e=>"END"===e.pinned)).length,l=e.length-i-s,u=t.slice(0,o),d=t.slice(t.length-n,t.length),c=t.slice(o,t.length-n),a=e.slice(0,i),h=e.slice(e.length-s,e.length),f=e.slice(i,e.length-s),p=o>0,m=i>0,g=!0,y=!0,w=r>0||!p,x=!0,b=!p,R=!(n>0),v=!0,C=!0,A=l>0||!m,k=!0,E=!m,I=!(s>0),T=(e,t,o)=>{if(0===e.length)return 0;const n=t?e.at(0).topWithBorder:e.at(0).top;return(o?e.at(-1).bottomWithBorder:e.at(-1).bottom)-n},B=(e,t,o)=>{if(0===e.length)return 0;const n=t?e.at(0).leftWithBorder:e.at(0).left;return(o?e.at(-1).rightWithBorder:e.at(-1).right)-n};return{top:{rows:u,showTopBorder:g,showBottomBorder:y,height:T(u,g,y)},bottom:{rows:d,showTopBorder:w,showBottomBorder:x,height:T(d,w,x)},middle:{rows:c,showTopBorder:b,showBottomBorder:R,height:T(c,b,R)},left:{columns:a,showLeftBorder:v,showRightBorder:C,width:B(a,v,C)},right:{columns:h,showLeftBorder:A,showRightBorder:k,width:B(h,A,k)},center:{columns:f,showLeftBorder:E,showRightBorder:I,width:B(f,E,I)}}}function R(e,t){return[...e,...t.map((e=>({columnId:e.columnId,rowId:e.rowId,value:e.expression})))]}class v{constructor(e){this.lookup=new Map,e.forEach((e=>{const t=s(e.rowId),o=s(e.columnId);this.lookup.has(t)||this.lookup.set(t,new Map),this.lookup.get(t).set(o,e.value)}))}hasValueByKey(e,t){return this.lookup.has(e)&&this.lookup.get(e).has(t)}getValueByKey(e,t){if(this.hasValueByKey(e,t))return this.lookup.get(e).get(t)}hasValueById(e,t){return this.hasValueByKey(s(e),s(t))}getValueById(e,t){return this.getValueByKey(s(e),s(t))}}function C(e){return new v(e)}class A{constructor(e){this.lookup=new Map,e.forEach((e=>{const t=s(e.rowId),o=s(e.columnId);this.lookup.has(t)||this.lookup.set(t,new Set),this.lookup.get(t).add(o)}))}isKeySelected(e,t){return this.lookup.has(e)&&this.lookup.get(e).has(t)}isIdSelected(e,t){return this.isKeySelected(s(e),s(t))}}function k(e){return new A(e)}function E(e,t){return"function"==typeof e?e(t):e}function I(e,t){return"function"==typeof e?e(t):e}function T(e,t,o,n){return e<o?"BEGIN":e>=t-n?"END":void 0}function B(e,t,o){return e.map(((n,r)=>{const i="id"in n?n.id:n.type,l="selector"in n?n.selector:i;return{...n,id:i,selector:l,type:n.type||"DATA",key:s(i),pinned:T(r,e.length,t,o),header:"header"in n?n.header:i,labels:n.labels||[],index:r}}))}function D(e,t,o,n){const r=new Map(n.map((({columnId:e,width:t})=>[s(e),t])));return B(e,t,o).map((e=>({...e,width:r.has(e.key)?r.get(e.key):"width"in e?e.width:"fit"})))}function L(e,t,o,n){const r=new Map(n.map((({rowId:e,height:t})=>[s(e),t])));return B(e,t,o).map((e=>({...e,height:r.has(e.key)?r.get(e.key):"height"in e?e.height:"fit"})))}function M(e,t,o){let n=o;return e.map(((e,r)=>{const i=d("width"in e?e.width:100,t),s={...e,index:r,width:i,leftWithBorder:n-o,left:n,right:n+i,rightWithBorder:n+i+o};return n+=s.width+o,s}))}function F(e,t,o){let n=o;return e.map(((e,r)=>{const i=d("height"in e?e.height:20,t),s={...e,index:r,height:i,topWithBorder:n-o,top:n,bottom:n+i,bottomWithBorder:n+i+o};return n+=s.height+o,s}))}const S="12px Calibri",z={top:2,right:5,bottom:2,left:5};function N(e){return"function"==typeof e?e:()=>e}const O={HEADER:["HEADER"],FILTER:["FILTER"],DATA:["DATA"],CUSTOM:["CUSTOM"],ANY:["HEADER","DATA","FILTER","CUSTOM"],SPECIAL:["HEADER","FILTER","CUSTOM"],NONE:[]};class H{byKey=new Map;byIndex=new Map;byLabel=new Map;byType=new Map}class K{lookup=new H;hasRules=!1;addRule(e,t,o){if(this.hasRules=!0,Array.isArray(e)){for(const n of e)this.addRule(n,t,o);return}if(Array.isArray(t)){for(const n of t)this.addRule(e,n,o);return}const n=e?"id"in e?{key:s(e.id)}:e:{type:"DATA"},r=t?"id"in t?{key:s(t.id)}:t:{type:"DATA"};function i(e,t){e.has(t)||e.set(t,[]),e.get(t).push(o)}function l(e,t){if(e.has(t)||e.set(t,new H),"key"in r)i(e.get(t).byKey,r.key);else if("index"in r)i(e.get(t).byIndex,r.index);else if("label"in r)i(e.get(t).byLabel,r.label);else for(const o of O[r.type||"NONE"])i(e.get(t).byType,o)}if("key"in n)l(this.lookup.byKey,n.key);else if("index"in n)l(this.lookup.byIndex,n.index);else if("label"in n)l(this.lookup.byLabel,n.label);else for(const e of O[n.type||"NONE"])l(this.lookup.byType,e)}getRules(e,t){const o=[];if(!this.hasRules)return o;function n(e){for(const t of e)o.push(t)}function r(e){e.byKey.has(t.key)&&n(e.byKey.get(t.key)),e.byIndex.has(t.index)&&n(e.byIndex.get(t.index)),e.byType.has(t.type)&&n(e.byType.get(t.type));for(const o of t.labels)e.byLabel.has(o)&&n(e.byLabel.get(o))}this.lookup.byKey.has(e.key)&&r(this.lookup.byKey.get(e.key)),this.lookup.byIndex.has(e.index)&&r(this.lookup.byIndex.get(e.index)),this.lookup.byType.has(e.type)&&r(this.lookup.byType.get(e.type));for(const t of e.labels)this.lookup.byLabel.has(t)&&r(this.lookup.byLabel.get(t));return o}}const P=["borderTop","borderRight","borderBottom","borderLeft"],W={validate:()=>!0,parse:({string:e})=>e};function $(e,t){const o={...e};if("border"in o){for(const e of P)o[e]=o.border;delete o.border}for(const e of P)e in o&&(o[e]={...o[e],index:t});return o}function q(e,t){if(!1!==e.edit)return!0===e.edit?"edit"in t?t.edit:W:"edit"in t?{...t.edit,...e.edit}:{...W,...e.edit}}class V{constructor(e){this.rulesLookup=new K;for(const[t,o]of e.entries()){const e={index:t};"condition"in o&&(e.condition=o.condition),"style"in o&&(e.style=N(o.style)),"value"in o&&(e.value=N(o.value)),"text"in o&&(e.text=N(o.text)),"font"in o&&(e.font=N(o.font)),"padding"in o&&(e.padding=N(o.padding)),"edit"in o&&(e.edit=o.edit),"tooltip"in o&&(e.tooltip=N(o.tooltip)),"draw"in o&&(e.draw=o.draw),this.rulesLookup.addRule(o.column,o.row,e)}}resolve(e,t,o,n,r,i){const s=this.rulesLookup.getRules(r,n).sort(((e,t)=>e.index-t.index)).filter(((e,t,o)=>e.index!==o[t-1]?.index));let l,u,d={data:e,rows:t,columns:o,row:n,column:r},c={},a=z,h=S;i.hasValueByKey(n.key,r.key)&&(d={...d,newValue:i.getValueByKey(n.key,r.key)});for(const e of s)if((!("condition"in e)||e.condition(d))&&("value"in e&&(d={...d,value:e.value(d)}),"style"in e&&(c={...c,...$(e.style(d),e.index)}),"text"in e&&(d={...d,text:e.text(d)}),"font"in e&&(h=e.font(d)),"padding"in e&&(a={...a,...e.padding(d)}),"edit"in e&&(d={...d,edit:q(e,d)}),"tooltip"in e&&(u=e.tooltip(d)),"draw"in e)){const t=d;l=o=>e.draw({...t,ctx:o})}const f=function(e){return"text"in e?`${e.text}`:"newValue"in e?`${e.newValue}`:void 0!==e.value?`${e.value}`:""}(d),p={style:c,text:f,padding:a,font:h};return"value"in d&&(p.value=d.value),"edit"in d&&void 0!==d.edit&&(p.edit=d.edit),void 0!==u&&(p.tooltip=u),void 0!==l&&(p.draw=l),p}}function Y(e){return new V(e)}class G{constructor(e,t,o,n,r){this.formattingRules=e,this.data=t,this.rows=o,this.columns=n,this.edition=r}resolve(e,t){return this.formattingRules.resolve(this.data,this.rows,this.columns,e,t,this.edition)}}function j(e,t,o,n,r){return new G(e,t,o,n,r)}function U(e,t,o){const n=new Map;for(const r of e){const e=s(r[t]),i=s(r[o]);n.has(e)||n.set(e,new Map),n.get(e).set(i,r.expression)}return n}function _(e,t,o,n,r,i,s){if(0===e.length)return r;const l=U(e,"columnId","rowId"),u=i.filter((e=>"FILTER"!==e.type&&l.has(e.key)));return 0===u.length?r:r.filter((e=>{for(const d of u){const u=o.resolve(n,r,i,e,d,s),c=l.get(d.key);if(!t.resolve(n,r,i,e,d,u.value,u.text,c))return!1}return!0}))}function X(e,t,o,n,r,i,s){if(0===e.length)return i;const l=U(e,"rowId","columnId"),u=r.filter((e=>"FILTER"!==e.type&&l.has(e.key)));return 0===u.length?i:i.filter((e=>{for(const d of u){const u=o.resolve(n,r,i,d,e,s),c=l.get(d.key);if(!t.resolve(n,r,i,d,e,u.value,u.text,c))return!1}return!0}))}function J(e,t,o,n){return{top:e,bottom:t,left:o,right:n}}function Q(e,t){return{width:e.length?e.at(-1).rightWithBorder:0,height:t.length?t.at(-1).bottomWithBorder:0}}class Z{constructor(){this.fontMetrics=new Map,this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d")}measureWidth(e,t){if(!e)return 0;const o=this.context;return o.font=t||S,o.measureText(e).width}measureHeight(e,t){let o=1;for(const t of e)"\n"===t&&o++;return o*this.getFontMetrics(t).height}getFontMetrics(e){const t=e;if(this.fontMetrics.has(t))return this.fontMetrics.get(t);const o=this.context;o.font=e||S;const n=o.measureText("X"),r=(n.actualBoundingBoxDescent-n.actualBoundingBoxAscent)/2,i={topOffset:r+n.fontBoundingBoxAscent,middle:-r,bottomOffset:n.fontBoundingBoxDescent-r,height:n.fontBoundingBoxAscent+n.fontBoundingBoxDescent};return this.fontMetrics.set(t,i),i}}function ee(){return new Z}function te(e,t){return t.top>=e.top&&t.left>=e.left&&t.top+t.height<=e.top+e.height&&t.left+t.width<=e.left+e.width}function oe(e,t){const o={top:Math.max(e.top,t.top),left:Math.max(e.left,t.left),width:Math.min(e.left+e.width,t.left+t.width)-Math.max(e.left,t.left),height:Math.min(e.top+e.height,t.top+t.height)-Math.max(e.top,t.top)};return o.width>=0&&o.height>=0?o:{top:e.top,left:e.left,width:0,height:0}}function ne(e,t){return{top:e.top-t,left:e.left-t,width:e.width+2*t,height:e.height+2*t}}function re(e){return e.width*e.height}function ie(e,t){return{top:e.top,left:e.left,width:Math.max(0,e.width-t.left-t.right),height:Math.max(0,e.height-t.top-t.bottom)}}const se=200,le=400,ue={left:0,top:0,width:0,height:0};function de(e,t,o,n){const r=t.x,i=t.y,s=e.scrollLeft,l=e.scrollTop,u=e.clientWidth,d=e.clientHeight;return{x:r<=o.left?r:r>=u?r+s:r>=u-o.right?n.width-u+r:r+s,y:i<=o.top?i:i>=d?i+l:i>=d-o.bottom?n.height-d+i:i+l}}function ce(e){return e.reduce(((e,t)=>e.set(t.key,t)),new Map)}function ae(e,t,o,n,r,i,l,u){if(!e)return[];if(!t)return[];if(!n)return[];if(!o)return[];const d=s(o.columnId),c=s(o.rowId),a=s(n.columnId),h=s(n.rowId);if(!l.has(d))return[];if(!u.has(c))return[];if(!l.has(a))return[];if(!u.has(h))return[];const f=Math.min(l.get(d).index,l.get(a).index),p=Math.max(l.get(d).index,l.get(a).index),m=Math.min(u.get(c).index,u.get(h).index),g=Math.max(u.get(c).index,u.get(h).index);return r.slice(f,p+1).flatMap((e=>i.slice(m,g+1).map((t=>({rowId:t.id,columnId:e.id})))))}function he(e,t){const o=function(e){return"BEGIN"===e.pinned?"top":"END"===e.pinned?"bottom":"middle"}(t),n=function(e){return"BEGIN"===e.pinned?"left":"END"===e.pinned?"right":"center"}(e);return`${o}-${n}`}function fe(e,t,o,n,r){return 0===e.length?null:function(e,t,o,n){if(!e)return null;const r=s(e.columnId),i=s(e.rowId);if(!t.has(r))return null;if(!o.has(i))return null;const l=t.get(r),u=o.get(i),d={width:l.width,height:u.height,section:he(l,u)};switch(u.pinned){case"BEGIN":d.top=u.top;break;case"END":d.bottom=n.top.height+n.middle.height+n.bottom.height-u.top-u.height;break;default:d.marginTop=u.top-n.top.height}switch(l.pinned){case"BEGIN":d.left=l.left;break;case"END":d.right=n.left.width+n.center.width+n.right.width-l.left-l.width;break;default:d.marginLeft=l.left-n.left.width}return d}(t,o,n,r)}function pe(e,t){return t.every((t=>t.edit.validate({string:e})))}function me(e){return Array.isArray(e)?e.map(((e,t)=>t)):Object.keys(e)}function ge(e){return me(e)}function ye(e){const t=new Set;if(Array.isArray(e))for(const o of e)for(const e of me(o))t.add(e);else for(const o in e)for(const n of me(e[o]))t.add(n);return Array.from(t)}function we(e,t){if(!e.some((e=>"DATA-BLOCK"===e.type)))return e;const o=[];for(const n of e)if("DATA-BLOCK"===n.type){const e="selector"in n?n.selector(t):ye(t),r="id"in n?n.id:({selector:e})=>e;for(const i of e)o.push({...n,id:r({data:t,selector:i}),selector:i,type:"DATA"})}else o.push(n);return o}function xe(e,t){if(!e.some((e=>"DATA-BLOCK"===e.type)))return e;const o=[];for(const n of e)if("DATA-BLOCK"===n.type){const e="selector"in n?n.selector(t):ge(t),r="id"in n?n.id:({selector:e})=>e;for(const i of e)o.push({...n,id:r({data:t,selector:i}),selector:i,type:"DATA"})}else o.push(n);return o}const be=({text:e,expression:t})=>e.includes(t);class Re{constructor(e){this.rulesLookup=new K;for(const t of e){const e={by:s("by"in t?t.by:"FILTER"),condition:t.condition||be};this.rulesLookup.addRule(t.column,t.row,e)}}resolve(e,t,o,n,r,i,s,l){const u=this.rulesLookup.getRules(r,n);if(0===u.length)return"DATA"!==n.type||"DATA"!==r.type||!l.has('"FILTER"')||be({text:s,expression:l.get('"FILTER"')});let d={data:e,rows:t,columns:o,row:n,column:r,value:i,text:s};for(const e of u){if(!l.has(e.by))continue;const t={...d,expression:l.get(e.by)};if(!e.condition(t))return!1}return!0}}function ve(e){return new Re(e)}function Ce(e){return g(e,["value","text"])}function Ae(e){return g(e,["value","text","font","padding"])}function ke(e,t,o,n,r,i){if(e.every((e=>"number"==typeof e.width)))return e;const s=e=>{const i=e.width;if("number"==typeof i)return i;if(r.has(e.key)){const t=r.get(e.key);if("fit-once"===i&&!t.dataOnly)return t.width;if("fit-data-once"===i&&t.dataOnly)return t.width}let s=0;for(const r of t){if("DATA"!==r.type&&"fit-data-once"===i)continue;if("DATA"!==r.type&&"fit-data"===i)continue;const t=n.resolve(r,e),l=t.text,u=t.font,d=t.padding.left+t.padding.right,c=o.measureWidth(l,u)+d;s=Math.max(s,c)}return r.set(e.key,{width:s,dataOnly:"fit-data-once"===i}),s};for(const e of r.keys())i.has(e)||r.delete(e);return e.map((e=>({...e,width:s(e)})))}function Ee(e,t,o,n,r,i){if(t.every((e=>"number"==typeof e.height)))return t;const s=t=>{const i=t.height;if("number"==typeof i)return i;if(r.has(t.key)){const e=r.get(t.key);if("fit-once"===i&&!e.dataOnly)return e.height;if("fit-data-once"===i&&e.dataOnly)return e.height}let s=0;for(const r of e){if("DATA"!==r.type&&"fit-data-once"===i)continue;if("DATA"!==r.type&&"fit-data"===i)continue;const e=n.resolve(t,r),l=e.text,u=e.font,d=e.padding.top+e.padding.bottom,c=o.measureHeight(l,u)+d;s=Math.max(s,c)}return r.set(t.key,{height:s,dataOnly:"fit-data-once"===i}),s};for(const e of r.keys())i.has(e)||r.delete(e);return t.map((e=>({...e,height:s(e)})))}function Ie(e){return new Set(e.map((e=>e.key)))}function Te(e){return g(e,["value","text"])}function Be(e,t){return e===t?0:null==e.value?-1:null==t.value?1:e.value<t.value?-1:e.value>t.value?1:0}function De(e,t){return-Be(e,t)}class Le{constructor(e){this.rulesLookup=new K;for(const t of e){const e=t.comparator?(e,o)=>t.comparator(e,o):(e,t)=>Be(e,t),o=t.comparator?(e,o)=>{return-("number"==typeof(n=t.comparator(e,o))?n:n?-1:1);var n}:(e,t)=>De(e,t),n={by:s("by"in t?t.by:"HEADER"),comparatorAsc:e,comparatorDesc:o};this.rulesLookup.addRule(t.column,t.row,n)}}resolve(e,t,o){const n=this.rulesLookup.getRules(e,t);if(0===n.length)return"DATA"!==t.type||"DATA"!==e.type?null:o.has('"HEADER"')?"ASC"===o.get('"HEADER"')?Be:De:null;if(n.length>1)throw new Error("Multiple sorting rules for the same cell");const r=n[0];return o.has(r.by)?"ASC"===o.get(r.by)?r.comparatorAsc:r.comparatorDesc:null}}function Me(e){return"manual"===e?null:new Le(e)}function Fe(e,t,o){const n=new Map;for(const r of e){const e=s(r[t]),i=s(r[o]);n.has(e)||n.set(e,new Map),n.get(e).set(i,r.direction)}return n}function Se(e,t){e.sort(((e,t)=>{const o=e.comparator(e.cell,t.cell);return"number"==typeof o?o:o?-1:1})),t.push(...e.map((e=>e.entity))),e.length=0}function ze(e,t,o,n,r,i,l){if(0===e.length)return r;if(null===t)return r;const u=Fe(e,"columnId","rowId"),d=new Map(i.map((e=>[e.key,e]))),c=e.map((e=>s(e.columnId))).filter((e=>d.has(e))).map((e=>d.get(e))).reverse();if(0===c.length)return r;for(const e of c){const s=[],d=[];for(const c of r){const a=t.resolve(e,c,u.get(e.key));if(!a){Se(d,s),s.push(c);continue}const h={entity:c,comparator:a,cell:o.resolve(n,r,i,c,e,l)};0!==d.length&&d[0].comparator!==a?(Se(d,s),d.push(h)):d.push(h)}Se(d,s),r=s}return r}function Ne(e,t,o,n,r,i,l){if(0===e.length)return i;if(null===t)return i;const u=Fe(e,"rowId","columnId"),d=new Map(r.map((e=>[e.key,e]))),c=e.map((e=>s(e.rowId))).filter((e=>d.has(e))).map((e=>d.get(e))).reverse();if(0===c.length)return i;for(const e of c){const s=[],d=[];for(const c of i){const a=t.resolve(c,e,u.get(e.key));if(!a){Se(d,s),s.push(c);continue}const h={entity:c,comparator:a,cell:o.resolve(n,r,i,e,c,l)};0!==d.length&&d[0].comparator!==a?(Se(d,s),d.push(h)):d.push(h)}Se(d,s),i=s}return i}const Oe=5;function He(e,t,o,n,r,i,l,u,d){if(!n)return null;if(l)return null;const c=t.get(s(n.columnId));if("HEADER"!==o.get(s(n.rowId)).type)return null;const a=de(r,i,u,d);if(!a)return null;const h=a.x;return h>=c.right-Oe&&h<=c.right+Oe?c.id:0===c.index||h<c.left-Oe||h>c.left+Oe?null:e[c.index-1].id}function Ke(e,t,o,n,r,i,l,u,d){if(!n)return null;if(l)return null;const c=t.get(s(n.columnId)),a=o.get(s(n.rowId));if("HEADER"!==c.type)return null;const h=de(r,i,u,d);if(!h)return null;const f=h.y;return f>=a.bottom-Oe&&f<=a.bottom+Oe?a.id:0===a.index||f<a.top-Oe||f>a.top+Oe?null:e[a.index-1].id}function Pe(e){return e.map((e=>({columnId:"columnId"in e?e.columnId:"HEADER",rowId:"rowId"in e?e.rowId:"HEADER",direction:e.direction})))}function We(e){return e.map((e=>({columnId:"columnId"in e?e.columnId:"FILTER",rowId:"rowId"in e?e.rowId:"FILTER",expression:e.expression})))}function $e(e){return e.filter((e=>"DATA"===e.type)).map((e=>e.id))}function qe(e){return $e(e)}function Ve(e){return $e(e)}function Ye(e){return g(e,["value","text","tooltip"])}function Ge(e,t,o,n){if(!e)return null;const r=s(e.columnId),i=s(e.rowId);if(!o.has(r))return null;if(!n.has(i))return null;const l=n.get(i),u=o.get(r);return t.resolve(l,u).tooltip}function je(e,t){return e?{left:t.x+8,top:t.y+20}:null}function Ue(e){return e.map((e=>s(e)))}function _e(e,t){if(!t)return e;const o=new Map;for(const t of e)o.set(t.key,t);const n=[];for(const e of t)o.has(e)&&(n.push(o.get(e)),o.delete(e));for(const t of e)o.has(t.key)&&n.push(o.get(t.key));return[...n.filter((e=>"BEGIN"===e.pinned)),...n.filter((e=>!e.pinned)),...n.filter((e=>"END"===e.pinned))]}function Xe(e){const t={...e.localOptions,...e.externalOptions},o=e.memory,n=e.state,r=e.element,i=[];function s(e,t,n){const r=o[e]&&o[e].dependencies;return r&&!n.some(((e,t)=>e!==r[t]))||(o[e]={value:t(...n),dependencies:n},i.push(e)),o[e].value}function l(e,t){const n=o[e]&&o[e].value;return JSON.stringify(n)!==JSON.stringify(t)&&(o[e]={value:t},i.push(e)),o[e].value}function d(e,t,n){(o[e]&&o[e].value)!==t&&(o[e]={value:t},n(t))}const c=window.devicePixelRatio,a=t.borderWidth/c,h=t.data,p=e.input.value,m=s("sortBy",Pe,[t.sortBy]),g=s("filters",We,[t.filters]),w=s("textResolver",ee,[]),v=s("dataFormatting",f,[t.formatting,t.dataSelector,m]),A=s("editedCellsAndFilters",R,[t.editedCells,g]),T=s("edition",C,[A]),B=s("invokedColumns",E,[t.columns,h]),S=s("invokedRows",I,[t.rows,h]),z=s("unfoldedColumns",we,[B,h]),N=s("unfoldedRows",xe,[S,h]),O=s("unfilteredColumns",D,[z,t.pinnedLeft,t.pinnedRight,t.columnWidths]),H=s("unfilteredRows",L,[N,t.pinnedTop,t.pinnedBottom,t.rowHeights]),K=s("unfilteredColumnKeys",Ie,[O]),P=s("unfilteredRowKeys",Ie,[H]),W=s("columnsOrder",Ue,[t.columnsOrder]),$=s("rowsOrder",Ue,[t.rowsOrder]),q=s("orderedColumns",_e,[O,W]),V=s("orderedRows",_e,[H,$]),G=s("filterFormatting",Ce,[v]),U=s("filterFormattingRules",Y,[G]),Z=s("filteringRules",ve,[t.filtering]),he=s("filteredColumns",X,[g,Z,U,h,V,q,T]),me=s("filteredRows",_,[g,Z,U,h,V,q,T]),ge=s("sortingFormatting",Te,[v]),ye=s("sortingFormattingRules",Y,[ge]),be=s("sortingRules",Me,[t.sorting]),Re=s("sortedColumns",Ne,[m,be,ye,h,me,he,T]),Be=s("sortedRows",ze,[m,be,ye,h,me,he,T]),De=s("measureFormatting",Ae,[v]),Le=s("measureFormattingRules",Y,[De]),Fe=s("measureFormatResolver",j,[Le,h,Be,Re,T]),Se=e.columnWidthCache,Oe=e.rowHeightCache,$e=s("measuredColumns",ke,[Re,Be,w,Fe,Se,K]),Xe=s("measuredRows",Ee,[Re,Be,w,Fe,Oe,P]),Je=s("columns",M,[$e,c,a]),Qe=s("rows",F,[Xe,c,a]),Ze=s("columnLookup",ce,[Je]),et=s("rowLookup",ce,[Qe]),tt=t.focusedCell,ot=s("sections",b,[Je,Qe]),nt=t.selectedCells,rt=s("fixedSize",J,[ot.top.height,ot.bottom.height,ot.left.width,ot.right.width]),it=s("totalSize",Q,[Je,Qe]),st=l("hoveredCell",function(e,t,o,n,r,i){if(!t)return null;if(t.x<0||t.y<0||t.x>i.width||t.y>i.height)return null;const s=de(e,t,r,i),l=function(e,t){if(0===e.length)return-1;if(t<e[0].topWithBorder)return-1;if(t>e[e.length-1].bottomWithBorder)return-1;let o=0,n=e.length-1;for(;o<=n;){const r=Math.floor((o+n)/2);if(t<e[r].topWithBorder)n=r-1;else{if(!(t>e[r].bottomWithBorder))return r;o=r+1}}return-1}(o,s.y),u=function(e,t){if(0===e.length)return-1;if(t<e[0].leftWithBorder)return-1;if(t>e[e.length-1].rightWithBorder)return-1;let o=0,n=e.length-1;for(;o<=n;){const r=Math.floor((o+n)/2);if(t<e[r].leftWithBorder)n=r-1;else{if(!(t>e[r].rightWithBorder))return r;o=r+1}}return-1}(n,s.x);return-1===l||-1===u?null:{rowId:o[l].id,columnId:n[u].id}}(r,e.mousePosition,Qe,Je,rt,it)),lt=e.isReordering,ut=e.resizingColumn||s("resizableColumn",He,[Je,Ze,et,st,r,e.mousePosition,lt,rt,it]),dt=e.resizingRow||s("resizableRow",Ke,[Qe,Ze,et,st,r,e.mousePosition,lt,rt,it]),ct=s("highlightedCells",ae,[e.isMouseDown,!ut&&!dt&&!e.didReorder,tt,st,Je,Qe,Ze,et]),at=s("selection",k,[nt]),ht=s("highlight",k,[ct]),ft=s("renderFormatting",x,[v,st,tt,at,ht,T,m,ut,dt,t.borderWidth,lt,e.reorderedColumn,e.reorderedRow]),pt=s("renderFormattingRules",Y,[ft]),mt=s("renderFormatResolver",j,[pt,h,Qe,Je,T]),gt=s("inputFormatting",y,[v]),yt=s("inputFormattingRules",Y,[gt]),wt=s("inputFormatResolver",j,[yt,h,Qe,Je,T]),xt=s("editableCells",u,[nt,wt,Ze,et]),bt=s("inputPlacement",fe,[xt,tt,Ze,et,ot]),Rt=s("isTextValid",pe,[p,xt]),vt=s("contextFormatting",Ye,[v]),Ct=s("contextFormattingRules",Y,[vt]),At=s("contextFormatResolver",j,[Ct,h,Qe,Je,T]),kt=s("tooltip",Ge,[st,At,Ze,et]),Et=s("tooltipPlacement",je,[kt,e.mousePosition]),It=l("scrollRect",function(e,t,o,n){const r={width:n.getBoundingClientRect().width,height:n.getBoundingClientRect().height},i={left:n.scrollLeft,top:n.scrollTop},s=e||ue,l=ie({left:0,top:0,...t},o),u=ie({...i,...r},o),d=oe(l,ne(u,se)),c=oe(l,ne(u,le));return te(l,s)&&te(s,d)?re(s)>2*re(c)?c:s:c}(n?.scrollRect,it,rt,r)),Tt=s("activeColumns",qe,[Je]),Bt=s("activeRows",Ve,[Qe]);d("activeColumnsCallback",Tt,t.onActiveColumnsChange),d("activeRowsCallback",Bt,t.onActiveRowsChange),d("hoveredCellCallback",st,t.onHoveredCellChange),t.onStateChange(i),e.state={options:t,devicePixelRatio:c,borderWidth:a,edition:T,columns:Je,rows:Qe,sections:ot,hoveredCell:st,focusedCell:tt,renderFormatResolver:mt,inputFormatResolver:wt,fixedSize:rt,totalSize:it,textResolver:w,scrollRect:It,highlightedCells:ct,inputPlacement:bt,columnLookup:Ze,rowLookup:et,text:p,isTextValid:Rt,resizableColumn:ut,resizableRow:dt,tooltip:kt,tooltipPlacement:Et}}function Je(e){if(!e.error)try{Xe(e)}catch(t){e.error=t}}function Qe(e,t){const o=new A(t);return[...t,...e.filter((e=>!o.isIdSelected(e.rowId,e.columnId)))]}function Ze(e,t){const o=new A(t);return e.filter((e=>!o.isIdSelected(e.rowId,e.columnId)))}function et(e){const t=e.currentTarget;if(!(t instanceof HTMLElement))throw new Error("Element is not an HTMLElement");const o=t.getBoundingClientRect();return{x:e.clientX-o.left,y:e.clientY-o.top}}function tt(e,t){return e.map((e=>({...e,columnId:"columnId"in e?e.columnId:t,rowId:"rowId"in e?e.rowId:t})))}function ot(e,t,o){const n=s(t),r=s(o);if(n===r)return null;const i=e.findIndex((e=>e.key===n)),l=e.findIndex((e=>e.key===r));return-1===i||-1===l||i===l?null:[i,l]}class nt{constructor(e,t,o,n){this.element=e,this.canvases=t,this.input=o,this.tooltip=n,this.localOptions={data:[],columns:[{type:"DATA-BLOCK"}],rows:[{type:"HEADER"},{type:"DATA-BLOCK"}],formatting:[],filtering:[],sorting:[],dataSelector:({data:e,row:t,column:o})=>e?.[t.selector]?.[o.selector],pinnedTop:0,pinnedBottom:0,pinnedLeft:0,pinnedRight:0,borderWidth:1,focusedCell:null,onFocusedCellChange:e=>{this.localOptions.focusedCell=e,this.requestNewRender()},selectedCells:[],onSelectedCellsChange:e=>{this.localOptions.selectedCells=e,this.requestNewRender()},highlightedCells:[],editedCells:[],onEditedCellsChange:e=>{this.localOptions.editedCells=e,this.requestNewRender()},filters:[],onFiltersChange:e=>{this.localOptions.filters=e,this.requestNewRender()},sortBy:[],onSortByChange:e=>{this.localOptions.sortBy=e,this.requestNewRender()},onCellClick:()=>{},onCustomCellClick:()=>{},columnWidths:[],onColumnWidthsChange:e=>{this.localOptions.columnWidths=e,this.requestNewRender()},rowHeights:[],onRowHeightsChange:e=>{this.localOptions.rowHeights=e,this.requestNewRender()},columnsOrder:[],onColumnsOrderChange:e=>{this.localOptions.columnsOrder=e,this.requestNewRender()},rowsOrder:[],onRowsOrderChange:e=>{this.localOptions.rowsOrder=e,this.requestNewRender()},onActiveColumnsChange:()=>{},onActiveRowsChange:()=>{},onHoveredCellChange:()=>{},onStateChange:()=>{}}}externalOptions={};state=null;memory={};renderRequested=!1;mousePosition=null;isMouseDown=!1;columnWidthCache=new Map;rowHeightCache=new Map;isReordering=!1;errorRendered=!1;error=null;resizingColumn=null;resizingRow=null;reorderedColumn=null;reorderedRow=null;didReorder=!1;mouseDownPosition=null;mouseDownCell=null;requestNewRender(){this.renderRequested||(this.renderRequested=!0,requestAnimationFrame((()=>{this.renderRequested=!1,Je(this),a(this)})))}}function rt(e){if("spread-grid-context"in e)return;const t={"top-left":document.createElement("canvas"),"top-center":document.createElement("canvas"),"top-right":document.createElement("canvas"),"middle-left":document.createElement("canvas"),"middle-center":document.createElement("canvas"),"middle-right":document.createElement("canvas"),"bottom-left":document.createElement("canvas"),"bottom-center":document.createElement("canvas"),"bottom-right":document.createElement("canvas")},o=document.createElement("input"),n=document.createElement("div");e.setAttribute("tabindex","0"),e.setAttribute("style","max-width: 100vw; max-height: 100vh; overflow: auto; display: grid; position: relative; grid-template-columns: fit-content(0) fit-content(0) fit-content(0); grid-template-rows: fit-content(0) fit-content(0) fit-content(0); outline: none; user-select: none; touch-action: manipulation;"),e.classList.add("spread-grid"),t["top-left"].setAttribute("style","position: sticky; left: 0; top: 0; z-index: 2; grid-row: 1; grid-column: 1;"),t["top-center"].setAttribute("style","position: sticky; top: 0; z-index: 1; grid-row: 1; grid-column: 2;"),t["top-right"].setAttribute("style","position: sticky; right: 0; top: 0; z-index: 2; grid-row: 1; grid-column: 3;"),t["middle-left"].setAttribute("style","position: sticky; left: 0; z-index: 1; grid-row: 2; grid-column: 1;"),t["middle-center"].setAttribute("style","grid-row: 2; grid-column: 2; z-index: 0;"),t["middle-right"].setAttribute("style","position: sticky; right: 0; z-index: 1; grid-row: 2; grid-column: 3;"),t["bottom-left"].setAttribute("style","position: sticky; left: 0; bottom: 0; z-index: 2; grid-row: 3; grid-column: 1;"),t["bottom-center"].setAttribute("style","position: sticky; bottom: 0; z-index: 1; grid-row: 3; grid-column: 2;"),t["bottom-right"].setAttribute("style","position: sticky; right: 0; bottom: 0; z-index: 2; grid-row: 3; grid-column: 3;"),o.setAttribute("style","position: sticky; z-index: 3; outline: none; border: none; box-shadow: none; padding: 0 5px; font-size: 12px; font-family: Calibri; background-color: white; box-sizing: border-box; opacity: 0; pointer-events: none;"),n.setAttribute("style","pointer-events: none; background-color: white; color: black; border: 1px solid black; padding: 3px 7px; inset: unset; position: absolute; font-size: 12px; font-family: Calibri; "),n.setAttribute("popover","manual"),n.classList.add("spread-grid-tooltip");const r=new nt(e,t,o,n);function i(e,t,o){e.addEventListener(t,(e=>{try{o(e)}catch(e){e.message=`[${t} event]: ${e.message}`,r.error=e,r.requestNewRender()}}))}e["spread-grid-context"]=r;const d=e=>{o.value=e,o.dispatchEvent(new Event("input"))},c=e=>{const t=r.state.options.selectedCells,o=r.state.inputFormatResolver,n=r.state.columnLookup,i=r.state.rowLookup,s=r.state.text,l=r.state.isTextValid,c=r.state.options.onEditedCellsChange,a=r.state.options.onFiltersChange,h=u(t,o,n,i);if(""===s)return;if(!l)return;if(e&&!h.every((e=>e.edit.autoCommit)))return;const f=h.filter((e=>"DATA"===e.type)),p=h.filter((e=>"FILTER"===e.type));var m;m=f.map((e=>({...e.cell,value:e.edit.parse({string:s})}))),c(Qe(r.state.options.editedCells,m)),(e=>{a(Qe(tt(r.state.options.filters,"FILTER"),e))})(p.map((e=>({...e.cell,expression:e.edit.parse({string:s})})))),e||d("")},a=e=>{const t=r.state.options.selectedCells,o=r.state.options.onEditedCellsChange,n=r.state.options.onFiltersChange,i=u(t,r.state.inputFormatResolver,r.state.columnLookup,r.state.rowLookup);var s;e&&!i.every((e=>e.edit.autoCommit))||(s=t,o(Ze(r.state.options.editedCells,s)),(e=>{n(Ze(tt(r.state.options.filters,"FILTER"),e))})(t))};i(e,"scroll",(e=>{r.requestNewRender()})),i(e,"pointerenter",(e=>{r.mousePosition=et(e),r.requestNewRender()})),i(e,"pointermove",(t=>{if(r.mousePosition=et(t),r.resizingColumn){const t=r.state.columnLookup.get(s(r.resizingColumn)),o=t.width,n=t.right,i=de(e,r.mousePosition,r.state.fixedSize,r.state.totalSize),l=Math.max(10,i.x-n+o),u=r.state.options.columnWidths.filter((e=>s(e.columnId)!==t.key)).concat([{columnId:t.id,width:l}]);r.state.options.onColumnWidthsChange(u)}if(r.resizingRow){const t=r.state.rowLookup.get(s(r.resizingRow)),o=t.height,n=t.bottom,i=de(e,r.mousePosition,r.state.fixedSize,r.state.totalSize),l=Math.max(10,i.y-n+o),u=r.state.options.rowHeights.filter((e=>s(e.rowId)!==t.key)).concat([{rowId:t.id,height:l}]);r.state.options.onRowHeightsChange(u)}if(r.reorderedColumn){const t=r.state.columns,o=r.state.hoveredCell,n=de(e,r.mousePosition,r.state.fixedSize,r.state.totalSize),i=function(e,t,o,n){if(!o)return null;const r=ot(e,t,o.columnId);if(!r)return null;const[i,s]=r,l=s<=i?n.x<e[s].leftWithBorder+e[i].width?s:s+1:n.x>e[s].rightWithBorder-e[i].width?s:s-1;if(l===i)return null;const u=e.map((e=>e.id));return u.splice(i,1),u.splice(l,0,t),u}(t,r.reorderedColumn,o,n);i&&(r.didReorder=!0,r.isReordering=!0,r.state.options.onColumnsOrderChange(i))}if(r.reorderedRow){const t=r.state.rows,o=r.state.hoveredCell,n=de(e,r.mousePosition,r.state.fixedSize,r.state.totalSize),i=function(e,t,o,n){if(!o)return null;const r=ot(e,t,o.rowId);if(!r)return null;const[i,s]=r,l=s<=i?n.y<e[s].topWithBorder+e[i].height?s:s+1:n.y>e[s].bottomWithBorder-e[i].height?s:s-1;if(l===i)return null;const u=e.map((e=>e.id));return u.splice(i,1),u.splice(l,0,t),u}(t,r.reorderedRow,o,n);i&&(r.didReorder=!0,r.isReordering=!0,r.state.options.onRowsOrderChange(i))}r.requestNewRender()})),i(e,"touchmove",(e=>{(r.resizingColumn||r.resizingRow||r.reorderedColumn||r.reorderedRow)&&(e.preventDefault(),e.stopPropagation())})),i(e,"pointerleave",(()=>{r.mousePosition=null,r.requestNewRender()})),i(e,"pointerdown",(e=>{r.mousePosition=et(e),Je(r),d("");const t=r.state.hoveredCell;if(r.isMouseDown=!0,r.didReorder=!1,r.mouseDownPosition=r.mousePosition,r.mouseDownCell=t,r.state.resizableColumn&&(r.resizingColumn=r.state.resizableColumn),r.state.resizableRow&&(r.resizingRow=r.state.resizableRow),!r.resizingColumn&&t){const e=r.state.rowLookup.get(s(t.rowId));r.reorderedColumn="HEADER"===e.type?t.columnId:null}if(!r.resizingRow&&t){const e=r.state.columnLookup.get(s(t.columnId));r.reorderedRow="HEADER"===e.type?t.rowId:null}r.resizingColumn||r.resizingRow||r.state.options.onFocusedCellChange(t),e.ctrlKey||r.state.options.onSelectedCellsChange([]),r.requestNewRender()})),i(e,"pointerup",(e=>{r.mousePosition=et(e),Je(r),r.isMouseDown=!1,r.isReordering=!1,r.resizingColumn=null,r.resizingRow=null,r.reorderedColumn=null,r.reorderedRow=null,r.state.options.onSelectedCellsChange(Qe(r.state.options.selectedCells,r.state.highlightedCells)),r.requestNewRender()})),i(e,"pointerdown",(e=>{r.element.setPointerCapture(e.pointerId)})),i(e,"pointerup",(e=>{r.element.releasePointerCapture(e.pointerId)})),i(e,"click",(e=>{r.mousePosition=et(e),Je(r);const t=r.state.hoveredCell,o=r.mouseDownCell;if(r.state.resizableColumn||r.state.resizableRow)return;if(r.didReorder)return;if(null===t)return;if(null===o)return;if(s(t.columnId)!==s(o.columnId))return;if(s(t.rowId)!==s(o.rowId))return;const n=r.state.columnLookup.get(s(t.columnId)),i=r.state.rowLookup.get(s(t.rowId)),u=r.state.options.sortBy,d=r.state.inputFormatResolver.resolve(i,n),c={ctrlKey:e.ctrlKey,shiftKey:e.shiftKey,button:e.button,buttons:e.buttons,detail:e.detail};if(d.edit?.toggle){const e=function(e,t,o,n){const r=n.hasValueByKey(o.key,t.key)?n.getValueByKey(o.key,t.key):e.value,i=e.edit.toggle;return"function"==typeof i?i({value:r}):i[(i.indexOf(r)+1)%i.length]}(d,n,i,r.state.edition),o=l(n,i);"DATA"===o&&r.state.options.onEditedCellsChange(Qe(r.state.options.editedCells,[{...t,value:e}])),"FILTER"===o&&r.state.options.onFiltersChange(Qe(tt(r.state.options.filters,"FILTER"),[{...t,expression:e}]))}else if("DATA"===n.type&&"DATA"===i.type)r.state.options.onCellClick({...r.state.hoveredCell,...c});else if("CUSTOM"===n.type||"CUSTOM"===i.type)r.state.options.onCustomCellClick({...r.state.hoveredCell,...c});else if("HEADER"===n.type||"HEADER"===i.type){const t=function(e,t,o,n){function r(e){const n="columnId"in e?e.columnId:"HEADER",r="rowId"in e?e.rowId:"HEADER";return t.key===s(n)&&o.key===s(r)}const i=["ASC","DESC",void 0],l=e.find(r),u=i.indexOf(l?.direction),d=i[(u+1)%i.length],c=e.indexOf(l)===e.length-1;return[...!n||!c&&l?e.filter((e=>!function(e){const n="columnId"in e?e.columnId:"HEADER",r="rowId"in e?e.rowId:"HEADER";return"HEADER"===t.type&&t.key===s(n)||"HEADER"===o.type&&o.key===s(r)}(e))):e.filter((e=>!r(e))),...d?[{columnId:t.id,rowId:o.id,direction:d}]:[]]}(u,n,i,e.ctrlKey);r.state.options.onSortByChange(t),r.state.options.onSelectedCellsChange([])}})),i(e,"dblclick",(e=>{if(r.mousePosition=et(e),Je(r),r.state.resizableColumn){const e=s(r.state.resizableColumn),t=r.state.options.columnWidths.filter((t=>s(t.columnId)!==e));r.state.options.onColumnWidthsChange(t),r.columnWidthCache.delete(e)}if(r.state.resizableRow){const e=s(r.state.resizableRow),t=r.state.options.rowHeights.filter((t=>s(t.rowId)!==e));r.state.options.onRowHeightsChange(t),r.rowHeightCache.delete(e)}const t=r.state.focusedCell;if(null===t)return;const n=s(t.columnId),i=s(t.rowId),l=r.state.columnLookup,u=r.state.rowLookup,c=r.state.inputFormatResolver;if(!l.has(n))return;if(!u.has(i))return;const a=l.get(n),h=u.get(i),f=c.resolve(h,a),p=f.text;f.edit&&(f.edit.toggle||(d(p),o?.select()))})),i(e,"focus",(()=>{o.parentElement&&o.focus({preventScroll:!0})})),i(e,"keydown",(e=>{Je(r);const t=r.state.focusedCell,o=r.state.columnLookup,n=r.state.rowLookup,i=r.state.options.selectedCells,l=r.state.options.onSelectedCellsChange,u=r.state.options.onFocusedCellChange,h=r.state.options.editedCells,f=r.state.options.onEditedCellsChange,p=r.state.columns,m=r.state.rows,g=r.state.text,y=r.state.inputFormatResolver,w=(e,t)=>{u(e),t.shiftKey?l(Qe(i,[e])):l([e])},x=(e,n)=>{if(!t)return;const r=s(t.columnId);if(!o.has(r))return;const i=o.get(r).index,l=Math.max(0,Math.min(p.length-1,i+e));if(l===i)return;const u={rowId:t.rowId,columnId:p[l].id};w(u,n)},b=(e,o)=>{if(!t)return;const r=s(t.rowId);if(!n.has(r))return;const i=n.get(r).index,l=Math.max(0,Math.min(m.length-1,i+e));if(l===i)return;const u={rowId:m[l].id,columnId:t.columnId};w(u,o)},R=()=>{e.preventDefault(),e.stopPropagation()};switch(e.key){case"Escape":""!==g?d(""):i.length>1?l([t]):h.length>0?f([]):(u(null),l([]));break;case"Enter":c(!1);break;case"ArrowUp":R(),b(e.ctrlKey?-m.length:-1,e);break;case"ArrowDown":R(),b(e.ctrlKey?m.length:1,e);break;case"ArrowLeft":R(),x(e.ctrlKey?-p.length:-1,e);break;case"ArrowRight":R(),x(e.ctrlKey?p.length:1,e);break;case"Delete":case"Backspace":a(!1);break;case"c":(e=>{if(!e.ctrlKey)return;const t=function(e,t,o,n){const r=new Map(t.map((e=>[e.key,e]))),i=new Map(o.map((e=>[e.key,e]))),l=e.map((e=>({columnKey:s(e.columnId),rowKey:s(e.rowId)}))).filter((e=>r.has(e.columnKey)&&i.has(e.rowKey))),u=new Set(l.map((e=>e.columnKey))),d=new Set(l.map((e=>e.rowKey)));if(0===l.length)return"";const c=new A(e),a=Math.min(...l.map((e=>r.get(e.columnKey).index))),h=Math.max(...l.map((e=>r.get(e.columnKey).index))),f=Math.min(...l.map((e=>i.get(e.rowKey).index))),p=Math.max(...l.map((e=>i.get(e.rowKey).index))),m=[];for(let e=f;e<=p;e++){const r=o[e],i=r.key;if(d.has(i)){for(let e=a;e<=h;e++){const o=t[e],s=o.key;if(u.has(s)){if(c.isKeySelected(i,s)){const e=n.resolve(r,o).text;m.push(e)}e<h&&m.push("\t")}}e<p&&m.push("\n")}}return m.join("")}(i,p,m,y);if(navigator.clipboard)navigator.clipboard.writeText(t);else{const e=document.createElement("textarea");e.value=t,document.body.appendChild(e),e.select(),document.execCommand("copy"),document.body.removeChild(e)}})(e)}})),new ResizeObserver((()=>{r.requestNewRender()})).observe(e),i(o,"input",(e=>{Je(r),o.value?(c(!0),o.style.opacity="1",o.style.pointerEvents="auto"):(e.isTrusted&&a(!0),o.style.opacity="0",o.style.pointerEvents="none")})),i(o,"click",(e=>{e.stopPropagation()})),i(o,"dblclick",(e=>{e.stopPropagation()})),i(o,"pointerdown",(e=>{e.stopPropagation()})),i(o,"keydown",(e=>{switch(e.key){case"Enter":case"Escape":break;case"Delete":case"Backspace":case"ArrowUp":case"ArrowDown":case"ArrowLeft":case"ArrowRight":""!==o.value&&(e.stopPropagation(),r.requestNewRender());break;default:e.stopPropagation(),r.requestNewRender()}}))}function it(e){const[t,o]=(0,n.useState)(null);return t&&function(e,t){rt(e);const o=e["spread-grid-context"];o.externalOptions=t,null===o.state?(Je(o),a(o)):o.requestNewRender()}(t,e),n.default.createElement("div",{ref:o})}var st=o.A;export{st as default};
|
|
1
|
+
import*as e from"react";var t={d:(e,o)=>{for(var n in o)t.o(o,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:o[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},o={};t.d(o,{A:()=>Bt});const n=(r={default:()=>e.default,useState:()=>e.useState},i={},t.d(i,r),i);var r,i;function l(e){return null===e?"null":Array.isArray(e)?`[${e.map(l).join(",")}]`:"object"==typeof e?(t=e,`{${Object.keys(t).sort().map((e=>`${e}:${l(t[e])}`)).join(",")}}`):JSON.stringify(e);var t}function s(e,t){const o="FILTER"===e.type,n="FILTER"===t.type;return o&&!n||!o&&n?"FILTER":"DATA"}function c(e,t,o,n){return e.map((e=>{const r=l(e.columnId),i=l(e.rowId);if(!o.has(r))return null;if(!n.has(i))return null;const c=o.get(r),u=n.get(i);return{edit:t.resolve(u,c).edit,cell:e,type:s(c,u)}})).filter((e=>e?.edit))}function u(e,t){return Math.round(e*t)/t}function a(e,t,o){const n=e.state,r=e.canvases[`${t}-${o}`],i=n.sections[t],l=n.sections[o],s=l.columns,c=i.rows,a=n.devicePixelRatio;if(0===c.length||0===s.length)return void(r.parentElement&&r.parentElement.removeChild(r));r.parentElement||e.element.appendChild(r);const d=r.getContext("2d",{alpha:!1}),h=n.scrollRect,f=n.textResolver,p=n.renderFormatResolver,m=n.borderWidth,g=i.showTopBorder,y=i.showBottomBorder,w=l.showLeftBorder,C=l.showRightBorder,b=m/2,x=c.length-1+(g?1:0)+(y?1:0),A=s.length-1+(w?1:0)+(C?1:0),v=c.map((e=>e.height)),I=s.map((e=>e.width)),R=I.reduce(((e,t)=>e+t),0)+A*m,k=v.reduce(((e,t)=>e+t),0)+x*m,E="center"===o?h.left:0,M="middle"===t?h.top:0,D="center"===o?h.width:l.width,B="middle"===t?h.height:i.height,L=I.reduce(((e,t,o)=>{const n=e[o]+t+m;return e.push(n),e}),[w?m:0]),T=v.reduce(((e,t,o)=>{const n=e[o]+t+m;return e.push(n),e}),[g?m:0]),O=L.slice(0,-1),S=T.slice(0,-1),N=Math.max(O.findLastIndex((e=>e<=E)),0),z=O.findLastIndex((e=>e<=E+D)),K=Math.max(S.findLastIndex((e=>e<=M)),0),F=S.findLastIndex((e=>e<=M+B)),H=Math.max(N,w?0:1),P=z+(C?1:0),Y=Math.max(K,g?0:1),W=F+(y?1:0),V=Array.from({length:F-K+1},((e,t)=>{const o=c[t+K];return Array.from({length:z-N+1},((e,t)=>{const n=s[t+N];return p.resolve(o,n)}))})),$=(e,t)=>V[e-K][t-N];r.width=Math.round(D*a),r.height=Math.round(B*a),r.style.width=`${D}px`,r.style.height=`${B}px`,r.style.marginLeft=`${E}px`,r.style.marginTop=`${M}px`,r.style.marginRight=R-D-E+"px",r.style.marginBottom=k-B-M+"px",d.fillStyle="#E9E9E9",d.fillRect(0,0,r.width,r.height);const q=(e,t)=>{d.setTransform(a,0,0,a,(e-E)*a,(t-M)*a)},_=(e,t,o,n)=>{d.beginPath(),d.rect(e,t,o,n),d.clip()};for(let e=N;e<=z;e++)for(let t=K;t<=F;t++){const o=$(t,e);if(!o.render)continue;const n=o.style,r=T[t],i=L[e],l=I[e],s=v[t],c=o.text,h=n.textBaseline||"middle",p=o.padding,g=n.foreground||"black";if(q(i,r),d.fillStyle=n.background||"white",d.fillRect(0,0,l,s),"draw"in o&&o.draw(d),n.highlight&&(d.fillStyle=n.highlight,d.fillRect(0,0,l,s)),n.corner&&(d.fillStyle=n.corner,d.beginPath(),d.moveTo(l-7,s),d.lineTo(l,s),d.lineTo(l,s-7),d.fill()),c&&"transparent"!==g){d.fillStyle=g,d.font=o.font;const e=f.getFontMetrics(o.font),t="center"==n.textAlign&&f.measureWidth(c,o.font)>l-p.left-p.right?"left":n.textAlign||"left";d.textAlign=t;const r=u("left"===t?p.left:"center"===t?l/2:"right"===t?l-p.right:0,a),i=u("top"===h?e.middle+e.topOffset+p.top:"middle"===h?s/2+e.middle:"bottom"===h?s+e.middle-e.bottomOffset-p.bottom:0,a);d.save(),_(0,2*m,l,s-4*m),d.fillText(c,r,i),d.restore()}}q(0,0);const G=(e,t,o,n,r)=>{if(!r)return;if(0===r.width)return;const i=r.width/a,l=t===n,s=e-(l?i/2:0),c=t-(l?0:i/2),u=o+(l?i/2:0),h=n+(l?0:i/2);d.strokeStyle=r.color||"black",d.lineWidth=i,r.dash?(d.setLineDash(r.dash.map((e=>e/a))),d.lineDashOffset=l?s:c):d.setLineDash([]),d.beginPath(),d.moveTo(s,c),d.lineTo(u,h),d.stroke()},j=(e,t)=>e?t?e.index>t.index?e:t:e:t;for(let e=Y;e<=W;e++){const t=e-1,o=e;for(let e=N;e<=z;e++){const n=j(t>=K?$(t,e).style.borderBottom:null,o<=F?$(o,e).style.borderTop:null);G(L[e]-b,T[o]-b,L[e+1]-b,T[o]-b,n)}}for(let e=H;e<=P;e++){const t=e-1,o=e;for(let e=K;e<=F;e++){const n=j(t>=N?$(e,t).style.borderRight:null,o<=z?$(e,o).style.borderLeft:null);G(L[o]-b,T[e]-b,L[o]-b,T[e+1]-b,n)}}}const d={value:({newValue:e})=>e||"",text:({newValue:e})=>e||"Search...",edit:{validate:()=>!0,parse:({string:e})=>e,autoCommit:!0}};function h(e,t,o){return[{column:{type:"DATA"},row:{type:"HEADER"},value:({column:e})=>void 0===e.header?e.id:e.header},{column:{type:"HEADER"},row:{type:"DATA"},value:({row:e})=>void 0===e.header?e.id:e.header},{column:{type:"HEADER"},row:{type:"SPECIAL"},value:""},{column:{type:"SPECIAL"},row:{type:"HEADER"},value:""},{column:{type:"DATA"},row:{type:"FILTER"},...d},{column:{type:"FILTER"},row:{type:"DATA"},...d},{column:{type:"DATA"},row:{type:"DATA"},value:t},...e,...o.map((({columnId:e,rowId:t,direction:n},r)=>({column:{id:e},row:{id:t},text:({value:e,text:t})=>`${o.length>1?r+1:""}${"ASC"===n?"⇣":"⇡"} ${t||e}`})))]}const f=["column","row","condition"];function p(e){return Object.keys(e).length>Object.keys(e).filter((e=>f.includes(e))).length}function m(e,t){const o=[...f,...t];return e.map((e=>function(e,t){const o={};for(const n of t)n in e&&(o[n]=e[n]);return o}(e,o))).filter(p)}function g(e){return m(e,["value","text","edit"])}function y(e,t){return t?e+"99":e+"33"}function w(e,t,o,n,r,i,s,c,u,a,d,h,f){e=m(e,["value","style","text","font","padding","edit","draw"]);const p=o?l(o.columnId):null,g=o?l(o.rowId):null,w=null!==u,C=null!==c||w,b=a+2,x=a+4,A=(e,t,o,r)=>{if(o<0||o>=e.length)return!1;if(r<0||r>=t.length)return!1;const i=e[o],l=t[r];if("DYNAMIC-BLOCK"===i.type)return!1;if("DYNAMIC-BLOCK"===l.type)return!1;const s=i.key,c=l.key;return n.isKeySelected(s,c)},v=(e,t)=>e?[t]:[];return[{column:{type:"DATA"},row:{type:"FILTER"},style:({newValue:e})=>({background:"#FBFBFB",foreground:e?"black":"#cccccc",border:{width:1,color:"gray"}})},{column:{type:"FILTER"},row:{type:"DATA"},style:({newValue:e})=>({background:"#FBFBFB",foreground:e?"black":"#cccccc",border:{width:1,color:"gray"}})},{column:{type:"ANY"},row:{type:"HEADER"},style:{background:"#F5F5F5",border:{width:a,color:"gray"}}},{column:{type:"HEADER"},row:{type:"ANY"},style:{background:"#F5F5F5",border:{width:a,color:"gray"}}},{column:{type:"HEADER"},row:{type:"HEADER"},style:{background:"#E0E0E0"}},...e,...v(t&&!w,{column:{type:"ANY"},row:{id:t?.rowId},style:{highlight:"#81948133"}}),...v(t&&!C,{column:{id:t?.columnId},row:{id:t?.rowId},style:{highlight:"#81948188"}}),{column:{type:"ANY"},row:{type:"ANY"},condition:({rows:e,columns:t,row:o,column:n})=>A(e,t,o.index,n.index),style:({rows:e,columns:t,row:o,column:n,edit:r})=>({...A(e,t,o.index-1,n.index)?{}:{borderTop:{width:b,color:"#596959",index:Number.MAX_SAFE_INTEGER}},...A(e,t,o.index+1,n.index)?{}:{borderBottom:{width:b,color:"#596959",index:Number.MAX_SAFE_INTEGER}},...A(e,t,o.index,n.index-1)?{}:{borderLeft:{width:b,color:"#596959",index:Number.MAX_SAFE_INTEGER}},...A(e,t,o.index,n.index+1)?{}:{borderRight:{width:b,color:"#596959",index:Number.MAX_SAFE_INTEGER}},highlight:y(r?"#798d9c":"#819481",p!==n.key||g!==o.key)})},{column:{type:"ANY"},row:{type:"ANY"},condition:({row:e,column:t})=>r.isKeySelected(e.key,t.key),style:({row:e,column:t})=>({highlight:y("#93a8b8",p!==t.key||g!==e.key)})},...v(!!o,{column:{id:o?.columnId},row:{id:o?.rowId},style:{highlight:"#ffffffaa"}}),...s.map((({columnId:e,rowId:t,direction:o},n)=>({column:{id:e},row:{id:t},style:{highlight:"#0377fc44"}}))),{column:{type:"ANY"},row:{type:"ANY"},condition:({edit:e})=>!!e,style:{corner:"#77777720"}},{column:{type:"ANY"},row:{type:"ANY"},condition:({row:e,column:t})=>i.hasValueByKey(e.key,t.key),style:{corner:"darkgreen"}},...v(c,{column:{id:c},row:{type:"HEADER"},style:{borderRight:{width:x,color:"cornflowerblue"}}}),...v(u,{column:{type:"HEADER"},row:{id:u},style:{borderBottom:{width:x,color:"cornflowerblue"}}}),...v(d&&h,{column:{id:h},row:{type:"ANY"},style:{highlight:"#3a74e055"}}),...v(d&&f,{column:{type:"ANY"},row:{id:f},style:{highlight:"#3a74e055"}})]}function C(e,t){const o=t.filter((e=>"BEGIN"===e.pinned)).length,n=t.filter((e=>"END"===e.pinned)).length,r=t.length-o-n,i=e.filter((e=>"BEGIN"===e.pinned)).length,l=e.filter((e=>"END"===e.pinned)).length,s=e.length-i-l,c=t.slice(0,o),u=t.slice(t.length-n,t.length),a=t.slice(o,t.length-n),d=e.slice(0,i),h=e.slice(e.length-l,e.length),f=e.slice(i,e.length-l),p=o>0,m=i>0,g=!0,y=!0,w=r>0||!p,C=!0,b=!p,x=!(n>0),A=!0,v=!0,I=s>0||!m,R=!0,k=!m,E=!(l>0),M=(e,t,o)=>{if(0===e.length)return 0;const n=t?e.at(0).topWithBorder:e.at(0).top;return(o?e.at(-1).bottomWithBorder:e.at(-1).bottom)-n},D=(e,t,o)=>{if(0===e.length)return 0;const n=t?e.at(0).leftWithBorder:e.at(0).left;return(o?e.at(-1).rightWithBorder:e.at(-1).right)-n};return{top:{rows:c,showTopBorder:g,showBottomBorder:y,height:M(c,g,y)},bottom:{rows:u,showTopBorder:w,showBottomBorder:C,height:M(u,w,C)},middle:{rows:a,showTopBorder:b,showBottomBorder:x,height:M(a,b,x)},left:{columns:d,showLeftBorder:A,showRightBorder:v,width:D(d,A,v)},right:{columns:h,showLeftBorder:I,showRightBorder:R,width:D(h,I,R)},center:{columns:f,showLeftBorder:k,showRightBorder:E,width:D(f,k,E)}}}function b(e,t){return[...e,...t.map((e=>({columnId:e.columnId,rowId:e.rowId,value:e.expression})))]}class x{constructor(e){this.lookup=new Map,e.forEach((e=>{const t=l(e.rowId),o=l(e.columnId);this.lookup.has(t)||this.lookup.set(t,new Map),this.lookup.get(t).set(o,e.value)}))}hasValueByKey(e,t){return this.lookup.has(e)&&this.lookup.get(e).has(t)}getValueByKey(e,t){if(this.hasValueByKey(e,t))return this.lookup.get(e).get(t)}hasValueById(e,t){return this.hasValueByKey(l(e),l(t))}getValueById(e,t){return this.getValueByKey(l(e),l(t))}}function A(e){return new x(e)}class v{constructor(e){this.lookup=new Map,e.forEach((e=>{const t=l(e.rowId),o=l(e.columnId);this.lookup.has(t)||this.lookup.set(t,new Set),this.lookup.get(t).add(o)}))}isKeySelected(e,t){return this.lookup.has(e)&&this.lookup.get(e).has(t)}isIdSelected(e,t){return this.isKeySelected(l(e),l(t))}}function I(e){return new v(e)}function R(e,t){return"function"==typeof e?e(t):e}function k(e,t){return"function"==typeof e?e(t):e}function E(e,t){const o=e.type||"DATA",n="selector"in e?e.selector:"id"in e?e.id:void 0,r="id"in e?e.id:"selector"in e?e.selector:o;return{...e,id:r,selector:n,type:o,key:l(r),header:"header"in e?e.header:r,labels:e.labels||[],index:t}}function M(e,t){const o="selector"in e?e.selector:({index:e})=>e,n="id"in e?e.id:({selector:e})=>e,r="header"in e?e.header:()=>`#${t}`;return{...e,id:n,selector:o,type:"DYNAMIC-BLOCK",header:r,labels:e.labels||[],index:t}}function D(e,t){return"number"==typeof e?u(e,t):e}function B(e,t,o,n){const r=new Map(t.map((({columnId:e,width:t})=>[l(e),t])));return e.map(((e,t)=>{if("DYNAMIC-BLOCK"===e.type){const r=M(e,t),i=e.width*e.count+o*(e.count-1);return{...r,count:e.count,width:u(i,n),columnWidth:u(e.width,n)}}{const o=E(e,t),i=r.has(o.key)?r.get(o.key):"width"in e?e.width:"fit";return{...o,width:D(i,n)}}}))}function L(e,t,o,n){const r=new Map(t.map((({rowId:e,height:t})=>[l(e),t])));return e.map(((e,t)=>{if("DYNAMIC-BLOCK"===e.type){const r=M(e,t),i=e.height*e.count+o*(e.count-1);return{...r,count:e.count,height:u(i,n),rowHeight:u(e.height,n)}}{const o=E(e,t),i=r.has(o.key)?r.get(o.key):"height"in e?e.height:"fit";return{...o,height:D(i,n)}}}))}function T(e,t,o,n,r){if(e<o){if("DYNAMIC-BLOCK"===r)throw new Error("DYNAMIC-BLOCK should have been unfolded before pinning");return"BEGIN"}if(e>=t-n){if("DYNAMIC-BLOCK"===r)throw new Error("DYNAMIC-BLOCK should have been unfolded before pinning");return"END"}}function O(e,t,o){let n=o;return e.map(((r,i)=>{const l=r.width,s={...r,index:i,width:l,leftWithBorder:n-o,left:n,right:n+l,rightWithBorder:n+l+o,pinned:T(i,e.length,t.left,t.right,r.type)};return n+=s.width+o,s}))}function S(e,t,o){let n=o;return e.map(((r,i)=>{const l=r.height,s={...r,index:i,height:l,topWithBorder:n-o,top:n,bottom:n+l,bottomWithBorder:n+l+o,pinned:T(i,e.length,t.top,t.bottom,r.type)};return n+=s.height+o,s}))}const N="12px Calibri",z={top:2,right:5,bottom:2,left:5};function K(e){return"function"==typeof e?e:()=>e}const F={HEADER:["HEADER"],FILTER:["FILTER"],DATA:["DATA"],CUSTOM:["CUSTOM"],ANY:["HEADER","DATA","FILTER","CUSTOM"],SPECIAL:["HEADER","FILTER","CUSTOM"],NONE:[]};class H{byKey=new Map;byIndex=new Map;byLabel=new Map;byType=new Map}class P{lookup=new H;hasRules=!1;addRule(e,t,o){if(this.hasRules=!0,Array.isArray(e)){for(const n of e)this.addRule(n,t,o);return}if(Array.isArray(t)){for(const n of t)this.addRule(e,n,o);return}const n=e?"id"in e?{key:l(e.id)}:e:{type:"DATA"},r=t?"id"in t?{key:l(t.id)}:t:{type:"DATA"};function i(e,t){e.has(t)||e.set(t,[]),e.get(t).push(o)}function s(e,t){if(e.has(t)||e.set(t,new H),"key"in r)i(e.get(t).byKey,r.key);else if("index"in r)i(e.get(t).byIndex,r.index);else if("label"in r)i(e.get(t).byLabel,r.label);else for(const o of F[r.type||"NONE"])i(e.get(t).byType,o)}if("key"in n)s(this.lookup.byKey,n.key);else if("index"in n)s(this.lookup.byIndex,n.index);else if("label"in n)s(this.lookup.byLabel,n.label);else for(const e of F[n.type||"NONE"])s(this.lookup.byType,e)}getRules(e,t){const o=[];if(!this.hasRules)return o;function n(e){for(const t of e)o.push(t)}function r(e){e.byKey.has(t.key)&&n(e.byKey.get(t.key)),e.byIndex.has(t.index)&&n(e.byIndex.get(t.index)),e.byType.has(t.type)&&n(e.byType.get(t.type));for(const o of t.labels)e.byLabel.has(o)&&n(e.byLabel.get(o))}this.lookup.byKey.has(e.key)&&r(this.lookup.byKey.get(e.key)),this.lookup.byIndex.has(e.index)&&r(this.lookup.byIndex.get(e.index)),this.lookup.byType.has(e.type)&&r(this.lookup.byType.get(e.type));for(const t of e.labels)this.lookup.byLabel.has(t)&&r(this.lookup.byLabel.get(t));return o}}const Y=["borderTop","borderRight","borderBottom","borderLeft"],W={validate:()=>!0,parse:({string:e})=>e};function V(e,t){const o={...e};if("border"in o){for(const e of Y)o[e]=o.border;delete o.border}for(const e of Y)e in o&&(o[e]={...o[e],index:t});return o}function $(e,t){if(!1!==e.edit)return!0===e.edit?"edit"in t?t.edit:W:"edit"in t?{...t.edit,...e.edit}:{...W,...e.edit}}class q{constructor(e){this.rulesLookup=new P;for(const[t,o]of e.entries()){const e={index:t};"condition"in o&&(e.condition=o.condition),"style"in o&&(e.style=K(o.style)),"value"in o&&(e.value=K(o.value)),"text"in o&&(e.text=K(o.text)),"font"in o&&(e.font=K(o.font)),"padding"in o&&(e.padding=K(o.padding)),"edit"in o&&(e.edit=o.edit),"tooltip"in o&&(e.tooltip=K(o.tooltip)),"draw"in o&&(e.draw=o.draw),this.rulesLookup.addRule(o.column,o.row,e)}}resolve(e,t,o,n,r,i){const l=this.rulesLookup.getRules(r,n).sort(((e,t)=>e.index-t.index)).filter(((e,t,o)=>e.index!==o[t-1]?.index));let s,c,u={data:e,rows:t,columns:o,row:n,column:r},a={},d=z,h=N;i.hasValueByKey(n.key,r.key)&&(u={...u,newValue:i.getValueByKey(n.key,r.key)});for(const e of l)if((!("condition"in e)||e.condition(u))&&("value"in e&&(u={...u,value:e.value(u)}),"style"in e&&(a={...a,...V(e.style(u),e.index)}),"text"in e&&(u={...u,text:e.text(u)}),"font"in e&&(h=e.font(u)),"padding"in e&&(d={...d,...e.padding(u)}),"edit"in e&&(u={...u,edit:$(e,u)}),"tooltip"in e&&(c=e.tooltip(u)),"draw"in e)){const t=u;s=o=>e.draw({...t,ctx:o})}const f=function(e){return"text"in e?`${e.text}`:"newValue"in e?`${e.newValue}`:void 0!==e.value?`${e.value}`:""}(u),p={render:!0,style:a,text:f,padding:d,font:h};return"value"in u&&(p.value=u.value),"edit"in u&&void 0!==u.edit&&(p.edit=u.edit),void 0!==c&&(p.tooltip=c),void 0!==s&&(p.draw=s),p}}function _(e){return new q(e)}class G{constructor(e,t,o,n,r){this.formattingRules=e,this.data=t,this.rows=o,this.columns=n,this.edition=r}resolve(e,t){return this.formattingRules.resolve(this.data,this.rows,this.columns,e,t,this.edition)}}function j(e,t,o,n,r){return new G(e,t,o,n,r)}function U(e,t,o){const n=new Map;for(const r of e){const e=l(r[t]),i=l(r[o]);n.has(e)||n.set(e,new Map),n.get(e).set(i,r.expression)}return n}function X(e,t,o,n,r,i,l){if(0===e.length)return r;const s=U(e,"columnId","rowId"),c=i.filter((e=>"FILTER"!==e.type&&"DYNAMIC-BLOCK"!==e.type&&s.has(e.key)));return 0===c.length?r:r.filter((e=>{if("DYNAMIC-BLOCK"===e.type)return!0;for(const u of c){if("DYNAMIC-BLOCK"===u.type)continue;const c=o.resolve(n,r,i,e,u,l),a=s.get(u.key);if(!t.resolve(n,r,i,e,u,c.value,c.text,a))return!1}return!0}))}function J(e,t,o,n,r,i,l){if(0===e.length)return i;const s=U(e,"rowId","columnId"),c=r.filter((e=>"FILTER"!==e.type&&"DYNAMIC-BLOCK"!==e.type&&s.has(e.key)));return 0===c.length?i:i.filter((e=>{if("DYNAMIC-BLOCK"===e.type)return!0;for(const u of c){if("DYNAMIC-BLOCK"===u.type)continue;const c=o.resolve(n,r,i,u,e,l),a=s.get(u.key);if(!t.resolve(n,r,i,u,e,c.value,c.text,a))return!1}return!0}))}function Q(e,t,o){if("DYNAMIC-BLOCK"!==e.type)return[e.height+o,1];const n=Math.min(t,e.count);return[(e.rowHeight+o)*n,n]}function Z(e,t,o){if("DYNAMIC-BLOCK"!==e.type)return[e.width+o,1];const n=Math.min(t,e.count);return[(e.columnWidth+o)*n,n]}function ee(e,t,o,n){let r=0,i=0,l=0,s=0;if(o.top>0){r=n;for(let e=0,i=0;i<o.top;e++){const l=t[e],[s,c]=Q(l,o.top-i,n);r+=s,i+=c}}if(o.left>0){l=n;for(let t=0,r=0;r<o.left;t++){const i=e[t],[s,c]=Z(i,o.left-r,n);l+=s,r+=c}}if(o.bottom>0){i=n;for(let e=t.length-1,r=0;r<o.bottom;e--){const l=t[e],[s,c]=Q(l,o.bottom-r,n);i+=s,r+=c}}if(o.right>0){s=n;for(let t=e.length-1,r=0;r<o.right;t--){const i=e[t],[l,c]=Z(i,o.right-r,n);s+=l,r+=c}}return{top:r,bottom:i,left:l,right:s}}function te(e,t){if(0===e.length)return 0;let o=t;for(const n of e)o+=n.height,o+=t;return o}function oe(e,t){if(0===e.length)return 0;let o=t;for(const n of e)o+=n.width,o+=t;return o}function ne(e,t,o){return{width:oe(e,o),height:te(t,o)}}class re{constructor(){this.fontMetrics=new Map,this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d")}measureWidth(e,t){if(!e)return 0;const o=this.context;return o.font=t||N,o.measureText(e).width}measureHeight(e,t){let o=1;for(const t of e)"\n"===t&&o++;return o*this.getFontMetrics(t).height}getFontMetrics(e){const t=e;if(this.fontMetrics.has(t))return this.fontMetrics.get(t);const o=this.context;o.font=e||N;const n=o.measureText("X"),r=(n.actualBoundingBoxDescent-n.actualBoundingBoxAscent)/2,i={topOffset:r+n.fontBoundingBoxAscent,middle:-r,bottomOffset:n.fontBoundingBoxDescent-r,height:n.fontBoundingBoxAscent+n.fontBoundingBoxDescent};return this.fontMetrics.set(t,i),i}}function ie(){return new re}function le(e,t){return t.top>=e.top&&t.left>=e.left&&t.top+t.height<=e.top+e.height&&t.left+t.width<=e.left+e.width}function se(e,t){const o={top:Math.max(e.top,t.top),left:Math.max(e.left,t.left),width:Math.min(e.left+e.width,t.left+t.width)-Math.max(e.left,t.left),height:Math.min(e.top+e.height,t.top+t.height)-Math.max(e.top,t.top)};return o.width>=0&&o.height>=0?o:{top:e.top,left:e.left,width:0,height:0}}function ce(e,t){return{top:e.top-t,left:e.left-t,width:e.width+2*t,height:e.height+2*t}}function ue(e){return e.width*e.height}function ae(e,t){return{top:e.top,left:e.left,width:Math.max(0,e.width-t.left-t.right),height:Math.max(0,e.height-t.top-t.bottom)}}const de=200,he=400,fe={left:0,top:0,width:0,height:0};function pe(e,t,o,n,r){const i=e||fe,l=ae({left:0,top:0,...o},n),s=ae({...t,...r},n),c=se(l,ce(s,de)),u=se(l,ce(s,he));return le(l,i)&&le(i,c)?ue(i)>2*ue(u)?u:i:u}function me(e,t,o,n,r){if(!e)return null;if(e.x<0||e.y<0||e.x>r.width||e.y>r.height)return null;const i=function(e,t){if(0===e.length)return-1;if(t<e[0].topWithBorder)return-1;if(t>e[e.length-1].bottomWithBorder)return-1;let o=0,n=e.length-1;for(;o<=n;){const r=Math.floor((o+n)/2);if(t<e[r].topWithBorder)n=r-1;else{if(!(t>e[r].bottomWithBorder))return r;o=r+1}}return-1}(t,e.y),l=function(e,t){if(0===e.length)return-1;if(t<e[0].leftWithBorder)return-1;if(t>e[e.length-1].rightWithBorder)return-1;let o=0,n=e.length-1;for(;o<=n;){const r=Math.floor((o+n)/2);if(t<e[r].leftWithBorder)n=r-1;else{if(!(t>e[r].rightWithBorder))return r;o=r+1}}return-1}(o,e.x);return-1===i||-1===l?null:{rowId:t[i].id,columnId:o[l].id}}function ge(e){return e.reduce(((e,t)=>e.set(t.key,t)),new Map)}function ye(e,t,o,n,r,i,s,c){if(!e)return[];if(!t)return[];if(!n)return[];if(!o)return[];const u=l(o.columnId),a=l(o.rowId),d=l(n.columnId),h=l(n.rowId);if(!s.has(u))return[];if(!c.has(a))return[];if(!s.has(d))return[];if(!c.has(h))return[];const f=Math.min(s.get(u).index,s.get(d).index),p=Math.max(s.get(u).index,s.get(d).index),m=Math.min(c.get(a).index,c.get(h).index),g=Math.max(c.get(a).index,c.get(h).index);return r.slice(f,p+1).flatMap((e=>i.slice(m,g+1).map((t=>({rowId:t.id,columnId:e.id})))))}function we(e,t){const o=function(e){return"BEGIN"===e.pinned?"top":"END"===e.pinned?"bottom":"middle"}(t),n=function(e){return"BEGIN"===e.pinned?"left":"END"===e.pinned?"right":"center"}(e);return`${o}-${n}`}function Ce(e,t,o,n,r){return 0===e.length?null:function(e,t,o,n){if(!e)return null;const r=l(e.columnId),i=l(e.rowId);if(!t.has(r))return null;if(!o.has(i))return null;const s=t.get(r),c=o.get(i),u={width:s.width,height:c.height,section:we(s,c)};switch(c.pinned){case"BEGIN":u.top=c.top;break;case"END":u.bottom=n.top.height+n.middle.height+n.bottom.height-c.top-c.height;break;default:u.marginTop=c.top-n.top.height}switch(s.pinned){case"BEGIN":u.left=s.left;break;case"END":u.right=n.left.width+n.center.width+n.right.width-s.left-s.width;break;default:u.marginLeft=s.left-n.left.width}return u}(t,o,n,r)}function be(e,t){return t.every((t=>t.edit.validate({string:e})))}function xe(e){return Array.isArray(e)?e.map(((e,t)=>t)):Object.keys(e)}function Ae(e){return xe(e)}function ve(e){const t=new Set;if(Array.isArray(e))for(const o of e)for(const e of xe(o))t.add(e);else for(const o in e)for(const n of xe(e[o]))t.add(n);return Array.from(t)}function Ie(e,t){if(!e.some((e=>"DATA-BLOCK"===e.type)))return e;const o=[];for(const n of e)if("DATA-BLOCK"===n.type){const e="selector"in n?n.selector({data:t}):ve(t),r="id"in n?n.id:({selector:e})=>e;for(const i of e)o.push({...n,id:r({data:t,selector:i}),selector:i,type:"DATA"})}else o.push(n);return o}function Re(e,t){if(!e.some((e=>"DATA-BLOCK"===e.type)))return e;const o=[];for(const n of e)if("DATA-BLOCK"===n.type){const e="selector"in n?n.selector({data:t}):Ae(t),r="id"in n?n.id:({selector:e})=>e;for(const i of e)o.push({...n,id:r({data:t,selector:i}),selector:i,type:"DATA"})}else o.push(n);return o}const ke=({text:e,expression:t})=>e.includes(t);class Ee{constructor(e){this.rulesLookup=new P;for(const t of e){const e={by:l("by"in t?t.by:"FILTER"),condition:t.condition||ke};this.rulesLookup.addRule(t.column,t.row,e)}}resolve(e,t,o,n,r,i,l,s){const c=this.rulesLookup.getRules(r,n);if(0===c.length)return"DATA"!==n.type||"DATA"!==r.type||!s.has('"FILTER"')||ke({text:l,expression:s.get('"FILTER"')});let u={data:e,rows:t,columns:o,row:n,column:r,value:i,text:l};for(const e of c){if(!s.has(e.by))continue;const t={...u,expression:s.get(e.by)};if(!e.condition(t))return!1}return!0}}function Me(e){return new Ee(e)}function De(e){return m(e,["value","text"])}function Be(e){return m(e,["value","text","font","padding"])}function Le(e,t,o,n,r,i,l){if(e.every((e=>"number"==typeof e.width)))return e;const s=e=>{if("DYNAMIC-BLOCK"===e.type)return e.width;const i=e.width;if("number"==typeof i)return i;if(r.has(e.key)){const t=r.get(e.key);if("fit-once"===i&&!t.dataOnly)return t.width;if("fit-data-once"===i&&t.dataOnly)return t.width}let l=0;for(const r of t){if("DYNAMIC-BLOCK"===r.type)continue;if("DATA"!==r.type&&"fit-data-once"===i)continue;if("DATA"!==r.type&&"fit-data"===i)continue;const t=n.resolve(r,e),s=t.text,c=t.font,u=t.padding.left+t.padding.right,a=o.measureWidth(s,c)+u;l=Math.max(l,a)}return r.set(e.key,{width:l,dataOnly:"fit-data-once"===i}),l};for(const e of r.keys())i.has(e)||r.delete(e);return e.map((e=>({...e,width:u(s(e),l)})))}function Te(e,t,o,n,r,i,l){if(t.every((e=>"number"==typeof e.height)))return t;const s=t=>{if("DYNAMIC-BLOCK"===t.type)return t.height;const i=t.height;if("number"==typeof i)return i;if(r.has(t.key)){const e=r.get(t.key);if("fit-once"===i&&!e.dataOnly)return e.height;if("fit-data-once"===i&&e.dataOnly)return e.height}let l=0;for(const r of e){if("DYNAMIC-BLOCK"===r.type)continue;if("DATA"!==r.type&&"fit-data-once"===i)continue;if("DATA"!==r.type&&"fit-data"===i)continue;const e=n.resolve(t,r),s=e.text,c=e.font,u=e.padding.top+e.padding.bottom,a=o.measureHeight(s,c)+u;l=Math.max(l,a)}return r.set(t.key,{height:l,dataOnly:"fit-data-once"===i}),l};for(const e of r.keys())i.has(e)||r.delete(e);return t.map((e=>({...e,height:u(s(e),l)})))}function Oe(e){const t=new Set;for(const o of e)"DYNAMIC-BLOCK"!=o.type&&t.add(o.key);return t}function Se(e){return m(e,["value","text"])}function Ne(e,t){return e===t?0:null==e.value?-1:null==t.value?1:e.value<t.value?-1:e.value>t.value?1:0}function ze(e,t){return-Ne(e,t)}class Ke{constructor(e){this.rulesLookup=new P;for(const t of e){const e=t.comparator?(e,o)=>t.comparator(e,o):(e,t)=>Ne(e,t),o=t.comparator?(e,o)=>{return-("number"==typeof(n=t.comparator(e,o))?n:n?-1:1);var n}:(e,t)=>ze(e,t),n={by:l("by"in t?t.by:"HEADER"),comparatorAsc:e,comparatorDesc:o};this.rulesLookup.addRule(t.column,t.row,n)}}resolve(e,t,o){const n=this.rulesLookup.getRules(e,t);if(0===n.length)return"DATA"!==t.type||"DATA"!==e.type?null:o.has('"HEADER"')?"ASC"===o.get('"HEADER"')?Ne:ze:null;if(n.length>1)throw new Error("Multiple sorting rules for the same cell");const r=n[0];return o.has(r.by)?"ASC"===o.get(r.by)?r.comparatorAsc:r.comparatorDesc:null}}function Fe(e){return"manual"===e?null:new Ke(e)}function He(e,t,o){const n=new Map;for(const r of e){const e=l(r[t]),i=l(r[o]);n.has(e)||n.set(e,new Map),n.get(e).set(i,r.direction)}return n}function Pe(e,t){e.sort(((e,t)=>{const o=e.comparator(e.cell,t.cell);return"number"==typeof o?o:o?-1:1})),t.push(...e.map((e=>e.entity))),e.length=0}function Ye(e,t,o,n,r,i,s){if(0===e.length)return r;if(null===t)return r;const c=He(e,"columnId","rowId"),u=new Map(i.filter((e=>"DYNAMIC-BLOCK"!==e.type)).map((e=>[e.key,e]))),a=e.map((e=>l(e.columnId))).filter((e=>u.has(e))).map((e=>u.get(e))).reverse();if(0===a.length)return r;for(const e of a){const l=[],u=[];for(const a of r){if("DYNAMIC-BLOCK"===a.type){Pe(u,l),l.push(a);continue}const d=t.resolve(e,a,c.get(e.key));if(!d){Pe(u,l),l.push(a);continue}const h={entity:a,comparator:d,cell:o.resolve(n,r,i,a,e,s)};0!==u.length&&u[0].comparator!==d?(Pe(u,l),u.push(h)):u.push(h)}Pe(u,l),r=l}return r}function We(e,t,o,n,r,i,s){if(0===e.length)return i;if(null===t)return i;const c=He(e,"rowId","columnId"),u=new Map(r.filter((e=>"DYNAMIC-BLOCK"!=e.type)).map((e=>[e.key,e]))),a=e.map((e=>l(e.rowId))).filter((e=>u.has(e))).map((e=>u.get(e))).reverse();if(0===a.length)return i;for(const e of a){const l=[],u=[];for(const a of i){if("DYNAMIC-BLOCK"===a.type){Pe(u,l),l.push(a);continue}const d=t.resolve(a,e,c.get(e.key));if(!d){Pe(u,l),l.push(a);continue}const h={entity:a,comparator:d,cell:o.resolve(n,r,i,e,a,s)};0!==u.length&&u[0].comparator!==d?(Pe(u,l),u.push(h)):u.push(h)}Pe(u,l),i=l}return i}const Ve=5;function $e(e,t,o,n,r,i){if(!n)return null;if(i)return null;const s=t.get(l(n.columnId));if("HEADER"!==o.get(l(n.rowId)).type)return null;if(!r)return null;const c=r.x;return c>=s.right-Ve&&c<=s.right+Ve?s.id:0===s.index||c<s.left-Ve||c>s.left+Ve?null:e[s.index-1].id}function qe(e,t,o,n,r,i){if(!n)return null;if(i)return null;const s=t.get(l(n.columnId)),c=o.get(l(n.rowId));if("HEADER"!==s.type)return null;if(!r)return null;const u=r.y;return u>=c.bottom-Ve&&u<=c.bottom+Ve?c.id:0===c.index||u<c.top-Ve||u>c.top+Ve?null:e[c.index-1].id}function _e(e){return e.map((e=>({columnId:"columnId"in e?e.columnId:"HEADER",rowId:"rowId"in e?e.rowId:"HEADER",direction:e.direction})))}function Ge(e){return e.map((e=>({columnId:"columnId"in e?e.columnId:"FILTER",rowId:"rowId"in e?e.rowId:"FILTER",expression:e.expression})))}function je(e){return e.filter((e=>"DATA"===e.type)).map((e=>e.id))}function Ue(e){return je(e)}function Xe(e){return je(e)}function Je(e){return m(e,["value","text","tooltip"])}function Qe(e,t,o,n){if(!e)return null;const r=l(e.columnId),i=l(e.rowId);if(!o.has(r))return null;if(!n.has(i))return null;const s=n.get(i),c=o.get(r);return t.resolve(s,c).tooltip}function Ze(e,t){return e?{left:t.x+8,top:t.y+20}:null}function et(e){return e.map((e=>l(e)))}function tt(e,t){if(!t.length)return e;const o=new Map;for(const[e,n]of t.entries())o.set(n,e);const n=[],r=t.length;let i=0;for(const[t,l]of e.entries())if("DYNAMIC-BLOCK"===l.type)i++,n.push({entry:l,score:[i,0,0]}),i++;else{const e=l.key,s=o.has(e)?o.get(e):r;n.push({entry:l,score:[i,s,t]})}return n.sort(((e,t)=>function(e,t){if(e.length!=t.length)throw new Error("lengths should be the same");for(let o=0;o<e.length;o++){const n=e[o]-t[o];if(0!=n)return n}return 0}(e.score,t.score))).map((e=>e.entry))}function ot(e,t){return tt(e,t)}function nt(e,t){return tt(e,t)}function rt(e){return e.some((e=>"DYNAMIC-BLOCK"===e.type))}function it(e){const t=[];for(const[o,n]of e){if(o>n)continue;if(0===t.length){t.push([o,n]);continue}const[e,r]=t[t.length-1];r<o-1?t.push([o,n]):(t.pop(),t.push([e,n]))}return t}function lt(e){return e.reduce(((e,t)=>"DYNAMIC-BLOCK"===t.type?e+t.count:e+1),0)}function st(e,t,o,n,r,i){if(!rt(t))return t;let s=i,c=0,u=0;const a=lt(t),d=n.left+r.left,h=d+n.width,f=[],p=(e,t)=>{f.push(t),s+=t.width+i,c+=e},m=e=>{p(1,e)},g=(t,o,n)=>{for(let r=o;r<=n;r++){const o=t.selector({data:e,index:r}),n=t.id({data:e,selector:o});p(1,{...t,type:"DATA",id:n,key:l(n),selector:o,header:t.header({data:e,selector:o}),width:t.columnWidth})}},y=(e,t)=>{if(t>0){const o="__separator_"+u++;p(t,{...e,type:"SEPARATOR",id:o,key:l(o),header:"",width:t*e.columnWidth+(t-1)*i})}};for(const e of t){if("DYNAMIC-BLOCK"!==e.type){m(e);continue}const{count:t,columnWidth:n}=e,r=n+i,l=o.left-c,u=a-o.right-c,f=Math.floor((d-s)/r),p=Math.floor((h-s)/r),w=it([[0,l-1],[Math.max(0,l,f),Math.min(t-1,u-1,p)],[u,t-1]]);let C=0;for(const[t,o]of w)y(e,t-C),g(e,t,o),C=o+1;y(e,t-C)}return f}function ct(e,t,o,n,r,i){if(!rt(t))return t;let s=i,c=0,u=0;const a=lt(t),d=n.top+r.top,h=d+n.height,f=[],p=(e,t)=>{f.push(t),s+=t.height+i,c+=e},m=e=>{p(1,e)},g=(t,o,n)=>{for(let r=o;r<=n;r++){const o=t.selector({data:e,index:r}),n=t.id({data:e,selector:o});p(1,{...t,type:"DATA",id:n,key:l(n),selector:o,header:t.header({data:e,selector:o}),height:t.rowHeight})}},y=(e,t)=>{if(t>0){const o="__separator_"+u++;p(t,{...e,type:"SEPARATOR",id:o,key:l(o),header:"",height:t*e.rowHeight+(t-1)*i})}};for(const e of t){if("DYNAMIC-BLOCK"!==e.type){m(e);continue}const{count:t,rowHeight:n}=e,r=n+i,l=o.top-c,u=a-o.bottom-c,f=Math.floor((d-s)/r),p=Math.floor((h-s)/r),w=it([[0,l-1],[Math.max(0,l,f),Math.min(t-1,u-1,p)],[u,t-1]]);let C=0;for(const[t,o]of w)y(e,t-C),g(e,t,o),C=o+1;y(e,t-C)}return f}function ut(e,t,o,n,r,i){const l=e.reduce(((e,t)=>e+function(e){return"DYNAMIC-BLOCK"===e.type?e.count:1}(t)),0),s=t.reduce(((e,t)=>e+function(e){return"DYNAMIC-BLOCK"===e.type?e.count:1}(t)),0),c=Math.min(r,l),u=Math.min(o,s);return{left:c,top:u,right:Math.min(i,l-c),bottom:Math.min(n,s-u)}}function at(e){return{width:e.clientWidth,height:e.clientHeight}}function dt(e){return{left:e.scrollLeft,top:e.scrollTop}}function ht(e,t,o,n,r){if(!e)return null;const i=e.x,l=e.y;return{x:i<=n.left?i:i>=t.width?i+o.left:i>=t.width-n.right?r.width-t.width+i:i+o.left,y:l<=n.top?l:l>=t.height?l+o.top:l>=t.height-n.bottom?r.height-t.height+l:l+o.top}}function ft(e,t,o,n,r,i,l,s,c,u){if(!e)return null;if((!("disableOnHover"in e)||e.disableOnHover)&&n&&n.y>=r.top&&n.y<=i.height-r.bottom)return null;let a=Math.floor(e.index)+o.top,d=-r.top,h=0;for(const e of t)if("DYNAMIC-BLOCK"===e.type){const t=Math.min(a,e.count);if(d+=(e.rowHeight+c)*t,a-=t,t<e.count){h=e.rowHeight;break}}else{if(0===a){h=e.height;break}d+=e.height+c,a-=1}const f=e.position||"BEGIN";"MIDDLE"===f&&(d-=(l.height-r.top-r.bottom-h)/2),"END"===f&&(d-=l.height-r.top-r.bottom-h),d+=h*(e.index%1);const p=Math.abs(d-s.top),m=function(e,t){if(!e)return null;if("number"==typeof e)return e;for(const o of e)if(t<=o.maxDistance)return o.pixelsPerSecond;return null}(e.speed,p);return{offset:Math.round(d),speed:m,snapVersion:u}}function pt(e,t,o,n,r,i,l,s,c,u){return null}const mt=new Set(["sections","devicePixelRatio","scrollRect","renderFormatResolver","borderWidth","inputPlacement","isTextValid","resizableColumn","resizableRow","tooltip","tooltipPlacement","activeVerticalScroll","activeHorizontalScroll"]);function gt(e,t){return!e&&!t||!(!e||!t)&&e.x===t.x&&e.y===t.y}function yt(e,t){return!e&&!t||!(!e||!t)&&e.width===t.width&&e.height===t.height}function wt(e,t){return!e&&!t||!(!e||!t)&&e.left===t.left&&e.top===t.top}function Ct(e,t){return!e&&!t||!(!e||!t)&&e.left===t.left&&e.top===t.top&&e.width===t.width&&e.height===t.height}function bt(e,t){return!e&&!t||!(!e||!t)&&l(e.rowId)===l(t.rowId)&&l(e.columnId)===l(t.columnId)}function xt(e,t){return!e&&!t||!(!e||!t)&&e.offset===t.offset&&e.speed===t.speed}function At(e){if(!e.error)try{!function(e){const t={...e.localOptions,...e.externalOptions},o=e.memory,n=e.state,r=e.element,i=[];function l(t,n,r,l=((e,t)=>e===t)){const s=o[t]&&o[t].dependencies;if(!s||r.some(((e,t)=>e!==s[t]))){const s=o[t]&&o[t].value,c=o[t]&&o[t].version||0,u=n(...r);l(s,u)?o[t]={value:s,dependencies:r,version:c}:(o[t]={value:u,dependencies:r,version:c+1},i.push(t),mt.has(t)&&(e.hasVisualChanges=!0))}return o[t].value}function s(e,t,n){(o[e]&&o[e].value)!==t&&(o[e]={value:t},n(t))}const u=l("devicePixelRatio",(e=>e),[window.devicePixelRatio]),a=l("borderWidth",(e=>e),[t.borderWidth/u]),d=t.data,f=e.input.value,p=l("sortBy",_e,[t.sortBy]),m=l("filters",Ge,[t.filters]),y=l("textResolver",ie,[]),x=l("dataFormatting",h,[t.formatting,t.dataSelector,p]),v=l("editedCellsAndFilters",b,[t.editedCells,m]),E=l("edition",A,[v]),M=l("invokedColumns",R,[t.columns,d]),D=l("invokedRows",k,[t.rows,d]),T=l("mousePosition",(e=>e),[e.mousePosition],gt),N=l("unfoldedColumns",Ie,[M,d]),z=l("unfoldedRows",Re,[D,d]),K=l("unfilteredColumns",B,[N,t.columnWidths,a,u]),F=l("unfilteredRows",L,[z,t.rowHeights,a,u]),H=l("unfilteredColumnKeys",Oe,[K]),P=l("unfilteredRowKeys",Oe,[F]),Y=l("columnsOrder",et,[t.columnsOrder]),W=l("rowsOrder",et,[t.rowsOrder]),V=l("orderedColumns",ot,[K,Y]),$=l("orderedRows",nt,[F,W]),q=l("filterFormatting",De,[x]),G=l("filterFormattingRules",_,[q]),U=l("filteringRules",Me,[t.filtering]),Q=l("filteredColumns",J,[m,U,G,d,$,V,E]),Z=l("filteredRows",X,[m,U,G,d,$,V,E]),te=l("sortingFormatting",Se,[x]),oe=l("sortingFormattingRules",_,[te]),re=l("sortingRules",Fe,[t.sorting]),le=l("sortedColumns",We,[p,re,oe,d,Z,Q,E]),se=l("sortedRows",Ye,[p,re,oe,d,Z,Q,E]),ce=l("pinning",ut,[le,se,t.pinnedTop,t.pinnedBottom,t.pinnedLeft,t.pinnedRight]),ue=l("measureFormatting",Be,[x]),ae=l("measureFormattingRules",_,[ue]),de=l("measureFormatResolver",j,[ae,d,se,le,E]),he=e.columnWidthCache,fe=e.rowHeightCache,we=l("measuredColumns",Le,[le,se,y,de,he,H,u]),xe=l("measuredRows",Te,[le,se,y,de,fe,P,u]),Ae=l("fixedSize",ee,[we,xe,ce,a]),ve=l("totalSize",ne,[we,xe,a]),ke=l("clientSize",(e=>e),[at(r)],yt),Ee=l("boundingClientSize",(e=>e),[at(r)],yt),Ne=l("scrollOffset",(e=>e),[dt(r)],wt),ze=l("internalMousePosition",ht,[T,ke,Ne,Ae,ve],gt),Ke=l("scrollRect",pe,[n?.scrollRect,Ne,ve,Ae,Ee],Ct),He=l("activeHorizontalScroll",pt,[t.horizontalScrollTarget,we,ce,ze,Ae,ve,ke,Ne,a,o.clientSize.version],xt),Pe=l("activeVerticalScroll",ft,[t.verticalScrollTarget,xe,ce,ze,Ae,ve,ke,Ne,a,o.clientSize.version],xt),Ve=l("staticColumns",st,[d,we,ce,Ke,Ae,a]),je=l("staticRows",ct,[d,xe,ce,Ke,Ae,a]),tt=l("columns",O,[Ve,ce,a]),rt=l("rows",S,[je,ce,a]),it=l("columnLookup",ge,[tt]),lt=l("rowLookup",ge,[rt]),At=t.focusedCell,vt=l("sections",C,[tt,rt]),It=t.selectedCells,Rt=l("hoveredCell",me,[ze,rt,tt,Ae,ve],bt),kt=e.isReordering,Et=e.resizingColumn||l("resizableColumn",$e,[tt,it,lt,Rt,ze,kt]),Mt=e.resizingRow||l("resizableRow",qe,[rt,it,lt,Rt,ze,kt]),Dt=l("highlightedCells",ye,[e.isMouseDown,!Et&&!Mt&&!e.didReorder,At,Rt,tt,rt,it,lt]),Bt=l("selection",I,[It]),Lt=l("highlight",I,[Dt]),Tt=l("renderFormatting",w,[x,Rt,At,Bt,Lt,E,p,Et,Mt,t.borderWidth,kt,e.reorderedColumn,e.reorderedRow]),Ot=l("renderFormattingRules",_,[Tt]),St=l("renderFormatResolver",j,[Ot,d,rt,tt,E]),Nt=l("inputFormatting",g,[x]),zt=l("inputFormattingRules",_,[Nt]),Kt=l("inputFormatResolver",j,[zt,d,rt,tt,E]),Ft=l("editableCells",c,[It,Kt,it,lt]),Ht=l("inputPlacement",Ce,[Ft,At,it,lt,vt]),Pt=l("isTextValid",be,[f,Ft]),Yt=l("contextFormatting",Je,[x]),Wt=l("contextFormattingRules",_,[Yt]),Vt=l("contextFormatResolver",j,[Wt,d,rt,tt,E]),$t=l("tooltip",Qe,[Rt,Vt,it,lt]),qt=l("tooltipPlacement",Ze,[$t,T]),_t=l("activeColumns",Ue,[tt]),Gt=l("activeRows",Xe,[rt]);s("activeColumnsCallback",_t,t.onActiveColumnsChange),s("activeRowsCallback",Gt,t.onActiveRowsChange),s("hoveredCellCallback",Rt,t.onHoveredCellChange),t.onStateChange(i),e.state={options:t,devicePixelRatio:u,borderWidth:a,edition:E,columns:tt,rows:rt,sections:vt,hoveredCell:Rt,focusedCell:At,renderFormatResolver:St,inputFormatResolver:Kt,fixedSize:Ae,totalSize:ve,clientSize:ke,scrollOffset:Ne,textResolver:y,scrollRect:Ke,highlightedCells:Dt,inputPlacement:Ht,columnLookup:it,rowLookup:lt,text:f,isTextValid:Pt,resizableColumn:Et,resizableRow:Mt,tooltip:$t,tooltipPlacement:qt,activeHorizontalScroll:He,activeVerticalScroll:Pe}}(e)}catch(t){e.error=t}}function vt(e,t){const o=new v(t);return[...t,...e.filter((e=>!o.isIdSelected(e.rowId,e.columnId)))]}function It(e,t){const o=new v(t);return e.filter((e=>!o.isIdSelected(e.rowId,e.columnId)))}function Rt(e){const t=e.currentTarget;if(!(t instanceof HTMLElement))throw new Error("Element is not an HTMLElement");const o=t.getBoundingClientRect();return{x:e.clientX-o.left,y:e.clientY-o.top}}function kt(e,t){return e.map((e=>({...e,columnId:"columnId"in e?e.columnId:t,rowId:"rowId"in e?e.rowId:t})))}function Et(e,t,o){const n=l(t),r=l(o);if(n===r)return null;const i=e.findIndex((e=>e.key===n)),s=e.findIndex((e=>e.key===r));return-1===i||-1===s||i===s?null:[i,s]}function Mt(e){At(e),e.hasVisualChanges&&(e.hasVisualChanges=!1,function(e){if(!e.error)try{!function(e){a(e,"top","left"),a(e,"top","center"),a(e,"top","right"),a(e,"middle","left"),a(e,"middle","center"),a(e,"middle","right"),a(e,"bottom","left"),a(e,"bottom","center"),a(e,"bottom","right"),function(e){const t=e.element,o=e.input,n=e.state,r=n.inputPlacement;if(!r){if(o.parentElement){const e=document.activeElement===o;o.parentElement.removeChild(o),e&&t.focus({preventScroll:!0})}return}const i=e.canvases[r.section];if(o.style.left="left"in r?`${r.left}px`:"0",o.style.top="top"in r?`${r.top}px`:"0",o.style.right="right"in r?`${r.right}px`:"0",o.style.bottom="bottom"in r?`${r.bottom}px`:"0",o.style.marginLeft="marginLeft"in r?`${r.marginLeft}px`:"0",o.style.marginTop="marginTop"in r?`${r.marginTop}px`:"0",o.style.width=`${r.width}px`,o.style.height=`${r.height}px`,o.style.gridArea=i.style.gridArea,o.style.zIndex=i.style.zIndex,o.style.backgroundColor=n.isTextValid?"white":"#eb3434",!o.parentElement){const e=document.activeElement===t;t.appendChild(o),e&&o.focus({preventScroll:!0})}}(e),function(e){const t=e.element,o=e.state;e.isReordering?t.style.cursor="move":o.resizableColumn&&o.resizableRow?t.style.cursor="nwse-resize":o.resizableColumn?t.style.cursor="col-resize":o.resizableRow?t.style.cursor="row-resize":t.style.cursor="default"}(e),function(e){const t=e.element,o=e.tooltip,n=e.state.tooltip,r=e.state.tooltipPlacement;r?(o.innerHTML!==n&&(o.innerHTML=n),o.style.left=`calc(anchor(left) + ${r.left}px)`,o.style.top=`calc(anchor(top) + ${r.top}px)`,o.parentElement||(t.appendChild(o),o.showPopover({source:t}))):o.parentElement&&o.parentElement.removeChild(o)}(e),function(e){const t=e.element;if(!e.state.activeVerticalScroll)return void(e.scrollAnimationId&&(cancelAnimationFrame(e.scrollAnimationId),e.scrollAnimationId=null));if(e.scrollAnimationId)return;let o=performance.now(),n=t.scrollTop,r=null;const i=l=>{if(!t.isConnected)return;const s=e.state.activeVerticalScroll;if(!s)return void(e.scrollAnimationId=null);const c=s.speed,u=(l-o)/1e3;if(o=l,s.snapVersion!==e.scrollSnapVersion)e.scrollSnapVersion=s.snapVersion,r=null,t.scrollTop!==s.offset&&t.scrollTo({top:s.offset,behavior:"auto"});else if(c){const o=Math.round(t.scrollTop),n=s.offset-o,i=n>0?Math.min(n,c*u+e.fractionalScrollProgress):Math.max(n,-c*u+e.fractionalScrollProgress),l=i>0?Math.floor(i):Math.ceil(i);e.fractionalScrollProgress=i-l,r=null,l&&t.scrollBy({top:l,behavior:"auto"})}else(r!==s.offset||t.scrollTop===n&&t.scrollTop!==s.offset)&&t.scrollTo({top:s.offset,behavior:"smooth"}),r=s.offset,n=t.scrollTop;e.scrollAnimationId=requestAnimationFrame(i)};e.scrollAnimationId=requestAnimationFrame(i)}(e)}(e)}catch(t){e.error=t}e.error&&function(e){if(e.errorRendered)return;e.errorRendered=!0;const t=e.element,o=e.error;t.style.backgroundColor="#9f0000",t.style.color="white",t.style.padding="20px",t.style.display="flex",t.style.flexDirection="column",t.style.userSelect="text",t.innerHTML=`\n <div style="font-size: 16px;">\n An error occurred while rendering the grid, please contact the support.\n </div>\n <div style="font-size: 20px; font-weight: bold; padding: 20px 0;">\n ${o.message}\n </div>\n <div style="font-size: 16px; white-space: pre-wrap;">${o.stack}</div>\n `}(e)}(e))}function Dt(e){if("spread-grid-context"in e)return;const t={"top-left":document.createElement("canvas"),"top-center":document.createElement("canvas"),"top-right":document.createElement("canvas"),"middle-left":document.createElement("canvas"),"middle-center":document.createElement("canvas"),"middle-right":document.createElement("canvas"),"bottom-left":document.createElement("canvas"),"bottom-center":document.createElement("canvas"),"bottom-right":document.createElement("canvas")},o=document.createElement("input"),n=document.createElement("div");e.setAttribute("tabindex","0"),e.setAttribute("style","max-width: 100vw; max-height: 100vh; overflow: auto; display: grid; position: relative; grid-template-columns: fit-content(0) fit-content(0) fit-content(0); grid-template-rows: fit-content(0) fit-content(0) fit-content(0); outline: none; user-select: none; touch-action: manipulation;"),e.classList.add("spread-grid"),t["top-left"].setAttribute("style","position: sticky; left: 0; top: 0; z-index: 2; grid-row: 1; grid-column: 1;"),t["top-center"].setAttribute("style","position: sticky; top: 0; z-index: 1; grid-row: 1; grid-column: 2;"),t["top-right"].setAttribute("style","position: sticky; right: 0; top: 0; z-index: 2; grid-row: 1; grid-column: 3;"),t["middle-left"].setAttribute("style","position: sticky; left: 0; z-index: 1; grid-row: 2; grid-column: 1;"),t["middle-center"].setAttribute("style","grid-row: 2; grid-column: 2; z-index: 0;"),t["middle-right"].setAttribute("style","position: sticky; right: 0; z-index: 1; grid-row: 2; grid-column: 3;"),t["bottom-left"].setAttribute("style","position: sticky; left: 0; bottom: 0; z-index: 2; grid-row: 3; grid-column: 1;"),t["bottom-center"].setAttribute("style","position: sticky; bottom: 0; z-index: 1; grid-row: 3; grid-column: 2;"),t["bottom-right"].setAttribute("style","position: sticky; right: 0; bottom: 0; z-index: 2; grid-row: 3; grid-column: 3;"),o.setAttribute("style","position: sticky; z-index: 3; outline: none; border: none; box-shadow: none; padding: 0 5px; font-size: 12px; font-family: Calibri; background-color: white; box-sizing: border-box; opacity: 0; pointer-events: none;"),n.setAttribute("style","pointer-events: none; background-color: white; color: black; border: 1px solid black; padding: 3px 7px; inset: unset; position: absolute; font-size: 12px; font-family: Calibri; "),n.setAttribute("popover","manual"),n.classList.add("spread-grid-tooltip");const r={element:e,canvases:t,input:o,tooltip:n,localOptions:null,externalOptions:{},state:null,memory:{},renderRequested:!1,mousePosition:null,isMouseDown:!1,columnWidthCache:new Map,rowHeightCache:new Map,isReordering:!1,errorRendered:!1,error:null,resizingColumn:null,resizingRow:null,reorderedColumn:null,reorderedRow:null,didReorder:!1,mouseDownPosition:null,mouseDownCell:null,requestNewRender:null,hasVisualChanges:!0,fractionalScrollProgress:0};function i(e,t,o){e.addEventListener(t,(e=>{try{o(e)}catch(e){e.message=`[${t} event]: ${e.message}`,r.error=e,r.requestNewRender()}}))}r.requestNewRender=()=>{r.renderRequested||(r.renderRequested=!0,requestAnimationFrame((()=>{r.renderRequested=!1,Mt(r)})))},r.localOptions={data:[],columns:[{type:"DATA-BLOCK"}],rows:[{type:"HEADER"},{type:"DATA-BLOCK"}],formatting:[],filtering:[],sorting:[],dataSelector:({data:e,row:t,column:o})=>e?.[t.selector]?.[o.selector],pinnedTop:0,pinnedBottom:0,pinnedLeft:0,pinnedRight:0,borderWidth:1,focusedCell:null,onFocusedCellChange:e=>{r.localOptions.focusedCell=e,r.requestNewRender()},selectedCells:[],onSelectedCellsChange:e=>{r.localOptions.selectedCells=e,r.requestNewRender()},highlightedCells:[],editedCells:[],onEditedCellsChange:e=>{r.localOptions.editedCells=e,r.requestNewRender()},filters:[],onFiltersChange:e=>{r.localOptions.filters=e,r.requestNewRender()},sortBy:[],onSortByChange:e=>{r.localOptions.sortBy=e,r.requestNewRender()},onCellClick:()=>{},onCustomCellClick:()=>{},columnWidths:[],onColumnWidthsChange:e=>{r.localOptions.columnWidths=e,r.requestNewRender()},rowHeights:[],onRowHeightsChange:e=>{r.localOptions.rowHeights=e,r.requestNewRender()},columnsOrder:[],onColumnsOrderChange:e=>{r.localOptions.columnsOrder=e,r.requestNewRender()},rowsOrder:[],onRowsOrderChange:e=>{r.localOptions.rowsOrder=e,r.requestNewRender()},onActiveColumnsChange:()=>{},onActiveRowsChange:()=>{},onHoveredCellChange:()=>{},onStateChange:()=>{},verticalScrollTarget:null,horizontalScrollTarget:null},e["spread-grid-context"]=r;const u=e=>{o.value=e,o.dispatchEvent(new Event("input"))},a=e=>{const t=r.state.options.selectedCells,o=r.state.inputFormatResolver,n=r.state.columnLookup,i=r.state.rowLookup,l=r.state.text,s=r.state.isTextValid,a=r.state.options.onEditedCellsChange,d=r.state.options.onFiltersChange,h=c(t,o,n,i);if(""===l)return;if(!s)return;if(e&&!h.every((e=>e.edit.autoCommit)))return;const f=h.filter((e=>"DATA"===e.type)),p=h.filter((e=>"FILTER"===e.type));var m;m=f.map((e=>({...e.cell,value:e.edit.parse({string:l})}))),a(vt(r.state.options.editedCells,m)),(e=>{d(vt(kt(r.state.options.filters,"FILTER"),e))})(p.map((e=>({...e.cell,expression:e.edit.parse({string:l})})))),e||u("")},d=e=>{const t=r.state.options.selectedCells,o=r.state.options.onEditedCellsChange,n=r.state.options.onFiltersChange,i=c(t,r.state.inputFormatResolver,r.state.columnLookup,r.state.rowLookup);var l;e&&!i.every((e=>e.edit.autoCommit))||(l=t,o(It(r.state.options.editedCells,l)),(e=>{n(It(kt(r.state.options.filters,"FILTER"),e))})(t))};i(e,"scroll",(e=>{r.requestNewRender()})),i(e,"pointerenter",(e=>{r.mousePosition=Rt(e),r.requestNewRender()})),i(e,"pointermove",(e=>{if(r.mousePosition=Rt(e),r.resizingColumn){const e=r.state.columnLookup.get(l(r.resizingColumn)),t=e.width,o=e.right,n=ht(r.mousePosition,r.state.clientSize,r.state.scrollOffset,r.state.fixedSize,r.state.totalSize),i=Math.max(10,n.x-o+t),s=r.state.options.columnWidths.filter((t=>l(t.columnId)!==e.key)).concat([{columnId:e.id,width:i}]);r.state.options.onColumnWidthsChange(s)}if(r.resizingRow){const e=r.state.rowLookup.get(l(r.resizingRow)),t=e.height,o=e.bottom,n=ht(r.mousePosition,r.state.clientSize,r.state.scrollOffset,r.state.fixedSize,r.state.totalSize),i=Math.max(10,n.y-o+t),s=r.state.options.rowHeights.filter((t=>l(t.rowId)!==e.key)).concat([{rowId:e.id,height:i}]);r.state.options.onRowHeightsChange(s)}if(r.reorderedColumn){const e=r.state.columns,t=r.state.hoveredCell,o=ht(r.mousePosition,r.state.clientSize,r.state.scrollOffset,r.state.fixedSize,r.state.totalSize),n=function(e,t,o,n){if(!o)return null;const r=Et(e,t,o.columnId);if(!r)return null;const[i,l]=r,s=l<=i?n.x<e[l].leftWithBorder+e[i].width?l:l+1:n.x>e[l].rightWithBorder-e[i].width?l:l-1;if(s===i)return null;const c=e.map((e=>e.id));return c.splice(i,1),c.splice(s,0,t),c}(e,r.reorderedColumn,t,o);n&&(r.didReorder=!0,r.isReordering=!0,r.state.options.onColumnsOrderChange(n))}if(r.reorderedRow){const e=r.state.rows,t=r.state.hoveredCell,o=ht(r.mousePosition,r.state.clientSize,r.state.scrollOffset,r.state.fixedSize,r.state.totalSize),n=function(e,t,o,n){if(!o)return null;const r=Et(e,t,o.rowId);if(!r)return null;const[i,l]=r,s=l<=i?n.y<e[l].topWithBorder+e[i].height?l:l+1:n.y>e[l].bottomWithBorder-e[i].height?l:l-1;if(s===i)return null;const c=e.map((e=>e.id));return c.splice(i,1),c.splice(s,0,t),c}(e,r.reorderedRow,t,o);n&&(r.didReorder=!0,r.isReordering=!0,r.state.options.onRowsOrderChange(n))}r.requestNewRender()})),i(e,"touchmove",(e=>{(r.resizingColumn||r.resizingRow||r.reorderedColumn||r.reorderedRow)&&(e.preventDefault(),e.stopPropagation())})),i(e,"pointerleave",(()=>{r.mousePosition=null,r.requestNewRender()})),i(e,"pointerdown",(e=>{r.mousePosition=Rt(e),At(r),u("");const t=r.state.hoveredCell;if(r.isMouseDown=!0,r.didReorder=!1,r.mouseDownPosition=r.mousePosition,r.mouseDownCell=t,r.state.resizableColumn&&(r.resizingColumn=r.state.resizableColumn),r.state.resizableRow&&(r.resizingRow=r.state.resizableRow),!r.resizingColumn&&t){const e=r.state.rowLookup.get(l(t.rowId));r.reorderedColumn="HEADER"===e.type?t.columnId:null}if(!r.resizingRow&&t){const e=r.state.columnLookup.get(l(t.columnId));r.reorderedRow="HEADER"===e.type?t.rowId:null}r.resizingColumn||r.resizingRow||r.state.options.onFocusedCellChange(t),e.ctrlKey||r.state.options.onSelectedCellsChange([]),r.requestNewRender()})),i(e,"pointerup",(e=>{r.mousePosition=Rt(e),At(r),r.isMouseDown=!1,r.isReordering=!1,r.resizingColumn=null,r.resizingRow=null,r.reorderedColumn=null,r.reorderedRow=null,r.state.options.onSelectedCellsChange(vt(r.state.options.selectedCells,r.state.highlightedCells)),r.requestNewRender()})),i(e,"pointerdown",(e=>{r.element.setPointerCapture(e.pointerId)})),i(e,"pointerup",(e=>{r.element.releasePointerCapture(e.pointerId)})),i(e,"click",(e=>{r.mousePosition=Rt(e),At(r);const t=r.state.hoveredCell,o=r.mouseDownCell;if(r.state.resizableColumn||r.state.resizableRow)return;if(r.didReorder)return;if(null===t)return;if(null===o)return;if(l(t.columnId)!==l(o.columnId))return;if(l(t.rowId)!==l(o.rowId))return;const n=r.state.columnLookup.get(l(t.columnId)),i=r.state.rowLookup.get(l(t.rowId)),c=r.state.options.sortBy,u=r.state.inputFormatResolver.resolve(i,n),a={ctrlKey:e.ctrlKey,shiftKey:e.shiftKey,button:e.button,buttons:e.buttons,detail:e.detail};if(u.edit?.toggle){const e=function(e,t,o,n){const r=n.hasValueByKey(o.key,t.key)?n.getValueByKey(o.key,t.key):e.value,i=e.edit.toggle;return"function"==typeof i?i({value:r}):i[(i.indexOf(r)+1)%i.length]}(u,n,i,r.state.edition),o=s(n,i);"DATA"===o&&r.state.options.onEditedCellsChange(vt(r.state.options.editedCells,[{...t,value:e}])),"FILTER"===o&&r.state.options.onFiltersChange(vt(kt(r.state.options.filters,"FILTER"),[{...t,expression:e}]))}else if("DATA"===n.type&&"DATA"===i.type)r.state.options.onCellClick({...r.state.hoveredCell,...a});else if("CUSTOM"===n.type||"CUSTOM"===i.type)r.state.options.onCustomCellClick({...r.state.hoveredCell,...a});else if("HEADER"===n.type||"HEADER"===i.type){const t=function(e,t,o,n){function r(e){const n="columnId"in e?e.columnId:"HEADER",r="rowId"in e?e.rowId:"HEADER";return t.key===l(n)&&o.key===l(r)}const i=["ASC","DESC",void 0],s=e.find(r),c=i.indexOf(s?.direction),u=i[(c+1)%i.length],a=e.indexOf(s)===e.length-1;return[...!n||!a&&s?e.filter((e=>!function(e){const n="columnId"in e?e.columnId:"HEADER",r="rowId"in e?e.rowId:"HEADER";return"HEADER"===t.type&&t.key===l(n)||"HEADER"===o.type&&o.key===l(r)}(e))):e.filter((e=>!r(e))),...u?[{columnId:t.id,rowId:o.id,direction:u}]:[]]}(c,n,i,e.ctrlKey);r.state.options.onSortByChange(t),r.state.options.onSelectedCellsChange([])}})),i(e,"dblclick",(e=>{if(r.mousePosition=Rt(e),At(r),r.state.resizableColumn){const e=l(r.state.resizableColumn),t=r.state.options.columnWidths.filter((t=>l(t.columnId)!==e));r.state.options.onColumnWidthsChange(t),r.columnWidthCache.delete(e)}if(r.state.resizableRow){const e=l(r.state.resizableRow),t=r.state.options.rowHeights.filter((t=>l(t.rowId)!==e));r.state.options.onRowHeightsChange(t),r.rowHeightCache.delete(e)}const t=r.state.focusedCell;if(null===t)return;const n=l(t.columnId),i=l(t.rowId),s=r.state.columnLookup,c=r.state.rowLookup,a=r.state.inputFormatResolver;if(!s.has(n))return;if(!c.has(i))return;const d=s.get(n),h=c.get(i),f=a.resolve(h,d),p=f.text;f.edit&&(f.edit.toggle||(u(p),o?.select()))})),i(e,"focus",(()=>{o.parentElement&&o.focus({preventScroll:!0})})),i(e,"keydown",(e=>{At(r);const t=r.state.focusedCell,o=r.state.columnLookup,n=r.state.rowLookup,i=r.state.options.selectedCells,s=r.state.options.onSelectedCellsChange,c=r.state.options.onFocusedCellChange,h=r.state.options.editedCells,f=r.state.options.onEditedCellsChange,p=r.state.columns,m=r.state.rows,g=r.state.text,y=r.state.inputFormatResolver,w=(e,t)=>{c(e),t.shiftKey?s(vt(i,[e])):s([e])},C=(e,n)=>{if(!t)return;const r=l(t.columnId);if(!o.has(r))return;const i=o.get(r).index,s=Math.max(0,Math.min(p.length-1,i+e));if(s===i)return;const c={rowId:t.rowId,columnId:p[s].id};w(c,n)},b=(e,o)=>{if(!t)return;const r=l(t.rowId);if(!n.has(r))return;const i=n.get(r).index,s=Math.max(0,Math.min(m.length-1,i+e));if(s===i)return;const c={rowId:m[s].id,columnId:t.columnId};w(c,o)},x=()=>{e.preventDefault(),e.stopPropagation()};switch(e.key){case"Escape":""!==g?u(""):i.length>1?s([t]):h.length>0?f([]):(c(null),s([]));break;case"Enter":a(!1);break;case"ArrowUp":x(),b(e.ctrlKey?-m.length:-1,e);break;case"ArrowDown":x(),b(e.ctrlKey?m.length:1,e);break;case"ArrowLeft":x(),C(e.ctrlKey?-p.length:-1,e);break;case"ArrowRight":x(),C(e.ctrlKey?p.length:1,e);break;case"Delete":case"Backspace":d(!1);break;case"c":(e=>{if(!e.ctrlKey)return;const t=function(e,t,o,n){const r=new Map(t.map((e=>[e.key,e]))),i=new Map(o.map((e=>[e.key,e]))),s=e.map((e=>({columnKey:l(e.columnId),rowKey:l(e.rowId)}))).filter((e=>r.has(e.columnKey)&&i.has(e.rowKey))),c=new Set(s.map((e=>e.columnKey))),u=new Set(s.map((e=>e.rowKey)));if(0===s.length)return"";const a=new v(e),d=Math.min(...s.map((e=>r.get(e.columnKey).index))),h=Math.max(...s.map((e=>r.get(e.columnKey).index))),f=Math.min(...s.map((e=>i.get(e.rowKey).index))),p=Math.max(...s.map((e=>i.get(e.rowKey).index))),m=[];for(let e=f;e<=p;e++){const r=o[e],i=r.key;if(u.has(i)){for(let e=d;e<=h;e++){const o=t[e],l=o.key;if(c.has(l)){if(a.isKeySelected(i,l)){const e=n.resolve(r,o).text;m.push(e)}e<h&&m.push("\t")}}e<p&&m.push("\n")}}return m.join("")}(i,p,m,y);if(navigator.clipboard)navigator.clipboard.writeText(t);else{const e=document.createElement("textarea");e.value=t,document.body.appendChild(e),e.select(),document.execCommand("copy"),document.body.removeChild(e)}})(e)}})),new ResizeObserver((()=>{r.requestNewRender()})).observe(e),i(o,"input",(e=>{At(r),o.value?(a(!0),o.style.opacity="1",o.style.pointerEvents="auto"):(e.isTrusted&&d(!0),o.style.opacity="0",o.style.pointerEvents="none")})),i(o,"click",(e=>{e.stopPropagation()})),i(o,"dblclick",(e=>{e.stopPropagation()})),i(o,"pointerdown",(e=>{e.stopPropagation()})),i(o,"keydown",(e=>{switch(e.key){case"Enter":case"Escape":break;case"Delete":case"Backspace":case"ArrowUp":case"ArrowDown":case"ArrowLeft":case"ArrowRight":""!==o.value&&(e.stopPropagation(),r.requestNewRender());break;default:e.stopPropagation(),r.requestNewRender()}})),i(e,"wheel",(t=>{(r.state.activeVerticalScroll||r.state.activeHorizontalScroll)&&(e.scrollBy({top:t.deltaY,left:t.deltaX,behavior:"auto"}),t.preventDefault(),t.stopPropagation())}))}function Bt(e){const[t,o]=(0,n.useState)(null);return t&&function(e,t){Dt(e);const o=e["spread-grid-context"];o.externalOptions=t,null===o.state?Mt(o):o.requestNewRender()}(t,e),n.default.createElement("div",{ref:o})}var Lt=o.A;export{Lt as default};
|
package/package.json
CHANGED
package/src/index.js
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
|
+
/** @import {ExternalOptions} from "js-spread-grid" */
|
|
2
|
+
|
|
1
3
|
import React, { useState } from "react";
|
|
2
4
|
import createGrid from "js-spread-grid";
|
|
3
5
|
|
|
6
|
+
/**
|
|
7
|
+
* @param {ExternalOptions} props
|
|
8
|
+
*/
|
|
4
9
|
export default function SpreadGrid(props) {
|
|
5
10
|
const [element, setElement] = useState(null);
|
|
6
11
|
|