react-spread-grid 0.0.51 → 0.0.53

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.
Files changed (2) hide show
  1. package/dist/index.js +1 -1
  2. package/package.json +1 -1
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:()=>Ge});const n=(i={default:()=>e.default,useState:()=>e.useState},r={},t.d(r,i),r);var i,r;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){return"FILTER"===e.type^"FILTER"===t.type?"FILTER":"DATA"}function d(e,t,o,n){return e.map((e=>{const i=s(e.columnId),r=s(e.rowId);if(!o.has(i))return null;if(!n.has(r))return null;const d=o.get(i),a=n.get(r);return{edit:t.resolve(a,d).edit,cell:e,type:l(d,a)}})).filter((e=>e?.edit))}function a(e,t){return Math.round(e*t)/t}function u(e,t,o){const n=e.state,i=e.canvases[`${t}-${o}`],r=n.sections[t],s=n.sections[o],l=s.columns,d=r.rows;if(0===d.length||0===l.length)return void(i.parentElement&&i.parentElement.removeChild(i));i.parentElement||e.element.appendChild(i),console.log("draw");const u=i.getContext("2d",{alpha:!1}),c=n.scrollRect,h=n.textResolver,f=n.renderFormatResolver,p=n.borderWidth,m=r.showTopBorder,g=r.showBottomBorder,y=s.showLeftBorder,w=s.showRightBorder,x=p/2,b=d.length-1+(m?1:0)+(g?1:0),v=l.length-1+(y?1:0)+(w?1:0),A=d.map((e=>e.height)),R=l.map((e=>e.width)),k=R.reduce(((e,t)=>e+t),0)+v*p,E=A.reduce(((e,t)=>e+t),0)+b*p,C="center"===o?c.left:0,I="middle"===t?c.top:0,T="center"===o?c.width:s.width,L="middle"===t?c.height:r.height,B=R.reduce(((e,t,o)=>{const n=e[o]+t+p;return e.push(n),e}),[y?p:0]),D=A.reduce(((e,t,o)=>{const n=e[o]+t+p;return e.push(n),e}),[m?p:0]),M=B.slice(0,-1),F=D.slice(0,-1),S=Math.max(M.findLastIndex((e=>e<=C)),0),z=M.findLastIndex((e=>e<=C+T)),N=Math.max(F.findLastIndex((e=>e<=I)),0),O=F.findLastIndex((e=>e<=I+L)),K=Math.max(S,y?0:1),P=z+(w?1:0),H=Math.max(N,m?0:1),W=O+(g?1:0),$=Array.from({length:O-N+1},((e,t)=>{const o=d[t+N];return Array.from({length:z-S+1},((e,t)=>{const n=l[t+S];return f.resolve(o,n)}))})),q=(e,t)=>$[e-N][t-S];i.width=Math.round(T*devicePixelRatio),i.height=Math.round(L*devicePixelRatio),i.style.width=`${T}px`,i.style.height=`${L}px`,i.style.marginLeft=`${C}px`,i.style.marginTop=`${I}px`,i.style.marginRight=k-T-C+"px",i.style.marginBottom=E-L-I+"px",u.fillStyle="#E9E9E9",u.fillRect(0,0,i.width,i.height);const V=(e,t)=>{u.setTransform(devicePixelRatio,0,0,devicePixelRatio,(e-C)*devicePixelRatio,(t-I)*devicePixelRatio)},Y=(e,t,o,n)=>{u.beginPath(),u.rect(e,t,o,n),u.clip()};for(let e=S;e<=z;e++){u.save(),V(B[e],0),Y(0,0,R[e],E);for(let t=N;t<=O;t++){const o=q(t,e),n=o.style,i=D[t],r=B[e],s=R[e],l=A[t],d=o.text,c=n.textBaseline||"middle",f=o.padding;if(V(r,i),u.fillStyle=n.background||"white",u.fillRect(0,0,s,l),"draw"in o&&o.draw(u),n.highlight&&(u.fillStyle=n.highlight,u.fillRect(0,0,s,l)),n.corner&&(u.fillStyle=n.corner,u.beginPath(),u.moveTo(s-7,l),u.lineTo(s,l),u.lineTo(s,l-7),u.fill()),d){u.fillStyle=n.foreground||"black",u.font=o.font;const e=h.getFontMetrics(o.font),t="center"==n.textAlign&&h.measureWidth(d,o.font)>s-f.left-f.right?"left":n.textAlign||"left";u.textAlign=t;const i=a("left"===t?f.left:"center"===t?s/2:"right"===t?s-f.right:0,devicePixelRatio),r=a("top"===c?e.middle+e.topOffset+f.top:"middle"===c?l/2+e.middle:"bottom"===c?l+e.middle-e.bottomOffset-f.bottom:0,devicePixelRatio);r-e.middle-e.topOffset>=0&&r-e.middle+e.bottomOffset<=l?u.fillText(d,i,r):(u.strokeStyle="#E9E9E9",u.lineWidth=p,u.beginPath(),u.moveTo(0,p+x),u.lineTo(s,p+x),u.moveTo(0,l-p-x),u.lineTo(s,l-p-x),u.stroke(),u.save(),Y(0,2*p,s,l-4*p),u.fillText(d,i,r),u.restore())}}u.restore()}V(0,0);const G=(e,t,o,n,i)=>{if(!i)return;if(0===i.width)return;const r=i.width/devicePixelRatio,s=t===n,l=e-(s?r/2:0),d=t-(s?0:r/2),a=o+(s?r/2:0),c=n+(s?0:r/2);u.strokeStyle=i.color||"black",u.lineWidth=r,i.dash?(u.setLineDash(i.dash.map((e=>e/devicePixelRatio))),u.lineDashOffset=s?l:d):u.setLineDash([]),u.beginPath(),u.moveTo(l,d),u.lineTo(a,c),u.stroke()},j=(e,t)=>e?t?e.index>t.index?e:t:e:t;for(let e=H;e<=W;e++){const t=e-1,o=e;for(let e=S;e<=z;e++){const n=j(t>=N?q(t,e).style.borderBottom:null,o<=O?q(o,e).style.borderTop:null);G(B[e]-x,D[o]-x,B[e+1]-x,D[o]-x,n)}}for(let e=K;e<=P;e++){const t=e-1,o=e;for(let e=N;e<=O;e++){const n=j(t>=S?q(e,t).style.borderRight:null,o<=z?q(e,o).style.borderLeft:null);G(B[o]-x,D[e]-x,B[o]-x,D[e+1]-x,n)}}}function c(e){if(!e.error)try{!function(e){u(e,"top","left"),u(e,"top","center"),u(e,"top","right"),u(e,"middle","left"),u(e,"middle","center"),u(e,"middle","right"),u(e,"bottom","left"),u(e,"bottom","center"),u(e,"bottom","right"),function(e){const t=e.element,o=e.input,n=e.state,i=n.inputPlacement;if(!i){if(o.parentElement){const e=document.activeElement===o;o.parentElement.removeChild(o),e&&t.focus({preventScroll:!0})}return}const r=e.canvases[i.section];if(o.style.left="left"in i?`${i.left}px`:"0",o.style.top="top"in i?`${i.top}px`:"0",o.style.right="right"in i?`${i.right}px`:"0",o.style.bottom="bottom"in i?`${i.bottom}px`:"0",o.style.marginLeft="marginLeft"in i?`${i.marginLeft}px`:"0",o.style.marginTop="marginTop"in i?`${i.marginTop}px`:"0",o.style.width=`${i.width}px`,o.style.height=`${i.height}px`,o.style.gridArea=r.style.gridArea,o.style.zIndex=r.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;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)}(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},i)=>({column:{id:e},row:{id:t},text:({value:e,text:t})=>`${o.length>1?i+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,i,r,l,d,a){const u=o?s(o.columnId):null,c=o?s(o.rowId):null,h=null!==d,f=null!==l||h,p=a+2,m=a+4,g=(e,t,o,i)=>{if(o<0||o>=e.length)return!1;if(i<0||i>=t.length)return!1;const r=e[o].key,s=t[i].key;return n.isKeySelected(r,s)},y=(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,...y(t&&!h,{column:{type:"ANY"},row:{id:t?.rowId},style:{highlight:"#81948133"}}),...y(t&&!f,{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})=>g(e,t,o.index,n.index),style:({rows:e,columns:t,row:o,column:n,edit:i})=>({...g(e,t,o.index-1,n.index)?{}:{borderTop:{width:p,color:"#596959",index:Number.MAX_SAFE_INTEGER}},...g(e,t,o.index+1,n.index)?{}:{borderBottom:{width:p,color:"#596959",index:Number.MAX_SAFE_INTEGER}},...g(e,t,o.index,n.index-1)?{}:{borderLeft:{width:p,color:"#596959",index:Number.MAX_SAFE_INTEGER}},...g(e,t,o.index,n.index+1)?{}:{borderRight:{width:p,color:"#596959",index:Number.MAX_SAFE_INTEGER}},highlight:w(i?"#798d9c":"#819481",u!==n.key||c!==o.key)})},{column:{type:"ANY"},row:{type:"ANY"},condition:({row:e,column:t})=>i.isKeySelected(e.key,t.key),style:({row:e,column:t})=>({highlight:w("#93a8b8",u!==t.key||c!==e.key)})},...y(o,{column:{id:o?.columnId},row:{id:o?.rowId},style:{highlight:"#ffffffaa"}}),{column:{type:"ANY"},row:{type:"ANY"},condition:({edit:e})=>e,style:{corner:"#77777720"}},{column:{type:"ANY"},row:{type:"ANY"},condition:({row:e,column:t})=>r.hasValueByKey(e.key,t.key),style:{corner:"darkgreen"}},...y(l,{column:{id:l},row:{type:"HEADER"},style:{borderRight:{width:m,color:"cornflowerblue"}}}),...y(d,{column:{type:"HEADER"},row:{id:d},style:{borderBottom:{width:m,color:"cornflowerblue"}}})]}function b(e,t){const o=t.filter((e=>"BEGIN"===e.pinned)).length,n=t.filter((e=>"END"===e.pinned)).length,i=t.length-o-n,r=e.filter((e=>"BEGIN"===e.pinned)).length,s=e.filter((e=>"END"===e.pinned)).length,l=e.length-r-s,d=t.slice(0,o),a=t.slice(t.length-n,t.length),u=t.slice(o,t.length-n),c=e.slice(0,r),h=e.slice(e.length-s,e.length),f=e.slice(r,e.length-s),p=o>0,m=r>0,g=!0,y=!0,w=i>0||!p,x=!0,b=!p,v=!(n>0),A=!0,R=!0,k=l>0||!m,E=!0,C=!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},L=(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:d,showTopBorder:g,showBottomBorder:y,height:T(d,g,y)},bottom:{rows:a,showTopBorder:w,showBottomBorder:x,height:T(a,w,x)},middle:{rows:u,showTopBorder:b,showBottomBorder:v,height:T(u,b,v)},left:{columns:c,showLeftBorder:A,showRightBorder:R,width:L(c,A,R)},right:{columns:h,showLeftBorder:k,showRightBorder:E,width:L(h,k,E)},center:{columns:f,showLeftBorder:C,showRightBorder:I,width:L(f,C,I)}}}function v(e,t){return[...e,...t.map((e=>({columnId:e.columnId,rowId:e.rowId,value:e.expression})))]}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 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 R(e){return new A(e)}class k{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 E(e){return new k(e)}function C(e,t){return"function"==typeof e?e(t):e}function I(e,t,o,n){return e<o?"BEGIN":e>=t-n?"END":void 0}function T(e,t,o){return e.map(((n,i)=>{const r="id"in n?n.id:n.type;return{...n,id:r,type:n.type||"DATA",index:i,key:s(r),pinned:I(i,e.length,t,o),header:"header"in n?n.header:r,labels:n.labels||[]}}))}function L(e,t,o,n){const i=new Map(n.map((({columnId:e,width:t})=>[s(e),t])));return T(e,t,o).map((e=>({...e,width:i.has(e.key)?i.get(e.key):"width"in e?e.width:"fit"})))}function B(e,t,o,n){const i=new Map(n.map((({rowId:e,height:t})=>[s(e),t])));return T(e,t,o).map((e=>({...e,height:i.has(e.key)?i.get(e.key):"height"in e?e.height:"fit"})))}function D(e,t,o){let n=o;return e.map(((e,i)=>{const r=a("width"in e?e.width:100,t),s={...e,index:i,width:r,leftWithBorder:n-o,left:n,right:n+r,rightWithBorder:n+r+o};return n+=s.width+o,s}))}function M(e,t,o){let n=o;return e.map(((e,i)=>{const r=a("height"in e?e.height:20,t),s={...e,index:i,height:r,topWithBorder:n-o,top:n,bottom:n+r,bottomWithBorder:n+r+o};return n+=s.height+o,s}))}const F="12px Calibri",S={top:2,right:5,bottom:2,left:5},z={HEADER:["HEADER"],FILTER:["FILTER"],DATA:["DATA"],CUSTOM:["CUSTOM"],ANY:["HEADER","DATA","FILTER","CUSTOM"],SPECIAL:["HEADER","FILTER","CUSTOM"],undefined:[]};class N{byKey=new Map;byIndex=new Map;byLabel=new Map;byType=new Map}class O{lookup=new N;hasRules=!1;addRule(e,t,o){if(this.hasRules=!0,Array.isArray(e))for(const n of e)this.addRule(n,t,o);else if(Array.isArray(t))for(const n of t)this.addRule(e,n,o);else{e=e?"id"in e?{key:s(e.id)}:e:{type:"DATA"},t=t?"id"in t?{key:s(t.id)}:t:{type:"DATA"},"key"in e&&i(this.lookup.byKey,e.key),"index"in e&&i(this.lookup.byIndex,e.index),"label"in e&&i(this.lookup.byLabel,e.label);for(const t of z[e.type])i(this.lookup.byType,t)}function n(e,t){e.has(t)||e.set(t,[]),e.get(t).push(o)}function i(e,o){e.has(o)||e.set(o,new N),"key"in t&&n(e.get(o).byKey,t.key),"index"in t&&n(e.get(o).byIndex,t.index),"label"in t&&n(e.get(o).byLabel,t.label);for(const i of z[t.type])n(e.get(o).byType,i)}}getRules(e,t){const o=[];if(!this.hasRules)return o;function n(e){for(const t of e)o.push(t)}function i(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)&&i(this.lookup.byKey.get(e.key)),this.lookup.byIndex.has(e.index)&&i(this.lookup.byIndex.get(e.index)),this.lookup.byType.has(e.type)&&i(this.lookup.byType.get(e.type));for(const t of e.labels)this.lookup.byLabel.has(t)&&i(this.lookup.byLabel.get(t));return o}}const K=["borderTop","borderRight","borderBottom","borderLeft"],P={validate:()=>!0,parse:({string:e})=>e};function H(e,t){const o={...e};if("border"in o){for(const e of K)o[e]=o.border;delete o.border}for(const e of K)e in o&&(o[e]={...o[e],index:t});return o}class W{constructor(e){this.rulesLookup=new O;for(const[t,o]of e.entries()){const e={index:t};"condition"in o&&(e.condition=o.condition),"style"in o&&(e.style="function"==typeof o.style?o.style:()=>o.style),"value"in o&&(e.value="function"==typeof o.value?o.value:()=>o.value),"text"in o&&(e.text="function"==typeof o.text?o.text:()=>o.text),"font"in o&&(e.font="function"==typeof o.font?o.font:()=>o.font),"padding"in o&&(e.padding="function"==typeof o.padding?o.padding:()=>o.padding),"edit"in o&&(e.edit=o.edit),"draw"in o&&(e.draw=o.draw),this.rulesLookup.addRule(o.column,o.row,e)}}resolve(e,t,o,n,i,r){const s=this.rulesLookup.getRules(i,n).sort(((e,t)=>e.index-t.index)).filter(((e,t,o)=>e.index!==o[t-1]?.index));let l,d={data:e,rows:t,columns:o,row:n,column:i},a={},u=S,c=F;r.hasValueByKey(n.key,i.key)&&(d={...d,newValue:r.getValueByKey(n.key,i.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&&(a={...a,...H(e.style(d),e.index)}),"text"in e&&(d={...d,text:e.text(d)}),"font"in e&&(c=e.font(d)),"padding"in e&&(u={...u,...e.padding(d)}),"edit"in e&&(d={...d,edit:e.edit&&"edit"in d?{...d.edit,...e.edit}:{...P,...e.edit}}),"draw"in e)){const t=d;l=o=>e.draw({...t,ctx:o})}const h=function(e){return"text"in e?`${e.text}`:"newValue"in e?`${e.newValue}`:void 0!==e.value?`${e.value}`:""}(d),f={style:a,visible:!0,text:h,padding:u,font:c};return"value"in d&&(f.value=d.value),"edit"in d&&(f.edit=d.edit),void 0!==l&&(f.draw=l),f}}function $(e){return new W(e)}class q{constructor(e,t,o,n,i){this.formattingRules=e,this.data=t,this.rows=o,this.columns=n,this.edition=i}resolve(e,t){return this.formattingRules.resolve(this.data,this.rows,this.columns,e,t,this.edition)}}function V(e,t,o,n,i){return new q(e,t,o,n,i)}function Y(e,t,o){const n=new Map;for(const i of e){const e=s(i[t]),r=s(i[o]);n.has(e)||n.set(e,new Map),n.get(e).set(r,i.expression)}return n}function G(e,t,o,n,i,r,s){if(0===e.length)return i;const l=Y(e,"columnId","rowId"),d=r.filter((e=>"FILTER"!==e.type&&l.has(e.key)));return 0===d.length?i:i.filter((e=>{for(const a of d){const d=o.resolve(n,i,r,e,a,s),u=l.get(a.key);if(!t.resolve(n,i,r,e,a,d.value,d.text,u))return!1}return!0}))}function j(e,t,o,n,i,r,s){if(0===e.length)return r;const l=Y(e,"rowId","columnId"),d=i.filter((e=>"FILTER"!==e.type&&l.has(e.key)));return 0===d.length?r:r.filter((e=>{for(const a of d){const d=o.resolve(n,i,r,a,e,s),u=l.get(a.key);if(!t.resolve(n,i,r,a,e,d.value,d.text,u))return!1}return!0}))}function U(e,t,o,n){return{top:e,bottom:t,left:o,right:n}}function _(e,t){return{width:e.length?e.at(-1).rightWithBorder:0,height:t.length?t.at(-1).bottomWithBorder:0}}class X{constructor(){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.fontMetrics=new Map}measureWidth(e,t){if(!e)return 0;const o=this.context;return o.font=t||F,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||F;const n=o.measureText("X"),i=(n.actualBoundingBoxDescent-n.actualBoundingBoxAscent)/2,r={topOffset:i+n.fontBoundingBoxAscent,middle:-i,bottomOffset:n.fontBoundingBoxDescent-i,height:n.fontBoundingBoxAscent+n.fontBoundingBoxDescent};return this.fontMetrics.set(t,r),r}}function J(){return new X}function Q(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 Z(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 ee(e,t){return{top:e.top-t,left:e.left-t,width:e.width+2*t,height:e.height+2*t}}function te(e){return e.width*e.height}function oe(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 ne=200,ie=400,re={left:0,top:0,width:0,height:0};function se(e,t,o,n){const i=t.x,r=t.y,s=e.scrollLeft,l=e.scrollTop,d=e.clientWidth,a=e.clientHeight;return{x:i<=o.left?i:i>=d?i+s:i>=d-o.right?n.width-d+i:i+s,y:r<=o.top?r:r>=a?r+l:r>=a-o.bottom?n.height-a+r:r+l}}function le(e){return e.reduce(((e,t)=>e.set(t.key,t)),new Map)}function de(e,t,o,n,i,r,l,d){if(!e)return[];if(t)return[];if(!n)return[];if(!o)return[];const a=s(o.columnId),u=s(o.rowId),c=s(n.columnId),h=s(n.rowId);if(!l.has(a))return[];if(!d.has(u))return[];if(!l.has(c))return[];if(!d.has(h))return[];const f=Math.min(l.get(a).index,l.get(c).index),p=Math.max(l.get(a).index,l.get(c).index),m=Math.min(d.get(u).index,d.get(h).index),g=Math.max(d.get(u).index,d.get(h).index);return i.slice(f,p+1).flatMap((e=>r.slice(m,g+1).map((t=>({rowId:t.id,columnId:e.id})))))}function ae(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 ue(e,t,o,n,i){if(!t)return null;const r=s(t.columnId),l=s(t.rowId);if(!o.has(r))return null;if(!n.has(l))return null;const d=o.get(r),a=n.get(l);if(0===e.length)return null;const u={width:d.width,height:a.height,section:ae(d,a)};switch(a.pinned){case"BEGIN":u.top=a.top;break;case"END":u.bottom=i.top.height+i.middle.height+i.bottom.height-a.top-a.height;break;default:u.marginTop=a.top-i.top.height}switch(d.pinned){case"BEGIN":u.left=d.left;break;case"END":u.right=i.left.width+i.center.width+i.right.width-d.left-d.width;break;default:u.marginLeft=d.left-i.left.width}return u}function ce(e,t){return t.every((t=>t.edit.validate({string:e})))}function he(e){return Array.isArray(e)?e.map(((e,t)=>t)):Object.keys(e)}function fe(e){return he(e)}function pe(e){const t=new Set;if(Array.isArray(e))for(const o of e)for(const e of he(o))t.add(e);else for(const o in e)for(const n of he(e[o]))t.add(n);return[...t]}function me(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):pe(t);for(const t of e)o.push({...n,id:t,type:"DATA"})}else o.push(n);return o}function ge(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):fe(t);for(const t of e)o.push({...n,id:t,type:"DATA"})}else o.push(n);return o}const ye=({text:e,expression:t})=>e.includes(t);class we{constructor(e){this.rulesLookup=new O;for(const t of e){const e={by:s("by"in t?t.by:"FILTER"),condition:t.condition||ye};this.rulesLookup.addRule(t.column,t.row,e)}}resolve(e,t,o,n,i,r,s,l){const d=this.rulesLookup.getRules(i,n);if(0===d.length)return"DATA"!==n.type||"DATA"!==i.type||!l.has('"FILTER"')||ye({text:s,expression:l.get('"FILTER"')});let a={data:e,rows:t,columns:o,row:n,column:i,value:r,text:s};for(const e of d){if(!l.has(e.by))continue;const t={...a,expression:l.get(e.by)};if(!e.condition(t))return!1}return!0}}function xe(e){return new we(e)}function be(e){return g(e,["value","text"])}function ve(e){return g(e,["value","text","font","padding"])}function Ae(e,t,o,n,i,r){if(e.every((e=>"number"==typeof e.width)))return e;const s=e=>{const r=e.width;if("number"==typeof r)return r;if(i.has(e.key)){const t=i.get(e.key);if("fit-once"===r&&!t.dataOnly)return t.width;if("fit-data-once"===r&&t.dataOnly)return t.width}let s=0;for(const i of t){if("DATA"!==i.type&&"fit-data-once"===r)continue;if("DATA"!==i.type&&"fit-data"===r)continue;const t=n.resolve(i,e),l=t.text,d=t.font,a=t.padding.left+t.padding.right,u=o.measureWidth(l,d)+a;s=Math.max(s,u)}return i.set(e.key,{width:s,dataOnly:"fit-data-once"===r}),s};for(const e of i.keys())r.has(e)||i.delete(e);return e.map((e=>({...e,width:s(e)})))}function Re(e,t,o,n,i,r){if(t.every((e=>"number"==typeof e.height)))return t;const s=t=>{const r=t.height;if("number"==typeof r)return r;if(i.has(t.key)){const e=i.get(t.key);if("fit-once"===r&&!e.dataOnly)return e.height;if("fit-data-once"===r&&e.dataOnly)return e.height}let s=0;for(const i of e){if("DATA"!==i.type&&"fit-data-once"===r)continue;if("DATA"!==i.type&&"fit-data"===r)continue;const e=n.resolve(t,i),l=e.text,d=e.font,a=e.padding.top+e.padding.bottom,u=o.measureHeight(l,d)+a;s=Math.max(s,u)}return i.set(t.key,{height:s,dataOnly:"fit-data-once"===r}),s};for(const e of i.keys())r.has(e)||i.delete(e);return t.map((e=>({...e,height:s(e)})))}function ke(e){return new Set(e.map((e=>e.key)))}function Ee(e){return g(e,["value","text"])}function Ce(e,t){return null!=e.value&&(null==t.value||e.value<t.value)}function Ie(e,t){return null!=e.value&&(null==t.value||e.value>t.value)}class Te{constructor(e){this.rulesLookup=new O;for(const t of e){const e={by:stringifyId("by"in t?t.by:"HEADER"),comparatorAsc:t.comparator||Ce,comparatorDesc:(e,o)=>-t.comparator(e,o)||Ie};this.rulesLookup.addRule(t.column,t.row,e)}}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"')?Ce:Ie:null;if(n.length>1)throw new Error("Multiple sorting rules for the same cell");const i=n[0];return"ASC"===o.get(i.by)?i.comparatorAsc:i.comparatorDesc}}function Le(e){return new Te(e)}function Be(e,t,o){const n=new Map;for(const i of e){const e=s(i[t]),r=s(i[o]);n.has(e)||n.set(e,new Map),n.get(e).set(r,i.direction)}return n}function De(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 Me(e,t,o,n,i,r,l){if(0===e.length)return i;const d=Be(e,"columnId","rowId"),a=new Map(r.map((e=>[e.key,e]))),u=e.map((e=>s(e.columnId))).filter((e=>a.has(e))).map((e=>a.get(e))).reverse();if(0===u.length)return i;for(const e of u){const s=[],a=[];for(const u of i){const c=t.resolve(e,u,d.get(e.key));if(!c){De(a,s),s.push(u);continue}const h={entity:u,comparator:c,cell:o.resolve(n,i,r,u,e,l)};0!==a.length&&a[0].comparator!==c?(De(a,s),a.push(h)):a.push(h)}De(a,s),i=s}return i}function Fe(e,t,o,n,i,r,l){if(0===e.length)return r;const d=Be(e,"rowId","columnId"),a=new Map(i.map((e=>[e.key,e]))),u=e.map((e=>s(e.rowId))).filter((e=>a.has(e))).map((e=>a.get(e))).reverse();if(0===u.length)return r;for(const e of u){const s=[],a=[];for(const u of r){const c=t.resolve(u,e,d.get(e.key));if(!c){De(a,s),s.push(u);continue}const h={entity:u,comparator:c,cell:o.resolve(n,i,r,e,u,l)};0!==a.length&&a[0].comparator!==c?(De(a,s),a.push(h)):a.push(h)}De(a,s),r=s}return r}const Se=5;function ze(e,t,o,n,i,r,l,d){if(!n)return null;const a=t.get(s(n.columnId));if("HEADER"!==o.get(s(n.rowId)).type)return null;const u=se(i,r,l,d);if(!u)return null;const c=u.x;return c>=a.right-Se&&c<=a.right+Se?a.id:0===a.index||c<a.left-Se||c>a.left+Se?null:e[a.index-1].id}function Ne(e,t,o,n,i,r,l,d){if(!n)return null;const a=t.get(s(n.columnId)),u=o.get(s(n.rowId));if("HEADER"!==a.type)return null;const c=se(i,r,l,d);if(!c)return null;const h=c.y;return h>=u.bottom-Se&&h<=u.bottom+Se?u.id:0===u.index||h<u.top-Se||h>u.top+Se?null:e[u.index-1].id}function Oe(e){return e.map((e=>({columnId:"columnId"in e?e.columnId:"HEADER",rowId:"rowId"in e?e.rowId:"HEADER",direction:e.direction})))}function Ke(e){return e.map((e=>({columnId:"columnId"in e?e.columnId:"FILTER",rowId:"rowId"in e?e.rowId:"FILTER",expression:e.expression})))}function Pe(e,t){return function(e,t){const o=e.filter((e=>"DATA"===e.type)).map((e=>e.id));return t(o),o}(e,t)}function He(e){console.count("updateState");const t={...e.localOptions,...e.externalOptions},o=e.memory,n=e.state,i=e.element;function r(e,t,n){const i=o[e]&&o[e].dependencies;return i&&!n.some(((e,t)=>e!==i[t]))||(o[e]={value:t(...n),dependencies:n}),o[e].value}const s=window.devicePixelRatio,l=t.borderWidth/s,a=t.data,u=e.input.value,c=r("sortBy",Oe,[t.sortBy]),h=r("filters",Ke,[t.filters]),p=r("textResolver",J,[]),m=r("dataFormatting",f,[t.formatting,t.dataSelector,c]),g=r("editedCellsAndFilters",v,[t.editedCells,h]),w=r("edition",R,[g]),A=r("invokedColumns",C,[t.columns,a]),k=r("invokedRows",C,[t.rows,a]),I=r("unfoldedColumns",me,[A,a]),T=r("unfoldedRows",ge,[k,a]),F=r("unfilteredColumns",L,[I,t.pinnedLeft,t.pinnedRight,t.columnWidths]),S=r("unfilteredRows",B,[T,t.pinnedTop,t.pinnedBottom,t.rowHeights]),z=r("unfilteredColumnKeys",ke,[F]),N=r("unfilteredRowKeys",ke,[S]),O=r("filterFormatting",be,[m]),K=r("filterFormattingRules",$,[O]),P=r("filteringRules",xe,[t.filtering]),H=r("filteredColumns",j,[h,P,K,a,S,F,w]),W=r("filteredRows",G,[h,P,K,a,S,F,w]),q=r("sortingFormatting",Ee,[m]),Y=r("sortingFormattingRules",$,[q]),X=r("sortingRules",Le,[t.sorting]),ae=r("sortedColumns",Fe,[c,X,Y,a,W,H,w]),he=r("sortedRows",Me,[c,X,Y,a,W,H,w]),fe=r("measureFormatting",ve,[m]),pe=r("measureFormattingRules",$,[fe]),ye=r("measureFormatResolver",V,[pe,a,he,ae,w]),we=e.columnWidthCache,Ce=e.rowHeightCache,Ie=r("measuredColumns",Ae,[ae,he,p,ye,we,z]),Te=r("measuredRows",Re,[ae,he,p,ye,Ce,N]),Be=r("columns",D,[Ie,s,l]),De=r("rows",M,[Te,s,l]),Se=r("columnLookup",le,[Be]),He=r("rowLookup",le,[De]),We=t.focusedCell,$e=r("sections",b,[Be,De]),qe=t.selectedCells,Ve=r("fixedSize",U,[$e.top.height,$e.bottom.height,$e.left.width,$e.right.width]),Ye=r("totalSize",_,[Be,De]),Ge=function(e,t,o,n,i,r){if(!t)return null;if(t.x<0||t.y<0||t.x>r.width||t.y>r.height)return null;const s=se(e,t,i,r),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 i=Math.floor((o+n)/2);if(t<e[i].topWithBorder)n=i-1;else{if(!(t>e[i].bottomWithBorder))return i;o=i+1}}return-1}(o,s.y),d=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 i=Math.floor((o+n)/2);if(t<e[i].leftWithBorder)n=i-1;else{if(!(t>e[i].rightWithBorder))return i;o=i+1}}return-1}(n,s.x);return-1===l||-1===d?null:{rowId:o[l].id,columnId:n[d].id}}(i,e.mousePosition,De,Be,Ve,Ye),je=e.resizingColumn||r("resizableColumn",ze,[Be,Se,He,Ge,i,e.mousePosition,Ve,Ye]),Ue=e.resizingRow||r("resizableRow",Ne,[De,Se,He,Ge,i,e.mousePosition,Ve,Ye]),_e=r("highlightedCells",de,[e.isMouseDown,!!je||!!Ue,We,Ge,Be,De,Se,He]),Xe=r("selection",E,[qe]),Je=r("highlight",E,[_e]),Qe=r("renderFormatting",x,[m,Ge,We,Xe,Je,w,je,Ue,t.borderWidth]),Ze=r("renderFormattingRules",$,[Qe]),et=r("renderFormatResolver",V,[Ze,a,De,Be,w]),tt=r("inputFormatting",y,[m]),ot=r("inputFormattingRules",$,[tt]),nt=r("inputFormatResolver",V,[ot,a,De,Be,w]),it=r("editableCells",d,[qe,nt,Se,He]),rt=r("inputPlacement",ue,[it,We,Se,He,$e]),st=r("isTextValid",ce,[u,it]),lt=function(e,t,o,n){const i={width:n.getBoundingClientRect().width,height:n.getBoundingClientRect().height},r={left:n.scrollLeft,top:n.scrollTop},s=e||re,l=oe({left:0,top:0,...t},o),d=oe({...r,...i},o),a=Z(l,ee(d,ne)),u=Z(l,ee(d,ie));return Q(l,s)&&Q(s,a)?te(s)>2*te(u)?u:s:u}(n?.scrollRect,Ye,Ve,i);r("activeColumns",Pe,[Be,t.onActiveColumnsChange]),r("activeRows",Pe,[De,t.onActiveRowsChange]),e.state={options:t,devicePixelRatio:s,borderWidth:l,data:a,dataFormatting:m,edition:w,filteredColumns:H,filteredRows:W,columns:Be,rows:De,sections:$e,selectedCells:qe,selection:Xe,highlight:Je,hoveredCell:Ge,focusedCell:We,renderFormatting:Qe,renderFormatResolver:et,inputFormatting:tt,inputFormatResolver:nt,fixedSize:Ve,totalSize:Ye,textResolver:p,scrollRect:lt,highlightedCells:_e,inputPlacement:rt,columnLookup:Se,rowLookup:He,text:u,isTextValid:st,resizableColumn:je,resizableRow:Ue}}function We(e){if(!e.error)try{He(e)}catch(t){e.error=t}}function $e(e,t){const o=new k(t);return[...t,...e.filter((e=>!o.isIdSelected(e.rowId,e.columnId)))]}function qe(e,t){const o=new k(t);return e.filter((e=>!o.isIdSelected(e.rowId,e.columnId)))}function Ve(e){const t=e.currentTarget.getBoundingClientRect();return{x:e.clientX-t.left,y:e.clientY-t.top}}function Ye(e){if("spread-grid-context"in e)return;console.log("initialize");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");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;"),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;");const n={externalOptions:{},state:null,memory:{},element:e,canvases:t,input:o,renderRequested:!1,mousePosition:null,isMouseDown:!1,columnWidthCache:new Map,rowHeightCache:new Map,requestNewRender:()=>{n.renderRequested||(n.renderRequested=!0,requestAnimationFrame((()=>{n.renderRequested=!1,We(n),c(n)})))},addEventListener:(e,t,o)=>{e.addEventListener(t,(e=>{try{o(e)}catch(e){e.message=`[${t} event]: ${e.message}`,n.error=e,n.requestNewRender()}}))}};n.localOptions={data:[],columns:[{type:"DATA-BLOCK"}],rows:[{type:"HEADER"},{type:"DATA-BLOCK"}],formatting:[],filtering:[],sorting:[],dataSelector:({data:e,row:t,column:o})=>e[t.id][o.id],pinnedTop:0,pinnedBottom:0,pinnedLeft:0,pinnedRight:0,borderWidth:1,focusedCell:null,onFocusedCellChange:e=>{n.localOptions.focusedCell=e,n.requestNewRender()},selectedCells:[],onSelectedCellsChange:e=>{n.localOptions.selectedCells=e,n.requestNewRender()},highlightedCells:[],editedCells:[],onEditedCellsChange:e=>{n.localOptions.editedCells=e,n.requestNewRender()},filters:[],onFiltersChange:e=>{n.localOptions.filters=e,n.requestNewRender()},sortBy:[],onSortByChange:e=>{n.localOptions.sortBy=e,n.requestNewRender()},onCellClick:()=>{},onCustomCellClick:()=>{},columnWidths:[],onColumnWidthsChange:e=>{n.localOptions.columnWidths=e,n.requestNewRender()},rowHeights:[],onRowHeightsChange:e=>{n.localOptions.rowHeights=e,n.requestNewRender()},onActiveColumnsChange:()=>{},onActiveRowsChange:()=>{}},e["spread-grid-context"]=n;const i=e=>{o.value=e,o.dispatchEvent(new Event("input"))},r=e=>{const t=n.state.options.selectedCells,o=n.state.inputFormatResolver,r=n.state.columnLookup,s=n.state.rowLookup,l=n.state.text,a=n.state.isTextValid,u=n.state.options.onEditedCellsChange,c=n.state.options.onFiltersChange,h=d(t,o,r,s);if(""===l)return;if(!a)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})}))),u($e(n.state.options.editedCells,m)),(e=>{c($e(n.state.options.filters,e))})(p.map((e=>({...e.cell,expression:e.edit.parse({string:l})})))),e||i("")},a=e=>{const t=n.state.options.selectedCells,o=n.state.options.onEditedCellsChange,i=n.state.options.onFiltersChange,r=d(t,n.state.inputFormatResolver,n.state.columnLookup,n.state.rowLookup);var s;e&&!r.every((e=>e.edit.autoCommit))||(s=t,o(qe(n.state.options.editedCells,s)),(e=>{i(qe(n.state.options.filters,e))})(t))};n.addEventListener(e,"scroll",(e=>{n.requestNewRender()})),n.addEventListener(e,"mouseenter",(e=>{n.mousePosition=Ve(e),n.requestNewRender()})),n.addEventListener(e,"mousemove",(t=>{if(n.mousePosition=Ve(t),n.resizingColumn){const t=n.state.columnLookup.get(s(n.resizingColumn)),o=t.width,i=t.right,r=se(e,n.mousePosition,n.state.fixedSize,n.state.totalSize),l=Math.max(10,r.x-i+o),d=n.state.options.columnWidths.filter((e=>s(e.columnId)!==t.key)).concat([{columnId:t.id,width:l}]);n.state.options.onColumnWidthsChange(d)}if(n.resizingRow){const t=n.state.rowLookup.get(s(n.resizingRow)),o=t.height,i=t.bottom,r=se(e,n.mousePosition,n.state.fixedSize,n.state.totalSize),l=Math.max(10,r.y-i+o),d=n.state.options.rowHeights.filter((e=>s(e.rowId)!==t.key)).concat([{rowId:t.id,height:l}]);n.state.options.onRowHeightsChange(d)}n.requestNewRender()})),n.addEventListener(e,"mouseleave",(()=>{n.mousePosition=null,n.requestNewRender()})),n.addEventListener(e,"mousedown",(e=>{We(n),i(""),n.isMouseDown=!0,n.mouseDownPosition=n.mousePosition,n.mouseDownCell=n.state.hoveredCell,n.state.resizableColumn&&(n.resizingColumn=n.state.resizableColumn),n.state.resizableRow&&(n.resizingRow=n.state.resizableRow),n.state.resizableColumn||n.state.resizableRow||n.state.options.onFocusedCellChange(n.state.hoveredCell),e.ctrlKey||n.state.options.onSelectedCellsChange([]),n.requestNewRender()})),n.addEventListener(e,"mouseup",(e=>{We(n),n.isMouseDown=!1,n.resizingColumn=null,n.resizingRow=null,n.state.options.onSelectedCellsChange($e(n.state.options.selectedCells,n.state.highlightedCells)),n.requestNewRender()})),n.addEventListener(e,"pointerdown",(e=>{n.element.setPointerCapture(e.pointerId)})),n.addEventListener(e,"pointerup",(e=>{n.element.releasePointerCapture(e.pointerId)})),n.addEventListener(e,"click",(e=>{We(n);const t=n.state.hoveredCell,o=n.mouseDownCell;if(n.state.resizableColumn||n.state.resizableRow)return;if(null===t)return;if(s(t.columnId)!==s(o.columnId))return;if(s(t.rowId)!==s(o.rowId))return;const i=n.state.columnLookup.get(s(t.columnId)),r=n.state.rowLookup.get(s(t.rowId)),d=n.state.options.sortBy,a=n.state.inputFormatResolver.resolve(r,i);if(a.edit?.toggle){const e=function(e,t,o,n){const i=n.hasValueByKey(o.key,t.key)?n.getValueByKey(o.key,t.key):e.value,r=e.edit.toggle;return"function"==typeof r?r({value:i}):r[(r.indexOf(i)+1)%r.length]}(a,i,r,n.state.edition),o=l(i,r);"DATA"===o&&n.state.options.onEditedCellsChange($e(n.state.options.editedCells,[{...t,value:e}])),"FILTER"===o&&n.state.options.onFiltersChange($e(n.state.options.filters,[{...t,expression:e}]))}else if("DATA"===i.type&&"DATA"===r.type)n.state.options.onCellClick(n.state.hoveredCell);else if("CUSTOM"===i.type||"CUSTOM"===r.type)n.state.options.onCustomCellClick(n.state.hoveredCell);else if("HEADER"===i.type||"HEADER"===r.type){const t=function(e,t,o,n){function i(e){const n="columnId"in e?e.columnId:"HEADER",i="rowId"in e?e.rowId:"HEADER";return t.key===s(n)&&o.key===s(i)}const r=["ASC","DESC",void 0],l=e.find(i),d=r.indexOf(l?.direction),a=r[(d+1)%r.length],u=e.indexOf(l)===e.length-1;return[...!n||!u&&l?[]:e.filter((e=>!i(e))),...a?[{columnId:t.id,rowId:o.id,direction:a}]:[]]}(d,i,r,e.ctrlKey);n.state.options.onSortByChange(t),n.state.options.onSelectedCellsChange([])}})),n.addEventListener(e,"dblclick",(e=>{if(We(n),n.state.resizableColumn){const e=s(n.state.resizableColumn),t=n.state.options.columnWidths.filter((t=>s(t.columnId)!==e));n.state.options.onColumnWidthsChange(t),n.columnWidthCache.delete(e)}if(n.state.resizableRow){const e=s(n.state.resizableRow),t=n.state.options.rowHeights.filter((t=>s(t.rowId)!==e));n.state.options.onRowHeightsChange(t),n.rowHeightCache.delete(e)}const t=n.state.focusedCell;if(null===t)return;const r=s(t.columnId),l=s(t.rowId),d=n.state.columnLookup,a=n.state.rowLookup,u=n.state.inputFormatResolver;if(!d.has(r))return;if(!a.has(l))return;const c=d.get(r),h=a.get(l),f=u.resolve(h,c),p=f.text;f.edit&&(f.edit.toggle||(i(p),o?.select()))})),n.addEventListener(e,"focus",(()=>{o.parentElement&&o.focus({preventScroll:!0})})),n.addEventListener(e,"keydown",(e=>{We(n);const t=n.state.focusedCell,o=n.state.columnLookup,l=n.state.rowLookup,d=n.state.options.selectedCells,u=n.state.options.onSelectedCellsChange,c=n.state.options.onFocusedCellChange,h=n.state.options.editedCells,f=n.state.options.onEditedCellsChange,p=n.state.columns,m=n.state.rows,g=n.state.text,y=n.state.inputFormatResolver,w=(e,t)=>{c(e),t.shiftKey?u($e(d,[e])):u([e])},x=(e,n)=>{if(!t)return;const i=s(t.columnId);if(!o.has(i))return;const r=o.get(i).index,l=Math.max(0,Math.min(p.length-1,r+e));if(l===r)return;const d={rowId:t.rowId,columnId:p[l].id};w(d,n)},b=(e,o)=>{if(!t)return;const n=s(t.rowId);if(!l.has(n))return;const i=l.get(n).index,r=Math.max(0,Math.min(m.length-1,i+e));if(r===i)return;const d={rowId:m[r].id,columnId:t.columnId};w(d,o)},v=()=>{e.preventDefault(),e.stopPropagation()};switch(e.key){case"Escape":""!==g?i(""):d.length>1?u([t]):h.length>0?f([]):(c(null),u([]));break;case"Enter":r();break;case"ArrowUp":v(),b(e.ctrlKey?-m.length:-1,e);break;case"ArrowDown":v(),b(e.ctrlKey?m.length:1,e);break;case"ArrowLeft":v(),x(e.ctrlKey?-p.length:-1,e);break;case"ArrowRight":v(),x(e.ctrlKey?p.length:1,e);break;case"Delete":case"Backspace":a();break;case"c":(e=>{if(!e.ctrlKey)return;const t=function(e,t,o,n){const i=new Map(t.map((e=>[e.key,e]))),r=new Map(o.map((e=>[e.key,e]))),l=e.map((e=>({columnKey:s(e.columnId),rowKey:s(e.rowId)}))).filter((e=>i.has(e.columnKey)&&r.has(e.rowKey))),d=new Set(l.map((e=>e.columnKey))),a=new Set(l.map((e=>e.rowKey)));if(0===l.length)return"";const u=new k(e),c=Math.min(...l.map((e=>i.get(e.columnKey).index))),h=Math.max(...l.map((e=>i.get(e.columnKey).index))),f=Math.min(...l.map((e=>r.get(e.rowKey).index))),p=Math.max(...l.map((e=>r.get(e.rowKey).index))),m=[];for(let e=f;e<=p;e++){const i=o[e],r=i.key;if(a.has(r)){for(let e=c;e<=h;e++){const o=t[e],s=o.key;if(d.has(s)){if(u.isKeySelected(r,s)){const e=n.resolve(i,o).text;m.push(e)}e<h&&m.push("\t")}}e<p&&m.push("\n")}}return m.join("")}(d,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((()=>{n.requestNewRender()})).observe(e),n.addEventListener(o,"input",(e=>{We(n),e.target.value?(r(!0),o.style.opacity=1,o.style.pointerEvents="auto"):(e.isTrusted&&a(!0),o.style.opacity=0,o.style.pointerEvents="none")})),n.addEventListener(o,"click",(e=>{e.stopPropagation()})),n.addEventListener(o,"dblclick",(e=>{e.stopPropagation()})),n.addEventListener(o,"mousedown",(e=>{e.stopPropagation()})),n.addEventListener(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(),n.requestNewRender());break;default:e.stopPropagation(),n.requestNewRender()}}))}function Ge(e){const[t,o]=(0,n.useState)(null);return t&&function(e,t){console.log("createGrid"),Ye(e);const o=e["spread-grid-context"];o.externalOptions=t,null===o.state?(We(o),c(o)):o.requestNewRender()}(t,e),n.default.createElement("div",{ref:o})}var je=o.A;export{je 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:()=>je});const n=(i={default:()=>e.default,useState:()=>e.useState},r={},t.d(r,i),r);var i,r;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){return"FILTER"===e.type^"FILTER"===t.type?"FILTER":"DATA"}function d(e,t,o,n){return e.map((e=>{const i=s(e.columnId),r=s(e.rowId);if(!o.has(i))return null;if(!n.has(r))return null;const d=o.get(i),a=n.get(r);return{edit:t.resolve(a,d).edit,cell:e,type:l(d,a)}})).filter((e=>e?.edit))}function a(e,t){return Math.round(e*t)/t}function u(e,t,o){const n=e.state,i=e.canvases[`${t}-${o}`],r=n.sections[t],s=n.sections[o],l=s.columns,d=r.rows;if(0===d.length||0===l.length)return void(i.parentElement&&i.parentElement.removeChild(i));i.parentElement||e.element.appendChild(i),console.log("draw");const u=i.getContext("2d",{alpha:!1}),c=n.scrollRect,h=n.textResolver,f=n.renderFormatResolver,p=n.borderWidth,m=r.showTopBorder,g=r.showBottomBorder,y=s.showLeftBorder,w=s.showRightBorder,x=p/2,b=d.length-1+(m?1:0)+(g?1:0),v=l.length-1+(y?1:0)+(w?1:0),A=d.map((e=>e.height)),R=l.map((e=>e.width)),E=R.reduce(((e,t)=>e+t),0)+v*p,k=A.reduce(((e,t)=>e+t),0)+b*p,C="center"===o?c.left:0,I="middle"===t?c.top:0,T="center"===o?c.width:s.width,L="middle"===t?c.height:r.height,B=R.reduce(((e,t,o)=>{const n=e[o]+t+p;return e.push(n),e}),[y?p:0]),D=A.reduce(((e,t,o)=>{const n=e[o]+t+p;return e.push(n),e}),[m?p:0]),M=B.slice(0,-1),F=D.slice(0,-1),S=Math.max(M.findLastIndex((e=>e<=C)),0),z=M.findLastIndex((e=>e<=C+T)),N=Math.max(F.findLastIndex((e=>e<=I)),0),O=F.findLastIndex((e=>e<=I+L)),K=Math.max(S,y?0:1),H=z+(w?1:0),P=Math.max(N,m?0:1),W=O+(g?1:0),$=Array.from({length:O-N+1},((e,t)=>{const o=d[t+N];return Array.from({length:z-S+1},((e,t)=>{const n=l[t+S];return f.resolve(o,n)}))})),q=(e,t)=>$[e-N][t-S];i.width=Math.round(T*devicePixelRatio),i.height=Math.round(L*devicePixelRatio),i.style.width=`${T}px`,i.style.height=`${L}px`,i.style.marginLeft=`${C}px`,i.style.marginTop=`${I}px`,i.style.marginRight=E-T-C+"px",i.style.marginBottom=k-L-I+"px",u.fillStyle="#E9E9E9",u.fillRect(0,0,i.width,i.height);const V=(e,t)=>{u.setTransform(devicePixelRatio,0,0,devicePixelRatio,(e-C)*devicePixelRatio,(t-I)*devicePixelRatio)},Y=(e,t,o,n)=>{u.beginPath(),u.rect(e,t,o,n),u.clip()};for(let e=S;e<=z;e++){u.save(),V(B[e],0),Y(0,0,R[e],k);for(let t=N;t<=O;t++){const o=q(t,e),n=o.style,i=D[t],r=B[e],s=R[e],l=A[t],d=o.text,c=n.textBaseline||"middle",f=o.padding;if(V(r,i),u.fillStyle=n.background||"white",u.fillRect(0,0,s,l),"draw"in o&&o.draw(u),n.highlight&&(u.fillStyle=n.highlight,u.fillRect(0,0,s,l)),n.corner&&(u.fillStyle=n.corner,u.beginPath(),u.moveTo(s-7,l),u.lineTo(s,l),u.lineTo(s,l-7),u.fill()),d){u.fillStyle=n.foreground||"black",u.font=o.font;const e=h.getFontMetrics(o.font),t="center"==n.textAlign&&h.measureWidth(d,o.font)>s-f.left-f.right?"left":n.textAlign||"left";u.textAlign=t;const i=a("left"===t?f.left:"center"===t?s/2:"right"===t?s-f.right:0,devicePixelRatio),r=a("top"===c?e.middle+e.topOffset+f.top:"middle"===c?l/2+e.middle:"bottom"===c?l+e.middle-e.bottomOffset-f.bottom:0,devicePixelRatio);r-e.middle-e.topOffset>=0&&r-e.middle+e.bottomOffset<=l?u.fillText(d,i,r):(u.strokeStyle="#E9E9E9",u.lineWidth=p,u.beginPath(),u.moveTo(0,p+x),u.lineTo(s,p+x),u.moveTo(0,l-p-x),u.lineTo(s,l-p-x),u.stroke(),u.save(),Y(0,2*p,s,l-4*p),u.fillText(d,i,r),u.restore())}}u.restore()}V(0,0);const G=(e,t,o,n,i)=>{if(!i)return;if(0===i.width)return;const r=i.width/devicePixelRatio,s=t===n,l=e-(s?r/2:0),d=t-(s?0:r/2),a=o+(s?r/2:0),c=n+(s?0:r/2);u.strokeStyle=i.color||"black",u.lineWidth=r,i.dash?(u.setLineDash(i.dash.map((e=>e/devicePixelRatio))),u.lineDashOffset=s?l:d):u.setLineDash([]),u.beginPath(),u.moveTo(l,d),u.lineTo(a,c),u.stroke()},j=(e,t)=>e?t?e.index>t.index?e:t:e:t;for(let e=P;e<=W;e++){const t=e-1,o=e;for(let e=S;e<=z;e++){const n=j(t>=N?q(t,e).style.borderBottom:null,o<=O?q(o,e).style.borderTop:null);G(B[e]-x,D[o]-x,B[e+1]-x,D[o]-x,n)}}for(let e=K;e<=H;e++){const t=e-1,o=e;for(let e=N;e<=O;e++){const n=j(t>=S?q(e,t).style.borderRight:null,o<=z?q(e,o).style.borderLeft:null);G(B[o]-x,D[e]-x,B[o]-x,D[e+1]-x,n)}}}function c(e){if(!e.error)try{!function(e){u(e,"top","left"),u(e,"top","center"),u(e,"top","right"),u(e,"middle","left"),u(e,"middle","center"),u(e,"middle","right"),u(e,"bottom","left"),u(e,"bottom","center"),u(e,"bottom","right"),function(e){const t=e.element,o=e.input,n=e.state,i=n.inputPlacement;if(!i){if(o.parentElement){const e=document.activeElement===o;o.parentElement.removeChild(o),e&&t.focus({preventScroll:!0})}return}const r=e.canvases[i.section];if(o.style.left="left"in i?`${i.left}px`:"0",o.style.top="top"in i?`${i.top}px`:"0",o.style.right="right"in i?`${i.right}px`:"0",o.style.bottom="bottom"in i?`${i.bottom}px`:"0",o.style.marginLeft="marginLeft"in i?`${i.marginLeft}px`:"0",o.style.marginTop="marginTop"in i?`${i.marginTop}px`:"0",o.style.width=`${i.width}px`,o.style.height=`${i.height}px`,o.style.gridArea=r.style.gridArea,o.style.zIndex=r.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;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)}(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},i)=>({column:{id:e},row:{id:t},text:({value:e,text:t})=>`${o.length>1?i+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,i,r,l,d,a,u){const c=o?s(o.columnId):null,h=o?s(o.rowId):null,f=null!==a,p=null!==d||f,m=u+2,g=u+4,y=(e,t,o,i)=>{if(o<0||o>=e.length)return!1;if(i<0||i>=t.length)return!1;const r=e[o].key,s=t[i].key;return n.isKeySelected(r,s)},x=(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:u,color:"gray"}}},{column:{type:"HEADER"},row:{type:"ANY"},style:{background:"#F5F5F5",border:{width:u,color:"gray"}}},{column:{type:"HEADER"},row:{type:"HEADER"},style:{background:"#E0E0E0"}},...e,...x(t&&!f,{column:{type:"ANY"},row:{id:t?.rowId},style:{highlight:"#81948133"}}),...x(t&&!p,{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})=>y(e,t,o.index,n.index),style:({rows:e,columns:t,row:o,column:n,edit:i})=>({...y(e,t,o.index-1,n.index)?{}:{borderTop:{width:m,color:"#596959",index:Number.MAX_SAFE_INTEGER}},...y(e,t,o.index+1,n.index)?{}:{borderBottom:{width:m,color:"#596959",index:Number.MAX_SAFE_INTEGER}},...y(e,t,o.index,n.index-1)?{}:{borderLeft:{width:m,color:"#596959",index:Number.MAX_SAFE_INTEGER}},...y(e,t,o.index,n.index+1)?{}:{borderRight:{width:m,color:"#596959",index:Number.MAX_SAFE_INTEGER}},highlight:w(i?"#798d9c":"#819481",c!==n.key||h!==o.key)})},{column:{type:"ANY"},row:{type:"ANY"},condition:({row:e,column:t})=>i.isKeySelected(e.key,t.key),style:({row:e,column:t})=>({highlight:w("#93a8b8",c!==t.key||h!==e.key)})},...x(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})=>r.hasValueByKey(e.key,t.key),style:{corner:"darkgreen"}},...x(d,{column:{id:d},row:{type:"HEADER"},style:{borderRight:{width:g,color:"cornflowerblue"}}}),...x(a,{column:{type:"HEADER"},row:{id:a},style:{borderBottom:{width:g,color:"cornflowerblue"}}})]}function b(e,t){const o=t.filter((e=>"BEGIN"===e.pinned)).length,n=t.filter((e=>"END"===e.pinned)).length,i=t.length-o-n,r=e.filter((e=>"BEGIN"===e.pinned)).length,s=e.filter((e=>"END"===e.pinned)).length,l=e.length-r-s,d=t.slice(0,o),a=t.slice(t.length-n,t.length),u=t.slice(o,t.length-n),c=e.slice(0,r),h=e.slice(e.length-s,e.length),f=e.slice(r,e.length-s),p=o>0,m=r>0,g=!0,y=!0,w=i>0||!p,x=!0,b=!p,v=!(n>0),A=!0,R=!0,E=l>0||!m,k=!0,C=!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},L=(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:d,showTopBorder:g,showBottomBorder:y,height:T(d,g,y)},bottom:{rows:a,showTopBorder:w,showBottomBorder:x,height:T(a,w,x)},middle:{rows:u,showTopBorder:b,showBottomBorder:v,height:T(u,b,v)},left:{columns:c,showLeftBorder:A,showRightBorder:R,width:L(c,A,R)},right:{columns:h,showLeftBorder:E,showRightBorder:k,width:L(h,E,k)},center:{columns:f,showLeftBorder:C,showRightBorder:I,width:L(f,C,I)}}}function v(e,t){return[...e,...t.map((e=>({columnId:e.columnId,rowId:e.rowId,value:e.expression})))]}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 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 R(e){return new A(e)}class E{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 E(e)}function C(e,t){return"function"==typeof e?e(t):e}function I(e,t,o,n){return e<o?"BEGIN":e>=t-n?"END":void 0}function T(e,t,o){return e.map(((n,i)=>{const r="id"in n?n.id:n.type;return{...n,id:r,type:n.type||"DATA",index:i,key:s(r),pinned:I(i,e.length,t,o),header:"header"in n?n.header:r,labels:n.labels||[]}}))}function L(e,t,o,n){const i=new Map(n.map((({columnId:e,width:t})=>[s(e),t])));return T(e,t,o).map((e=>({...e,width:i.has(e.key)?i.get(e.key):"width"in e?e.width:"fit"})))}function B(e,t,o,n){const i=new Map(n.map((({rowId:e,height:t})=>[s(e),t])));return T(e,t,o).map((e=>({...e,height:i.has(e.key)?i.get(e.key):"height"in e?e.height:"fit"})))}function D(e,t,o){let n=o;return e.map(((e,i)=>{const r=a("width"in e?e.width:100,t),s={...e,index:i,width:r,leftWithBorder:n-o,left:n,right:n+r,rightWithBorder:n+r+o};return n+=s.width+o,s}))}function M(e,t,o){let n=o;return e.map(((e,i)=>{const r=a("height"in e?e.height:20,t),s={...e,index:i,height:r,topWithBorder:n-o,top:n,bottom:n+r,bottomWithBorder:n+r+o};return n+=s.height+o,s}))}const F="12px Calibri",S={top:2,right:5,bottom:2,left:5},z={HEADER:["HEADER"],FILTER:["FILTER"],DATA:["DATA"],CUSTOM:["CUSTOM"],ANY:["HEADER","DATA","FILTER","CUSTOM"],SPECIAL:["HEADER","FILTER","CUSTOM"],undefined:[]};class N{byKey=new Map;byIndex=new Map;byLabel=new Map;byType=new Map}class O{lookup=new N;hasRules=!1;addRule(e,t,o){if(this.hasRules=!0,Array.isArray(e))for(const n of e)this.addRule(n,t,o);else if(Array.isArray(t))for(const n of t)this.addRule(e,n,o);else{e=e?"id"in e?{key:s(e.id)}:e:{type:"DATA"},t=t?"id"in t?{key:s(t.id)}:t:{type:"DATA"},"key"in e&&i(this.lookup.byKey,e.key),"index"in e&&i(this.lookup.byIndex,e.index),"label"in e&&i(this.lookup.byLabel,e.label);for(const t of z[e.type])i(this.lookup.byType,t)}function n(e,t){e.has(t)||e.set(t,[]),e.get(t).push(o)}function i(e,o){e.has(o)||e.set(o,new N),"key"in t&&n(e.get(o).byKey,t.key),"index"in t&&n(e.get(o).byIndex,t.index),"label"in t&&n(e.get(o).byLabel,t.label);for(const i of z[t.type])n(e.get(o).byType,i)}}getRules(e,t){const o=[];if(!this.hasRules)return o;function n(e){for(const t of e)o.push(t)}function i(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)&&i(this.lookup.byKey.get(e.key)),this.lookup.byIndex.has(e.index)&&i(this.lookup.byIndex.get(e.index)),this.lookup.byType.has(e.type)&&i(this.lookup.byType.get(e.type));for(const t of e.labels)this.lookup.byLabel.has(t)&&i(this.lookup.byLabel.get(t));return o}}const K=["borderTop","borderRight","borderBottom","borderLeft"],H={validate:()=>!0,parse:({string:e})=>e};function P(e,t){const o={...e};if("border"in o){for(const e of K)o[e]=o.border;delete o.border}for(const e of K)e in o&&(o[e]={...o[e],index:t});return o}function W(e,t){if(!1!==e.edit)return!0===e.edit?"edit"in t?t.edit:H:"edit"in t?{...t.edit,...e.edit}:{...H,...e.edit}}class ${constructor(e){this.rulesLookup=new O;for(const[t,o]of e.entries()){const e={index:t};"condition"in o&&(e.condition=o.condition),"style"in o&&(e.style="function"==typeof o.style?o.style:()=>o.style),"value"in o&&(e.value="function"==typeof o.value?o.value:()=>o.value),"text"in o&&(e.text="function"==typeof o.text?o.text:()=>o.text),"font"in o&&(e.font="function"==typeof o.font?o.font:()=>o.font),"padding"in o&&(e.padding="function"==typeof o.padding?o.padding:()=>o.padding),"edit"in o&&(e.edit=o.edit),"draw"in o&&(e.draw=o.draw),this.rulesLookup.addRule(o.column,o.row,e)}}resolve(e,t,o,n,i,r){const s=this.rulesLookup.getRules(i,n).sort(((e,t)=>e.index-t.index)).filter(((e,t,o)=>e.index!==o[t-1]?.index));let l,d={data:e,rows:t,columns:o,row:n,column:i},a={},u=S,c=F;r.hasValueByKey(n.key,i.key)&&(d={...d,newValue:r.getValueByKey(n.key,i.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&&(a={...a,...P(e.style(d),e.index)}),"text"in e&&(d={...d,text:e.text(d)}),"font"in e&&(c=e.font(d)),"padding"in e&&(u={...u,...e.padding(d)}),"edit"in e&&(d={...d,edit:W(e,d)}),"draw"in e)){const t=d;l=o=>e.draw({...t,ctx:o})}const h=function(e){return"text"in e?`${e.text}`:"newValue"in e?`${e.newValue}`:void 0!==e.value?`${e.value}`:""}(d),f={style:a,visible:!0,text:h,padding:u,font:c};return"value"in d&&(f.value=d.value),"edit"in d&&void 0!==d.edit&&(f.edit=d.edit),void 0!==l&&(f.draw=l),f}}function q(e){return new $(e)}class V{constructor(e,t,o,n,i){this.formattingRules=e,this.data=t,this.rows=o,this.columns=n,this.edition=i}resolve(e,t){return this.formattingRules.resolve(this.data,this.rows,this.columns,e,t,this.edition)}}function Y(e,t,o,n,i){return new V(e,t,o,n,i)}function G(e,t,o){const n=new Map;for(const i of e){const e=s(i[t]),r=s(i[o]);n.has(e)||n.set(e,new Map),n.get(e).set(r,i.expression)}return n}function j(e,t,o,n,i,r,s){if(0===e.length)return i;const l=G(e,"columnId","rowId"),d=r.filter((e=>"FILTER"!==e.type&&l.has(e.key)));return 0===d.length?i:i.filter((e=>{for(const a of d){const d=o.resolve(n,i,r,e,a,s),u=l.get(a.key);if(!t.resolve(n,i,r,e,a,d.value,d.text,u))return!1}return!0}))}function U(e,t,o,n,i,r,s){if(0===e.length)return r;const l=G(e,"rowId","columnId"),d=i.filter((e=>"FILTER"!==e.type&&l.has(e.key)));return 0===d.length?r:r.filter((e=>{for(const a of d){const d=o.resolve(n,i,r,a,e,s),u=l.get(a.key);if(!t.resolve(n,i,r,a,e,d.value,d.text,u))return!1}return!0}))}function _(e,t,o,n){return{top:e,bottom:t,left:o,right:n}}function X(e,t){return{width:e.length?e.at(-1).rightWithBorder:0,height:t.length?t.at(-1).bottomWithBorder:0}}class J{constructor(){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.fontMetrics=new Map}measureWidth(e,t){if(!e)return 0;const o=this.context;return o.font=t||F,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||F;const n=o.measureText("X"),i=(n.actualBoundingBoxDescent-n.actualBoundingBoxAscent)/2,r={topOffset:i+n.fontBoundingBoxAscent,middle:-i,bottomOffset:n.fontBoundingBoxDescent-i,height:n.fontBoundingBoxAscent+n.fontBoundingBoxDescent};return this.fontMetrics.set(t,r),r}}function Q(){return new J}function Z(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 ee(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 te(e,t){return{top:e.top-t,left:e.left-t,width:e.width+2*t,height:e.height+2*t}}function oe(e){return e.width*e.height}function ne(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 ie=200,re=400,se={left:0,top:0,width:0,height:0};function le(e,t,o,n){const i=t.x,r=t.y,s=e.scrollLeft,l=e.scrollTop,d=e.clientWidth,a=e.clientHeight;return{x:i<=o.left?i:i>=d?i+s:i>=d-o.right?n.width-d+i:i+s,y:r<=o.top?r:r>=a?r+l:r>=a-o.bottom?n.height-a+r:r+l}}function de(e){return e.reduce(((e,t)=>e.set(t.key,t)),new Map)}function ae(e,t,o,n,i,r,l,d){if(!e)return[];if(t)return[];if(!n)return[];if(!o)return[];const a=s(o.columnId),u=s(o.rowId),c=s(n.columnId),h=s(n.rowId);if(!l.has(a))return[];if(!d.has(u))return[];if(!l.has(c))return[];if(!d.has(h))return[];const f=Math.min(l.get(a).index,l.get(c).index),p=Math.max(l.get(a).index,l.get(c).index),m=Math.min(d.get(u).index,d.get(h).index),g=Math.max(d.get(u).index,d.get(h).index);return i.slice(f,p+1).flatMap((e=>r.slice(m,g+1).map((t=>({rowId:t.id,columnId:e.id})))))}function ue(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,i){if(!t)return null;const r=s(t.columnId),l=s(t.rowId);if(!o.has(r))return null;if(!n.has(l))return null;const d=o.get(r),a=n.get(l);if(0===e.length)return null;const u={width:d.width,height:a.height,section:ue(d,a)};switch(a.pinned){case"BEGIN":u.top=a.top;break;case"END":u.bottom=i.top.height+i.middle.height+i.bottom.height-a.top-a.height;break;default:u.marginTop=a.top-i.top.height}switch(d.pinned){case"BEGIN":u.left=d.left;break;case"END":u.right=i.left.width+i.center.width+i.right.width-d.left-d.width;break;default:u.marginLeft=d.left-i.left.width}return u}function he(e,t){return t.every((t=>t.edit.validate({string:e})))}function fe(e){return Array.isArray(e)?e.map(((e,t)=>t)):Object.keys(e)}function pe(e){return fe(e)}function me(e){const t=new Set;if(Array.isArray(e))for(const o of e)for(const e of fe(o))t.add(e);else for(const o in e)for(const n of fe(e[o]))t.add(n);return[...t]}function ge(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):me(t);for(const t of e)o.push({...n,id:t,type:"DATA"})}else o.push(n);return o}function ye(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):pe(t);for(const t of e)o.push({...n,id:t,type:"DATA"})}else o.push(n);return o}const we=({text:e,expression:t})=>e.includes(t);class xe{constructor(e){this.rulesLookup=new O;for(const t of e){const e={by:s("by"in t?t.by:"FILTER"),condition:t.condition||we};this.rulesLookup.addRule(t.column,t.row,e)}}resolve(e,t,o,n,i,r,s,l){const d=this.rulesLookup.getRules(i,n);if(0===d.length)return"DATA"!==n.type||"DATA"!==i.type||!l.has('"FILTER"')||we({text:s,expression:l.get('"FILTER"')});let a={data:e,rows:t,columns:o,row:n,column:i,value:r,text:s};for(const e of d){if(!l.has(e.by))continue;const t={...a,expression:l.get(e.by)};if(!e.condition(t))return!1}return!0}}function be(e){return new xe(e)}function ve(e){return g(e,["value","text"])}function Ae(e){return g(e,["value","text","font","padding"])}function Re(e,t,o,n,i,r){if(e.every((e=>"number"==typeof e.width)))return e;const s=e=>{const r=e.width;if("number"==typeof r)return r;if(i.has(e.key)){const t=i.get(e.key);if("fit-once"===r&&!t.dataOnly)return t.width;if("fit-data-once"===r&&t.dataOnly)return t.width}let s=0;for(const i of t){if("DATA"!==i.type&&"fit-data-once"===r)continue;if("DATA"!==i.type&&"fit-data"===r)continue;const t=n.resolve(i,e),l=t.text,d=t.font,a=t.padding.left+t.padding.right,u=o.measureWidth(l,d)+a;s=Math.max(s,u)}return i.set(e.key,{width:s,dataOnly:"fit-data-once"===r}),s};for(const e of i.keys())r.has(e)||i.delete(e);return e.map((e=>({...e,width:s(e)})))}function Ee(e,t,o,n,i,r){if(t.every((e=>"number"==typeof e.height)))return t;const s=t=>{const r=t.height;if("number"==typeof r)return r;if(i.has(t.key)){const e=i.get(t.key);if("fit-once"===r&&!e.dataOnly)return e.height;if("fit-data-once"===r&&e.dataOnly)return e.height}let s=0;for(const i of e){if("DATA"!==i.type&&"fit-data-once"===r)continue;if("DATA"!==i.type&&"fit-data"===r)continue;const e=n.resolve(t,i),l=e.text,d=e.font,a=e.padding.top+e.padding.bottom,u=o.measureHeight(l,d)+a;s=Math.max(s,u)}return i.set(t.key,{height:s,dataOnly:"fit-data-once"===r}),s};for(const e of i.keys())r.has(e)||i.delete(e);return t.map((e=>({...e,height:s(e)})))}function ke(e){return new Set(e.map((e=>e.key)))}function Ce(e){return g(e,["value","text"])}function Ie(e,t){return null!=e.value&&(null==t.value||e.value<t.value)}function Te(e,t){return null!=e.value&&(null==t.value||e.value>t.value)}class Le{constructor(e){this.rulesLookup=new O;for(const t of e){const e=t.comparator?(e,o)=>t.comparator(e,o):(e,t)=>Ie(e,t),o=t.comparator?(e,o)=>!t.comparator(e,o):(e,t)=>Te(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"')?Ie:Te:null;if(n.length>1)throw new Error("Multiple sorting rules for the same cell");const i=n[0];return o.has(i.by)?"ASC"===o.get(i.by)?i.comparatorAsc:i.comparatorDesc:null}}function Be(e){return new Le(e)}function De(e,t,o){const n=new Map;for(const i of e){const e=s(i[t]),r=s(i[o]);n.has(e)||n.set(e,new Map),n.get(e).set(r,i.direction)}return n}function Me(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 Fe(e,t,o,n,i,r,l){if(0===e.length)return i;const d=De(e,"columnId","rowId"),a=new Map(r.map((e=>[e.key,e]))),u=e.map((e=>s(e.columnId))).filter((e=>a.has(e))).map((e=>a.get(e))).reverse();if(0===u.length)return i;for(const e of u){const s=[],a=[];for(const u of i){const c=t.resolve(e,u,d.get(e.key));if(!c){Me(a,s),s.push(u);continue}const h={entity:u,comparator:c,cell:o.resolve(n,i,r,u,e,l)};0!==a.length&&a[0].comparator!==c?(Me(a,s),a.push(h)):a.push(h)}Me(a,s),i=s}return i}function Se(e,t,o,n,i,r,l){if(0===e.length)return r;const d=De(e,"rowId","columnId"),a=new Map(i.map((e=>[e.key,e]))),u=e.map((e=>s(e.rowId))).filter((e=>a.has(e))).map((e=>a.get(e))).reverse();if(0===u.length)return r;for(const e of u){const s=[],a=[];for(const u of r){const c=t.resolve(u,e,d.get(e.key));if(!c){Me(a,s),s.push(u);continue}const h={entity:u,comparator:c,cell:o.resolve(n,i,r,e,u,l)};0!==a.length&&a[0].comparator!==c?(Me(a,s),a.push(h)):a.push(h)}Me(a,s),r=s}return r}const ze=5;function Ne(e,t,o,n,i,r,l,d){if(!n)return null;const a=t.get(s(n.columnId));if("HEADER"!==o.get(s(n.rowId)).type)return null;const u=le(i,r,l,d);if(!u)return null;const c=u.x;return c>=a.right-ze&&c<=a.right+ze?a.id:0===a.index||c<a.left-ze||c>a.left+ze?null:e[a.index-1].id}function Oe(e,t,o,n,i,r,l,d){if(!n)return null;const a=t.get(s(n.columnId)),u=o.get(s(n.rowId));if("HEADER"!==a.type)return null;const c=le(i,r,l,d);if(!c)return null;const h=c.y;return h>=u.bottom-ze&&h<=u.bottom+ze?u.id:0===u.index||h<u.top-ze||h>u.top+ze?null:e[u.index-1].id}function Ke(e){return e.map((e=>({columnId:"columnId"in e?e.columnId:"HEADER",rowId:"rowId"in e?e.rowId:"HEADER",direction:e.direction})))}function He(e){return e.map((e=>({columnId:"columnId"in e?e.columnId:"FILTER",rowId:"rowId"in e?e.rowId:"FILTER",expression:e.expression})))}function Pe(e,t){return function(e,t){const o=e.filter((e=>"DATA"===e.type)).map((e=>e.id));return t(o),o}(e,t)}function We(e){console.count("updateState");const t={...e.localOptions,...e.externalOptions},o=e.memory,n=e.state,i=e.element;function r(e,t,n){const i=o[e]&&o[e].dependencies;return i&&!n.some(((e,t)=>e!==i[t]))||(o[e]={value:t(...n),dependencies:n}),o[e].value}const s=window.devicePixelRatio,l=t.borderWidth/s,a=t.data,u=e.input.value,c=r("sortBy",Ke,[t.sortBy]),h=r("filters",He,[t.filters]),p=r("textResolver",Q,[]),m=r("dataFormatting",f,[t.formatting,t.dataSelector,c]),g=r("editedCellsAndFilters",v,[t.editedCells,h]),w=r("edition",R,[g]),A=r("invokedColumns",C,[t.columns,a]),E=r("invokedRows",C,[t.rows,a]),I=r("unfoldedColumns",ge,[A,a]),T=r("unfoldedRows",ye,[E,a]),F=r("unfilteredColumns",L,[I,t.pinnedLeft,t.pinnedRight,t.columnWidths]),S=r("unfilteredRows",B,[T,t.pinnedTop,t.pinnedBottom,t.rowHeights]),z=r("unfilteredColumnKeys",ke,[F]),N=r("unfilteredRowKeys",ke,[S]),O=r("filterFormatting",ve,[m]),K=r("filterFormattingRules",q,[O]),H=r("filteringRules",be,[t.filtering]),P=r("filteredColumns",U,[h,H,K,a,S,F,w]),W=r("filteredRows",j,[h,H,K,a,S,F,w]),$=r("sortingFormatting",Ce,[m]),V=r("sortingFormattingRules",q,[$]),G=r("sortingRules",Be,[t.sorting]),J=r("sortedColumns",Se,[c,G,V,a,W,P,w]),ue=r("sortedRows",Fe,[c,G,V,a,W,P,w]),fe=r("measureFormatting",Ae,[m]),pe=r("measureFormattingRules",q,[fe]),me=r("measureFormatResolver",Y,[pe,a,ue,J,w]),we=e.columnWidthCache,xe=e.rowHeightCache,Ie=r("measuredColumns",Re,[J,ue,p,me,we,z]),Te=r("measuredRows",Ee,[J,ue,p,me,xe,N]),Le=r("columns",D,[Ie,s,l]),De=r("rows",M,[Te,s,l]),Me=r("columnLookup",de,[Le]),ze=r("rowLookup",de,[De]),We=t.focusedCell,$e=r("sections",b,[Le,De]),qe=t.selectedCells,Ve=r("fixedSize",_,[$e.top.height,$e.bottom.height,$e.left.width,$e.right.width]),Ye=r("totalSize",X,[Le,De]),Ge=function(e,t,o,n,i,r){if(!t)return null;if(t.x<0||t.y<0||t.x>r.width||t.y>r.height)return null;const s=le(e,t,i,r),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 i=Math.floor((o+n)/2);if(t<e[i].topWithBorder)n=i-1;else{if(!(t>e[i].bottomWithBorder))return i;o=i+1}}return-1}(o,s.y),d=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 i=Math.floor((o+n)/2);if(t<e[i].leftWithBorder)n=i-1;else{if(!(t>e[i].rightWithBorder))return i;o=i+1}}return-1}(n,s.x);return-1===l||-1===d?null:{rowId:o[l].id,columnId:n[d].id}}(i,e.mousePosition,De,Le,Ve,Ye),je=e.resizingColumn||r("resizableColumn",Ne,[Le,Me,ze,Ge,i,e.mousePosition,Ve,Ye]),Ue=e.resizingRow||r("resizableRow",Oe,[De,Me,ze,Ge,i,e.mousePosition,Ve,Ye]),_e=r("highlightedCells",ae,[e.isMouseDown,!!je||!!Ue,We,Ge,Le,De,Me,ze]),Xe=r("selection",k,[qe]),Je=r("highlight",k,[_e]),Qe=r("renderFormatting",x,[m,Ge,We,Xe,Je,w,c,je,Ue,t.borderWidth]),Ze=r("renderFormattingRules",q,[Qe]),et=r("renderFormatResolver",Y,[Ze,a,De,Le,w]),tt=r("inputFormatting",y,[m]),ot=r("inputFormattingRules",q,[tt]),nt=r("inputFormatResolver",Y,[ot,a,De,Le,w]),it=r("editableCells",d,[qe,nt,Me,ze]),rt=r("inputPlacement",ce,[it,We,Me,ze,$e]),st=r("isTextValid",he,[u,it]),lt=function(e,t,o,n){const i={width:n.getBoundingClientRect().width,height:n.getBoundingClientRect().height},r={left:n.scrollLeft,top:n.scrollTop},s=e||se,l=ne({left:0,top:0,...t},o),d=ne({...r,...i},o),a=ee(l,te(d,ie)),u=ee(l,te(d,re));return Z(l,s)&&Z(s,a)?oe(s)>2*oe(u)?u:s:u}(n?.scrollRect,Ye,Ve,i);r("activeColumns",Pe,[Le,t.onActiveColumnsChange]),r("activeRows",Pe,[De,t.onActiveRowsChange]),e.state={options:t,devicePixelRatio:s,borderWidth:l,data:a,dataFormatting:m,edition:w,filteredColumns:P,filteredRows:W,columns:Le,rows:De,sections:$e,selectedCells:qe,selection:Xe,highlight:Je,hoveredCell:Ge,focusedCell:We,renderFormatting:Qe,renderFormatResolver:et,inputFormatting:tt,inputFormatResolver:nt,fixedSize:Ve,totalSize:Ye,textResolver:p,scrollRect:lt,highlightedCells:_e,inputPlacement:rt,columnLookup:Me,rowLookup:ze,text:u,isTextValid:st,resizableColumn:je,resizableRow:Ue}}function $e(e){if(!e.error)try{We(e)}catch(t){e.error=t}}function qe(e,t){const o=new E(t);return[...t,...e.filter((e=>!o.isIdSelected(e.rowId,e.columnId)))]}function Ve(e,t){const o=new E(t);return e.filter((e=>!o.isIdSelected(e.rowId,e.columnId)))}function Ye(e){const t=e.currentTarget.getBoundingClientRect();return{x:e.clientX-t.left,y:e.clientY-t.top}}function Ge(e){if("spread-grid-context"in e)return;console.log("initialize");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");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;"),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;");const n={externalOptions:{},state:null,memory:{},element:e,canvases:t,input:o,renderRequested:!1,mousePosition:null,isMouseDown:!1,columnWidthCache:new Map,rowHeightCache:new Map,requestNewRender:()=>{n.renderRequested||(n.renderRequested=!0,requestAnimationFrame((()=>{n.renderRequested=!1,$e(n),c(n)})))},addEventListener:(e,t,o)=>{e.addEventListener(t,(e=>{try{o(e)}catch(e){e.message=`[${t} event]: ${e.message}`,n.error=e,n.requestNewRender()}}))}};n.localOptions={data:[],columns:[{type:"DATA-BLOCK"}],rows:[{type:"HEADER"},{type:"DATA-BLOCK"}],formatting:[],filtering:[],sorting:[],dataSelector:({data:e,row:t,column:o})=>e[t.id][o.id],pinnedTop:0,pinnedBottom:0,pinnedLeft:0,pinnedRight:0,borderWidth:1,focusedCell:null,onFocusedCellChange:e=>{n.localOptions.focusedCell=e,n.requestNewRender()},selectedCells:[],onSelectedCellsChange:e=>{n.localOptions.selectedCells=e,n.requestNewRender()},highlightedCells:[],editedCells:[],onEditedCellsChange:e=>{n.localOptions.editedCells=e,n.requestNewRender()},filters:[],onFiltersChange:e=>{n.localOptions.filters=e,n.requestNewRender()},sortBy:[],onSortByChange:e=>{n.localOptions.sortBy=e,n.requestNewRender()},onCellClick:()=>{},onCustomCellClick:()=>{},columnWidths:[],onColumnWidthsChange:e=>{n.localOptions.columnWidths=e,n.requestNewRender()},rowHeights:[],onRowHeightsChange:e=>{n.localOptions.rowHeights=e,n.requestNewRender()},onActiveColumnsChange:()=>{},onActiveRowsChange:()=>{}},e["spread-grid-context"]=n;const i=e=>{o.value=e,o.dispatchEvent(new Event("input"))},r=e=>{const t=n.state.options.selectedCells,o=n.state.inputFormatResolver,r=n.state.columnLookup,s=n.state.rowLookup,l=n.state.text,a=n.state.isTextValid,u=n.state.options.onEditedCellsChange,c=n.state.options.onFiltersChange,h=d(t,o,r,s);if(""===l)return;if(!a)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})}))),u(qe(n.state.options.editedCells,m)),(e=>{c(qe(n.state.options.filters,e))})(p.map((e=>({...e.cell,expression:e.edit.parse({string:l})})))),e||i("")},a=e=>{const t=n.state.options.selectedCells,o=n.state.options.onEditedCellsChange,i=n.state.options.onFiltersChange,r=d(t,n.state.inputFormatResolver,n.state.columnLookup,n.state.rowLookup);var s;e&&!r.every((e=>e.edit.autoCommit))||(s=t,o(Ve(n.state.options.editedCells,s)),(e=>{i(Ve(n.state.options.filters,e))})(t))};n.addEventListener(e,"scroll",(e=>{n.requestNewRender()})),n.addEventListener(e,"mouseenter",(e=>{n.mousePosition=Ye(e),n.requestNewRender()})),n.addEventListener(e,"mousemove",(t=>{if(n.mousePosition=Ye(t),n.resizingColumn){const t=n.state.columnLookup.get(s(n.resizingColumn)),o=t.width,i=t.right,r=le(e,n.mousePosition,n.state.fixedSize,n.state.totalSize),l=Math.max(10,r.x-i+o),d=n.state.options.columnWidths.filter((e=>s(e.columnId)!==t.key)).concat([{columnId:t.id,width:l}]);n.state.options.onColumnWidthsChange(d)}if(n.resizingRow){const t=n.state.rowLookup.get(s(n.resizingRow)),o=t.height,i=t.bottom,r=le(e,n.mousePosition,n.state.fixedSize,n.state.totalSize),l=Math.max(10,r.y-i+o),d=n.state.options.rowHeights.filter((e=>s(e.rowId)!==t.key)).concat([{rowId:t.id,height:l}]);n.state.options.onRowHeightsChange(d)}n.requestNewRender()})),n.addEventListener(e,"mouseleave",(()=>{n.mousePosition=null,n.requestNewRender()})),n.addEventListener(e,"mousedown",(e=>{$e(n),i(""),n.isMouseDown=!0,n.mouseDownPosition=n.mousePosition,n.mouseDownCell=n.state.hoveredCell,n.state.resizableColumn&&(n.resizingColumn=n.state.resizableColumn),n.state.resizableRow&&(n.resizingRow=n.state.resizableRow),n.state.resizableColumn||n.state.resizableRow||n.state.options.onFocusedCellChange(n.state.hoveredCell),e.ctrlKey||n.state.options.onSelectedCellsChange([]),n.requestNewRender()})),n.addEventListener(e,"mouseup",(e=>{$e(n),n.isMouseDown=!1,n.resizingColumn=null,n.resizingRow=null,n.state.options.onSelectedCellsChange(qe(n.state.options.selectedCells,n.state.highlightedCells)),n.requestNewRender()})),n.addEventListener(e,"pointerdown",(e=>{n.element.setPointerCapture(e.pointerId)})),n.addEventListener(e,"pointerup",(e=>{n.element.releasePointerCapture(e.pointerId)})),n.addEventListener(e,"click",(e=>{$e(n);const t=n.state.hoveredCell,o=n.mouseDownCell;if(n.state.resizableColumn||n.state.resizableRow)return;if(null===t)return;if(s(t.columnId)!==s(o.columnId))return;if(s(t.rowId)!==s(o.rowId))return;const i=n.state.columnLookup.get(s(t.columnId)),r=n.state.rowLookup.get(s(t.rowId)),d=n.state.options.sortBy,a=n.state.inputFormatResolver.resolve(r,i);if(a.edit?.toggle){const e=function(e,t,o,n){const i=n.hasValueByKey(o.key,t.key)?n.getValueByKey(o.key,t.key):e.value,r=e.edit.toggle;return"function"==typeof r?r({value:i}):r[(r.indexOf(i)+1)%r.length]}(a,i,r,n.state.edition),o=l(i,r);"DATA"===o&&n.state.options.onEditedCellsChange(qe(n.state.options.editedCells,[{...t,value:e}])),"FILTER"===o&&n.state.options.onFiltersChange(qe(n.state.options.filters,[{...t,expression:e}]))}else if("DATA"===i.type&&"DATA"===r.type)n.state.options.onCellClick(n.state.hoveredCell);else if("CUSTOM"===i.type||"CUSTOM"===r.type)n.state.options.onCustomCellClick(n.state.hoveredCell);else if("HEADER"===i.type||"HEADER"===r.type){const t=function(e,t,o,n){function i(e){const n="columnId"in e?e.columnId:"HEADER",i="rowId"in e?e.rowId:"HEADER";return t.key===s(n)&&o.key===s(i)}const r=["ASC","DESC",void 0],l=e.find(i),d=r.indexOf(l?.direction),a=r[(d+1)%r.length],u=e.indexOf(l)===e.length-1;return[...!n||!u&&l?e.filter((e=>!function(e){const n="columnId"in e?e.columnId:"HEADER",i="rowId"in e?e.rowId:"HEADER";return"HEADER"===t.type&&t.key===s(n)||"HEADER"===o.type&&o.key===s(i)}(e))):e.filter((e=>!i(e))),...a?[{columnId:t.id,rowId:o.id,direction:a}]:[]]}(d,i,r,e.ctrlKey);n.state.options.onSortByChange(t),n.state.options.onSelectedCellsChange([])}})),n.addEventListener(e,"dblclick",(e=>{if($e(n),n.state.resizableColumn){const e=s(n.state.resizableColumn),t=n.state.options.columnWidths.filter((t=>s(t.columnId)!==e));n.state.options.onColumnWidthsChange(t),n.columnWidthCache.delete(e)}if(n.state.resizableRow){const e=s(n.state.resizableRow),t=n.state.options.rowHeights.filter((t=>s(t.rowId)!==e));n.state.options.onRowHeightsChange(t),n.rowHeightCache.delete(e)}const t=n.state.focusedCell;if(null===t)return;const r=s(t.columnId),l=s(t.rowId),d=n.state.columnLookup,a=n.state.rowLookup,u=n.state.inputFormatResolver;if(!d.has(r))return;if(!a.has(l))return;const c=d.get(r),h=a.get(l),f=u.resolve(h,c),p=f.text;f.edit&&(f.edit.toggle||(i(p),o?.select()))})),n.addEventListener(e,"focus",(()=>{o.parentElement&&o.focus({preventScroll:!0})})),n.addEventListener(e,"keydown",(e=>{$e(n);const t=n.state.focusedCell,o=n.state.columnLookup,l=n.state.rowLookup,d=n.state.options.selectedCells,u=n.state.options.onSelectedCellsChange,c=n.state.options.onFocusedCellChange,h=n.state.options.editedCells,f=n.state.options.onEditedCellsChange,p=n.state.columns,m=n.state.rows,g=n.state.text,y=n.state.inputFormatResolver,w=(e,t)=>{c(e),t.shiftKey?u(qe(d,[e])):u([e])},x=(e,n)=>{if(!t)return;const i=s(t.columnId);if(!o.has(i))return;const r=o.get(i).index,l=Math.max(0,Math.min(p.length-1,r+e));if(l===r)return;const d={rowId:t.rowId,columnId:p[l].id};w(d,n)},b=(e,o)=>{if(!t)return;const n=s(t.rowId);if(!l.has(n))return;const i=l.get(n).index,r=Math.max(0,Math.min(m.length-1,i+e));if(r===i)return;const d={rowId:m[r].id,columnId:t.columnId};w(d,o)},v=()=>{e.preventDefault(),e.stopPropagation()};switch(e.key){case"Escape":""!==g?i(""):d.length>1?u([t]):h.length>0?f([]):(c(null),u([]));break;case"Enter":r();break;case"ArrowUp":v(),b(e.ctrlKey?-m.length:-1,e);break;case"ArrowDown":v(),b(e.ctrlKey?m.length:1,e);break;case"ArrowLeft":v(),x(e.ctrlKey?-p.length:-1,e);break;case"ArrowRight":v(),x(e.ctrlKey?p.length:1,e);break;case"Delete":case"Backspace":a();break;case"c":(e=>{if(!e.ctrlKey)return;const t=function(e,t,o,n){const i=new Map(t.map((e=>[e.key,e]))),r=new Map(o.map((e=>[e.key,e]))),l=e.map((e=>({columnKey:s(e.columnId),rowKey:s(e.rowId)}))).filter((e=>i.has(e.columnKey)&&r.has(e.rowKey))),d=new Set(l.map((e=>e.columnKey))),a=new Set(l.map((e=>e.rowKey)));if(0===l.length)return"";const u=new E(e),c=Math.min(...l.map((e=>i.get(e.columnKey).index))),h=Math.max(...l.map((e=>i.get(e.columnKey).index))),f=Math.min(...l.map((e=>r.get(e.rowKey).index))),p=Math.max(...l.map((e=>r.get(e.rowKey).index))),m=[];for(let e=f;e<=p;e++){const i=o[e],r=i.key;if(a.has(r)){for(let e=c;e<=h;e++){const o=t[e],s=o.key;if(d.has(s)){if(u.isKeySelected(r,s)){const e=n.resolve(i,o).text;m.push(e)}e<h&&m.push("\t")}}e<p&&m.push("\n")}}return m.join("")}(d,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((()=>{n.requestNewRender()})).observe(e),n.addEventListener(o,"input",(e=>{$e(n),e.target.value?(r(!0),o.style.opacity=1,o.style.pointerEvents="auto"):(e.isTrusted&&a(!0),o.style.opacity=0,o.style.pointerEvents="none")})),n.addEventListener(o,"click",(e=>{e.stopPropagation()})),n.addEventListener(o,"dblclick",(e=>{e.stopPropagation()})),n.addEventListener(o,"mousedown",(e=>{e.stopPropagation()})),n.addEventListener(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(),n.requestNewRender());break;default:e.stopPropagation(),n.requestNewRender()}}))}function je(e){const[t,o]=(0,n.useState)(null);return t&&function(e,t){console.log("createGrid"),Ge(e);const o=e["spread-grid-context"];o.externalOptions=t,null===o.state?($e(o),c(o)):o.requestNewRender()}(t,e),n.default.createElement("div",{ref:o})}var Ue=o.A;export{Ue as default};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-spread-grid",
3
- "version": "0.0.51",
3
+ "version": "0.0.53",
4
4
  "description": "Fast grid for react applications",
5
5
  "author": "Tomasz Rewak <tomasz.rewak@gmail.com>",
6
6
  "license": "MIT",