diff --git a/src/app/(dashboard)/page.tsx b/src/app/(dashboard)/page.tsx index 68a9052..024b40a 100644 --- a/src/app/(dashboard)/page.tsx +++ b/src/app/(dashboard)/page.tsx @@ -267,7 +267,10 @@ const ProjectDropdown = ({
{project.title} - @@ -463,11 +466,7 @@ const ProjectContainer = ({
) : ( -
-
- {projectComponent} -
-
+ projectComponent ); }; diff --git a/src/app/globals.css b/src/app/globals.css index a8697bd..9b8105d 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -73,12 +73,6 @@ main { height: 100%; } -.no-scroll { - overflow: hidden; - height: 100%; /* Optional, but often recommended for full-page scroll prevention */ - touch-action: none; -} - .dark body { background-color: var(--color-background); } diff --git a/src/components/swipe-to-delete/SwipeToDelete.tsx b/src/components/swipe-to-delete/SwipeToDelete.tsx index 9b2717c..8b2673e 100644 --- a/src/components/swipe-to-delete/SwipeToDelete.tsx +++ b/src/components/swipe-to-delete/SwipeToDelete.tsx @@ -20,7 +20,7 @@ const SwipeToDelete: FC = ({ deleteText = 'Delete', fadeOnDeletion = true, useBoldDeleteFont = true, - threshold = 70 + threshold = 75 }) => { const container = useRef(null); const content = useRef(null); @@ -82,17 +82,21 @@ const SwipeToDelete: FC = ({ lastXRef.current = pageX; lastYRef.current = pageY; - const raw = pageX - startX; let x = dragX < 0 ? rubber(raw) : rubber(raw, width * 0.1); - if ((Math.abs(dragX) === 0 ? Math.abs(vY) < window.innerHeight * 0.05 : true)) { + if ((Math.abs(dragX) === 0 ? Math.abs(vY) < window.innerHeight * 0.05 && Math.abs(vX) > Math.abs(vY) : true)) { if (x < 0) setAllowOverscroll(true); - if (x <= 0 || (allowOverscroll && x >= 0)) setDragX(x); + if (x <= 0 || (allowOverscroll && x >= 0)) { + setDragX(x); + document.body.classList.add('no-scroll'); + } + } else { setDragX(0); setAllowOverscroll(false); + document.body.classList.remove('no-scroll'); } - if (Math.abs(vY) < 20) document.body.classList.add('no-scroll'); + }; const handleDelete = () => { @@ -110,19 +114,16 @@ const SwipeToDelete: FC = ({ if (!dragging) return; setDragging(false); - const shouldDelete = - isSticky || - velocity < -1000; + const shouldDelete = isSticky || velocity < -1000; setAllowOverscroll(false); document.body.classList.remove('no-scroll'); - if (Math.abs(velocityY) > window.innerHeight * 0.05) { - setDragX(0); + if (Math.abs(velocityY) > window.innerHeight * 0.05 && Math.abs(dragX) < 20) { setDragX(0); if (transparencyTimeout) { clearTimeout(transparencyTimeout); } setForceTransparentBackground(true); - transparencyTimeout = setTimeout(() => setForceTransparentBackground(false), 150); + transparencyTimeout = setTimeout(() => setForceTransparentBackground(false), 200); return; } if (!shouldDelete) { @@ -130,14 +131,18 @@ const SwipeToDelete: FC = ({ text.current?.classList.add('ios-ease'); const textWidth = text.current ? text.current.getBoundingClientRect().width : 0; if (((velocity < 0 && Math.abs(velocity) > 10) || dragX < -textWidth * 1.5 && velocity > 0) && text.current) { - setDragX(-textWidth * 1.5); - } else if (allowOverscroll && dragX > 0) { + if (velocity < 0) { + setDragX(-textWidth * 1.5); + } else { + setDragX(0); + } + } else if (allowOverscroll && dragX > 0 && velocity > 0) { setDragX(0); if (transparencyTimeout) { clearTimeout(transparencyTimeout); } setForceTransparentBackground(true); - transparencyTimeout = setTimeout(() => setForceTransparentBackground(false), 150); + transparencyTimeout = setTimeout(() => setForceTransparentBackground(false), 200); } else setDragX(0); return; } @@ -217,7 +222,7 @@ const SwipeToDelete: FC = ({ const deleteTransform = isCollapsing ? `translateX(calc(${dragX}px + 5rem))` - : (isSticky ? `translateX(calc(${dragX}px + 5rem))` : `translateX(max(0rem, calc(${dragX}px + 5rem)))`); + : (isSticky ? `translateX(calc(${dragX}px + 5rem))` : `translateX(max(0rem + ${dragX * 0.07}px, calc(${dragX}px + 5rem)))`); const opacityTransparent = fadeOnDeletion ? 0 : 1; const backgroundTransparent = opacityTransparent == 0 ? 'transparent' : backgroundClass; @@ -255,7 +260,8 @@ const SwipeToDelete: FC = ({ marginTop: '1px', marginBottom: '1px', paddingRight: '1rem', - transition: dragX > 1 ? '' : 'background 300ms' + transition: dragX > 1 ? '' : 'background 300ms', + willChange: 'background' }} > diff --git a/src/components/swipe-to-delete/styles.css b/src/components/swipe-to-delete/styles.css index 00832f7..948822a 100644 --- a/src/components/swipe-to-delete/styles.css +++ b/src/components/swipe-to-delete/styles.css @@ -8,7 +8,10 @@ touch-action: none; } -.font-sharpen { --webkit-transform: translateZ(0); -transform: translateZ(0); +.no-scroll { + overflow: hidden; + height: 100%; + /* Optional, but often recommended for full-page scroll prevention */ + touch-action: none; + overscroll-behavior: none; } \ No newline at end of file