From 1cf30b3622c57e6c266a17935bf8fa062b3ae2e5 Mon Sep 17 00:00:00 2001 From: Lukas Date: Wed, 11 Mar 2026 22:48:48 +0100 Subject: [PATCH] Add swipe-to-dismiss gesture for mobile stat block drawer Co-Authored-By: Claude Opus 4.6 --- apps/web/src/components/stat-block-panel.tsx | 11 ++- apps/web/src/hooks/use-swipe-to-dismiss.ts | 72 ++++++++++++++++++++ 2 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 apps/web/src/hooks/use-swipe-to-dismiss.ts diff --git a/apps/web/src/components/stat-block-panel.tsx b/apps/web/src/components/stat-block-panel.tsx index 0c56735..67ebbce 100644 --- a/apps/web/src/components/stat-block-panel.tsx +++ b/apps/web/src/components/stat-block-panel.tsx @@ -4,6 +4,7 @@ import type { ReactNode } from "react"; import { useEffect, useState } from "react"; import { getSourceDisplayName } from "../adapters/bestiary-index-adapter.js"; import type { BulkImportState } from "../hooks/use-bulk-import.js"; +import { useSwipeToDismiss } from "../hooks/use-swipe-to-dismiss.js"; import { BulkImportPrompt } from "./bulk-import-prompt.js"; import { SourceFetchPrompt } from "./source-fetch-prompt.js"; import { StatBlock } from "./stat-block.js"; @@ -176,6 +177,8 @@ function MobileDrawer({ onDismiss: () => void; children: ReactNode; }) { + const { offsetX, isSwiping, handlers } = useSwipeToDismiss(onDismiss); + return (