/** * IncrementalPanGuide — V12.11 Step 2 (item 2 of the four-step * preview-UX overhaul). * * Apple-pano-style "keep the arrow on the line" pan guide for the * incremental capture flow. * * ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ * ▲ * ● ← marker drifts perpendicular * ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ← guide line * (along pan axis) * ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ * * The user is told (via the band overlay's caption) to pan along * one axis. This guide gives them live feedback on how WELL they * are obeying that instruction: * * • A solid GUIDE LINE runs along the intended pan axis (the * "ideal" pan path) across the centre of the screen. * • A circular MARKER sits on the line. As the user tilts the * device perpendicular to the pan axis, the marker drifts * OFF the line by an amount proportional to the integrated * perpendicular rotation since capture started. * • The marker's COLOUR signals how far off they've drifted — * green (on track), amber (slight drift), red (significant * drift). Same colour scale as PanoramaGuidance for * consistency. * * Why integrate perpendicular rotation rather than absolute device * angle? We don't care about the user's starting orientation (they * may begin a horizontal pan with the phone tilted slightly down * — that's fine). We care about CHANGE during the pan. So we * reset the integral to 0 at `active=true` and accumulate the * perpendicular gyro rate from there. Drift over a typical 5–10 s * capture is well within tolerance (a few degrees max). * * Why not consume ARKit pose? Two reasons: * 1. The vision-camera (non-AR) capture path doesn't have ARKit * pose at all — gyro is the only common signal. * 2. We want this guide to work the SAME way regardless of * whether AR mode is on or off — gyro keeps the UX * consistent. * * Performance: gyro at 30 Hz, integration is two multiplies per * sample, marker position update via setState. Negligible. */ import React from 'react'; import { type StyleProp, type ViewStyle } from 'react-native'; export interface IncrementalPanGuideProps { /** * Subscribe to the gyroscope only while this is true. Typically * driven by the host's `statusPhase === 'recording' && * useIncrementalPath`. When this flips false the integral * resets so the next capture starts from a known zero. */ active: boolean; /** * Pixels per radian of perpendicular drift. Higher = more * sensitive (small drifts move the marker more visibly). * Default 600 px/rad gives ~10 px of marker travel for ~1° of * tilt — visible without feeling twitchy. */ pixelsPerRad?: number; /** * Maximum marker travel from the line, in pixels. Beyond this * the marker pins to the edge of its track. Default 80 px. */ maxTravelPx?: number; /** * Drift thresholds for the colour scale, in radians. Tuned so * "green" covers ±1° (no human-perceptible misalignment), * "amber" up to ±3°, "red" beyond. Same defaults as * PanoramaGuidance's pan-speed pill for visual consistency. */ warnRad?: number; badRad?: number; style?: StyleProp; } export declare function IncrementalPanGuide({ active, pixelsPerRad, maxTravelPx, warnRad, // ≈ 2.9° badRad, // ≈ 5.7° style, }: IncrementalPanGuideProps): React.JSX.Element | null; //# sourceMappingURL=IncrementalPanGuide.d.ts.map