| 1 |
- import{c as _,m as f,n as b,A as y,D as A,P as L,p as $,w as N}from"./index-e9453d64.js";import{u as B}from"./index-c1d3cef3.js";import{L as I}from"./index-856231c7.js";import{d as M,r as S,n as R,w as U,c as l,z as Y}from"./index-ddf66cb5.js";const[z,r,C]=_("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:b,successDuration:f(500),animationDuration:f(300)};var X=M({name:z,props:G,emits:["change","refresh","update:modelValue"],setup(s,{emit:d,slots:o}){let u;const g=S(),m=S(),H=y(g),e=R({status:"normal",distance:0,duration:0}),i=B(),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`]||C(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(I,{class:r("loading")},{default:T})),c},E=()=>{e.status="success",setTimeout(()=>{n(0)},+s.successDuration)},v=t=>{u=L(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()&&($(t),n(k(a.value)))}},D=()=>{u&&i.deltaY.value&&h()&&(e.duration=+s.animationDuration,e.status==="loosing"?(n(+s.headHeight,!0),d("update:modelValue",!0),Y(()=>d("refresh"))):n(0))};return U(()=>s.modelValue,t=>{e.duration=+s.animationDuration,t?n(+s.headHeight,!0):o.success||s.successText?E():n(0,!1)}),A("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:D,onTouchcancel:D},[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};
|