@ncdai/react-wheel-picker 1.0.12 → 1.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.css CHANGED
@@ -1 +1 @@
1
- [data-rwp-wrapper]{position:relative;overflow:hidden;display:flex;width:100%;align-items:stretch;justify-content:space-between;perspective:2000px;-webkit-user-select:none;-moz-user-select:none;user-select:none}[data-rwp]{position:relative;overflow:hidden;flex:1;cursor:ns-resize;-webkit-mask-image:linear-gradient(to bottom,transparent 0%,black 20%,black 80%,transparent 100%);mask-image:linear-gradient(to bottom,transparent 0%,black 20%,black 80%,transparent 100%)}[data-rwp-highlight-wrapper]{position:absolute;overflow:hidden;top:50%;width:100%;transform:translateY(-50%);font-size:1rem;font-weight:500}[data-rwp-highlight-list]{position:absolute;width:100%;list-style:none}[data-rwp-options]{position:absolute;top:50%;left:0;display:block;width:100%;height:0;margin:0 auto;-webkit-font-smoothing:subpixel-antialiased;will-change:transform;backface-visibility:hidden;transform-style:preserve-3d;list-style:none}[data-rwp-option]{position:absolute;top:0;left:0;width:100%;-webkit-font-smoothing:subpixel-antialiased;will-change:visibility;font-size:.875rem}[data-rwp-option],[data-rwp-highlight-item]{display:flex;align-items:center;justify-content:center}
1
+ [data-rwp-wrapper]{position:relative;overflow:hidden;display:flex;width:100%;align-items:stretch;justify-content:space-between;perspective:2000px;-webkit-user-select:none;-moz-user-select:none;user-select:none}[data-rwp]{position:relative;overflow:hidden;flex:1;cursor:default;-webkit-mask-image:linear-gradient(to bottom,transparent 0%,black 20%,black 80%,transparent 100%);mask-image:linear-gradient(to bottom,transparent 0%,black 20%,black 80%,transparent 100%)}[data-rwp-highlight-wrapper]{position:absolute;overflow:hidden;top:50%;width:100%;transform:translateY(-50%);font-size:1rem;font-weight:500}[data-rwp-highlight-list]{position:absolute;width:100%;list-style:none}[data-rwp-options]{position:absolute;top:50%;left:0;display:block;width:100%;height:0;margin:0 auto;-webkit-font-smoothing:subpixel-antialiased;will-change:transform;backface-visibility:hidden;transform-style:preserve-3d;list-style:none}[data-rwp-option]{position:absolute;top:0;left:0;width:100%;-webkit-font-smoothing:subpixel-antialiased;will-change:visibility;font-size:.875rem}[data-rwp-option],[data-rwp-highlight-item]{display:flex;align-items:center;justify-content:center}
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";"use client";var yt=Object.create;var Y=Object.defineProperty;var Et=Object.getOwnPropertyDescriptor;var Mt=Object.getOwnPropertyNames;var Tt=Object.getPrototypeOf,Dt=Object.prototype.hasOwnProperty;var St=(s,i)=>{for(var d in i)Y(s,d,{get:i[d],enumerable:!0})},ot=(s,i,d,g)=>{if(i&&typeof i=="object"||typeof i=="function")for(let c of Mt(i))!Dt.call(s,c)&&c!==d&&Y(s,c,{get:()=>i[c],enumerable:!(g=Et(i,c))||g.enumerable});return s};var st=(s,i,d)=>(d=s!=null?yt(Tt(s)):{},ot(i||!s||!s.__esModule?Y(d,"default",{value:s,enumerable:!0}):d,s)),kt=s=>ot(Y({},"__esModule",{value:!0}),s);var Yt={};St(Yt,{WheelPicker:()=>Ct,WheelPickerWrapper:()=>xt});module.exports=kt(Yt);var M=st(require("react")),h=require("react");var E=st(require("react"));function at(s){let i=E.default.useRef(s);return E.default.useEffect(()=>{i.current=s}),E.default.useMemo(()=>(...d)=>{var g;return(g=i.current)==null?void 0:g.call(i,...d)},[])}function It({defaultProp:s,onChange:i}){let d=E.default.useState(s),[g]=d,c=E.default.useRef(g),v=at(i);return E.default.useEffect(()=>{c.current!==g&&(v(g),c.current=g)},[g,c,v]),d}function it({prop:s,defaultProp:i,onChange:d=()=>{}}){let[g,c]=It({defaultProp:i,onChange:d}),v=s!==void 0,A=v?s:g,I=at(d),f=E.default.useCallback(T=>{if(v){let a=typeof T=="function"?T(s):T;a!==s&&I(a)}else c(T)},[v,s,c,I]);return[A,f]}var ct=.3,Lt=30,Wt=s=>Math.pow(s-1,3)+1,P=(s,i,d)=>Math.max(i,Math.min(s,d)),xt=({className:s,children:i})=>M.default.createElement("div",{className:s,"data-rwp-wrapper":!0},i),Ct=({defaultValue:s,value:i,onValueChange:d,options:g,infinite:c=!1,visibleCount:v=20,dragSensitivity:A=3,optionItemHeight:I=30,classNames:f})=>{var tt,et;let[T=(et=(tt=g[0])==null?void 0:tt.value)!=null?et:"",B]=it({defaultProp:s,prop:i,onChange:d}),a=(0,h.useMemo)(()=>{if(!c)return g;let t=[],e=Math.ceil(v/2);if(g.length===0)return t;for(;t.length<e;)t.push(...g);return t},[v,g,c]),p=I,j=p*.5,D=360/v,L=p/Math.tan(D*Math.PI/180),lt=Math.round(L*2+p*.25),R=v>>2,X=A*10,ut=10,b=(0,h.useRef)(null),W=(0,h.useRef)(null),H=(0,h.useRef)(null),m=(0,h.useRef)(0),G=(0,h.useRef)(0),S=(0,h.useRef)(!1),Z=(0,h.useRef)(0),O=(0,h.useRef)({startY:0,yList:[]}),z=(0,h.useRef)(null),ht=(0,h.useMemo)(()=>{let t=(n,r,o)=>M.default.createElement("li",{key:r,className:f==null?void 0:f.optionItem,"data-slot":"option-item","data-rwp-option":!0,"data-index":r,style:{top:-j,height:p,lineHeight:`${p}px`,transform:`rotateX(${o}deg) translateZ(${L}px)`,visibility:"hidden"}},n.label),e=a.map((n,r)=>t(n,r,-D*r));if(c)for(let n=0;n<R;++n){let r=-n-1,o=n+a.length;e.unshift(t(a[a.length-n-1],r,D*(n+1))),e.push(t(a[n],o,-D*o))}return e},[p,j,c,D,a,R,L,f==null?void 0:f.optionItem]),dt=(0,h.useMemo)(()=>{let t=(n,r)=>M.default.createElement("li",{key:r,className:f==null?void 0:f.highlightItem,"data-slot":"highlight-item","data-rwp-highlight-item":!0,style:{height:p}},n.label),e=a.map((n,r)=>t(n,r));if(c){let n=a[0],r=a[a.length-1];e.unshift(t(r,"infinite-start")),e.push(t(n,"infinite-end"))}return e},[f==null?void 0:f.highlightItem,p,c,a]),F=t=>(t%a.length+a.length)%a.length,k=t=>{let e=c?F(t):t;if(W.current){let n=`translateZ(${-L}px) rotateX(${D*e}deg)`;W.current.style.transform=n,W.current.childNodes.forEach(r=>{let o=r,u=Math.abs(Number(o.dataset.index)-e);o.style.visibility=u>R?"hidden":"visible"})}return H.current&&(H.current.style.transform=`translateY(${-e*p}px)`),e},x=()=>{cancelAnimationFrame(G.current)},K=(t,e,n,r)=>{if(t===e||n===0){k(t);return}let o=performance.now(),u=e-t,l=w=>{let y=(w-o)/1e3;if(y<n){let q=Wt(y/n);m.current=k(t+q*u),G.current=requestAnimationFrame(l)}else x(),m.current=k(e),r==null||r()};requestAnimationFrame(l)},C=t=>{let e=F(t)|0,n=c?e:Math.min(Math.max(e,0),a.length-1);if(!c&&n!==t)return;m.current=k(n);let r=a[m.current];B(r.value)},gt=t=>{let e=a.findIndex(n=>n.value===t);if(e===-1){console.error("Invalid value selected:",t);return}x(),C(e)},ft=t=>{var e,n;try{let r=(t instanceof MouseEvent?t.clientY:(n=(e=t.touches)==null?void 0:e[0])==null?void 0:n.clientY)||0,o=O.current;o.yList.push([r,Date.now()]),o.yList.length>5&&o.yList.shift();let u=(o.startY-r)/p,l=m.current+u;if(c)l=F(l);else{let w=a.length;l<0?l*=ct:l>w&&(l=w+(l-w)*ct)}o.touchScroll=k(l)}catch(r){console.error("Error in updateScrollDuringDrag:",r)}},_=t=>{!S.current&&!b.current.contains(t.target)&&t.target!==b.current||(t.cancelable&&t.preventDefault(),a.length&&ft(t))},J=t=>{var e,n,r;try{S.current=!0;let o=new AbortController,{signal:u}=o;z.current=o;let l={signal:u,passive:!1};(e=b.current)==null||e.addEventListener("touchmove",_,l),document.addEventListener("mousemove",_,l);let w=(t instanceof MouseEvent?t.clientY:(r=(n=t.touches)==null?void 0:n[0])==null?void 0:r.clientY)||0,y=O.current;y.startY=w,y.yList=[[w,Date.now()]],y.touchScroll=m.current,x()}catch(o){console.error("Error in initiateDragGesture:",o)}},U=(0,h.useCallback)(t=>{let e=S.current,n=b.current.contains(t.target)||t.target===b.current;(e||n)&&t.cancelable&&(t.preventDefault(),a.length&&J(t))},[J]),pt=t=>{let e=m.current,n=e,r=t>0?-X:X,o=0;if(c){o=Math.abs(t/r);let u=t*o+.5*r*o*o;n=Math.round(e+u)}else if(e<0||e>a.length-1){let u=P(e,0,a.length-1),l=e-u;r=ut,o=Math.sqrt(Math.abs(l/r)),t=r*o,t=e>0?-t:t,n=u}else{o=Math.abs(t/r);let u=t*o+.5*r*o*o;n=Math.round(e+u),n=P(n,0,a.length-1);let l=n-e;o=Math.sqrt(Math.abs(l/r))}K(e,n,o,()=>{C(m.current)}),C(m.current)},Q=()=>{var t,e,n,r;try{(t=z.current)==null||t.abort(),z.current=null;let o=O.current,u=o.yList,l=0;if(u.length>1){let w=u.length,[y,q]=(e=u[w-2])!=null?e:[0,0],[mt,bt]=(n=u[w-1])!=null?n:[0,0],nt=bt-q;if(nt>0){let rt=(y-mt)/p*1e3/nt,vt=Lt,wt=rt>0?1:-1;l=Math.min(Math.abs(rt),vt)*wt}}m.current=(r=o.touchScroll)!=null?r:m.current,pt(l)}catch(o){console.error("Error in finalizeDragAndStartInertiaScroll:",o)}finally{S.current=!1}},$=(0,h.useCallback)(t=>{if(!a.length)return;let e=S.current,n=b.current.contains(t.target)||t.target===b.current;(e||n)&&t.cancelable&&(t.preventDefault(),Q())},[Q]),V=t=>{t.preventDefault();let e=Date.now();if(e-Z.current<100)return;let n=Math.sign(t.deltaY);if(!n)return;Z.current=e;let r=m.current,o=r+n;c?o=Math.round(o):o=P(Math.round(o),0,a.length-1);let u=Math.abs(o-r);if(u===0)return;let l=Math.sqrt(u/5);x(),K(r,o,l,()=>{C(m.current)})},N=(0,h.useCallback)(t=>{if(!a.length||!b.current)return;let e=S.current,n=b.current.contains(t.target)||t.target===b.current;(e||n)&&t.cancelable&&(t.preventDefault(),V(t))},[V]);return(0,h.useEffect)(()=>{let t=b.current;if(!t)return;let e=new AbortController,{signal:n}=e,r={signal:n,passive:!1};return t.addEventListener("touchstart",U,r),t.addEventListener("touchend",$,r),t.addEventListener("wheel",N,r),document.addEventListener("mousedown",U,r),document.addEventListener("mouseup",$,r),()=>e.abort()},[$,U,N]),(0,h.useEffect)(()=>{gt(T)},[T,i]),M.default.createElement("div",{ref:b,"data-rwp":!0,style:{height:lt}},M.default.createElement("ul",{ref:W,"data-rwp-options":!0},ht),M.default.createElement("div",{className:f==null?void 0:f.highlightWrapper,"data-rwp-highlight-wrapper":!0,"data-slot":"highlight-wrapper",style:{height:p,lineHeight:`${p}px`}},M.default.createElement("ul",{ref:H,"data-rwp-highlight-list":!0,style:{top:c?-p:void 0}},dt)))};0&&(module.exports={WheelPicker,WheelPickerWrapper});
1
+ "use strict";"use client";var St=Object.create;var A=Object.defineProperty;var kt=Object.getOwnPropertyDescriptor;var Et=Object.getOwnPropertyNames;var Dt=Object.getPrototypeOf,Ct=Object.prototype.hasOwnProperty;var It=(s,c)=>{for(var d in c)A(s,d,{get:c[d],enumerable:!0})},st=(s,c,d,g)=>{if(c&&typeof c=="object"||typeof c=="function")for(let i of Et(c))!Ct.call(s,i)&&i!==d&&A(s,i,{get:()=>c[i],enumerable:!(g=kt(c,i))||g.enumerable});return s};var at=(s,c,d)=>(d=s!=null?St(Dt(s)):{},st(c||!s||!s.__esModule?A(d,"default",{value:s,enumerable:!0}):d,s)),Lt=s=>st(A({},"__esModule",{value:!0}),s);var Ht={};It(Ht,{WheelPicker:()=>Rt,WheelPickerWrapper:()=>At});module.exports=Lt(Ht);var S=at(require("react")),h=require("react");var T=at(require("react"));function ct(s){let c=T.default.useRef(s);return T.default.useEffect(()=>{c.current=s}),T.default.useMemo(()=>(...d)=>{var g;return(g=c.current)==null?void 0:g.call(c,...d)},[])}function Wt({defaultProp:s,onChange:c}){let d=T.default.useState(s),[g]=d,i=T.default.useRef(g),w=ct(c);return T.default.useEffect(()=>{i.current!==g&&(w(g),i.current=g)},[g,i,w]),d}function it({prop:s,defaultProp:c,onChange:d=()=>{}}){let[g,i]=Wt({defaultProp:c,onChange:d}),w=s!==void 0,R=w?s:g,I=ct(d),f=T.default.useCallback(k=>{if(w){let a=typeof k=="function"?k(s):k;a!==s&&I(a)}else i(k)},[w,s,i,I]);return[R,f]}var lt=.3,xt=30,Yt=s=>Math.pow(s-1,3)+1,q=(s,c,d)=>Math.max(c,Math.min(s,d)),At=({className:s,children:c})=>S.default.createElement("div",{className:s,"data-rwp-wrapper":!0},c),Rt=({defaultValue:s,value:c,onValueChange:d,options:g,infinite:i=!1,visibleCount:w=20,dragSensitivity:R=3,optionItemHeight:I=30,classNames:f})=>{var et,nt;let[k=(nt=(et=g[0])==null?void 0:et.value)!=null?nt:"",B]=it({defaultProp:s,prop:c,onChange:d}),a=(0,h.useMemo)(()=>{if(!i)return g;let t=[],n=Math.ceil(w/2);if(g.length===0)return t;for(;t.length<n;)t.push(...g);return t},[w,g,i]),p=I,j=p*.5,M=360/w,L=p/Math.tan(M*Math.PI/180),ut=Math.round(L*2+p*.25),E=w>>2,X=R*10,ht=10,b=(0,h.useRef)(null),W=(0,h.useRef)(null),H=(0,h.useRef)(null),v=(0,h.useRef)(0),G=(0,h.useRef)(0),D=(0,h.useRef)(!1),Z=(0,h.useRef)(0),O=(0,h.useRef)({startY:0,yList:[],touchScroll:0,isClick:!0}),z=(0,h.useRef)(null),dt=(0,h.useMemo)(()=>{let t=(e,r,o)=>S.default.createElement("li",{key:r,className:f==null?void 0:f.optionItem,"data-slot":"option-item","data-rwp-option":!0,"data-index":r,style:{top:-j,height:p,lineHeight:`${p}px`,transform:`rotateX(${o}deg) translateZ(${L}px)`,visibility:"hidden"}},e.label),n=a.map((e,r)=>t(e,r,-M*r));if(i)for(let e=0;e<E;++e){let r=-e-1,o=e+a.length;n.unshift(t(a[a.length-e-1],r,M*(e+1))),n.push(t(a[e],o,-M*o))}return n},[p,j,i,M,a,E,L,f==null?void 0:f.optionItem]),gt=(0,h.useMemo)(()=>{let t=(e,r)=>S.default.createElement("li",{key:r,className:f==null?void 0:f.highlightItem,"data-slot":"highlight-item","data-rwp-highlight-item":!0,style:{height:p}},e.label),n=a.map((e,r)=>t(e,r));if(i){let e=a[0],r=a[a.length-1];n.unshift(t(r,"infinite-start")),n.push(t(e,"infinite-end"))}return n},[f==null?void 0:f.highlightItem,p,i,a]),ft=(0,h.useMemo)(()=>{let t=0,n=Math.PI/180,e=[];for(let r=E-1;r>=-E+1;--r){let o=r*M,u=p*Math.cos(o*n),l=t;t+=u,e.push([l,t])}return e},[M,p,E]),P=t=>(t%a.length+a.length)%a.length,C=t=>{let n=i?P(t):t;if(W.current){let e=`translateZ(${-L}px) rotateX(${M*n}deg)`;W.current.style.transform=e,W.current.childNodes.forEach(r=>{let o=r,u=Math.abs(Number(o.dataset.index)-n);o.style.visibility=u>E?"hidden":"visible"})}return H.current&&(H.current.style.transform=`translateY(${-n*p}px)`),n},x=()=>{cancelAnimationFrame(G.current)},K=(t,n,e,r)=>{if(t===n||e===0){C(t);return}let o=performance.now(),u=n-t,l=m=>{let y=(m-o)/1e3;if(y<e){let $=Yt(y/e);v.current=C(t+$*u),G.current=requestAnimationFrame(l)}else x(),v.current=C(n),r==null||r()};requestAnimationFrame(l)},Y=t=>{let n=P(t)|0,e=i?n:Math.min(Math.max(n,0),a.length-1);if(!i&&e!==t)return;v.current=C(e);let r=a[v.current];B(r.value)},pt=t=>{let n=a.findIndex(e=>e.value===t);if(n===-1){console.error("Invalid value selected:",t);return}x(),Y(n)},_=t=>{let n=v.current,e=n+t;i?e=Math.round(e):e=q(Math.round(e),0,a.length-1);let r=Math.abs(e-n);if(r===0)return;let o=Math.sqrt(r/5);x(),K(n,e,o,()=>{Y(v.current)})},mt=t=>{let n=b.current;if(!n){console.error("Container reference is not set.");return}let{top:e}=n.getBoundingClientRect(),r=t-e,o=ft.findIndex(([l,m])=>r>=l&&r<=m);if(o===-1){console.error("No item found for click position:",r);return}let u=(E-o-1)*-1;_(u)},bt=t=>{var n,e;try{let r=(t instanceof MouseEvent?t.clientY:(e=(n=t.touches)==null?void 0:n[0])==null?void 0:e.clientY)||0,o=O.current;o.isClick&&Math.abs(r-o.startY)>5&&(o.isClick=!1),o.yList.push([r,Date.now()]),o.yList.length>5&&o.yList.shift();let u=(o.startY-r)/p,l=v.current+u;if(i)l=P(l);else{let m=a.length;l<0?l*=lt:l>m&&(l=m+(l-m)*lt)}o.touchScroll=C(l)}catch(r){console.error("Error in updateScrollDuringDrag:",r)}},J=t=>{!D.current&&!b.current.contains(t.target)&&t.target!==b.current||(t.cancelable&&t.preventDefault(),a.length&&bt(t))},Q=t=>{var n,e,r;try{D.current=!0;let o=new AbortController,{signal:u}=o;z.current=o;let l={signal:u,passive:!1};(n=b.current)==null||n.addEventListener("touchmove",J,l),document.addEventListener("mousemove",J,l);let m=(t instanceof MouseEvent?t.clientY:(r=(e=t.touches)==null?void 0:e[0])==null?void 0:r.clientY)||0,y=O.current;y.startY=m,y.yList=[[m,Date.now()]],y.touchScroll=v.current,y.isClick=!0,x()}catch(o){console.error("Error in initiateDragGesture:",o)}},F=(0,h.useCallback)(t=>{let n=D.current,e=b.current.contains(t.target)||t.target===b.current;(n||e)&&t.cancelable&&(t.preventDefault(),a.length&&Q(t))},[Q]),vt=t=>{let n=v.current,e=n,r=t>0?-X:X,o=0;if(i){o=Math.abs(t/r);let u=t*o+.5*r*o*o;e=Math.round(n+u)}else if(n<0||n>a.length-1){let u=q(n,0,a.length-1),l=n-u;r=ht,o=Math.sqrt(Math.abs(l/r)),t=r*o,t=n>0?-t:t,e=u}else{o=Math.abs(t/r);let u=t*o+.5*r*o*o;e=Math.round(n+u),e=q(e,0,a.length-1);let l=e-n;o=Math.sqrt(Math.abs(l/r))}K(n,e,o,()=>{Y(v.current)}),Y(v.current)},V=()=>{var t,n,e,r;try{(t=z.current)==null||t.abort(),z.current=null;let o=O.current;if(o.isClick){mt(o.startY);return}let u=o.yList,l=0;if(u.length>1){let m=u.length,[y,$]=(n=u[m-2])!=null?n:[0,0],[wt,yt]=(e=u[m-1])!=null?e:[0,0],rt=yt-$;if(rt>0){let ot=(y-wt)/p*1e3/rt,Mt=xt,Tt=ot>0?1:-1;l=Math.min(Math.abs(ot),Mt)*Tt}}v.current=(r=o.touchScroll)!=null?r:v.current,vt(l)}catch(o){console.error("Error in finalizeDragAndStartInertiaScroll:",o)}finally{D.current=!1}},U=(0,h.useCallback)(t=>{if(!a.length)return;let n=D.current,e=b.current.contains(t.target)||t.target===b.current;(n||e)&&t.cancelable&&(t.preventDefault(),V())},[V]),N=t=>{t.preventDefault();let n=Date.now();if(n-Z.current<100)return;let e=Math.sign(t.deltaY);e&&(Z.current=n,_(e))},tt=(0,h.useCallback)(t=>{if(!a.length||!b.current)return;let n=D.current,e=b.current.contains(t.target)||t.target===b.current;(n||e)&&t.cancelable&&(t.preventDefault(),N(t))},[N]);return(0,h.useEffect)(()=>{let t=b.current;if(!t)return;let n=new AbortController,{signal:e}=n,r={signal:e,passive:!1};return t.addEventListener("touchstart",F,r),t.addEventListener("touchend",U,r),t.addEventListener("wheel",tt,r),document.addEventListener("mousedown",F,r),document.addEventListener("mouseup",U,r),()=>n.abort()},[U,F,tt]),(0,h.useEffect)(()=>{pt(k)},[k,c]),S.default.createElement("div",{ref:b,"data-rwp":!0,style:{height:ut}},S.default.createElement("ul",{ref:W,"data-rwp-options":!0},dt),S.default.createElement("div",{className:f==null?void 0:f.highlightWrapper,"data-rwp-highlight-wrapper":!0,"data-slot":"highlight-wrapper",style:{height:p,lineHeight:`${p}px`}},S.default.createElement("ul",{ref:H,"data-rwp-highlight-list":!0,style:{top:i?-p:void 0}},gt)))};0&&(module.exports={WheelPicker,WheelPickerWrapper});
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- "use client";import T from"react";import{useCallback as q,useEffect as it,useMemo as P,useRef as w}from"react";import M from"react";function st(l){let d=M.useRef(l);return M.useEffect(()=>{d.current=l}),M.useMemo(()=>(...m)=>{var h;return(h=d.current)==null?void 0:h.call(d,...m)},[])}function yt({defaultProp:l,onChange:d}){let m=M.useState(l),[h]=m,c=M.useRef(h),b=st(d);return M.useEffect(()=>{c.current!==h&&(b(h),c.current=h)},[h,c,b]),m}function at({prop:l,defaultProp:d,onChange:m=()=>{}}){let[h,c]=yt({defaultProp:d,onChange:m}),b=l!==void 0,Y=b?l:h,I=st(m),u=M.useCallback(E=>{if(b){let s=typeof E=="function"?E(l):E;s!==l&&I(s)}else c(E)},[b,l,c,I]);return[Y,u]}var ct=.3,Et=30,Mt=l=>Math.pow(l-1,3)+1,B=(l,d,m)=>Math.max(d,Math.min(l,m)),At=({className:l,children:d})=>T.createElement("div",{className:l,"data-rwp-wrapper":!0},d),Rt=({defaultValue:l,value:d,onValueChange:m,options:h,infinite:c=!1,visibleCount:b=20,dragSensitivity:Y=3,optionItemHeight:I=30,classNames:u})=>{var et,nt;let[E=(nt=(et=h[0])==null?void 0:et.value)!=null?nt:"",j]=at({defaultProp:l,prop:d,onChange:m}),s=P(()=>{if(!c)return h;let t=[],e=Math.ceil(b/2);if(h.length===0)return t;for(;t.length<e;)t.push(...h);return t},[b,h,c]),g=I,X=g*.5,D=360/b,L=g/Math.tan(D*Math.PI/180),lt=Math.round(L*2+g*.25),A=b>>2,G=Y*10,ut=10,p=w(null),W=w(null),R=w(null),f=w(0),Z=w(0),S=w(!1),K=w(0),H=w({startY:0,yList:[]}),O=w(null),ht=P(()=>{let t=(n,r,o)=>T.createElement("li",{key:r,className:u==null?void 0:u.optionItem,"data-slot":"option-item","data-rwp-option":!0,"data-index":r,style:{top:-X,height:g,lineHeight:`${g}px`,transform:`rotateX(${o}deg) translateZ(${L}px)`,visibility:"hidden"}},n.label),e=s.map((n,r)=>t(n,r,-D*r));if(c)for(let n=0;n<A;++n){let r=-n-1,o=n+s.length;e.unshift(t(s[s.length-n-1],r,D*(n+1))),e.push(t(s[n],o,-D*o))}return e},[g,X,c,D,s,A,L,u==null?void 0:u.optionItem]),dt=P(()=>{let t=(n,r)=>T.createElement("li",{key:r,className:u==null?void 0:u.highlightItem,"data-slot":"highlight-item","data-rwp-highlight-item":!0,style:{height:g}},n.label),e=s.map((n,r)=>t(n,r));if(c){let n=s[0],r=s[s.length-1];e.unshift(t(r,"infinite-start")),e.push(t(n,"infinite-end"))}return e},[u==null?void 0:u.highlightItem,g,c,s]),z=t=>(t%s.length+s.length)%s.length,k=t=>{let e=c?z(t):t;if(W.current){let n=`translateZ(${-L}px) rotateX(${D*e}deg)`;W.current.style.transform=n,W.current.childNodes.forEach(r=>{let o=r,i=Math.abs(Number(o.dataset.index)-e);o.style.visibility=i>A?"hidden":"visible"})}return R.current&&(R.current.style.transform=`translateY(${-e*g}px)`),e},x=()=>{cancelAnimationFrame(Z.current)},_=(t,e,n,r)=>{if(t===e||n===0){k(t);return}let o=performance.now(),i=e-t,a=v=>{let y=(v-o)/1e3;if(y<n){let $=Mt(y/n);f.current=k(t+$*i),Z.current=requestAnimationFrame(a)}else x(),f.current=k(e),r==null||r()};requestAnimationFrame(a)},C=t=>{let e=z(t)|0,n=c?e:Math.min(Math.max(e,0),s.length-1);if(!c&&n!==t)return;f.current=k(n);let r=s[f.current];j(r.value)},gt=t=>{let e=s.findIndex(n=>n.value===t);if(e===-1){console.error("Invalid value selected:",t);return}x(),C(e)},ft=t=>{var e,n;try{let r=(t instanceof MouseEvent?t.clientY:(n=(e=t.touches)==null?void 0:e[0])==null?void 0:n.clientY)||0,o=H.current;o.yList.push([r,Date.now()]),o.yList.length>5&&o.yList.shift();let i=(o.startY-r)/g,a=f.current+i;if(c)a=z(a);else{let v=s.length;a<0?a*=ct:a>v&&(a=v+(a-v)*ct)}o.touchScroll=k(a)}catch(r){console.error("Error in updateScrollDuringDrag:",r)}},J=t=>{!S.current&&!p.current.contains(t.target)&&t.target!==p.current||(t.cancelable&&t.preventDefault(),s.length&&ft(t))},Q=t=>{var e,n,r;try{S.current=!0;let o=new AbortController,{signal:i}=o;O.current=o;let a={signal:i,passive:!1};(e=p.current)==null||e.addEventListener("touchmove",J,a),document.addEventListener("mousemove",J,a);let v=(t instanceof MouseEvent?t.clientY:(r=(n=t.touches)==null?void 0:n[0])==null?void 0:r.clientY)||0,y=H.current;y.startY=v,y.yList=[[v,Date.now()]],y.touchScroll=f.current,x()}catch(o){console.error("Error in initiateDragGesture:",o)}},F=q(t=>{let e=S.current,n=p.current.contains(t.target)||t.target===p.current;(e||n)&&t.cancelable&&(t.preventDefault(),s.length&&Q(t))},[Q]),pt=t=>{let e=f.current,n=e,r=t>0?-G:G,o=0;if(c){o=Math.abs(t/r);let i=t*o+.5*r*o*o;n=Math.round(e+i)}else if(e<0||e>s.length-1){let i=B(e,0,s.length-1),a=e-i;r=ut,o=Math.sqrt(Math.abs(a/r)),t=r*o,t=e>0?-t:t,n=i}else{o=Math.abs(t/r);let i=t*o+.5*r*o*o;n=Math.round(e+i),n=B(n,0,s.length-1);let a=n-e;o=Math.sqrt(Math.abs(a/r))}_(e,n,o,()=>{C(f.current)}),C(f.current)},V=()=>{var t,e,n,r;try{(t=O.current)==null||t.abort(),O.current=null;let o=H.current,i=o.yList,a=0;if(i.length>1){let v=i.length,[y,$]=(e=i[v-2])!=null?e:[0,0],[mt,bt]=(n=i[v-1])!=null?n:[0,0],rt=bt-$;if(rt>0){let ot=(y-mt)/g*1e3/rt,vt=Et,wt=ot>0?1:-1;a=Math.min(Math.abs(ot),vt)*wt}}f.current=(r=o.touchScroll)!=null?r:f.current,pt(a)}catch(o){console.error("Error in finalizeDragAndStartInertiaScroll:",o)}finally{S.current=!1}},U=q(t=>{if(!s.length)return;let e=S.current,n=p.current.contains(t.target)||t.target===p.current;(e||n)&&t.cancelable&&(t.preventDefault(),V())},[V]),N=t=>{t.preventDefault();let e=Date.now();if(e-K.current<100)return;let n=Math.sign(t.deltaY);if(!n)return;K.current=e;let r=f.current,o=r+n;c?o=Math.round(o):o=B(Math.round(o),0,s.length-1);let i=Math.abs(o-r);if(i===0)return;let a=Math.sqrt(i/5);x(),_(r,o,a,()=>{C(f.current)})},tt=q(t=>{if(!s.length||!p.current)return;let e=S.current,n=p.current.contains(t.target)||t.target===p.current;(e||n)&&t.cancelable&&(t.preventDefault(),N(t))},[N]);return it(()=>{let t=p.current;if(!t)return;let e=new AbortController,{signal:n}=e,r={signal:n,passive:!1};return t.addEventListener("touchstart",F,r),t.addEventListener("touchend",U,r),t.addEventListener("wheel",tt,r),document.addEventListener("mousedown",F,r),document.addEventListener("mouseup",U,r),()=>e.abort()},[U,F,tt]),it(()=>{gt(E)},[E,d]),T.createElement("div",{ref:p,"data-rwp":!0,style:{height:lt}},T.createElement("ul",{ref:W,"data-rwp-options":!0},ht),T.createElement("div",{className:u==null?void 0:u.highlightWrapper,"data-rwp-highlight-wrapper":!0,"data-slot":"highlight-wrapper",style:{height:g,lineHeight:`${g}px`}},T.createElement("ul",{ref:R,"data-rwp-highlight-list":!0,style:{top:c?-g:void 0}},dt)))};export{Rt as WheelPicker,At as WheelPickerWrapper};
1
+ "use client";import E from"react";import{useCallback as q,useEffect as it,useMemo as A,useRef as y}from"react";import k from"react";function at(l){let g=k.useRef(l);return k.useEffect(()=>{g.current=l}),k.useMemo(()=>(...b)=>{var h;return(h=g.current)==null?void 0:h.call(g,...b)},[])}function St({defaultProp:l,onChange:g}){let b=k.useState(l),[h]=b,i=k.useRef(h),v=at(g);return k.useEffect(()=>{i.current!==h&&(v(h),i.current=h)},[h,i,v]),b}function ct({prop:l,defaultProp:g,onChange:b=()=>{}}){let[h,i]=St({defaultProp:g,onChange:b}),v=l!==void 0,R=v?l:h,I=at(b),u=k.useCallback(T=>{if(v){let s=typeof T=="function"?T(l):T;s!==l&&I(s)}else i(T)},[v,l,i,I]);return[R,u]}var lt=.3,kt=30,Et=l=>Math.pow(l-1,3)+1,B=(l,g,b)=>Math.max(g,Math.min(l,b)),Ot=({className:l,children:g})=>E.createElement("div",{className:l,"data-rwp-wrapper":!0},g),zt=({defaultValue:l,value:g,onValueChange:b,options:h,infinite:i=!1,visibleCount:v=20,dragSensitivity:R=3,optionItemHeight:I=30,classNames:u})=>{var nt,rt;let[T=(rt=(nt=h[0])==null?void 0:nt.value)!=null?rt:"",j]=ct({defaultProp:l,prop:g,onChange:b}),s=A(()=>{if(!i)return h;let t=[],n=Math.ceil(v/2);if(h.length===0)return t;for(;t.length<n;)t.push(...h);return t},[v,h,i]),d=I,X=d*.5,M=360/v,L=d/Math.tan(M*Math.PI/180),ut=Math.round(L*2+d*.25),S=v>>2,G=R*10,ht=10,p=y(null),W=y(null),H=y(null),m=y(0),Z=y(0),D=y(!1),K=y(0),O=y({startY:0,yList:[],touchScroll:0,isClick:!0}),z=y(null),dt=A(()=>{let t=(e,r,o)=>E.createElement("li",{key:r,className:u==null?void 0:u.optionItem,"data-slot":"option-item","data-rwp-option":!0,"data-index":r,style:{top:-X,height:d,lineHeight:`${d}px`,transform:`rotateX(${o}deg) translateZ(${L}px)`,visibility:"hidden"}},e.label),n=s.map((e,r)=>t(e,r,-M*r));if(i)for(let e=0;e<S;++e){let r=-e-1,o=e+s.length;n.unshift(t(s[s.length-e-1],r,M*(e+1))),n.push(t(s[e],o,-M*o))}return n},[d,X,i,M,s,S,L,u==null?void 0:u.optionItem]),gt=A(()=>{let t=(e,r)=>E.createElement("li",{key:r,className:u==null?void 0:u.highlightItem,"data-slot":"highlight-item","data-rwp-highlight-item":!0,style:{height:d}},e.label),n=s.map((e,r)=>t(e,r));if(i){let e=s[0],r=s[s.length-1];n.unshift(t(r,"infinite-start")),n.push(t(e,"infinite-end"))}return n},[u==null?void 0:u.highlightItem,d,i,s]),ft=A(()=>{let t=0,n=Math.PI/180,e=[];for(let r=S-1;r>=-S+1;--r){let o=r*M,c=d*Math.cos(o*n),a=t;t+=c,e.push([a,t])}return e},[M,d,S]),P=t=>(t%s.length+s.length)%s.length,C=t=>{let n=i?P(t):t;if(W.current){let e=`translateZ(${-L}px) rotateX(${M*n}deg)`;W.current.style.transform=e,W.current.childNodes.forEach(r=>{let o=r,c=Math.abs(Number(o.dataset.index)-n);o.style.visibility=c>S?"hidden":"visible"})}return H.current&&(H.current.style.transform=`translateY(${-n*d}px)`),n},x=()=>{cancelAnimationFrame(Z.current)},_=(t,n,e,r)=>{if(t===n||e===0){C(t);return}let o=performance.now(),c=n-t,a=f=>{let w=(f-o)/1e3;if(w<e){let $=Et(w/e);m.current=C(t+$*c),Z.current=requestAnimationFrame(a)}else x(),m.current=C(n),r==null||r()};requestAnimationFrame(a)},Y=t=>{let n=P(t)|0,e=i?n:Math.min(Math.max(n,0),s.length-1);if(!i&&e!==t)return;m.current=C(e);let r=s[m.current];j(r.value)},pt=t=>{let n=s.findIndex(e=>e.value===t);if(n===-1){console.error("Invalid value selected:",t);return}x(),Y(n)},J=t=>{let n=m.current,e=n+t;i?e=Math.round(e):e=B(Math.round(e),0,s.length-1);let r=Math.abs(e-n);if(r===0)return;let o=Math.sqrt(r/5);x(),_(n,e,o,()=>{Y(m.current)})},mt=t=>{let n=p.current;if(!n){console.error("Container reference is not set.");return}let{top:e}=n.getBoundingClientRect(),r=t-e,o=ft.findIndex(([a,f])=>r>=a&&r<=f);if(o===-1){console.error("No item found for click position:",r);return}let c=(S-o-1)*-1;J(c)},bt=t=>{var n,e;try{let r=(t instanceof MouseEvent?t.clientY:(e=(n=t.touches)==null?void 0:n[0])==null?void 0:e.clientY)||0,o=O.current;o.isClick&&Math.abs(r-o.startY)>5&&(o.isClick=!1),o.yList.push([r,Date.now()]),o.yList.length>5&&o.yList.shift();let c=(o.startY-r)/d,a=m.current+c;if(i)a=P(a);else{let f=s.length;a<0?a*=lt:a>f&&(a=f+(a-f)*lt)}o.touchScroll=C(a)}catch(r){console.error("Error in updateScrollDuringDrag:",r)}},Q=t=>{!D.current&&!p.current.contains(t.target)&&t.target!==p.current||(t.cancelable&&t.preventDefault(),s.length&&bt(t))},V=t=>{var n,e,r;try{D.current=!0;let o=new AbortController,{signal:c}=o;z.current=o;let a={signal:c,passive:!1};(n=p.current)==null||n.addEventListener("touchmove",Q,a),document.addEventListener("mousemove",Q,a);let f=(t instanceof MouseEvent?t.clientY:(r=(e=t.touches)==null?void 0:e[0])==null?void 0:r.clientY)||0,w=O.current;w.startY=f,w.yList=[[f,Date.now()]],w.touchScroll=m.current,w.isClick=!0,x()}catch(o){console.error("Error in initiateDragGesture:",o)}},F=q(t=>{let n=D.current,e=p.current.contains(t.target)||t.target===p.current;(n||e)&&t.cancelable&&(t.preventDefault(),s.length&&V(t))},[V]),vt=t=>{let n=m.current,e=n,r=t>0?-G:G,o=0;if(i){o=Math.abs(t/r);let c=t*o+.5*r*o*o;e=Math.round(n+c)}else if(n<0||n>s.length-1){let c=B(n,0,s.length-1),a=n-c;r=ht,o=Math.sqrt(Math.abs(a/r)),t=r*o,t=n>0?-t:t,e=c}else{o=Math.abs(t/r);let c=t*o+.5*r*o*o;e=Math.round(n+c),e=B(e,0,s.length-1);let a=e-n;o=Math.sqrt(Math.abs(a/r))}_(n,e,o,()=>{Y(m.current)}),Y(m.current)},N=()=>{var t,n,e,r;try{(t=z.current)==null||t.abort(),z.current=null;let o=O.current;if(o.isClick){mt(o.startY);return}let c=o.yList,a=0;if(c.length>1){let f=c.length,[w,$]=(n=c[f-2])!=null?n:[0,0],[wt,yt]=(e=c[f-1])!=null?e:[0,0],ot=yt-$;if(ot>0){let st=(w-wt)/d*1e3/ot,Mt=kt,Tt=st>0?1:-1;a=Math.min(Math.abs(st),Mt)*Tt}}m.current=(r=o.touchScroll)!=null?r:m.current,vt(a)}catch(o){console.error("Error in finalizeDragAndStartInertiaScroll:",o)}finally{D.current=!1}},U=q(t=>{if(!s.length)return;let n=D.current,e=p.current.contains(t.target)||t.target===p.current;(n||e)&&t.cancelable&&(t.preventDefault(),N())},[N]),tt=t=>{t.preventDefault();let n=Date.now();if(n-K.current<100)return;let e=Math.sign(t.deltaY);e&&(K.current=n,J(e))},et=q(t=>{if(!s.length||!p.current)return;let n=D.current,e=p.current.contains(t.target)||t.target===p.current;(n||e)&&t.cancelable&&(t.preventDefault(),tt(t))},[tt]);return it(()=>{let t=p.current;if(!t)return;let n=new AbortController,{signal:e}=n,r={signal:e,passive:!1};return t.addEventListener("touchstart",F,r),t.addEventListener("touchend",U,r),t.addEventListener("wheel",et,r),document.addEventListener("mousedown",F,r),document.addEventListener("mouseup",U,r),()=>n.abort()},[U,F,et]),it(()=>{pt(T)},[T,g]),E.createElement("div",{ref:p,"data-rwp":!0,style:{height:ut}},E.createElement("ul",{ref:W,"data-rwp-options":!0},dt),E.createElement("div",{className:u==null?void 0:u.highlightWrapper,"data-rwp-highlight-wrapper":!0,"data-slot":"highlight-wrapper",style:{height:d,lineHeight:`${d}px`}},E.createElement("ul",{ref:H,"data-rwp-highlight-list":!0,style:{top:i?-d:void 0}},gt)))};export{zt as WheelPicker,Ot as WheelPickerWrapper};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ncdai/react-wheel-picker",
3
- "version": "1.0.12",
3
+ "version": "1.0.13",
4
4
  "description": "iOS-like wheel picker for React with smooth inertia scrolling and infinite loop support.",
5
5
  "publishConfig": {
6
6
  "access": "public",