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