export function initCellResize( el: HTMLElement, ev: PointerEvent, downXRef: { value: number }, startWRef: { value: number } ) { ev.preventDefault(); ev.stopPropagation(); const cStart = Number(el.dataset.cStart); if (!cStart) return null; const span = Number(el.getAttribute('colspan')) || 1; const col = Math.max(0, cStart + span - 1 - 1); downXRef.value = ev.clientX; startWRef.value = el.getBoundingClientRect().width; const target = ev.currentTarget as HTMLElement; target.setPointerCapture(ev.pointerId); el.dispatchEvent( new CustomEvent('nile-column-resize', { detail: { col, widthPx: startWRef.value }, bubbles: true, composed: true, }) ); el.dispatchEvent( new CustomEvent('nile-resize-start', { bubbles: true, composed: true }) ); return { target, col }; } export function cellResizeMove( el: HTMLElement, col: number, startW: number, downX: number, e: PointerEvent ) { const widthPx = Math.max(40, Math.round(startW + (e.clientX - downX))); el.dispatchEvent( new CustomEvent('nile-column-resize', { detail: { col, widthPx }, bubbles: true, composed: true, }) ); } export function cellResizeDone( el: HTMLElement, col: number, ev: PointerEvent, target: HTMLElement, move: (e: PointerEvent) => void ) { target.releasePointerCapture(ev.pointerId); target.removeEventListener('pointermove', move); el.dispatchEvent( new CustomEvent('nile-resize-end', { bubbles: true, composed: true, detail: { col: col } }) ); }