1 |
- import{c as V,W as ge,a9 as P,_ as q,d as $,n as F,aY as I,aj as _,r as y,u as Te,aa as oe,X as le,aw as xe,Y as ce,a as d,p as ie,H as Q,a7 as se,ae as W,b as K,t as Oe,m as Ce,e as k,bB as pe,w as L,aP as j,L as ke,h as ye,z as Z,bC as Pe,k as Ee}from"./index-29f55498.js";import{T as we,a as Se}from"./index-0a24c6ae.js";const[Be,O,ee]=V("picker"),ue=e=>e.find(o=>!o.disabled)||e[0];function He(e,o){const n=e[0];if(n){if(Array.isArray(n))return"multiple";if(o.children in n)return"cascade"}return"default"}function X(e,o){o=q(o,0,e.length);for(let n=o;n<e.length;n++)if(!e[n].disabled)return n;for(let n=o-1;n>=0;n--)if(!e[n].disabled)return n;return 0}const te=(e,o,n)=>o!==void 0&&!!e.find(i=>i[n.value]===o);function J(e,o,n){const i=e.findIndex(h=>h[n.value]===o),l=X(e,i);return e[l]}function Ne(e,o,n){const i=[];let l={[o.children]:e},h=0;for(;l&&l[o.children];){const f=l[o.children],b=n.value[h];if(l=ge(b)?J(f,b,o):void 0,!l&&f.length){const u=ue(f)[o.value];l=J(f,u,o)}h++,i.push(f)}return i}function Me(e){const{transform:o}=window.getComputedStyle(e),n=o.slice(7,o.length-1).split(", ")[5];return Number(n)}function De(e){return P({text:"text",value:"value",children:"children"},e)}const ne=200,ae=300,Ie=15,[re,z]=V("picker-column"),de=Symbol(re);var _e=$({name:re,props:{value:F,fields:I(Object),options:_(),readonly:Boolean,allowHtml:Boolean,optionHeight:I(Number),swipeDuration:I(F),visibleOptionNum:I(F)},emits:["change","clickOption"],setup(e,{emit:o,slots:n}){let i,l,h,f,b;const u=y(),g=y(),m=y(0),v=y(0),T=Te(),C=()=>e.options.length,w=()=>e.optionHeight*(+e.visibleOptionNum-1)/2,p=c=>{const r=X(e.options,c),t=-r*e.optionHeight,a=()=>{const s=e.options[r][e.fields.value];s!==e.value&&o("change",s)};i&&t!==m.value?b=a:a(),m.value=t},x=()=>e.readonly||!e.options.length,A=c=>{i||x()||(b=null,v.value=ne,p(c),o("clickOption",e.options[c]))},S=c=>q(Math.round(-c/e.optionHeight),0,C()-1),B=(c,r)=>{const t=Math.abs(c/r);c=m.value+t/.003*(c<0?-1:1);const a=S(c);v.value=+e.swipeDuration,p(a)},H=()=>{i=!1,v.value=0,b&&(b(),b=null)},Y=c=>{if(!x()){if(T.start(c),i){const r=Me(g.value);m.value=Math.min(0,r-w())}v.value=0,l=m.value,h=Date.now(),f=l,b=null}},U=c=>{if(x())return;T.move(c),T.isVertical()&&(i=!0,ie(c,!0)),m.value=q(l+T.deltaY.value,-(C()*e.optionHeight),e.optionHeight);const r=Date.now();r-h>ae&&(h=r,f=m.value)},N=()=>{if(x())return;const c=m.value-f,r=Date.now()-h;if(r<ae&&Math.abs(c)>Ie){B(c,r);return}const a=S(m.value);v.value=ne,p(a),setTimeout(()=>{i=!1},0)},M=()=>{const c={height:`${e.optionHeight}px`};return e.options.map((r,t)=>{const a=r[e.fields.text],{disabled:s}=r,D=r[e.fields.value],E={role:"button",style:c,tabindex:s?-1:0,class:[z("item",{disabled:s,selected:D===e.value}),r.className],onClick:()=>A(t)},be={class:"van-ellipsis",[e.allowHtml?"innerHTML":"textContent"]:a};return d("li",E,[n.option?n.option(r,t):d("div",be,null)])})};return oe(de),le({stopMomentum:H}),xe(()=>{const c=e.options.findIndex(a=>a[e.fields.value]===e.value),t=-X(e.options,c)*e.optionHeight;m.value=t}),ce("touchmove",U,{target:u}),()=>d("div",{ref:u,class:z(),onTouchstartPassive:Y,onTouchend:N,onTouchcancel:N},[d("ul",{ref:g,style:{transform:`translate3d(0, ${m.value+w()}px, 0)`,transitionDuration:`${v.value}ms`,transitionProperty:v.value?"all":"none"},class:z("wrapper"),onTransitionend:H},[M()])])}});const[Ve]=V("picker-toolbar"),R={title:String,cancelButtonText:String,confirmButtonText:String},me=["cancel","confirm","title","toolbar"],$e=Object.keys(R);var fe=$({name:Ve,props:R,emits:["confirm","cancel"],setup(e,{emit:o,slots:n}){const i=()=>{if(n.title)return n.title();if(e.title)return d("div",{class:[O("title"),"van-ellipsis"]},[e.title])},l=()=>o("cancel"),h=()=>o("confirm"),f=()=>{const u=e.cancelButtonText||ee("cancel");return d("button",{type:"button",class:[O("cancel"),Q],onClick:l},[n.cancel?n.cancel():u])},b=()=>{const u=e.confirmButtonText||ee("confirm");return d("button",{type:"button",class:[O("confirm"),Q],onClick:h},[n.confirm?n.confirm():u])};return()=>d("div",{class:O("toolbar")},[n.toolbar?n.toolbar():[f(),i(),b()]])}});const[ve,G]=V("picker-group"),he=Symbol(ve),Re=P({tabs:_(),nextStepText:String},R);$({name:ve,props:Re,emits:["confirm","cancel"],setup(e,{emit:o,slots:n}){const i=y(0),{children:l,linkChildren:h}=se(he);h();const f=()=>i.value<e.tabs.length-1&&e.nextStepText,b=()=>{f()?i.value++:o("confirm",l.map(g=>g.confirm()))},u=()=>o("cancel");return()=>{var g;const m=(g=n.default)==null?void 0:g.call(n),v=f()?e.nextStepText:e.confirmButtonText;return d("div",{class:G()},[d(fe,{title:e.title,cancelButtonText:e.cancelButtonText,confirmButtonText:v,onConfirm:b,onCancel:u},W(n,me)),d(we,{active:i.value,"onUpdate:active":T=>i.value=T,class:G("tabs"),shrink:!0,animated:!0,lazyRender:!1},{default:()=>[e.tabs.map((T,C)=>d(Se,{title:T,titleClass:G("tab-title")},{default:()=>[m==null?void 0:m[C]]}))]})])}}});const Ae=P({loading:Boolean,readonly:Boolean,allowHtml:Boolean,optionHeight:K(44),showToolbar:Oe,swipeDuration:K(1e3),visibleOptionNum:K(6)},R),Ye=P({},Ae,{columns:_(),modelValue:_(),toolbarPosition:Ce("top"),columnsFieldNames:Object});var Ue=$({name:Be,props:Ye,emits:["confirm","cancel","change","clickOption","update:modelValue"],setup(e,{emit:o,slots:n}){const i=y(),l=y(e.modelValue.slice(0)),{parent:h}=oe(he),{children:f,linkChildren:b}=se(de);b();const u=k(()=>De(e.columnsFieldNames)),g=k(()=>pe(e.optionHeight)),m=k(()=>He(e.columns,u.value)),v=k(()=>{const{columns:t}=e;switch(m.value){case"multiple":return t;case"cascade":return Ne(t,u.value,l);default:return[t]}}),T=k(()=>v.value.some(t=>t.length)),C=k(()=>v.value.map((t,a)=>J(t,l.value[a],u.value))),w=k(()=>v.value.map((t,a)=>t.findIndex(s=>s[u.value.value]===l.value[a]))),p=(t,a)=>{if(l.value[t]!==a){const s=l.value.slice(0);s[t]=a,l.value=s}},x=()=>({selectedValues:l.value.slice(0),selectedOptions:C.value,selectedIndexes:w.value}),A=(t,a)=>{p(a,t),m.value==="cascade"&&l.value.forEach((s,D)=>{const E=v.value[D];te(E,s,u.value)||p(D,E.length?E[0][u.value.value]:void 0)}),Z(()=>{o("change",P({columnIndex:a},x()))})},S=(t,a)=>o("clickOption",P({columnIndex:a,currentOption:t},x())),B=()=>{f.forEach(a=>a.stopMomentum());const t=x();return Z(()=>{o("confirm",t)}),t},H=()=>o("cancel",x()),Y=()=>v.value.map((t,a)=>d(_e,{value:l.value[a],fields:u.value,options:t,readonly:e.readonly,allowHtml:e.allowHtml,optionHeight:g.value,swipeDuration:e.swipeDuration,visibleOptionNum:e.visibleOptionNum,onChange:s=>A(s,a),onClickOption:s=>S(s,a)},{option:n.option})),U=t=>{if(T.value){const a={height:`${g.value}px`},s={backgroundSize:`100% ${(t-g.value)/2}px`};return[d("div",{class:O("mask"),style:s},null),d("div",{class:[Pe,O("frame")],style:a},null)]}},N=()=>{const t=g.value*+e.visibleOptionNum,a={height:`${t}px`};return d("div",{ref:i,class:O("columns"),style:a},[Y(),U(t)])},M=()=>{if(e.showToolbar&&!h)return d(fe,ye(W(e,$e),{onConfirm:B,onCancel:H}),W(n,me))};L(v,t=>{t.forEach((a,s)=>{a.length&&!te(a,l.value[s],u.value)&&p(s,ue(a)[u.value.value])})},{immediate:!0});let c;return L(()=>e.modelValue,t=>{!j(t,l.value)&&!j(t,c)&&(l.value=t.slice(0),c=t.slice(0))},{deep:!0}),L(l,t=>{j(t,e.modelValue)||(c=t.slice(0),o("update:modelValue",c))},{immediate:!0}),ce("touchmove",ie,{target:i}),le({confirm:B,getSelectedOptions:()=>C.value}),()=>{var t,a;return d("div",{class:O()},[e.toolbarPosition==="top"?M():null,e.loading?d(ke,{class:O("loading")},null):null,(t=n["columns-top"])==null?void 0:t.call(n),N(),(a=n["columns-bottom"])==null?void 0:a.call(n),e.toolbarPosition==="bottom"?M():null])}}});const Le=Ee(Ue);export{Le as P,Ae as p};
|