react-view-transition-swiper 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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.tsx"],"names":["forwardRef","SwipeDeck","useRef","useLayoutEffect","useState","useCallback","oldEl","newEl","now","dt","cur","total","id","el","perm","useEffect","useImperativeHandle","jsxs","jsx"],"mappings":"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","file":"index.js","sourcesContent":["import {\n useState,\n useRef,\n useEffect,\n useCallback,\n useLayoutEffect,\n useImperativeHandle,\n forwardRef,\n type ReactNode,\n type CSSProperties,\n type PointerEvent as ReactPointerEvent,\n} from \"react\";\nconst logger = {\n debug: (...args: unknown[]) => console.debug(...args),\n warn: (...args: unknown[]) => console.warn(...args),\n error: (...args: unknown[]) => console.error(...args),\n};\n\n/* ─────────────────────────────────────────────────────────────────────────────\n SwipeDeck v6.2\n ─────────────────────────────────────────────────────────────────────────────\n Reusable swipe / gesture card deck with View Transitions API integration.\n\n ARCHITECTURE\n ────────────\n The deck owns its internal slide pool. It starts empty and is populated\n entirely via the imperative API (addSlide / removeSlide / removeSlides).\n There is exactly one way to mutate the pool — no prop diffing, no sync.\n\n Navigation is managed by three functions:\n navWithVT(delta) — animated view transition\n navInstant(delta) — immediate index swap, no animation\n navWithGesture(delta) — gesture fly-out animation via CSS transition\n\n All three call flushAfterNav() on completion. flushAfterNav() is the\n single place that handles post-nav sequencing:\n 1. pendingRemoveNavTo — removeSlides queued a target to nav to\n 2. pendingRemoveIds — ids to splice out once we've landed\n 3. pendingNavDelta — addSlide queued a nav while transitioning\n\n PENDING REFS (priority order, highest first)\n ────────────────────────────────────────────\n pendingRemoveNavTo absolute index set by removeSlides when transitioning\n pendingRemoveIds Set<string> ids to remove after landing\n pendingNavDelta delta set by addSlide when transitioning\n\n Only one of pendingRemoveNavTo / pendingNavDelta is ever set at a time.\n removeSlides always clears pendingNavDelta when it sets pendingRemoveNavTo.\n pendingNavDelta is discarded whenever pendingRemoveIds is flushed.\n\n Props\n ─────\n width number Gesture math reference width in px. CSS always\n fills container — this only affects swipe feel.\n Default: 390\n showDots boolean Show navigation dots. Default: true\n fade boolean Fade-out the exiting card on VT nav. Default: false\n dimOnDrag boolean Dim card while dragging. Default: false\n maxDragRatio number Drag limit as fraction of width. Default: 1.0\n dragDisabled boolean Disable all drag gestures. Default: false\n keyboardDisabled boolean Disable arrow-key navigation. Default: false\n navAxis \"x\"|\"y\" Drag and nav direction. In \"y\" mode, navigation\n only triggers after scroll content hits its\n top/bottom boundary (iOS sheet dismiss pattern).\n Mark the scrollable element inside each card with\n data-scrollable so the boundary check reads the\n correct scrollTop. Default: \"x\".\n dragDelayMs number ms pointer must be held before drag activates.\n Default: 0\n onSlideChange (i)=>void Fires after navigation settles\n className string Extra class on root element\n\n Imperative API (ref: SwipeDeckHandle)\n ───────────────────────────────────────\n .currentIndex Settled index (read-only)\n .currentSlides Live snapshot of the slide pool (read-only)\n .addSlide(slide, opts) Append and navigate to new slide\n opts.keepDom — keep DOM when not visible (default false)\n opts.animate — fly-in transition (default true)\n opts.drag — \\\"all\\\"|\\\"left\\\"|\\\"right\\\"|\\\"none\\\" (default \\\"all\\\")\n .removeSlide(id, opts) Remove one slide\n .removeSlides(ids,opts) Batch remove. If current is included, nav away first.\n opts.animate — fly-out transition (default true)\n opts.drag — \"all\"|\"left\"|\"right\"|\"up\"|\"down\"|\"none\"\n \"up\"/\"down\" are for navAxis=\"y\" slides\n .goTo(index, opts) Navigate to absolute index\n .next(opts) / .prev(opts) Navigate ±1\n opts.instant — skip VT, swap immediately (default false)\n .setPeek(index|null) Pin peek card. null restores auto selection.\n\n Multi-instance\n ──────────────\n Each instance gets a unique numeric id on mount. The view-transition-name\n is scoped to that id (sd-card-1, sd-card-2…) and set via inline style only,\n never a CSS class — so concurrent instances never produce duplicate names.\n\n Peek system\n ───────────\n Only one card renders at z:1 behind current. Priority:\n 1. userPeekOverride — set via setPeek()\n 2. destination hint — card we're navigating toward\n 3. most-recently-shown neighbour (lastShownAt timestamps)\n ──────────────────────────────────────────────────────────────────────────── */\n\n// ─── Public types ─────────────────────────────────────────────────────────────\n\nexport interface SlideItem {\n id: string;\n content: ReactNode;\n}\n\nexport type DragPermission = \"all\" | \"left\" | \"right\" | \"up\" | \"down\" | \"none\";\n\nexport interface SlideOptions {\n keepDom?: boolean;\n animate?: boolean;\n drag?: DragPermission;\n}\n\nexport interface NavOptions {\n /** Skip the view transition and swap instantly. Default: false */\n instant?: boolean;\n}\n\nexport type SwipeDeckErrorCode =\n | \"NAV_MISSING_ELEMENT\" // cardRefs has no DOM node for old/new slide\n | \"NAV_ELEMENT_NOT_VISIBLE\" // destination element invisible after retries\n | \"POINTER_CAPTURE_FAILED\" // setPointerCapture threw\n | \"POINTER_RELEASE_FAILED\"; // releasePointerCapture threw\n// Note: out-of-range deltas are silently skipped (logger.warn only) —\n// they are expected when stale queued deltas fire after slides are removed.\n\nexport interface SwipeDeckError {\n code: SwipeDeckErrorCode;\n message: string;\n /** Extra context: cur, delta, next, retries, element ids, etc. */\n detail?: Record<string, unknown>;\n}\n\nexport interface SwipeDeckHandle {\n readonly currentIndex: number;\n readonly currentSlides: SlideItem[];\n addSlide: (slide: SlideItem, options?: SlideOptions) => void;\n removeSlide: (id: string, options?: Pick<SlideOptions, \"animate\">) => void;\n removeSlides: (ids: string[], options?: Pick<SlideOptions, \"animate\">) => void;\n goTo: (index: number, options?: NavOptions) => void;\n next: (options?: NavOptions) => void;\n prev: (options?: NavOptions) => void;\n setPeek: (index: number | null) => void;\n}\n\nexport interface SwipeDeckProps {\n width?: number;\n showDots?: boolean;\n fade?: boolean;\n dimOnDrag?: boolean;\n maxDragRatio?: number;\n dragDisabled?: boolean;\n keyboardDisabled?: boolean;\n /** Drag and nav direction. \"y\" uses scroll-boundary detection so card\n * content can still scroll freely; nav only triggers when the scroll\n * hits the top/bottom edge and the user continues pulling. Default: \"x\" */\n navAxis?: \"x\" | \"y\";\n dragDelayMs?: number;\n /** Duration of the view transition and gesture fly-out in ms. Default: 360 */\n transitionMs?: number;\n onSlideChange?: (index: number) => void;\n onError?: (error: SwipeDeckError) => void;\n className?: string;\n}\n\n// ─── Internal types ───────────────────────────────────────────────────────────\n\ntype CardLayer = \"current\" | \"peek\" | \"hidden\";\n\ninterface DragState {\n startX: number;\n startY: number;\n lastX: number;\n lastY: number;\n lastTime: number;\n velX: number;\n velY: number;\n axis: \"x\" | \"y\" | null;\n active: boolean;\n pointerId: number;\n /** Y-axis only: pointer capture has been claimed after hitting scroll boundary */\n boundaryClaimed: boolean;\n /** Y-axis only: the scrollable element inside the current card */\n scrollEl: Element | null;\n}\n\ninterface ViewTransition {\n finished: Promise<void>;\n ready: Promise<void>;\n updateCallbackDone: Promise<void>;\n}\ntype DocWithVT = Document & {\n startViewTransition?: (cb: () => void | Promise<void>) => ViewTransition;\n};\n\n// ─── Instance counter ─────────────────────────────────────────────────────────\nlet _instanceCounter = 0;\n\n// ─── Static styles ────────────────────────────────────────────────────────────\n// Injected once at module level. Kept inline in the TSX to avoid requiring a\n// separate CSS file or loader config. Only the per-instance ::view-transition-*\n// rules are injected separately (injectVTStyles) because they depend on a\n// runtime vtName and can't be expressed statically.\nconst STATIC_STYLE_ID = \"swipe-deck-v6\";\n\nconst STATIC_CSS = `\n/*\n SwipeDeck v6.2 — static styles\n Import this file once in your app: import \"swipe-deck/SwipeDeck.css\"\n All class names are prefixed with sd- to avoid collisions.\n*/\n\n.sd-root {\n display: flex;\n flex-direction: column;\n height: 100%;\n touch-action: pan-y;\n user-select: none;\n -webkit-user-select: none;\n}\n\n/*\n No overflow:hidden on .sd-stage — it clips the live card but NOT\n ::view-transition-old which renders in a top-layer pseudo-element.\n That mismatch makes VT snapshots look different from the live element.\n*/\n.sd-stage {\n position: relative;\n width: 100%;\n flex: 1;\n min-height: 0;\n /* touch-action set via inline style — varies by navAxis */\n}\n\n.sd-sizer {\n width: 100%;\n visibility: hidden;\n pointer-events: none;\n box-sizing: border-box;\n}\n\n.sd-card {\n position: absolute;\n inset: 0;\n box-sizing: border-box;\n z-index: 0;\n visibility: hidden;\n pointer-events: none;\n will-change: transform;\n overflow-y: auto;\n overflow-x: hidden;\n /* touch-action set via inline style on SlideSlot — varies by navAxis */\n}\n\n.sd-card.sd-current {\n z-index: 2;\n visibility: visible;\n pointer-events: auto;\n cursor: grab;\n}\n.sd-card.sd-current.sd-no-drag { cursor: default; }\n.sd-card.sd-current.sd-grabbing { cursor: grabbing; }\n.sd-card.sd-current.sd-drag-pending { cursor: wait; }\n\n.sd-card.sd-peek {\n z-index: 1;\n visibility: visible;\n pointer-events: none;\n}\n\n/* Consumer-hookable drag feedback classes — add your own styles */\n.sd-card.sd-current.sd-pull-fwd {}\n.sd-card.sd-current.sd-pull-back {}\n\n/* ── View transition exit keyframes ────────────────────────────────────────── */\n/* X-axis */\n@keyframes sd-out-left { to { transform: translateX(-100%); } }\n@keyframes sd-out-right { to { transform: translateX( 100%); } }\n@keyframes sd-out-left-fade { to { transform: translateX(-80%); opacity: 0; } }\n@keyframes sd-out-right-fade { to { transform: translateX( 80%); opacity: 0; } }\n\n/* Y-axis */\n@keyframes sd-out-up { to { transform: translateY(-100%); } }\n@keyframes sd-out-down { to { transform: translateY( 100%); } }\n@keyframes sd-out-up-fade { to { transform: translateY(-80%); opacity: 0; } }\n@keyframes sd-out-down-fade { to { transform: translateY( 80%); opacity: 0; } }\n\n/* ── Navigation dots ───────────────────────────────────────────────────────── */\n.sd-dots {\n display: flex;\n gap: 7px;\n margin-top: 12px;\n}\n\n.sd-dot {\n width: 6px;\n height: 6px;\n border-radius: 50%;\n cursor: pointer;\n transition: opacity 0.25s, transform 0.25s;\n opacity: 0.3;\n}\n\n.sd-dot.sd-dot-active {\n opacity: 1;\n transform: scale(1.4);\n}\n`;\n\nfunction injectStaticStyles(): void {\n if (typeof document === \"undefined\") return;\n if (document.getElementById(STATIC_STYLE_ID)) return;\n const style = document.createElement(\"style\");\n style.id = STATIC_STYLE_ID;\n style.textContent = STATIC_CSS;\n document.head.appendChild(style);\n}\n\nfunction injectVTStyles(instanceId: number, vtName: string, ms: number, axis: \"x\" | \"y\"): void {\n if (typeof document === \"undefined\") return;\n const styleId = `sd-vt-${instanceId}`;\n document.getElementById(styleId)?.remove();\n const dur = `${ms}ms`;\n const dir = `data-sd-dir-${instanceId}`;\n const fade = `data-sd-fade-${instanceId}`;\n // X-axis: forward=left, back=right. Y-axis: forward=up, back=down.\n const fwdAnim = axis === \"y\" ? \"sd-out-up\" : \"sd-out-left\";\n const backAnim = axis === \"y\" ? \"sd-out-down\" : \"sd-out-right\";\n const fwdFade = axis === \"y\" ? \"sd-out-up-fade\" : \"sd-out-left-fade\";\n const backFade = axis === \"y\" ? \"sd-out-down-fade\" : \"sd-out-right-fade\";\n const style = document.createElement(\"style\");\n style.id = styleId;\n style.textContent = `\n ::view-transition-old(${vtName}),\n ::view-transition-new(${vtName}) { animation: none; }\n ::view-transition-new(${vtName}) { z-index: 0; }\n ::view-transition-old(${vtName}) { z-index: 1; }\n html[${dir}=\"forward\"]::view-transition-old(${vtName}) {\n animation: ${fwdAnim} ${dur} cubic-bezier(0.4,0,0.2,1) forwards;\n }\n html[${dir}=\"back\"]::view-transition-old(${vtName}) {\n animation: ${backAnim} ${dur} cubic-bezier(0.4,0,0.2,1) forwards;\n }\n html[${dir}=\"forward\"][${fade}]::view-transition-old(${vtName}) {\n animation: ${fwdFade} ${dur} cubic-bezier(0.4,0,0.2,1) forwards;\n }\n html[${dir}=\"back\"][${fade}]::view-transition-old(${vtName}) {\n animation: ${backFade} ${dur} cubic-bezier(0.4,0,0.2,1) forwards;\n }\n `;\n document.head.appendChild(style);\n}\n\nfunction removeVTStyles(instanceId: number): void {\n document.getElementById(`sd-vt-${instanceId}`)?.remove();\n}\n\n// ─── Pure helpers ─────────────────────────────────────────────────────────────\n\nconst VELOCITY_COMMIT = 0.45;\n\nconst clamp = (v: number, lo: number, hi: number): number =>\n Math.max(lo, Math.min(hi, v));\n\nfunction rubberBand(x: number, dim: number): number {\n const sign = x > 0 ? 1 : -1;\n const abs = Math.abs(x);\n return sign * (1 - 1 / ((abs / dim) * 0.55 + 1)) * dim;\n}\n\nfunction layerFor(i: number, cur: number, peek: number | null): CardLayer {\n if (i === cur) return \"current\";\n if (peek !== null && i === peek) return \"peek\";\n return \"hidden\";\n}\n\n// ─── SlideSlot ────────────────────────────────────────────────────────────────\n\ninterface SlideSlotProps {\n slide: SlideItem;\n layer: CardLayer;\n keepDom: boolean;\n dragDisabled: boolean;\n navAxis: \"x\" | \"y\";\n children: ReactNode;\n refCallback: (el: HTMLDivElement | null) => void;\n}\n\nfunction SlideSlot({ slide, layer, keepDom, dragDisabled, navAxis, children, refCallback }: SlideSlotProps) {\n const cls = [\n \"sd-card\",\n layer === \"current\" && \"sd-current\",\n layer === \"peek\" && \"sd-peek\",\n layer === \"current\" && dragDisabled && \"sd-no-drag\",\n ].filter(Boolean).join(\" \");\n\n // Always render the card shell — cardRefs is always populated so navWithVT\n // can always find the DOM node. MFE content only mounts when visible (current\n // or peek) or when keepDom is true. Hidden slides render an empty shell.\n // X-axis nav: card scrolls vertically (pan-y). Y-axis nav: card scrolls\n // horizontally (pan-x) so the deck can own the vertical gesture.\n const cardTouchAction = navAxis === \"y\" ? \"pan-x\" : \"pan-y\";\n return (\n <div ref={refCallback} className={cls} data-slide-id={slide.id} style={{ touchAction: cardTouchAction }}>\n {(keepDom || layer !== \"hidden\") ? children : null}\n </div>\n );\n}\n\n// ─── SwipeDeck ────────────────────────────────────────────────────────────────\n\nconst SwipeDeck = forwardRef<SwipeDeckHandle, SwipeDeckProps>(\n function SwipeDeck(\n {\n width = 390,\n showDots = true,\n fade = false,\n dimOnDrag = false,\n maxDragRatio = 1.0,\n dragDisabled = false,\n keyboardDisabled = false,\n dragDelayMs = 0,\n transitionMs = 360,\n navAxis = \"x\",\n onSlideChange,\n onError,\n className = \"\",\n },\n externalRef,\n ) {\n\n injectStaticStyles();\n\n // ── Instance identity ─────────────────────────────────────────────────────\n // Sentinel guard prevents ++_instanceCounter on every re-render.\n const instanceId = useRef<number>(-1);\n if (instanceId.current === -1) instanceId.current = ++_instanceCounter;\n const vtName = `sd-card-${instanceId.current}`;\n\n // Inject VT selector rules synchronously during render — useLayoutEffect\n // is too late for the first transition.\n injectVTStyles(instanceId.current, vtName, transitionMs, navAxis);\n useLayoutEffect(() => () => removeVTStyles(instanceId.current), []);\n\n // ── React state (drives re-renders) ───────────────────────────────────────\n const [slides, setSlides] = useState<SlideItem[]>([]);\n const [current, setCurrent] = useState<number>(0);\n const [peekIndex, setPeekIndex] = useState<number | null>(null);\n\n // ── Refs (synchronous, no re-render) ──────────────────────────────────────\n const slidesRef = useRef<SlideItem[]>([]);\n const currentRef = useRef<number>(0);\n const peekRef = useRef<number | null>(null);\n const userPeekOverride = useRef<number | null>(null);\n const transitioningRef = useRef<boolean>(false);\n const lastShownAt = useRef<number[]>([]);\n const cardRefs = useRef<Map<string, HTMLDivElement | null>>(new Map());\n const keepDomIds = useRef<Set<string>>(new Set());\n const dragPermissions = useRef<Map<string, DragPermission>>(new Map());\n const stageRef = useRef<HTMLDivElement | null>(null);\n const heightRef = useRef<number>(0);\n\n // Drag gesture state\n const dragRef = useRef<DragState | null>(null);\n const dragTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const lastDragXRef = useRef<number>(0);\n const lastDragYRef = useRef<number>(0);\n\n // Post-nav queue (see architecture comment at top)\n // Only pendingRemoveNavTo OR pendingNavDelta is set at any time, never both.\n const pendingRemoveNavTo = useRef<number | null>(null); // absolute target\n const pendingRemoveIds = useRef<Set<string>>(new Set());\n const pendingNavDelta = useRef<number | null>(null); // relative delta\n\n // Stable refs for nav functions — lets addSlide/removeSlides call them\n // without stale closure issues and without adding them as useCallback deps.\n const navWithVTRef = useRef<(delta: number) => void>(() => {});\n const navInstantRef = useRef<(delta: number) => void>(() => {});\n\n // ── onErrorRef ───────────────────────────────────────────────────────────\n // Stored in a ref so inline onError props don't cascade re-creation of\n // every nav useCallback. Always call via onErrorRef.current — never read\n // the onError prop directly inside any callback.\n const onErrorRef = useRef<((e: SwipeDeckError) => void) | undefined>(undefined);\n onErrorRef.current = onError;\n\n const reportError = (error: SwipeDeckError): void => {\n logger.error(`[SD] ERROR ${error.code}: ${error.message}`, error.detail ?? \"\");\n onErrorRef.current?.(error);\n };\n\n // Grow lastShownAt in sync with slides state\n if (lastShownAt.current.length < slides.length) {\n lastShownAt.current = [\n ...lastShownAt.current,\n ...Array<number>(slides.length - lastShownAt.current.length).fill(0),\n ];\n }\n\n // ── resolvePeek ───────────────────────────────────────────────────────────\n const resolvePeek = useCallback((cur: number, hint: number): number | null => {\n const total = slidesRef.current.length;\n if (total <= 1) return null;\n const ov = userPeekOverride.current;\n if (ov !== null && ov >= 0 && ov < total && ov !== cur) return ov;\n if (hint >= 0 && hint < total && hint !== cur) return hint;\n const prev = cur - 1;\n const next = cur + 1;\n if (prev < 0 && next >= total) return null;\n if (prev < 0) return next;\n if (next >= total) return prev;\n return (lastShownAt.current[next] ?? 0) >= (lastShownAt.current[prev] ?? 0)\n ? next : prev;\n }, []);\n\n // ── syncLayers ────────────────────────────────────────────────────────────\n // Applies sd-current / sd-peek CSS classes to all card DOM nodes.\n // flyingEl is skipped — gesture nav manages its own classes via transitionend.\n const syncLayers = useCallback(\n (nextCur: number, nextPeek: number | null, flyingEl?: HTMLDivElement | null): void => {\n const pool = slidesRef.current;\n for (let i = 0; i < pool.length; i++) {\n const el = cardRefs.current.get(pool[i].id);\n if (!el || el === flyingEl) continue;\n el.classList.remove(\"sd-current\", \"sd-peek\");\n const layer = layerFor(i, nextCur, nextPeek);\n if (layer !== \"hidden\") el.classList.add(`sd-${layer}`);\n }\n },\n [],\n );\n\n // ── doRemoveByIndices ─────────────────────────────────────────────────────\n // Atomically splices one or more NON-CURRENT slides from the pool.\n // Indices must be sorted descending so earlier removals don't shift later ones.\n // Refs are captured BEFORE the setSlides updater — React may call updaters\n // multiple times (StrictMode / concurrent mode) and refs mutated inside\n // the first call would corrupt the second call's calculations.\n const doRemoveByIndices = useCallback((sortedDescIndices: number[]): void => {\n if (sortedDescIndices.length === 0) return;\n\n const snapCur = currentRef.current;\n const snapPeek = peekRef.current;\n const snapOverride = userPeekOverride.current;\n\n setSlides((prev) => {\n const valid = sortedDescIndices.filter((i) => i >= 0 && i < prev.length);\n if (valid.length === 0) return prev;\n\n const removeSet = new Set(valid);\n const next = prev.filter((_, i) => !removeSet.has(i));\n slidesRef.current = next;\n\n // Immediately hide removed DOM nodes before React re-renders\n for (const idx of valid) {\n const id = prev[idx].id;\n const el = cardRefs.current.get(id);\n if (el) {\n el.classList.remove(\"sd-current\", \"sd-peek\");\n el.style.visibility = \"hidden\";\n el.style.zIndex = \"0\";\n }\n cardRefs.current.delete(id);\n lastShownAt.current.splice(idx, 1);\n }\n\n // Shift current index down by the number of removed indices below it\n const shift = valid.filter((i) => i < snapCur).length;\n const newCur = Math.min(Math.max(snapCur - shift, 0), next.length - 1);\n\n const shiftIdx = (idx: number | null): number | null => {\n if (idx === null) return null;\n if (removeSet.has(idx)) return null;\n return idx - valid.filter((r) => r < idx).length;\n };\n\n const newPeek = shiftIdx(snapPeek);\n const newOverride = shiftIdx(snapOverride);\n userPeekOverride.current = newOverride;\n\n const resolvedPeek = newPeek !== null ? newPeek : resolvePeek(newCur, -1);\n\n currentRef.current = newCur;\n peekRef.current = resolvedPeek;\n syncLayers(newCur, resolvedPeek);\n setCurrent(newCur);\n setPeekIndex(resolvedPeek);\n\n return next;\n });\n }, [resolvePeek, syncLayers]);\n\n // ── flushAfterNav ─────────────────────────────────────────────────────────\n // Called by all three nav functions after they settle.\n // Single place for post-nav sequencing — no duplication across nav paths.\n //\n // Priority:\n // 1. pendingRemoveNavTo — removeSlides needs us to nav to a specific index\n // 2. pendingRemoveIds — splice ids now that we've landed safely\n // 3. pendingNavDelta — addSlide queued a nav while we were busy\n const flushAfterNav = useCallback((): void => {\n logger.debug(`[SD] flushAfterNav cur=${currentRef.current} pendingRemoveNavTo=${pendingRemoveNavTo.current} pendingRemoveIds.size=${pendingRemoveIds.current.size} pendingNavDelta=${pendingNavDelta.current}`);\n // 1. Remove-nav: navigate to the target removeSlides chose\n if (pendingRemoveNavTo.current !== null) {\n const target = pendingRemoveNavTo.current;\n pendingRemoveNavTo.current = null;\n pendingNavDelta.current = null;\n const delta = target - currentRef.current;\n logger.debug(`[SD] flushAfterNav → pendingRemoveNavTo target=${target} delta=${delta}`);\n if (delta !== 0) {\n navWithVTRef.current(delta);\n return;\n }\n logger.debug(\"[SD] flushAfterNav already at removeNavTo target, falling through\");\n }\n\n // 2. Remove flush: splice the pending ids now that we've navigated away\n if (pendingRemoveIds.current.size > 0) {\n const ids = Array.from(pendingRemoveIds.current);\n pendingRemoveIds.current = new Set();\n const indices = ids\n .map((id) => slidesRef.current.findIndex((s) => s.id === id))\n .filter((i) => i !== -1 && i !== currentRef.current)\n .sort((a, b) => b - a);\n logger.debug(`[SD] flushAfterNav → pendingRemoveIds ids=[${ids}] indices=[${indices}]`);\n if (indices.length > 0) doRemoveByIndices(indices);\n pendingNavDelta.current = null;\n return;\n }\n\n // 3. addSlide nav: queued while we were transitioning\n if (pendingNavDelta.current !== null) {\n const delta = pendingNavDelta.current;\n pendingNavDelta.current = null;\n logger.debug(`[SD] flushAfterNav → pendingNavDelta delta=${delta}`);\n navWithVTRef.current(delta);\n return;\n }\n\n logger.debug(\"[SD] flushAfterNav → nothing pending, done\");\n }, [doRemoveByIndices]);\n\n // ── navInstant ────────────────────────────────────────────────────────────\n const navInstant = useCallback(\n (delta: number): void => {\n const cur = currentRef.current;\n const total = slidesRef.current.length;\n const next = cur + delta;\n logger.debug(`[SD] navInstant delta=${delta} cur=${cur} next=${next} total=${total} transitioning=${transitioningRef.current}`);\n if (next < 0 || next >= total) {\n logger.warn(`[SD] navInstant SKIPPED: out of range cur=${cur} delta=${delta} next=${next} total=${total}`);\n return;\n }\n if (transitioningRef.current) {\n pendingNavDelta.current = next - currentRef.current;\n logger.debug(\"[SD] navInstant QUEUED pendingNavDelta=\", pendingNavDelta.current);\n return;\n }\n transitioningRef.current = true;\n\n const afterPeek = resolvePeek(next, delta > 0 ? next + 1 : next - 1);\n lastShownAt.current[cur] = performance.now() - 1;\n lastShownAt.current[next] = performance.now();\n currentRef.current = next;\n peekRef.current = afterPeek;\n setCurrent(next);\n setPeekIndex(afterPeek);\n syncLayers(next, afterPeek);\n onSlideChange?.(next);\n transitioningRef.current = false;\n logger.debug(`[SD] navInstant settled cur=${currentRef.current}`);\n flushAfterNav();\n },\n [resolvePeek, syncLayers, onSlideChange, flushAfterNav],\n );\n navInstantRef.current = navInstant;\n\n // ── navWithVT ─────────────────────────────────────────────────────────────\n const navWithVT = useCallback(\n (delta: number): void => {\n const cur = currentRef.current;\n const total = slidesRef.current.length;\n const next = cur + delta;\n logger.debug(`[SD] navWithVT delta=${delta} cur=${cur} next=${next} total=${total} transitioning=${transitioningRef.current}`);\n if (next < 0 || next >= total) {\n // Expected when a stale queued delta overflows after slides are removed.\n // Not a real error — demote to warn only.\n logger.warn(`[SD] navWithVT SKIPPED: out of range cur=${cur} delta=${delta} next=${next} total=${total}`);\n return;\n }\n if (transitioningRef.current) {\n pendingNavDelta.current = next - currentRef.current;\n logger.debug(\"[SD] navWithVT QUEUED pendingNavDelta=\", pendingNavDelta.current);\n return;\n }\n transitioningRef.current = true;\n\n const oldEl = cardRefs.current.get(slidesRef.current[cur].id);\n let newEl = cardRefs.current.get(slidesRef.current[next].id);\n logger.debug(`[SD] navWithVT elements: oldEl=${!!oldEl} newEl=${!!newEl} cardRefs.size=${cardRefs.current.size}`);\n\n // iOS WKWebView: rAF can fire before React ref callbacks complete.\n // If newEl is missing, poll up to 5 times (~5 frames) before giving up.\n if (!oldEl || !newEl) {\n if (!oldEl) {\n transitioningRef.current = false;\n logger.debug(\"[SD] navWithVT BLOCKED: oldEl missing\");\n reportError({ code: \"NAV_MISSING_ELEMENT\", message: \"DOM node for current slide not found\", detail: { cur, curId: slidesRef.current[cur]?.id, cardRefsSize: cardRefs.current.size } });\n return;\n }\n // newEl missing — retry next frame\n let retries = 0;\n const retry = (): void => {\n newEl = cardRefs.current.get(slidesRef.current[next]?.id ?? \"\") ?? null;\n logger.debug(`[SD] navWithVT retry ${retries + 1} newEl=${!!newEl}`);\n if (newEl) {\n // Got it — continue with the rest of navWithVT\n runNav(oldEl!, newEl);\n } else if (++retries < 5) {\n requestAnimationFrame(retry);\n } else {\n transitioningRef.current = false;\n logger.debug(\"[SD] navWithVT BLOCKED: newEl missing after retries\");\n reportError({ code: \"NAV_MISSING_ELEMENT\", message: \"DOM node for destination slide not found after retries\", detail: { next, nextId: slidesRef.current[next]?.id, retries, cardRefsSize: cardRefs.current.size } });\n }\n };\n requestAnimationFrame(retry);\n return;\n }\n\n runNav(oldEl, newEl);\n\n function runNav(oldEl: HTMLDivElement, newEl: HTMLDivElement): void {\n\n const afterPeek = resolvePeek(next, delta > 0 ? next + 1 : next - 1);\n const html = document.documentElement;\n const dirAttr = `data-sd-dir-${instanceId.current}`;\n const fadeAttr = `data-sd-fade-${instanceId.current}`;\n html.setAttribute(dirAttr, delta > 0 ? \"forward\" : \"back\");\n if (fade) html.setAttribute(fadeAttr, \"1\");\n\n // Ensure newEl is visible before startViewTransition so Safari/WKWebView\n // snapshots it correctly. We give newEl sd-peek (z-index:1, behind the\n // current card) rather than sd-current — this makes it visible for the\n // snapshot without it flashing over the old card before the VT starts.\n // commit() will promote it to sd-current after the \"old\" snapshot is taken.\n newEl.classList.remove(\"sd-current\");\n newEl.classList.add(\"sd-peek\");\n\n const isVisible = (): boolean =>\n newEl.classList.contains(\"sd-current\") || newEl.classList.contains(\"sd-peek\");\n\n logger.debug(`[SD] runNav newEl.className=\"${newEl.className}\" isVisible=${isVisible()}`);\n\n const startNav = (): void => {\n // VT name set via inline style — precise synchronous control.\n // Lives on exactly one element for exactly the duration the browser\n // needs it. Cleared inside commit() after \"new\" snapshot is taken.\n (oldEl.style as any).viewTransitionName = vtName;\n\n const commit = (): void => {\n (oldEl.style as any).viewTransitionName = \"\";\n (newEl.style as any).viewTransitionName = vtName;\n lastShownAt.current[cur] = performance.now() - 1;\n lastShownAt.current[next] = performance.now();\n currentRef.current = next;\n peekRef.current = afterPeek;\n setCurrent(next);\n setPeekIndex(afterPeek);\n syncLayers(next, afterPeek);\n onSlideChange?.(next);\n // Clear immediately — browser has snapshotted \"new\" by now\n (newEl.style as any).viewTransitionName = \"\";\n };\n\n // Guard: vt.finished fires once per VT, but cleanup() calls\n // flushAfterNav() which may call navWithVTRef again — that inner\n // call creates its own VT whose vt.finished would re-fire this\n // same cleanup closure. The flag prevents double execution.\n let cleanupFired = false;\n const cleanup = (): void => {\n if (cleanupFired) return;\n cleanupFired = true;\n html.removeAttribute(dirAttr);\n html.removeAttribute(fadeAttr);\n transitioningRef.current = false;\n logger.debug(`[SD] navWithVT cleanup cur=${currentRef.current} pendingRemoveNavTo=${pendingRemoveNavTo.current} pendingRemoveIds.size=${pendingRemoveIds.current.size} pendingNavDelta=${pendingNavDelta.current}`);\n flushAfterNav();\n };\n\n const doc = document as DocWithVT;\n if (!doc.startViewTransition) { commit(); cleanup(); return; }\n const vt = doc.startViewTransition!(commit);\n vt.finished.finally(cleanup);\n }; // end startNav\n\n // Retry up to 3 frames waiting for WKWebView to commit the class change.\n // On Chrome/desktop the class is always visible immediately (retry 0).\n // On Safari/WKWebView it occasionally needs 1-2 frames.\n let visRetries = 0;\n const waitForVisible = (): void => {\n if (isVisible()) {\n logger.debug(`[SD] newEl visible after ${visRetries} retries`);\n startNav();\n } else if (visRetries++ < 3) {\n logger.debug(`[SD] newEl not visible yet, retry ${visRetries}`);\n requestAnimationFrame(waitForVisible);\n } else {\n // Proceed anyway — better to animate from hidden than silently fail\n logger.debug(\"[SD] newEl still not visible after retries, proceeding\");\n reportError({ code: \"NAV_ELEMENT_NOT_VISIBLE\", message: \"Destination slide not visible after retries — animating anyway\", detail: { next, newElClass: newEl.className, retries: visRetries } });\n startNav();\n }\n };\n waitForVisible();\n } // end runNav\n },\n [fade, vtName, resolvePeek, syncLayers, onSlideChange, flushAfterNav],\n );\n navWithVTRef.current = navWithVT;\n\n // ── navWithGesture ────────────────────────────────────────────────────────\n const navWithGesture = useCallback(\n (delta: number, dragPos: number): void => {\n const cur = currentRef.current;\n const total = slidesRef.current.length;\n const next = cur + delta;\n logger.debug(`[SD] navWithGesture delta=${delta} cur=${cur} next=${next} total=${total} transitioning=${transitioningRef.current}`);\n if (next < 0 || next >= total) {\n // Gesture released at edge — normal boundary condition, not an error.\n logger.warn(`[SD] navWithGesture SKIPPED: out of range cur=${cur} delta=${delta} next=${next} total=${total}`);\n return;\n }\n if (transitioningRef.current) { logger.debug(\"[SD] navWithGesture BLOCKED: transitioning\"); return; }\n transitioningRef.current = true;\n\n const flyingEl = cardRefs.current.get(slidesRef.current[cur].id);\n if (!flyingEl) {\n transitioningRef.current = false;\n logger.debug(\"[SD] navWithGesture BLOCKED: flyingEl missing\");\n reportError({ code: \"NAV_MISSING_ELEMENT\", message: \"DOM node for gesture fly-out not found\", detail: { cur, curId: slidesRef.current[cur]?.id } });\n return;\n }\n\n const dim = navAxis === \"y\" ? heightRef.current : width;\n // delta > 0 = forward = exit negative (left/up); delta < 0 = back = exit positive (right/down)\n const exitPos = delta > 0 ? -dim * 1.05 : dim * 1.05;\n const remaining = Math.abs(exitPos - dragPos);\n const duration = Math.max(40, Math.min(transitionMs, (remaining / dim) * (transitionMs * 0.6)));\n const translate = navAxis === \"y\" ? `translateY(${exitPos}px)` : `translateX(${exitPos}px)`;\n\n flyingEl.style.transition =\n `transform ${duration}ms cubic-bezier(0.25,0,0.35,1)` +\n (dimOnDrag ? `, opacity ${duration * 0.7}ms ease` : \"\");\n flyingEl.style.transform = translate;\n if (dimOnDrag) flyingEl.style.opacity = \"0\";\n\n const onDone = (e: TransitionEvent): void => {\n if (e.propertyName !== \"transform\") return;\n flyingEl.removeEventListener(\"transitionend\", onDone);\n\n // Hide BEFORE resetting transform — prevents a 1-frame flash where the\n // card snaps back to center while still visible over the incoming slide.\n flyingEl.style.visibility = \"hidden\";\n flyingEl.style.transition = \"none\";\n flyingEl.style.transform = \"translateX(0)\";\n flyingEl.style.opacity = \"1\";\n flyingEl.classList.remove(\n \"sd-current\", \"sd-pull-fwd\", \"sd-pull-back\", \"sd-grabbing\", \"sd-drag-pending\",\n );\n // Visibility is restored by syncLayers via sd-peek or by next navigation.\n // Explicitly clear inline visibility so CSS class rules take over cleanly.\n flyingEl.style.visibility = \"\";\n\n const afterPeek = resolvePeek(next, delta > 0 ? next + 1 : next - 1);\n lastShownAt.current[cur] = performance.now() - 1;\n lastShownAt.current[next] = performance.now();\n currentRef.current = next;\n peekRef.current = afterPeek;\n syncLayers(next, afterPeek, flyingEl);\n setCurrent(next);\n setPeekIndex(afterPeek);\n onSlideChange?.(next);\n transitioningRef.current = false;\n logger.debug(`[SD] navWithGesture done cur=${currentRef.current}`);\n flushAfterNav();\n };\n\n flyingEl.addEventListener(\"transitionend\", onDone);\n },\n [width, dimOnDrag, transitionMs, navAxis, resolvePeek, syncLayers, onSlideChange, flushAfterNav],\n );\n\n // ── snapBack ──────────────────────────────────────────────────────────────\n const snapBack = useCallback((): void => {\n const el = cardRefs.current.get(slidesRef.current[currentRef.current]?.id ?? \"\");\n if (!el) return;\n el.style.transition = `transform ${transitionMs}ms cubic-bezier(0.34,1.56,0.64,1), opacity ${Math.round(transitionMs * 0.6)}ms ease`;\n el.style.transform = navAxis === \"y\" ? \"translateY(0)\" : \"translateX(0)\";\n el.style.opacity = \"1\";\n el.classList.remove(\"sd-pull-fwd\", \"sd-pull-back\", \"sd-grabbing\", \"sd-drag-pending\");\n }, [transitionMs, navAxis]);\n\n // ── cancelDragTimer ───────────────────────────────────────────────────────\n const cancelDragTimer = useCallback((): void => {\n if (dragTimerRef.current !== null) {\n clearTimeout(dragTimerRef.current);\n dragTimerRef.current = null;\n }\n }, []);\n\n // ── Gesture engine ────────────────────────────────────────────────────────\n\n const maxTravel = useCallback(\n (): number => width * maxDragRatio,\n [width, maxDragRatio],\n );\n\n const onPointerDown = useCallback(\n (e: ReactPointerEvent<HTMLDivElement>): void => {\n if (dragDisabled) return;\n const cur = currentRef.current;\n const el = cardRefs.current.get(slidesRef.current[cur]?.id ?? \"\");\n if (!el) { logger.debug(\"[SD] onPointerDown BLOCKED: no el for cur\", cur); return; }\n if (transitioningRef.current) { logger.debug(\"[SD] onPointerDown BLOCKED: transitioning\"); return; }\n if ((e.target as Element).closest(\"button, a, input, select, textarea\")) { logger.debug(\"[SD] onPointerDown BLOCKED: interactive target\"); return; }\n if (!el.contains(e.target as Node) && e.target !== el) { logger.debug(\"[SD] onPointerDown BLOCKED: target outside card\"); return; }\n // If the event originates inside a nested SwipeDeck's stage, let that\n // inner instance handle it exclusively. Without this, both outer and\n // inner decks activate drag for the same pointer simultaneously.\n const targetEl = e.target as Element;\n const nearestStage = targetEl.closest(\".sd-stage\");\n if (nearestStage && nearestStage !== e.currentTarget) { logger.debug(\"[SD] onPointerDown BLOCKED: target inside nested sd-stage\"); return; }\n\n // X-axis: capture immediately on sd-stage (touch-action:none owns the gesture).\n // Y-axis: do NOT capture yet — let native scroll work. Capture is claimed\n // in onPointerMove once the scroll boundary condition is met.\n if (navAxis === \"x\") {\n try {\n e.currentTarget.setPointerCapture(e.pointerId);\n logger.debug(\"[SD] onPointerDown captured pointerId\", e.pointerId, \"cur\", cur);\n } catch (err) {\n logger.warn(\"[SD] setPointerCapture failed:\", err);\n reportError({ code: \"POINTER_CAPTURE_FAILED\", message: \"setPointerCapture threw — drag may not work correctly\", detail: { pointerId: e.pointerId, error: String(err) } });\n }\n } else {\n logger.debug(\"[SD] onPointerDown Y-axis: deferring capture, watching scroll boundary\");\n }\n\n // Y-axis: find the scrollable element inside the card for boundary detection\n const scrollEl = navAxis === \"y\"\n ? (el.querySelector(\"[data-scrollable]\") ?? el) as Element\n : null;\n\n const state: DragState = {\n startX: e.clientX, startY: e.clientY,\n lastX: e.clientX, lastY: e.clientY, lastTime: performance.now(),\n velX: 0, velY: 0, axis: null,\n active: dragDelayMs <= 0,\n pointerId: e.pointerId,\n boundaryClaimed: false,\n scrollEl,\n };\n\n if (dragDelayMs > 0) {\n el.classList.add(\"sd-drag-pending\");\n dragRef.current = state;\n dragTimerRef.current = setTimeout(() => {\n dragTimerRef.current = null;\n if (dragRef.current) {\n dragRef.current.active = true;\n el.classList.remove(\"sd-drag-pending\");\n el.classList.add(\"sd-grabbing\");\n }\n }, dragDelayMs);\n } else {\n dragRef.current = state;\n el.classList.add(\"sd-grabbing\");\n e.preventDefault();\n }\n\n lastDragXRef.current = 0;\n lastDragYRef.current = 0;\n },\n [dragDisabled, dragDelayMs, navAxis],\n );\n\n const onPointerMove = useCallback(\n (e: ReactPointerEvent<HTMLDivElement>): void => {\n if (!dragRef.current?.active) return;\n const d = dragRef.current;\n\n const dx = e.clientX - d.startX;\n const dy = e.clientY - d.startY;\n\n // ── X-axis mode ───────────────────────────────────────────────────────\n if (navAxis === \"x\") {\n if (!d.axis) {\n if (Math.hypot(dx, dy) < 6) return;\n d.axis = Math.abs(dx) >= Math.abs(dy) ? \"x\" : \"y\";\n }\n if (d.axis !== \"x\") return;\n e.preventDefault();\n\n const now = performance.now();\n const dt = Math.max(now - d.lastTime, 1);\n d.velX = d.velX * 0.7 + ((e.clientX - d.lastX) / dt) * 0.3;\n d.lastX = e.clientX;\n d.lastTime = now;\n\n const cur = currentRef.current;\n const total = slidesRef.current.length;\n const id = slidesRef.current[cur]?.id ?? \"\";\n const el = cardRefs.current.get(id);\n if (!el) return;\n\n const perm = dragPermissions.current.get(id) ?? \"all\";\n if (perm === \"left\" && dx > 0) return;\n if (perm === \"right\" && dx < 0) return;\n\n let x = dx;\n if ((x > 0 && cur === 0) || (x < 0 && cur === total - 1)) {\n x = rubberBand(x, width);\n }\n x = clamp(x, -maxTravel(), maxTravel());\n lastDragXRef.current = x;\n\n if (userPeekOverride.current === null) {\n const wantedPeek =\n x < -8 ? (cur + 1 < total ? cur + 1 : null) :\n x > 8 ? (cur - 1 >= 0 ? cur - 1 : null) :\n peekRef.current;\n if (wantedPeek !== peekRef.current) {\n peekRef.current = wantedPeek;\n setPeekIndex(wantedPeek);\n syncLayers(cur, wantedPeek, el);\n }\n }\n\n el.style.transition = \"none\";\n el.style.transform = `translateX(${x}px)`;\n el.style.opacity = dimOnDrag\n ? String(1 - clamp((Math.abs(x) / width) * 0.28, 0, 0.28))\n : \"1\";\n el.classList.toggle(\"sd-pull-fwd\", x < -8);\n el.classList.toggle(\"sd-pull-back\", x > 8);\n return;\n }\n\n // ── Y-axis mode ───────────────────────────────────────────────────────\n // Phase 1: boundary detection — don't claim gesture until scroll hits edge.\n if (!d.boundaryClaimed) {\n const sEl = d.scrollEl;\n const atTop = !sEl || sEl.scrollTop <= 0;\n const atBottom = !sEl || sEl.scrollTop >= sEl.scrollHeight - sEl.clientHeight - 1;\n // dy > 0 = dragging down = user wants to go back (prev)\n // dy < 0 = dragging up = user wants to go forward (next)\n const pullingDown = dy > 12;\n const pullingUp = dy < -12;\n const canClaim = (pullingDown && atTop) || (pullingUp && atBottom);\n\n if (!canClaim) return; // native scroll still owns this\n\n // Claim the gesture — capture pointer and take over from native scroll\n d.boundaryClaimed = true;\n d.startY = e.clientY; // reset origin to where we claimed\n d.lastY = e.clientY;\n try {\n e.currentTarget.setPointerCapture(d.pointerId);\n logger.debug(\"[SD] Y boundary claimed, capture taken dy=\", dy);\n } catch (err) {\n logger.warn(\"[SD] Y setPointerCapture failed:\", err);\n reportError({ code: \"POINTER_CAPTURE_FAILED\", message: \"Y-axis setPointerCapture failed\", detail: { error: String(err) } });\n d.boundaryClaimed = false;\n return;\n }\n }\n\n // Phase 2: claimed — drive the drag\n e.preventDefault();\n\n const now = performance.now();\n const dt = Math.max(now - d.lastTime, 1);\n const rawDy = e.clientY - d.startY;\n d.velY = d.velY * 0.7 + ((e.clientY - d.lastY) / dt) * 0.3;\n d.lastY = e.clientY;\n d.lastTime = now;\n\n const cur = currentRef.current;\n const total = slidesRef.current.length;\n const id = slidesRef.current[cur]?.id ?? \"\";\n const el = cardRefs.current.get(id);\n if (!el) return;\n\n const perm = dragPermissions.current.get(id) ?? \"all\";\n // dy > 0 = pulling down = prev; dy < 0 = pulling up = next\n if (perm === \"up\" && rawDy > 0) return;\n if (perm === \"down\" && rawDy < 0) return;\n\n const dim = heightRef.current || 600;\n let y = rawDy;\n // Rubberband at boundaries\n if ((y > 0 && cur === 0) || (y < 0 && cur === total - 1)) {\n y = rubberBand(y, dim);\n }\n y = clamp(y, -dim * maxDragRatio, dim * maxDragRatio);\n lastDragYRef.current = y;\n\n if (userPeekOverride.current === null) {\n // y < 0 = pulling up = going forward (next); y > 0 = pulling down = going back (prev)\n const wantedPeek =\n y < -8 ? (cur + 1 < total ? cur + 1 : null) :\n y > 8 ? (cur - 1 >= 0 ? cur - 1 : null) :\n peekRef.current;\n if (wantedPeek !== peekRef.current) {\n peekRef.current = wantedPeek;\n setPeekIndex(wantedPeek);\n syncLayers(cur, wantedPeek, el);\n }\n }\n\n el.style.transition = \"none\";\n el.style.transform = `translateY(${y}px)`;\n el.style.opacity = dimOnDrag\n ? String(1 - clamp((Math.abs(y) / dim) * 0.28, 0, 0.28))\n : \"1\";\n el.classList.toggle(\"sd-pull-fwd\", y < -8);\n el.classList.toggle(\"sd-pull-back\", y > 8);\n },\n [width, dimOnDrag, navAxis, syncLayers, maxTravel, maxDragRatio],\n );\n\n const onPointerUp = useCallback(\n (e: ReactPointerEvent<HTMLDivElement>): void => {\n if (!dragRef.current) return;\n const d = dragRef.current;\n const dx = e.clientX - d.startX;\n const vel = d.velX;\n const wasActive = d.active;\n dragRef.current = null;\n cancelDragTimer();\n\n // Always release capture first — must happen before any early return\n // (pointercancel path especially) to unblock future pointer events.\n try {\n e.currentTarget.releasePointerCapture(d.pointerId);\n } catch (err) {\n logger.warn(\"[SD] releasePointerCapture failed:\", err);\n reportError({ code: \"POINTER_RELEASE_FAILED\", message: \"releasePointerCapture threw — future pointer events may be blocked\", detail: { pointerId: d.pointerId, error: String(err) } });\n }\n\n const el = cardRefs.current.get(slidesRef.current[currentRef.current]?.id ?? \"\");\n el?.classList.remove(\"sd-drag-pending\", \"sd-grabbing\");\n\n if (!wasActive) { logger.debug(\"[SD] onPointerUp: drag never activated, no-op\"); return; }\n if (transitioningRef.current) { logger.debug(\"[SD] onPointerUp: transitioning — snapBack\"); snapBack(); return; }\n\n const moved = Math.abs(dx) > 8;\n const commit = moved && (\n Math.abs(lastDragXRef.current) >= maxTravel() - 1 ||\n Math.abs(vel) > VELOCITY_COMMIT\n );\n\n logger.debug(`[SD] onPointerUp dx=${dx.toFixed(1)} lastDragX=${lastDragXRef.current.toFixed(1)} vel=${vel.toFixed(3)} moved=${moved} commit=${commit}`);\n\n if (commit) {\n const delta = dx < 0 ? 1 : -1;\n const next = currentRef.current + delta;\n logger.debug(`[SD] onPointerUp committing delta=${delta} next=${next} total=${slidesRef.current.length}`);\n if (next >= 0 && next < slidesRef.current.length) {\n // Lock the card at its current drag position with transition:none\n // before navWithGesture runs. Prevents a React re-render in the gap\n // from clearing the inline transform back to 0, which causes a flash.\n const flyingEl = cardRefs.current.get(slidesRef.current[currentRef.current]?.id ?? \"\");\n if (flyingEl) {\n flyingEl.style.transition = \"none\";\n flyingEl.style.transform = `translateX(${lastDragXRef.current}px)`;\n }\n navWithGesture(delta, lastDragXRef.current);\n return;\n }\n logger.debug(\"[SD] onPointerUp commit BLOCKED: next out of range\");\n }\n logger.debug(\"[SD] onPointerUp snapBack\");\n snapBack();\n },\n [snapBack, navWithGesture, cancelDragTimer, maxTravel, maxDragRatio, navAxis, width, reportError],\n );\n\n // ── Keyboard navigation ───────────────────────────────────────────────────\n useEffect(() => {\n if (keyboardDisabled) return;\n const h = (e: KeyboardEvent): void => {\n if (e.key === \"ArrowRight\" || e.key === \"ArrowDown\") navWithVT(1);\n if (e.key === \"ArrowLeft\" || e.key === \"ArrowUp\") navWithVT(-1);\n };\n window.addEventListener(\"keydown\", h);\n return () => window.removeEventListener(\"keydown\", h);\n }, [navWithVT, keyboardDisabled]);\n\n // ── Cleanup drag timer on unmount ─────────────────────────────────────────\n useEffect(() => () => { cancelDragTimer(); }, [cancelDragTimer]);\n\n // ── Stage height tracking (needed for Y-axis gesture exit distance) ───────\n useEffect(() => {\n if (!stageRef.current) return;\n heightRef.current = stageRef.current.getBoundingClientRect().height;\n const ro = new ResizeObserver((entries) => {\n heightRef.current = entries[0]?.contentRect.height ?? heightRef.current;\n });\n ro.observe(stageRef.current);\n return () => ro.disconnect();\n }, []);\n\n // ── execRemoveSlides ─────────────────────────────────────────────────────\n // Hoisted so both removeSlide and removeSlides handle methods can call it\n // without using `this`, which is invalid in a plain object literal.\n const execRemoveSlides = useCallback(\n (ids: string[], options: Pick<SlideOptions, \"animate\"> = {}): void => {\n const { animate = true } = options;\n if (ids.length === 0) return;\n const list = slidesRef.current;\n if (list.length <= 1) return; // always keep at least one slide\n\n const idSet = new Set(ids);\n const allIdxs = Array.from(idSet)\n .map((id) => list.findIndex((s) => s.id === id))\n .filter((i) => i !== -1);\n if (allIdxs.length === 0) return;\n\n // Never remove all slides — keep at least one\n let safeIdxs = allIdxs;\n if (allIdxs.length >= list.length) {\n const keepIdx = allIdxs.includes(currentRef.current)\n ? (allIdxs.find((i) => i !== currentRef.current) ?? 0)\n : currentRef.current;\n safeIdxs = allIdxs.filter((i) => i !== keepIdx);\n if (safeIdxs.length === 0) return;\n }\n\n const safeSet = new Set(safeIdxs);\n const curIdx = currentRef.current;\n const curIsGone = safeSet.has(curIdx);\n\n // Clean up per-slide metadata for all slides being removed\n for (const i of safeIdxs) {\n keepDomIds.current.delete(list[i].id);\n dragPermissions.current.delete(list[i].id);\n }\n\n const nonCurIdxs = safeIdxs.filter((i) => i !== curIdx).sort((a, b) => b - a);\n\n if (!curIsGone) {\n // Current is not being removed — splice immediately, no nav needed\n doRemoveByIndices(nonCurIdxs);\n return;\n }\n\n // Current IS being removed — must nav away first, then splice.\n // Queue all ids (including current) for removal after nav settles.\n pendingRemoveIds.current.add(list[curIdx].id);\n for (const i of nonCurIdxs) pendingRemoveIds.current.add(list[i].id);\n\n // Remove non-current slides immediately so they don't linger visually\n if (nonCurIdxs.length > 0) doRemoveByIndices(nonCurIdxs);\n\n const total = slidesRef.current.length;\n const removeDelta = curIdx + 1 < total ? 1 : -1;\n const removeTarget = curIdx + removeDelta;\n\n logger.debug(`[SD] removeSlides curIdx=${curIdx} removeTarget=${removeTarget} transitioning=${transitioningRef.current} pendingRemoveIds.size=${pendingRemoveIds.current.size}`);\n if (!transitioningRef.current) {\n const nav = animate ? navWithVT : navInstant;\n nav(removeDelta);\n } else {\n pendingRemoveNavTo.current = removeTarget;\n pendingNavDelta.current = null;\n logger.debug(`[SD] removeSlides QUEUED pendingRemoveNavTo=${removeTarget}`);\n }\n },\n [navWithVT, navInstant, doRemoveByIndices, flushAfterNav],\n );\n\n // ── Imperative handle ─────────────────────────────────────────────────────\n useImperativeHandle(\n externalRef,\n () => ({\n get currentIndex(): number { return currentRef.current; },\n get currentSlides(): SlideItem[] { return slidesRef.current; },\n\n addSlide(slide: SlideItem, options: SlideOptions = {}): void {\n const { keepDom = false, animate = true, drag = \"all\" } = options;\n if (keepDom) keepDomIds.current.add(slide.id);\n if (drag !== \"all\") dragPermissions.current.set(slide.id, drag);\n\n const newIdx = slidesRef.current.length;\n\n setSlides((prev) => {\n const next = [...prev, slide];\n slidesRef.current = next;\n lastShownAt.current.push(0);\n return next;\n });\n\n // One rAF lets React commit the new SlideSlot to DOM before we nav.\n // The card shell always exists (SlideSlot never returns null) so\n // navWithVT can always find newEl — no timing issues.\n requestAnimationFrame(() => {\n const delta = newIdx - currentRef.current;\n logger.debug(`[SD] addSlide rAF newIdx=${newIdx} cur=${currentRef.current} delta=${delta} animate=${animate} transitioning=${transitioningRef.current}`);\n const nav = animate ? navWithVTRef.current : navInstantRef.current;\n nav(delta);\n });\n },\n\n removeSlide(id: string, options: Pick<SlideOptions, \"animate\"> = {}): void {\n execRemoveSlides([id], options);\n },\n\n removeSlides(ids: string[], options: Pick<SlideOptions, \"animate\"> = {}): void {\n execRemoveSlides(ids, options);\n },\n\n goTo(index: number, options: NavOptions = {}): void {\n const delta = index - currentRef.current;\n if (delta === 0) return;\n const nav = options.instant ? navInstant : navWithVT;\n nav(delta);\n },\n\n next(options: NavOptions = {}): void {\n const nav = options.instant ? navInstant : navWithVT;\n nav(1);\n },\n\n prev(options: NavOptions = {}): void {\n const nav = options.instant ? navInstant : navWithVT;\n nav(-1);\n },\n\n setPeek(index: number | null): void {\n const total = slidesRef.current.length;\n const valid =\n index !== null && index >= 0 && index < total && index !== currentRef.current\n ? index\n : null;\n userPeekOverride.current = valid;\n if (!transitioningRef.current) {\n const resolved = valid !== null ? valid : resolvePeek(currentRef.current, -1);\n peekRef.current = resolved;\n setPeekIndex(resolved);\n syncLayers(currentRef.current, resolved);\n }\n },\n }),\n [navWithVT, navInstant, resolvePeek, syncLayers, doRemoveByIndices],\n );\n\n // ── Render ────────────────────────────────────────────────────────────────\n return (\n <div\n className={`sd-root${className ? \" \" + className : \"\"}`}\n style={{ width } as CSSProperties}\n >\n <div\n ref={stageRef}\n className=\"sd-stage\"\n style={{ touchAction: navAxis === \"y\" ? \"pan-y\" : \"none\" }}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerUp}\n onPointerCancel={onPointerUp}\n >\n <div className=\"sd-sizer\" aria-hidden=\"true\" />\n\n {slides.map((slide, i) => (\n <SlideSlot\n key={slide.id}\n slide={slide}\n layer={layerFor(i, current, peekIndex)}\n keepDom={keepDomIds.current.has(slide.id)}\n dragDisabled={dragDisabled}\n navAxis={navAxis}\n refCallback={(el) => {\n if (el) cardRefs.current.set(slide.id, el);\n // Do NOT delete on null — doRemoveByIndices handles deletion\n // explicitly. React calling refCallback(null) on unmount after\n // deletion is already done is harmless.\n }}\n >\n {slide.content}\n </SlideSlot>\n ))}\n </div>\n\n {showDots && slides.length > 0 && (\n <div className=\"sd-dots\" role=\"tablist\" aria-label=\"Slides\">\n {slides.map((slide, i) => (\n <div\n key={slide.id}\n role=\"tab\"\n aria-selected={i === current}\n className={`sd-dot${i === current ? \" sd-dot-active\" : \"\"}`}\n onClick={() => navWithVT(i - current)}\n />\n ))}\n </div>\n )}\n </div>\n );\n },\n);\n\nexport default SwipeDeck;\n"]}