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