vue-devui
Version:
DevUI components based on Vite and Vue3
2 lines (1 loc) • 12.1 kB
JavaScript
var ie=Object.defineProperty,se=Object.defineProperties;var ue=Object.getOwnPropertyDescriptors;var F=Object.getOwnPropertySymbols;var ce=Object.prototype.hasOwnProperty,de=Object.prototype.propertyIsEnumerable;var H=(d,e,w)=>e in d?ie(d,e,{enumerable:!0,configurable:!0,writable:!0,value:w}):d[e]=w,_=(d,e)=>{for(var w in e||(e={}))ce.call(e,w)&&H(d,w,e[w]);if(F)for(var w of F(e))de.call(e,w)&&H(d,w,e[w]);return d},q=(d,e)=>se(d,ue(e));(function(d,e){typeof exports=="object"&&typeof module!="undefined"?e(exports,require("vue"),require("@floating-ui/dom"),require("@vueuse/core")):typeof define=="function"&&define.amd?define(["exports","vue","@floating-ui/dom","@vueuse/core"],e):(d=typeof globalThis!="undefined"?globalThis:d||self,e(d.index={},d.Vue,d.dom,d.core))})(this,function(d,e,w,z){"use strict";const U={visible:{type:Boolean,default:!1},trigger:{type:String,default:"click"},closeScope:{type:String,default:"all"},position:{type:Array,default:["bottom"]},align:{type:String,default:null},offset:{type:[Number,Object],default:4},shiftOffset:{type:Number},closeOnMouseLeaveMenu:{type:Boolean,default:!1},showAnimation:{type:Boolean,default:!0},overlayClass:{type:String,default:""},destroyOnHide:{type:Boolean,default:!0}},R=Symbol("popper-trigger");function Y(t){return t instanceof Element?t:t&&typeof t=="object"&&t.$el instanceof Element?t.$el:null}const O=new Map;function B(t,o,n){return t==null||t.addEventListener(o,n),()=>{t==null||t.removeEventListener(o,n)}}const I=({id:t,isOpen:o,origin:n,dropdownRef:r,props:l,emit:a})=>{let i=!1,s=!1;const{trigger:u,closeScope:c,closeOnMouseLeaveMenu:m}=e.toRefs(l),f=g=>{o.value=g,a("toggle",o.value)},v=async(g,E)=>{await new Promise(p=>setTimeout(p,50)),!(g==="origin"&&i||g==="dropdown"&&s)&&(E&&[...O.values()].reverse().forEach(p=>{setTimeout(()=>{var V;(V=p.toggle)==null||V.call(p)},0)}),f(!1))};e.watch([u,n,r],([g,E,p],V,y)=>{const b=Y(E),P=[];setTimeout(()=>{P.push(B(document,"click",h=>{h.stopPropagation();const x=[...O.values()];!o.value||c.value==="none"||(p==null?void 0:p.contains(h.target))&&c.value==="blank"||x.some(A=>{var T;return(T=A.toggleEl)==null?void 0:T.contains(h.target)})&&x.some(A=>{var T;return(T=A.menuEl)==null?void 0:T.contains(h.target)})||([...O.values()].reverse().forEach(A=>{setTimeout(()=>{var T,C;((T=A.toggleEl)==null?void 0:T.contains(h.target))||(C=A.toggle)==null||C.call(A)},0)}),i=!1)}))},0),g==="click"?P.push(B(b,"click",()=>f(!o.value)),B(p,"mouseleave",h=>{var x;m.value&&!((x=O.get(t).child)==null?void 0:x.contains(h.relatedTarget))&&v("dropdown",!0)})):g==="hover"&&P.push(B(b,"mouseenter",()=>{s=!0,f(!0)}),B(b,"mouseleave",()=>{s=!1,v("origin")}),B(p,"mouseenter",()=>{i=!0,o.value=!0}),B(p,"mouseleave",h=>{var x;i=!1,!(h.relatedTarget&&((b==null?void 0:b.contains(h.relatedTarget))||((x=O.get(t).child)==null?void 0:x.contains(h.relatedTarget))))&&v("dropdown",!0)})),y(()=>P.forEach(h=>h()))})};function X(t,o,n,r,l,a,i){const s=u=>{const c=u.offsetHeight;window.innerHeight-r.value.getBoundingClientRect().bottom>=c?a.value="bottom":a.value="top"};e.watch(o,(u,c)=>{c!==void 0&&(n.value=u,i("toggle",n.value))},{immediate:!0}),e.watch([n,l],([u,c])=>{var m;if(u){O.set(t,q(_({},O.get(t)),{menuEl:c,toggle:()=>{n.value=!1,i("toggle",n.value)}}));for(const f of O.values())((m=f.menuEl)==null?void 0:m.contains(r.value))&&(f.child=c)}c&&s(c)}),e.onMounted(()=>{O.set(t,{toggleEl:r.value})}),e.onUnmounted(()=>{O.delete(t)})}function G(t,o,n){const{showAnimation:r,overlayClass:l,destroyOnHide:a}=e.toRefs(t),i=e.ref(!1),s=e.ref(!1),u=e.computed(()=>({transformOrigin:o.value==="top"?"0% 100%":"0% 0%",zIndex:"var(--devui-z-index-dropdown, 1052)"})),c=e.computed(()=>({"fade-in-bottom":r.value&&n.value&&o.value==="bottom","fade-in-top":r.value&&n.value&&o.value==="top",[`${l.value}`]:!0})),m=f=>{o.value=f.includes("top")||f.includes("right-end")||f.includes("left-end")?"top":"bottom"};return e.watch(n,f=>{i.value=a.value?f:!0,s.value=f}),{overlayModelValue:i,overlayShowValue:s,styles:u,classes:c,handlePositionChange:m}}const K={modelValue:{type:Boolean,default:!1},lockScroll:{type:Boolean,default:!0},closeOnClickOverlay:{type:Boolean,default:!0}};function J(){if(document.documentElement.scrollHeight>document.documentElement.clientHeight){const t=document.documentElement.scrollTop,o=document.documentElement.getAttribute("style");return document.documentElement.style.position="fixed",document.documentElement.style.top=`-${t}px`,document.documentElement.style.width=document.documentElement.style.width||"100%",document.documentElement.style.overflowY="scroll",()=>{o?document.documentElement.setAttribute("style",o):document.documentElement.removeAttribute("style"),document.documentElement.scrollTop=t}}}function Q(t,o){let n;const r=a=>{a.preventDefault(),o.emit("click",a),t.closeOnClickOverlay&&o.emit("update:modelValue",!1)},l=()=>{n==null||n()};return e.watch(()=>t.modelValue,a=>{a?t.lockScroll&&(n=J()):l()}),e.onUnmounted(l),{onClick:r}}function D(t,o,n){let r=t;return o&&(r+=`__${o}`),n&&(r+=`--${n}`),r}function N(t,o=!1){const n=o?`.devui-${t}`:`devui-${t}`;return{b:()=>D(n),e:s=>s?D(n,s):"",m:s=>s?D(n,"",s):"",em:(s,u)=>s&&u?D(n,s,u):""}}var fe="";e.defineComponent({name:"DFixedOverlay",inheritAttrs:!1,props:K,emits:["update:modelValue","click"],setup(t,o){const{modelValue:n}=e.toRefs(t),r=N("fixed-overlay"),{onClick:l}=Q(t,o);return()=>e.createVNode(e.Transition,{name:r.m("fade")},{default:()=>{var a,i;return[n.value&&e.createVNode("div",e.mergeProps({class:r.b()},o.attrs,{onClick:l}),[(i=(a=o.slots).default)==null?void 0:i.call(a)])]}})}});const W={modelValue:{type:Boolean,default:!1},origin:{type:Object,require:!0},position:{type:Array,default:["bottom"]},offset:{type:[Number,Object],default:8},shiftOffset:{type:Number},align:{type:String,default:null},showArrow:{type:Boolean,default:!1},isArrowCenter:{type:Boolean,default:!0},clickEventBubble:{type:Boolean,default:!1}};function Z(t){const o=/(auto|scroll|hidden)/;for(let n=t;n=n.parentElement;n.parentElement!==document.body){const r=window.getComputedStyle(n);if(o.test(r.overflow+r.overflowX+r.overflowY))return n}return window}function ee(t,o,n,r){let{x:l,y:a}=o;if(!t){const{width:i,height:s}=r;l&&n.includes("start")&&(l=12),l&&n.includes("end")&&(l=Math.round(i-24)),a&&n.includes("start")&&(a=10),a&&n.includes("end")&&(a=s-14)}return{x:l,y:a}}function te(t,o){const n=e.ref(),r=e.ref();let l=null;const a=(s,u,c,m)=>{const{x:f,y:v}=ee(t.isArrowCenter,c,u,m.getBoundingClientRect()),g={top:"bottom",right:"left",bottom:"top",left:"right"}[u.split("-")[0]];Object.assign(s.style,{left:f?`${f}px`:"",top:v?`${v}px`:"",right:"",bottom:"",[g]:"-4px"})},i=async()=>{const s=t.origin,u=e.unref(n.value),c=e.unref(r.value),m=[w.offset(t.offset),w.autoPlacement({alignment:t.align,allowedPlacements:t.position})];if(t.showArrow&&m.push(w.arrow({element:c})),t.shiftOffset!==void 0&&m.push(w.shift()),!u)return;const{x:f,y:v,placement:g,middlewareData:E}=await w.computePosition(s,u,{strategy:"fixed",middleware:m});let p=f,V=v;if(t.shiftOffset!==void 0){const{x:y,y:b}=E.shift;y<0&&(p-=t.shiftOffset),y>0&&(p+=t.shiftOffset),b<0&&(V-=t.shiftOffset),b>0&&(V+=t.shiftOffset)}o("positionChange",g),Object.assign(u.style,{top:`${V}px`,left:`${p}px`}),t.showArrow&&a(c,g,E.arrow,u)};return e.watch(()=>t.modelValue,()=>{t.modelValue&&t.origin?(l=Z(t.origin),e.nextTick(i),l==null||l.addEventListener("scroll",i),l!==window&&window.addEventListener("scroll",i),window.addEventListener("resize",i)):(l==null||l.removeEventListener("scroll",i),l!==window&&window.removeEventListener("scroll",i),window.removeEventListener("resize",i))}),e.onUnmounted(()=>{l==null||l.removeEventListener("scroll",i),l!==window&&window.removeEventListener("scroll",i),window.removeEventListener("resize",i)}),{arrowRef:r,overlayRef:n,updatePosition:i}}var me="";const k=e.defineComponent({name:"DFlexibleOverlay",inheritAttrs:!1,props:W,emits:["update:modelValue","positionChange"],setup(t,{slots:o,attrs:n,emit:r,expose:l}){const a=N("flexible-overlay"),{clickEventBubble:i}=e.toRefs(t),{arrowRef:s,overlayRef:u,updatePosition:c}=te(t,r);return l({updatePosition:c}),()=>{var m;return t.modelValue&&e.createVNode("div",e.mergeProps({ref:u,class:a.b()},n,{onClick:e.withModifiers(()=>({}),[i.value?"":"stop"]),onPointerup:e.withModifiers(()=>({}),["stop"])}),[(m=o.default)==null?void 0:m.call(o),t.showArrow&&e.createVNode("div",{ref:s,class:a.e("arrow")},null)])}}}),oe=t=>t!==null&&typeof t=="object",ne=N("popper-trigger");function $(t){return e.h("span",{class:ne.b()},t)}function j(t){for(const o of t){if(oe(o)){if(o.type===e.Comment)continue;return o.type==="svg"||o.type===e.Text?$(o):o.type===e.Fragment?j(o.children):o}return $(o)}return null}var le=e.defineComponent({name:"DPopperTrigger",setup(t,o){const{slots:n,attrs:r}=o;return()=>{var s;const l=(s=n.default)==null?void 0:s.call(n,r),a=e.inject(R);if(!l)return null;const i=j(l);return i?e.withDirectives(e.cloneVNode(i,r),[[{mounted(u){a.value=u},updated(u){a.value=u},unmounted(){a.value=null}}]]):null}}}),pe="";let ae=1;var S=e.defineComponent({name:"DDropdown",inheritAttrs:!1,props:U,emits:["toggle"],setup(t,{slots:o,attrs:n,emit:r,expose:l}){const{visible:a,position:i,align:s,offset:u,destroyOnHide:c,shiftOffset:m,showAnimation:f}=e.toRefs(t),v=e.ref(),g=e.ref(),E=e.ref(),p=`dropdown_${ae++}`,V=e.ref(!1),y=e.ref("bottom"),b=N("dropdown");e.provide(R,v),I({id:p,isOpen:V,origin:v,dropdownRef:g,props:t,emit:r}),X(p,a,V,v,g,y,r);const{overlayModelValue:P,overlayShowValue:h,styles:x,classes:A,handlePositionChange:T}=G(t,y,V);return e.watch(h,C=>{e.nextTick(()=>{!c.value&&C&&E.value.updatePosition()})}),l({updatePosition:()=>E.value.updatePosition()}),()=>e.createVNode(e.Fragment,null,[e.createVNode(le,null,{default:()=>{var C;return[(C=o.default)==null?void 0:C.call(o)]}}),e.createVNode(e.Teleport,{to:"body"},{default:()=>[e.createVNode(e.Transition,{name:f.value?b.m(`fade-${y.value}`):""},{default:()=>[e.withDirectives(e.createVNode(k,{modelValue:P.value,"onUpdate:modelValue":C=>P.value=C,ref:E,origin:v.value,position:i.value,align:s.value,offset:u.value,shiftOffset:m==null?void 0:m.value,onPositionChange:T,"click-event-bubble":!0,class:A.value,style:x.value},{default:()=>{var C;return[e.createVNode("div",e.mergeProps({ref:g,class:b.e("menu-wrap")},n),[(C=o.menu)==null?void 0:C.call(o)])]}}),[[e.vShow,h.value]])]})]})])}});const L={modelValue:{type:Boolean,default:!1},origin:{type:Object,require:!0},position:{type:Array,default:["bottom"]},align:{type:String,default:null},offset:{type:[Number,Object],default:4},clickOutside:{type:Function,default:()=>!0},showAnimation:{type:Boolean,default:!0},overlayClass:{type:String,default:""}};var M=e.defineComponent({name:"DDropdownMenu",inheritAttrs:!1,props:L,emits:["update:modelValue"],setup(t,{slots:o,attrs:n,emit:r}){const{modelValue:l,origin:a,position:i,align:s,offset:u,clickOutside:c,showAnimation:m,overlayClass:f}=e.toRefs(t),v=e.ref(null),g=N("dropdown");z.onClickOutside(v,y=>{var b,P;((b=c.value)==null?void 0:b.call(c))&&!((P=a==null?void 0:a.value)==null?void 0:P.contains(y.target))&&r("update:modelValue",!1)});const E=e.ref("bottom"),p=y=>{E.value=y.split("-")[0]==="top"?"top":"bottom"},V=e.computed(()=>({transformOrigin:E.value==="top"?"0% 100%":"0% 0%"}));return()=>e.createVNode(e.Teleport,{to:"body"},{default:()=>[e.createVNode(e.Transition,{name:m.value?g.m(`fade-${E.value}`):""},{default:()=>[e.createVNode(k,{modelValue:l.value,"onUpdate:modelValue":y=>l.value=y,origin:a==null?void 0:a.value,position:i.value,align:s.value,offset:u.value,onPositionChange:p,class:f.value,style:V.value},{default:()=>{var y;return[e.createVNode("div",e.mergeProps({ref:v,class:g.e("menu-wrap")},n),[(y=o.default)==null?void 0:y.call(o)])]}})]})]})}}),re={title:"Dropdown \u4E0B\u62C9\u83DC\u5355",category:"\u5BFC\u822A",status:"50%",install(t){t.component(S.name,S),t.component(M.name,M)}};d.Dropdown=S,d.DropdownMenu=M,d.default=re,d.dropdownMenuProps=L,Object.defineProperty(d,"__esModule",{value:!0}),d[Symbol.toStringTag]="Module"});