UNPKG

@revolist/revogrid

Version:

Virtual reactive data grid spreadsheet component - RevoGrid.

4 lines 6.48 kB
/*! * Built by Revolist OU ❤️ */ import{proxyCustomElement as t,HTMLElement as e,createEvent as s,h as r,Host as o,transformTag as i}from"@stencil/core/internal/client";import{j as n,i as a,D as c}from"./data.store.js";import{c as l}from"./consts.js";import"./platform.js";import{g as d}from"./dimension.helpers.js";import{H as m,d as f}from"./revogr-viewport-scroll2.js";import{d as u}from"./revogr-data2.js";import{b as h}from"./revogr-header2.js";import{d as v}from"./vnode-converter.js";const b=(t,e,s=50)=>(null==e?void 0:e.size)||Math.max(10*(t.toString().length+1),s);function p(t,e,s,r,o){const i=d(o,t),n=C(e);let a;if(n){let t=i.itemIndex-(n.itemIndex||0);t&&(a=O(Math.abs(t),Object.assign(Object.assign({positiveDirection:t>-1},o),e)))}const c=function(t,e,s){return Math.min(t+(s.end-s.start),e)}(r,o.realSize,i);if(a){const t=g(i,s,c,a,o);t.length&&j(a.items,t,a)}if(!a){const t=w({firstItemStart:i.start,firstItemIndex:i.itemIndex,origSize:o.originItemSize,maxSize:c,maxCount:s,sizes:o.sizes});a={items:t,start:0,end:t.length-1}}return a}function j(t,e,s){t.splice(s.end+1,0,...e),s.start>=s.end&&(s.start!==s.end||0!==s.start)&&(s.start+=e.length),s.end+=e.length}function g(t,e,s,r,o){const i=y(r);return w({sizes:o.sizes,firstItemStart:i.end,firstItemIndex:i.itemIndex+1,origSize:o.originItemSize,maxSize:s-(i.end-t.start),maxCount:e})}function w(t,e=0){const s=[];let r=t.firstItemIndex,o=e;for(;o<=t.maxSize&&r<t.maxCount;){const e=z(r,t.sizes,t.origSize);s.push({start:t.firstItemStart+o,end:t.firstItemStart+o+e,itemIndex:r,size:e}),o+=e,r++}return s}function O(t,e){var s,r;const o=[...e.items],i=o.length;let n={start:e.start,end:e.end};if(!(t>i)){if(e.positiveDirection){let s=y(e),r=n.start;const a=r+t;for(;r<a;r++){const t=s.itemIndex+1,a=z(t,e.sizes,e.originItemSize);if(s.end+a>e.realSize)break;let c=r%i;if(!o[c])throw new Error("incorrect index");o[c]=s={start:s.end,end:s.end+a,itemIndex:t,size:a},n.start++,n.end=c}}else{let a=C(e);const c=n.end;for(let l=0;l<t;l++){const t=(null!==(s=null==a?void 0:a.itemIndex)&&void 0!==s?s:0)-1,d=z(t,e.sizes,e.originItemSize);let m=c-l;if(m=(m<0?i+m:m)%i,!o[m]){console.error("incorrect index");break}const f=null!==(r=null==a?void 0:a.start)&&void 0!==r?r:0;o[m]=a={start:f-d,end:f,itemIndex:t,size:d},n.start=m,n.end--}}return Object.assign({items:o},{start:(n.start<0?i+n.start:n.start)%i,end:(n.end<0?i+n.end:n.end)%i})}}function z(t,e,s=0){return"number"==typeof(null==e?void 0:e[t])?e[t]:s}function x(t,e,s,r){return!(!s||!r)&&(t>=s.start&&t<=s.end||t>s.end&&r.end===e)}function S(t,e,s,r){var o;return!!s&&e+t>(null!==(o=null==r?void 0:r.end)&&void 0!==o?o:0)}function C(t){return t.items[t.start]}function y(t){return t.items[t.end]}function I(t,e,s,r){const o=[...t],i=o.length;let n=r,a=0,c=e;if(!i)return[];for(;a<i;){const t=o[c];t.start=n,t.size=s,t.end=t.start+s,n=t.end,c++,a++,c===i&&(c=0)}return o}class k{get lastCoordinate(){return this.lastKnownScroll}set lastCoordinate(t){this.lastKnownScroll=t}constructor(t){this.type=t,this.lastKnownScroll=0,this.store=n({items:[],start:0,end:0,virtualSize:0,realCount:0,clientSize:0})}setViewPortCoordinate(t,e,s=!1){const r=this.store.get("virtualSize");if(!r)return;const o=1*e.originItemSize,i=r+2*o;let n=0;e.realSize>r&&(n=e.realSize-r-o);let a,c=t;c<0?c=0:c>n&&(c=n),this.lastCoordinate=c,c-=o,c=c<0?0:c<n?c:n,a=s?{items:[],start:0,end:0}:this.getItems();const l=C(a),d=y(a);let m={};if(x(c,e.realSize,l,d)){if(S(c,i,l,d)){const t=[...a.items],s=g(l,this.store.get("realCount"),i+c-l.start,a,{sizes:e.sizes,originItemSize:e.originItemSize});if(s.length){const e={start:this.store.get("start"),end:this.store.get("end")};j(t,s,e),m=Object.assign(Object.assign(Object.assign({},m),{items:[...t]}),e),this.setViewport(Object.assign({},m))}}}else m=Object.assign(Object.assign({},m),p(c,a,this.store.get("realCount"),i,e)),this.setViewport(Object.assign({},m))}setOriginalSizes(t){const e=this.store.get("items");e.length&&a(this.store,{items:I(e,this.store.get("start"),t,this.lastCoordinate)})}getItems(){return{items:this.store.get("items"),start:this.store.get("start"),end:this.store.get("end")}}setViewport(t){"number"!=typeof t.realCount&&"number"!=typeof t.virtualSize||(t=Object.assign(Object.assign({},t),{items:t.items||[]})),a(this.store,t)}}const E=t=>(e,{rowIndex:s})=>t+s,D=t(class extends e{constructor(t){super(),!1!==t&&this.__registerHost(),this.scrollViewport=s(this,"scrollview",3),this.elementToScroll=s(this,"ref",3),this.jobsBeforeRender=[]}render(){const t=[],e=new k("colPinStart");let s=1;for(let o of this.dataPorts){const i=o.dataStore.get("items").length,n=new c(o.type,Object.assign({},o.dataStore.state)),a=new c("colPinStart"),l=Object.assign({cellTemplate:E(s)},this.rowHeaderColumn);a.updateData([l]),t.push(r("revogr-data",Object.assign({},o,{colType:"rowHeaders",jobsBeforeRender:this.jobsBeforeRender,rowClass:this.rowClass,dataStore:n.store,colData:a.store,viewportCol:e.store,readonly:!0,range:!1}))),s+=i}const i=b(s,this.rowHeaderColumn);e.setViewport({realCount:1,virtualSize:0,items:[{size:i,start:0,end:i,itemIndex:0}]});const n={contentHeight:this.height,contentWidth:0,style:{minWidth:`${i}px`},colType:"rowHeaders",ref:t=>this.elementToScroll.emit(t),onScrollviewport:t=>this.scrollViewport.emit(t.detail)},a=Object.assign(Object.assign({},this.headerProp),{groups:[],colData:"object"==typeof this.rowHeaderColumn?[this.rowHeaderColumn]:[],viewportCol:e.store,canResize:!1,type:l,slot:m});return r(o,{class:{[l]:!0},key:l},r("revogr-viewport-scroll",Object.assign({key:"c401e82e02e4bdb7afb25f2f49c6776f2e115c81"},n,{"row-header":!0}),r("revogr-header",Object.assign({key:"3c73d27bd96e23a34fc0cf47eda4d2e65751df98"},a)),t))}},[0,"revogr-row-headers",{height:[2],dataPorts:[16],headerProp:[16],rowClass:[1,"row-class"],resize:[4],rowHeaderColumn:[16],additionalData:[8,"additional-data"],jobsBeforeRender:[16]}]);function H(){"undefined"!=typeof customElements&&["revogr-row-headers","revogr-data","revogr-header","revogr-viewport-scroll","vnode-html"].forEach((t=>{switch(t){case"revogr-row-headers":customElements.get(i(t))||customElements.define(i(t),D);break;case"revogr-data":customElements.get(i(t))||u();break;case"revogr-header":customElements.get(i(t))||h();break;case"revogr-viewport-scroll":customElements.get(i(t))||f();break;case"vnode-html":customElements.get(i(t))||v()}}))}export{D as R,k as V,g as a,w as b,S as c,C as d,y as e,b as f,p as g,H as h,x as i,O as r,I as s,j as u}