@ncdai/react-swipe-actions 0.1.1 → 0.2.0
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.d.mts +15 -3
- package/dist/index.d.ts +15 -3
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -36,6 +36,12 @@ type SwipeItemProps = UseRenderComponentProps<"div", SwipeItemState> & {
|
|
|
36
36
|
velocityFactor?: number;
|
|
37
37
|
/** @defaultValue false */
|
|
38
38
|
disabled?: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Fraction of the item width the drag must pass for the side's `fullSwipe`
|
|
41
|
+
* action to arm, firing on release instead of opening the item.
|
|
42
|
+
* @defaultValue 0.5
|
|
43
|
+
*/
|
|
44
|
+
fullSwipeThreshold?: number;
|
|
39
45
|
/**
|
|
40
46
|
* Close the item on any scroll on the page.
|
|
41
47
|
* @defaultValue false
|
|
@@ -43,19 +49,25 @@ type SwipeItemProps = UseRenderComponentProps<"div", SwipeItemState> & {
|
|
|
43
49
|
closeOnScroll?: boolean;
|
|
44
50
|
onOpenChange?: (state: SwipeState) => void;
|
|
45
51
|
};
|
|
46
|
-
declare function SwipeItem({ render, threshold, velocityFactor, disabled, closeOnScroll, onOpenChange, ...props }: SwipeItemProps): React.JSX.Element;
|
|
52
|
+
declare function SwipeItem({ render, threshold, velocityFactor, fullSwipeThreshold, disabled, closeOnScroll, onOpenChange, ...props }: SwipeItemProps): React.JSX.Element;
|
|
47
53
|
type SwipeActionsProps = UseRenderComponentProps<"div"> & {
|
|
48
54
|
side: SwipeSide;
|
|
49
55
|
};
|
|
50
|
-
declare function SwipeActions({ render, side, ...props }: SwipeActionsProps): React.
|
|
56
|
+
declare function SwipeActions({ render, side, ...props }: SwipeActionsProps): React.JSX.Element;
|
|
51
57
|
type SwipeActionProps = UseRenderComponentProps<"button"> & {
|
|
52
58
|
/**
|
|
53
59
|
* Close the item once the click handler has run.
|
|
54
60
|
* @defaultValue true
|
|
55
61
|
*/
|
|
56
62
|
closeOnClick?: boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Run this action when the item is dragged past `fullSwipeThreshold`, the way
|
|
65
|
+
* Mail does on iOS. One action per side; it takes over the strip once armed.
|
|
66
|
+
* @defaultValue false
|
|
67
|
+
*/
|
|
68
|
+
fullSwipe?: boolean;
|
|
57
69
|
};
|
|
58
|
-
declare function SwipeAction({ render, closeOnClick, ...props }: SwipeActionProps): React.ReactElement<any, string | React.JSXElementConstructor<any>> | null;
|
|
70
|
+
declare function SwipeAction({ render, closeOnClick, fullSwipe, ...props }: SwipeActionProps): React.ReactElement<any, string | React.JSXElementConstructor<any>> | null;
|
|
59
71
|
type SwipeContentProps = HTMLMotionProps<"div">;
|
|
60
72
|
declare function SwipeContent({ style, ...props }: SwipeContentProps): React.JSX.Element;
|
|
61
73
|
|
package/dist/index.d.ts
CHANGED
|
@@ -36,6 +36,12 @@ type SwipeItemProps = UseRenderComponentProps<"div", SwipeItemState> & {
|
|
|
36
36
|
velocityFactor?: number;
|
|
37
37
|
/** @defaultValue false */
|
|
38
38
|
disabled?: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Fraction of the item width the drag must pass for the side's `fullSwipe`
|
|
41
|
+
* action to arm, firing on release instead of opening the item.
|
|
42
|
+
* @defaultValue 0.5
|
|
43
|
+
*/
|
|
44
|
+
fullSwipeThreshold?: number;
|
|
39
45
|
/**
|
|
40
46
|
* Close the item on any scroll on the page.
|
|
41
47
|
* @defaultValue false
|
|
@@ -43,19 +49,25 @@ type SwipeItemProps = UseRenderComponentProps<"div", SwipeItemState> & {
|
|
|
43
49
|
closeOnScroll?: boolean;
|
|
44
50
|
onOpenChange?: (state: SwipeState) => void;
|
|
45
51
|
};
|
|
46
|
-
declare function SwipeItem({ render, threshold, velocityFactor, disabled, closeOnScroll, onOpenChange, ...props }: SwipeItemProps): React.JSX.Element;
|
|
52
|
+
declare function SwipeItem({ render, threshold, velocityFactor, fullSwipeThreshold, disabled, closeOnScroll, onOpenChange, ...props }: SwipeItemProps): React.JSX.Element;
|
|
47
53
|
type SwipeActionsProps = UseRenderComponentProps<"div"> & {
|
|
48
54
|
side: SwipeSide;
|
|
49
55
|
};
|
|
50
|
-
declare function SwipeActions({ render, side, ...props }: SwipeActionsProps): React.
|
|
56
|
+
declare function SwipeActions({ render, side, ...props }: SwipeActionsProps): React.JSX.Element;
|
|
51
57
|
type SwipeActionProps = UseRenderComponentProps<"button"> & {
|
|
52
58
|
/**
|
|
53
59
|
* Close the item once the click handler has run.
|
|
54
60
|
* @defaultValue true
|
|
55
61
|
*/
|
|
56
62
|
closeOnClick?: boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Run this action when the item is dragged past `fullSwipeThreshold`, the way
|
|
65
|
+
* Mail does on iOS. One action per side; it takes over the strip once armed.
|
|
66
|
+
* @defaultValue false
|
|
67
|
+
*/
|
|
68
|
+
fullSwipe?: boolean;
|
|
57
69
|
};
|
|
58
|
-
declare function SwipeAction({ render, closeOnClick, ...props }: SwipeActionProps): React.ReactElement<any, string | React.JSXElementConstructor<any>> | null;
|
|
70
|
+
declare function SwipeAction({ render, closeOnClick, fullSwipe, ...props }: SwipeActionProps): React.ReactElement<any, string | React.JSXElementConstructor<any>> | null;
|
|
59
71
|
type SwipeContentProps = HTMLMotionProps<"div">;
|
|
60
72
|
declare function SwipeContent({ style, ...props }: SwipeContentProps): React.JSX.Element;
|
|
61
73
|
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";"use client";var
|
|
1
|
+
"use strict";"use client";var Pe=Object.create;var F=Object.defineProperty,Te=Object.defineProperties,xe=Object.getOwnPropertyDescriptor,ke=Object.getOwnPropertyDescriptors,Ae=Object.getOwnPropertyNames,B=Object.getOwnPropertySymbols,De=Object.getPrototypeOf,Y=Object.prototype.hasOwnProperty,se=Object.prototype.propertyIsEnumerable;var ie=(t,e,n)=>e in t?F(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,g=(t,e)=>{for(var n in e||(e={}))Y.call(e,n)&&ie(t,n,e[n]);if(B)for(var n of B(e))se.call(e,n)&&ie(t,n,e[n]);return t},C=(t,e)=>Te(t,ke(e));var A=(t,e)=>{var n={};for(var r in t)Y.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(t!=null&&B)for(var r of B(t))e.indexOf(r)<0&&se.call(t,r)&&(n[r]=t[r]);return n};var Me=(t,e)=>{for(var n in e)F(t,n,{get:e[n],enumerable:!0})},ae=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Ae(e))!Y.call(t,i)&&i!==n&&F(t,i,{get:()=>e[i],enumerable:!(r=xe(e,i))||r.enumerable});return t};var ce=(t,e,n)=>(n=t!=null?Pe(De(t)):{},ae(e||!t||!t.__esModule?F(n,"default",{value:t,enumerable:!0}):n,t)),We=t=>ae(F({},"__esModule",{value:!0}),t);var Ke={};Me(Ke,{SwipeAction:()=>ge,SwipeActions:()=>me,SwipeContent:()=>ye,SwipeItem:()=>we,SwipeRoot:()=>fe});module.exports=We(Ke);var o=ce(require("react")),E=require("motion/react");var O=ce(require("react"));function K({defaultTagName:t,props:e,render:n,state:r={},stateAttributesMapping:i}){let a=D(Ie(r,i),e);if(!n)return O.createElement(t,a);if(typeof n=="function")return n(a,r);if(!O.isValidElement(n))return null;let l=n.props,S=D(a,l),R=C(g({},S),{ref:le(a.ref,l.ref)});return O.cloneElement(n,R)}function D(...t){let e={};for(let n of t){if(!n)continue;let r=n;for(let i of Object.keys(r)){let a=r[i];if(a===void 0)continue;let l=e[i];i==="className"?e[i]=[l,a].filter(Boolean).join(" "):i==="style"?e[i]=g(g({},l),a):i==="ref"?e[i]=le(l,a):He(i)&&typeof l=="function"&&typeof a=="function"?e[i]=Le(a,l):e[i]=a}}return e}function Ie(t,e){var r;let n={};for(let i of Object.keys(t)){let a=t[i],l=(r=e==null?void 0:e[i])==null?void 0:r.call(e,a);if(l){Object.assign(n,l);continue}if(i==="slot"){n["data-slot"]=a;continue}let S=`data-${String(i).replace(/[A-Z]/g,R=>`-${R.toLowerCase()}`)}`;typeof a=="boolean"?n[S]=a?"":void 0:a!=null&&(n[S]=String(a))}return n}function Le(t,e){return function(r){t(r),r.defaultPrevented||e(r)}}function He(t){return/^on[A-Z]/.test(t)}function le(...t){let e=t.filter(Boolean);if(e.length!==0)return n=>{for(let r of e)typeof r=="function"?r(n):r&&(r.current=n)}}var z=require("react/jsx-runtime"),Ne={position:"relative",isolation:"isolate",overflow:"clip"},Oe={position:"absolute",top:0,bottom:0,zIndex:0,display:"flex"},Ve={position:"relative",zIndex:1},de={type:"spring",stiffness:500,damping:45,mass:.8},Ue=C(g({},de),{damping:36}),_e=4,ue={duration:.18,ease:[.32,.72,0,1]},pe=o.createContext(null);function fe(n){var r=n,{render:t}=r,e=A(r,["render"]);let i=o.useRef(new Map),a=o.useMemo(()=>({register(S,R){return i.current.set(S,R),()=>{i.current.delete(S)}},notifyOpen(S){for(let[R,y]of i.current)R!==S&&y()}}),[]),l=K({defaultTagName:"div",render:t,props:D({"data-slot":"swipe-root"},e)});return(0,z.jsx)(pe.Provider,{value:a,children:l})}var Se=o.createContext(null),Re=o.createContext(null);function Fe(){let t=o.useContext(Re);if(!t)throw new Error("SwipeAction must be used within SwipeActions");return t}function $(){let t=o.useContext(Se);if(!t)throw new Error("Swipe parts must be used within SwipeItem");return t}function we(R){var y=R,{render:t,threshold:e=.5,velocityFactor:n=.2,fullSwipeThreshold:r=.5,disabled:i=!1,closeOnScroll:a=!1,onOpenChange:l}=y,S=A(y,["render","threshold","velocityFactor","fullSwipeThreshold","disabled","closeOnScroll","onOpenChange"]);let w=o.useId(),c=o.useContext(pe),v=(0,E.useReducedMotion)(),x=o.useRef(null),[f,d]=o.useState({left:0,right:0}),[m,h]=o.useState(0),[k,G]=o.useState(null),M=o.useRef(null),V=o.useRef({}),[Z,q]=o.useState({left:!1,right:!1}),[W,ve]=o.useState("closed"),[j,J]=o.useState(!1),I=o.useRef("closed"),L=o.useRef(!1),b=(0,E.useMotionValue)(0),Q=o.useCallback((s,u)=>{d(p=>p[s]===u?p:C(g({},p),{[s]:u}))},[]),X=o.useCallback((s,u)=>(V.current[s]=u,q(p=>C(g({},p),{[s]:!0})),()=>{delete V.current[s],q(p=>C(g({},p),{[s]:!1}))}),[]),H=o.useCallback(s=>{M.current!==s&&(M.current=s,G(s))},[]);o.useEffect(()=>{let s=x.current;if(!s)return;let u=new ResizeObserver(()=>h(s.offsetWidth));return u.observe(s),()=>u.disconnect()},[]);let P=o.useCallback((s,u)=>{let p=s==="left"?f.left:s==="right"?-f.right:0;(0,E.animate)(b,p,v?{duration:0}:u===void 0?de:C(g({},Ue),{velocity:u})),s!=="closed"&&(c==null||c.notifyOpen(w)),I.current!==s&&(I.current=s,ve(s),l==null||l(s))},[f,b,v,c,w,l]),N=o.useCallback(()=>P("closed"),[P]),U=o.useRef(()=>{});o.useEffect(()=>{U.current=N},[N]),o.useEffect(()=>c==null?void 0:c.register(w,()=>U.current()),[c,w]),o.useEffect(()=>{I.current==="left"&&b.set(f.left),I.current==="right"&&b.set(-f.right)},[f,b]);let ee=o.useCallback(()=>{L.current=!1,J(!0),c==null||c.notifyOpen(w)},[c,w]),te=o.useCallback((s,u)=>{Math.abs(u.offset.x)>_e&&(L.current=!0);let p=r*m,T=b.get();p<=0||(T<=-p&&V.current.right?H("right"):T>=p&&V.current.left?H("left"):H(null))},[b,r,m,H]),ne=o.useCallback((s,u)=>{var _,re;J(!1);let p=M.current;if(p){H(null),L.current=!1,(re=(_=V.current)[p])==null||re.call(_),P("closed",u.velocity.x);return}let T=b.get()+u.velocity.x*n;f.right>0&&T<=-f.right*e?P("right",u.velocity.x):f.left>0&&T>=f.left*e?P("left",u.velocity.x):P("closed",u.velocity.x)},[b,n,f,e,P,H]),oe=o.useCallback(s=>{if(!(!L.current&&I.current==="closed")){if(s.preventDefault(),s.stopPropagation(),L.current){L.current=!1;return}N()}},[N]);o.useEffect(()=>{if(W==="closed")return;let s=T=>{var _;(_=x.current)!=null&&_.contains(T.target)||U.current()},u=T=>{T.key==="Escape"&&U.current()},p=()=>U.current();return document.addEventListener("pointerdown",s,!0),document.addEventListener("keydown",u),a&&window.addEventListener("scroll",p,!0),()=>{document.removeEventListener("pointerdown",s,!0),document.removeEventListener("keydown",u),a&&window.removeEventListener("scroll",p,!0)}},[W,a]);let he=o.useCallback(s=>{if(i||s.key!=="ArrowLeft"&&s.key!=="ArrowRight")return;let[u,p]=s.key==="ArrowLeft"?["left","right"]:["right","left"];if(I.current===u)P("closed");else if(f[p]>0)P(p);else return;s.preventDefault()},[i,f,P]),Ee=o.useMemo(()=>({state:W,disabled:i,dragging:j}),[W,i,j]),be=o.useMemo(()=>({state:W,disabled:i,dragging:j,x:b,leftWidth:f.left,rightWidth:f.right,itemWidth:m,armed:k,fullSwipeSides:Z,setStripWidth:Q,registerFullSwipe:X,close:N,onDragStart:ee,onDrag:te,onDragEnd:ne,onClickCapture:oe}),[W,i,j,b,f,m,k,Z,Q,X,N,ee,te,ne,oe]),Ce=K({defaultTagName:"div",render:t,state:Ee,props:D({"data-slot":"swipe-item",ref:x,style:Ne,onKeyDown:he},S)});return(0,z.jsx)(Se.Provider,{value:be,children:Ce})}function me(r){var i=r,{render:t,side:e}=i,n=A(i,["render","side"]);let{state:a,armed:l,x:S,leftWidth:R,rightWidth:y,fullSwipeSides:w,setStripWidth:c}=$(),v=o.useRef(null),x=w[e],f=e==="left"?R:y;o.useEffect(()=>{let m=v.current;if(!m)return;let h=new ResizeObserver(()=>{m.style.width||c(e,m.offsetWidth)});return h.observe(m),()=>{h.disconnect(),c(e,0)}},[e,c]),(0,E.useMotionValueEvent)(S,"change",m=>{let h=v.current;if(!h)return;let k=e==="left"?m:-m,G=k>0?"":"hidden";if(h.style.visibility!==G&&(h.style.visibility=G),!x)return;let M=k>f?`${Math.round(k)}px`:"";h.style.width!==M&&(h.style.width=M)});let d=K({defaultTagName:"div",render:t,props:D({"data-slot":"swipe-actions","data-side":e,"data-armed":l===e?"":void 0,ref:v,style:C(g({},Oe),{[e]:0}),inert:a!==e},n)});return(0,z.jsx)(Re.Provider,{value:e,children:d})}function ge(i){var a=i,{render:t,closeOnClick:e=!0,fullSwipe:n=!1}=a,r=A(a,["render","closeOnClick","fullSwipe"]);let{close:l,armed:S,registerFullSwipe:R}=$(),y=Fe(),w=(0,E.useReducedMotion)(),c=o.useRef(null),v=o.useRef(0);o.useEffect(()=>{if(n)return R(y,()=>{var d;(d=c.current)==null||d.dispatchEvent(new MouseEvent("click",{bubbles:!0,cancelable:!0}))})},[n,y,R]);let x=S===y,f=x&&!n;return o.useEffect(()=>{let d=c.current;if(!d||n)return;if(f){let h=d.offsetWidth;d.style.width||(v.current=h),d.style.boxSizing="border-box",d.style.overflow="clip",d.style.minWidth="0",d.style.paddingInline="0";let k=(0,E.animate)(d,{width:[h,0]},w?{duration:0}:ue);return()=>k.stop()}if(v.current===0)return;let m=(0,E.animate)(d,{width:[d.offsetWidth,v.current]},w?{duration:0}:ue);return m.then(()=>{d.style.width="",d.style.boxSizing="",d.style.overflow="",d.style.minWidth="",d.style.paddingInline=""}),()=>m.stop()},[f,n,w]),K({defaultTagName:"button",render:t,props:D({"data-slot":"swipe-action","data-armed":x&&n?"":void 0,ref:c,type:"button",style:n?{flexGrow:1}:void 0,onClick:()=>{e&&l()}},r)})}function ye(n){var r=n,{style:t}=r,e=A(r,["style"]);let v=$(),{x:i,disabled:a,dragging:l,leftWidth:S,rightWidth:R,itemWidth:y,fullSwipeSides:w}=v,c=A(v,["x","disabled","dragging","leftWidth","rightWidth","itemWidth","fullSwipeSides"]);return(0,z.jsx)(E.motion.div,C(g({"data-slot":"swipe-content"},e),{"data-dragging":l||void 0,style:C(g(g({},Ve),t),{x:i}),drag:a?!1:"x",dragConstraints:{left:-(w.right?y:R),right:w.left?y:S},dragElastic:.2,dragMomentum:!1,onDragStart:c.onDragStart,onDrag:c.onDrag,onDragEnd:c.onDragEnd,onClickCapture:c.onClickCapture}))}0&&(module.exports={SwipeAction,SwipeActions,SwipeContent,SwipeItem,SwipeRoot});
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";var
|
|
1
|
+
"use client";var ge=Object.defineProperty,ye=Object.defineProperties;var ve=Object.getOwnPropertyDescriptors;var z=Object.getOwnPropertySymbols;var re=Object.prototype.hasOwnProperty,ie=Object.prototype.propertyIsEnumerable;var oe=(o,e,n)=>e in o?ge(o,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):o[e]=n,g=(o,e)=>{for(var n in e||(e={}))re.call(e,n)&&oe(o,n,e[n]);if(z)for(var n of z(e))ie.call(e,n)&&oe(o,n,e[n]);return o},b=(o,e)=>ye(o,ve(e));var k=(o,e)=>{var n={};for(var r in o)re.call(o,r)&&e.indexOf(r)<0&&(n[r]=o[r]);if(o!=null&&z)for(var r of z(o))e.indexOf(r)<0&&ie.call(o,r)&&(n[r]=o[r]);return n};import*as t from"react";import{animate as j,motion as Ce,useMotionValue as Pe,useMotionValueEvent as Te,useReducedMotion as ce}from"motion/react";import*as N from"react";function _({defaultTagName:o,props:e,render:n,state:r={},stateAttributesMapping:s}){let a=A(he(r,s),e);if(!n)return N.createElement(o,a);if(typeof n=="function")return n(a,r);if(!N.isValidElement(n))return null;let l=n.props,S=A(a,l),R=b(g({},S),{ref:se(a.ref,l.ref)});return N.cloneElement(n,R)}function A(...o){let e={};for(let n of o){if(!n)continue;let r=n;for(let s of Object.keys(r)){let a=r[s];if(a===void 0)continue;let l=e[s];s==="className"?e[s]=[l,a].filter(Boolean).join(" "):s==="style"?e[s]=g(g({},l),a):s==="ref"?e[s]=se(l,a):be(s)&&typeof l=="function"&&typeof a=="function"?e[s]=Ee(a,l):e[s]=a}}return e}function he(o,e){var r;let n={};for(let s of Object.keys(o)){let a=o[s],l=(r=e==null?void 0:e[s])==null?void 0:r.call(e,a);if(l){Object.assign(n,l);continue}if(s==="slot"){n["data-slot"]=a;continue}let S=`data-${String(s).replace(/[A-Z]/g,R=>`-${R.toLowerCase()}`)}`;typeof a=="boolean"?n[S]=a?"":void 0:a!=null&&(n[S]=String(a))}return n}function Ee(o,e){return function(r){o(r),r.defaultPrevented||e(r)}}function be(o){return/^on[A-Z]/.test(o)}function se(...o){let e=o.filter(Boolean);if(e.length!==0)return n=>{for(let r of e)typeof r=="function"?r(n):r&&(r.current=n)}}import{jsx as G}from"react/jsx-runtime";var xe={position:"relative",isolation:"isolate",overflow:"clip"},ke={position:"absolute",top:0,bottom:0,zIndex:0,display:"flex"},Ae={position:"relative",zIndex:1},le={type:"spring",stiffness:500,damping:45,mass:.8},De=b(g({},le),{damping:36}),Me=4,ae={duration:.18,ease:[.32,.72,0,1]},ue=t.createContext(null);function We(n){var r=n,{render:o}=r,e=k(r,["render"]);let s=t.useRef(new Map),a=t.useMemo(()=>({register(S,R){return s.current.set(S,R),()=>{s.current.delete(S)}},notifyOpen(S){for(let[R,y]of s.current)R!==S&&y()}}),[]),l=_({defaultTagName:"div",render:o,props:A({"data-slot":"swipe-root"},e)});return G(ue.Provider,{value:a,children:l})}var de=t.createContext(null),pe=t.createContext(null);function Ie(){let o=t.useContext(pe);if(!o)throw new Error("SwipeAction must be used within SwipeActions");return o}function B(){let o=t.useContext(de);if(!o)throw new Error("Swipe parts must be used within SwipeItem");return o}function Le(R){var y=R,{render:o,threshold:e=.5,velocityFactor:n=.2,fullSwipeThreshold:r=.5,disabled:s=!1,closeOnScroll:a=!1,onOpenChange:l}=y,S=k(y,["render","threshold","velocityFactor","fullSwipeThreshold","disabled","closeOnScroll","onOpenChange"]);let w=t.useId(),c=t.useContext(ue),v=ce(),T=t.useRef(null),[f,d]=t.useState({left:0,right:0}),[m,h]=t.useState(0),[x,F]=t.useState(null),D=t.useRef(null),O=t.useRef({}),[Y,$]=t.useState({left:!1,right:!1}),[M,fe]=t.useState("closed"),[K,Z]=t.useState(!1),W=t.useRef("closed"),I=t.useRef(!1),E=Pe(0),q=t.useCallback((i,u)=>{d(p=>p[i]===u?p:b(g({},p),{[i]:u}))},[]),J=t.useCallback((i,u)=>(O.current[i]=u,$(p=>b(g({},p),{[i]:!0})),()=>{delete O.current[i],$(p=>b(g({},p),{[i]:!1}))}),[]),L=t.useCallback(i=>{D.current!==i&&(D.current=i,F(i))},[]);t.useEffect(()=>{let i=T.current;if(!i)return;let u=new ResizeObserver(()=>h(i.offsetWidth));return u.observe(i),()=>u.disconnect()},[]);let C=t.useCallback((i,u)=>{let p=i==="left"?f.left:i==="right"?-f.right:0;j(E,p,v?{duration:0}:u===void 0?le:b(g({},De),{velocity:u})),i!=="closed"&&(c==null||c.notifyOpen(w)),W.current!==i&&(W.current=i,fe(i),l==null||l(i))},[f,E,v,c,w,l]),H=t.useCallback(()=>C("closed"),[C]),V=t.useRef(()=>{});t.useEffect(()=>{V.current=H},[H]),t.useEffect(()=>c==null?void 0:c.register(w,()=>V.current()),[c,w]),t.useEffect(()=>{W.current==="left"&&E.set(f.left),W.current==="right"&&E.set(-f.right)},[f,E]);let Q=t.useCallback(()=>{I.current=!1,Z(!0),c==null||c.notifyOpen(w)},[c,w]),X=t.useCallback((i,u)=>{Math.abs(u.offset.x)>Me&&(I.current=!0);let p=r*m,P=E.get();p<=0||(P<=-p&&O.current.right?L("right"):P>=p&&O.current.left?L("left"):L(null))},[E,r,m,L]),ee=t.useCallback((i,u)=>{var U,ne;Z(!1);let p=D.current;if(p){L(null),I.current=!1,(ne=(U=O.current)[p])==null||ne.call(U),C("closed",u.velocity.x);return}let P=E.get()+u.velocity.x*n;f.right>0&&P<=-f.right*e?C("right",u.velocity.x):f.left>0&&P>=f.left*e?C("left",u.velocity.x):C("closed",u.velocity.x)},[E,n,f,e,C,L]),te=t.useCallback(i=>{if(!(!I.current&&W.current==="closed")){if(i.preventDefault(),i.stopPropagation(),I.current){I.current=!1;return}H()}},[H]);t.useEffect(()=>{if(M==="closed")return;let i=P=>{var U;(U=T.current)!=null&&U.contains(P.target)||V.current()},u=P=>{P.key==="Escape"&&V.current()},p=()=>V.current();return document.addEventListener("pointerdown",i,!0),document.addEventListener("keydown",u),a&&window.addEventListener("scroll",p,!0),()=>{document.removeEventListener("pointerdown",i,!0),document.removeEventListener("keydown",u),a&&window.removeEventListener("scroll",p,!0)}},[M,a]);let Se=t.useCallback(i=>{if(s||i.key!=="ArrowLeft"&&i.key!=="ArrowRight")return;let[u,p]=i.key==="ArrowLeft"?["left","right"]:["right","left"];if(W.current===u)C("closed");else if(f[p]>0)C(p);else return;i.preventDefault()},[s,f,C]),Re=t.useMemo(()=>({state:M,disabled:s,dragging:K}),[M,s,K]),we=t.useMemo(()=>({state:M,disabled:s,dragging:K,x:E,leftWidth:f.left,rightWidth:f.right,itemWidth:m,armed:x,fullSwipeSides:Y,setStripWidth:q,registerFullSwipe:J,close:H,onDragStart:Q,onDrag:X,onDragEnd:ee,onClickCapture:te}),[M,s,K,E,f,m,x,Y,q,J,H,Q,X,ee,te]),me=_({defaultTagName:"div",render:o,state:Re,props:A({"data-slot":"swipe-item",ref:T,style:xe,onKeyDown:Se},S)});return G(de.Provider,{value:we,children:me})}function He(r){var s=r,{render:o,side:e}=s,n=k(s,["render","side"]);let{state:a,armed:l,x:S,leftWidth:R,rightWidth:y,fullSwipeSides:w,setStripWidth:c}=B(),v=t.useRef(null),T=w[e],f=e==="left"?R:y;t.useEffect(()=>{let m=v.current;if(!m)return;let h=new ResizeObserver(()=>{m.style.width||c(e,m.offsetWidth)});return h.observe(m),()=>{h.disconnect(),c(e,0)}},[e,c]),Te(S,"change",m=>{let h=v.current;if(!h)return;let x=e==="left"?m:-m,F=x>0?"":"hidden";if(h.style.visibility!==F&&(h.style.visibility=F),!T)return;let D=x>f?`${Math.round(x)}px`:"";h.style.width!==D&&(h.style.width=D)});let d=_({defaultTagName:"div",render:o,props:A({"data-slot":"swipe-actions","data-side":e,"data-armed":l===e?"":void 0,ref:v,style:b(g({},ke),{[e]:0}),inert:a!==e},n)});return G(pe.Provider,{value:e,children:d})}function Ne(s){var a=s,{render:o,closeOnClick:e=!0,fullSwipe:n=!1}=a,r=k(a,["render","closeOnClick","fullSwipe"]);let{close:l,armed:S,registerFullSwipe:R}=B(),y=Ie(),w=ce(),c=t.useRef(null),v=t.useRef(0);t.useEffect(()=>{if(n)return R(y,()=>{var d;(d=c.current)==null||d.dispatchEvent(new MouseEvent("click",{bubbles:!0,cancelable:!0}))})},[n,y,R]);let T=S===y,f=T&&!n;return t.useEffect(()=>{let d=c.current;if(!d||n)return;if(f){let h=d.offsetWidth;d.style.width||(v.current=h),d.style.boxSizing="border-box",d.style.overflow="clip",d.style.minWidth="0",d.style.paddingInline="0";let x=j(d,{width:[h,0]},w?{duration:0}:ae);return()=>x.stop()}if(v.current===0)return;let m=j(d,{width:[d.offsetWidth,v.current]},w?{duration:0}:ae);return m.then(()=>{d.style.width="",d.style.boxSizing="",d.style.overflow="",d.style.minWidth="",d.style.paddingInline=""}),()=>m.stop()},[f,n,w]),_({defaultTagName:"button",render:o,props:A({"data-slot":"swipe-action","data-armed":T&&n?"":void 0,ref:c,type:"button",style:n?{flexGrow:1}:void 0,onClick:()=>{e&&l()}},r)})}function Oe(n){var r=n,{style:o}=r,e=k(r,["style"]);let v=B(),{x:s,disabled:a,dragging:l,leftWidth:S,rightWidth:R,itemWidth:y,fullSwipeSides:w}=v,c=k(v,["x","disabled","dragging","leftWidth","rightWidth","itemWidth","fullSwipeSides"]);return G(Ce.div,b(g({"data-slot":"swipe-content"},e),{"data-dragging":l||void 0,style:b(g(g({},Ae),o),{x:s}),drag:a?!1:"x",dragConstraints:{left:-(w.right?y:R),right:w.left?y:S},dragElastic:.2,dragMomentum:!1,onDragStart:c.onDragStart,onDrag:c.onDrag,onDragEnd:c.onDragEnd,onClickCapture:c.onClickCapture}))}export{Ne as SwipeAction,He as SwipeActions,Oe as SwipeContent,Le as SwipeItem,We as SwipeRoot};
|
package/package.json
CHANGED