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