vxe-pc-ui
Version:
A vue based PC component library
1 lines • 14.7 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _vue=require("vue"),_comp=require("../../ui/src/comp"),_ui=require("../../ui"),_vn=require("../../ui/src/vn"),_dom=require("../../ui/src/dom"),_utils=require("../../ui/src/utils"),_log=require("../../ui/src/log"),_xeUtils=_interopRequireDefault(require("xe-utils"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}var _default=exports.default=(0,_comp.defineVxeComponent)({name:"VxeSplitter",props:{width:[Number,String],height:[Number,String],vertical:{type:Boolean,default:()=>(0,_ui.getConfig)().splitter.vertical},border:{type:Boolean,default:()=>(0,_ui.getConfig)().splitter.border},padding:{type:Boolean,default:()=>(0,_ui.getConfig)().splitter.padding},resize:{type:Boolean,default:()=>(0,_ui.getConfig)().splitter.resize},items:Array,itemConfig:Object,barConfig:Object,resizeConfig:Object,actionConfig:Object,size:{type:String,default:()=>(0,_ui.getConfig)().splitter.size||(0,_ui.getConfig)().size}},emits:["action-dblclick","action-click","toggle-expand","resize-start","resize-drag","resize-end"],setup(c,e){const{emit:r,slots:a}=e;var t=_xeUtils.default.uniqueId();const A=(0,_vue.ref)(),p=(0,_vue.ref)(),M=(0,_vue.ref)(),d=(0,_ui.useSize)(c)["computeSize"],P=(0,_vue.reactive)({staticItems:[],itemList:[],barWidth:0,barHeight:0}),g={wrapperWidth:0,wrapperHeight:0},D=(0,_vue.computed)(()=>Object.assign({},(0,_ui.getConfig)().splitter.itemConfig,c.itemConfig)),s=(0,_vue.computed)(()=>Object.assign({},(0,_ui.getConfig)().splitter.barConfig,c.barConfig)),q=(0,_vue.computed)(()=>Object.assign({},(0,_ui.getConfig)().splitter.resizeConfig,c.resizeConfig)),u=(0,_vue.computed)(()=>Object.assign({},(0,_ui.getConfig)().splitter.actionConfig,c.actionConfig)),h=(0,_vue.computed)(()=>P.itemList.filter(e=>e.isExpand)),v=(0,_vue.computed)(()=>{var e=c["vertical"];const n=[];let o=0,a=0;return P.itemList.forEach(e?e=>{var{renderHeight:t,resizeHeight:i,foldHeight:r,isExpand:s,height:l}=e,s=s?r||i||t:0;l||n.push(e),o+=s}:e=>{var{renderWidth:t,resizeWidth:i,foldWidth:r,isExpand:s,width:l}=e,s=s?r||i||t:0;l||n.push(e),a+=s}),{autoItems:n,heightCount:o,heightRatio:o/100,widthCount:a,widthRatio:a/100}}),m=(0,_vue.computed)(()=>{var{width:e,height:t}=s.value,i={};return t&&(i.height=(0,_dom.toCssUnit)(t)),e&&(i.width=(0,_dom.toCssUnit)(e)),i}),i={computeItemOpts:D,computeBarOpts:s,computeActionOpts:u},l={refElem:A},f={xID:t,props:c,context:e,reactData:P,internalData:g,getRefMaps:()=>l,getComputeMaps:()=>i},j=(e,t,i)=>{r(e,(0,_ui.createEvent)(i,{$splitter:f},t))},H=(e,t)=>e&&(_xeUtils.default.isString(e)&&(e=a[e]||null),_xeUtils.default.isFunction(e))?(0,_vn.getSlotVNs)(e(t)):[],x=(e,t,i)=>{var r=c["vertical"],s="SPLIT_TOP_ACTION",l="SPLIT_BOTTOM_ACTION",n="SPLIT_LEFT_ACTION",o="SPLIT_RIGHT_ACTION";let a="";return(a=r?i?t.isExpand?l:s:e.isExpand?s:l:i?t.isExpand?o:n:e.isExpand?n:o)?(0,_ui.getIcon)()[a]:""};const n=(e,t)=>{var i=P["staticItems"],{showPrevButton:r,showNextButton:s}=u.value;const l={isExpand:!0,renderWidth:0,resizeWidth:0,foldWidth:0,renderHeight:0,resizeHeight:0,foldHeight:0};return P.itemList=e.map(e=>(e.showAction&&(0,_log.warnLog)("vxe.error.removeProp",["[splitter] show-action"]),e.slots&&_xeUtils.default.each(e.slots,e=>{_xeUtils.default.isFunction(e)||a[e]||(0,_log.errLog)("vxe.error.notSlot",["[splitter] "+e])}),Object.assign({},t?null:l,e,t?l:null,{id:_xeUtils.default.uniqueId()}))),i.length&&(0,_log.errLog)("vxe.error.errConflicts",["<vxe-splitter-panel ...>","items"]),(r||s)&&2<P.itemList.length&&(0,_log.errLog)("vxe.error.errConflicts",["action-config.showPrevButton | action-config.showNextButton","Only supports 2 item"]),R()},o=e=>n(e||[],!1);const _=t=>{var i=P["itemList"];let r=-1,s=null,l=null,n=null;for(let e=0;e<i.length;e++){var o=i[e];if(o.name===t){r=e,s=o,l=i[e-1]||null,n=i[e+1]||null;break}}return{index:r,currItem:s,prevItem:l,nextItem:n}},b=(e,t)=>{var i,r,e=_(e);return e&&({currItem:e,prevItem:i,nextItem:r}=e,e)&&(t?!e.isExpand:e.isExpand)&&(r?r.isExpand&&z(null,e,r,!1):i&&i.isExpand&&z(null,i,e,!0)),(0,_vue.nextTick)()};const R=()=>(0,_vue.nextTick)().then(()=>{var e=c["vertical"],t=P["itemList"],i=A.value,r=p.value;if(i){var s=i.clientWidth,i=i.clientHeight;if(s&&i){r&&(P.barWidth=r.offsetWidth,P.barHeight=r.offsetHeight);const l=s-(e?0:P.barWidth*(t.length-1)),n=i-(e?P.barHeight*(t.length-1):0);r=D.value;const o=_xeUtils.default.toNumber(r.minWidth),a=_xeUtils.default.toNumber(r.minHeight),d=[];if(e){let r=0;if(t.forEach(e=>{var t=e["height"];let i=0;t?(i=(0,_dom.isScale)(t)?n*_xeUtils.default.toNumber(t)/100:_xeUtils.default.toNumber(t),e.renderHeight=i):d.push(e),r+=i}),d.length){const u=(n-r)/d.length;d.forEach(e=>{e.renderHeight=Math.max(_xeUtils.default.toNumber((0,_utils.getGlobalDefaultConfig)(e.minHeight,a)),u)})}}else{let r=0;if(t.forEach(e=>{var t=e["width"];let i=0;t?(i=(0,_dom.isScale)(t)?l*_xeUtils.default.toNumber(t)/100:_xeUtils.default.toNumber(t),e.renderWidth=i):d.push(e),r+=i}),d.length){const h=(l-r)/d.length;d.forEach(e=>{e.renderWidth=Math.max(_xeUtils.default.toNumber((0,_utils.getGlobalDefaultConfig)(e.minWidth,o)),h)})}}g.wrapperWidth=l,g.wrapperHeight=n}}}),E=e=>{const{resize:t,vertical:p}=c;var i=P["itemList"];if(t){e.preventDefault();var r=e.currentTarget,s=r.parentElement;const m=A.value;if(m){const f=s.previousElementSibling,x=s.nextElementSibling;if(f&&x){const l=f.getAttribute("itemid"),n=x.getAttribute("itemid"),_=i.find(e=>e.id===l),b=i.find(e=>e.id===n);if(_&&b){const E=m.getBoundingClientRect();s=r.getBoundingClientRect();const z=M.value,C=z?z.children[0]:null;i=D.value;const w=q.value["immediate"];var r=_xeUtils.default.toNumber(i.minWidth),i=_xeUtils.default.toNumber(i.minHeight),g=Math.ceil(s.width-(e.clientX-s.left)),s=Math.ceil(e.clientY-s.top);const y=f.offsetWidth,H=x.offsetWidth;var v=_xeUtils.default.toNumber(_?(0,_utils.getGlobalDefaultConfig)(_.minWidth,r):r),r=_xeUtils.default.toNumber(b?(0,_utils.getGlobalDefaultConfig)(b.minWidth,r):r);const I=f.offsetLeft+v-g,W=x.offsetLeft+x.offsetWidth-r-g,U=e.clientX-E.left;let l=-1,n=0,o=0,a=U;const L=f.offsetHeight,N=x.offsetHeight;v=_xeUtils.default.toNumber(_?(0,_utils.getGlobalDefaultConfig)(_.minHeight,i):i),r=_xeUtils.default.toNumber(b?(0,_utils.getGlobalDefaultConfig)(b.minHeight,i):i);const S=f.offsetTop+v+s,T=x.offsetTop+x.offsetHeight-r+s,k=e.clientY-E.top;let d=-1,u=0,h=0,c=k;const B=i=>{if(z){var r=C?C.children[0]:null,s=C?C.children[1]:null;if(p){let e=0,t=(r&&(d<0?r.style.display="none":(r.textContent=Math.floor(u)+"px",r.style.display="block",e=r.offsetWidth)),s&&(d<0?(s.textContent=Math.floor(h)+"px",s.style.display="block",e=s.offsetWidth):s.style.display="none"),Math.max(1,i.clientX-E.left-e/2));t>E.width-e-1&&(t=E.width-e-1),z.style.left="0",z.style.top=c+"px",C&&(C.style.left=t+"px")}else{let e=0,t=(r&&(l<0?r.style.display="none":(r.textContent=Math.floor(n)+"px",r.style.display="block",e=r.offsetHeight)),s&&(l<0?(s.textContent=Math.floor(o)+"px",s.style.display="block",e=s.offsetHeight):s.style.display="none"),Math.max(1,i.clientY-E.top-e/2));t>E.height-e-1&&(t=E.height-e-1),z.style.top="0",z.style.left=a+"px",C&&(C.style.top=t+"px")}}},O=e=>{p?((c=(c=e.clientY-E.top)<S?S:c)>T&&(c=T),d=c-k,u=L+d,h=N-d):((a=(a=e.clientX-E.left)<I?I:a)>W&&(a=W),l=a-U,n=y+l,o=H-l),w&&(p?(f.style.height=(0,_dom.toCssUnit)(u),x.style.height=(0,_dom.toCssUnit)(h)):(f.style.width=(0,_dom.toCssUnit)(n),x.style.width=(0,_dom.toCssUnit)(o))),z&&B(e),j("resize-drag",{prevItem:_,nextItem:b,offsetHeight:d,offsetWidth:l},e)};document.onmousemove=e=>{e.preventDefault(),O(e)},document.onmouseup=e=>{document.onmousemove=null,document.onmouseup=null,z&&(z.style.display=""),p?(_.resizeHeight=u,b.resizeHeight=h):(_.resizeWidth=n,b.resizeWidth=o),(0,_dom.removeClass)(m,"is--drag"),j("resize-end",{prevItem:_,nextItem:b,offsetHeight:d,offsetWidth:l},e),R()},z&&(z.style.display="block",B(e)),O(e),(0,_dom.addClass)(m,"is--drag"),j("resize-start",{prevItem:_,nextItem:b},e)}}}}},z=(e,t,i,r)=>{var s=c["vertical"];let l=!1,n=t;r?(n=i,l=!i.isExpand,i.isExpand=l):(l=!t.isExpand,t.isExpand=l),s?t.isExpand&&i.isExpand?(t.foldHeight=0,i.foldHeight=0):t.isExpand?(i.foldHeight=0,t.foldHeight=(t.resizeHeight||t.renderHeight)+(i.resizeHeight||i.renderHeight)):(t.foldHeight=0,i.foldHeight=(t.resizeHeight||t.renderHeight)+(i.resizeHeight||i.renderHeight)):t.isExpand&&i.isExpand?(t.foldWidth=0,i.foldWidth=0):t.isExpand?(i.foldWidth=0,t.foldWidth=(t.resizeWidth||t.renderWidth)+(i.resizeWidth||i.renderWidth)):(t.foldWidth=0,i.foldWidth=(t.resizeWidth||t.renderWidth)+(i.resizeWidth||i.renderWidth)),e&&j("toggle-expand",{prevItem:t,nextItem:i,expanded:l,item:n},e),R()},C=e=>{var t=P["itemList"],i=u.value,r=e.currentTarget.parentElement.parentElement;const s=r.previousElementSibling.getAttribute("itemid");var l=t.find(e=>e.id===s);const n=r.nextElementSibling.getAttribute("itemid");r=t.find(e=>e.id===n);"dblclick"===i.trigger&&l&&r&&r.isExpand&&z(e,l,r,!1),j("action-dblclick",{prevItem:l,nextItem:r},e)},w=e=>{var t=P["itemList"],i=u.value,r=e.currentTarget.parentElement.parentElement;const s=r.previousElementSibling.getAttribute("itemid");var l=t.find(e=>e.id===s);const n=r.nextElementSibling.getAttribute("itemid");r=t.find(e=>e.id===n);"dblclick"!==i.trigger&&l&&r&&r.isExpand&&z(e,l,r,!1),j("action-click",{prevItem:l,nextItem:r},e)},y=e=>{var t=P["itemList"],i=u.value,r=e.currentTarget.parentElement.parentElement;const s=r.previousElementSibling.getAttribute("itemid");var l=t.find(e=>e.id===s);const n=r.nextElementSibling.getAttribute("itemid");r=t.find(e=>e.id===n);"dblclick"===i.trigger&&l&&r&&l.isExpand&&z(e,l,r,!0),j("action-dblclick",{prevItem:l,nextItem:r},e)},U=e=>{var t=P["itemList"],i=u.value,r=e.currentTarget.parentElement.parentElement;const s=r.previousElementSibling.getAttribute("itemid");var l=t.find(e=>e.id===s);const n=r.nextElementSibling.getAttribute("itemid");r=t.find(e=>e.id===n);"dblclick"!==i.trigger&&l&&r&&l.isExpand&&z(e,l,r,!0),j("action-click",{prevItem:l,nextItem:r},e)},L=()=>{R()};t={dispatchEvent:j,setItemExpand:b,toggleItemExpand:e=>{var t=_(e);if(t){t=t["currItem"];if(t)return b(e,!t.isExpand)}return(0,_vue.nextTick)()},getItemExpand:e=>{e=_(e);if(e){e=e["currItem"];if(e)return e.isExpand}return!1},recalculate:R,reset:()=>{var e=P["itemList"];return e.forEach(e=>{e.isExpand=!0,e.foldHeight=0,e.foldWidth=0,e.resizeHeight=0,e.resizeWidth=0}),(0,_vue.nextTick)()},loadItem:o,reloadItem:e=>n(e||[],!0)};Object.assign(f,t,{});const N=(e,t)=>{var{border:i,resize:r,vertical:s}=c,l=P["itemList"],n=m.value,o=u.value,a=o["direction"],d=_xeUtils.default.isBoolean(o.showPrevButton)?o.showPrevButton:l.some(e=>e.showAction),o=_xeUtils.default.isBoolean(o.showNextButton)?o.showNextButton:"next"===a&&l.some(e=>e.showAction),a=q.value["immediate"];return(0,_vue.h)("div",{class:["vxe-splitter-panel-handle",s?"is--vertical":"is--horizontal",a?"is-resize--immediate":"is-resize--lazy",{"is--resize":r,"is--border":i}]},[(0,_vue.h)("div",{class:"vxe-splitter-panel-handle-bar",style:n,onMousedown:E}),2===l.length?(0,_vue.h)("div",{class:"vxe-splitter-panel-action-btn-wrapper"},[d&&t.isExpand?(0,_vue.h)("div",{class:"vxe-splitter-panel-action-btn",onDblclick:C,onClick:w},[(0,_vue.h)("i",{class:x(e,t,!1)})]):(0,_ui.renderEmptyElement)(f),o&&e.isExpand?(0,_vue.h)("div",{class:"vxe-splitter-panel-action-btn",onDblclick:y,onClick:U},[(0,_vue.h)("i",{class:x(e,t,!0)})]):(0,_ui.renderEmptyElement)(f)]):(0,_ui.renderEmptyElement)(f)])};const I=(0,_vue.ref)(0);(0,_vue.watch)(()=>c.items?c.items.length:-1,()=>{I.value++}),(0,_vue.watch)(()=>c.items,()=>{I.value++}),(0,_vue.watch)(I,()=>{o(c.items||[])}),(0,_vue.watch)(()=>P.staticItems,e=>{var{showPrevButton:t,showNextButton:i}=u.value;c.items&&c.items.length&&(0,_log.errLog)("vxe.error.errConflicts",["<vxe-splitter-panel ...>","items"]),P.itemList=e||[],(t||i)&&2<P.itemList.length&&(0,_log.errLog)("vxe.error.modelConflicts",["[splitter] action-config.showPrevButton | action-config.showNextButton","<vxe-splitter-panel ...> Only supports 2 panel"]),P.itemList.forEach(e=>{e.showAction&&(0,_log.warnLog)("vxe.error.removeProp",["[splitter] showAction"])}),R()});let W;return(0,_vue.onMounted)(()=>{(0,_vue.nextTick)(()=>{R()});var e=A.value,e=(e&&(W=_ui.globalResize.create(()=>{R()})).observe(e),u.value);e.direction&&(0,_log.errLog)("vxe.error.delProp",["[splitter] action-config.direction","action-config.showPrevButton | action-config.showNextButton"]),_ui.globalEvents.on(f,"resize",L)}),(0,_vue.onUnmounted)(()=>{W&&W.disconnect(),_ui.globalEvents.off(f,"resize")}),(0,_vue.onActivated)(()=>{R()}),c.items&&o(c.items),(0,_vue.provide)("$xeSplitter",f),f.renderVN=()=>{var{vertical:e,width:t,height:i}=c,r=d.value,{immediate:s,showTip:l}=q.value,n=a.default,o={};return i&&(o.height=(0,_dom.toCssUnit)(i)),t&&(o.width=(0,_dom.toCssUnit)(t)),(0,_vue.h)("div",{ref:A,class:["vxe-splitter",e?"is--vertical":"is--horizontal",s?"is-resize--immediate":"is-resize--lazy",{["size--"+r]:r}],style:o},[(0,_vue.h)("div",{class:"vxe-splitter-slots"},n?n({}):[]),(()=>{const{border:m,padding:f,resize:x,vertical:_}=c,b=P["itemList"],E=d.value;const z=q.value["immediate"],C=h.value,w=v.value["autoItems"],y=[];return b.forEach((e,t)=>{var{id:i,name:r,slots:s,renderHeight:l,resizeHeight:n,foldHeight:o,renderWidth:a,resizeWidth:d,foldWidth:u,isExpand:h}=e,t=b[t+1],s=s?s.default:null,c={};let p=h?u||d||a:0,g=h?o||n||l:0,v=(1===w.length&&(_?e.height||(g=0):e.width||(p=0)),!0);_?g&&1<C.length&&(v=!1,c.height=(0,_dom.toCssUnit)(g)):p&&1<C.length&&(v=!1,c.width=(0,_dom.toCssUnit)(p)),y.push((0,_vue.h)("div",{itemid:i,class:["vxe-splitter-panel",_?"is--vertical":"is--horizontal",z?"is-resize--immediate":"is-resize--lazy",{["size--"+E]:E,"is--resize":x,"is--padding":f,"is--border":m,"is--height":g,"is--width":p,"is--visible":h,"is--hidden":!h,"is--fill":h&&v}],style:c},[(0,_vue.h)("div",{itemid:i,class:"vxe-splitter-panel--wrapper"},[(0,_vue.h)("div",{class:"vxe-splitter-panel--inner"},s?H(s,{name:r,isExpand:h}):[])])])),t&&y.push(N(e,t))}),(0,_vue.h)("div",{class:"vxe-splitter-wrapper"},y)})(),(0,_vue.h)("div",{ref:M,class:["vxe-splitter--resizable-splitter-tip",e?"is--vertical":"is--horizontal",s?"is-resize--immediate":"is-resize--lazy"]},l?[(0,_vue.h)("div",{class:"vxe-splitter--resizable-splitter-tip-number"},[(0,_vue.h)("div",{class:"vxe-splitter--resizable-splitter-number-prev"}),(0,_vue.h)("div",{class:"vxe-splitter--resizable-splitter-number-next"})])]:[]),(0,_vue.h)("div",{class:"vxe-splitter--render-vars"},[(0,_vue.h)("div",{ref:p,class:"vxe-splitter--handle-bar-info"})])])},f},render(){return this.renderVN()}});