@aiquants/swipe-overlay 1.1.1 → 1.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.js +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +8 -9
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var E=Object.defineProperty;var
|
|
1
|
+
"use strict";var E=Object.defineProperty;var F=Object.getOwnPropertyDescriptor;var G=Object.getOwnPropertyNames;var _=Object.prototype.hasOwnProperty;var O=(e,n)=>{for(var t in n)E(e,t,{get:n[t],enumerable:!0})},U=(e,n,t,a)=>{if(n&&typeof n=="object"||typeof n=="function")for(let l of G(n))!_.call(e,l)&&l!==t&&E(e,l,{get:()=>n[l],enumerable:!(a=F(n,l))||a.enumerable});return e};var K=e=>U(E({},"__esModule",{value:!0}),e);var W={};O(W,{SwipeCloseGuardContext:()=>T,useOverlayEscapeStack:()=>X,useSwipeCloseGuard:()=>j,useSwipeGuardState:()=>N,useSwipeToDismissOverlay:()=>z,useTapClick:()=>Q,useTransitionDisplay:()=>J});module.exports=K(W);var r=require("react"),V=120,q=.5,$=40,T=(0,r.createContext)(null),j=()=>(0,r.useContext)(T)??{isBlocked:!1,requestBlock:()=>()=>{}},u=[],k=e=>{if(e.key!=="Escape")return;u[u.length-1]?.onEscape(e)&&(e.preventDefault(),e.stopPropagation())},X=()=>(0,r.useCallback)(e=>{let n=u.findIndex(t=>t.id===e.id);return n>=0&&u.splice(n,1),u.push(e),u.length===1&&typeof document<"u"&&document.addEventListener("keydown",k,!0),()=>{let t=u.findIndex(a=>a.id===e.id);t>=0&&u.splice(t,1),u.length===0&&typeof document<"u"&&document.removeEventListener("keydown",k,!0)}},[]),z=({isOpen:e,onClose:n,isCloseBlocked:t,skipWhenTextSelected:a=!1,swipeThreshold:l=V,flickVelocity:p=q,flickDistance:S=$})=>{let[i,M]=(0,r.useState)(null),[R,m]=(0,r.useState)(!1),h=X(),x=(0,r.useRef)(`overlay-${Math.random().toString(36).slice(2)}`).current,d=(0,r.useRef)({pointerId:null,startX:0,startY:0,isActive:!1,isClosing:!1,lastDelta:0,hasCapture:!1,history:[]}),f=(0,r.useCallback)(()=>t()?!1:(n(),!0),[t,n]),D=(0,r.useRef)(f);D.current=f,(0,r.useEffect)(()=>{if(e)return h({id:x,onEscape:f})},[e,f,h,x]),(0,r.useEffect)(()=>{if(!(i&&e))return;let v=()=>{let o=d.current;o.hasCapture&&o.pointerId!==null&&i.releasePointerCapture?.(o.pointerId),Object.assign(o,{pointerId:null,isActive:!1,isClosing:!1,hasCapture:!1,history:[]}),i.style.transform="",i.style.transition="",m(!1)};d.current={pointerId:null,startX:0,startY:0,isActive:!1,isClosing:!1,lastDelta:0,hasCapture:!1,history:[]},m(!1);let b=o=>{o.pointerType==="mouse"&&o.button!==0||o.target?.closest('[data-overlay-interactive="true"]')||a&&window.getSelection()?.toString().trim()||(i.style.transition="none",m(!0),d.current={pointerId:o.pointerId,startX:o.clientX,startY:o.clientY,isActive:!0,isClosing:!1,lastDelta:0,hasCapture:!1,history:[{x:o.clientX,time:Date.now()}]})},g=o=>{let s=d.current;if(!s.isActive||s.pointerId!==o.pointerId)return;if(a&&window.getSelection()?.toString().trim()){v();return}s.history.push({x:o.clientX,time:Date.now()});let c=o.clientX-s.startX,y=o.clientY-s.startY;if(!s.isClosing){if(Math.abs(c)<4)return;if(Math.abs(c)<Math.abs(y)*1.3||c<=0){v();return}s.isClosing=!0,s.hasCapture||(i.setPointerCapture?.(o.pointerId),s.hasCapture=!0)}s.isClosing&&(o.preventDefault(),s.lastDelta=Math.max(0,c),i.style.transform=`translateX(${Math.min(s.lastDelta,520)}px)`)},w=o=>{let s=d.current;if(s.pointerId!==o.pointerId)return;let c=Date.now(),y=c-100,I=s.history.find(C=>C.time>=y)||s.history[0]||{x:s.startX,time:c},L=c-I.time,Y=o.clientX-I.x,H=L>0?Y/L:0,B=s.lastDelta>l,P=H>p&&s.lastDelta>S;if(s.isClosing&&(B||P)){let C=P?.15:.3;i.style.transition=`transform ${C}s ease-out`,i.style.transform="translateX(100%)",s.hasCapture&&s.pointerId!==null&&i.releasePointerCapture?.(s.pointerId),Object.assign(s,{pointerId:null,isActive:!1,isClosing:!1,hasCapture:!1,history:[]}),m(!1),D.current()}else v()};return i.addEventListener("pointerdown",b),i.addEventListener("pointermove",g),i.addEventListener("pointerup",w),i.addEventListener("pointercancel",v),()=>{i.removeEventListener("pointerdown",b),i.removeEventListener("pointermove",g),i.removeEventListener("pointerup",w),i.removeEventListener("pointercancel",v)}},[e,i,a,l,p,S]);let A=(0,r.useMemo)(()=>({transform:e?"translateX(0px)":"translateX(100%)"}),[e]);return{overlayRef:M,overlayStyle:A,attemptClose:f,isSwiping:R,element:i}},N=()=>{let e=(0,r.useRef)(new Set),[n,t]=(0,r.useState)(!1),a=(0,r.useCallback)(()=>{let p=Symbol("guard");return e.current.add(p),t(!0),()=>{e.current.delete(p),t(e.current.size>0)}},[]),l=(0,r.useCallback)(()=>{e.current.clear(),t(!1)},[]);return{isBlocked:n,requestBlock:a,reset:l}};function J(e,n){let t=(0,r.useRef)(n);return e&&n!==null&&(t.current=n),e?n:t.current}var Q=(e,n=10)=>{let t=(0,r.useRef)(null);return{onPointerDown:a=>{t.current={x:a.clientX,y:a.clientY}},onPointerUp:a=>{if(t.current){let l=Math.hypot(a.clientX-t.current.x,a.clientY-t.current.y);t.current=null,l<n&&(a.preventDefault(),e())}},onPointerCancel:()=>{t.current=null},onClick:a=>a.preventDefault()}};0&&(module.exports={SwipeCloseGuardContext,useOverlayEscapeStack,useSwipeCloseGuard,useSwipeGuardState,useSwipeToDismissOverlay,useTapClick,useTransitionDisplay});
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createContext as
|
|
1
|
+
import{createContext as F,useCallback as y,useContext as G,useEffect as T,useMemo as _,useRef as c,useState as S}from"react";var O=120,U=.5,K=40,V=F(null),j=()=>G(V)??{isBlocked:!1,requestBlock:()=>()=>{}},a=[],X=e=>{if(e.key!=="Escape")return;a[a.length-1]?.onEscape(e)&&(e.preventDefault(),e.stopPropagation())},q=()=>y(e=>{let i=a.findIndex(r=>r.id===e.id);return i>=0&&a.splice(i,1),a.push(e),a.length===1&&typeof document<"u"&&document.addEventListener("keydown",X,!0),()=>{let r=a.findIndex(o=>o.id===e.id);r>=0&&a.splice(r,1),a.length===0&&typeof document<"u"&&document.removeEventListener("keydown",X,!0)}},[]),z=({isOpen:e,onClose:i,isCloseBlocked:r,skipWhenTextSelected:o=!1,swipeThreshold:u=O,flickVelocity:p=U,flickDistance:h=K})=>{let[s,M]=S(null),[R,m]=S(!1),x=q(),D=c(`overlay-${Math.random().toString(36).slice(2)}`).current,d=c({pointerId:null,startX:0,startY:0,isActive:!1,isClosing:!1,lastDelta:0,hasCapture:!1,history:[]}),f=y(()=>r()?!1:(i(),!0),[r,i]),b=c(f);b.current=f,T(()=>{if(e)return x({id:D,onEscape:f})},[e,f,x,D]),T(()=>{if(!(s&&e))return;let v=()=>{let n=d.current;n.hasCapture&&n.pointerId!==null&&s.releasePointerCapture?.(n.pointerId),Object.assign(n,{pointerId:null,isActive:!1,isClosing:!1,hasCapture:!1,history:[]}),s.style.transform="",s.style.transition="",m(!1)};d.current={pointerId:null,startX:0,startY:0,isActive:!1,isClosing:!1,lastDelta:0,hasCapture:!1,history:[]},m(!1);let g=n=>{n.pointerType==="mouse"&&n.button!==0||n.target?.closest('[data-overlay-interactive="true"]')||o&&window.getSelection()?.toString().trim()||(s.style.transition="none",m(!0),d.current={pointerId:n.pointerId,startX:n.clientX,startY:n.clientY,isActive:!0,isClosing:!1,lastDelta:0,hasCapture:!1,history:[{x:n.clientX,time:Date.now()}]})},w=n=>{let t=d.current;if(!t.isActive||t.pointerId!==n.pointerId)return;if(o&&window.getSelection()?.toString().trim()){v();return}t.history.push({x:n.clientX,time:Date.now()});let l=n.clientX-t.startX,C=n.clientY-t.startY;if(!t.isClosing){if(Math.abs(l)<4)return;if(Math.abs(l)<Math.abs(C)*1.3||l<=0){v();return}t.isClosing=!0,t.hasCapture||(s.setPointerCapture?.(n.pointerId),t.hasCapture=!0)}t.isClosing&&(n.preventDefault(),t.lastDelta=Math.max(0,l),s.style.transform=`translateX(${Math.min(t.lastDelta,520)}px)`)},I=n=>{let t=d.current;if(t.pointerId!==n.pointerId)return;let l=Date.now(),C=l-100,L=t.history.find(E=>E.time>=C)||t.history[0]||{x:t.startX,time:l},P=l-L.time,Y=n.clientX-L.x,H=P>0?Y/P:0,B=t.lastDelta>u,k=H>p&&t.lastDelta>h;if(t.isClosing&&(B||k)){let E=k?.15:.3;s.style.transition=`transform ${E}s ease-out`,s.style.transform="translateX(100%)",t.hasCapture&&t.pointerId!==null&&s.releasePointerCapture?.(t.pointerId),Object.assign(t,{pointerId:null,isActive:!1,isClosing:!1,hasCapture:!1,history:[]}),m(!1),b.current()}else v()};return s.addEventListener("pointerdown",g),s.addEventListener("pointermove",w),s.addEventListener("pointerup",I),s.addEventListener("pointercancel",v),()=>{s.removeEventListener("pointerdown",g),s.removeEventListener("pointermove",w),s.removeEventListener("pointerup",I),s.removeEventListener("pointercancel",v)}},[e,s,o,u,p,h]);let A=_(()=>({transform:e?"translateX(0px)":"translateX(100%)"}),[e]);return{overlayRef:M,overlayStyle:A,attemptClose:f,isSwiping:R,element:s}},N=()=>{let e=c(new Set),[i,r]=S(!1),o=y(()=>{let p=Symbol("guard");return e.current.add(p),r(!0),()=>{e.current.delete(p),r(e.current.size>0)}},[]),u=y(()=>{e.current.clear(),r(!1)},[]);return{isBlocked:i,requestBlock:o,reset:u}};function J(e,i){let r=c(i);return e&&i!==null&&(r.current=i),e?i:r.current}var Q=(e,i=10)=>{let r=c(null);return{onPointerDown:o=>{r.current={x:o.clientX,y:o.clientY}},onPointerUp:o=>{if(r.current){let u=Math.hypot(o.clientX-r.current.x,o.clientY-r.current.y);r.current=null,u<i&&(o.preventDefault(),e())}},onPointerCancel:()=>{r.current=null},onClick:o=>o.preventDefault()}};export{V as SwipeCloseGuardContext,q as useOverlayEscapeStack,j as useSwipeCloseGuard,N as useSwipeGuardState,z as useSwipeToDismissOverlay,Q as useTapClick,J as useTransitionDisplay};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aiquants/swipe-overlay",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "React hooks and context for swipe-to-dismiss overlay interactions",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -32,14 +32,14 @@
|
|
|
32
32
|
"LICENSE"
|
|
33
33
|
],
|
|
34
34
|
"peerDependencies": {
|
|
35
|
-
"react": "
|
|
36
|
-
"react-dom": "
|
|
35
|
+
"react": "^19.2.7",
|
|
36
|
+
"react-dom": "^19.2.7"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@types/react": "^
|
|
40
|
-
"@types/react-dom": "^
|
|
41
|
-
"react": "^
|
|
42
|
-
"react-dom": "^
|
|
39
|
+
"@types/react": "^19.2.7",
|
|
40
|
+
"@types/react-dom": "^19.2.3",
|
|
41
|
+
"react": "^19.2.7",
|
|
42
|
+
"react-dom": "^19.2.7",
|
|
43
43
|
"rimraf": "^6.1.2",
|
|
44
44
|
"tsup": "^8.5.1",
|
|
45
45
|
"typescript": "^5.9.3",
|
|
@@ -53,8 +53,7 @@
|
|
|
53
53
|
"build:watch": "tsup --watch",
|
|
54
54
|
"dev": "tsup --watch",
|
|
55
55
|
"watch": "tsup --watch",
|
|
56
|
-
"
|
|
57
|
-
"typecheck": "npm run type-check",
|
|
56
|
+
"typecheck": "tsc --noEmit",
|
|
58
57
|
"clean": "rimraf dist",
|
|
59
58
|
"publish:patch": "npm version patch && pnpm publish --no-git-checks",
|
|
60
59
|
"publish:minor": "npm version minor && pnpm publish --no-git-checks",
|