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