index.f3a3d845.js 6.8 KB

1
  1. import{N as me,aK as z,G as ne,d as ae,ay as B,J as he,a$ as ge,aX as oe,V as j,U as ve,aj as xe,au as ye,al as le,a4 as q,j as f,H as G,ar as se,at as Y,ac as p,I as Te,K as ie,a1 as be,ak as Ce,X as Z,ae as Ie,aU as we,aZ as Q,b4 as Oe}from"./index.c8a33855.js";function $(t){if(!me(t))return t;if(Array.isArray(t))return t.map(r=>$(r));if(z(t)){const r={};return Object.keys(t).forEach(i=>{r[i]=$(t[i])}),r}return t}const W=200,ee=300,ke=15,[ce,J]=ne("picker-column");function Ne(t){const{transform:r}=window.getComputedStyle(t),i=r.slice(7,r.length-1).split(", ")[5];return Number(i)}const ue=Symbol(ce),X=t=>z(t)&&t.disabled;var Me=ae({name:ce,props:{textKey:B(String),readonly:Boolean,allowHtml:Boolean,className:he,itemHeight:B(Number),defaultIndex:ge(0),swipeDuration:B(G),initialOptions:oe(),visibleItemCount:B(G)},emits:["change"],setup(t,{emit:r,slots:i}){let h,g,O,v,c;const b=j(),o=ve({index:t.defaultIndex,offset:0,duration:0,options:$(t.initialOptions)}),y=xe(),d=()=>o.options.length,H=()=>t.itemHeight*(+t.visibleItemCount-1)/2,A=n=>{n=Y(n,0,d());for(let l=n;l<d();l++)if(!X(o.options[l]))return l;for(let l=n-1;l>=0;l--)if(!X(o.options[l]))return l},m=(n,l)=>{n=A(n)||0;const u=-n*t.itemHeight,x=()=>{n!==o.index&&(o.index=n,l&&r("change",n))};h&&u!==o.offset?c=x:x(),o.offset=u},P=n=>{JSON.stringify(n)!==JSON.stringify(o.options)&&(o.options=$(n),m(t.defaultIndex))},S=n=>{h||t.readonly||(c=null,o.duration=W,m(n,!0))},C=n=>z(n)&&t.textKey in n?n[t.textKey]:n,k=n=>Y(Math.round(-n/t.itemHeight),0,d()-1),E=(n,l)=>{const u=Math.abs(n/l);n=o.offset+u/.003*(n<0?-1:1);const x=k(n);o.duration=+t.swipeDuration,m(x,!0)},N=()=>{h=!1,o.duration=0,c&&(c(),c=null)},D=n=>{if(!t.readonly){if(y.start(n),h){const l=Ne(b.value);o.offset=Math.min(0,l-H()),g=o.offset}else g=o.offset;o.duration=0,O=Date.now(),v=g,c=null}},U=n=>{if(t.readonly)return;y.move(n),y.isVertical()&&(h=!0,se(n,!0)),o.offset=Y(g+y.deltaY.value,-(d()*t.itemHeight),t.itemHeight);const l=Date.now();l-O>ee&&(O=l,v=o.offset)},M=()=>{if(t.readonly)return;const n=o.offset-v,l=Date.now()-O;if(l<ee&&Math.abs(n)>ke){E(n,l);return}const x=k(o.offset);o.duration=W,m(x,!0),setTimeout(()=>{h=!1},0)},F=()=>{const n={height:`${t.itemHeight}px`};return o.options.map((l,u)=>{const x=C(l),V=X(l),R={role:"button",style:n,tabindex:V?-1:0,class:J("item",{disabled:V,selected:u===o.index}),onClick:()=>S(u)},_={class:"van-ellipsis",[t.allowHtml?"innerHTML":"textContent"]:x};return f("li",R,[i.option?i.option(l):f("div",_,null)])})},L=n=>{const{options:l}=o;for(let u=0;u<l.length;u++)if(C(l[u])===n)return m(u)},K=()=>o.options[o.index];return m(o.index),ye(ue),le({state:o,setIndex:m,getValue:K,setValue:L,setOptions:P,stopMomentum:N}),q(()=>t.initialOptions,P),q(()=>t.defaultIndex,n=>m(n)),()=>f("div",{class:[J(),t.className],onTouchstart:D,onTouchmove:U,onTouchend:M,onTouchcancel:M},[f("ul",{ref:b,style:{transform:`translate3d(0, ${o.offset+H()}px, 0)`,transitionDuration:`${o.duration}ms`,transitionProperty:o.duration?"all":"none"},class:J("wrapper"),onTransitionend:N},[F()])])}});const[Pe,T,te]=ne("picker"),Se={title:String,loading:Boolean,readonly:Boolean,allowHtml:Boolean,itemHeight:p(44),showToolbar:Te,swipeDuration:p(1e3),visibleItemCount:p(6),cancelButtonText:String,confirmButtonText:String},He=ie({},Se,{columns:oe(),valueKey:String,defaultIndex:p(0),toolbarPosition:be("top"),columnsFieldNames:Object});var De=ae({name:Pe,props:He,emits:["confirm","cancel","change"],setup(t,{emit:r,slots:i}){i.default&&console.warn('[Vant] Picker: "default" slot is deprecated, please use "toolbar" slot instead.'),t.valueKey&&console.warn('[Vant] Picker: "valueKey" prop is deprecated, please use "columnsFieldNames" prop instead.');const h=j(!1),g=j([]),{text:O,values:v,children:c}=ie({text:t.valueKey||"text",values:"values",children:"children"},t.columnsFieldNames),{children:b,linkChildren:o}=Ce(ue);o();const y=Z(()=>Ie(t.itemHeight)),d=Z(()=>{const e=t.columns[0];if(typeof e=="object"){if(c in e)return"cascade";if(v in e)return"object"}return"plain"}),H=()=>{var e;const a=[];let s={[c]:t.columns};for(;s&&s[c];){const I=s[c];let w=(e=s.defaultIndex)!=null?e:+t.defaultIndex;for(;I[w]&&I[w].disabled;)if(w<I.length-1)w++;else{w=0;break}a.push({[v]:s[c],className:s.className,defaultIndex:w}),s=I[w]}g.value=a},A=()=>{const{columns:e}=t;d.value==="plain"?g.value=[{[v]:e}]:d.value==="cascade"?H():g.value=e,h.value=g.value.some(a=>a[v]&&a[v].length!==0)},m=()=>b.map(e=>e.state.index),P=(e,a)=>{const s=b[e];s&&(s.setOptions(a),h.value=!0)},S=e=>{let a={[c]:t.columns};const s=m();for(let I=0;I<=e;I++)a=a[c][s[I]];for(;a&&a[c];)e++,P(e,a[c]),a=a[c][a.defaultIndex||0]},C=e=>b[e],k=e=>{const a=C(e);if(a)return a.getValue()},E=(e,a)=>{const s=C(e);s&&(s.setValue(a),d.value==="cascade"&&S(e))},N=e=>{const a=C(e);if(a)return a.state.index},D=(e,a)=>{const s=C(e);s&&(s.setIndex(a),d.value==="cascade"&&S(e))},U=e=>{const a=C(e);if(a)return a.state.options},M=()=>b.map(e=>e.getValue()),F=e=>{e.forEach((a,s)=>{E(s,a)})},L=e=>{e.forEach((a,s)=>{D(s,a)})},K=e=>{d.value==="plain"?r(e,k(0),N(0)):r(e,M(),m())},n=e=>{d.value==="cascade"&&S(e),d.value==="plain"?r("change",k(0),N(0)):r("change",M(),e)},l=()=>{b.forEach(e=>e.stopMomentum()),K("confirm")},u=()=>K("cancel"),x=()=>{if(i.title)return i.title();if(t.title)return f("div",{class:[T("title"),"van-ellipsis"]},[t.title])},V=()=>{const e=t.cancelButtonText||te("cancel");return f("button",{type:"button",class:[T("cancel"),Q],onClick:u},[i.cancel?i.cancel():e])},R=()=>{const e=t.confirmButtonText||te("confirm");return f("button",{type:"button",class:[T("confirm"),Q],onClick:l},[i.confirm?i.confirm():e])},_=()=>{if(t.showToolbar){const e=i.toolbar||i.default;return f("div",{class:T("toolbar")},[e?e():[V(),x(),R()]])}},re=()=>g.value.map((e,a)=>{var s;return f(Me,{textKey:O,readonly:t.readonly,allowHtml:t.allowHtml,className:e.className,itemHeight:y.value,defaultIndex:(s=e.defaultIndex)!=null?s:+t.defaultIndex,swipeDuration:t.swipeDuration,initialOptions:e[v],visibleItemCount:t.visibleItemCount,onChange:()=>n(a)},{option:i.option})}),fe=e=>{if(h.value){const a={height:`${y.value}px`},s={backgroundSize:`100% ${(e-y.value)/2}px`};return[f("div",{class:T("mask"),style:s},null),f("div",{class:[Oe,T("frame")],style:a},null)]}},de=()=>{const e=y.value*+t.visibleItemCount,a={height:`${e}px`};return f("div",{class:T("columns"),style:a,onTouchmove:se},[re(),fe(e)])};return q(()=>t.columns,A,{immediate:!0}),le({confirm:l,getValues:M,setValues:F,getIndexes:m,setIndexes:L,getColumnIndex:N,setColumnIndex:D,getColumnValue:k,setColumnValue:E,getColumnValues:U,setColumnValues:P}),()=>{var e,a;return f("div",{class:T()},[t.toolbarPosition==="top"?_():null,t.loading?f(we,{class:T("loading")},null):null,(e=i["columns-top"])==null?void 0:e.call(i),de(),(a=i["columns-bottom"])==null?void 0:a.call(i),t.toolbarPosition==="bottom"?_():null])}}});export{Se as p,De as s};