| 1 |
- import{c as y,m as f,n as L,z as _,C as b,L as $,p as A,w as N}from"./index-706bc599.js";import{u as z}from"./index-97e235af.js";import{L as B}from"./index-40a7d995.js";import{d as C,r as D,z as I,w as M,c as l,y as R}from"./index-9e59d463.js";const[U,r,Y]=y("pull-refresh"),x=50,F=["pulling","loosing","success"],G={disabled:Boolean,modelValue:Boolean,headHeight:f(x),successText:String,pullingText:String,loosingText:String,loadingText:String,pullDistance:L,successDuration:f(500),animationDuration:f(300)};var X=C({name:U,props:G,emits:["change","refresh","update:modelValue"],setup(s,{emit:d,slots:o}){let u;const g=D(),m=D(),H=_(g),e=I({status:"normal",distance:0,duration:0}),i=z(),P=()=>{if(s.headHeight!==x)return{height:`${s.headHeight}px`}},h=()=>e.status!=="loading"&&e.status!=="success"&&!s.disabled,k=t=>{const a=+(s.pullDistance||s.headHeight);return t>a&&(t<a*2?t=a+(t-a)/2:t=a*1.5+(t-a*2)/4),Math.round(t)},n=(t,a)=>{const c=+(s.pullDistance||s.headHeight);e.distance=t,a?e.status="loading":t===0?e.status="normal":t<c?e.status="pulling":e.status="loosing",d("change",{status:e.status,distance:t})},T=()=>{const{status:t}=e;return t==="normal"?"":s[`${t}Text`]||Y(t)},p=()=>{const{status:t,distance:a}=e;if(o[t])return o[t]({distance:a});const c=[];return F.includes(t)&&c.push(l("div",{class:r("text")},[T()])),t==="loading"&&c.push(l(B,{class:r("loading")},{default:T})),c},E=()=>{e.status="success",setTimeout(()=>{n(0)},+s.successDuration)},v=t=>{u=$(H.value)===0,u&&(e.duration=0,i.start(t))},V=t=>{h()&&v(t)},w=t=>{if(h()){u||v(t);const{deltaY:a}=i;i.move(t),u&&a.value>=0&&i.isVertical()&&(A(t),n(k(a.value)))}},S=()=>{u&&i.deltaY.value&&h()&&(e.duration=+s.animationDuration,e.status==="loosing"?(n(+s.headHeight,!0),d("update:modelValue",!0),R(()=>d("refresh"))):n(0))};return M(()=>s.modelValue,t=>{e.duration=+s.animationDuration,t?n(+s.headHeight,!0):o.success||s.successText?E():n(0,!1)}),b("touchmove",w,{target:m}),()=>{var t;const a={transitionDuration:`${e.duration}ms`,transform:e.distance?`translate3d(0,${e.distance}px, 0)`:""};return l("div",{ref:g,class:r()},[l("div",{ref:m,class:r("track"),style:a,onTouchstartPassive:V,onTouchend:S,onTouchcancel:S},[l("div",{class:r("head"),style:P()},[p()]),(t=o.default)==null?void 0:t.call(o)])])}}});const O=N(X);export{O as P};
|