@progress/kendo-vue-grid
Version:
9 lines (8 loc) • 7.66 kB
JavaScript
/**
* @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 k=require("../utils/main.js"),F=1,S=20;class x{constructor(p){this.columns=[],this.columnsState=[],this.resizable=!1,this.isRtl=!1,this.setIsRtl=r=>{this.isRtl=r},this.initWidths=()=>{var a;const r=((a=this.colGroupMain)==null?void 0:a.children)||[],c=k.getFlatColumnsState(this.columnsState),h=this.columns.filter(o=>{var d;return!((d=o.children)!=null&&d.length)});for(let o=0;o<r.length;o++){const d=r[o],t=h[o];let e="";const n=c.find(i=>i.id===h[o].id);n&&(e=this.applyWidthConstraints(n,t)),d.width=e,this.colGroupHeader&&(this.colGroupHeader.children[o].width=e),this.colGroupFooter&&(this.colGroupFooter.children[o].width=e),this.colGroupStickyHeader&&(this.colGroupStickyHeader.children[o].width=e),this.colGroupStickyFooter&&(this.colGroupStickyFooter.children[o].width=e),this.colGroupPinnedTop&&(this.colGroupPinnedTop.children[o].width=e),this.colGroupPinnedBottom&&(this.colGroupPinnedBottom.children[o].width=e)}},this.dragHandler=(r,c,h,a)=>{const o=r.originalEvent;a||(o.preventDefault(),o.stopPropagation(),o.stopImmediatePropagation());const d=h.closest("th");if(!d)return;const t=d.clientWidth;let e=t;if(this.isRtl?e+=h.getBoundingClientRect().right-h.offsetWidth/2-r.clientX:e+=r.clientX-h.getBoundingClientRect().left-h.offsetWidth/2,!a&&Math.abs(e-t)<1)return;this.fixateInitialWidths(d.parentElement.clientWidth),this.setWidths(c,Math.floor(e)/t);const n=this.columns.filter(i=>!i.children.length).findIndex(i=>i.id===c.id);this.onResize(n,t,e,o,a,this.columnsState,c.id)},this.dblClickHandler=(r,c)=>{const h=this.columns.filter(l=>c.indexOf(l.id)>-1),a=k.getFlatColumnsState(this.columnsState);if(!this.colGroupMain||!h.length)return;const o={},d=h;for(;d.length>0;){const l=d.pop();if(!l)break;l.children.length?d.push(...l.children):o[l.id]=l}const t=this.columns.filter(l=>!l.children.length),e=[];t.forEach((l,s)=>{o[l.id]&&e.push(s)});const n=[this.colGroupMain.parentElement],i=[this.colGroupMain];this.colGroupHeader&&(n.push(this.colGroupHeader.parentElement),i.push(this.colGroupHeader)),this.colGroupFooter&&(n.push(this.colGroupFooter.parentElement),i.push(this.colGroupFooter)),this.colGroupStickyHeader&&(n.push(this.colGroupStickyHeader.parentElement),i.push(this.colGroupStickyHeader)),this.colGroupStickyFooter&&(n.push(this.colGroupStickyFooter.parentElement),i.push(this.colGroupStickyFooter)),this.colGroupPinnedTop&&(n.push(this.colGroupPinnedTop.parentElement),i.push(this.colGroupPinnedTop)),this.colGroupPinnedBottom&&(n.push(this.colGroupPinnedBottom.parentElement),i.push(this.colGroupPinnedBottom)),n.forEach(l=>l.classList.add("k-autofitting"));const f=[];i.forEach(l=>{e.forEach(s=>{l.children[s]&&(l.children[s].width="",f[s]=Math.max(f[s]||0,l.children[s].offsetWidth+F))})}),i.forEach(l=>{e.forEach(s=>{if(l.children[s]){l.children[s].width=f[s]+"px";const w=a.find(g=>g.id===t[s].id);w&&(w.width=f[s])}})}),n.forEach(l=>l.classList.remove("k-autofitting")),this.onResize(e[0],0,0,r,!0,this.columnsState,c[0])},this.updateColElements=r=>{var a,o,d,t,e,n,i;const c=this.columns.filter(f=>!f.hidden&&!f.children.length);let h=1e-10;for(let f=0;f<r.length;f++){const l=r[f],s=c.findIndex(u=>u.id===l.id),w=parseFloat((l.width||0).toString()),g=Math.floor(w);h+=w-g;const G=g+Math.floor(h);h-=Math.floor(h);const m=c.find(u=>u.id===l.id);if(!m)return;if((a=this.colGroupMain)!=null&&a.children[s]){const u=parseInt(this.colGroupMain.children[s].width,10);this.colGroupMain.children[s].width=G+"px",this.updateNextLockedCol(this.colGroupMain.parentElement,m,u-G)}if((o=this.colGroupHeader)!=null&&o.children[s]){const u=parseInt(this.colGroupHeader.children[s].width,10);this.colGroupHeader.children[s].width=G+"px",this.updateNextLockedCol(this.colGroupHeader.parentElement,m,u-G)}if((d=this.colGroupFooter)!=null&&d.children[s]){const u=parseInt(this.colGroupFooter.children[s].width,10);this.colGroupFooter.children[s].width=G+"px",this.updateNextLockedCol(this.colGroupFooter.parentElement,m,u-G)}if((t=this.colGroupStickyHeader)!=null&&t.children[s]){const u=parseInt(this.colGroupStickyHeader.children[s].width,10);this.colGroupStickyHeader.children[s].width=G+"px",this.updateNextLockedCol(this.colGroupStickyHeader.parentElement,m,u-G)}if((e=this.colGroupStickyFooter)!=null&&e.children[s]){const u=parseInt(this.colGroupStickyFooter.children[s].width,10);this.colGroupStickyFooter.children[s].width=G+"px",this.updateNextLockedCol(this.colGroupStickyFooter.parentElement,m,u-G)}if((n=this.colGroupPinnedTop)!=null&&n.children[s]){const u=parseInt(this.colGroupPinnedTop.children[s].width,10);this.colGroupPinnedTop.children[s].width=G+"px",this.updateNextLockedCol(this.colGroupPinnedTop.parentElement,m,u-G)}if((i=this.colGroupPinnedBottom)!=null&&i.children[s]){const u=parseInt(this.colGroupPinnedBottom.children[s].width,10);this.colGroupPinnedBottom.children[s].width=G+"px",this.updateNextLockedCol(this.colGroupPinnedBottom.parentElement,m,u-G)}}},this.onResize=p}applyWidthConstraints(p,r,c=1){var i;if(!p.width)return p.width||"";const h=p.width.toString();if(h.includes("%")){const l=parseFloat(h)*c,s=Math.max(0,Math.min(100,l));return p.width=s+"%",p.width}let o=parseFloat(h)*c;const d=(i=r.minResizableWidth)!=null?i:10,t=r.minWidth,e=t!==void 0?Math.max(d,t):d,n=r==null?void 0:r.maxWidth;return o<e&&(o=e),n!==void 0&&o>n&&(o=n),p.width=o,o}fixateInitialWidths(p){var d;let r=0;const c=((d=this.colGroupMain)==null?void 0:d.children)||[];for(let t=0;t<c.length;t++)c[t].width?p-=c[t].clientWidth:r++;if(r===0)return;const h=Math.floor(p/r),a=k.getFlatColumnsState(this.columnsState),o=this.columns.filter(t=>!t.children.length);for(let t=0;t<c.length;t++){const e=c[t],n=e.width?e.clientWidth:h;e.width=n;const i=a.find(f=>f.id===o[t].id);i&&(i.width=n.toString()),this.colGroupHeader&&(this.colGroupHeader.children[t].width=n),this.colGroupFooter&&(this.colGroupFooter.children[t].width=n),this.colGroupStickyHeader&&(this.colGroupStickyHeader.children[t].width=n),this.colGroupStickyFooter&&(this.colGroupStickyFooter.children[t].width=n)}}setWidths(p,r){const c=k.getFlatColumnsState(this.columnsState),h=this.columns.findIndex(t=>t.id===p.id),a=[];let o=p.children.filter(t=>!t.hidden).length;for(let t=h+1;t<this.columns.length&&!(o<=0);t++){const e=this.columns[t];e.children.length?o+=e.children.filter(n=>!n.hidden).length:a.push(e),o--}a.length===0&&a.push(p);const d=[];a.forEach(t=>{const e=c.find(n=>n.id===t.id);e&&(this.applyWidthConstraints(e,t,r),d.push(e))}),this.updateColElements(d)}updateNextLockedCol(p,r,c){const h=r.index,a=this.colGroupMain.parentElement.closest(".k-grid"),o=a==null?void 0:a.clientWidth,d=this.columns.filter(t=>t.locked).map(t=>parseInt(t.width+"",10)).reduce((t,e)=>t+e,0);!r.locked||o<=d+S||this.columns.forEach(t=>{if(t!=null&&t.locked&&c){const e=p==null?void 0:p.querySelectorAll('[aria-colindex="'+t.ariaColumnIndex+'"]');e==null||e.forEach(n=>{const i=n.style;this.isRtl?(t.index>h&&(i!=null&&i.right)&&(i.right=parseInt(i.right,10)-c+"px"),t.index<h&&(i!=null&&i.left)&&(i.left=parseInt(i.left,10)-c+"px")):(t.index>h&&(i!=null&&i.left)&&(i.left=parseInt(i.left,10)-c+"px"),t.index<h&&(i!=null&&i.right)&&(i.right=parseInt(i.right,10)-c+"px"))})}})}}exports.ColumnResize=x;