UNPKG

vuux

Version:

Vue3 Nuxt3 Nuxt4 组件库

2 lines (1 loc) 2.37 kB
"use strict";const o=require("vue"),v=o.defineComponent({name:"CollapseTransition",__name:"index",props:{dimension:{default:"height"},duration:{default:300}},setup(c){const e=c,a=new WeakMap,m=t=>t.replace(/([A-Z])/g,"-$1").toLowerCase(),p=t=>{if(!a.has(t)){const n=e.dimension==="height"?{paddingTop:getComputedStyle(t).paddingTop,paddingBottom:getComputedStyle(t).paddingBottom}:{paddingLeft:getComputedStyle(t).paddingLeft,paddingRight:getComputedStyle(t).paddingRight};a.set(t,n)}return a.get(t)},y=t=>{t instanceof HTMLElement&&(t.style.overflow="hidden",p(t),e.dimension==="height"?(t.style.height="0",t.style.paddingTop="0",t.style.paddingBottom="0"):(t.style.width="0",t.style.paddingLeft="0",t.style.paddingRight="0"))},u=t=>{if(!(t instanceof HTMLElement))return;t.style.overflow="hidden";const n=p(t);if(e.dimension==="height"){const i=n;t.style.height=`${t.scrollHeight}px`,t.style.paddingTop=i.paddingTop,t.style.paddingBottom=i.paddingBottom}else{const i=n;t.style.width=`${t.scrollWidth}px`,t.style.paddingLeft=i.paddingLeft,t.style.paddingRight=i.paddingRight}},h=(t,n,i)=>{const s=p(t),d=e.dimension==="height"?{size:`${t.scrollHeight}px`,pStart:s.paddingTop,pEnd:s.paddingBottom}:{size:`${t.scrollWidth}px`,pStart:s.paddingLeft,pEnd:s.paddingRight},T=e.dimension==="height"?["height","paddingTop","paddingBottom"]:["width","paddingLeft","paddingRight"];t.offsetHeight,t.style.transition=T.map(r=>`${m(r)} ${e.duration}ms ease-in-out`).join(", "),e.dimension==="height"?(t.style.height=n?d.size:"0",t.style.paddingTop=n?d.pStart:"0",t.style.paddingBottom=n?d.pEnd:"0"):(t.style.width=n?d.size:"0",t.style.paddingLeft=n?d.pStart:"0",t.style.paddingRight=n?d.pEnd:"0");const g=r=>{r.target===t&&(t.removeEventListener("transitionend",g),i())};t.addEventListener("transitionend",g),setTimeout(()=>{t.removeEventListener("transitionend",g),i()},e.duration*1.1)},L=(t,n)=>h(t,!0,n),l=(t,n)=>h(t,!1,n),f=t=>{t instanceof HTMLElement&&(t.style.overflow="",t.style.transition="",t.style.height="",t.style.width="",t.style.paddingTop="",t.style.paddingBottom="",t.style.paddingLeft="",t.style.paddingRight="")};return(t,n)=>(o.openBlock(),o.createBlock(o.Transition,{name:"CollapseTransition",onBeforeEnter:y,onEnter:L,onAfterEnter:f,onBeforeLeave:u,onLeave:l,onAfterLeave:f},{default:o.withCtx(()=>[o.renderSlot(t.$slots,"default")]),_:3}))}});module.exports=v;