UNPKG

@column-resizer/core

Version:

[![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/Runjuu/column-resizer/blob/main/LICENSE) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](#contributing) [![code style: prettier](https://i

2 lines (1 loc) 10.6 kB
"use strict";var ColumnResizerCore=(()=>{var T=Object.defineProperty;var G=Object.getOwnPropertyDescriptor;var P=Object.getOwnPropertyNames;var U=Object.prototype.hasOwnProperty;var $=(n,e)=>{for(var t in e)T(n,t,{get:e[t],enumerable:!0})},j=(n,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of P(e))!U.call(n,r)&&r!==t&&T(n,r,{get:()=>e[r],enumerable:!(i=G(e,r))||i.enumerable});return n};var J=n=>j(T({},"__esModule",{value:!0}),n);var Q={};$(Q,{BarActionType:()=>V,ColumnResizer:()=>w,ItemType:()=>I,Resizer:()=>p});var I=(t=>(t.BAR="BAR",t.SECTION="SECTION",t))(I||{}),V=(i=>(i.ACTIVATE="activate",i.MOVE="move",i.DEACTIVATE="deactivate",i))(V||{});var B={x:0,y:0};function D(n,e){return e?{x:n.x-e.x,y:n.y-e.y}:B}function g(){let n=[],e=0,t=0;return{collect(i){n.push(i),i.disableResponsive||(e+=1,t+=i.currentSize)},getResult(){return{sizeInfoArray:n,flexGrowRatio:e/t}}}}function a(n){return Number.isFinite(n)&&n>0}function b(n,e,t,i){let{collect:r,getResult:s}=g(),c=i?1:-1,l=C(n,e,c,t),o=C(n,-e,-c,t),m=e-l.remainingOffset,z=-e-o.remainingOffset;function x(S,F){S.forEach(r),r(t[n]),F.forEach(r)}if(m===-z)x(l.sizeInfoArray,o.sizeInfoArray);else if(Math.abs(m)<Math.abs(z)){let S=C(n,-m,-c,t);x(l.sizeInfoArray,S.sizeInfoArray)}else{let S=C(n,-z,c,t);x(S.sizeInfoArray,o.sizeInfoArray)}return s()}function C(n,e,t,i){let r=[],s=e;for(let o=n+t;l(o);o+=t)if(s){let{sizeInfo:m,remainingOffset:z}=W(s,i[o]);s=z,c(m)}else c(i[o]);function c(o){t===-1?r.unshift(o):r.push(o)}function l(o){return t===-1?o>=0:o<=i.length-1}return{sizeInfoArray:r,remainingOffset:s}}function W(n,e){if(e.isSolid)return{remainingOffset:n,sizeInfo:e};let{nextSize:t,remainingOffset:i}=X(e.currentSize+n,e);return{sizeInfo:{...e,currentSize:t},remainingOffset:i}}function X(n,{maxSize:e,minSize:t=0}){return n<t?{nextSize:t,remainingOffset:n-t}:a(e)&&n>e?{nextSize:e,remainingOffset:n-e}:{nextSize:n,remainingOffset:0}}var O={barIndex:-1,offset:0,type:"deactivate",originalCoordinate:B,defaultSizeInfoArray:[],sizeInfoArray:[],discard:!0,flexGrowRatio:0};function k(n){let e=O,t=new Set;return{dispatch(i){e=(()=>{let r={barIndex:i.barIndex,type:i.type};switch(i.type){case"activate":let{sizeInfoArray:s,flexGrowRatio:c}=n.getSizeRelatedInfo();return{...O,...r,originalCoordinate:i.coordinate,defaultSizeInfoArray:s,sizeInfoArray:s,flexGrowRatio:c};case"move":let l=n.calculateOffset(i.coordinate,e.originalCoordinate);return{...r,...b(i.barIndex,l,e.defaultSizeInfoArray,n.flipResizeMoveDirection),offset:l,originalCoordinate:e.originalCoordinate,defaultSizeInfoArray:e.defaultSizeInfoArray,discard:!1};case"deactivate":return O}})(),t.forEach(r=>r(e))},subscribe(i){return t.add(i),()=>t.delete(i)},unsubscribeAll(){t.clear()}}}function u(n,e,t){n?.dispatchEvent(new CustomEvent(e,{detail:t}))}var R=class{disposeFnSet=new Set;watchResizerEvent=(e,t,i)=>{e?.addEventListener(t,i);let r=()=>e?.removeEventListener(t,i);return this.disposeFnSet.add(r),r};reset=()=>{this.disposeFnSet.forEach(e=>e()),this.disposeFnSet.clear()}};var v=class{infoMap=new Map;items=[];update(e){this.infoMap.clear(),this.items.forEach(t=>t.destroy()),this.items=e,e.forEach((t,i)=>{this.infoMap.set(t.elm,{item:t,index:i})})}reset(){this.update([])}getItems(){return this.items}getItem(e){return this.infoMap.get(e)?.item??null}getItemIndex(e){return this.infoMap.get(e)?.index??null}};var E=!0;try{window.addEventListener("test",null,{get passive(){return E={passive:!1},!0}})}catch{}function A({size:n}){return a(n)}function H(n){let{disableResponsive:e}=n;return A(n)&&e===void 0?!0:!!e}function N(n){return!!n&&n in I}function M(n){return e=>({"data-item-type":n,"data-item-config":JSON.stringify(e)})}function K(n){return Array.from(n.childNodes).map(e=>{if(!(e instanceof HTMLElement))return null;let t=e.getAttribute("data-item-type");return N(t)?{type:t,elm:e}:null}).filter(e=>!!e)}function y({elm:n}){try{let e=JSON.parse(n.getAttribute("data-item-config")??"");return e&&typeof e=="object"?e:{}}catch{return{}}}function _(n){return n*2+1}function L(n){return n*2}var p=class{constructor(e){this.resizeResult=e}isDiscarded=!1;resizeSection(e,t){if(this.isDiscarded)return;let i=L(e),r=this.getSize(i);if(r>=0&&t.toSize>=0){let s=t.toSize-r;i===this.resizeResult.sizeInfoArray.length-1||t.preferMoveLeftBar?this.moveBar(e-1,{withOffset:-s}):this.moveBar(e,{withOffset:s})}}moveBar(e,t){this.isDiscarded||(this.resizeResult=b(_(e),t.withOffset,this.resizeResult.sizeInfoArray,void 0))}discard(){this.isDiscarded=!0}isSectionResized(e){let t=L(e);return"defaultSizeInfoArray"in this.resizeResult?this.getSize(t)!==this.resizeResult.defaultSizeInfoArray[t].currentSize:!1}isBarActivated(e){return"barIndex"in this.resizeResult?this.resizeResult.barIndex===_(e):!1}getSectionSize(e){return this.getSize(L(e))}getResult(){return{...this.resizeResult,discard:this.isDiscarded}}getTotalSize(){return this.resizeResult.sizeInfoArray.filter((e,t)=>e&&t%2===0).reduce((e,{currentSize:t})=>e+t,0)}getSize(e){let t=this.resizeResult.sizeInfoArray[e];return t?t.currentSize:-1}};var h=class{constructor(e,t,i){this.type=e;this.elm=t;this.getConfig=i;this._config=this.getConfig(),this._observer=new MutationObserver(()=>this._config=this.getConfig()),this._observer.observe(t,{attributes:!0,attributeFilter:["data-item-config"]})}_config;_observer;get config(){return this._config}destroy(){this._observer.disconnect()}};var d=class extends h{constructor(t,i){super("BAR",t.elm,()=>Y(t));this.dispatchBarAction=i;let r=[this.attachListener(this.elm,"mousedown","activate"),this.attachListener(document,"mousemove","move"),this.attachListener(document,"mouseup","deactivate"),this.attachListener(this.elm,"touchstart","activate",E),this.attachListener(document,"touchmove","move",E),this.attachListener(document,"touchend","deactivate"),this.attachListener(document,"touchcancel","deactivate")];this.destroy=()=>{super.destroy(),r.forEach(s=>s())}}static getStyle({size:t}){return{flex:`0 0 ${t}px`}}isActive=!1;isValidClick=!0;attachListener(t,i,r,s){let c=l=>{this.disableUserSelectIfResizing(l,r);let{clientX:o,clientY:m}=("touches"in l?l.touches[0]:l)||{clientX:0,clientY:0};this.triggerAction(this.elm,r,{x:o,y:m})};return t.addEventListener(i,c,s),()=>t.removeEventListener(i,c,s)}disableUserSelectIfResizing(t,i){(this.isActive||i==="activate")&&t.preventDefault()}triggerAction(t,i,r){(this.isActive||i==="activate")&&this.dispatchBarAction(t,{type:i,coordinate:r}),this.isActive&&this.isValidClick&&i==="deactivate"&&(this.isValidClick=!1,u(t,"bar:click",null)),this.updateStatusIfNeed(t,i),this.updateClickStatus(i)}updateStatusIfNeed(t,i){let r=s=>{this.isActive!==s&&(this.isActive=s,u(t,"bar:status-change",{isActive:s}))};i==="activate"?r(!0):i==="deactivate"&&r(!1)}updateClickStatus(t){this.isActive&&(t==="activate"?this.isValidClick=!0:t==="move"&&(this.isValidClick=!1))}};function Y(n){let{size:e}=y(n);return{size:a(e)?e:10}}var f=class extends h{static getStyle({maxSize:e,minSize:t},i){let r=s=>a(s)?`${s}px`:void 0;return{overflow:"hidden",[i?"maxHeight":"maxWidth"]:r(e),[i?"minHeight":"minWidth"]:r(t)}}sizeInfo=null;flexGrowRatio=0;constructor(e){super("SECTION",e.elm,()=>q(e)),this.updateStyle()}update({sizeInfo:e,flexGrowRatio:t}){this.sizeInfo=e,this.flexGrowRatio=t,this.updateStyle(),u(this.elm,"section:size-change",{size:e.currentSize})}updateStyle(){let{flexGrow:e,flexShrink:t,flexBasis:i}=this.getStyle();this.elm.style.flexGrow=`${e}`,this.elm.style.flexShrink=`${t}`,this.elm.style.flexBasis=`${i}px`}getStyle(){let e=a(this.config.size)?0:this.config.disableResponsive?1:0;if(this.sizeInfo){let{disableResponsive:t,currentSize:i}=this.sizeInfo;return{flexShrink:e,flexGrow:t?0:this.flexGrowRatio*i,flexBasis:t?i:0}}else{let t=this.config.size||this.config.defaultSize;return a(t)?{flexShrink:e,flexGrow:0,flexBasis:t}:{flexShrink:e,flexGrow:1,flexBasis:0}}}};function q(n){let{size:e,defaultSize:t,maxSize:i,minSize:r,disableResponsive:s}=y(n);return{size:a(e)?e:void 0,defaultSize:a(t)?t:void 0,maxSize:a(i)?i:void 0,minSize:a(r)?r:void 0,disableResponsive:!!s}}var w=class{constructor(e){this.config=e;this.barStore=k({calculateOffset:(t,i)=>D(t,i)[this.axis],getSizeRelatedInfo:()=>this.makeSizeInfos(),flipResizeMoveDirection:e.rtl&&!e.vertical})}styles={container:e=>({...e,display:"flex",flexDirection:this.direction}),section:(e,t)=>({...t,...f.getStyle(e,this.config.vertical)}),bar:(e,t)=>({...t,...d.getStyle(e)})};attributes={bar:M("BAR"),section:M("SECTION")};itemsCache=new v;eventHub=new R;container=null;barStore;get axis(){return this.config.vertical?"y":"x"}get dimension(){return this.config.vertical?"height":"width"}get direction(){return this.config.vertical?"column":"row"}get on(){return this.eventHub.watchResizerEvent}init(e){this.dispose(),this.container=e,e&&(this.itemsCache.update(K(e).map(t=>{switch(t.type){case"BAR":return new d(t,this.dispatchBarAction);case"SECTION":return new f(t)}})),this.initStyles(e,this.itemsCache.getItems()),this.sizeRelatedInfoChange(this.makeSizeInfos()),this.barStore.subscribe(t=>{this.monitorBarStatusChanges(t),this.sizeRelatedInfoChange(t)}))}dispose(){this.container=null,this.itemsCache.reset(),this.barStore.unsubscribeAll(),this.eventHub.reset()}getResizer(){return new p(this.makeSizeInfos())}applyResizer(e){this.sizeRelatedInfoChange(e.getResult())}dispatchBarAction=(e,t)=>{let i=this.itemsCache.getItemIndex(e);i&&this.barStore.dispatch({...t,barIndex:i})};sizeRelatedInfoChange(e){e.discard||(e=(()=>{if(typeof this.config.beforeApplyResizer=="function"){let t=new p(e);return this.config.beforeApplyResizer(t),t.getResult()}else return e})(),!e.discard&&e.sizeInfoArray.forEach(t=>{let i=this.itemsCache.getItem(t.elm);i instanceof f&&i.update({sizeInfo:t,flexGrowRatio:e.flexGrowRatio})}))}monitorBarStatusChanges({type:e}){switch(e){case"activate":return u(this.container,"column:activate",null);case"deactivate":return u(this.container,"column:after-resizing",null);default:return}}makeSizeInfos(){let{collect:e,getResult:t}=g();return this.itemsCache.getItems().forEach(i=>{i instanceof d&&e({elm:i.elm,disableResponsive:!0,isSolid:!0,currentSize:i.elm.getBoundingClientRect()[this.dimension]}),i instanceof f&&e({elm:i.elm,maxSize:i.config.maxSize,minSize:i.config.minSize,disableResponsive:H(i.config),isSolid:A(i.config),currentSize:i.elm.getBoundingClientRect()[this.dimension]})}),t()}initStyles(e,t){Object.assign(e.style,this.styles.container()),t.forEach(i=>{i instanceof d&&Object.assign(i.elm.style,this.styles.bar(i.config)),i instanceof f&&Object.assign(i.elm.style,this.styles.section(i.config))})}};return J(Q);})();