UNPKG

@progress/kendo-react-grid

Version:

React Data Grid (Table) provides 100+ ready-to-use data grid features. KendoReact Grid package

9 lines (8 loc) 5.14 kB
/** * @license *------------------------------------------------------------------------------------------- * Copyright © 2026 Progress Software Corporation. All rights reserved. * Licensed under commercial license. See LICENSE.md in the package root for more information *------------------------------------------------------------------------------------------- */ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("../utils/index.js"),m=1,x=20;class S{constructor(a){this.columns=[],this.columnsState=[],this.resizable=!1,this.isRtl=!1,this.setIsRtl=s=>{this.isRtl=s},this.initWidths=()=>{var c;const s=((c=this.colGroupMain)==null?void 0:c.children)||[],h=p.getFlatColumnsState(this.columnsState),o=this.columns.filter(e=>{var l;return!((l=e.children)!=null&&l.length)});for(let e=0;e<s.length;e++){const l=o[e];let t="";const i=h.find(d=>d.id===o[e].id);i&&(t=this.applyWidthConstraints(i,l)),this.colGroups.forEach(d=>{d.children[e].width=t})}},this.dragHandler=(s,h,o,c)=>{const e=s.originalEvent;c||(e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation());const l=o.closest("th");if(!l||!l)return;const t=l.clientWidth;let i=t;if(this.isRtl?i+=o.getBoundingClientRect().right-o.offsetWidth/2-s.clientX:i+=s.clientX-o.getBoundingClientRect().left-o.offsetWidth/2,!c&&Math.abs(i-t)<1)return;this.fixateInitialWidths(l.parentElement.clientWidth),this.setWidths(h,Math.floor(i)/t);const d=this.columns.filter(n=>!n.children.length).findIndex(n=>n.id===h.id);this.onResize(d,t,i,e,c,this.columnsState,h.id)},this.dblClickHandler=(s,h)=>{const o=this.columns.filter(r=>h.indexOf(r.id)>-1),c=p.getFlatColumnsState(this.columnsState);if(!this.colGroupMain||!o.length)return;const e={},l=o;for(;l.length>0;){const r=l.pop();if(!r)break;r.children.length?l.push(...r.children):e[r.id]=r}const t=this.columns.filter(r=>!r.children.length),i=[];t.forEach((r,u)=>{e[r.id]&&i.push(u)});const d=this.colGroups,n=d.map(r=>r.parentElement);n.forEach(r=>r.classList.add("k-autofitting"));const f=[];d.forEach(r=>{i.forEach(u=>{r.children[u]&&(r.children[u].width="",f[u]=Math.max(f[u]||0,r.children[u].offsetWidth+m))})}),d.forEach(r=>{i.forEach(u=>{if(r.children[u]){r.children[u].width=f[u]+"px";const g=c.find(W=>W.id===t[u].id);g&&(g.width=f[u])}})}),n.forEach(r=>r.classList.remove("k-autofitting")),this.onResize(i[0],0,0,s,!0,this.columnsState,h[0])},this.updateColElements=s=>{const h=this.columns.filter(c=>!c.hidden&&!c.children.length);let o=1e-10;for(let c=0;c<s.length;c++){const e=s[c],l=h.findIndex(f=>f.id===e.id),t=parseFloat((e.width||0).toString()),i=Math.floor(t);o+=t-i;const d=i+Math.floor(o);o-=Math.floor(o);const n=h.find(f=>f.id===e.id);if(!n)return;this.colGroups.forEach(f=>{if(f.children[l]){const r=parseInt(f.children[l].width,10);f.children[l].width=d+"px",this.updateNextLockedCol(f.parentElement,n,r-d)}})}},this.onResize=a}get colGroups(){return[this.colGroupMain,this.colGroupHeader,this.colGroupFooter,this.colGroupStickyHeader,this.colGroupStickyFooter,this.colGroupPinnedTop,this.colGroupPinnedBottom].filter(Boolean)}applyWidthConstraints(a,s,h=1){if(!a.width)return a.width||"";const o=a.width.toString();if(o.includes("%")){const f=parseFloat(o)*h,r=Math.max(0,Math.min(100,f));return a.width=r+"%",a.width}let e=parseFloat(o)*h;const l=s.minResizableWidth===void 0?10:s.minResizableWidth,t=s==null?void 0:s.minWidth,i=t!==void 0?Math.max(l,t):l,d=s==null?void 0:s.maxWidth;return e<i&&(e=i),d!==void 0&&e>d&&(e=d),a.width=e,e}fixateInitialWidths(a){var l;let s=0;const h=((l=this.colGroupMain)==null?void 0:l.children)||[];for(let t=0;t<h.length;t++)h[t].width?a-=h[t].clientWidth:s++;if(s===0)return;const o=Math.floor(a/s),c=p.getFlatColumnsState(this.columnsState),e=this.columns.filter(t=>!t.children.length);for(let t=0;t<h.length;t++){const i=h[t],d=i.width?i.clientWidth:o,n=c.find(f=>f.id===e[t].id);n&&(n.width=d.toString()),this.colGroups.forEach(f=>{f.children[t].width=d})}}setWidths(a,s){const h=p.getFlatColumnsState(this.columnsState),o=this.columns.findIndex(t=>t.id===a.id),c=[];let e=a.children.filter(t=>!t.hidden).length;for(let t=o+1;t<this.columns.length&&!(e<=0);t++){const i=this.columns[t];i.children.length?e+=i.children.filter(d=>!d.hidden).length:c.push(i),e--}c.length===0&&c.push(a);const l=[];c.forEach(t=>{const i=h.find(d=>d.id===t.id);i&&(this.applyWidthConstraints(i,t,s),l.push(i))}),this.updateColElements(l)}updateNextLockedCol(a,s,h){const o=s.index,c=this.colGroupMain.parentElement.closest(".k-grid"),e=c==null?void 0:c.clientWidth,l=this.columns.filter(t=>t.locked).map(t=>parseInt(t.width+"",10)).reduce((t,i)=>t+i,0);!s.locked||e<=l+x||this.columns.forEach(t=>{if(t!=null&&t.locked&&h){const i=a==null?void 0:a.querySelectorAll('[aria-colindex="'+t.ariaColumnIndex+'"]');i==null||i.forEach(d=>{const n=d.style;this.isRtl?(t.index>o&&n&&n.right&&(n.right=parseInt(n.right,10)-h+"px"),t.index<o&&n&&n.left&&(n.left=parseInt(n.left,10)-h+"px")):(t.index>o&&n&&n.left&&(n.left=parseInt(n.left,10)-h+"px"),t.index<o&&n&&n.right&&(n.right=parseInt(n.right,10)-h+"px"))})}})}}exports.ColumnResize=S;