index.7d9da821.js 6.5 KB

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