vxe-pc-ui
Version:
A vue based PC component library
1 lines • 9.88 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:"VxeSplit",props:{width:[Number,String],height:[Number,String],vertical:{type:Boolean,default:()=>(0,_ui.getConfig)().split.vertical},border:{type:Boolean,default:()=>(0,_ui.getConfig)().split.border},padding:{type:Boolean,default:()=>(0,_ui.getConfig)().split.padding},resize:{type:Boolean,default:()=>(0,_ui.getConfig)().split.resize},items:Array,itemConfig:Object,barConfig:Object,actionConfig:Object},emits:["action-dblclick","action-click","toggle-expand","resize-start","resize-drag","resize-end"],setup(E,e){const{emit:s,slots:l}=e;var t=_xeUtils.default.uniqueId();const H=(0,_vue.ref)(),U=(0,_vue.reactive)({staticItems:[],itemList:[]}),h={wrapperWidth:0,wrapperHeight:0},W=(0,_vue.computed)(()=>Object.assign({},(0,_ui.getConfig)().split.itemConfig,E.itemConfig)),r=(0,_vue.computed)(()=>Object.assign({},(0,_ui.getConfig)().split.barConfig,E.barConfig)),a=(0,_vue.computed)(()=>Object.assign({},(0,_ui.getConfig)().split.actionConfig,E.actionConfig)),I=(0,_vue.computed)(()=>{return"next"===a.value.direction}),n=(0,_vue.computed)(()=>U.itemList.filter(e=>e.isVisible)),o=(0,_vue.computed)(()=>{var e=E["vertical"];const n=[];let a=0,o=0;return U.itemList.forEach(e?e=>{var{renderHeight:t,resizeHeight:i,foldHeight:s,isVisible:r,height:l}=e,r=r?s||i||t:0;l||n.push(e),a+=r}:e=>{var{renderWidth:t,resizeWidth:i,foldWidth:s,isVisible:r,width:l}=e,r=r?s||i||t:0;l||n.push(e),o+=r}),{autoItems:n,heightCount:a,heightRatio:a/100,widthCount:o,widthRatio:o/100}}),d=(0,_vue.computed)(()=>{var{width:e,height:t}=r.value,i={};return t&&(i.height=(0,_dom.toCssUnit)(t)),e&&(i.width=(0,_dom.toCssUnit)(e)),i}),i={computeItemOpts:W,computeBarOpts:r,computeActionOpts:a,computeIsFoldNext:I},u={refElem:H},w={xID:t,props:E,context:e,reactData:U,internalData:h,getRefMaps:()=>u,getComputeMaps:()=>i},C=(e,t,i)=>{s(e,(0,_ui.createEvent)(i,{$split:w},t))},N=(e,t)=>e&&(_xeUtils.default.isString(e)&&(e=l[e]||null),_xeUtils.default.isFunction(e))?(0,_vn.getSlotVNs)(e(t)):[];const c=(e,t)=>{var i=U["staticItems"];const s={isVisible:!0,isExpand:!0,renderWidth:0,resizeWidth:0,foldWidth:0,renderHeight:0,resizeHeight:0,foldHeight:0};return U.itemList=e.map(e=>(e.slots&&_xeUtils.default.each(e.slots,e=>{_xeUtils.default.isFunction(e)||l[e]||(0,_log.errLog)("vxe.error.notSlot",[e])}),Object.assign({},t?null:s,e,t?s:null,{id:_xeUtils.default.uniqueId()}))),i.length&&(0,_log.errLog)("vxe.error.errConflicts",["<vxe-split-pane ...>","items"]),O()},m=e=>c(e||[],!1);const O=()=>(0,_vue.nextTick)().then(()=>{var e=E["vertical"],t=U["itemList"],i=H.value;if(i){const r=i.clientWidth,l=i.clientHeight;if(r&&l){i=W.value;const n=_xeUtils.default.toNumber(i.minWidth),a=_xeUtils.default.toNumber(i.minHeight),o=[];if(e){let s=0;if(t.forEach(e=>{var t=e["height"];let i=0;t?(i=(0,_dom.isScale)(t)?l*_xeUtils.default.toNumber(t)/100:_xeUtils.default.toNumber(t),e.renderHeight=i):o.push(e),s+=i}),o.length){const d=(l-s)/o.length;o.forEach(e=>{e.renderHeight=Math.max(_xeUtils.default.toNumber((0,_utils.getGlobalDefaultConfig)(e.minHeight,a)),d)})}}else{let s=0;if(t.forEach(e=>{var t=e["width"];let i=0;t?(i=(0,_dom.isScale)(t)?r*_xeUtils.default.toNumber(t)/100:_xeUtils.default.toNumber(t),e.renderWidth=i):o.push(e),s+=i}),o.length){const u=(r-s)/o.length;o.forEach(e=>{e.renderWidth=Math.max(_xeUtils.default.toNumber((0,_utils.getGlobalDefaultConfig)(e.minWidth,n)),u)})}}h.wrapperWidth=r,h.wrapperHeight=l}}}),g=e=>{const{resize:t,vertical:s}=E;var i=U["itemList"];if(t){e.preventDefault();var r=e.currentTarget.parentElement;const a=H.value;if(a){const o=r.getAttribute("itemid");r=_xeUtils.default.findIndexOf(i,e=>e.id===o);const d=i[r];if(d&&d.isExpand){const u=I.value;var l=W.value,n=_xeUtils.default.toNumber(l.minWidth),l=_xeUtils.default.toNumber(l.minHeight);const h=i[r+(u?1:-1)];i=h?a.querySelector(`.vxe-split-pane[itemid="${h.id}"]`):null,r=d?a.querySelector(`.vxe-split-pane[itemid="${d.id}"]`):null;const c=i?i.clientWidth:0,m=r?r.clientWidth:0,g=i?i.clientHeight:0,f=r?r.clientHeight:0,v=_xeUtils.default.toNumber(h?(0,_utils.getGlobalDefaultConfig)(h.minWidth,n):n),p=_xeUtils.default.toNumber((0,_utils.getGlobalDefaultConfig)(d.minWidth,n)),_=_xeUtils.default.toNumber(h?(0,_utils.getGlobalDefaultConfig)(h.minHeight,l):l),x=_xeUtils.default.toNumber((0,_utils.getGlobalDefaultConfig)(d.minHeight,l)),b=e.clientX,z=e.clientY;(0,_dom.addClass)(a,"is--drag"),document.onmousemove=e=>{var t,i;e.preventDefault(),s?0<(t=u?z-e.clientY:e.clientY-z)?h&&f-t>=x&&(i=f-t,h.resizeHeight=g+t,d.resizeHeight=i,C("resize-drag",{item:d,name:d.name,offsetHeight:t,resizeHeight:i,offsetWidth:0,resizeWidth:0},e)):h&&g+t>=_&&(i=f-t,h.resizeHeight=g+t,d.resizeHeight=i,C("resize-drag",{item:d,name:d.name,offsetHeight:t,resizeHeight:i,offsetWidth:0,resizeWidth:0},e)):0<(t=u?b-e.clientX:e.clientX-b)?h&&m-t>=p&&(i=m-t,h.resizeWidth=c+t,d.resizeWidth=i,C("resize-drag",{item:d,name:d.name,offsetHeight:0,resizeHeight:0,offsetWidth:t,resizeWidth:i},e)):h&&c+t>=v&&(i=m-t,h.resizeWidth=c+t,d.resizeWidth=i,C("resize-drag",{item:d,name:d.name,offsetHeight:0,resizeHeight:0,offsetWidth:t,resizeWidth:i},e))},document.onmouseup=e=>{document.onmousemove=null,(document.onmouseup=null,_dom.removeClass)(a,"is--drag"),C("resize-end",{item:d,name:d.name,resizeHeight:d.resizeHeight,resizeWidth:d.resizeWidth},e),O()},C("resize-start",{item:d,name:d.name},e)}}}},f=e=>{if(H.value){var t=E["vertical"],i=U["itemList"],s=I.value;const n=e.currentTarget.parentElement.getAttribute("itemid");var r=_xeUtils.default.findIndexOf(i,e=>e.id===n),l=i[r],i=i[r+(s?1:-1)];l&&({showAction:r,isExpand:s}=l,r)&&(t?i&&(i.isVisible=!s,i.foldHeight=0,l.isExpand=!s,l.isVisible=!0,l.foldHeight=s?(i.resizeHeight||i.renderHeight)+(l.resizeHeight||l.renderHeight):0):i&&(i.isVisible=!s,i.foldWidth=0,l.isExpand=!s,l.isVisible=!0,l.foldWidth=s?(i.resizeWidth||i.renderWidth)+(l.resizeWidth||l.renderWidth):0),C("toggle-expand",{item:l,name:l.name,targetItem:i,targetName:i?i.name:"",expanded:l.isExpand},e),O())}},v=e=>{var t=U["itemList"],i=a.value;const s=e.currentTarget.parentElement.getAttribute("itemid");t=t[_xeUtils.default.findIndexOf(t,e=>e.id===s)];"dblclick"===i.trigger&&f(e),C("action-dblclick",{item:t,name:t?t.name:""},e)},p=e=>{var t=U["itemList"],i=a.value;const s=e.currentTarget.parentElement.getAttribute("itemid");t=t[_xeUtils.default.findIndexOf(t,e=>e.id===s)];"dblclick"!==i.trigger&&f(e),C("action-click",{item:t,name:t?t.name:""},e)},_=()=>{O()};t={dispatchEvent:C,recalculate:O,reset:()=>{var e=U["itemList"];return e.forEach(e=>{e.isExpand=!0,e.isVisible=!0,e.foldHeight=0,e.foldWidth=0,e.resizeHeight=0,e.resizeWidth=0}),(0,_vue.nextTick)()},loadItem:m,reloadItem:e=>c(e||[],!0)};Object.assign(w,t,{});const L=e=>{var t=d.value,i=a.value,s=I.value,{id:r,isExpand:l,showAction:n}=e;return(0,_vue.h)("div",{itemid:r,class:["vxe-split-pane-handle",s?"to--next":"to--prev"]},[(0,_vue.h)("div",{class:"vxe-split-pane-handle-bar",style:t,onMousedown:g}),n?(0,_vue.h)("span",{class:"vxe-split-pane-action-btn",onDblclick:v,onClick:p},[(0,_vue.h)("i",{class:(l?i.openIcon:i.closeIcon)||(e=>{var t=E["vertical"],{showAction:e,isExpand:i}=e,s=I.value,r="SPLIT_TOP_ACTION",l="SPLIT_BOTTOM_ACTION",n="SPLIT_LEFT_ACTION",a="SPLIT_RIGHT_ACTION";if(e){let e="";if(e=s?t?i?l:r:i?a:n:t?i?r:l:i?n:a)return(0,_ui.getIcon)()[e]}return""})(e)})]):(0,_ui.renderEmptyElement)(w)])};const x=(0,_vue.ref)(0);(0,_vue.watch)(()=>E.items?E.items.length:-1,()=>{x.value++}),(0,_vue.watch)(()=>E.items,()=>{x.value++}),(0,_vue.watch)(x,()=>{m(E.items||[])}),(0,_vue.watch)(()=>U.staticItems,e=>{E.items&&E.items.length&&(0,_log.errLog)("vxe.error.errConflicts",["<vxe-split-pane ...>","items"]),U.itemList=e,O()});let b;return(0,_vue.onMounted)(()=>{(0,_vue.nextTick)(()=>{O()});var e=H.value;e&&(b=_ui.globalResize.create(()=>{O()})).observe(e),_ui.globalEvents.on(w,"resize",_)}),(0,_vue.onUnmounted)(()=>{b&&b.disconnect(),_ui.globalEvents.off(w,"resize")}),(0,_vue.onActivated)(()=>{O()}),E.items&&m(E.items),(0,_vue.provide)("$xeSplit",w),w.renderVN=()=>{var{vertical:e,width:t,height:i}=E,s=l.default,r={};return i&&(r.height=(0,_dom.toCssUnit)(i)),t&&(r.width=(0,_dom.toCssUnit)(t)),(0,_vue.h)("div",{ref:H,class:["vxe-split",e?"is--vertical":"is--horizontal"],style:r},[(0,_vue.h)("div",{class:"vxe-split-slots"},s?s({}):[]),(()=>{const{border:v,padding:p,resize:_,vertical:x}=E,b=U["itemList"],z=n.value,H=o.value["autoItems"],W=I.value,C=[];return b.forEach((e,t)=>{var{id:i,name:s,slots:r,renderHeight:l,resizeHeight:n,foldHeight:a,renderWidth:o,resizeWidth:d,foldWidth:u,isVisible:h,isExpand:c}=e,r=r?r.default:null,m={};let g=h?u||d||o:0,f=h?a||n||l:0;1===H.length&&(x?e.height||(f=0):e.width||(g=0)),x?f&&(m.height=1===z.length?"100%":(0,_dom.toCssUnit)(f)):g&&(m.width=1===z.length?"100%":(0,_dom.toCssUnit)(g)),C.push((0,_vue.h)("div",{itemid:i,class:["vxe-split-pane",x?"is--vertical":"is--horizontal",{"is--resize":_,"is--padding":p,"is--border":v,"is--height":f,"is--width":g,"is--fill":h&&!f&&!g,"is--handle":0<t,"is--expand":c,"is--hidden":!h}],style:m},[t&&!W?L(e):(0,_ui.renderEmptyElement)(w),(0,_vue.h)("div",{itemid:i,class:"vxe-split-pane--wrapper"},[(0,_vue.h)("div",{class:"vxe-split-pane--inner"},r?N(r,{name:s,isVisible:h,isExpand:c}):[])]),W&&t<b.length-1?L(e):(0,_ui.renderEmptyElement)(w)]))}),(0,_vue.h)("div",{class:"vxe-split-wrapper"},C)})()])},w},render(){return this.renderVN()}});