st-common-ui-vue3
Version:
小尾巴通用 Vue3 UI 组件库
2 lines (1 loc) • 3.54 kB
JavaScript
;const t=require("vue"),e=require("./st-popover-sub-cont-pos.js"),x=require("../../node_modules/.pnpm/@vueuse_core@12.0.0_typescript@5.6.2/node_modules/@vueuse/core/index.js"),M={class:"st-popover__content"},_=t.defineComponent({name:"StPopover",__name:"StPopover",props:t.mergeModels({baseOnPosition:{type:Boolean,default:!1},isVertical:{type:Boolean,default:!1},x:{default:0},y:{default:0},trigger:{default:"hover"},subContTransitionName:{default:"sub-cont"},subContZIndex:{default:1}},{subContPosition:{default:e.StPopoverSubContPosEnum.BR},subContPositionModifiers:{},isShow:{type:Boolean,default:!1},isShowModifiers:{}}),emits:["update:subContPosition","update:isShow"],setup(v){const s=v,O=t.useModel(v,"subContPosition"),l=t.useModel(v,"isShow"),P=t.ref(null),S=t.ref(null),a=t.ref(e.StPopoverSubContPosEnum.LB),i=t.ref(!1);t.onBeforeMount(()=>{s.isVertical&&(a.value=e.StPopoverSubContPosEnum.BR)});const r=()=>{var R,T,y,L;let o=((R=P.value)==null?void 0:R.offsetWidth)??0,u=((T=P.value)==null?void 0:T.offsetHeight)??0,W=((y=S.value)==null?void 0:y.offsetWidth)??0,k=((L=S.value)==null?void 0:L.offsetHeight)??0;return{width:o,height:u,scHeight:k,scWidth:W}},f=()=>{let{height:o,scHeight:u}=r();return u-o>s.y},c=()=>{let{scHeight:o}=r();return o>window.innerHeight-s.y},b=()=>{let{scWidth:o}=r();return o>s.x},d=()=>{let{width:o,scWidth:u}=r();return u>document.body.clientWidth-(s.x+o)},p=()=>{let{scWidth:o}=r();return o>s.x},C=()=>{let{scWidth:o}=r();return o>document.body.clientWidth-s.x},m=()=>{let{scHeight:o}=r();return o>s.y},h=()=>{let{height:o,scHeight:u}=r();return u>window.innerHeight-s.y-o},H=o=>{a.value=o,O.value=o},n=(o,u)=>{o()&&H(u)},V={[e.StPopoverSubContPosEnum.LT]:()=>{n(c,e.StPopoverSubContPosEnum.LB),n(b,e.StPopoverSubContPosEnum.RT)},[e.StPopoverSubContPosEnum.LB]:()=>{n(f,e.StPopoverSubContPosEnum.LT),n(b,e.StPopoverSubContPosEnum.RB)},[e.StPopoverSubContPosEnum.RT]:()=>{n(c,e.StPopoverSubContPosEnum.RB),n(d,e.StPopoverSubContPosEnum.LT)},[e.StPopoverSubContPosEnum.RB]:()=>{n(f,e.StPopoverSubContPosEnum.RT),n(d,e.StPopoverSubContPosEnum.LB)},[e.StPopoverSubContPosEnum.TL]:()=>{n(m,e.StPopoverSubContPosEnum.BL),n(C,e.StPopoverSubContPosEnum.TR)},[e.StPopoverSubContPosEnum.TR]:()=>{n(m,e.StPopoverSubContPosEnum.BR),n(p,e.StPopoverSubContPosEnum.TL)},[e.StPopoverSubContPosEnum.BL]:()=>{n(h,e.StPopoverSubContPosEnum.TL),n(C,e.StPopoverSubContPosEnum.BR)},[e.StPopoverSubContPosEnum.BR]:()=>{n(h,e.StPopoverSubContPosEnum.TR),n(p,e.StPopoverSubContPosEnum.BL)}},B=()=>{if(s.baseOnPosition)for(let o in e.StPopoverSubContPosEnum)o===a.value&&V[o]()};t.watchEffect(()=>{B()});const E=()=>s.trigger==="click",w=o=>{if(B(),E()){o instanceof PointerEvent&&(i.value=!0,l.value=!0);return}i.value=!0,l.value=!0},g=o=>{if(E()){o instanceof PointerEvent&&(i.value=!1,l.value=!1);return}i.value=!1,l.value=!1};return x.onClickOutside(P,g),(o,u)=>(t.openBlock(),t.createElementBlock("div",{ref_key:"stPopoverRef",ref:P,class:"st-popover",onMouseover:w,onMouseleave:g,onPointerdown:w},[t.createElementVNode("div",M,[t.renderSlot(o.$slots,"default",{},void 0,!0)]),t.createVNode(t.Transition,{name:o.subContTransitionName},{default:t.withCtx(()=>[t.withDirectives(t.createElementVNode("div",{ref_key:"stPopoverSubContentRef",ref:S,class:"st-popover__sub-content",style:t.normalizeStyle({...t.unref(e.StPopoverSubContPosConst)[a.value].position,zIndex:o.subContZIndex})},[t.renderSlot(o.$slots,"subContent",{},void 0,!0)],4),[[t.vShow,i.value]])]),_:3},8,["name"])],544))}});module.exports=_;