@backbay/glia 0.2.0-alpha.7 → 0.2.0-alpha.8
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/audio/index.js +1145 -5
- package/dist/audio/index.js.map +1 -1
- package/dist/components/index.js +3187 -10
- package/dist/components/index.js.map +1 -1
- package/dist/core.js +19714 -12
- package/dist/core.js.map +1 -1
- package/dist/emotion/index.js +1 -1
- package/dist/emotion/index.js.map +1 -1
- package/dist/hooks/index.js +941 -6
- package/dist/hooks/index.js.map +1 -1
- package/dist/index.js +31841 -183
- package/dist/index.js.map +1 -1
- package/dist/primitives/index.js +21111 -57
- package/dist/primitives/index.js.map +1 -1
- package/dist/protocol/index.js +360 -2
- package/dist/protocol/index.js.map +1 -1
- package/dist/speakeasy/index.js +2786 -38
- package/dist/speakeasy/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/theme/index.js +1150 -3
- package/dist/theme/index.js.map +1 -1
- package/dist/vision/index.js +370 -2
- package/dist/vision/index.js.map +1 -1
- package/dist/workspace/index.js +16824 -2
- package/dist/workspace/index.js.map +1 -1
- package/package.json +15 -9
- package/dist/AuroraBackground-AP6ZHVFA.js +0 -6
- package/dist/AuroraBackground-AP6ZHVFA.js.map +0 -1
- package/dist/BentoGrid-CDARICNM.js +0 -6
- package/dist/BentoGrid-CDARICNM.js.map +0 -1
- package/dist/CommandPalette-JCWJKRBY.js +0 -6
- package/dist/CommandPalette-JCWJKRBY.js.map +0 -1
- package/dist/Glass-H4X4ZI4P.js +0 -7
- package/dist/Glass-H4X4ZI4P.js.map +0 -1
- package/dist/GlitchText-KLQ57PPY.js +0 -6
- package/dist/GlitchText-KLQ57PPY.js.map +0 -1
- package/dist/GlowButton-VGBPMZO7.js +0 -6
- package/dist/GlowButton-VGBPMZO7.js.map +0 -1
- package/dist/Graph3D-GO7N2EZQ.js +0 -540
- package/dist/Graph3D-GO7N2EZQ.js.map +0 -1
- package/dist/HUDProgressRing-N6C5NAEV.js +0 -6
- package/dist/HUDProgressRing-N6C5NAEV.js.map +0 -1
- package/dist/KPIStat-PBQK27ZB.js +0 -6
- package/dist/KPIStat-PBQK27ZB.js.map +0 -1
- package/dist/NeonToast-W5F7MU3U.js +0 -6
- package/dist/NeonToast-W5F7MU3U.js.map +0 -1
- package/dist/ParticleField-WK6CNHWU.js +0 -51
- package/dist/ParticleField-WK6CNHWU.js.map +0 -1
- package/dist/TextGenerateEffect-EUCEIIUJ.js +0 -6
- package/dist/TextGenerateEffect-EUCEIIUJ.js.map +0 -1
- package/dist/ThreeDCard-VH5I3SSY.js +0 -6
- package/dist/ThreeDCard-VH5I3SSY.js.map +0 -1
- package/dist/TypingAnimation-GIWOHPIX.js +0 -6
- package/dist/TypingAnimation-GIWOHPIX.js.map +0 -1
- package/dist/alert-dialog-QOSYBIIE.js +0 -19
- package/dist/alert-dialog-QOSYBIIE.js.map +0 -1
- package/dist/avatar-N5R37PCU.js +0 -10
- package/dist/avatar-N5R37PCU.js.map +0 -1
- package/dist/badge-GTVIIGPY.js +0 -8
- package/dist/badge-GTVIIGPY.js.map +0 -1
- package/dist/button-D7IMSV2D.js +0 -8
- package/dist/button-D7IMSV2D.js.map +0 -1
- package/dist/chunk-3CMPQOMY.js +0 -69
- package/dist/chunk-3CMPQOMY.js.map +0 -1
- package/dist/chunk-3OQT6IYR.js +0 -41
- package/dist/chunk-3OQT6IYR.js.map +0 -1
- package/dist/chunk-43B2WVLS.js +0 -85
- package/dist/chunk-43B2WVLS.js.map +0 -1
- package/dist/chunk-4SRFO5W3.js +0 -121
- package/dist/chunk-4SRFO5W3.js.map +0 -1
- package/dist/chunk-5IZELOOU.js +0 -362
- package/dist/chunk-5IZELOOU.js.map +0 -1
- package/dist/chunk-6DM4ACSS.js +0 -154
- package/dist/chunk-6DM4ACSS.js.map +0 -1
- package/dist/chunk-6IGT34PC.js +0 -50
- package/dist/chunk-6IGT34PC.js.map +0 -1
- package/dist/chunk-6RKBCJHN.js +0 -194
- package/dist/chunk-6RKBCJHN.js.map +0 -1
- package/dist/chunk-6RX2WGCO.js +0 -108
- package/dist/chunk-6RX2WGCO.js.map +0 -1
- package/dist/chunk-7K4WZM3U.js +0 -189
- package/dist/chunk-7K4WZM3U.js.map +0 -1
- package/dist/chunk-7MDBHJPT.js +0 -407
- package/dist/chunk-7MDBHJPT.js.map +0 -1
- package/dist/chunk-7UQD6ROV.js +0 -9
- package/dist/chunk-7UQD6ROV.js.map +0 -1
- package/dist/chunk-AFNIVLZP.js +0 -1069
- package/dist/chunk-AFNIVLZP.js.map +0 -1
- package/dist/chunk-ANWYRO6A.js +0 -407
- package/dist/chunk-ANWYRO6A.js.map +0 -1
- package/dist/chunk-DIXPOHDO.js +0 -71
- package/dist/chunk-DIXPOHDO.js.map +0 -1
- package/dist/chunk-DWYMKYPI.js +0 -3
- package/dist/chunk-DWYMKYPI.js.map +0 -1
- package/dist/chunk-E3NVDCZG.js +0 -280
- package/dist/chunk-E3NVDCZG.js.map +0 -1
- package/dist/chunk-EBM7YBKL.js +0 -399
- package/dist/chunk-EBM7YBKL.js.map +0 -1
- package/dist/chunk-EPAM7IWW.js +0 -294
- package/dist/chunk-EPAM7IWW.js.map +0 -1
- package/dist/chunk-EXQ7GYRS.js +0 -134
- package/dist/chunk-EXQ7GYRS.js.map +0 -1
- package/dist/chunk-F4QTUZ3C.js +0 -136
- package/dist/chunk-F4QTUZ3C.js.map +0 -1
- package/dist/chunk-FEW533R2.js +0 -105
- package/dist/chunk-FEW533R2.js.map +0 -1
- package/dist/chunk-FFZLJKC7.js +0 -270
- package/dist/chunk-FFZLJKC7.js.map +0 -1
- package/dist/chunk-GEAMOBF7.js +0 -8486
- package/dist/chunk-GEAMOBF7.js.map +0 -1
- package/dist/chunk-GRTRSCTD.js +0 -74
- package/dist/chunk-GRTRSCTD.js.map +0 -1
- package/dist/chunk-IKGYOGLK.js +0 -16
- package/dist/chunk-IKGYOGLK.js.map +0 -1
- package/dist/chunk-IQ7WYWVJ.js +0 -73
- package/dist/chunk-IQ7WYWVJ.js.map +0 -1
- package/dist/chunk-IXIVWQLF.js +0 -543
- package/dist/chunk-IXIVWQLF.js.map +0 -1
- package/dist/chunk-JCJU57RC.js +0 -115
- package/dist/chunk-JCJU57RC.js.map +0 -1
- package/dist/chunk-KORSTBU4.js +0 -117
- package/dist/chunk-KORSTBU4.js.map +0 -1
- package/dist/chunk-KSEZ6UM2.js +0 -235
- package/dist/chunk-KSEZ6UM2.js.map +0 -1
- package/dist/chunk-MHPF7R3O.js +0 -1376
- package/dist/chunk-MHPF7R3O.js.map +0 -1
- package/dist/chunk-MPC5IH7E.js +0 -81
- package/dist/chunk-MPC5IH7E.js.map +0 -1
- package/dist/chunk-MQIU2NYA.js +0 -114
- package/dist/chunk-MQIU2NYA.js.map +0 -1
- package/dist/chunk-NYMBJOGR.js +0 -2192
- package/dist/chunk-NYMBJOGR.js.map +0 -1
- package/dist/chunk-OBZD2M3C.js +0 -169
- package/dist/chunk-OBZD2M3C.js.map +0 -1
- package/dist/chunk-ODM2AG6G.js +0 -176
- package/dist/chunk-ODM2AG6G.js.map +0 -1
- package/dist/chunk-ONDKF5LP.js +0 -53
- package/dist/chunk-ONDKF5LP.js.map +0 -1
- package/dist/chunk-P25YCWQB.js +0 -41
- package/dist/chunk-P25YCWQB.js.map +0 -1
- package/dist/chunk-PFYVNM6H.js +0 -14
- package/dist/chunk-PFYVNM6H.js.map +0 -1
- package/dist/chunk-PWNNSGFL.js +0 -20
- package/dist/chunk-PWNNSGFL.js.map +0 -1
- package/dist/chunk-Q2PGZVOT.js +0 -36
- package/dist/chunk-Q2PGZVOT.js.map +0 -1
- package/dist/chunk-Q2XDMV7U.js +0 -76
- package/dist/chunk-Q2XDMV7U.js.map +0 -1
- package/dist/chunk-QG7FH2FI.js +0 -45
- package/dist/chunk-QG7FH2FI.js.map +0 -1
- package/dist/chunk-R7HUOK2D.js +0 -1914
- package/dist/chunk-R7HUOK2D.js.map +0 -1
- package/dist/chunk-REUYY7G5.js +0 -773
- package/dist/chunk-REUYY7G5.js.map +0 -1
- package/dist/chunk-RHC2Z2HT.js +0 -199
- package/dist/chunk-RHC2Z2HT.js.map +0 -1
- package/dist/chunk-RMCVLIFE.js +0 -23
- package/dist/chunk-RMCVLIFE.js.map +0 -1
- package/dist/chunk-ROZLTXGR.js +0 -234
- package/dist/chunk-ROZLTXGR.js.map +0 -1
- package/dist/chunk-RSS2C2O3.js +0 -17
- package/dist/chunk-RSS2C2O3.js.map +0 -1
- package/dist/chunk-SAGCG5SH.js +0 -355
- package/dist/chunk-SAGCG5SH.js.map +0 -1
- package/dist/chunk-TM6AOUSD.js +0 -40
- package/dist/chunk-TM6AOUSD.js.map +0 -1
- package/dist/chunk-TPK4BYCO.js +0 -970
- package/dist/chunk-TPK4BYCO.js.map +0 -1
- package/dist/chunk-UNQIL4K2.js +0 -34
- package/dist/chunk-UNQIL4K2.js.map +0 -1
- package/dist/chunk-UUG6L75Y.js +0 -47
- package/dist/chunk-UUG6L75Y.js.map +0 -1
- package/dist/chunk-V2SYMV4W.js +0 -114
- package/dist/chunk-V2SYMV4W.js.map +0 -1
- package/dist/chunk-V7EN5CTH.js +0 -130
- package/dist/chunk-V7EN5CTH.js.map +0 -1
- package/dist/chunk-VITKG2HL.js +0 -1125
- package/dist/chunk-VITKG2HL.js.map +0 -1
- package/dist/chunk-VYEWU5LO.js +0 -2631
- package/dist/chunk-VYEWU5LO.js.map +0 -1
- package/dist/chunk-W67QAGSH.js +0 -178
- package/dist/chunk-W67QAGSH.js.map +0 -1
- package/dist/chunk-WWBIN6KV.js +0 -1353
- package/dist/chunk-WWBIN6KV.js.map +0 -1
- package/dist/chunk-X77Z4PFB.js +0 -224
- package/dist/chunk-X77Z4PFB.js.map +0 -1
- package/dist/chunk-X7VG7OTT.js +0 -8
- package/dist/chunk-X7VG7OTT.js.map +0 -1
- package/dist/chunk-XE4K2SGI.js +0 -74
- package/dist/chunk-XE4K2SGI.js.map +0 -1
- package/dist/chunk-YIUG7IJK.js +0 -628
- package/dist/chunk-YIUG7IJK.js.map +0 -1
- package/dist/chunk-YNVN3V4Y.js +0 -13
- package/dist/chunk-YNVN3V4Y.js.map +0 -1
- package/dist/chunk-Z2S54IZX.js +0 -198
- package/dist/chunk-Z2S54IZX.js.map +0 -1
- package/dist/chunk-ZR6AH25Z.js +0 -17
- package/dist/chunk-ZR6AH25Z.js.map +0 -1
- package/dist/dialog-SPM3DTTI.js +0 -17
- package/dist/dialog-SPM3DTTI.js.map +0 -1
- package/dist/dropdown-menu-HMTWKWGK.js +0 -21
- package/dist/dropdown-menu-HMTWKWGK.js.map +0 -1
- package/dist/input-BH4P4S26.js +0 -6
- package/dist/input-BH4P4S26.js.map +0 -1
- package/dist/label-5Z4Q6VER.js +0 -8
- package/dist/label-5Z4Q6VER.js.map +0 -1
- package/dist/popover-IFOUXYLI.js +0 -18
- package/dist/popover-IFOUXYLI.js.map +0 -1
- package/dist/scroll-area-DJXNW6QX.js +0 -14
- package/dist/scroll-area-DJXNW6QX.js.map +0 -1
- package/dist/select-FZ277C3G.js +0 -22
- package/dist/select-FZ277C3G.js.map +0 -1
- package/dist/separator-BTMLN4NB.js +0 -8
- package/dist/separator-BTMLN4NB.js.map +0 -1
- package/dist/skeleton-DXIWBH4W.js +0 -6
- package/dist/skeleton-DXIWBH4W.js.map +0 -1
- package/dist/switch-4MCXIZBY.js +0 -13
- package/dist/switch-4MCXIZBY.js.map +0 -1
- package/dist/tabs-O7AW3APK.js +0 -17
- package/dist/tabs-O7AW3APK.js.map +0 -1
- package/dist/textarea-IB5WAFDO.js +0 -6
- package/dist/textarea-IB5WAFDO.js.map +0 -1
- package/dist/toggle-XVPPG6P4.js +0 -10
- package/dist/toggle-XVPPG6P4.js.map +0 -1
- package/dist/tooltip-JICZTD4F.js +0 -18
- package/dist/tooltip-JICZTD4F.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/speakeasy/types.ts","../../src/speakeasy/hooks/useGestureRecognizer.ts","../../src/speakeasy/doorman/DoormanStateMachine.ts","../../src/speakeasy/auth/crypto.ts","../../src/speakeasy/auth/storage.ts","../../src/speakeasy/auth/SpeakeasyAuth.ts","../../src/speakeasy/auth/CapabilityIssuer.ts","../../src/speakeasy/doorman/panic.ts","../../src/speakeasy/auth/deviceSecret.ts","../../src/speakeasy/SpeakeasyProvider.tsx","../../src/speakeasy/components/SpeakeasyOrb.tsx","../../src/speakeasy/components/SpeakeasyRitualPad.tsx","../../src/speakeasy/components/SpeakeasyRegistrationDialog.tsx","../../src/speakeasy/components/SpeakeasyConsentDialog.tsx"],"names":["randomHex","useState","useCallback","useMemo","useRef","useEffect","jsx","jsxs"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Speakeasy Doorman - Type Definitions\n *\n * Gesture-based authentication ritual for gating entry into privileged UI/runtime mode.\n */\n\n// ============================================================================\n// Gesture Types\n// ============================================================================\n\nexport type GestureStepType = 'tap' | 'hold' | 'radial_drag' | 'flick';\n\nexport interface TapStep {\n type: 'tap';\n count: number;\n region: 'center' | 'edge';\n}\n\nexport interface HoldStep {\n type: 'hold';\n durationMs: number;\n region: 'center' | 'edge';\n}\n\nexport interface RadialDragStep {\n type: 'radial_drag';\n fromAngle: number; // degrees, 0 = right, 90 = up\n toAngle: number;\n notches: number; // discrete angular positions hit\n}\n\nexport interface FlickStep {\n type: 'flick';\n direction: 'up' | 'down' | 'left' | 'right';\n velocity: number; // px/ms\n}\n\nexport type GestureStep = TapStep | HoldStep | RadialDragStep | FlickStep;\n\nexport interface GestureSequence {\n steps: GestureStep[];\n totalDurationMs: number;\n rhythmHash: string; // SHA256 of timing intervals (anti-replay)\n timestamp: number; // When gesture started\n}\n\n// ============================================================================\n// Doorman State Machine Types\n// ============================================================================\n\nexport type DoormanState =\n | 'IDLE'\n | 'CHALLENGED'\n | 'VERIFYING'\n | 'ADMITTED'\n | 'DECOY'\n | 'COOLDOWN'\n | 'LOCKED';\n\nexport type DoormanEvent =\n | { type: 'KNOCK_DETECTED'; timestamp: number }\n | { type: 'GESTURE_COMPLETE'; gestureData: GestureSequence }\n | { type: 'VERIFICATION_SUCCESS'; capability: CapabilityToken }\n | { type: 'VERIFICATION_FAILURE'; reason: string }\n | { type: 'CHALLENGE_TIMEOUT' }\n | { type: 'COOLDOWN_ELAPSED' }\n | { type: 'LOCK_EXPIRED' }\n | { type: 'EXIT_REQUESTED' }\n | { type: 'ADMISSION_TIMEOUT' }\n | { type: 'PANIC_GESTURE'; decoyMode: boolean };\n\nexport interface DoormanConfig {\n challengeWindowMs: number; // Time to complete gesture after knock (default: 30s)\n admissionTtlMs: number; // Duration of speakeasy session (default: 5min)\n decoyTtlMs: number; // Duration of decoy mode session (default: 1min)\n maxConsecutiveFailures: number; // Before lockout (default: 3)\n cooldownBaseMs: number; // Exponential backoff base (default: 1s)\n lockDurationMs: number; // Lockout duration (default: 5min)\n panicGestureEnabled: boolean; // Enable decoy mode trigger\n panicAction: 'lock' | 'decoy';\n panicLockMultiplier: number; // Multiplier on lockDurationMs for panic\n}\n\nexport const DEFAULT_DOORMAN_CONFIG: DoormanConfig = {\n challengeWindowMs: 30_000,\n admissionTtlMs: 300_000,\n decoyTtlMs: 60_000,\n maxConsecutiveFailures: 3,\n cooldownBaseMs: 1_000,\n lockDurationMs: 300_000,\n panicGestureEnabled: true,\n panicAction: 'lock',\n panicLockMultiplier: 2,\n};\n\nexport interface DoormanContext {\n state: DoormanState;\n challenge: Challenge | null;\n consecutiveFailures: number;\n cooldownEndsAt: number | null;\n lockEndsAt: number | null;\n admissionEndsAt: number | null;\n capability: CapabilityToken | null;\n}\n\n// ============================================================================\n// Authentication Types\n// ============================================================================\n\nexport interface Challenge {\n nonce: string; // 32-byte hex random\n salt: string; // 16-byte hex random\n issuedAt: number; // timestamp\n expiresAt: number; // timestamp\n}\n\nexport interface Verifier {\n /** KDF output (MVP stores this verifier directly) */\n hash: string;\n /** Random salt used during registration (hex) */\n salt: string;\n /** Domain binding for anti-phishing */\n domain: string;\n /** When verifier was created */\n createdAt: number;\n /** Schema/version for forwards compatibility */\n version: 1;\n}\n\nexport interface CapabilityToken {\n /** Token ID for revocation */\n tokenId: string;\n /** Issuer public key hex */\n issuer: string;\n /** Scope patterns (e.g., \"speakeasy.*\", \"speakeasy.private_feeds\") */\n scopes: string[];\n /** Unix timestamp - token invalid before */\n notBefore: number;\n /** Unix timestamp - token invalid after */\n expiresAt: number;\n /** Optional constraints */\n constraints?: {\n maxUses?: number;\n allowedOrigins?: string[];\n };\n /** Ed25519 signature over payload */\n signature: string;\n}\n\n// ============================================================================\n// Gesture Recognizer Types\n// ============================================================================\n\nexport interface GestureRecognizerConfig {\n /** Tap: max duration to count as tap (default: 200ms) */\n tapMaxDurationMs: number;\n /** Tap: max movement to count as tap (default: 10px) */\n tapMaxMovementPx: number;\n /** Tap: max interval between multi-taps (default: 300ms) */\n tapIntervalMs: number;\n /** Hold: min duration to count as hold (default: 500ms) */\n holdMinDurationMs: number;\n /** Drag: min distance to register (default: 20px) */\n dragMinDistancePx: number;\n /** Flick: min velocity to register (default: 0.5 px/ms) */\n flickMinVelocity: number;\n /** Radial: notch angle size (default: 30 degrees) */\n radialNotchDegrees: number;\n}\n\nexport const DEFAULT_GESTURE_CONFIG: GestureRecognizerConfig = {\n tapMaxDurationMs: 200,\n tapMaxMovementPx: 10,\n tapIntervalMs: 300,\n holdMinDurationMs: 500,\n dragMinDistancePx: 20,\n flickMinVelocity: 0.5,\n radialNotchDegrees: 30,\n};\n\nexport interface Point {\n x: number;\n y: number;\n}\n\nexport interface GestureRecognizerState {\n isActive: boolean;\n startPoint: Point | null;\n currentPoint: Point | null;\n startTime: number | null;\n steps: GestureStep[];\n pendingTapCount: number;\n}\n\n// ============================================================================\n// Orb Component Types\n// ============================================================================\n\nexport type OrbState =\n | 'idle'\n | 'challenged'\n | 'verifying'\n | 'admitted'\n | 'decoy'\n | 'locked';\n\nexport interface OrbVisualConfig {\n /** Base orb size in pixels */\n size: number;\n /** Glow intensity (0-1) for each state */\n glowIntensity: Record<OrbState, number>;\n /** Pulse speed (ms) for each state */\n pulseSpeed: Record<OrbState, number>;\n /** Colors for each state */\n colors: Record<OrbState, string>;\n}\n\nexport const DEFAULT_ORB_CONFIG: OrbVisualConfig = {\n size: 64,\n glowIntensity: {\n idle: 0.2,\n challenged: 0.6,\n verifying: 0.8,\n admitted: 1.0,\n decoy: 0.35,\n locked: 0.1,\n },\n pulseSpeed: {\n idle: 4000,\n challenged: 1000,\n verifying: 500,\n admitted: 2000,\n decoy: 1200,\n locked: 0,\n },\n colors: {\n idle: 'var(--text-muted, #6b7280)',\n challenged: 'var(--accent, #d4a84b)',\n verifying: 'var(--accent, #d4a84b)',\n admitted: 'var(--success, #22c55e)',\n decoy: 'var(--accent, #d4a84b)',\n locked: 'var(--error, #ef4444)',\n },\n};\n\n// ============================================================================\n// Speakeasy Context Types\n// ============================================================================\n\n/**\n * Public context - safe for all components.\n * Contains only read-only state and non-sensitive actions.\n */\nexport interface SpeakeasyPublicContextValue {\n /** Current doorman state */\n state: DoormanState;\n /** Whether the provider is fully initialized (device secret resolved) */\n isReady: boolean;\n /** Whether user is in speakeasy mode */\n isAdmitted: boolean;\n /** Whether user is in panic/decoy mode */\n isDecoy: boolean;\n /** Initiate the knock sequence */\n knock: () => void;\n /** Exit speakeasy mode */\n exit: () => void;\n /** Time remaining in current state (ms) */\n timeRemaining: number | null;\n}\n\n/**\n * Private context - only for trusted components.\n * Contains sensitive capability data and registration methods.\n */\nexport interface SpeakeasyPrivateContextValue {\n /** Current capability token (if admitted) */\n capability: CapabilityToken | null;\n /** Whether gesture secret has been registered */\n isRegistered: boolean;\n /** Register a new gesture secret */\n register: (gesture: GestureSequence) => Promise<void>;\n /** Clear the registered gesture secret */\n clearRegistration: () => Promise<void>;\n /** Submit a gesture for verification (typical entry flow) */\n submitGesture: (gesture: GestureSequence) => Promise<void>;\n}\n\n/**\n * Combined context value (legacy - deprecated).\n * Use SpeakeasyPublicContextValue or SpeakeasyPrivateContextValue instead.\n */\nexport interface SpeakeasyContextValue\n extends SpeakeasyPublicContextValue,\n SpeakeasyPrivateContextValue {}\n","/**\n * useGestureRecognizer - Hook for capturing speakeasy gesture sequences\n *\n * Recognizes:\n * - Tap sequences (single, double, triple+)\n * - Hold gestures (with configurable threshold)\n * - Radial drags (angle calculation, notch detection)\n * - Flicks (direction + velocity)\n *\n * Outputs a GestureSequence with timing data for verification.\n */\n\nimport { useCallback, useRef, useState } from 'react';\nimport {\n DEFAULT_GESTURE_CONFIG,\n type GestureRecognizerConfig,\n type GestureRecognizerState,\n type GestureSequence,\n type GestureStep,\n type Point,\n} from '../types.js';\n\ninterface UseGestureRecognizerOptions {\n /** Configuration overrides */\n config?: Partial<GestureRecognizerConfig>;\n /** Center point of the orb (for radial calculations) */\n centerRef: React.RefObject<HTMLElement | null>;\n /** Called when a complete gesture sequence is detected */\n onGestureComplete?: (sequence: GestureSequence) => void;\n /** Called when gesture recognition starts */\n onGestureStart?: () => void;\n /** Called on each gesture step */\n onGestureStep?: (step: GestureStep) => void;\n}\n\ninterface UseGestureRecognizerReturn {\n /** Current recognizer state */\n state: GestureRecognizerState;\n /** Accumulated steps */\n steps: GestureStep[];\n /** Whether actively capturing */\n isCapturing: boolean;\n /** Bind these to your target element */\n handlers: {\n onPointerDown: (e: React.PointerEvent) => void;\n onPointerMove: (e: React.PointerEvent) => void;\n onPointerUp: (e: React.PointerEvent) => void;\n onPointerCancel: (e: React.PointerEvent) => void;\n };\n /** Start capturing a new gesture sequence */\n startCapture: () => void;\n /** End capture and get the sequence */\n endCapture: () => Promise<GestureSequence | null>;\n /** Reset without emitting */\n reset: () => void;\n}\n\n/**\n * Calculate distance between two points\n */\nfunction distance(a: Point, b: Point): number {\n return Math.sqrt((b.x - a.x) ** 2 + (b.y - a.y) ** 2);\n}\n\n/**\n * Calculate angle from center to point (degrees, 0 = right, CCW positive)\n */\nfunction angleFromCenter(center: Point, point: Point): number {\n const dx = point.x - center.x;\n const dy = center.y - point.y; // Flip Y for standard math coords\n const radians = Math.atan2(dy, dx);\n return ((radians * 180) / Math.PI + 360) % 360;\n}\n\n/**\n * Determine region (center vs edge) based on distance from center\n */\nfunction getRegion(center: Point, point: Point, threshold: number): 'center' | 'edge' {\n return distance(center, point) < threshold ? 'center' : 'edge';\n}\n\n/**\n * Calculate rhythm hash from timing intervals (anti-replay)\n */\nasync function calculateRhythmHash(timings: number[]): Promise<string> {\n const data = new TextEncoder().encode(timings.join(','));\n const subtle = globalThis.crypto?.subtle;\n if (!subtle) {\n throw new Error('[Speakeasy] crypto.subtle is required');\n }\n const hashBuffer = await subtle.digest('SHA-256', data as unknown as BufferSource);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');\n}\n\nexport function useGestureRecognizer(\n options: UseGestureRecognizerOptions\n): UseGestureRecognizerReturn {\n const config = { ...DEFAULT_GESTURE_CONFIG, ...options.config };\n const { centerRef, onGestureComplete, onGestureStart, onGestureStep } = options;\n\n // State\n const [state, setState] = useState<GestureRecognizerState>({\n isActive: false,\n startPoint: null,\n currentPoint: null,\n startTime: null,\n steps: [],\n pendingTapCount: 0,\n });\n\n // Refs for tracking across events\n const stepsRef = useRef<GestureStep[]>([]);\n const timingsRef = useRef<number[]>([]);\n const captureStartRef = useRef<number | null>(null);\n const pointerStartRef = useRef<{ point: Point; time: number } | null>(null);\n const lastTapTimeRef = useRef<number>(0);\n const tapCountRef = useRef<number>(0);\n const tapTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const isDraggingRef = useRef(false);\n const dragStartAngleRef = useRef<number | null>(null);\n const notchesHitRef = useRef<Set<number>>(new Set());\n\n /**\n * Get center point of the orb\n */\n const getCenter = useCallback((): Point => {\n if (!centerRef.current) {\n return { x: 0, y: 0 };\n }\n const rect = centerRef.current.getBoundingClientRect();\n return {\n x: rect.left + rect.width / 2,\n y: rect.top + rect.height / 2,\n };\n }, [centerRef]);\n\n /**\n * Add a step to the sequence\n */\n const addStep = useCallback(\n (step: GestureStep) => {\n stepsRef.current.push(step);\n timingsRef.current.push(Date.now() - (captureStartRef.current || Date.now()));\n setState((s) => ({ ...s, steps: [...stepsRef.current] }));\n onGestureStep?.(step);\n },\n [onGestureStep]\n );\n\n /**\n * Start capturing a new gesture sequence\n */\n const startCapture = useCallback(() => {\n stepsRef.current = [];\n timingsRef.current = [];\n captureStartRef.current = Date.now();\n tapCountRef.current = 0;\n setState({\n isActive: true,\n startPoint: null,\n currentPoint: null,\n startTime: Date.now(),\n steps: [],\n pendingTapCount: 0,\n });\n onGestureStart?.();\n }, [onGestureStart]);\n\n /**\n * End capture and return the sequence\n */\n const endCapture = useCallback(async (): Promise<GestureSequence | null> => {\n const captureStart = captureStartRef.current;\n if (!captureStart) return null;\n\n // Flush any pending taps\n if (tapCountRef.current > 0 && tapTimeoutRef.current) {\n clearTimeout(tapTimeoutRef.current);\n tapTimeoutRef.current = null;\n const center = getCenter();\n const lastPoint = pointerStartRef.current?.point || center;\n const region = getRegion(center, lastPoint, (centerRef.current?.clientWidth || 64) / 3);\n addStep({ type: 'tap', count: tapCountRef.current, region });\n tapCountRef.current = 0;\n }\n\n const totalDurationMs = Date.now() - captureStart;\n const rhythmHash = await calculateRhythmHash(timingsRef.current);\n\n const sequence: GestureSequence = {\n steps: [...stepsRef.current],\n totalDurationMs,\n rhythmHash,\n timestamp: captureStart,\n };\n\n onGestureComplete?.(sequence);\n captureStartRef.current = null;\n pointerStartRef.current = null;\n isDraggingRef.current = false;\n dragStartAngleRef.current = null;\n notchesHitRef.current.clear();\n setState((s) => ({\n ...s,\n isActive: false,\n startPoint: null,\n currentPoint: null,\n startTime: null,\n pendingTapCount: 0,\n }));\n return sequence;\n }, [getCenter, centerRef, addStep, onGestureComplete]);\n\n /**\n * Reset without emitting\n */\n const reset = useCallback(() => {\n if (tapTimeoutRef.current) clearTimeout(tapTimeoutRef.current);\n stepsRef.current = [];\n timingsRef.current = [];\n captureStartRef.current = null;\n pointerStartRef.current = null;\n tapCountRef.current = 0;\n isDraggingRef.current = false;\n dragStartAngleRef.current = null;\n notchesHitRef.current.clear();\n setState({\n isActive: false,\n startPoint: null,\n currentPoint: null,\n startTime: null,\n steps: [],\n pendingTapCount: 0,\n });\n }, []);\n\n /**\n * Handle pointer down\n */\n const onPointerDown = useCallback(\n (e: React.PointerEvent) => {\n if (!state.isActive) return;\n\n try {\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n } catch {\n // Ignore if pointer capture isn't supported\n }\n\n const point = { x: e.clientX, y: e.clientY };\n const now = Date.now();\n\n pointerStartRef.current = { point, time: now };\n isDraggingRef.current = false;\n notchesHitRef.current.clear();\n\n const center = getCenter();\n dragStartAngleRef.current = angleFromCenter(center, point);\n const notch = Math.floor(dragStartAngleRef.current / config.radialNotchDegrees);\n notchesHitRef.current.add(notch);\n\n setState((s) => ({ ...s, startPoint: point, currentPoint: point }));\n },\n [state.isActive, config.radialNotchDegrees, getCenter]\n );\n\n /**\n * Handle pointer move\n */\n const onPointerMove = useCallback(\n (e: React.PointerEvent) => {\n if (!state.isActive || !pointerStartRef.current) return;\n\n const point = { x: e.clientX, y: e.clientY };\n const center = getCenter();\n const dist = distance(pointerStartRef.current.point, point);\n\n // Check if this is now a drag\n if (!isDraggingRef.current && dist > config.dragMinDistancePx) {\n isDraggingRef.current = true;\n }\n\n // Track radial notches during drag\n if (isDraggingRef.current && dragStartAngleRef.current !== null) {\n const currentAngle = angleFromCenter(center, point);\n const notch = Math.floor(currentAngle / config.radialNotchDegrees);\n notchesHitRef.current.add(notch);\n }\n\n setState((s) => ({ ...s, currentPoint: point }));\n },\n [state.isActive, config, getCenter]\n );\n\n /**\n * Handle pointer up\n */\n const onPointerUp = useCallback(\n (e: React.PointerEvent) => {\n if (!state.isActive || !pointerStartRef.current) return;\n\n try {\n (e.currentTarget as HTMLElement).releasePointerCapture(e.pointerId);\n } catch {\n // Ignore if pointer capture wasn't active\n }\n\n const point = { x: e.clientX, y: e.clientY };\n const now = Date.now();\n const duration = now - pointerStartRef.current.time;\n const dist = distance(pointerStartRef.current.point, point);\n const center = getCenter();\n\n if (isDraggingRef.current) {\n // Was a drag - check for radial or flick\n const velocity = dist / duration;\n\n if (velocity > config.flickMinVelocity && duration < config.tapMaxDurationMs * 2) {\n // Flick\n const dx = point.x - pointerStartRef.current.point.x;\n const dy = point.y - pointerStartRef.current.point.y;\n let direction: 'up' | 'down' | 'left' | 'right';\n if (Math.abs(dx) > Math.abs(dy)) {\n direction = dx > 0 ? 'right' : 'left';\n } else {\n direction = dy > 0 ? 'down' : 'up';\n }\n addStep({ type: 'flick', direction, velocity });\n } else if (notchesHitRef.current.size > 1) {\n // Radial drag\n const fromAngle = dragStartAngleRef.current || 0;\n const toAngle = angleFromCenter(center, point);\n addStep({\n type: 'radial_drag',\n fromAngle,\n toAngle,\n notches: notchesHitRef.current.size,\n });\n }\n } else if (duration >= config.holdMinDurationMs && dist < config.tapMaxMovementPx) {\n // Hold\n const region = getRegion(center, point, (centerRef.current?.clientWidth || 64) / 3);\n addStep({\n type: 'hold',\n durationMs: duration,\n region,\n });\n } else if (duration < config.tapMaxDurationMs && dist < config.tapMaxMovementPx) {\n // Tap\n if (tapTimeoutRef.current) {\n clearTimeout(tapTimeoutRef.current);\n }\n\n const timeSinceLastTap = now - lastTapTimeRef.current;\n if (timeSinceLastTap < config.tapIntervalMs) {\n tapCountRef.current++;\n } else {\n // Emit previous tap sequence if any\n if (tapCountRef.current > 0) {\n const region = getRegion(center, point, (centerRef.current?.clientWidth || 64) / 3);\n addStep({ type: 'tap', count: tapCountRef.current, region });\n }\n tapCountRef.current = 1;\n }\n lastTapTimeRef.current = now;\n\n // Wait for potential multi-tap\n tapTimeoutRef.current = setTimeout(() => {\n if (tapCountRef.current > 0) {\n const region = getRegion(center, point, (centerRef.current?.clientWidth || 64) / 3);\n addStep({ type: 'tap', count: tapCountRef.current, region });\n tapCountRef.current = 0;\n }\n }, config.tapIntervalMs);\n\n setState((s) => ({ ...s, pendingTapCount: tapCountRef.current }));\n }\n\n // Reset pointer tracking\n pointerStartRef.current = null;\n isDraggingRef.current = false;\n dragStartAngleRef.current = null;\n notchesHitRef.current.clear();\n setState((s) => ({ ...s, startPoint: null, currentPoint: null }));\n },\n [state.isActive, config, getCenter, centerRef, addStep]\n );\n\n /**\n * Handle pointer cancel\n */\n const onPointerCancel = useCallback((e: React.PointerEvent) => {\n try {\n (e.currentTarget as HTMLElement).releasePointerCapture(e.pointerId);\n } catch {\n // Ignore if pointer capture wasn't active\n }\n pointerStartRef.current = null;\n isDraggingRef.current = false;\n setState((s) => ({ ...s, startPoint: null, currentPoint: null }));\n }, []);\n\n return {\n state,\n steps: state.steps,\n isCapturing: state.isActive,\n handlers: {\n onPointerDown,\n onPointerMove,\n onPointerUp,\n onPointerCancel,\n },\n startCapture,\n endCapture,\n reset,\n };\n}\n\nexport default useGestureRecognizer;\n","/**\n * DoormanStateMachine - State machine for speakeasy doorman interaction\n *\n * States: IDLE → CHALLENGED → VERIFYING → ADMITTED → COOLDOWN/LOCKED\n *\n * Mirrors the HSM pattern from kernel/src/cyntra/core/topology/hsm_engine.py\n * but implemented as a Zustand store for React integration.\n */\n\nimport { create, createStore } from 'zustand';\nimport { subscribeWithSelector } from 'zustand/middleware';\nimport {\n DEFAULT_DOORMAN_CONFIG,\n type DoormanState,\n type DoormanEvent,\n type DoormanConfig,\n type DoormanContext,\n type CapabilityToken,\n} from '../types.js';\n\n// ============================================================================\n// Transition Definitions\n// ============================================================================\n\ninterface Transition {\n from: DoormanState;\n to: DoormanState;\n event: DoormanEvent['type'];\n guard?: (context: DoormanContext, event: DoormanEvent) => boolean;\n action?: (context: DoormanContext, event: DoormanEvent) => Partial<DoormanContext>;\n}\n\nconst createTransitions = (config: DoormanConfig): Transition[] => [\n // IDLE → CHALLENGED: Public knock detected\n {\n from: 'IDLE',\n to: 'CHALLENGED',\n event: 'KNOCK_DETECTED',\n action: (ctx, event) => {\n const timestamp = (event as { timestamp: number }).timestamp || Date.now();\n return {\n challenge: {\n nonce: generateNonce(),\n salt: generateSalt(),\n issuedAt: timestamp,\n expiresAt: timestamp + config.challengeWindowMs,\n },\n };\n },\n },\n\n // CHALLENGED → VERIFYING: Gesture complete\n {\n from: 'CHALLENGED',\n to: 'VERIFYING',\n event: 'GESTURE_COMPLETE',\n guard: (ctx) => {\n // Check challenge not expired\n if (!ctx.challenge) return false;\n return Date.now() < ctx.challenge.expiresAt;\n },\n },\n\n // CHALLENGED → IDLE: Challenge timeout\n {\n from: 'CHALLENGED',\n to: 'IDLE',\n event: 'CHALLENGE_TIMEOUT',\n action: () => ({ challenge: null }),\n },\n\n // CHALLENGED → IDLE: User cancels\n {\n from: 'CHALLENGED',\n to: 'IDLE',\n event: 'EXIT_REQUESTED',\n action: () => ({ challenge: null }),\n },\n\n // VERIFYING → IDLE: User cancels\n {\n from: 'VERIFYING',\n to: 'IDLE',\n event: 'EXIT_REQUESTED',\n action: () => ({ challenge: null }),\n },\n\n // VERIFYING → ADMITTED: Verification success\n {\n from: 'VERIFYING',\n to: 'ADMITTED',\n event: 'VERIFICATION_SUCCESS',\n action: (ctx, event) => {\n const e = event as { type: 'VERIFICATION_SUCCESS'; capability: CapabilityToken };\n return {\n capability: e.capability,\n challenge: null,\n consecutiveFailures: 0,\n admissionEndsAt: Date.now() + config.admissionTtlMs,\n };\n },\n },\n\n // VERIFYING → COOLDOWN: Verification failure (under threshold)\n {\n from: 'VERIFYING',\n to: 'COOLDOWN',\n event: 'VERIFICATION_FAILURE',\n guard: (ctx) => ctx.consecutiveFailures + 1 < config.maxConsecutiveFailures,\n action: (ctx) => {\n const failures = ctx.consecutiveFailures + 1;\n const cooldownMs = config.cooldownBaseMs * Math.pow(2, failures - 1);\n return {\n consecutiveFailures: failures,\n cooldownEndsAt: Date.now() + cooldownMs,\n challenge: null,\n };\n },\n },\n\n // VERIFYING → LOCKED: Verification failure (at threshold)\n {\n from: 'VERIFYING',\n to: 'LOCKED',\n event: 'VERIFICATION_FAILURE',\n guard: (ctx) => ctx.consecutiveFailures + 1 >= config.maxConsecutiveFailures,\n action: () => ({\n consecutiveFailures: config.maxConsecutiveFailures,\n lockEndsAt: Date.now() + config.lockDurationMs,\n challenge: null,\n }),\n },\n\n // COOLDOWN → IDLE: Cooldown elapsed\n {\n from: 'COOLDOWN',\n to: 'IDLE',\n event: 'COOLDOWN_ELAPSED',\n action: () => ({ cooldownEndsAt: null }),\n },\n\n // LOCKED → IDLE: Lock expired\n {\n from: 'LOCKED',\n to: 'IDLE',\n event: 'LOCK_EXPIRED',\n action: () => ({\n lockEndsAt: null,\n consecutiveFailures: 0,\n }),\n },\n\n // ADMITTED → IDLE: Exit requested\n {\n from: 'ADMITTED',\n to: 'IDLE',\n event: 'EXIT_REQUESTED',\n action: () => ({\n capability: null,\n admissionEndsAt: null,\n }),\n },\n\n // ADMITTED → IDLE: Admission timeout\n {\n from: 'ADMITTED',\n to: 'IDLE',\n event: 'ADMISSION_TIMEOUT',\n action: () => ({\n capability: null,\n admissionEndsAt: null,\n }),\n },\n\n // DECOY → IDLE: Exit requested\n {\n from: 'DECOY',\n to: 'IDLE',\n event: 'EXIT_REQUESTED',\n action: () => ({\n capability: null,\n admissionEndsAt: null,\n }),\n },\n\n // DECOY → IDLE: Timeout\n {\n from: 'DECOY',\n to: 'IDLE',\n event: 'ADMISSION_TIMEOUT',\n action: () => ({\n capability: null,\n admissionEndsAt: null,\n }),\n },\n\n // Panic gesture handling (if enabled)\n // Note: PANIC_GESTURE can be dispatched from both CHALLENGED and VERIFYING states\n ...(config.panicGestureEnabled\n ? ([\n // From CHALLENGED state\n {\n from: 'CHALLENGED' as DoormanState,\n to: 'DECOY' as DoormanState,\n event: 'PANIC_GESTURE' as const,\n guard: (_ctx, event) => {\n const e = event as { type: 'PANIC_GESTURE'; decoyMode: boolean };\n return e.decoyMode === true;\n },\n action: () => ({\n admissionEndsAt: Date.now() + config.decoyTtlMs,\n challenge: null,\n capability: null,\n }),\n },\n {\n from: 'CHALLENGED' as DoormanState,\n to: 'LOCKED' as DoormanState,\n event: 'PANIC_GESTURE' as const,\n guard: (_ctx, event) => {\n const e = event as { type: 'PANIC_GESTURE'; decoyMode: boolean };\n return e.decoyMode === false;\n },\n action: () => ({\n lockEndsAt: Date.now() + config.lockDurationMs * config.panicLockMultiplier,\n challenge: null,\n capability: null,\n }),\n },\n // From VERIFYING state (panic detected after claiming verification lock)\n {\n from: 'VERIFYING' as DoormanState,\n to: 'DECOY' as DoormanState,\n event: 'PANIC_GESTURE' as const,\n guard: (_ctx, event) => {\n const e = event as { type: 'PANIC_GESTURE'; decoyMode: boolean };\n return e.decoyMode === true;\n },\n action: () => ({\n admissionEndsAt: Date.now() + config.decoyTtlMs,\n challenge: null,\n capability: null,\n }),\n },\n {\n from: 'VERIFYING' as DoormanState,\n to: 'LOCKED' as DoormanState,\n event: 'PANIC_GESTURE' as const,\n guard: (_ctx, event) => {\n const e = event as { type: 'PANIC_GESTURE'; decoyMode: boolean };\n return e.decoyMode === false;\n },\n action: () => ({\n lockEndsAt: Date.now() + config.lockDurationMs * config.panicLockMultiplier,\n challenge: null,\n capability: null,\n }),\n },\n ] as Transition[])\n : []),\n];\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\nfunction randomHex(byteLength: number): string {\n if (\n typeof globalThis.crypto === 'undefined' ||\n typeof globalThis.crypto.getRandomValues !== 'function'\n ) {\n throw new Error('[Doorman] crypto.getRandomValues is required');\n }\n\n const bytes = new Uint8Array(byteLength);\n globalThis.crypto.getRandomValues(bytes);\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\nfunction generateNonce(): string {\n return randomHex(32);\n}\n\nfunction generateSalt(): string {\n return randomHex(16);\n}\n\n// ============================================================================\n// Store Definition\n// ============================================================================\n\ninterface DoormanStore extends DoormanContext {\n config: DoormanConfig;\n transitions: Transition[];\n\n // Actions\n dispatch: (event: DoormanEvent) => void;\n reset: () => void;\n setConfig: (config: Partial<DoormanConfig>) => void;\n\n // Computed\n isAdmitted: () => boolean;\n timeRemaining: () => number | null;\n}\n\nconst INITIAL_CONTEXT: DoormanContext = {\n state: 'IDLE',\n challenge: null,\n consecutiveFailures: 0,\n cooldownEndsAt: null,\n lockEndsAt: null,\n admissionEndsAt: null,\n capability: null,\n};\n\nfunction createDoormanStoreImpl(set: any, get: any): DoormanStore {\n return {\n ...INITIAL_CONTEXT,\n config: DEFAULT_DOORMAN_CONFIG,\n transitions: createTransitions(DEFAULT_DOORMAN_CONFIG),\n\n dispatch: (event: DoormanEvent) => {\n const { state, transitions, ...context } = get();\n const currentContext: DoormanContext = { state, ...context };\n\n const transition = transitions.find((t: Transition) => {\n if (t.from !== state) return false;\n if (t.event !== event.type) return false;\n if (t.guard && !t.guard(currentContext, event)) return false;\n return true;\n });\n\n if (!transition) {\n console.warn(\n `[Doorman] No valid transition from ${state} on event ${event.type}`\n );\n return;\n }\n\n const updates = transition.action?.(currentContext, event) || {};\n set({\n state: transition.to,\n ...updates,\n });\n },\n\n reset: () => {\n set(INITIAL_CONTEXT);\n },\n\n setConfig: (partialConfig: Partial<DoormanConfig>) => {\n const newConfig = { ...get().config, ...partialConfig };\n set({\n config: newConfig,\n transitions: createTransitions(newConfig),\n });\n },\n\n isAdmitted: () => get().state === 'ADMITTED',\n\n timeRemaining: () => {\n const { state, challenge, cooldownEndsAt, lockEndsAt, admissionEndsAt } =\n get();\n const now = Date.now();\n\n switch (state) {\n case 'CHALLENGED':\n return challenge ? Math.max(0, challenge.expiresAt - now) : null;\n case 'COOLDOWN':\n return cooldownEndsAt ? Math.max(0, cooldownEndsAt - now) : null;\n case 'LOCKED':\n return lockEndsAt ? Math.max(0, lockEndsAt - now) : null;\n case 'ADMITTED':\n case 'DECOY':\n return admissionEndsAt ? Math.max(0, admissionEndsAt - now) : null;\n default:\n return null;\n }\n },\n };\n}\n\n/** Factory: creates an isolated Doorman store instance with subscribeWithSelector middleware. */\nexport function createDoormanStore() {\n return createStore<DoormanStore>()(\n subscribeWithSelector((set, get) => createDoormanStoreImpl(set, get))\n );\n}\n\nexport type DoormanStoreApi = ReturnType<typeof createDoormanStore>;\n\n// Legacy singleton\nexport const useDoormanStore = create<DoormanStore>()(\n subscribeWithSelector((set, get) => createDoormanStoreImpl(set, get))\n);\n\n// ============================================================================\n// Timeout Management\n// ============================================================================\n\n/**\n * Start automatic timeout handling based on state changes.\n * Accepts an optional store instance; defaults to the legacy singleton.\n */\nexport function startDoormanTimeouts(storeApi?: DoormanStoreApi): () => void {\n const api = storeApi ?? useDoormanStore;\n\n let challengeTimeoutId: ReturnType<typeof setTimeout> | null = null;\n let cooldownTimeoutId: ReturnType<typeof setTimeout> | null = null;\n let lockTimeoutId: ReturnType<typeof setTimeout> | null = null;\n let admissionTimeoutId: ReturnType<typeof setTimeout> | null = null;\n\n const unsubscribe = api.subscribe(\n (state) => state.state,\n (doormanState, _prevState) => {\n const store = api.getState();\n\n // Clear all timeouts on state change\n if (challengeTimeoutId) clearTimeout(challengeTimeoutId);\n if (cooldownTimeoutId) clearTimeout(cooldownTimeoutId);\n if (lockTimeoutId) clearTimeout(lockTimeoutId);\n if (admissionTimeoutId) clearTimeout(admissionTimeoutId);\n\n // Set new timeout based on current state\n switch (doormanState) {\n case 'CHALLENGED':\n if (store.challenge) {\n const remaining = store.challenge.expiresAt - Date.now();\n if (remaining > 0) {\n challengeTimeoutId = setTimeout(() => {\n store.dispatch({ type: 'CHALLENGE_TIMEOUT' });\n }, remaining);\n }\n }\n break;\n\n case 'COOLDOWN':\n if (store.cooldownEndsAt) {\n const remaining = store.cooldownEndsAt - Date.now();\n if (remaining > 0) {\n cooldownTimeoutId = setTimeout(() => {\n store.dispatch({ type: 'COOLDOWN_ELAPSED' });\n }, remaining);\n }\n }\n break;\n\n case 'LOCKED':\n if (store.lockEndsAt) {\n const remaining = store.lockEndsAt - Date.now();\n if (remaining > 0) {\n lockTimeoutId = setTimeout(() => {\n store.dispatch({ type: 'LOCK_EXPIRED' });\n }, remaining);\n }\n }\n break;\n\n case 'ADMITTED':\n case 'DECOY':\n if (store.admissionEndsAt) {\n const remaining = store.admissionEndsAt - Date.now();\n if (remaining > 0) {\n admissionTimeoutId = setTimeout(() => {\n store.dispatch({ type: 'ADMISSION_TIMEOUT' });\n }, remaining);\n }\n }\n break;\n }\n }\n );\n\n return () => {\n unsubscribe();\n if (challengeTimeoutId) clearTimeout(challengeTimeoutId);\n if (cooldownTimeoutId) clearTimeout(cooldownTimeoutId);\n if (lockTimeoutId) clearTimeout(lockTimeoutId);\n if (admissionTimeoutId) clearTimeout(admissionTimeoutId);\n };\n}\n\nexport default useDoormanStore;\n","/**\n * Speakeasy crypto helpers (browser-first WebCrypto)\n */\n\nexport function utf8ToBytes(value: string): Uint8Array {\n return new TextEncoder().encode(value);\n}\n\nexport function bytesToHex(bytes: Uint8Array): string {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\nexport function hexToBytes(hex: string): Uint8Array {\n const normalized = hex.startsWith('0x') ? hex.slice(2) : hex;\n if (normalized.length % 2 !== 0 || !/^[0-9a-fA-F]*$/.test(normalized)) {\n throw new Error('[Speakeasy] Invalid hex');\n }\n const out = new Uint8Array(normalized.length / 2);\n for (let i = 0; i < out.length; i += 1) {\n out[i] = Number.parseInt(normalized.slice(i * 2, i * 2 + 2), 16);\n }\n return out;\n}\n\nexport function concatBytes(...parts: Uint8Array[]): Uint8Array {\n const totalLength = parts.reduce((sum, part) => sum + part.length, 0);\n const out = new Uint8Array(totalLength);\n let offset = 0;\n for (const part of parts) {\n out.set(part, offset);\n offset += part.length;\n }\n return out;\n}\n\nexport function randomHex(byteLength: number): string {\n if (\n typeof globalThis.crypto === 'undefined' ||\n typeof globalThis.crypto.getRandomValues !== 'function'\n ) {\n throw new Error('[Speakeasy] crypto.getRandomValues is required');\n }\n const bytes = new Uint8Array(byteLength);\n globalThis.crypto.getRandomValues(bytes);\n return bytesToHex(bytes);\n}\n\nexport function timingSafeEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false;\n let diff = 0;\n for (let i = 0; i < a.length; i += 1) {\n diff |= a[i] ^ b[i];\n }\n return diff === 0;\n}\n\nasync function requireSubtle(): Promise<SubtleCrypto> {\n const subtle = globalThis.crypto?.subtle;\n if (!subtle) {\n throw new Error('[Speakeasy] crypto.subtle is required');\n }\n return subtle;\n}\n\nexport async function sha256(data: Uint8Array): Promise<Uint8Array> {\n const subtle = await requireSubtle();\n const hash = await subtle.digest('SHA-256', data as unknown as BufferSource);\n return new Uint8Array(hash);\n}\n\nexport async function hmacSha256(\n keyBytes: Uint8Array,\n messageBytes: Uint8Array\n): Promise<Uint8Array> {\n const subtle = await requireSubtle();\n const key = await subtle.importKey(\n 'raw',\n keyBytes as unknown as BufferSource,\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign']\n );\n const sig = await subtle.sign('HMAC', key, messageBytes as unknown as BufferSource);\n return new Uint8Array(sig);\n}\n\n","/**\n * Speakeasy storage abstractions.\n *\n * bb-ui is browser-first; hosts can inject stronger storage (keychain, enclave, etc).\n */\n\nimport type { Verifier } from '../types.js';\nimport { bytesToHex, concatBytes, hexToBytes, utf8ToBytes } from './crypto.js';\n\nexport interface SpeakeasyStorage {\n getVerifier: () => Promise<Verifier | null>;\n setVerifier: (verifier: Verifier) => Promise<void>;\n clearVerifier: () => Promise<void>;\n}\n\nexport function createInMemorySpeakeasyStorage(): SpeakeasyStorage {\n let verifier: Verifier | null = null;\n return {\n async getVerifier() {\n return verifier;\n },\n async setVerifier(next) {\n verifier = next;\n },\n async clearVerifier() {\n verifier = null;\n },\n };\n}\n\nexport function createLocalStorageSpeakeasyStorage(options?: {\n key?: string;\n}): SpeakeasyStorage {\n const storageKey = options?.key ?? 'bb-ui:speakeasy:verifier:v1';\n\n return {\n async getVerifier() {\n try {\n if (typeof globalThis.localStorage === 'undefined') return null;\n const raw = globalThis.localStorage.getItem(storageKey);\n if (!raw) return null;\n return JSON.parse(raw) as Verifier;\n } catch {\n return null;\n }\n },\n async setVerifier(verifier) {\n if (typeof globalThis.localStorage === 'undefined') {\n throw new Error('[Speakeasy] localStorage is not available');\n }\n globalThis.localStorage.setItem(storageKey, JSON.stringify(verifier));\n },\n async clearVerifier() {\n try {\n if (typeof globalThis.localStorage === 'undefined') return;\n globalThis.localStorage.removeItem(storageKey);\n } catch {\n // ignore\n }\n },\n };\n}\n\nexport function createIndexedDbSpeakeasyStorage(options?: {\n dbName?: string;\n storeName?: string;\n key?: string;\n}): SpeakeasyStorage {\n const dbName = options?.dbName ?? 'bb-ui-speakeasy';\n const storeName = options?.storeName ?? 'speakeasy';\n const recordKey = options?.key ?? 'verifier';\n\n async function openDb(): Promise<IDBDatabase> {\n if (typeof globalThis.indexedDB === 'undefined') {\n throw new Error('[Speakeasy] indexedDB is not available');\n }\n\n return new Promise((resolve, reject) => {\n const request = globalThis.indexedDB.open(dbName, 1);\n request.onerror = () => reject(request.error);\n request.onsuccess = () => resolve(request.result);\n request.onupgradeneeded = () => {\n const db = request.result;\n if (!db.objectStoreNames.contains(storeName)) {\n db.createObjectStore(storeName);\n }\n };\n });\n }\n\n return {\n async getVerifier() {\n try {\n const db = await openDb();\n return await new Promise((resolve, reject) => {\n const tx = db.transaction(storeName, 'readonly');\n const store = tx.objectStore(storeName);\n const req = store.get(recordKey);\n req.onerror = () => reject(req.error);\n req.onsuccess = () => resolve((req.result ?? null) as Verifier | null);\n });\n } catch {\n return null;\n }\n },\n async setVerifier(verifier) {\n const db = await openDb();\n await new Promise<void>((resolve, reject) => {\n const tx = db.transaction(storeName, 'readwrite');\n const store = tx.objectStore(storeName);\n const req = store.put(verifier, recordKey);\n req.onerror = () => reject(req.error);\n req.onsuccess = () => resolve();\n });\n },\n async clearVerifier() {\n try {\n const db = await openDb();\n await new Promise<void>((resolve, reject) => {\n const tx = db.transaction(storeName, 'readwrite');\n const store = tx.objectStore(storeName);\n const req = store.delete(recordKey);\n req.onerror = () => reject(req.error);\n req.onsuccess = () => resolve();\n });\n } catch {\n // ignore\n }\n },\n };\n}\n\nexport function createDefaultSpeakeasyStorage(options: {\n deviceSecret: Uint8Array;\n}): SpeakeasyStorage {\n // deviceSecret is required for secure storage\n if (!options?.deviceSecret?.length) {\n throw new Error('[Speakeasy] deviceSecret is required for secure storage');\n }\n\n // Use encrypted storage with the provided deviceSecret\n if (typeof globalThis.indexedDB !== 'undefined') {\n return createEncryptedIndexedDbSpeakeasyStorage({ deviceSecret: options.deviceSecret });\n }\n if (typeof globalThis.localStorage !== 'undefined') {\n return createEncryptedLocalStorageSpeakeasyStorage({ deviceSecret: options.deviceSecret });\n }\n\n // No persistent storage available - throw error (in-memory is not secure)\n throw new Error('[Speakeasy] No secure persistent storage available (requires IndexedDB or localStorage)');\n}\n\n// =============================================================================\n// Encrypted Storage (AES-256-GCM)\n// =============================================================================\n\ninterface EncryptedPayload {\n /** Version for forward compatibility (1 = fixed salt, 2 = random salt) */\n v: 1 | 2;\n /** IV (12 bytes, hex) */\n iv: string;\n /** Ciphertext (hex) */\n ct: string;\n /** Random salt for PBKDF2 (16 bytes, hex) - only present in v2 */\n salt?: string;\n}\n\nasync function deriveEncryptionKey(\n deviceSecret: Uint8Array,\n salt: Uint8Array\n): Promise<CryptoKey> {\n const subtle = globalThis.crypto?.subtle;\n if (!subtle) {\n throw new Error('[Speakeasy] crypto.subtle is required for encrypted storage');\n }\n\n // Import device secret as key material\n // Cast to BufferSource to satisfy TypeScript with bun-types\n const keyMaterial = await subtle.importKey('raw', deviceSecret as unknown as BufferSource, 'PBKDF2', false, [\n 'deriveKey',\n ]);\n\n // Derive AES-256-GCM key using PBKDF2\n return subtle.deriveKey(\n {\n name: 'PBKDF2',\n salt: salt as unknown as BufferSource,\n iterations: 600_000,\n hash: 'SHA-256',\n },\n keyMaterial,\n { name: 'AES-GCM', length: 256 },\n false,\n ['encrypt', 'decrypt']\n );\n}\n\nasync function encryptVerifier(\n verifier: Verifier,\n deviceSecret: Uint8Array\n): Promise<EncryptedPayload> {\n const subtle = globalThis.crypto?.subtle;\n if (!subtle) {\n throw new Error('[Speakeasy] crypto.subtle is required for encrypted storage');\n }\n\n // Generate random IV (12 bytes for AES-GCM)\n const iv = new Uint8Array(12);\n globalThis.crypto.getRandomValues(iv);\n\n // Generate random salt (16 bytes) for PBKDF2 - v2 uses per-encryption salt\n const salt = new Uint8Array(16);\n globalThis.crypto.getRandomValues(salt);\n\n const key = await deriveEncryptionKey(deviceSecret, salt);\n\n const plaintext = utf8ToBytes(JSON.stringify(verifier));\n const ciphertext = await subtle.encrypt({ name: 'AES-GCM', iv: iv as unknown as BufferSource }, key, plaintext as unknown as BufferSource);\n\n return {\n v: 2,\n iv: bytesToHex(iv),\n ct: bytesToHex(new Uint8Array(ciphertext)),\n salt: bytesToHex(salt),\n };\n}\n\nasync function decryptVerifier(\n payload: EncryptedPayload,\n deviceSecret: Uint8Array\n): Promise<Verifier> {\n const subtle = globalThis.crypto?.subtle;\n if (!subtle) {\n throw new Error('[Speakeasy] crypto.subtle is required for encrypted storage');\n }\n\n if (payload.v !== 1 && payload.v !== 2) {\n throw new Error(`[Speakeasy] Unsupported encrypted payload version: ${payload.v}`);\n }\n\n const iv = hexToBytes(payload.iv);\n const ciphertext = hexToBytes(payload.ct);\n\n // v1: legacy fixed salt, v2: random salt stored in payload\n let salt: Uint8Array;\n if (payload.v === 2 && payload.salt) {\n salt = hexToBytes(payload.salt);\n } else {\n // Legacy v1 fallback: use fixed salt\n console.warn(\n 'Speakeasy: v1 encrypted payload detected. Call migrateV1ToV2() to upgrade to random-salt encryption.'\n );\n salt = utf8ToBytes('bb-ui:speakeasy:encrypted-storage:v1');\n }\n\n const key = await deriveEncryptionKey(deviceSecret, salt);\n\n const plaintext = await subtle.decrypt({ name: 'AES-GCM', iv: iv as unknown as BufferSource }, key, ciphertext as unknown as BufferSource);\n const json = new TextDecoder().decode(plaintext);\n\n return JSON.parse(json) as Verifier;\n}\n\n/**\n * Create encrypted localStorage storage.\n *\n * The verifier is encrypted with AES-256-GCM using a key derived from the\n * device secret via PBKDF2 (600,000 iterations).\n *\n * @param options.deviceSecret - The device secret to derive the encryption key from\n * @param options.key - localStorage key for the encrypted payload\n */\nexport function createEncryptedLocalStorageSpeakeasyStorage(options: {\n deviceSecret: Uint8Array;\n key?: string;\n}): SpeakeasyStorage {\n const storageKey = options.key ?? 'bb-ui:speakeasy:verifier:encrypted:v1';\n const { deviceSecret } = options;\n\n return {\n async getVerifier() {\n try {\n if (typeof globalThis.localStorage === 'undefined') return null;\n const raw = globalThis.localStorage.getItem(storageKey);\n if (!raw) return null;\n\n const payload = JSON.parse(raw) as EncryptedPayload;\n return await decryptVerifier(payload, deviceSecret);\n } catch (err) {\n console.warn('[Speakeasy] Failed to decrypt verifier:', err);\n return null;\n }\n },\n\n async setVerifier(verifier) {\n if (typeof globalThis.localStorage === 'undefined') {\n throw new Error('[Speakeasy] localStorage is not available');\n }\n\n const payload = await encryptVerifier(verifier, deviceSecret);\n globalThis.localStorage.setItem(storageKey, JSON.stringify(payload));\n },\n\n async clearVerifier() {\n try {\n if (typeof globalThis.localStorage === 'undefined') return;\n globalThis.localStorage.removeItem(storageKey);\n } catch {\n // ignore\n }\n },\n };\n}\n\n/**\n * Create encrypted IndexedDB storage.\n *\n * The verifier is encrypted with AES-256-GCM using a key derived from the\n * device secret via PBKDF2 (600,000 iterations).\n *\n * @param options.deviceSecret - The device secret to derive the encryption key from\n * @param options.dbName - IndexedDB database name\n * @param options.storeName - IndexedDB store name\n * @param options.key - Record key within the store\n */\nexport function createEncryptedIndexedDbSpeakeasyStorage(options: {\n deviceSecret: Uint8Array;\n dbName?: string;\n storeName?: string;\n key?: string;\n}): SpeakeasyStorage {\n const dbName = options.dbName ?? 'bb-ui-speakeasy-encrypted';\n const storeName = options.storeName ?? 'speakeasy';\n const recordKey = options.key ?? 'verifier';\n const { deviceSecret } = options;\n\n async function openDb(): Promise<IDBDatabase> {\n if (typeof globalThis.indexedDB === 'undefined') {\n throw new Error('[Speakeasy] indexedDB is not available');\n }\n\n return new Promise((resolve, reject) => {\n const request = globalThis.indexedDB.open(dbName, 1);\n request.onerror = () => reject(request.error);\n request.onsuccess = () => resolve(request.result);\n request.onupgradeneeded = () => {\n const db = request.result;\n if (!db.objectStoreNames.contains(storeName)) {\n db.createObjectStore(storeName);\n }\n };\n });\n }\n\n return {\n async getVerifier() {\n try {\n const db = await openDb();\n const payload = await new Promise<EncryptedPayload | null>((resolve, reject) => {\n const tx = db.transaction(storeName, 'readonly');\n const store = tx.objectStore(storeName);\n const req = store.get(recordKey);\n req.onerror = () => reject(req.error);\n req.onsuccess = () => resolve((req.result ?? null) as EncryptedPayload | null);\n });\n\n if (!payload) return null;\n return await decryptVerifier(payload, deviceSecret);\n } catch (err) {\n console.warn('[Speakeasy] Failed to decrypt verifier:', err);\n return null;\n }\n },\n\n async setVerifier(verifier) {\n const db = await openDb();\n const payload = await encryptVerifier(verifier, deviceSecret);\n\n await new Promise<void>((resolve, reject) => {\n const tx = db.transaction(storeName, 'readwrite');\n const store = tx.objectStore(storeName);\n const req = store.put(payload, recordKey);\n req.onerror = () => reject(req.error);\n req.onsuccess = () => resolve();\n });\n },\n\n async clearVerifier() {\n try {\n const db = await openDb();\n await new Promise<void>((resolve, reject) => {\n const tx = db.transaction(storeName, 'readwrite');\n const store = tx.objectStore(storeName);\n const req = store.delete(recordKey);\n req.onerror = () => reject(req.error);\n req.onsuccess = () => resolve();\n });\n } catch {\n // ignore\n }\n },\n };\n}\n\n/**\n * Create encrypted storage with automatic backend selection.\n *\n * Prefers IndexedDB, falls back to localStorage, then in-memory.\n *\n * @param deviceSecret - The device secret to derive the encryption key from\n */\nexport function createEncryptedSpeakeasyStorage(\n deviceSecret: Uint8Array\n): SpeakeasyStorage {\n try {\n if (typeof globalThis.indexedDB !== 'undefined') {\n return createEncryptedIndexedDbSpeakeasyStorage({ deviceSecret });\n }\n if (typeof globalThis.localStorage !== 'undefined') {\n return createEncryptedLocalStorageSpeakeasyStorage({ deviceSecret });\n }\n } catch {\n // ignore\n }\n // Fall back to in-memory (no encryption needed since it's ephemeral)\n console.warn(\n '[Speakeasy] Encrypted persistent storage is unavailable (IndexedDB and localStorage not found). ' +\n 'Falling back to in-memory storage — data will NOT persist across sessions.'\n );\n return createInMemorySpeakeasyStorage();\n}\n\n/**\n * Migrate a v1 encrypted payload (fixed PBKDF2 salt) to v2 (random salt).\n *\n * v1 used a fixed string as the PBKDF2 salt, meaning the same password always\n * produced the same derived key (enabling precomputation attacks). v2 generates\n * a random 16-byte salt per encryption.\n *\n * @param encryptedPayload - JSON string of the v1 EncryptedPayload\n * @param deviceSecret - The device secret used for encryption\n * @returns JSON string of the new v2 EncryptedPayload\n */\nexport async function migrateV1ToV2(\n encryptedPayload: string,\n deviceSecret: Uint8Array\n): Promise<string> {\n const payload = JSON.parse(encryptedPayload) as EncryptedPayload;\n\n if (payload.v === 2 && payload.salt) {\n // Already v2, return as-is\n return encryptedPayload;\n }\n\n // Decrypt using v1 format (fixed salt)\n const verifier = await decryptVerifier(payload, deviceSecret);\n\n // Re-encrypt using v2 format (random salt)\n const v2Payload = await encryptVerifier(verifier, deviceSecret);\n\n return JSON.stringify(v2Payload);\n}\n","/**\n * SpeakeasyAuth\n *\n * MVP \"doorman\" verifier that:\n * - stores a derived verifier key (not raw gestures)\n * - verifies gesture-derived responses against stored verifier\n *\n * Note: In the MVP, leakage of the stored verifier key compromises the ritual.\n */\n\nimport type { Challenge, GestureSequence, GestureStep, Verifier } from '../types.js';\nimport {\n bytesToHex,\n concatBytes,\n hmacSha256,\n randomHex,\n sha256,\n timingSafeEqual,\n utf8ToBytes,\n hexToBytes,\n} from './crypto.js';\nimport type { SpeakeasyStorage } from './storage.js';\nimport { createDefaultSpeakeasyStorage } from './storage.js';\n\nexport interface SpeakeasyAuthVerifyResult {\n ok: boolean;\n reason?: 'not_registered' | 'domain_mismatch' | 'invalid_gesture';\n response?: string;\n}\n\nexport interface SpeakeasyAuthOptions {\n storage?: SpeakeasyStorage;\n /**\n * Domain binding for anti-phishing. Defaults to `location.origin` when available.\n */\n domain?: string;\n /**\n * Optional device-bound secret (host-provided). This should NOT be the raw gesture.\n */\n deviceSecret?: string | Uint8Array;\n}\n\nfunction defaultDomain(): string {\n if (typeof globalThis.location !== 'undefined' && globalThis.location?.origin) {\n return globalThis.location.origin;\n }\n throw new Error(\n 'SpeakeasyAuth: domain must be explicitly provided in non-browser environments'\n );\n}\n\nfunction normalizeDeviceSecret(secret: string | Uint8Array | undefined): Uint8Array {\n if (!secret) {\n throw new Error('[Speakeasy] deviceSecret is required for secure verifier derivation');\n }\n if (typeof secret === 'string') return utf8ToBytes(secret);\n return secret;\n}\n\nfunction canonicalizeGestureStep(step: GestureStep): string {\n switch (step.type) {\n case 'tap':\n return `tap:${step.count}:${step.region}`;\n case 'hold': {\n const durationBucket = Math.round(step.durationMs / 50) * 50;\n return `hold:${durationBucket}:${step.region}`;\n }\n case 'radial_drag': {\n const from = Math.round(step.fromAngle);\n const to = Math.round(step.toAngle);\n return `radial:${from}:${to}:${step.notches}`;\n }\n case 'flick': {\n const velocityBucket = Math.round(step.velocity * 100) / 100;\n return `flick:${step.direction}:${velocityBucket}`;\n }\n }\n}\n\nfunction canonicalizeGestureSequence(sequence: GestureSequence): string {\n return sequence.steps.map(canonicalizeGestureStep).join('|');\n}\n\nexport function fingerprintGestureSequence(sequence: GestureSequence): string {\n return canonicalizeGestureSequence(sequence);\n}\n\nfunction buildChallengeMessage(challenge: Challenge, rhythmHash: string): Uint8Array {\n // Validate nonce format: 32 bytes = 64 hex characters\n if (!/^[0-9a-fA-F]{64}$/.test(challenge.nonce)) {\n throw new Error('[Speakeasy] Invalid nonce: expected 64 hex characters');\n }\n // Validate salt format: 16 bytes = 32 hex characters\n if (!/^[0-9a-fA-F]{32}$/.test(challenge.salt)) {\n throw new Error('[Speakeasy] Invalid salt: expected 32 hex characters');\n }\n\n // Keep this stable and versioned. Avoid including raw step values.\n const message = `bb-ui:speakeasy:v1|nonce:${challenge.nonce}|salt:${challenge.salt}|rhythm:${rhythmHash}`;\n return utf8ToBytes(message);\n}\n\nasync function deriveVerifierKeyBytes(options: {\n sequence: GestureSequence;\n domain: string;\n verifierSaltHex: string;\n deviceSecret: Uint8Array;\n}): Promise<Uint8Array> {\n const canonical = canonicalizeGestureSequence(options.sequence);\n const header = `bb-ui:speakeasy:verifier:v1|domain:${options.domain}|salt:${options.verifierSaltHex}|`;\n const data = concatBytes(utf8ToBytes(header + canonical), options.deviceSecret);\n return sha256(data);\n}\n\nexport class SpeakeasyAuth {\n private readonly storage: SpeakeasyStorage;\n private readonly domain: string;\n private readonly deviceSecret: Uint8Array;\n\n constructor(options: SpeakeasyAuthOptions & { deviceSecret: string | Uint8Array }) {\n // Validate deviceSecret at construction time - fail fast\n this.deviceSecret = normalizeDeviceSecret(options.deviceSecret);\n this.storage = options?.storage ?? createDefaultSpeakeasyStorage({ deviceSecret: this.deviceSecret });\n this.domain = options?.domain ?? defaultDomain();\n }\n\n async getVerifier(): Promise<Verifier | null> {\n return this.storage.getVerifier();\n }\n\n async isRegistered(): Promise<boolean> {\n return (await this.getVerifier()) !== null;\n }\n\n async clear(): Promise<void> {\n await this.storage.clearVerifier();\n }\n\n async registerGesture(sequence: GestureSequence): Promise<Verifier> {\n const salt = randomHex(16);\n const domain = this.domain;\n const keyBytes = await deriveVerifierKeyBytes({\n sequence,\n domain,\n verifierSaltHex: salt,\n deviceSecret: this.deviceSecret,\n });\n\n const verifier: Verifier = {\n hash: bytesToHex(keyBytes),\n salt,\n domain,\n createdAt: Date.now(),\n version: 1,\n };\n\n await this.storage.setVerifier(verifier);\n return verifier;\n }\n\n async computeResponse(sequence: GestureSequence, challenge: Challenge): Promise<string> {\n const verifier = await this.getVerifier();\n if (!verifier) {\n throw new Error('[Speakeasy] Not registered');\n }\n if (verifier.domain !== this.domain) {\n throw new Error('[Speakeasy] Domain mismatch');\n }\n const keyBytes = await deriveVerifierKeyBytes({\n sequence,\n domain: verifier.domain,\n verifierSaltHex: verifier.salt,\n deviceSecret: this.deviceSecret,\n });\n const messageBytes = buildChallengeMessage(challenge, sequence.rhythmHash);\n const responseBytes = await hmacSha256(keyBytes, messageBytes);\n return bytesToHex(responseBytes);\n }\n\n async verifyGesture(sequence: GestureSequence, challenge: Challenge): Promise<SpeakeasyAuthVerifyResult> {\n const verifier = await this.getVerifier();\n if (!verifier) {\n return { ok: false, reason: 'not_registered' };\n }\n if (verifier.domain !== this.domain) {\n return { ok: false, reason: 'domain_mismatch' };\n }\n\n const storedKeyBytes = hexToBytes(verifier.hash);\n const keyBytes = await deriveVerifierKeyBytes({\n sequence,\n domain: verifier.domain,\n verifierSaltHex: verifier.salt,\n deviceSecret: this.deviceSecret,\n });\n\n const messageBytes = buildChallengeMessage(challenge, sequence.rhythmHash);\n const expected = await hmacSha256(storedKeyBytes, messageBytes);\n const response = await hmacSha256(keyBytes, messageBytes);\n\n const ok = timingSafeEqual(expected, response);\n if (!ok) {\n return { ok: false, reason: 'invalid_gesture' };\n }\n\n return { ok: true, response: bytesToHex(response) };\n }\n}\n","/**\n * CapabilityIssuer (MVP)\n *\n * Issues locally-verifiable capability tokens using HMAC-SHA256.\n *\n * This intentionally mirrors the structure of Backbay capability tokens, but\n * avoids adding Ed25519 dependencies inside bb-ui.\n */\n\nimport type { CapabilityToken } from '../types.js';\nimport { bytesToHex, hmacSha256, randomHex, timingSafeEqual, utf8ToBytes, hexToBytes } from './crypto.js';\n\nfunction createTokenId(): string {\n try {\n if (typeof globalThis.crypto !== 'undefined' && typeof globalThis.crypto.randomUUID === 'function') {\n return globalThis.crypto.randomUUID();\n }\n } catch {\n // ignore\n }\n return randomHex(16);\n}\n\nfunction canonicalizePayload(payload: Omit<CapabilityToken, 'signature'>): string {\n // Ensure stable key order by constructing a new object in fixed order.\n const canonical: Omit<CapabilityToken, 'signature'> = {\n tokenId: payload.tokenId,\n issuer: payload.issuer,\n scopes: payload.scopes,\n notBefore: payload.notBefore,\n expiresAt: payload.expiresAt,\n constraints: payload.constraints,\n };\n return JSON.stringify(canonical);\n}\n\nexport async function createCapabilityToken(options: {\n verifierKeyHex: string;\n issuer: string;\n scopes: string[];\n ttlMs: number;\n constraints?: CapabilityToken['constraints'];\n}): Promise<CapabilityToken> {\n const notBefore = Date.now();\n const expiresAt = notBefore + options.ttlMs;\n\n const payload: Omit<CapabilityToken, 'signature'> = {\n tokenId: createTokenId(),\n issuer: options.issuer,\n scopes: options.scopes,\n notBefore,\n expiresAt,\n constraints: options.constraints,\n };\n\n const msg = utf8ToBytes(canonicalizePayload(payload));\n const keyBytes = hexToBytes(options.verifierKeyHex);\n const sigBytes = await hmacSha256(keyBytes, msg);\n\n return {\n ...payload,\n signature: bytesToHex(sigBytes),\n };\n}\n\nexport async function verifyCapabilityToken(options: {\n token: CapabilityToken;\n verifierKeyHex: string;\n now?: number;\n}): Promise<boolean> {\n const { token, verifierKeyHex } = options;\n const now = options.now ?? Date.now();\n if (now < token.notBefore || now > token.expiresAt) return false;\n\n const payload: Omit<CapabilityToken, 'signature'> = {\n tokenId: token.tokenId,\n issuer: token.issuer,\n scopes: token.scopes,\n notBefore: token.notBefore,\n expiresAt: token.expiresAt,\n constraints: token.constraints,\n };\n\n const msg = utf8ToBytes(canonicalizePayload(payload));\n const keyBytes = hexToBytes(verifierKeyHex);\n const expected = await hmacSha256(keyBytes, msg);\n const actual = hexToBytes(token.signature);\n return timingSafeEqual(expected, actual);\n}\n","import type { GestureSequence, GestureStep } from '../types.js';\n\nexport interface PanicGesturePattern {\n tapCount: number;\n tapRegion: 'center' | 'edge' | 'any';\n holdMinDurationMs: number;\n holdRegion: 'center' | 'edge' | 'any';\n}\n\nexport const DEFAULT_PANIC_GESTURE_PATTERN: PanicGesturePattern = {\n tapCount: 5,\n tapRegion: 'center',\n holdMinDurationMs: 2_500,\n holdRegion: 'edge',\n};\n\nfunction isRegionMatch(region: 'center' | 'edge', expected: 'center' | 'edge' | 'any'): boolean {\n return expected === 'any' ? true : region === expected;\n}\n\nexport function isPanicGesture(\n sequence: GestureSequence,\n pattern: PanicGesturePattern = DEFAULT_PANIC_GESTURE_PATTERN\n): boolean {\n // Use filter to check ALL tap/hold pairs, not just the first match\n const allTaps = sequence.steps.filter(\n (s): s is Extract<GestureStep, { type: 'tap' }> => s.type === 'tap'\n );\n const allHolds = sequence.steps.filter(\n (s): s is Extract<GestureStep, { type: 'hold' }> => s.type === 'hold'\n );\n\n // Check all combinations of taps and holds for panic pattern\n for (const tap of allTaps) {\n if (tap.count < pattern.tapCount) continue;\n if (!isRegionMatch(tap.region, pattern.tapRegion)) continue;\n\n for (const hold of allHolds) {\n if (\n hold.durationMs >= pattern.holdMinDurationMs &&\n isRegionMatch(hold.region, pattern.holdRegion)\n ) {\n return true;\n }\n }\n }\n\n return false;\n}\n\n","/**\n * Device secret provider\n *\n * Hosts can implement this using a keychain/secure enclave and inject it into\n * SpeakeasyProvider / SpeakeasyConsentDialog.\n */\n\nimport { bytesToHex, hexToBytes, randomHex } from './crypto.js';\n\nexport interface SpeakeasyDeviceSecretProvider {\n getOrCreateDeviceSecret: () => Promise<Uint8Array>;\n clearDeviceSecret: () => Promise<void>;\n}\n\nexport function createInMemoryDeviceSecretProvider(): SpeakeasyDeviceSecretProvider {\n let secret: Uint8Array | null = null;\n return {\n async getOrCreateDeviceSecret() {\n if (!secret) {\n secret = hexToBytes(randomHex(32));\n }\n return secret;\n },\n async clearDeviceSecret() {\n secret = null;\n },\n };\n}\n\nexport function createLocalStorageDeviceSecretProvider(options?: {\n key?: string;\n}): SpeakeasyDeviceSecretProvider {\n const storageKey = options?.key ?? 'bb-ui:speakeasy:device-secret:v1';\n\n return {\n async getOrCreateDeviceSecret() {\n if (typeof globalThis.localStorage === 'undefined') {\n throw new Error('[Speakeasy] localStorage is not available');\n }\n const existing = globalThis.localStorage.getItem(storageKey);\n if (existing) {\n return hexToBytes(existing);\n }\n const created = randomHex(32);\n globalThis.localStorage.setItem(storageKey, created);\n return hexToBytes(created);\n },\n async clearDeviceSecret() {\n try {\n if (typeof globalThis.localStorage === 'undefined') return;\n globalThis.localStorage.removeItem(storageKey);\n } catch {\n // ignore\n }\n },\n };\n}\n\nexport function createDefaultDeviceSecretProvider(): SpeakeasyDeviceSecretProvider {\n try {\n if (typeof globalThis.localStorage !== 'undefined') {\n return createLocalStorageDeviceSecretProvider();\n }\n } catch {\n // ignore\n }\n return createInMemoryDeviceSecretProvider();\n}\n\nexport function encodeDeviceSecretHex(secret: Uint8Array): string {\n return bytesToHex(secret);\n}\n\n","/**\n * SpeakeasyProvider\n *\n * React context that wires:\n * - doorman state machine (Zustand)\n * - auth verifier (gesture -> response)\n * - capability token issuance\n */\n\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n type ReactNode,\n type ErrorInfo,\n} from 'react';\n\nimport { GliaErrorBoundary } from '../primitives/atoms/GliaErrorBoundary';\n\nimport { startDoormanTimeouts, useDoormanStore } from './doorman/DoormanStateMachine.js';\nimport type {\n CapabilityToken,\n DoormanConfig,\n GestureSequence,\n SpeakeasyContextValue,\n SpeakeasyPrivateContextValue,\n SpeakeasyPublicContextValue,\n} from './types.js';\nimport { DEFAULT_DOORMAN_CONFIG } from './types.js';\nimport { SpeakeasyAuth, type SpeakeasyAuthOptions } from './auth/SpeakeasyAuth.js';\nimport { createCapabilityToken } from './auth/CapabilityIssuer.js';\nimport type { SpeakeasyStorage } from './auth/storage.js';\nimport { isPanicGesture } from './doorman/panic.js';\nimport {\n createDefaultDeviceSecretProvider,\n type SpeakeasyDeviceSecretProvider,\n} from './auth/deviceSecret.js';\n\n// =============================================================================\n// Errors\n// =============================================================================\n\n/**\n * Error thrown when an operation requires auth but device secret is not yet resolved.\n */\nexport class SpeakeasyNotReadyError extends Error {\n constructor(operation: string) {\n super(`[Speakeasy] ${operation}: device secret not yet resolved`);\n this.name = 'SpeakeasyNotReadyError';\n }\n}\n\n/**\n * Asserts that auth is ready, throwing SpeakeasyNotReadyError if not.\n * Use this for user-initiated operations that cannot silently fail.\n */\nfunction assertAuthReady(auth: SpeakeasyAuth | null, operation: string): asserts auth is SpeakeasyAuth {\n if (!auth) {\n throw new SpeakeasyNotReadyError(operation);\n }\n}\n\n// =============================================================================\n// Context\n// =============================================================================\n\n/** Public context - safe for all components */\nconst SpeakeasyPublicContext = createContext<SpeakeasyPublicContextValue | null>(null);\n\n/** Private context - only for trusted components handling sensitive data */\nconst SpeakeasyPrivateContext = createContext<SpeakeasyPrivateContextValue | null>(null);\n\n/** Legacy combined context (deprecated) */\nconst SpeakeasyContext = createContext<SpeakeasyContextValue | null>(null);\n\nexport interface SpeakeasyProviderProps {\n children: ReactNode;\n /** Override doorman timings and thresholds */\n doormanConfig?: Partial<DoormanConfig>;\n /** Inject a storage backend (keychain/enclave/etc.) */\n storage?: SpeakeasyStorage;\n /** Domain binding for anti-phishing */\n domain?: string;\n /** Optional device-bound secret (host-provided) */\n deviceSecret?: SpeakeasyAuthOptions['deviceSecret'];\n /** Device secret provider (keychain/enclave/etc.) */\n deviceSecretProvider?: SpeakeasyDeviceSecretProvider;\n /** Capability issuer identity string */\n issuer?: string;\n /** Capability scopes granted on admit */\n scopes?: string[];\n /** Called after successful admission */\n onAdmitted?: (capability: CapabilityToken) => void;\n /** Called on exit */\n onExit?: () => void;\n}\n\nexport function SpeakeasyProvider({\n children,\n doormanConfig,\n storage,\n domain,\n deviceSecret,\n deviceSecretProvider,\n issuer = 'bb-ui:speakeasy',\n scopes = ['speakeasy.*'],\n onAdmitted,\n onExit,\n}: SpeakeasyProviderProps) {\n const state = useDoormanStore((s) => s.state);\n const capability = useDoormanStore((s) => s.capability);\n\n const [resolvedDeviceSecret, setResolvedDeviceSecret] = useState<\n SpeakeasyAuthOptions['deviceSecret'] | undefined\n >(deviceSecret);\n\n useEffect(() => {\n let cancelled = false;\n if (deviceSecret !== undefined) {\n setResolvedDeviceSecret(deviceSecret);\n return;\n }\n\n const provider = deviceSecretProvider ?? createDefaultDeviceSecretProvider();\n provider.getOrCreateDeviceSecret().then((secret) => {\n if (!cancelled) setResolvedDeviceSecret(secret);\n });\n\n return () => {\n cancelled = true;\n };\n }, [deviceSecret, deviceSecretProvider]);\n\n // Auth is only created once deviceSecret is resolved (prevents race condition)\n const auth = useMemo(() => {\n if (resolvedDeviceSecret === undefined) {\n return null; // Not ready yet\n }\n return new SpeakeasyAuth({\n storage,\n domain,\n deviceSecret: resolvedDeviceSecret,\n });\n }, [storage, domain, resolvedDeviceSecret]);\n\n const [isRegistered, setIsRegistered] = useState(false);\n const [tick, setTick] = useState(0);\n\n // Apply config overrides\n useEffect(() => {\n if (!doormanConfig) return;\n useDoormanStore.getState().setConfig(doormanConfig);\n }, [doormanConfig]);\n\n // Start timeout management and reset state on unmount\n useEffect(() => {\n const cleanupTimeouts = startDoormanTimeouts();\n return () => {\n cleanupTimeouts();\n useDoormanStore.getState().reset();\n };\n }, []);\n\n // Load registration status (only when auth is ready)\n useEffect(() => {\n if (!auth) {\n setIsRegistered(false);\n return;\n }\n let cancelled = false;\n auth.isRegistered().then((registered) => {\n if (!cancelled) setIsRegistered(registered);\n });\n return () => {\n cancelled = true;\n };\n }, [auth]);\n\n // Basic tick to keep timeRemaining fresh for UI\n useEffect(() => {\n if (\n state !== 'CHALLENGED' &&\n state !== 'COOLDOWN' &&\n state !== 'LOCKED' &&\n state !== 'ADMITTED'\n ) {\n return;\n }\n const id = setInterval(() => setTick((t) => t + 1), 250);\n return () => clearInterval(id);\n }, [state]);\n\n const knock = useCallback(() => {\n useDoormanStore.getState().dispatch({ type: 'KNOCK_DETECTED', timestamp: Date.now() });\n }, []);\n\n const exit = useCallback(() => {\n useDoormanStore.getState().dispatch({ type: 'EXIT_REQUESTED' });\n onExit?.();\n }, [onExit]);\n\n const register = useCallback(\n async (gesture: GestureSequence) => {\n // User-initiated: throw if not ready\n assertAuthReady(auth, 'register');\n await auth.registerGesture(gesture);\n setIsRegistered(true);\n },\n [auth]\n );\n\n const clearRegistration = useCallback(async () => {\n // User-initiated: throw if not ready\n assertAuthReady(auth, 'clearRegistration');\n await auth.clear();\n setIsRegistered(false);\n }, [auth]);\n\n const submitGesture = useCallback(\n async (gesture: GestureSequence) => {\n // User-initiated: throw if not ready\n assertAuthReady(auth, 'submitGesture');\n\n const store = useDoormanStore.getState();\n const challenge = store.challenge;\n\n if (store.state !== 'CHALLENGED' || !challenge) return;\n\n // Atomically claim the VERIFYING state BEFORE any async work\n // This prevents race conditions where multiple submissions could proceed\n store.dispatch({ type: 'GESTURE_COMPLETE', gestureData: gesture });\n\n // Re-check state after dispatch - if not VERIFYING, another submission won the race\n if (useDoormanStore.getState().state !== 'VERIFYING') {\n // Either challenge expired or another submission won the race; bail out\n return;\n }\n\n // Now we have exclusive ownership of the VERIFYING state\n // Check for panic gesture (must happen after claiming state to prevent bypass)\n if (store.config.panicGestureEnabled && isPanicGesture(gesture)) {\n store.dispatch({\n type: 'PANIC_GESTURE',\n decoyMode: store.config.panicAction === 'decoy',\n });\n return;\n }\n\n if (!(await auth.isRegistered())) {\n // Not a failure attempt; just cancel the challenge.\n store.dispatch({ type: 'EXIT_REQUESTED' });\n return;\n }\n\n const result = await auth.verifyGesture(gesture, challenge);\n if (!result.ok) {\n store.dispatch({\n type: 'VERIFICATION_FAILURE',\n reason: result.reason ?? 'invalid',\n });\n return;\n }\n\n const verifier = await auth.getVerifier();\n if (!verifier) {\n store.dispatch({ type: 'VERIFICATION_FAILURE', reason: 'not_registered' });\n return;\n }\n\n const config = store.config ?? DEFAULT_DOORMAN_CONFIG;\n const token = await createCapabilityToken({\n verifierKeyHex: verifier.hash,\n issuer,\n scopes,\n ttlMs: config.admissionTtlMs,\n });\n\n store.dispatch({ type: 'VERIFICATION_SUCCESS', capability: token });\n onAdmitted?.(token);\n },\n [auth, issuer, scopes, onAdmitted]\n );\n\n const isReady = auth !== null;\n\n const publicContextValue = useMemo<SpeakeasyPublicContextValue>(() => {\n const store = useDoormanStore.getState();\n return {\n state,\n isReady,\n isAdmitted: state === 'ADMITTED',\n isDecoy: state === 'DECOY',\n knock,\n exit,\n timeRemaining: store.timeRemaining(),\n };\n }, [state, isReady, knock, exit, tick]);\n\n const privateContextValue = useMemo<SpeakeasyPrivateContextValue>(\n () => ({\n capability,\n isRegistered,\n register,\n clearRegistration,\n submitGesture,\n }),\n [capability, isRegistered, register, clearRegistration, submitGesture]\n );\n\n // Combined context for legacy support\n const contextValue = useMemo<SpeakeasyContextValue>(\n () => ({\n ...publicContextValue,\n ...privateContextValue,\n }),\n [publicContextValue, privateContextValue]\n );\n\n const handleSpeakeasyError = useCallback(\n (error: Error, _errorInfo: ErrorInfo) => {\n // Reset DoormanStateMachine to IDLE on error\n useDoormanStore.getState().reset();\n // Log without including key material\n console.error('[Speakeasy] Error boundary caught:', error.message);\n },\n []\n );\n\n return (\n <SpeakeasyPublicContext.Provider value={publicContextValue}>\n <SpeakeasyPrivateContext.Provider value={privateContextValue}>\n <SpeakeasyContext.Provider value={contextValue}>\n <GliaErrorBoundary\n variant=\"card\"\n onError={handleSpeakeasyError}\n >\n {children}\n </GliaErrorBoundary>\n </SpeakeasyContext.Provider>\n </SpeakeasyPrivateContext.Provider>\n </SpeakeasyPublicContext.Provider>\n );\n}\n\n/**\n * Hook for public speakeasy state - safe for all components.\n * Use this when you only need to read state or trigger knock/exit.\n */\nexport function useSpeakeasyPublic(): SpeakeasyPublicContextValue {\n const ctx = useContext(SpeakeasyPublicContext);\n if (!ctx) {\n throw new Error('useSpeakeasyPublic must be used within a SpeakeasyProvider');\n }\n return ctx;\n}\n\n/**\n * Hook for private speakeasy state - only for trusted components.\n * Use this when you need access to capability tokens or registration.\n */\nexport function useSpeakeasyPrivate(): SpeakeasyPrivateContextValue {\n const ctx = useContext(SpeakeasyPrivateContext);\n if (!ctx) {\n throw new Error('useSpeakeasyPrivate must be used within a SpeakeasyProvider');\n }\n return ctx;\n}\n\n/**\n * Combined hook for full speakeasy context.\n * @deprecated Use useSpeakeasyPublic() or useSpeakeasyPrivate() for better security isolation.\n */\nexport function useSpeakeasy(): SpeakeasyContextValue {\n const ctx = useContext(SpeakeasyContext);\n if (!ctx) {\n throw new Error('useSpeakeasy must be used within a SpeakeasyProvider');\n }\n return ctx;\n}\n","/**\n * SpeakeasyOrb (MVP)\n *\n * Minimal orb UI that:\n * - detects a public \"knock\" (triple tap) to request a challenge\n * - captures a short gesture sequence while challenged\n */\n\nimport { motion } from 'framer-motion';\nimport React, { useCallback, useEffect, useMemo, useRef } from 'react';\n\nimport { useSpeakeasy } from '../SpeakeasyProvider.js';\nimport { useGestureRecognizer } from '../hooks/useGestureRecognizer.js';\nimport type { DoormanState, OrbState, OrbVisualConfig } from '../types.js';\nimport { DEFAULT_ORB_CONFIG } from '../types.js';\n\nexport interface SpeakeasyOrbProps {\n config?: Partial<OrbVisualConfig>;\n}\n\nexport function SpeakeasyOrb({ config: partialConfig }: SpeakeasyOrbProps) {\n const config = useMemo(() => {\n const merged: OrbVisualConfig = {\n ...DEFAULT_ORB_CONFIG,\n ...partialConfig,\n glowIntensity: { ...DEFAULT_ORB_CONFIG.glowIntensity, ...partialConfig?.glowIntensity },\n pulseSpeed: { ...DEFAULT_ORB_CONFIG.pulseSpeed, ...partialConfig?.pulseSpeed },\n colors: { ...DEFAULT_ORB_CONFIG.colors, ...partialConfig?.colors },\n };\n return merged;\n }, [partialConfig]);\n\n const { state, knock, submitGesture, isAdmitted, timeRemaining } = useSpeakeasy();\n\n const orbRef = useRef<HTMLDivElement>(null);\n const finalizeTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const knockTapCountRef = useRef(0);\n const knockTapTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const { handlers, startCapture, endCapture, reset } = useGestureRecognizer({\n centerRef: orbRef,\n onGestureStep: () => {\n if (finalizeTimeoutRef.current) clearTimeout(finalizeTimeoutRef.current);\n finalizeTimeoutRef.current = setTimeout(async () => {\n const sequence = await endCapture();\n if (sequence) {\n await submitGesture(sequence);\n }\n }, 350);\n },\n });\n\n // Start/stop capture based on doorman state.\n useEffect(() => {\n if (state === 'CHALLENGED') {\n startCapture();\n return;\n }\n reset();\n if (finalizeTimeoutRef.current) {\n clearTimeout(finalizeTimeoutRef.current);\n finalizeTimeoutRef.current = null;\n }\n }, [state, startCapture, reset]);\n\n const handleKnockTap = useCallback(() => {\n // Triple tap within a short window.\n knockTapCountRef.current += 1;\n\n if (knockTapTimeoutRef.current) clearTimeout(knockTapTimeoutRef.current);\n\n if (knockTapCountRef.current >= 3) {\n knockTapCountRef.current = 0;\n knock();\n return;\n }\n\n knockTapTimeoutRef.current = setTimeout(() => {\n knockTapCountRef.current = 0;\n }, 500);\n }, [knock]);\n\n // Map doorman state to orb visual state\n const ORB_STATE_MAP: Record<DoormanState, OrbState> = {\n IDLE: 'idle',\n CHALLENGED: 'challenged',\n VERIFYING: 'verifying',\n ADMITTED: 'admitted',\n DECOY: 'decoy',\n COOLDOWN: 'idle',\n LOCKED: 'locked',\n };\n const orbState = ORB_STATE_MAP[state] ?? 'idle';\n\n const glow = config.glowIntensity[orbState];\n const color = config.colors[orbState];\n const pulseMs = config.pulseSpeed[orbState];\n\n // Accessible labels for each state\n const ARIA_LABELS: Record<DoormanState, string> = {\n IDLE: 'Speakeasy: triple-tap to knock',\n CHALLENGED: 'Speakeasy: perform gesture now',\n VERIFYING: 'Speakeasy: verifying your gesture',\n ADMITTED: 'Speakeasy: access granted',\n DECOY: 'Speakeasy: decoy mode active',\n COOLDOWN: 'Speakeasy: please wait before retrying',\n LOCKED: 'Speakeasy: temporarily locked',\n };\n const ariaLabel = ARIA_LABELS[state] ?? 'Speakeasy';\n\n return (\n <motion.div\n ref={orbRef}\n role=\"button\"\n aria-label={ariaLabel}\n title={ariaLabel}\n onPointerDown={handlers.onPointerDown}\n onPointerMove={handlers.onPointerMove}\n onPointerUp={(e: React.PointerEvent) => {\n handlers.onPointerUp(e);\n if (state === 'IDLE') {\n handleKnockTap();\n }\n }}\n onPointerCancel={handlers.onPointerCancel}\n animate={pulseMs > 0 ? { opacity: [0.9, 1, 0.9] } : { opacity: 1 }}\n transition={pulseMs > 0 ? { duration: pulseMs / 1000, repeat: Infinity, ease: 'easeInOut' } : undefined}\n style={{\n position: 'relative',\n width: config.size,\n height: config.size,\n borderRadius: '50%',\n border: `1px solid color-mix(in srgb, ${color} 40%, transparent)`,\n background:\n 'linear-gradient(160deg, rgba(0, 0, 0, 0.55), rgba(8, 8, 10, 0.85))',\n boxShadow: `0 0 ${24 + glow * 36}px color-mix(in srgb, ${color} ${20 + glow * 40}%, transparent), 0 6px 26px rgba(0, 0, 0, 0.45)`,\n display: 'grid',\n placeItems: 'center',\n userSelect: 'none',\n touchAction: 'none',\n cursor: 'pointer',\n }}\n >\n <div\n style={{\n width: config.size * 0.35,\n height: config.size * 0.35,\n borderRadius: '50%',\n background: `radial-gradient(circle at 30% 30%, color-mix(in srgb, ${color} 60%, white), color-mix(in srgb, ${color} 35%, transparent) 55%, transparent 70%)`,\n opacity: isAdmitted ? 1 : 0.9,\n }}\n />\n {typeof timeRemaining === 'number' && state !== 'IDLE' && (\n <div\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n style={{\n position: 'absolute',\n top: config.size + 8,\n fontSize: 12,\n color: 'var(--text-muted, rgba(255,255,255,0.72))',\n fontFamily: 'ui-sans-serif, system-ui',\n textAlign: 'center',\n width: 140,\n }}\n >\n <span aria-label={`${state.toLowerCase()}, ${Math.ceil(timeRemaining / 1000)} seconds remaining`}>\n {state.toLowerCase()} · {Math.ceil(timeRemaining / 1000)}s\n </span>\n </div>\n )}\n </motion.div>\n );\n}\n\nexport default SpeakeasyOrb;\n","/**\n * SpeakeasyRitualPad\n *\n * Generic capture surface for gesture rituals.\n */\n\nimport React, { useEffect, useMemo, useRef } from 'react';\n\nimport { useGestureRecognizer } from '../hooks/useGestureRecognizer.js';\nimport type { GestureSequence, GestureStep } from '../types.js';\n\nexport interface SpeakeasyRitualPadProps {\n disabled?: boolean;\n autoStart?: boolean;\n onComplete: (sequence: GestureSequence) => void | Promise<void>;\n onStep?: (step: GestureStep) => void;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function SpeakeasyRitualPad({\n disabled = false,\n autoStart = true,\n onComplete,\n onStep,\n className,\n style,\n}: SpeakeasyRitualPadProps) {\n const padRef = useRef<HTMLDivElement>(null);\n const finalizeTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const { handlers, startCapture, endCapture, reset } = useGestureRecognizer({\n centerRef: padRef,\n onGestureStep: (step) => {\n onStep?.(step);\n if (finalizeTimeoutRef.current) clearTimeout(finalizeTimeoutRef.current);\n finalizeTimeoutRef.current = setTimeout(async () => {\n const sequence = await endCapture();\n if (sequence) {\n await onComplete(sequence);\n }\n }, 350);\n },\n });\n\n useEffect(() => {\n if (!autoStart || disabled) return;\n startCapture();\n return () => reset();\n }, [autoStart, disabled, startCapture, reset]);\n\n const mergedStyle = useMemo<React.CSSProperties>(\n () => ({\n position: 'relative',\n width: 240,\n height: 240,\n borderRadius: 24,\n border: '1px solid rgba(255,255,255,0.10)',\n background:\n 'radial-gradient(circle at 35% 30%, rgba(212,168,75,0.18), rgba(0,0,0,0.25) 60%, rgba(0,0,0,0.55) 100%)',\n boxShadow: '0 10px 30px rgba(0,0,0,0.35)',\n touchAction: 'none',\n userSelect: 'none',\n opacity: disabled ? 0.55 : 1,\n ...style,\n }),\n [disabled, style]\n );\n\n return (\n <div\n ref={padRef}\n className={className}\n style={mergedStyle}\n aria-disabled={disabled}\n onPointerDown={disabled ? undefined : handlers.onPointerDown}\n onPointerMove={disabled ? undefined : handlers.onPointerMove}\n onPointerUp={disabled ? undefined : handlers.onPointerUp}\n onPointerCancel={disabled ? undefined : handlers.onPointerCancel}\n >\n <div\n style={{\n position: 'absolute',\n inset: 14,\n borderRadius: 18,\n border: '1px dashed rgba(255,255,255,0.18)',\n pointerEvents: 'none',\n }}\n />\n <div\n style={{\n position: 'absolute',\n bottom: 10,\n left: 12,\n right: 12,\n fontSize: 12,\n color: 'rgba(255,255,255,0.72)',\n fontFamily: 'ui-sans-serif, system-ui',\n textAlign: 'center',\n pointerEvents: 'none',\n }}\n >\n Tap · hold · radial drag · flick\n </div>\n </div>\n );\n}\n\nexport default SpeakeasyRitualPad;\n\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from '../../primitives/ui/dialog';\nimport { Button } from '../../primitives/ui/button';\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from '../../primitives/ui/alert-dialog';\n\nimport { fingerprintGestureSequence } from '../auth/SpeakeasyAuth.js';\nimport { useSpeakeasy } from '../SpeakeasyProvider.js';\nimport type { GestureSequence, GestureStep } from '../types.js';\nimport { SpeakeasyRitualPad } from './SpeakeasyRitualPad.js';\n\ntype RegistrationPhase = 'idle' | 'record' | 'confirm' | 'success';\n\nfunction describeStep(step: GestureStep): string {\n switch (step.type) {\n case 'tap':\n return `tap ×${step.count} (${step.region})`;\n case 'hold':\n return `hold ${Math.round(step.durationMs)}ms (${step.region})`;\n case 'radial_drag':\n return `radial drag ${Math.round(step.fromAngle)}°→${Math.round(step.toAngle)}° (notches ${step.notches})`;\n case 'flick':\n return `flick ${step.direction} (${step.velocity.toFixed(2)}px/ms)`;\n }\n}\n\nexport interface SpeakeasyRegistrationDialogProps {\n trigger?: React.ReactNode;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport function SpeakeasyRegistrationDialog({\n trigger,\n open: openProp,\n onOpenChange,\n}: SpeakeasyRegistrationDialogProps) {\n const [openInternal, setOpenInternal] = useState(false);\n const open = openProp ?? openInternal;\n const setOpen = onOpenChange ?? setOpenInternal;\n\n const { isRegistered, register, clearRegistration } = useSpeakeasy();\n\n const [phase, setPhase] = useState<RegistrationPhase>('idle');\n const [first, setFirst] = useState<GestureSequence | null>(null);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n if (!open) {\n setPhase('idle');\n setFirst(null);\n setError(null);\n }\n }, [open]);\n\n const stepsSummary = useMemo(() => {\n if (!first) return null;\n return first.steps.map(describeStep);\n }, [first]);\n\n const start = useCallback(() => {\n setError(null);\n setFirst(null);\n setPhase('record');\n }, []);\n\n const handleFirst = useCallback(async (sequence: GestureSequence) => {\n setError(null);\n setFirst(sequence);\n setPhase('confirm');\n }, []);\n\n const handleConfirm = useCallback(\n async (sequence: GestureSequence) => {\n if (!first) return;\n const a = fingerprintGestureSequence(first);\n const b = fingerprintGestureSequence(sequence);\n if (a !== b) {\n setError('That didn’t match. Try again.');\n setPhase('record');\n setFirst(null);\n return;\n }\n\n await register(first);\n setError(null);\n setPhase('success');\n },\n [first, register]\n );\n\n return (\n <Dialog open={open} onOpenChange={setOpen}>\n {trigger ? <DialogTrigger asChild>{trigger}</DialogTrigger> : null}\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Speakeasy ritual</DialogTitle>\n <DialogDescription>\n Register a short gesture sequence (3–5 steps). You’ll need to repeat it to confirm.\n </DialogDescription>\n </DialogHeader>\n\n <div style={{ display: 'grid', gap: 12 }}>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 12,\n padding: '10px 12px',\n borderRadius: 10,\n border: '1px solid rgba(255,255,255,0.08)',\n }}\n >\n <div style={{ display: 'grid', gap: 2 }}>\n <div style={{ fontWeight: 600 }}>\n Status: {isRegistered ? 'registered' : 'not registered'}\n </div>\n <div style={{ fontSize: 13, opacity: 0.8 }}>\n Stored secret is a verifier output (not raw gestures).\n </div>\n </div>\n\n {isRegistered ? (\n <AlertDialog>\n <AlertDialogTrigger asChild>\n <Button variant=\"outline\">Clear</Button>\n </AlertDialogTrigger>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Clear ritual?</AlertDialogTitle>\n <AlertDialogDescription>\n This removes the registered verifier from storage. You’ll need to register again to enter.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancel</AlertDialogCancel>\n <AlertDialogAction\n onClick={async () => {\n await clearRegistration();\n setPhase('idle');\n setFirst(null);\n }}\n >\n Clear\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n ) : null}\n </div>\n\n {error ? (\n <div\n style={{\n padding: '10px 12px',\n borderRadius: 10,\n border: '1px solid rgba(239,68,68,0.35)',\n background: 'rgba(239,68,68,0.10)',\n color: 'rgba(255,255,255,0.92)',\n fontSize: 13,\n }}\n >\n {error}\n </div>\n ) : null}\n\n {phase === 'idle' ? (\n <div style={{ display: 'grid', gap: 12 }}>\n <div style={{ fontSize: 13, opacity: 0.85 }}>\n Tip: Use rhythmic taps, a short hold, and a notch-like radial drag.\n </div>\n <div style={{ display: 'flex', justifyContent: 'flex-end', gap: 8 }}>\n <Button onClick={start}>{isRegistered ? 'Replace ritual' : 'Register ritual'}</Button>\n </div>\n </div>\n ) : null}\n\n {phase === 'record' ? (\n <div style={{ display: 'grid', gap: 12, justifyItems: 'center' }}>\n <div style={{ fontWeight: 600 }}>Step 1: Record your ritual</div>\n <SpeakeasyRitualPad onComplete={handleFirst} />\n <div style={{ fontSize: 13, opacity: 0.8, textAlign: 'center' }}>\n Perform your gesture. It will auto-finish after a brief pause.\n </div>\n <div style={{ display: 'flex', justifyContent: 'flex-end', width: '100%' }}>\n <Button variant=\"outline\" onClick={() => setPhase('idle')}>Cancel</Button>\n </div>\n </div>\n ) : null}\n\n {phase === 'confirm' ? (\n <div style={{ display: 'grid', gap: 12, justifyItems: 'center' }}>\n <div style={{ fontWeight: 600 }}>Step 2: Repeat to confirm</div>\n <SpeakeasyRitualPad onComplete={handleConfirm} />\n {stepsSummary ? (\n <div style={{ fontSize: 12, opacity: 0.75, width: '100%' }}>\n <div style={{ fontWeight: 600, marginBottom: 4 }}>Recorded</div>\n <ol style={{ margin: 0, paddingLeft: 18 }}>\n {stepsSummary.map((s, idx) => (\n <li key={idx}>{s}</li>\n ))}\n </ol>\n </div>\n ) : null}\n <div style={{ display: 'flex', justifyContent: 'flex-end', width: '100%', gap: 8 }}>\n <Button\n variant=\"outline\"\n onClick={() => {\n setFirst(null);\n setPhase('record');\n setError(null);\n }}\n >\n Redo\n </Button>\n <Button variant=\"outline\" onClick={() => setPhase('idle')}>Cancel</Button>\n </div>\n </div>\n ) : null}\n\n {phase === 'success' ? (\n <div style={{ display: 'grid', gap: 12 }}>\n <div style={{ fontWeight: 600 }}>Ritual registered.</div>\n <div style={{ fontSize: 13, opacity: 0.85 }}>\n You can now triple-tap to knock and perform your gesture to enter.\n </div>\n </div>\n ) : null}\n </div>\n\n <DialogFooter>\n <Button\n variant=\"outline\"\n onClick={() => {\n setOpen(false);\n }}\n >\n Close\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\nexport default SpeakeasyRegistrationDialog;\n\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from '../../primitives/ui/dialog';\nimport { Button } from '../../primitives/ui/button';\n\nimport { SpeakeasyAuth, type SpeakeasyAuthOptions } from '../auth/SpeakeasyAuth.js';\nimport { SpeakeasyNotReadyError } from '../SpeakeasyProvider.js';\nimport { createCapabilityToken } from '../auth/CapabilityIssuer.js';\nimport { randomHex } from '../auth/crypto.js';\nimport {\n createDefaultDeviceSecretProvider,\n type SpeakeasyDeviceSecretProvider,\n} from '../auth/deviceSecret.js';\nimport { isPanicGesture } from '../doorman/panic.js';\nimport type { CapabilityToken, Challenge, GestureSequence } from '../types.js';\nimport { SpeakeasyRitualPad } from './SpeakeasyRitualPad.js';\n\nexport interface SpeakeasyConsentRequest {\n requester: string;\n purpose: string;\n scopes: string[];\n}\n\nexport interface SpeakeasyConsentDialogProps {\n trigger?: React.ReactNode;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n request: SpeakeasyConsentRequest;\n authOptions?: SpeakeasyAuthOptions;\n deviceSecret?: SpeakeasyAuthOptions['deviceSecret'];\n deviceSecretProvider?: SpeakeasyDeviceSecretProvider;\n issuer?: string;\n ttlMs?: number;\n onGranted: (token: CapabilityToken) => void;\n}\n\ntype ConsentPhase = 'idle' | 'challenged' | 'locked';\n\nconst DEFAULTS = {\n challengeWindowMs: 30_000,\n maxFailures: 3,\n cooldownBaseMs: 1_000,\n lockDurationMs: 300_000,\n};\n\nexport function SpeakeasyConsentDialog({\n trigger,\n open: openProp,\n onOpenChange,\n request,\n authOptions,\n deviceSecret,\n deviceSecretProvider,\n issuer = 'bb-ui:speakeasy:consent',\n ttlMs = 300_000,\n onGranted,\n}: SpeakeasyConsentDialogProps) {\n const [openInternal, setOpenInternal] = useState(false);\n const open = openProp ?? openInternal;\n const setOpen = onOpenChange ?? setOpenInternal;\n\n const [resolvedDeviceSecret, setResolvedDeviceSecret] = useState<\n SpeakeasyAuthOptions['deviceSecret'] | undefined\n >(deviceSecret);\n\n useEffect(() => {\n let cancelled = false;\n if (deviceSecret !== undefined) {\n setResolvedDeviceSecret(deviceSecret);\n return;\n }\n\n const provider = deviceSecretProvider ?? createDefaultDeviceSecretProvider();\n provider.getOrCreateDeviceSecret().then((secret) => {\n if (!cancelled) setResolvedDeviceSecret(secret);\n });\n\n return () => {\n cancelled = true;\n };\n }, [deviceSecret, deviceSecretProvider]);\n\n // Auth is only created once deviceSecret is resolved (prevents race condition)\n const auth = useMemo(() => {\n if (resolvedDeviceSecret === undefined) {\n return null; // Not ready yet\n }\n return new SpeakeasyAuth({\n ...authOptions,\n deviceSecret: resolvedDeviceSecret,\n });\n }, [authOptions, resolvedDeviceSecret]);\n\n const [phase, setPhase] = useState<ConsentPhase>('idle');\n const [challenge, setChallenge] = useState<Challenge | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [failures, setFailures] = useState(0);\n const [cooldownUntil, setCooldownUntil] = useState<number | null>(null);\n const [lockUntil, setLockUntil] = useState<number | null>(null);\n\n useEffect(() => {\n if (!open) {\n setPhase('idle');\n setChallenge(null);\n setError(null);\n setFailures(0);\n setCooldownUntil(null);\n setLockUntil(null);\n }\n }, [open]);\n\n useEffect(() => {\n if (!cooldownUntil) return;\n const remaining = cooldownUntil - Date.now();\n if (remaining <= 0) {\n setCooldownUntil(null);\n return;\n }\n const id = setTimeout(() => setCooldownUntil(null), remaining);\n return () => clearTimeout(id);\n }, [cooldownUntil]);\n\n useEffect(() => {\n if (!lockUntil) return;\n const remaining = lockUntil - Date.now();\n if (remaining <= 0) {\n setLockUntil(null);\n setPhase('idle');\n return;\n }\n const id = setTimeout(() => {\n setLockUntil(null);\n setPhase('idle');\n }, remaining);\n return () => clearTimeout(id);\n }, [lockUntil]);\n\n const begin = useCallback(async () => {\n setError(null);\n\n if (!auth) {\n // User-friendly message for UI (matches SpeakeasyNotReadyError semantics)\n setError('Initializing secure storage. Please wait a moment.');\n return;\n }\n\n if (!(await auth.isRegistered())) {\n setError('No ritual is registered on this device yet.');\n return;\n }\n\n if (lockUntil && Date.now() < lockUntil) {\n setPhase('locked');\n return;\n }\n\n const now = Date.now();\n const next: Challenge = {\n nonce: randomHex(32),\n salt: randomHex(16),\n issuedAt: now,\n expiresAt: now + DEFAULTS.challengeWindowMs,\n };\n setChallenge(next);\n setPhase('challenged');\n }, [auth, lockUntil]);\n\n const onRitualComplete = useCallback(\n async (sequence: GestureSequence) => {\n if (!challenge || !auth) return;\n\n if (Date.now() > challenge.expiresAt) {\n setError('Challenge expired. Try again.');\n setPhase('idle');\n setChallenge(null);\n return;\n }\n\n // Panic ritual always locks in consent flows.\n if (isPanicGesture(sequence)) {\n const now = Date.now();\n setLockUntil(now + DEFAULTS.lockDurationMs);\n setPhase('locked');\n setChallenge(null);\n setError('Locked (panic).');\n return;\n }\n\n const result = await auth.verifyGesture(sequence, challenge);\n if (!result.ok) {\n const nextFailures = failures + 1;\n setFailures(nextFailures);\n\n if (nextFailures >= DEFAULTS.maxFailures) {\n const now = Date.now();\n setLockUntil(now + DEFAULTS.lockDurationMs);\n setPhase('locked');\n setChallenge(null);\n setError('Too many attempts. Locked.');\n return;\n }\n\n const cooldownMs = DEFAULTS.cooldownBaseMs * Math.pow(2, nextFailures - 1);\n setCooldownUntil(Date.now() + cooldownMs);\n setError('Incorrect ritual.');\n setPhase('idle');\n setChallenge(null);\n return;\n }\n\n const verifier = await auth.getVerifier();\n if (!verifier) {\n setError('No ritual is registered on this device yet.');\n setPhase('idle');\n setChallenge(null);\n return;\n }\n\n const token = await createCapabilityToken({\n verifierKeyHex: verifier.hash,\n issuer,\n scopes: request.scopes,\n ttlMs,\n constraints: { maxUses: 1, allowedOrigins: [verifier.domain] },\n });\n\n onGranted(token);\n setOpen(false);\n },\n [auth, challenge, failures, issuer, request.scopes, ttlMs, onGranted, setOpen]\n );\n\n const remainingLockSeconds = lockUntil ? Math.max(0, Math.ceil((lockUntil - Date.now()) / 1000)) : 0;\n const remainingCooldownMs = cooldownUntil ? Math.max(0, cooldownUntil - Date.now()) : 0;\n\n return (\n <Dialog open={open} onOpenChange={setOpen}>\n {trigger ? <DialogTrigger asChild>{trigger}</DialogTrigger> : null}\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Consent gate</DialogTitle>\n <DialogDescription>\n {request.requester} requests speakeasy access for: {request.purpose}\n </DialogDescription>\n </DialogHeader>\n\n <div style={{ display: 'grid', gap: 12 }}>\n {error ? (\n <div\n style={{\n padding: '10px 12px',\n borderRadius: 10,\n border: '1px solid rgba(239,68,68,0.35)',\n background: 'rgba(239,68,68,0.10)',\n color: 'rgba(255,255,255,0.92)',\n fontSize: 13,\n }}\n >\n {error}\n </div>\n ) : null}\n\n {phase === 'locked' ? (\n <div style={{ fontSize: 13, opacity: 0.85 }}>\n Locked. Try again in {remainingLockSeconds}s.\n </div>\n ) : null}\n\n {phase === 'challenged' ? (\n <div style={{ display: 'grid', gap: 12, justifyItems: 'center' }}>\n <div style={{ fontWeight: 600 }}>Perform ritual</div>\n <SpeakeasyRitualPad onComplete={onRitualComplete} />\n </div>\n ) : null}\n\n {phase === 'idle' ? (\n <div style={{ display: 'grid', gap: 10 }}>\n <div style={{ fontSize: 13, opacity: 0.85 }}>\n Scopes: <code>{request.scopes.join(', ')}</code>\n </div>\n <div style={{ display: 'flex', justifyContent: 'flex-end', gap: 8 }}>\n <Button variant=\"outline\" onClick={() => setOpen(false)}>\n Deny\n </Button>\n <Button onClick={begin} disabled={remainingCooldownMs > 0}>\n {remainingCooldownMs > 0\n ? `Cooldown (${Math.ceil(remainingCooldownMs / 1000)}s)`\n : 'Perform ritual'}\n </Button>\n </div>\n </div>\n ) : null}\n </div>\n\n <DialogFooter>\n <Button variant=\"outline\" onClick={() => setOpen(false)}>\n Close\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\nexport default SpeakeasyConsentDialog;\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/speakeasy/types.ts","../../src/speakeasy/hooks/useGestureRecognizer.ts","../../src/speakeasy/doorman/DoormanStateMachine.ts","../../src/primitives/atoms/GliaErrorBoundary/useErrorBoundary.tsx","../../src/primitives/atoms/GliaErrorBoundary/GliaErrorBoundary.tsx","../../src/speakeasy/auth/crypto.ts","../../src/speakeasy/auth/storage.ts","../../src/speakeasy/auth/SpeakeasyAuth.ts","../../src/speakeasy/auth/CapabilityIssuer.ts","../../src/speakeasy/doorman/panic.ts","../../src/speakeasy/auth/deviceSecret.ts","../../src/speakeasy/SpeakeasyProvider.tsx","../../src/speakeasy/components/SpeakeasyOrb.tsx","../../src/speakeasy/components/SpeakeasyRitualPad.tsx","../../../../node_modules/@radix-ui/primitive/src/primitive.tsx","../../../../node_modules/@radix-ui/react-compose-refs/src/compose-refs.tsx","../../../../node_modules/@radix-ui/react-context/src/create-context.tsx","../../../../node_modules/@radix-ui/react-use-layout-effect/src/use-layout-effect.tsx","../../../../node_modules/@radix-ui/react-id/src/id.tsx","../../../../node_modules/@radix-ui/react-use-controllable-state/src/use-controllable-state.tsx","../../../../node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot/src/slot.tsx","../../../../node_modules/@radix-ui/react-primitive/src/primitive.tsx","../../../../node_modules/@radix-ui/react-use-callback-ref/src/use-callback-ref.tsx","../../../../node_modules/@radix-ui/react-use-escape-keydown/src/use-escape-keydown.tsx","../../../../node_modules/@radix-ui/react-dismissable-layer/src/dismissable-layer.tsx","../../../../node_modules/@radix-ui/react-focus-scope/src/focus-scope.tsx","../../../../node_modules/@radix-ui/react-portal/src/portal.tsx","../../../../node_modules/@radix-ui/react-presence/src/use-state-machine.tsx","../../../../node_modules/@radix-ui/react-presence/src/presence.tsx","../../../../node_modules/@radix-ui/react-focus-guards/src/focus-guards.tsx","../../../../node_modules/react-remove-scroll/node_modules/tslib/tslib.es6.mjs","../../../../node_modules/react-remove-scroll-bar/dist/es2015/constants.js","../../../../node_modules/use-callback-ref/dist/es2015/assignRef.js","../../../../node_modules/use-callback-ref/dist/es2015/useRef.js","../../../../node_modules/use-callback-ref/dist/es2015/useMergeRef.js","../../../../node_modules/use-sidecar/node_modules/tslib/tslib.es6.mjs","../../../../node_modules/use-sidecar/dist/es2015/medium.js","../../../../node_modules/use-sidecar/dist/es2015/exports.js","../../../../node_modules/react-remove-scroll/dist/es2015/medium.js","../../../../node_modules/react-remove-scroll/dist/es2015/UI.js","../../../../node_modules/get-nonce/dist/es2015/index.js","../../../../node_modules/react-style-singleton/dist/es2015/singleton.js","../../../../node_modules/react-style-singleton/dist/es2015/hook.js","../../../../node_modules/react-style-singleton/dist/es2015/component.js","../../../../node_modules/react-remove-scroll-bar/dist/es2015/utils.js","../../../../node_modules/react-remove-scroll-bar/dist/es2015/component.js","../../../../node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js","../../../../node_modules/react-remove-scroll/dist/es2015/handleScroll.js","../../../../node_modules/react-remove-scroll/dist/es2015/SideEffect.js","../../../../node_modules/react-remove-scroll/dist/es2015/sidecar.js","../../../../node_modules/react-remove-scroll/dist/es2015/Combination.js","../../../../node_modules/aria-hidden/dist/es2015/index.js","../../../../node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot/src/slot.tsx","../../../../node_modules/@radix-ui/react-dialog/src/dialog.tsx","../../src/lib/utils.ts","../../src/primitives/ui/dialog.tsx","../../../../node_modules/@radix-ui/react-slot/src/slot.tsx","../../src/primitives/ui/button.tsx","../../../../node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-slot/src/slot.tsx","../../../../node_modules/@radix-ui/react-alert-dialog/src/alert-dialog.tsx","../../src/primitives/ui/alert-dialog.tsx","../../src/speakeasy/components/SpeakeasyRegistrationDialog.tsx","../../src/speakeasy/components/SpeakeasyConsentDialog.tsx"],"names":["useState","useCallback","jsx","randomHex","createContext","useContext","useMemo","useRef","useEffect","jsxs","React4","React5","createScope","nextScopes","useLayoutEffect","React6","React","React7","React8","value","Slot","React9","props","Node","React10","React11","React12","React13","node","handleAndDispatchPointerDownOutsideEvent","React14","handleFocusIn","handleFocusOut","handleMutations","container","React15","ReactDOM","React16","React23","getElementRef","count","React17","__assign","useCallbackRef","React18","__rest","cbs","React19","React20","SideCar","React21","React24","React25","Style","React26","createSlot","createSlotClone","React27","isSlottable","mergeProps","SLOTTABLE_IDENTIFIER","PORTAL_NAME","Fragment","createContext2","Portal","Dialog","DialogTrigger","DialogPortal","DialogOverlay","DialogContent","DialogTitle","DialogDescription","React29","Slottable","TRIGGER_NAME","React31","OVERLAY_NAME","CONTENT_NAME","TITLE_NAME","DescriptionWarning","DESCRIPTION_NAME","Root","Trigger","Overlay","Content","Title","Description","AlertDialog","AlertDialogTrigger","AlertDialogPortal","Portal2","AlertDialogOverlay","AlertDialogContent","AlertDialogTitle","AlertDialogDescription","AlertDialogAction","AlertDialogCancel"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Speakeasy Doorman - Type Definitions\n *\n * Gesture-based authentication ritual for gating entry into privileged UI/runtime mode.\n */\n\n// ============================================================================\n// Gesture Types\n// ============================================================================\n\nexport type GestureStepType = 'tap' | 'hold' | 'radial_drag' | 'flick';\n\nexport interface TapStep {\n type: 'tap';\n count: number;\n region: 'center' | 'edge';\n}\n\nexport interface HoldStep {\n type: 'hold';\n durationMs: number;\n region: 'center' | 'edge';\n}\n\nexport interface RadialDragStep {\n type: 'radial_drag';\n fromAngle: number; // degrees, 0 = right, 90 = up\n toAngle: number;\n notches: number; // discrete angular positions hit\n}\n\nexport interface FlickStep {\n type: 'flick';\n direction: 'up' | 'down' | 'left' | 'right';\n velocity: number; // px/ms\n}\n\nexport type GestureStep = TapStep | HoldStep | RadialDragStep | FlickStep;\n\nexport interface GestureSequence {\n steps: GestureStep[];\n totalDurationMs: number;\n rhythmHash: string; // SHA256 of timing intervals (anti-replay)\n timestamp: number; // When gesture started\n}\n\n// ============================================================================\n// Doorman State Machine Types\n// ============================================================================\n\nexport type DoormanState =\n | 'IDLE'\n | 'CHALLENGED'\n | 'VERIFYING'\n | 'ADMITTED'\n | 'DECOY'\n | 'COOLDOWN'\n | 'LOCKED';\n\nexport type DoormanEvent =\n | { type: 'KNOCK_DETECTED'; timestamp: number }\n | { type: 'GESTURE_COMPLETE'; gestureData: GestureSequence }\n | { type: 'VERIFICATION_SUCCESS'; capability: CapabilityToken }\n | { type: 'VERIFICATION_FAILURE'; reason: string }\n | { type: 'CHALLENGE_TIMEOUT' }\n | { type: 'COOLDOWN_ELAPSED' }\n | { type: 'LOCK_EXPIRED' }\n | { type: 'EXIT_REQUESTED' }\n | { type: 'ADMISSION_TIMEOUT' }\n | { type: 'PANIC_GESTURE'; decoyMode: boolean };\n\nexport interface DoormanConfig {\n challengeWindowMs: number; // Time to complete gesture after knock (default: 30s)\n admissionTtlMs: number; // Duration of speakeasy session (default: 5min)\n decoyTtlMs: number; // Duration of decoy mode session (default: 1min)\n maxConsecutiveFailures: number; // Before lockout (default: 3)\n cooldownBaseMs: number; // Exponential backoff base (default: 1s)\n lockDurationMs: number; // Lockout duration (default: 5min)\n panicGestureEnabled: boolean; // Enable decoy mode trigger\n panicAction: 'lock' | 'decoy';\n panicLockMultiplier: number; // Multiplier on lockDurationMs for panic\n}\n\nexport const DEFAULT_DOORMAN_CONFIG: DoormanConfig = {\n challengeWindowMs: 30_000,\n admissionTtlMs: 300_000,\n decoyTtlMs: 60_000,\n maxConsecutiveFailures: 3,\n cooldownBaseMs: 1_000,\n lockDurationMs: 300_000,\n panicGestureEnabled: true,\n panicAction: 'lock',\n panicLockMultiplier: 2,\n};\n\nexport interface DoormanContext {\n state: DoormanState;\n challenge: Challenge | null;\n consecutiveFailures: number;\n cooldownEndsAt: number | null;\n lockEndsAt: number | null;\n admissionEndsAt: number | null;\n capability: CapabilityToken | null;\n}\n\n// ============================================================================\n// Authentication Types\n// ============================================================================\n\nexport interface Challenge {\n nonce: string; // 32-byte hex random\n salt: string; // 16-byte hex random\n issuedAt: number; // timestamp\n expiresAt: number; // timestamp\n}\n\nexport interface Verifier {\n /** KDF output (MVP stores this verifier directly) */\n hash: string;\n /** Random salt used during registration (hex) */\n salt: string;\n /** Domain binding for anti-phishing */\n domain: string;\n /** When verifier was created */\n createdAt: number;\n /** Schema/version for forwards compatibility */\n version: 1;\n}\n\nexport interface CapabilityToken {\n /** Token ID for revocation */\n tokenId: string;\n /** Issuer public key hex */\n issuer: string;\n /** Scope patterns (e.g., \"speakeasy.*\", \"speakeasy.private_feeds\") */\n scopes: string[];\n /** Unix timestamp - token invalid before */\n notBefore: number;\n /** Unix timestamp - token invalid after */\n expiresAt: number;\n /** Optional constraints */\n constraints?: {\n maxUses?: number;\n allowedOrigins?: string[];\n };\n /** Ed25519 signature over payload */\n signature: string;\n}\n\n// ============================================================================\n// Gesture Recognizer Types\n// ============================================================================\n\nexport interface GestureRecognizerConfig {\n /** Tap: max duration to count as tap (default: 200ms) */\n tapMaxDurationMs: number;\n /** Tap: max movement to count as tap (default: 10px) */\n tapMaxMovementPx: number;\n /** Tap: max interval between multi-taps (default: 300ms) */\n tapIntervalMs: number;\n /** Hold: min duration to count as hold (default: 500ms) */\n holdMinDurationMs: number;\n /** Drag: min distance to register (default: 20px) */\n dragMinDistancePx: number;\n /** Flick: min velocity to register (default: 0.5 px/ms) */\n flickMinVelocity: number;\n /** Radial: notch angle size (default: 30 degrees) */\n radialNotchDegrees: number;\n}\n\nexport const DEFAULT_GESTURE_CONFIG: GestureRecognizerConfig = {\n tapMaxDurationMs: 200,\n tapMaxMovementPx: 10,\n tapIntervalMs: 300,\n holdMinDurationMs: 500,\n dragMinDistancePx: 20,\n flickMinVelocity: 0.5,\n radialNotchDegrees: 30,\n};\n\nexport interface Point {\n x: number;\n y: number;\n}\n\nexport interface GestureRecognizerState {\n isActive: boolean;\n startPoint: Point | null;\n currentPoint: Point | null;\n startTime: number | null;\n steps: GestureStep[];\n pendingTapCount: number;\n}\n\n// ============================================================================\n// Orb Component Types\n// ============================================================================\n\nexport type OrbState =\n | 'idle'\n | 'challenged'\n | 'verifying'\n | 'admitted'\n | 'decoy'\n | 'locked';\n\nexport interface OrbVisualConfig {\n /** Base orb size in pixels */\n size: number;\n /** Glow intensity (0-1) for each state */\n glowIntensity: Record<OrbState, number>;\n /** Pulse speed (ms) for each state */\n pulseSpeed: Record<OrbState, number>;\n /** Colors for each state */\n colors: Record<OrbState, string>;\n}\n\nexport const DEFAULT_ORB_CONFIG: OrbVisualConfig = {\n size: 64,\n glowIntensity: {\n idle: 0.2,\n challenged: 0.6,\n verifying: 0.8,\n admitted: 1.0,\n decoy: 0.35,\n locked: 0.1,\n },\n pulseSpeed: {\n idle: 4000,\n challenged: 1000,\n verifying: 500,\n admitted: 2000,\n decoy: 1200,\n locked: 0,\n },\n colors: {\n idle: 'var(--text-muted, #6b7280)',\n challenged: 'var(--accent, #d4a84b)',\n verifying: 'var(--accent, #d4a84b)',\n admitted: 'var(--success, #22c55e)',\n decoy: 'var(--accent, #d4a84b)',\n locked: 'var(--error, #ef4444)',\n },\n};\n\n// ============================================================================\n// Speakeasy Context Types\n// ============================================================================\n\n/**\n * Public context - safe for all components.\n * Contains only read-only state and non-sensitive actions.\n */\nexport interface SpeakeasyPublicContextValue {\n /** Current doorman state */\n state: DoormanState;\n /** Whether the provider is fully initialized (device secret resolved) */\n isReady: boolean;\n /** Whether user is in speakeasy mode */\n isAdmitted: boolean;\n /** Whether user is in panic/decoy mode */\n isDecoy: boolean;\n /** Initiate the knock sequence */\n knock: () => void;\n /** Exit speakeasy mode */\n exit: () => void;\n /** Time remaining in current state (ms) */\n timeRemaining: number | null;\n}\n\n/**\n * Private context - only for trusted components.\n * Contains sensitive capability data and registration methods.\n */\nexport interface SpeakeasyPrivateContextValue {\n /** Current capability token (if admitted) */\n capability: CapabilityToken | null;\n /** Whether gesture secret has been registered */\n isRegistered: boolean;\n /** Register a new gesture secret */\n register: (gesture: GestureSequence) => Promise<void>;\n /** Clear the registered gesture secret */\n clearRegistration: () => Promise<void>;\n /** Submit a gesture for verification (typical entry flow) */\n submitGesture: (gesture: GestureSequence) => Promise<void>;\n}\n\n/**\n * Combined context value (legacy - deprecated).\n * Use SpeakeasyPublicContextValue or SpeakeasyPrivateContextValue instead.\n */\nexport interface SpeakeasyContextValue\n extends SpeakeasyPublicContextValue,\n SpeakeasyPrivateContextValue {}\n","/**\n * useGestureRecognizer - Hook for capturing speakeasy gesture sequences\n *\n * Recognizes:\n * - Tap sequences (single, double, triple+)\n * - Hold gestures (with configurable threshold)\n * - Radial drags (angle calculation, notch detection)\n * - Flicks (direction + velocity)\n *\n * Outputs a GestureSequence with timing data for verification.\n */\n\nimport { useCallback, useRef, useState } from 'react';\nimport {\n DEFAULT_GESTURE_CONFIG,\n type GestureRecognizerConfig,\n type GestureRecognizerState,\n type GestureSequence,\n type GestureStep,\n type Point,\n} from '../types.js';\n\ninterface UseGestureRecognizerOptions {\n /** Configuration overrides */\n config?: Partial<GestureRecognizerConfig>;\n /** Center point of the orb (for radial calculations) */\n centerRef: React.RefObject<HTMLElement | null>;\n /** Called when a complete gesture sequence is detected */\n onGestureComplete?: (sequence: GestureSequence) => void;\n /** Called when gesture recognition starts */\n onGestureStart?: () => void;\n /** Called on each gesture step */\n onGestureStep?: (step: GestureStep) => void;\n}\n\ninterface UseGestureRecognizerReturn {\n /** Current recognizer state */\n state: GestureRecognizerState;\n /** Accumulated steps */\n steps: GestureStep[];\n /** Whether actively capturing */\n isCapturing: boolean;\n /** Bind these to your target element */\n handlers: {\n onPointerDown: (e: React.PointerEvent) => void;\n onPointerMove: (e: React.PointerEvent) => void;\n onPointerUp: (e: React.PointerEvent) => void;\n onPointerCancel: (e: React.PointerEvent) => void;\n };\n /** Start capturing a new gesture sequence */\n startCapture: () => void;\n /** End capture and get the sequence */\n endCapture: () => Promise<GestureSequence | null>;\n /** Reset without emitting */\n reset: () => void;\n}\n\n/**\n * Calculate distance between two points\n */\nfunction distance(a: Point, b: Point): number {\n return Math.sqrt((b.x - a.x) ** 2 + (b.y - a.y) ** 2);\n}\n\n/**\n * Calculate angle from center to point (degrees, 0 = right, CCW positive)\n */\nfunction angleFromCenter(center: Point, point: Point): number {\n const dx = point.x - center.x;\n const dy = center.y - point.y; // Flip Y for standard math coords\n const radians = Math.atan2(dy, dx);\n return ((radians * 180) / Math.PI + 360) % 360;\n}\n\n/**\n * Determine region (center vs edge) based on distance from center\n */\nfunction getRegion(center: Point, point: Point, threshold: number): 'center' | 'edge' {\n return distance(center, point) < threshold ? 'center' : 'edge';\n}\n\n/**\n * Calculate rhythm hash from timing intervals (anti-replay)\n */\nasync function calculateRhythmHash(timings: number[]): Promise<string> {\n const data = new TextEncoder().encode(timings.join(','));\n const subtle = globalThis.crypto?.subtle;\n if (!subtle) {\n throw new Error('[Speakeasy] crypto.subtle is required');\n }\n const hashBuffer = await subtle.digest('SHA-256', data as unknown as BufferSource);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');\n}\n\nexport function useGestureRecognizer(\n options: UseGestureRecognizerOptions\n): UseGestureRecognizerReturn {\n const config = { ...DEFAULT_GESTURE_CONFIG, ...options.config };\n const { centerRef, onGestureComplete, onGestureStart, onGestureStep } = options;\n\n // State\n const [state, setState] = useState<GestureRecognizerState>({\n isActive: false,\n startPoint: null,\n currentPoint: null,\n startTime: null,\n steps: [],\n pendingTapCount: 0,\n });\n\n // Refs for tracking across events\n const stepsRef = useRef<GestureStep[]>([]);\n const timingsRef = useRef<number[]>([]);\n const captureStartRef = useRef<number | null>(null);\n const pointerStartRef = useRef<{ point: Point; time: number } | null>(null);\n const lastTapTimeRef = useRef<number>(0);\n const tapCountRef = useRef<number>(0);\n const tapTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const isDraggingRef = useRef(false);\n const dragStartAngleRef = useRef<number | null>(null);\n const notchesHitRef = useRef<Set<number>>(new Set());\n\n /**\n * Get center point of the orb\n */\n const getCenter = useCallback((): Point => {\n if (!centerRef.current) {\n return { x: 0, y: 0 };\n }\n const rect = centerRef.current.getBoundingClientRect();\n return {\n x: rect.left + rect.width / 2,\n y: rect.top + rect.height / 2,\n };\n }, [centerRef]);\n\n /**\n * Add a step to the sequence\n */\n const addStep = useCallback(\n (step: GestureStep) => {\n stepsRef.current.push(step);\n timingsRef.current.push(Date.now() - (captureStartRef.current || Date.now()));\n setState((s) => ({ ...s, steps: [...stepsRef.current] }));\n onGestureStep?.(step);\n },\n [onGestureStep]\n );\n\n /**\n * Start capturing a new gesture sequence\n */\n const startCapture = useCallback(() => {\n stepsRef.current = [];\n timingsRef.current = [];\n captureStartRef.current = Date.now();\n tapCountRef.current = 0;\n setState({\n isActive: true,\n startPoint: null,\n currentPoint: null,\n startTime: Date.now(),\n steps: [],\n pendingTapCount: 0,\n });\n onGestureStart?.();\n }, [onGestureStart]);\n\n /**\n * End capture and return the sequence\n */\n const endCapture = useCallback(async (): Promise<GestureSequence | null> => {\n const captureStart = captureStartRef.current;\n if (!captureStart) return null;\n\n // Flush any pending taps\n if (tapCountRef.current > 0 && tapTimeoutRef.current) {\n clearTimeout(tapTimeoutRef.current);\n tapTimeoutRef.current = null;\n const center = getCenter();\n const lastPoint = pointerStartRef.current?.point || center;\n const region = getRegion(center, lastPoint, (centerRef.current?.clientWidth || 64) / 3);\n addStep({ type: 'tap', count: tapCountRef.current, region });\n tapCountRef.current = 0;\n }\n\n const totalDurationMs = Date.now() - captureStart;\n const rhythmHash = await calculateRhythmHash(timingsRef.current);\n\n const sequence: GestureSequence = {\n steps: [...stepsRef.current],\n totalDurationMs,\n rhythmHash,\n timestamp: captureStart,\n };\n\n onGestureComplete?.(sequence);\n captureStartRef.current = null;\n pointerStartRef.current = null;\n isDraggingRef.current = false;\n dragStartAngleRef.current = null;\n notchesHitRef.current.clear();\n setState((s) => ({\n ...s,\n isActive: false,\n startPoint: null,\n currentPoint: null,\n startTime: null,\n pendingTapCount: 0,\n }));\n return sequence;\n }, [getCenter, centerRef, addStep, onGestureComplete]);\n\n /**\n * Reset without emitting\n */\n const reset = useCallback(() => {\n if (tapTimeoutRef.current) clearTimeout(tapTimeoutRef.current);\n stepsRef.current = [];\n timingsRef.current = [];\n captureStartRef.current = null;\n pointerStartRef.current = null;\n tapCountRef.current = 0;\n isDraggingRef.current = false;\n dragStartAngleRef.current = null;\n notchesHitRef.current.clear();\n setState({\n isActive: false,\n startPoint: null,\n currentPoint: null,\n startTime: null,\n steps: [],\n pendingTapCount: 0,\n });\n }, []);\n\n /**\n * Handle pointer down\n */\n const onPointerDown = useCallback(\n (e: React.PointerEvent) => {\n if (!state.isActive) return;\n\n try {\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n } catch {\n // Ignore if pointer capture isn't supported\n }\n\n const point = { x: e.clientX, y: e.clientY };\n const now = Date.now();\n\n pointerStartRef.current = { point, time: now };\n isDraggingRef.current = false;\n notchesHitRef.current.clear();\n\n const center = getCenter();\n dragStartAngleRef.current = angleFromCenter(center, point);\n const notch = Math.floor(dragStartAngleRef.current / config.radialNotchDegrees);\n notchesHitRef.current.add(notch);\n\n setState((s) => ({ ...s, startPoint: point, currentPoint: point }));\n },\n [state.isActive, config.radialNotchDegrees, getCenter]\n );\n\n /**\n * Handle pointer move\n */\n const onPointerMove = useCallback(\n (e: React.PointerEvent) => {\n if (!state.isActive || !pointerStartRef.current) return;\n\n const point = { x: e.clientX, y: e.clientY };\n const center = getCenter();\n const dist = distance(pointerStartRef.current.point, point);\n\n // Check if this is now a drag\n if (!isDraggingRef.current && dist > config.dragMinDistancePx) {\n isDraggingRef.current = true;\n }\n\n // Track radial notches during drag\n if (isDraggingRef.current && dragStartAngleRef.current !== null) {\n const currentAngle = angleFromCenter(center, point);\n const notch = Math.floor(currentAngle / config.radialNotchDegrees);\n notchesHitRef.current.add(notch);\n }\n\n setState((s) => ({ ...s, currentPoint: point }));\n },\n [state.isActive, config, getCenter]\n );\n\n /**\n * Handle pointer up\n */\n const onPointerUp = useCallback(\n (e: React.PointerEvent) => {\n if (!state.isActive || !pointerStartRef.current) return;\n\n try {\n (e.currentTarget as HTMLElement).releasePointerCapture(e.pointerId);\n } catch {\n // Ignore if pointer capture wasn't active\n }\n\n const point = { x: e.clientX, y: e.clientY };\n const now = Date.now();\n const duration = now - pointerStartRef.current.time;\n const dist = distance(pointerStartRef.current.point, point);\n const center = getCenter();\n\n if (isDraggingRef.current) {\n // Was a drag - check for radial or flick\n const velocity = dist / duration;\n\n if (velocity > config.flickMinVelocity && duration < config.tapMaxDurationMs * 2) {\n // Flick\n const dx = point.x - pointerStartRef.current.point.x;\n const dy = point.y - pointerStartRef.current.point.y;\n let direction: 'up' | 'down' | 'left' | 'right';\n if (Math.abs(dx) > Math.abs(dy)) {\n direction = dx > 0 ? 'right' : 'left';\n } else {\n direction = dy > 0 ? 'down' : 'up';\n }\n addStep({ type: 'flick', direction, velocity });\n } else if (notchesHitRef.current.size > 1) {\n // Radial drag\n const fromAngle = dragStartAngleRef.current || 0;\n const toAngle = angleFromCenter(center, point);\n addStep({\n type: 'radial_drag',\n fromAngle,\n toAngle,\n notches: notchesHitRef.current.size,\n });\n }\n } else if (duration >= config.holdMinDurationMs && dist < config.tapMaxMovementPx) {\n // Hold\n const region = getRegion(center, point, (centerRef.current?.clientWidth || 64) / 3);\n addStep({\n type: 'hold',\n durationMs: duration,\n region,\n });\n } else if (duration < config.tapMaxDurationMs && dist < config.tapMaxMovementPx) {\n // Tap\n if (tapTimeoutRef.current) {\n clearTimeout(tapTimeoutRef.current);\n }\n\n const timeSinceLastTap = now - lastTapTimeRef.current;\n if (timeSinceLastTap < config.tapIntervalMs) {\n tapCountRef.current++;\n } else {\n // Emit previous tap sequence if any\n if (tapCountRef.current > 0) {\n const region = getRegion(center, point, (centerRef.current?.clientWidth || 64) / 3);\n addStep({ type: 'tap', count: tapCountRef.current, region });\n }\n tapCountRef.current = 1;\n }\n lastTapTimeRef.current = now;\n\n // Wait for potential multi-tap\n tapTimeoutRef.current = setTimeout(() => {\n if (tapCountRef.current > 0) {\n const region = getRegion(center, point, (centerRef.current?.clientWidth || 64) / 3);\n addStep({ type: 'tap', count: tapCountRef.current, region });\n tapCountRef.current = 0;\n }\n }, config.tapIntervalMs);\n\n setState((s) => ({ ...s, pendingTapCount: tapCountRef.current }));\n }\n\n // Reset pointer tracking\n pointerStartRef.current = null;\n isDraggingRef.current = false;\n dragStartAngleRef.current = null;\n notchesHitRef.current.clear();\n setState((s) => ({ ...s, startPoint: null, currentPoint: null }));\n },\n [state.isActive, config, getCenter, centerRef, addStep]\n );\n\n /**\n * Handle pointer cancel\n */\n const onPointerCancel = useCallback((e: React.PointerEvent) => {\n try {\n (e.currentTarget as HTMLElement).releasePointerCapture(e.pointerId);\n } catch {\n // Ignore if pointer capture wasn't active\n }\n pointerStartRef.current = null;\n isDraggingRef.current = false;\n setState((s) => ({ ...s, startPoint: null, currentPoint: null }));\n }, []);\n\n return {\n state,\n steps: state.steps,\n isCapturing: state.isActive,\n handlers: {\n onPointerDown,\n onPointerMove,\n onPointerUp,\n onPointerCancel,\n },\n startCapture,\n endCapture,\n reset,\n };\n}\n\nexport default useGestureRecognizer;\n","/**\n * DoormanStateMachine - State machine for speakeasy doorman interaction\n *\n * States: IDLE → CHALLENGED → VERIFYING → ADMITTED → COOLDOWN/LOCKED\n *\n * Mirrors the HSM pattern from kernel/src/cyntra/core/topology/hsm_engine.py\n * but implemented as a Zustand store for React integration.\n */\n\nimport { create, createStore } from 'zustand';\nimport type { StoreApi } from 'zustand';\nimport { subscribeWithSelector } from 'zustand/middleware';\nimport {\n DEFAULT_DOORMAN_CONFIG,\n type DoormanState,\n type DoormanEvent,\n type DoormanConfig,\n type DoormanContext,\n type CapabilityToken,\n} from '../types.js';\n\n// ============================================================================\n// Transition Definitions\n// ============================================================================\n\ninterface Transition {\n from: DoormanState;\n to: DoormanState;\n event: DoormanEvent['type'];\n guard?: (context: DoormanContext, event: DoormanEvent) => boolean;\n action?: (context: DoormanContext, event: DoormanEvent) => Partial<DoormanContext>;\n}\n\nconst createTransitions = (config: DoormanConfig): Transition[] => [\n // IDLE → CHALLENGED: Public knock detected\n {\n from: 'IDLE',\n to: 'CHALLENGED',\n event: 'KNOCK_DETECTED',\n action: (ctx, event) => {\n const timestamp = (event as { timestamp: number }).timestamp || Date.now();\n return {\n challenge: {\n nonce: generateNonce(),\n salt: generateSalt(),\n issuedAt: timestamp,\n expiresAt: timestamp + config.challengeWindowMs,\n },\n };\n },\n },\n\n // CHALLENGED → VERIFYING: Gesture complete\n {\n from: 'CHALLENGED',\n to: 'VERIFYING',\n event: 'GESTURE_COMPLETE',\n guard: (ctx) => {\n // Check challenge not expired\n if (!ctx.challenge) return false;\n return Date.now() < ctx.challenge.expiresAt;\n },\n },\n\n // CHALLENGED → IDLE: Challenge timeout\n {\n from: 'CHALLENGED',\n to: 'IDLE',\n event: 'CHALLENGE_TIMEOUT',\n action: () => ({ challenge: null }),\n },\n\n // CHALLENGED → IDLE: User cancels\n {\n from: 'CHALLENGED',\n to: 'IDLE',\n event: 'EXIT_REQUESTED',\n action: () => ({ challenge: null }),\n },\n\n // VERIFYING → IDLE: User cancels\n {\n from: 'VERIFYING',\n to: 'IDLE',\n event: 'EXIT_REQUESTED',\n action: () => ({ challenge: null }),\n },\n\n // VERIFYING → ADMITTED: Verification success\n {\n from: 'VERIFYING',\n to: 'ADMITTED',\n event: 'VERIFICATION_SUCCESS',\n action: (ctx, event) => {\n const e = event as { type: 'VERIFICATION_SUCCESS'; capability: CapabilityToken };\n return {\n capability: e.capability,\n challenge: null,\n consecutiveFailures: 0,\n admissionEndsAt: Date.now() + config.admissionTtlMs,\n };\n },\n },\n\n // VERIFYING → COOLDOWN: Verification failure (under threshold)\n {\n from: 'VERIFYING',\n to: 'COOLDOWN',\n event: 'VERIFICATION_FAILURE',\n guard: (ctx) => ctx.consecutiveFailures + 1 < config.maxConsecutiveFailures,\n action: (ctx) => {\n const failures = ctx.consecutiveFailures + 1;\n const cooldownMs = config.cooldownBaseMs * Math.pow(2, failures - 1);\n return {\n consecutiveFailures: failures,\n cooldownEndsAt: Date.now() + cooldownMs,\n challenge: null,\n };\n },\n },\n\n // VERIFYING → LOCKED: Verification failure (at threshold)\n {\n from: 'VERIFYING',\n to: 'LOCKED',\n event: 'VERIFICATION_FAILURE',\n guard: (ctx) => ctx.consecutiveFailures + 1 >= config.maxConsecutiveFailures,\n action: () => ({\n consecutiveFailures: config.maxConsecutiveFailures,\n lockEndsAt: Date.now() + config.lockDurationMs,\n challenge: null,\n }),\n },\n\n // COOLDOWN → IDLE: Cooldown elapsed\n {\n from: 'COOLDOWN',\n to: 'IDLE',\n event: 'COOLDOWN_ELAPSED',\n action: () => ({ cooldownEndsAt: null }),\n },\n\n // LOCKED → IDLE: Lock expired\n {\n from: 'LOCKED',\n to: 'IDLE',\n event: 'LOCK_EXPIRED',\n action: () => ({\n lockEndsAt: null,\n consecutiveFailures: 0,\n }),\n },\n\n // ADMITTED → IDLE: Exit requested\n {\n from: 'ADMITTED',\n to: 'IDLE',\n event: 'EXIT_REQUESTED',\n action: () => ({\n capability: null,\n admissionEndsAt: null,\n }),\n },\n\n // ADMITTED → IDLE: Admission timeout\n {\n from: 'ADMITTED',\n to: 'IDLE',\n event: 'ADMISSION_TIMEOUT',\n action: () => ({\n capability: null,\n admissionEndsAt: null,\n }),\n },\n\n // DECOY → IDLE: Exit requested\n {\n from: 'DECOY',\n to: 'IDLE',\n event: 'EXIT_REQUESTED',\n action: () => ({\n capability: null,\n admissionEndsAt: null,\n }),\n },\n\n // DECOY → IDLE: Timeout\n {\n from: 'DECOY',\n to: 'IDLE',\n event: 'ADMISSION_TIMEOUT',\n action: () => ({\n capability: null,\n admissionEndsAt: null,\n }),\n },\n\n // Panic gesture handling (if enabled)\n // Note: PANIC_GESTURE can be dispatched from both CHALLENGED and VERIFYING states\n ...(config.panicGestureEnabled\n ? ([\n // From CHALLENGED state\n {\n from: 'CHALLENGED' as DoormanState,\n to: 'DECOY' as DoormanState,\n event: 'PANIC_GESTURE' as const,\n guard: (_ctx, event) => {\n const e = event as { type: 'PANIC_GESTURE'; decoyMode: boolean };\n return e.decoyMode === true;\n },\n action: () => ({\n admissionEndsAt: Date.now() + config.decoyTtlMs,\n challenge: null,\n capability: null,\n }),\n },\n {\n from: 'CHALLENGED' as DoormanState,\n to: 'LOCKED' as DoormanState,\n event: 'PANIC_GESTURE' as const,\n guard: (_ctx, event) => {\n const e = event as { type: 'PANIC_GESTURE'; decoyMode: boolean };\n return e.decoyMode === false;\n },\n action: () => ({\n lockEndsAt: Date.now() + config.lockDurationMs * config.panicLockMultiplier,\n challenge: null,\n capability: null,\n }),\n },\n // From VERIFYING state (panic detected after claiming verification lock)\n {\n from: 'VERIFYING' as DoormanState,\n to: 'DECOY' as DoormanState,\n event: 'PANIC_GESTURE' as const,\n guard: (_ctx, event) => {\n const e = event as { type: 'PANIC_GESTURE'; decoyMode: boolean };\n return e.decoyMode === true;\n },\n action: () => ({\n admissionEndsAt: Date.now() + config.decoyTtlMs,\n challenge: null,\n capability: null,\n }),\n },\n {\n from: 'VERIFYING' as DoormanState,\n to: 'LOCKED' as DoormanState,\n event: 'PANIC_GESTURE' as const,\n guard: (_ctx, event) => {\n const e = event as { type: 'PANIC_GESTURE'; decoyMode: boolean };\n return e.decoyMode === false;\n },\n action: () => ({\n lockEndsAt: Date.now() + config.lockDurationMs * config.panicLockMultiplier,\n challenge: null,\n capability: null,\n }),\n },\n ] as Transition[])\n : []),\n];\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\nfunction randomHex(byteLength: number): string {\n if (\n typeof globalThis.crypto === 'undefined' ||\n typeof globalThis.crypto.getRandomValues !== 'function'\n ) {\n throw new Error('[Doorman] crypto.getRandomValues is required');\n }\n\n const bytes = new Uint8Array(byteLength);\n globalThis.crypto.getRandomValues(bytes);\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\nfunction generateNonce(): string {\n return randomHex(32);\n}\n\nfunction generateSalt(): string {\n return randomHex(16);\n}\n\n// ============================================================================\n// Store Definition\n// ============================================================================\n\ninterface DoormanStore extends DoormanContext {\n config: DoormanConfig;\n transitions: Transition[];\n\n // Actions\n dispatch: (event: DoormanEvent) => void;\n reset: () => void;\n setConfig: (config: Partial<DoormanConfig>) => void;\n\n // Computed\n isAdmitted: () => boolean;\n timeRemaining: () => number | null;\n}\n\nconst INITIAL_CONTEXT: DoormanContext = {\n state: 'IDLE',\n challenge: null,\n consecutiveFailures: 0,\n cooldownEndsAt: null,\n lockEndsAt: null,\n admissionEndsAt: null,\n capability: null,\n};\n\nfunction createDoormanStoreImpl(set: StoreApi<DoormanStore>[\"setState\"], get: StoreApi<DoormanStore>[\"getState\"]): DoormanStore {\n return {\n ...INITIAL_CONTEXT,\n config: DEFAULT_DOORMAN_CONFIG,\n transitions: createTransitions(DEFAULT_DOORMAN_CONFIG),\n\n dispatch: (event: DoormanEvent) => {\n const { state, transitions, ...context } = get();\n const currentContext: DoormanContext = { state, ...context };\n\n const transition = transitions.find((t: Transition) => {\n if (t.from !== state) return false;\n if (t.event !== event.type) return false;\n if (t.guard && !t.guard(currentContext, event)) return false;\n return true;\n });\n\n if (!transition) {\n console.warn(\n `[Doorman] No valid transition from ${state} on event ${event.type}`\n );\n return;\n }\n\n const updates = transition.action?.(currentContext, event) || {};\n set({\n state: transition.to,\n ...updates,\n });\n },\n\n reset: () => {\n set(INITIAL_CONTEXT);\n },\n\n setConfig: (partialConfig: Partial<DoormanConfig>) => {\n const newConfig = { ...get().config, ...partialConfig };\n set({\n config: newConfig,\n transitions: createTransitions(newConfig),\n });\n },\n\n isAdmitted: () => get().state === 'ADMITTED',\n\n timeRemaining: () => {\n const { state, challenge, cooldownEndsAt, lockEndsAt, admissionEndsAt } =\n get();\n const now = Date.now();\n\n switch (state) {\n case 'CHALLENGED':\n return challenge ? Math.max(0, challenge.expiresAt - now) : null;\n case 'COOLDOWN':\n return cooldownEndsAt ? Math.max(0, cooldownEndsAt - now) : null;\n case 'LOCKED':\n return lockEndsAt ? Math.max(0, lockEndsAt - now) : null;\n case 'ADMITTED':\n case 'DECOY':\n return admissionEndsAt ? Math.max(0, admissionEndsAt - now) : null;\n default:\n return null;\n }\n },\n };\n}\n\n/** Factory: creates an isolated Doorman store instance with subscribeWithSelector middleware. */\nexport function createDoormanStore() {\n return createStore<DoormanStore>()(\n subscribeWithSelector((set, get) => createDoormanStoreImpl(set, get))\n );\n}\n\nexport type DoormanStoreApi = ReturnType<typeof createDoormanStore>;\n\n// Legacy singleton\nexport const useDoormanStore = create<DoormanStore>()(\n subscribeWithSelector((set, get) => createDoormanStoreImpl(set, get))\n);\n\n// ============================================================================\n// Timeout Management\n// ============================================================================\n\n/**\n * Start automatic timeout handling based on state changes.\n * Accepts an optional store instance; defaults to the legacy singleton.\n */\nexport function startDoormanTimeouts(storeApi?: DoormanStoreApi): () => void {\n const api = storeApi ?? useDoormanStore;\n\n let challengeTimeoutId: ReturnType<typeof setTimeout> | null = null;\n let cooldownTimeoutId: ReturnType<typeof setTimeout> | null = null;\n let lockTimeoutId: ReturnType<typeof setTimeout> | null = null;\n let admissionTimeoutId: ReturnType<typeof setTimeout> | null = null;\n\n const unsubscribe = api.subscribe(\n (state) => state.state,\n (doormanState, _prevState) => {\n const store = api.getState();\n\n // Clear all timeouts on state change\n if (challengeTimeoutId) clearTimeout(challengeTimeoutId);\n if (cooldownTimeoutId) clearTimeout(cooldownTimeoutId);\n if (lockTimeoutId) clearTimeout(lockTimeoutId);\n if (admissionTimeoutId) clearTimeout(admissionTimeoutId);\n\n // Set new timeout based on current state\n switch (doormanState) {\n case 'CHALLENGED':\n if (store.challenge) {\n const remaining = store.challenge.expiresAt - Date.now();\n if (remaining > 0) {\n challengeTimeoutId = setTimeout(() => {\n store.dispatch({ type: 'CHALLENGE_TIMEOUT' });\n }, remaining);\n }\n }\n break;\n\n case 'COOLDOWN':\n if (store.cooldownEndsAt) {\n const remaining = store.cooldownEndsAt - Date.now();\n if (remaining > 0) {\n cooldownTimeoutId = setTimeout(() => {\n store.dispatch({ type: 'COOLDOWN_ELAPSED' });\n }, remaining);\n }\n }\n break;\n\n case 'LOCKED':\n if (store.lockEndsAt) {\n const remaining = store.lockEndsAt - Date.now();\n if (remaining > 0) {\n lockTimeoutId = setTimeout(() => {\n store.dispatch({ type: 'LOCK_EXPIRED' });\n }, remaining);\n }\n }\n break;\n\n case 'ADMITTED':\n case 'DECOY':\n if (store.admissionEndsAt) {\n const remaining = store.admissionEndsAt - Date.now();\n if (remaining > 0) {\n admissionTimeoutId = setTimeout(() => {\n store.dispatch({ type: 'ADMISSION_TIMEOUT' });\n }, remaining);\n }\n }\n break;\n }\n }\n );\n\n return () => {\n unsubscribe();\n if (challengeTimeoutId) clearTimeout(challengeTimeoutId);\n if (cooldownTimeoutId) clearTimeout(cooldownTimeoutId);\n if (lockTimeoutId) clearTimeout(lockTimeoutId);\n if (admissionTimeoutId) clearTimeout(admissionTimeoutId);\n };\n}\n\nexport default useDoormanStore;\n","\"use client\";\n\nimport { createContext, useContext, useCallback, useState, type ReactNode } from \"react\";\n\n// ============================================================================\n// CONTEXT\n// ============================================================================\n\nexport interface ErrorBoundaryContextValue {\n throwError: (error: Error) => void;\n}\n\nexport const ErrorBoundaryContext = createContext<ErrorBoundaryContextValue | null>(null);\n\n// ============================================================================\n// HOOK\n// ============================================================================\n\n/**\n * Hook that provides a `throwError` function to trigger the nearest\n * GliaErrorBoundary from a function component.\n *\n * @example\n * ```tsx\n * const { throwError } = useErrorBoundary();\n * stream.on('error', (err) => throwError(err));\n * ```\n */\nexport function useErrorBoundary(): ErrorBoundaryContextValue {\n const ctx = useContext(ErrorBoundaryContext);\n if (!ctx) {\n throw new Error(\"useErrorBoundary must be used within a GliaErrorBoundary\");\n }\n return ctx;\n}\n\n// ============================================================================\n// ERROR THROWER (internal helper)\n// ============================================================================\n\n/**\n * Internal component that catches programmatic errors thrown via context\n * and re-throws them during render so React's error boundary catches them.\n */\nexport function ErrorThrower({ children }: { children: ReactNode }) {\n const [error, setError] = useState<Error | null>(null);\n\n if (error) {\n throw error;\n }\n\n const throwError = useCallback((err: Error) => {\n setError(err);\n }, []);\n\n return (\n <ErrorBoundaryContext.Provider value={{ throwError }}>\n {children}\n </ErrorBoundaryContext.Provider>\n );\n}\n","\"use client\";\n\nimport React, { Component, type ReactNode, type ErrorInfo } from \"react\";\nimport { ErrorThrower } from \"./useErrorBoundary\";\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface ErrorFallbackProps {\n error: Error;\n reset: () => void;\n}\n\nexport interface GliaErrorBoundaryProps {\n children: ReactNode;\n /** Custom fallback UI. Receives error + reset function. */\n fallback?: ReactNode | ((props: ErrorFallbackProps) => ReactNode);\n /** Called when an error is caught. Use for telemetry/logging. */\n onError?: (error: Error, errorInfo: ErrorInfo) => void;\n /** Auto-retry after this many ms (0 = no auto-retry) */\n autoRetryMs?: number;\n /** Glass-themed fallback styling */\n variant?: \"inline\" | \"card\" | \"fullscreen\";\n}\n\ninterface GliaErrorBoundaryState {\n error: Error | null;\n}\n\n// ============================================================================\n// DEFAULT FALLBACK (glass-themed)\n// ============================================================================\n\nfunction DefaultFallback({\n error,\n reset,\n variant = \"card\",\n}: ErrorFallbackProps & { variant?: \"inline\" | \"card\" | \"fullscreen\" }) {\n const isFullscreen = variant === \"fullscreen\";\n const isInline = variant === \"inline\";\n\n const containerStyle: React.CSSProperties = isFullscreen\n ? {\n position: \"fixed\",\n inset: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n zIndex: 9999,\n background: \"rgba(0, 0, 0, 0.6)\",\n backdropFilter: \"blur(12px)\",\n WebkitBackdropFilter: \"blur(12px)\",\n }\n : isInline\n ? {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 8,\n padding: \"4px 8px\",\n borderRadius: 6,\n background: \"rgba(255, 60, 60, 0.08)\",\n border: \"1px solid rgba(255, 60, 60, 0.2)\",\n }\n : {};\n\n const cardStyle: React.CSSProperties = {\n background: \"rgba(20, 20, 30, 0.85)\",\n backdropFilter: \"blur(16px)\",\n WebkitBackdropFilter: \"blur(16px)\",\n border: \"1px solid rgba(255, 255, 255, 0.08)\",\n borderRadius: 12,\n padding: isInline ? undefined : \"24px 28px\",\n maxWidth: isFullscreen ? 480 : \"100%\",\n width: isFullscreen ? \"90%\" : undefined,\n color: \"rgba(255, 255, 255, 0.9)\",\n fontFamily: \"system-ui, -apple-system, sans-serif\",\n };\n\n if (isInline) {\n return (\n <span style={containerStyle}>\n <span style={{ color: \"rgba(255, 100, 100, 0.9)\", fontSize: 12 }}>\n Error: {error.message}\n </span>\n <button\n onClick={reset}\n style={{\n background: \"none\",\n border: \"none\",\n color: \"rgba(100, 180, 255, 0.9)\",\n cursor: \"pointer\",\n fontSize: 12,\n textDecoration: \"underline\",\n padding: 0,\n }}\n >\n Retry\n </button>\n </span>\n );\n }\n\n return (\n <div style={containerStyle}>\n <div style={cardStyle}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8, marginBottom: 12 }}>\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"rgba(255, 100, 100, 0.9)\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n <span style={{ fontWeight: 600, fontSize: 15 }}>Something went wrong</span>\n </div>\n <p style={{ color: \"rgba(255, 255, 255, 0.5)\", fontSize: 13, lineHeight: 1.5, margin: \"0 0 16px\", wordBreak: \"break-word\" }}>\n {error.message}\n </p>\n <button\n onClick={reset}\n style={{\n background: \"rgba(255, 255, 255, 0.08)\",\n border: \"1px solid rgba(255, 255, 255, 0.12)\",\n borderRadius: 8,\n padding: \"8px 16px\",\n color: \"rgba(255, 255, 255, 0.9)\",\n cursor: \"pointer\",\n fontSize: 13,\n fontWeight: 500,\n transition: \"background 0.15s\",\n }}\n onMouseEnter={(e) => {\n (e.currentTarget as HTMLElement).style.background = \"rgba(255, 255, 255, 0.14)\";\n }}\n onMouseLeave={(e) => {\n (e.currentTarget as HTMLElement).style.background = \"rgba(255, 255, 255, 0.08)\";\n }}\n >\n Try again\n </button>\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// ERROR BOUNDARY (class component)\n// ============================================================================\n\nexport class GliaErrorBoundary extends Component<GliaErrorBoundaryProps, GliaErrorBoundaryState> {\n static displayName = \"GliaErrorBoundary\";\n private autoRetryTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor(props: GliaErrorBoundaryProps) {\n super(props);\n this.state = { error: null };\n }\n\n static getDerivedStateFromError(error: Error): GliaErrorBoundaryState {\n return { error };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n this.props.onError?.(error, errorInfo);\n\n if (this.props.autoRetryMs && this.props.autoRetryMs > 0) {\n this.autoRetryTimer = setTimeout(() => {\n this.reset();\n }, this.props.autoRetryMs);\n }\n }\n\n componentWillUnmount(): void {\n if (this.autoRetryTimer) {\n clearTimeout(this.autoRetryTimer);\n }\n }\n\n reset = () => {\n if (this.autoRetryTimer) {\n clearTimeout(this.autoRetryTimer);\n this.autoRetryTimer = null;\n }\n this.setState({ error: null });\n };\n\n render() {\n const { error } = this.state;\n const { children, fallback, variant = \"card\" } = this.props;\n\n if (error) {\n if (typeof fallback === \"function\") {\n return fallback({ error, reset: this.reset });\n }\n if (fallback !== undefined) {\n return fallback;\n }\n return <DefaultFallback error={error} reset={this.reset} variant={variant} />;\n }\n\n return <ErrorThrower>{children}</ErrorThrower>;\n }\n}\n","/**\n * Speakeasy crypto helpers (browser-first WebCrypto)\n */\n\nexport function utf8ToBytes(value: string): Uint8Array {\n return new TextEncoder().encode(value);\n}\n\nexport function bytesToHex(bytes: Uint8Array): string {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\nexport function hexToBytes(hex: string): Uint8Array {\n const normalized = hex.startsWith('0x') ? hex.slice(2) : hex;\n if (normalized.length % 2 !== 0 || !/^[0-9a-fA-F]*$/.test(normalized)) {\n throw new Error('[Speakeasy] Invalid hex');\n }\n const out = new Uint8Array(normalized.length / 2);\n for (let i = 0; i < out.length; i += 1) {\n out[i] = Number.parseInt(normalized.slice(i * 2, i * 2 + 2), 16);\n }\n return out;\n}\n\nexport function concatBytes(...parts: Uint8Array[]): Uint8Array {\n const totalLength = parts.reduce((sum, part) => sum + part.length, 0);\n const out = new Uint8Array(totalLength);\n let offset = 0;\n for (const part of parts) {\n out.set(part, offset);\n offset += part.length;\n }\n return out;\n}\n\nexport function randomHex(byteLength: number): string {\n if (\n typeof globalThis.crypto === 'undefined' ||\n typeof globalThis.crypto.getRandomValues !== 'function'\n ) {\n throw new Error('[Speakeasy] crypto.getRandomValues is required');\n }\n const bytes = new Uint8Array(byteLength);\n globalThis.crypto.getRandomValues(bytes);\n return bytesToHex(bytes);\n}\n\nexport function timingSafeEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false;\n let diff = 0;\n for (let i = 0; i < a.length; i += 1) {\n diff |= a[i] ^ b[i];\n }\n return diff === 0;\n}\n\nasync function requireSubtle(): Promise<SubtleCrypto> {\n const subtle = globalThis.crypto?.subtle;\n if (!subtle) {\n throw new Error('[Speakeasy] crypto.subtle is required');\n }\n return subtle;\n}\n\nexport async function sha256(data: Uint8Array): Promise<Uint8Array> {\n const subtle = await requireSubtle();\n const hash = await subtle.digest('SHA-256', data as unknown as BufferSource);\n return new Uint8Array(hash);\n}\n\nexport async function hmacSha256(\n keyBytes: Uint8Array,\n messageBytes: Uint8Array\n): Promise<Uint8Array> {\n const subtle = await requireSubtle();\n const key = await subtle.importKey(\n 'raw',\n keyBytes as unknown as BufferSource,\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign']\n );\n const sig = await subtle.sign('HMAC', key, messageBytes as unknown as BufferSource);\n return new Uint8Array(sig);\n}\n\n","/**\n * Speakeasy storage abstractions.\n *\n * bb-ui is browser-first; hosts can inject stronger storage (keychain, enclave, etc).\n */\n\nimport type { Verifier } from '../types.js';\nimport { bytesToHex, concatBytes, hexToBytes, utf8ToBytes } from './crypto.js';\n\nexport interface SpeakeasyStorage {\n getVerifier: () => Promise<Verifier | null>;\n setVerifier: (verifier: Verifier) => Promise<void>;\n clearVerifier: () => Promise<void>;\n}\n\nexport function createInMemorySpeakeasyStorage(): SpeakeasyStorage {\n let verifier: Verifier | null = null;\n return {\n async getVerifier() {\n return verifier;\n },\n async setVerifier(next) {\n verifier = next;\n },\n async clearVerifier() {\n verifier = null;\n },\n };\n}\n\nexport function createLocalStorageSpeakeasyStorage(options?: {\n key?: string;\n}): SpeakeasyStorage {\n const storageKey = options?.key ?? 'bb-ui:speakeasy:verifier:v1';\n\n return {\n async getVerifier() {\n try {\n if (typeof globalThis.localStorage === 'undefined') return null;\n const raw = globalThis.localStorage.getItem(storageKey);\n if (!raw) return null;\n return JSON.parse(raw) as Verifier;\n } catch {\n return null;\n }\n },\n async setVerifier(verifier) {\n if (typeof globalThis.localStorage === 'undefined') {\n throw new Error('[Speakeasy] localStorage is not available');\n }\n globalThis.localStorage.setItem(storageKey, JSON.stringify(verifier));\n },\n async clearVerifier() {\n try {\n if (typeof globalThis.localStorage === 'undefined') return;\n globalThis.localStorage.removeItem(storageKey);\n } catch {\n // ignore\n }\n },\n };\n}\n\nexport function createIndexedDbSpeakeasyStorage(options?: {\n dbName?: string;\n storeName?: string;\n key?: string;\n}): SpeakeasyStorage {\n const dbName = options?.dbName ?? 'bb-ui-speakeasy';\n const storeName = options?.storeName ?? 'speakeasy';\n const recordKey = options?.key ?? 'verifier';\n\n async function openDb(): Promise<IDBDatabase> {\n if (typeof globalThis.indexedDB === 'undefined') {\n throw new Error('[Speakeasy] indexedDB is not available');\n }\n\n return new Promise((resolve, reject) => {\n const request = globalThis.indexedDB.open(dbName, 1);\n request.onerror = () => reject(request.error);\n request.onsuccess = () => resolve(request.result);\n request.onupgradeneeded = () => {\n const db = request.result;\n if (!db.objectStoreNames.contains(storeName)) {\n db.createObjectStore(storeName);\n }\n };\n });\n }\n\n return {\n async getVerifier() {\n try {\n const db = await openDb();\n return await new Promise((resolve, reject) => {\n const tx = db.transaction(storeName, 'readonly');\n const store = tx.objectStore(storeName);\n const req = store.get(recordKey);\n req.onerror = () => reject(req.error);\n req.onsuccess = () => resolve((req.result ?? null) as Verifier | null);\n });\n } catch {\n return null;\n }\n },\n async setVerifier(verifier) {\n const db = await openDb();\n await new Promise<void>((resolve, reject) => {\n const tx = db.transaction(storeName, 'readwrite');\n const store = tx.objectStore(storeName);\n const req = store.put(verifier, recordKey);\n req.onerror = () => reject(req.error);\n req.onsuccess = () => resolve();\n });\n },\n async clearVerifier() {\n try {\n const db = await openDb();\n await new Promise<void>((resolve, reject) => {\n const tx = db.transaction(storeName, 'readwrite');\n const store = tx.objectStore(storeName);\n const req = store.delete(recordKey);\n req.onerror = () => reject(req.error);\n req.onsuccess = () => resolve();\n });\n } catch {\n // ignore\n }\n },\n };\n}\n\nexport function createDefaultSpeakeasyStorage(options: {\n deviceSecret: Uint8Array;\n}): SpeakeasyStorage {\n // deviceSecret is required for secure storage\n if (!options?.deviceSecret?.length) {\n throw new Error('[Speakeasy] deviceSecret is required for secure storage');\n }\n\n // Use encrypted storage with the provided deviceSecret\n if (typeof globalThis.indexedDB !== 'undefined') {\n return createEncryptedIndexedDbSpeakeasyStorage({ deviceSecret: options.deviceSecret });\n }\n if (typeof globalThis.localStorage !== 'undefined') {\n return createEncryptedLocalStorageSpeakeasyStorage({ deviceSecret: options.deviceSecret });\n }\n\n // No persistent storage available - throw error (in-memory is not secure)\n throw new Error('[Speakeasy] No secure persistent storage available (requires IndexedDB or localStorage)');\n}\n\n// =============================================================================\n// Encrypted Storage (AES-256-GCM)\n// =============================================================================\n\ninterface EncryptedPayload {\n /** Version for forward compatibility (1 = fixed salt, 2 = random salt) */\n v: 1 | 2;\n /** IV (12 bytes, hex) */\n iv: string;\n /** Ciphertext (hex) */\n ct: string;\n /** Random salt for PBKDF2 (16 bytes, hex) - only present in v2 */\n salt?: string;\n}\n\nasync function deriveEncryptionKey(\n deviceSecret: Uint8Array,\n salt: Uint8Array\n): Promise<CryptoKey> {\n const subtle = globalThis.crypto?.subtle;\n if (!subtle) {\n throw new Error('[Speakeasy] crypto.subtle is required for encrypted storage');\n }\n\n // Import device secret as key material\n // Cast to BufferSource to satisfy TypeScript with bun-types\n const keyMaterial = await subtle.importKey('raw', deviceSecret as unknown as BufferSource, 'PBKDF2', false, [\n 'deriveKey',\n ]);\n\n // Derive AES-256-GCM key using PBKDF2\n return subtle.deriveKey(\n {\n name: 'PBKDF2',\n salt: salt as unknown as BufferSource,\n iterations: 600_000,\n hash: 'SHA-256',\n },\n keyMaterial,\n { name: 'AES-GCM', length: 256 },\n false,\n ['encrypt', 'decrypt']\n );\n}\n\nasync function encryptVerifier(\n verifier: Verifier,\n deviceSecret: Uint8Array\n): Promise<EncryptedPayload> {\n const subtle = globalThis.crypto?.subtle;\n if (!subtle) {\n throw new Error('[Speakeasy] crypto.subtle is required for encrypted storage');\n }\n\n // Generate random IV (12 bytes for AES-GCM)\n const iv = new Uint8Array(12);\n globalThis.crypto.getRandomValues(iv);\n\n // Generate random salt (16 bytes) for PBKDF2 - v2 uses per-encryption salt\n const salt = new Uint8Array(16);\n globalThis.crypto.getRandomValues(salt);\n\n const key = await deriveEncryptionKey(deviceSecret, salt);\n\n const plaintext = utf8ToBytes(JSON.stringify(verifier));\n const ciphertext = await subtle.encrypt({ name: 'AES-GCM', iv: iv as unknown as BufferSource }, key, plaintext as unknown as BufferSource);\n\n return {\n v: 2,\n iv: bytesToHex(iv),\n ct: bytesToHex(new Uint8Array(ciphertext)),\n salt: bytesToHex(salt),\n };\n}\n\nasync function decryptVerifier(\n payload: EncryptedPayload,\n deviceSecret: Uint8Array\n): Promise<Verifier> {\n const subtle = globalThis.crypto?.subtle;\n if (!subtle) {\n throw new Error('[Speakeasy] crypto.subtle is required for encrypted storage');\n }\n\n if (payload.v !== 1 && payload.v !== 2) {\n throw new Error(`[Speakeasy] Unsupported encrypted payload version: ${payload.v}`);\n }\n\n const iv = hexToBytes(payload.iv);\n const ciphertext = hexToBytes(payload.ct);\n\n // v1: legacy fixed salt, v2: random salt stored in payload\n let salt: Uint8Array;\n if (payload.v === 2 && payload.salt) {\n salt = hexToBytes(payload.salt);\n } else {\n // Legacy v1 fallback: use fixed salt\n console.warn(\n 'Speakeasy: v1 encrypted payload detected. Call migrateV1ToV2() to upgrade to random-salt encryption.'\n );\n salt = utf8ToBytes('bb-ui:speakeasy:encrypted-storage:v1');\n }\n\n const key = await deriveEncryptionKey(deviceSecret, salt);\n\n const plaintext = await subtle.decrypt({ name: 'AES-GCM', iv: iv as unknown as BufferSource }, key, ciphertext as unknown as BufferSource);\n const json = new TextDecoder().decode(plaintext);\n\n return JSON.parse(json) as Verifier;\n}\n\n/**\n * Create encrypted localStorage storage.\n *\n * The verifier is encrypted with AES-256-GCM using a key derived from the\n * device secret via PBKDF2 (600,000 iterations).\n *\n * @param options.deviceSecret - The device secret to derive the encryption key from\n * @param options.key - localStorage key for the encrypted payload\n */\nexport function createEncryptedLocalStorageSpeakeasyStorage(options: {\n deviceSecret: Uint8Array;\n key?: string;\n}): SpeakeasyStorage {\n const storageKey = options.key ?? 'bb-ui:speakeasy:verifier:encrypted:v1';\n const { deviceSecret } = options;\n\n return {\n async getVerifier() {\n try {\n if (typeof globalThis.localStorage === 'undefined') return null;\n const raw = globalThis.localStorage.getItem(storageKey);\n if (!raw) return null;\n\n const payload = JSON.parse(raw) as EncryptedPayload;\n return await decryptVerifier(payload, deviceSecret);\n } catch (err) {\n console.warn('[Speakeasy] Failed to decrypt verifier:', err);\n return null;\n }\n },\n\n async setVerifier(verifier) {\n if (typeof globalThis.localStorage === 'undefined') {\n throw new Error('[Speakeasy] localStorage is not available');\n }\n\n const payload = await encryptVerifier(verifier, deviceSecret);\n globalThis.localStorage.setItem(storageKey, JSON.stringify(payload));\n },\n\n async clearVerifier() {\n try {\n if (typeof globalThis.localStorage === 'undefined') return;\n globalThis.localStorage.removeItem(storageKey);\n } catch {\n // ignore\n }\n },\n };\n}\n\n/**\n * Create encrypted IndexedDB storage.\n *\n * The verifier is encrypted with AES-256-GCM using a key derived from the\n * device secret via PBKDF2 (600,000 iterations).\n *\n * @param options.deviceSecret - The device secret to derive the encryption key from\n * @param options.dbName - IndexedDB database name\n * @param options.storeName - IndexedDB store name\n * @param options.key - Record key within the store\n */\nexport function createEncryptedIndexedDbSpeakeasyStorage(options: {\n deviceSecret: Uint8Array;\n dbName?: string;\n storeName?: string;\n key?: string;\n}): SpeakeasyStorage {\n const dbName = options.dbName ?? 'bb-ui-speakeasy-encrypted';\n const storeName = options.storeName ?? 'speakeasy';\n const recordKey = options.key ?? 'verifier';\n const { deviceSecret } = options;\n\n async function openDb(): Promise<IDBDatabase> {\n if (typeof globalThis.indexedDB === 'undefined') {\n throw new Error('[Speakeasy] indexedDB is not available');\n }\n\n return new Promise((resolve, reject) => {\n const request = globalThis.indexedDB.open(dbName, 1);\n request.onerror = () => reject(request.error);\n request.onsuccess = () => resolve(request.result);\n request.onupgradeneeded = () => {\n const db = request.result;\n if (!db.objectStoreNames.contains(storeName)) {\n db.createObjectStore(storeName);\n }\n };\n });\n }\n\n return {\n async getVerifier() {\n try {\n const db = await openDb();\n const payload = await new Promise<EncryptedPayload | null>((resolve, reject) => {\n const tx = db.transaction(storeName, 'readonly');\n const store = tx.objectStore(storeName);\n const req = store.get(recordKey);\n req.onerror = () => reject(req.error);\n req.onsuccess = () => resolve((req.result ?? null) as EncryptedPayload | null);\n });\n\n if (!payload) return null;\n return await decryptVerifier(payload, deviceSecret);\n } catch (err) {\n console.warn('[Speakeasy] Failed to decrypt verifier:', err);\n return null;\n }\n },\n\n async setVerifier(verifier) {\n const db = await openDb();\n const payload = await encryptVerifier(verifier, deviceSecret);\n\n await new Promise<void>((resolve, reject) => {\n const tx = db.transaction(storeName, 'readwrite');\n const store = tx.objectStore(storeName);\n const req = store.put(payload, recordKey);\n req.onerror = () => reject(req.error);\n req.onsuccess = () => resolve();\n });\n },\n\n async clearVerifier() {\n try {\n const db = await openDb();\n await new Promise<void>((resolve, reject) => {\n const tx = db.transaction(storeName, 'readwrite');\n const store = tx.objectStore(storeName);\n const req = store.delete(recordKey);\n req.onerror = () => reject(req.error);\n req.onsuccess = () => resolve();\n });\n } catch {\n // ignore\n }\n },\n };\n}\n\n/**\n * Create encrypted storage with automatic backend selection.\n *\n * Prefers IndexedDB, falls back to localStorage, then in-memory.\n *\n * @param deviceSecret - The device secret to derive the encryption key from\n */\nexport function createEncryptedSpeakeasyStorage(\n deviceSecret: Uint8Array\n): SpeakeasyStorage {\n try {\n if (typeof globalThis.indexedDB !== 'undefined') {\n return createEncryptedIndexedDbSpeakeasyStorage({ deviceSecret });\n }\n if (typeof globalThis.localStorage !== 'undefined') {\n return createEncryptedLocalStorageSpeakeasyStorage({ deviceSecret });\n }\n } catch {\n // ignore\n }\n // Fall back to in-memory (no encryption needed since it's ephemeral)\n console.warn(\n '[Speakeasy] Encrypted persistent storage is unavailable (IndexedDB and localStorage not found). ' +\n 'Falling back to in-memory storage — data will NOT persist across sessions.'\n );\n return createInMemorySpeakeasyStorage();\n}\n\n/**\n * Migrate a v1 encrypted payload (fixed PBKDF2 salt) to v2 (random salt).\n *\n * v1 used a fixed string as the PBKDF2 salt, meaning the same password always\n * produced the same derived key (enabling precomputation attacks). v2 generates\n * a random 16-byte salt per encryption.\n *\n * @param encryptedPayload - JSON string of the v1 EncryptedPayload\n * @param deviceSecret - The device secret used for encryption\n * @returns JSON string of the new v2 EncryptedPayload\n */\nexport async function migrateV1ToV2(\n encryptedPayload: string,\n deviceSecret: Uint8Array\n): Promise<string> {\n const payload = JSON.parse(encryptedPayload) as EncryptedPayload;\n\n if (payload.v === 2 && payload.salt) {\n // Already v2, return as-is\n return encryptedPayload;\n }\n\n // Decrypt using v1 format (fixed salt)\n const verifier = await decryptVerifier(payload, deviceSecret);\n\n // Re-encrypt using v2 format (random salt)\n const v2Payload = await encryptVerifier(verifier, deviceSecret);\n\n return JSON.stringify(v2Payload);\n}\n","/**\n * SpeakeasyAuth\n *\n * MVP \"doorman\" verifier that:\n * - stores a derived verifier key (not raw gestures)\n * - verifies gesture-derived responses against stored verifier\n *\n * Note: In the MVP, leakage of the stored verifier key compromises the ritual.\n */\n\nimport type { Challenge, GestureSequence, GestureStep, Verifier } from '../types.js';\nimport {\n bytesToHex,\n concatBytes,\n hmacSha256,\n randomHex,\n sha256,\n timingSafeEqual,\n utf8ToBytes,\n hexToBytes,\n} from './crypto.js';\nimport type { SpeakeasyStorage } from './storage.js';\nimport { createDefaultSpeakeasyStorage } from './storage.js';\n\nexport interface SpeakeasyAuthVerifyResult {\n ok: boolean;\n reason?: 'not_registered' | 'domain_mismatch' | 'invalid_gesture';\n response?: string;\n}\n\nexport interface SpeakeasyAuthOptions {\n storage?: SpeakeasyStorage;\n /**\n * Domain binding for anti-phishing. Defaults to `location.origin` when available.\n */\n domain?: string;\n /**\n * Optional device-bound secret (host-provided). This should NOT be the raw gesture.\n */\n deviceSecret?: string | Uint8Array;\n}\n\nfunction defaultDomain(): string {\n if (typeof globalThis.location !== 'undefined' && globalThis.location?.origin) {\n return globalThis.location.origin;\n }\n throw new Error(\n 'SpeakeasyAuth: domain must be explicitly provided in non-browser environments'\n );\n}\n\nfunction normalizeDeviceSecret(secret: string | Uint8Array | undefined): Uint8Array {\n if (!secret) {\n throw new Error('[Speakeasy] deviceSecret is required for secure verifier derivation');\n }\n if (typeof secret === 'string') return utf8ToBytes(secret);\n return secret;\n}\n\nfunction canonicalizeGestureStep(step: GestureStep): string {\n switch (step.type) {\n case 'tap':\n return `tap:${step.count}:${step.region}`;\n case 'hold': {\n const durationBucket = Math.round(step.durationMs / 50) * 50;\n return `hold:${durationBucket}:${step.region}`;\n }\n case 'radial_drag': {\n const from = Math.round(step.fromAngle);\n const to = Math.round(step.toAngle);\n return `radial:${from}:${to}:${step.notches}`;\n }\n case 'flick': {\n const velocityBucket = Math.round(step.velocity * 100) / 100;\n return `flick:${step.direction}:${velocityBucket}`;\n }\n }\n}\n\nfunction canonicalizeGestureSequence(sequence: GestureSequence): string {\n return sequence.steps.map(canonicalizeGestureStep).join('|');\n}\n\nexport function fingerprintGestureSequence(sequence: GestureSequence): string {\n return canonicalizeGestureSequence(sequence);\n}\n\nfunction buildChallengeMessage(challenge: Challenge, rhythmHash: string): Uint8Array {\n // Validate nonce format: 32 bytes = 64 hex characters\n if (!/^[0-9a-fA-F]{64}$/.test(challenge.nonce)) {\n throw new Error('[Speakeasy] Invalid nonce: expected 64 hex characters');\n }\n // Validate salt format: 16 bytes = 32 hex characters\n if (!/^[0-9a-fA-F]{32}$/.test(challenge.salt)) {\n throw new Error('[Speakeasy] Invalid salt: expected 32 hex characters');\n }\n\n // Keep this stable and versioned. Avoid including raw step values.\n const message = `bb-ui:speakeasy:v1|nonce:${challenge.nonce}|salt:${challenge.salt}|rhythm:${rhythmHash}`;\n return utf8ToBytes(message);\n}\n\nasync function deriveVerifierKeyBytes(options: {\n sequence: GestureSequence;\n domain: string;\n verifierSaltHex: string;\n deviceSecret: Uint8Array;\n}): Promise<Uint8Array> {\n const canonical = canonicalizeGestureSequence(options.sequence);\n const header = `bb-ui:speakeasy:verifier:v1|domain:${options.domain}|salt:${options.verifierSaltHex}|`;\n const data = concatBytes(utf8ToBytes(header + canonical), options.deviceSecret);\n return sha256(data);\n}\n\nexport class SpeakeasyAuth {\n private readonly storage: SpeakeasyStorage;\n private readonly domain: string;\n private readonly deviceSecret: Uint8Array;\n\n constructor(options: SpeakeasyAuthOptions & { deviceSecret: string | Uint8Array }) {\n // Validate deviceSecret at construction time - fail fast\n this.deviceSecret = normalizeDeviceSecret(options.deviceSecret);\n this.storage = options?.storage ?? createDefaultSpeakeasyStorage({ deviceSecret: this.deviceSecret });\n this.domain = options?.domain ?? defaultDomain();\n }\n\n async getVerifier(): Promise<Verifier | null> {\n return this.storage.getVerifier();\n }\n\n async isRegistered(): Promise<boolean> {\n return (await this.getVerifier()) !== null;\n }\n\n async clear(): Promise<void> {\n await this.storage.clearVerifier();\n }\n\n async registerGesture(sequence: GestureSequence): Promise<Verifier> {\n const salt = randomHex(16);\n const domain = this.domain;\n const keyBytes = await deriveVerifierKeyBytes({\n sequence,\n domain,\n verifierSaltHex: salt,\n deviceSecret: this.deviceSecret,\n });\n\n const verifier: Verifier = {\n hash: bytesToHex(keyBytes),\n salt,\n domain,\n createdAt: Date.now(),\n version: 1,\n };\n\n await this.storage.setVerifier(verifier);\n return verifier;\n }\n\n async computeResponse(sequence: GestureSequence, challenge: Challenge): Promise<string> {\n const verifier = await this.getVerifier();\n if (!verifier) {\n throw new Error('[Speakeasy] Not registered');\n }\n if (verifier.domain !== this.domain) {\n throw new Error('[Speakeasy] Domain mismatch');\n }\n const keyBytes = await deriveVerifierKeyBytes({\n sequence,\n domain: verifier.domain,\n verifierSaltHex: verifier.salt,\n deviceSecret: this.deviceSecret,\n });\n const messageBytes = buildChallengeMessage(challenge, sequence.rhythmHash);\n const responseBytes = await hmacSha256(keyBytes, messageBytes);\n return bytesToHex(responseBytes);\n }\n\n async verifyGesture(sequence: GestureSequence, challenge: Challenge): Promise<SpeakeasyAuthVerifyResult> {\n const verifier = await this.getVerifier();\n if (!verifier) {\n return { ok: false, reason: 'not_registered' };\n }\n if (verifier.domain !== this.domain) {\n return { ok: false, reason: 'domain_mismatch' };\n }\n\n const storedKeyBytes = hexToBytes(verifier.hash);\n const keyBytes = await deriveVerifierKeyBytes({\n sequence,\n domain: verifier.domain,\n verifierSaltHex: verifier.salt,\n deviceSecret: this.deviceSecret,\n });\n\n const messageBytes = buildChallengeMessage(challenge, sequence.rhythmHash);\n const expected = await hmacSha256(storedKeyBytes, messageBytes);\n const response = await hmacSha256(keyBytes, messageBytes);\n\n const ok = timingSafeEqual(expected, response);\n if (!ok) {\n return { ok: false, reason: 'invalid_gesture' };\n }\n\n return { ok: true, response: bytesToHex(response) };\n }\n}\n","/**\n * CapabilityIssuer (MVP)\n *\n * Issues locally-verifiable capability tokens using HMAC-SHA256.\n *\n * This intentionally mirrors the structure of Backbay capability tokens, but\n * avoids adding Ed25519 dependencies inside bb-ui.\n */\n\nimport type { CapabilityToken } from '../types.js';\nimport { bytesToHex, hmacSha256, randomHex, timingSafeEqual, utf8ToBytes, hexToBytes } from './crypto.js';\n\nfunction createTokenId(): string {\n try {\n if (typeof globalThis.crypto !== 'undefined' && typeof globalThis.crypto.randomUUID === 'function') {\n return globalThis.crypto.randomUUID();\n }\n } catch {\n // ignore\n }\n return randomHex(16);\n}\n\nfunction canonicalizePayload(payload: Omit<CapabilityToken, 'signature'>): string {\n // Ensure stable key order by constructing a new object in fixed order.\n const canonical: Omit<CapabilityToken, 'signature'> = {\n tokenId: payload.tokenId,\n issuer: payload.issuer,\n scopes: payload.scopes,\n notBefore: payload.notBefore,\n expiresAt: payload.expiresAt,\n constraints: payload.constraints,\n };\n return JSON.stringify(canonical);\n}\n\nexport async function createCapabilityToken(options: {\n verifierKeyHex: string;\n issuer: string;\n scopes: string[];\n ttlMs: number;\n constraints?: CapabilityToken['constraints'];\n}): Promise<CapabilityToken> {\n const notBefore = Date.now();\n const expiresAt = notBefore + options.ttlMs;\n\n const payload: Omit<CapabilityToken, 'signature'> = {\n tokenId: createTokenId(),\n issuer: options.issuer,\n scopes: options.scopes,\n notBefore,\n expiresAt,\n constraints: options.constraints,\n };\n\n const msg = utf8ToBytes(canonicalizePayload(payload));\n const keyBytes = hexToBytes(options.verifierKeyHex);\n const sigBytes = await hmacSha256(keyBytes, msg);\n\n return {\n ...payload,\n signature: bytesToHex(sigBytes),\n };\n}\n\nexport async function verifyCapabilityToken(options: {\n token: CapabilityToken;\n verifierKeyHex: string;\n now?: number;\n}): Promise<boolean> {\n const { token, verifierKeyHex } = options;\n const now = options.now ?? Date.now();\n if (now < token.notBefore || now > token.expiresAt) return false;\n\n const payload: Omit<CapabilityToken, 'signature'> = {\n tokenId: token.tokenId,\n issuer: token.issuer,\n scopes: token.scopes,\n notBefore: token.notBefore,\n expiresAt: token.expiresAt,\n constraints: token.constraints,\n };\n\n const msg = utf8ToBytes(canonicalizePayload(payload));\n const keyBytes = hexToBytes(verifierKeyHex);\n const expected = await hmacSha256(keyBytes, msg);\n const actual = hexToBytes(token.signature);\n return timingSafeEqual(expected, actual);\n}\n","import type { GestureSequence, GestureStep } from '../types.js';\n\nexport interface PanicGesturePattern {\n tapCount: number;\n tapRegion: 'center' | 'edge' | 'any';\n holdMinDurationMs: number;\n holdRegion: 'center' | 'edge' | 'any';\n}\n\nexport const DEFAULT_PANIC_GESTURE_PATTERN: PanicGesturePattern = {\n tapCount: 5,\n tapRegion: 'center',\n holdMinDurationMs: 2_500,\n holdRegion: 'edge',\n};\n\nfunction isRegionMatch(region: 'center' | 'edge', expected: 'center' | 'edge' | 'any'): boolean {\n return expected === 'any' ? true : region === expected;\n}\n\nexport function isPanicGesture(\n sequence: GestureSequence,\n pattern: PanicGesturePattern = DEFAULT_PANIC_GESTURE_PATTERN\n): boolean {\n // Use filter to check ALL tap/hold pairs, not just the first match\n const allTaps = sequence.steps.filter(\n (s): s is Extract<GestureStep, { type: 'tap' }> => s.type === 'tap'\n );\n const allHolds = sequence.steps.filter(\n (s): s is Extract<GestureStep, { type: 'hold' }> => s.type === 'hold'\n );\n\n // Check all combinations of taps and holds for panic pattern\n for (const tap of allTaps) {\n if (tap.count < pattern.tapCount) continue;\n if (!isRegionMatch(tap.region, pattern.tapRegion)) continue;\n\n for (const hold of allHolds) {\n if (\n hold.durationMs >= pattern.holdMinDurationMs &&\n isRegionMatch(hold.region, pattern.holdRegion)\n ) {\n return true;\n }\n }\n }\n\n return false;\n}\n\n","/**\n * Device secret provider\n *\n * Hosts can implement this using a keychain/secure enclave and inject it into\n * SpeakeasyProvider / SpeakeasyConsentDialog.\n */\n\nimport { bytesToHex, hexToBytes, randomHex } from './crypto.js';\n\nexport interface SpeakeasyDeviceSecretProvider {\n getOrCreateDeviceSecret: () => Promise<Uint8Array>;\n clearDeviceSecret: () => Promise<void>;\n}\n\nexport function createInMemoryDeviceSecretProvider(): SpeakeasyDeviceSecretProvider {\n let secret: Uint8Array | null = null;\n return {\n async getOrCreateDeviceSecret() {\n if (!secret) {\n secret = hexToBytes(randomHex(32));\n }\n return secret;\n },\n async clearDeviceSecret() {\n secret = null;\n },\n };\n}\n\nexport function createLocalStorageDeviceSecretProvider(options?: {\n key?: string;\n}): SpeakeasyDeviceSecretProvider {\n const storageKey = options?.key ?? 'bb-ui:speakeasy:device-secret:v1';\n\n return {\n async getOrCreateDeviceSecret() {\n if (typeof globalThis.localStorage === 'undefined') {\n throw new Error('[Speakeasy] localStorage is not available');\n }\n const existing = globalThis.localStorage.getItem(storageKey);\n if (existing) {\n return hexToBytes(existing);\n }\n const created = randomHex(32);\n globalThis.localStorage.setItem(storageKey, created);\n return hexToBytes(created);\n },\n async clearDeviceSecret() {\n try {\n if (typeof globalThis.localStorage === 'undefined') return;\n globalThis.localStorage.removeItem(storageKey);\n } catch {\n // ignore\n }\n },\n };\n}\n\nexport function createDefaultDeviceSecretProvider(): SpeakeasyDeviceSecretProvider {\n try {\n if (typeof globalThis.localStorage !== 'undefined') {\n return createLocalStorageDeviceSecretProvider();\n }\n } catch {\n // ignore\n }\n return createInMemoryDeviceSecretProvider();\n}\n\nexport function encodeDeviceSecretHex(secret: Uint8Array): string {\n return bytesToHex(secret);\n}\n\n","/**\n * SpeakeasyProvider\n *\n * React context that wires:\n * - doorman state machine (Zustand)\n * - auth verifier (gesture -> response)\n * - capability token issuance\n */\n\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n type ReactNode,\n type ErrorInfo,\n} from 'react';\n\nimport { GliaErrorBoundary } from '../primitives/atoms/GliaErrorBoundary';\n\nimport { startDoormanTimeouts, useDoormanStore } from './doorman/DoormanStateMachine.js';\nimport type {\n CapabilityToken,\n DoormanConfig,\n GestureSequence,\n SpeakeasyContextValue,\n SpeakeasyPrivateContextValue,\n SpeakeasyPublicContextValue,\n} from './types.js';\nimport { DEFAULT_DOORMAN_CONFIG } from './types.js';\nimport { SpeakeasyAuth, type SpeakeasyAuthOptions } from './auth/SpeakeasyAuth.js';\nimport { createCapabilityToken } from './auth/CapabilityIssuer.js';\nimport type { SpeakeasyStorage } from './auth/storage.js';\nimport { isPanicGesture } from './doorman/panic.js';\nimport {\n createDefaultDeviceSecretProvider,\n type SpeakeasyDeviceSecretProvider,\n} from './auth/deviceSecret.js';\n\n// =============================================================================\n// Errors\n// =============================================================================\n\n/**\n * Error thrown when an operation requires auth but device secret is not yet resolved.\n */\nexport class SpeakeasyNotReadyError extends Error {\n constructor(operation: string) {\n super(`[Speakeasy] ${operation}: device secret not yet resolved`);\n this.name = 'SpeakeasyNotReadyError';\n }\n}\n\n/**\n * Asserts that auth is ready, throwing SpeakeasyNotReadyError if not.\n * Use this for user-initiated operations that cannot silently fail.\n */\nfunction assertAuthReady(auth: SpeakeasyAuth | null, operation: string): asserts auth is SpeakeasyAuth {\n if (!auth) {\n throw new SpeakeasyNotReadyError(operation);\n }\n}\n\n// =============================================================================\n// Context\n// =============================================================================\n\n/** Public context - safe for all components */\nconst SpeakeasyPublicContext = createContext<SpeakeasyPublicContextValue | null>(null);\n\n/** Private context - only for trusted components handling sensitive data */\nconst SpeakeasyPrivateContext = createContext<SpeakeasyPrivateContextValue | null>(null);\n\n/** Legacy combined context (deprecated) */\nconst SpeakeasyContext = createContext<SpeakeasyContextValue | null>(null);\n\nexport interface SpeakeasyProviderProps {\n children: ReactNode;\n /** Override doorman timings and thresholds */\n doormanConfig?: Partial<DoormanConfig>;\n /** Inject a storage backend (keychain/enclave/etc.) */\n storage?: SpeakeasyStorage;\n /** Domain binding for anti-phishing */\n domain?: string;\n /** Optional device-bound secret (host-provided) */\n deviceSecret?: SpeakeasyAuthOptions['deviceSecret'];\n /** Device secret provider (keychain/enclave/etc.) */\n deviceSecretProvider?: SpeakeasyDeviceSecretProvider;\n /** Capability issuer identity string */\n issuer?: string;\n /** Capability scopes granted on admit */\n scopes?: string[];\n /** Called after successful admission */\n onAdmitted?: (capability: CapabilityToken) => void;\n /** Called on exit */\n onExit?: () => void;\n}\n\nexport function SpeakeasyProvider({\n children,\n doormanConfig,\n storage,\n domain,\n deviceSecret,\n deviceSecretProvider,\n issuer = 'bb-ui:speakeasy',\n scopes = ['speakeasy.*'],\n onAdmitted,\n onExit,\n}: SpeakeasyProviderProps) {\n const state = useDoormanStore((s) => s.state);\n const capability = useDoormanStore((s) => s.capability);\n\n const [resolvedDeviceSecret, setResolvedDeviceSecret] = useState<\n SpeakeasyAuthOptions['deviceSecret'] | undefined\n >(deviceSecret);\n\n useEffect(() => {\n let cancelled = false;\n if (deviceSecret !== undefined) {\n setResolvedDeviceSecret(deviceSecret);\n return;\n }\n\n const provider = deviceSecretProvider ?? createDefaultDeviceSecretProvider();\n provider.getOrCreateDeviceSecret().then((secret) => {\n if (!cancelled) setResolvedDeviceSecret(secret);\n });\n\n return () => {\n cancelled = true;\n };\n }, [deviceSecret, deviceSecretProvider]);\n\n // Auth is only created once deviceSecret is resolved (prevents race condition)\n const auth = useMemo(() => {\n if (resolvedDeviceSecret === undefined) {\n return null; // Not ready yet\n }\n return new SpeakeasyAuth({\n storage,\n domain,\n deviceSecret: resolvedDeviceSecret,\n });\n }, [storage, domain, resolvedDeviceSecret]);\n\n const [isRegistered, setIsRegistered] = useState(false);\n const [tick, setTick] = useState(0);\n\n // Apply config overrides\n useEffect(() => {\n if (!doormanConfig) return;\n useDoormanStore.getState().setConfig(doormanConfig);\n }, [doormanConfig]);\n\n // Start timeout management and reset state on unmount\n useEffect(() => {\n const cleanupTimeouts = startDoormanTimeouts();\n return () => {\n cleanupTimeouts();\n useDoormanStore.getState().reset();\n };\n }, []);\n\n // Load registration status (only when auth is ready)\n useEffect(() => {\n if (!auth) {\n setIsRegistered(false);\n return;\n }\n let cancelled = false;\n auth.isRegistered().then((registered) => {\n if (!cancelled) setIsRegistered(registered);\n });\n return () => {\n cancelled = true;\n };\n }, [auth]);\n\n // Basic tick to keep timeRemaining fresh for UI\n useEffect(() => {\n if (\n state !== 'CHALLENGED' &&\n state !== 'COOLDOWN' &&\n state !== 'LOCKED' &&\n state !== 'ADMITTED'\n ) {\n return;\n }\n const id = setInterval(() => setTick((t) => t + 1), 250);\n return () => clearInterval(id);\n }, [state]);\n\n const knock = useCallback(() => {\n useDoormanStore.getState().dispatch({ type: 'KNOCK_DETECTED', timestamp: Date.now() });\n }, []);\n\n const exit = useCallback(() => {\n useDoormanStore.getState().dispatch({ type: 'EXIT_REQUESTED' });\n onExit?.();\n }, [onExit]);\n\n const register = useCallback(\n async (gesture: GestureSequence) => {\n // User-initiated: throw if not ready\n assertAuthReady(auth, 'register');\n await auth.registerGesture(gesture);\n setIsRegistered(true);\n },\n [auth]\n );\n\n const clearRegistration = useCallback(async () => {\n // User-initiated: throw if not ready\n assertAuthReady(auth, 'clearRegistration');\n await auth.clear();\n setIsRegistered(false);\n }, [auth]);\n\n const submitGesture = useCallback(\n async (gesture: GestureSequence) => {\n // User-initiated: throw if not ready\n assertAuthReady(auth, 'submitGesture');\n\n const store = useDoormanStore.getState();\n const challenge = store.challenge;\n\n if (store.state !== 'CHALLENGED' || !challenge) return;\n\n // Atomically claim the VERIFYING state BEFORE any async work\n // This prevents race conditions where multiple submissions could proceed\n store.dispatch({ type: 'GESTURE_COMPLETE', gestureData: gesture });\n\n // Re-check state after dispatch - if not VERIFYING, another submission won the race\n if (useDoormanStore.getState().state !== 'VERIFYING') {\n // Either challenge expired or another submission won the race; bail out\n return;\n }\n\n // Now we have exclusive ownership of the VERIFYING state\n // Check for panic gesture (must happen after claiming state to prevent bypass)\n if (store.config.panicGestureEnabled && isPanicGesture(gesture)) {\n store.dispatch({\n type: 'PANIC_GESTURE',\n decoyMode: store.config.panicAction === 'decoy',\n });\n return;\n }\n\n if (!(await auth.isRegistered())) {\n // Not a failure attempt; just cancel the challenge.\n store.dispatch({ type: 'EXIT_REQUESTED' });\n return;\n }\n\n const result = await auth.verifyGesture(gesture, challenge);\n if (!result.ok) {\n store.dispatch({\n type: 'VERIFICATION_FAILURE',\n reason: result.reason ?? 'invalid',\n });\n return;\n }\n\n const verifier = await auth.getVerifier();\n if (!verifier) {\n store.dispatch({ type: 'VERIFICATION_FAILURE', reason: 'not_registered' });\n return;\n }\n\n const config = store.config ?? DEFAULT_DOORMAN_CONFIG;\n const token = await createCapabilityToken({\n verifierKeyHex: verifier.hash,\n issuer,\n scopes,\n ttlMs: config.admissionTtlMs,\n });\n\n store.dispatch({ type: 'VERIFICATION_SUCCESS', capability: token });\n onAdmitted?.(token);\n },\n [auth, issuer, scopes, onAdmitted]\n );\n\n const isReady = auth !== null;\n\n const publicContextValue = useMemo<SpeakeasyPublicContextValue>(() => {\n const store = useDoormanStore.getState();\n return {\n state,\n isReady,\n isAdmitted: state === 'ADMITTED',\n isDecoy: state === 'DECOY',\n knock,\n exit,\n timeRemaining: store.timeRemaining(),\n };\n }, [state, isReady, knock, exit, tick]);\n\n const privateContextValue = useMemo<SpeakeasyPrivateContextValue>(\n () => ({\n capability,\n isRegistered,\n register,\n clearRegistration,\n submitGesture,\n }),\n [capability, isRegistered, register, clearRegistration, submitGesture]\n );\n\n // Combined context for legacy support\n const contextValue = useMemo<SpeakeasyContextValue>(\n () => ({\n ...publicContextValue,\n ...privateContextValue,\n }),\n [publicContextValue, privateContextValue]\n );\n\n const handleSpeakeasyError = useCallback(\n (error: Error, _errorInfo: ErrorInfo) => {\n // Reset DoormanStateMachine to IDLE on error\n useDoormanStore.getState().reset();\n // Log without including key material\n console.error('[Speakeasy] Error boundary caught:', error.message);\n },\n []\n );\n\n return (\n <SpeakeasyPublicContext.Provider value={publicContextValue}>\n <SpeakeasyPrivateContext.Provider value={privateContextValue}>\n <SpeakeasyContext.Provider value={contextValue}>\n <GliaErrorBoundary\n variant=\"card\"\n onError={handleSpeakeasyError}\n >\n {children}\n </GliaErrorBoundary>\n </SpeakeasyContext.Provider>\n </SpeakeasyPrivateContext.Provider>\n </SpeakeasyPublicContext.Provider>\n );\n}\n\n/**\n * Hook for public speakeasy state - safe for all components.\n * Use this when you only need to read state or trigger knock/exit.\n */\nexport function useSpeakeasyPublic(): SpeakeasyPublicContextValue {\n const ctx = useContext(SpeakeasyPublicContext);\n if (!ctx) {\n throw new Error('useSpeakeasyPublic must be used within a SpeakeasyProvider');\n }\n return ctx;\n}\n\n/**\n * Hook for private speakeasy state - only for trusted components.\n * Use this when you need access to capability tokens or registration.\n */\nexport function useSpeakeasyPrivate(): SpeakeasyPrivateContextValue {\n const ctx = useContext(SpeakeasyPrivateContext);\n if (!ctx) {\n throw new Error('useSpeakeasyPrivate must be used within a SpeakeasyProvider');\n }\n return ctx;\n}\n\n/**\n * Combined hook for full speakeasy context.\n * @deprecated Use useSpeakeasyPublic() or useSpeakeasyPrivate() for better security isolation.\n */\nexport function useSpeakeasy(): SpeakeasyContextValue {\n const ctx = useContext(SpeakeasyContext);\n if (!ctx) {\n throw new Error('useSpeakeasy must be used within a SpeakeasyProvider');\n }\n return ctx;\n}\n","/**\n * SpeakeasyOrb (MVP)\n *\n * Minimal orb UI that:\n * - detects a public \"knock\" (triple tap) to request a challenge\n * - captures a short gesture sequence while challenged\n */\n\nimport { motion } from 'framer-motion';\nimport React, { useCallback, useEffect, useMemo, useRef } from 'react';\n\nimport { useSpeakeasy } from '../SpeakeasyProvider.js';\nimport { useGestureRecognizer } from '../hooks/useGestureRecognizer.js';\nimport type { DoormanState, OrbState, OrbVisualConfig } from '../types.js';\nimport { DEFAULT_ORB_CONFIG } from '../types.js';\n\nexport interface SpeakeasyOrbProps {\n config?: Partial<OrbVisualConfig>;\n}\n\nexport function SpeakeasyOrb({ config: partialConfig }: SpeakeasyOrbProps) {\n const config = useMemo(() => {\n const merged: OrbVisualConfig = {\n ...DEFAULT_ORB_CONFIG,\n ...partialConfig,\n glowIntensity: { ...DEFAULT_ORB_CONFIG.glowIntensity, ...partialConfig?.glowIntensity },\n pulseSpeed: { ...DEFAULT_ORB_CONFIG.pulseSpeed, ...partialConfig?.pulseSpeed },\n colors: { ...DEFAULT_ORB_CONFIG.colors, ...partialConfig?.colors },\n };\n return merged;\n }, [partialConfig]);\n\n const { state, knock, submitGesture, isAdmitted, timeRemaining } = useSpeakeasy();\n\n const orbRef = useRef<HTMLDivElement>(null);\n const finalizeTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const knockTapCountRef = useRef(0);\n const knockTapTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const { handlers, startCapture, endCapture, reset } = useGestureRecognizer({\n centerRef: orbRef,\n onGestureStep: () => {\n if (finalizeTimeoutRef.current) clearTimeout(finalizeTimeoutRef.current);\n finalizeTimeoutRef.current = setTimeout(async () => {\n const sequence = await endCapture();\n if (sequence) {\n await submitGesture(sequence);\n }\n }, 350);\n },\n });\n\n // Start/stop capture based on doorman state.\n useEffect(() => {\n if (state === 'CHALLENGED') {\n startCapture();\n return;\n }\n reset();\n if (finalizeTimeoutRef.current) {\n clearTimeout(finalizeTimeoutRef.current);\n finalizeTimeoutRef.current = null;\n }\n }, [state, startCapture, reset]);\n\n const handleKnockTap = useCallback(() => {\n // Triple tap within a short window.\n knockTapCountRef.current += 1;\n\n if (knockTapTimeoutRef.current) clearTimeout(knockTapTimeoutRef.current);\n\n if (knockTapCountRef.current >= 3) {\n knockTapCountRef.current = 0;\n knock();\n return;\n }\n\n knockTapTimeoutRef.current = setTimeout(() => {\n knockTapCountRef.current = 0;\n }, 500);\n }, [knock]);\n\n // Map doorman state to orb visual state\n const ORB_STATE_MAP: Record<DoormanState, OrbState> = {\n IDLE: 'idle',\n CHALLENGED: 'challenged',\n VERIFYING: 'verifying',\n ADMITTED: 'admitted',\n DECOY: 'decoy',\n COOLDOWN: 'idle',\n LOCKED: 'locked',\n };\n const orbState = ORB_STATE_MAP[state] ?? 'idle';\n\n const glow = config.glowIntensity[orbState];\n const color = config.colors[orbState];\n const pulseMs = config.pulseSpeed[orbState];\n\n // Accessible labels for each state\n const ARIA_LABELS: Record<DoormanState, string> = {\n IDLE: 'Speakeasy: triple-tap to knock',\n CHALLENGED: 'Speakeasy: perform gesture now',\n VERIFYING: 'Speakeasy: verifying your gesture',\n ADMITTED: 'Speakeasy: access granted',\n DECOY: 'Speakeasy: decoy mode active',\n COOLDOWN: 'Speakeasy: please wait before retrying',\n LOCKED: 'Speakeasy: temporarily locked',\n };\n const ariaLabel = ARIA_LABELS[state] ?? 'Speakeasy';\n\n return (\n <motion.div\n ref={orbRef}\n role=\"button\"\n aria-label={ariaLabel}\n title={ariaLabel}\n onPointerDown={handlers.onPointerDown}\n onPointerMove={handlers.onPointerMove}\n onPointerUp={(e: React.PointerEvent) => {\n handlers.onPointerUp(e);\n if (state === 'IDLE') {\n handleKnockTap();\n }\n }}\n onPointerCancel={handlers.onPointerCancel}\n animate={pulseMs > 0 ? { opacity: [0.9, 1, 0.9] } : { opacity: 1 }}\n transition={pulseMs > 0 ? { duration: pulseMs / 1000, repeat: Infinity, ease: 'easeInOut' } : undefined}\n style={{\n position: 'relative',\n width: config.size,\n height: config.size,\n borderRadius: '50%',\n border: `1px solid color-mix(in srgb, ${color} 40%, transparent)`,\n background:\n 'linear-gradient(160deg, rgba(0, 0, 0, 0.55), rgba(8, 8, 10, 0.85))',\n boxShadow: `0 0 ${24 + glow * 36}px color-mix(in srgb, ${color} ${20 + glow * 40}%, transparent), 0 6px 26px rgba(0, 0, 0, 0.45)`,\n display: 'grid',\n placeItems: 'center',\n userSelect: 'none',\n touchAction: 'none',\n cursor: 'pointer',\n }}\n >\n <div\n style={{\n width: config.size * 0.35,\n height: config.size * 0.35,\n borderRadius: '50%',\n background: `radial-gradient(circle at 30% 30%, color-mix(in srgb, ${color} 60%, white), color-mix(in srgb, ${color} 35%, transparent) 55%, transparent 70%)`,\n opacity: isAdmitted ? 1 : 0.9,\n }}\n />\n {typeof timeRemaining === 'number' && state !== 'IDLE' && (\n <div\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n style={{\n position: 'absolute',\n top: config.size + 8,\n fontSize: 12,\n color: 'var(--text-muted, rgba(255,255,255,0.72))',\n fontFamily: 'ui-sans-serif, system-ui',\n textAlign: 'center',\n width: 140,\n }}\n >\n <span aria-label={`${state.toLowerCase()}, ${Math.ceil(timeRemaining / 1000)} seconds remaining`}>\n {state.toLowerCase()} · {Math.ceil(timeRemaining / 1000)}s\n </span>\n </div>\n )}\n </motion.div>\n );\n}\n\nexport default SpeakeasyOrb;\n","/**\n * SpeakeasyRitualPad\n *\n * Generic capture surface for gesture rituals.\n */\n\nimport React, { useEffect, useMemo, useRef } from 'react';\n\nimport { useGestureRecognizer } from '../hooks/useGestureRecognizer.js';\nimport type { GestureSequence, GestureStep } from '../types.js';\n\nexport interface SpeakeasyRitualPadProps {\n disabled?: boolean;\n autoStart?: boolean;\n onComplete: (sequence: GestureSequence) => void | Promise<void>;\n onStep?: (step: GestureStep) => void;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function SpeakeasyRitualPad({\n disabled = false,\n autoStart = true,\n onComplete,\n onStep,\n className,\n style,\n}: SpeakeasyRitualPadProps) {\n const padRef = useRef<HTMLDivElement>(null);\n const finalizeTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const { handlers, startCapture, endCapture, reset } = useGestureRecognizer({\n centerRef: padRef,\n onGestureStep: (step) => {\n onStep?.(step);\n if (finalizeTimeoutRef.current) clearTimeout(finalizeTimeoutRef.current);\n finalizeTimeoutRef.current = setTimeout(async () => {\n const sequence = await endCapture();\n if (sequence) {\n await onComplete(sequence);\n }\n }, 350);\n },\n });\n\n useEffect(() => {\n if (!autoStart || disabled) return;\n startCapture();\n return () => reset();\n }, [autoStart, disabled, startCapture, reset]);\n\n const mergedStyle = useMemo<React.CSSProperties>(\n () => ({\n position: 'relative',\n width: 240,\n height: 240,\n borderRadius: 24,\n border: '1px solid rgba(255,255,255,0.10)',\n background:\n 'radial-gradient(circle at 35% 30%, rgba(212,168,75,0.18), rgba(0,0,0,0.25) 60%, rgba(0,0,0,0.55) 100%)',\n boxShadow: '0 10px 30px rgba(0,0,0,0.35)',\n touchAction: 'none',\n userSelect: 'none',\n opacity: disabled ? 0.55 : 1,\n ...style,\n }),\n [disabled, style]\n );\n\n return (\n <div\n ref={padRef}\n className={className}\n style={mergedStyle}\n aria-disabled={disabled}\n onPointerDown={disabled ? undefined : handlers.onPointerDown}\n onPointerMove={disabled ? undefined : handlers.onPointerMove}\n onPointerUp={disabled ? undefined : handlers.onPointerUp}\n onPointerCancel={disabled ? undefined : handlers.onPointerCancel}\n >\n <div\n style={{\n position: 'absolute',\n inset: 14,\n borderRadius: 18,\n border: '1px dashed rgba(255,255,255,0.18)',\n pointerEvents: 'none',\n }}\n />\n <div\n style={{\n position: 'absolute',\n bottom: 10,\n left: 12,\n right: 12,\n fontSize: 12,\n color: 'rgba(255,255,255,0.72)',\n fontFamily: 'ui-sans-serif, system-ui',\n textAlign: 'center',\n pointerEvents: 'none',\n }}\n >\n Tap · hold · radial drag · flick\n </div>\n </div>\n );\n}\n\nexport default SpeakeasyRitualPad;\n\n","/* eslint-disable no-restricted-properties */\n\n/* eslint-disable no-restricted-globals */\nexport const canUseDOM = !!(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n);\n/* eslint-enable no-restricted-globals */\n\nexport function composeEventHandlers<E extends { defaultPrevented: boolean }>(\n originalEventHandler?: (event: E) => void,\n ourEventHandler?: (event: E) => void,\n { checkForDefaultPrevented = true } = {}\n) {\n return function handleEvent(event: E) {\n originalEventHandler?.(event);\n\n if (checkForDefaultPrevented === false || !event.defaultPrevented) {\n return ourEventHandler?.(event);\n }\n };\n}\n\nexport function getOwnerWindow(element: Node | null | undefined) {\n if (!canUseDOM) {\n throw new Error('Cannot access window outside of the DOM');\n }\n // eslint-disable-next-line no-restricted-globals\n return element?.ownerDocument?.defaultView ?? window;\n}\n\nexport function getOwnerDocument(element: Node | null | undefined) {\n if (!canUseDOM) {\n throw new Error('Cannot access document outside of the DOM');\n }\n // eslint-disable-next-line no-restricted-globals\n return element?.ownerDocument ?? document;\n}\n\n/**\n * Lifted from https://github.com/ariakit/ariakit/blob/main/packages/ariakit-core/src/utils/dom.ts#L37\n * MIT License, Copyright (c) AriaKit.\n */\nexport function getActiveElement(\n node: Node | null | undefined,\n activeDescendant = false\n): HTMLElement | null {\n const { activeElement } = getOwnerDocument(node);\n if (!activeElement?.nodeName) {\n // `activeElement` might be an empty object if we're interacting with elements\n // inside of an iframe.\n return null;\n }\n\n if (isFrame(activeElement) && activeElement.contentDocument) {\n return getActiveElement(activeElement.contentDocument.body, activeDescendant);\n }\n\n if (activeDescendant) {\n const id = activeElement.getAttribute('aria-activedescendant');\n if (id) {\n const element = getOwnerDocument(activeElement).getElementById(id);\n if (element) {\n return element;\n }\n }\n }\n\n return activeElement as HTMLElement | null;\n}\n\nexport function isFrame(element: Element): element is HTMLIFrameElement {\n return element.tagName === 'IFRAME';\n}\n","import * as React from 'react';\n\ntype PossibleRef<T> = React.Ref<T> | undefined;\n\n/**\n * Set a given ref to a given value\n * This utility takes care of different types of refs: callback refs and RefObject(s)\n */\nfunction setRef<T>(ref: PossibleRef<T>, value: T) {\n if (typeof ref === 'function') {\n return ref(value);\n } else if (ref !== null && ref !== undefined) {\n ref.current = value;\n }\n}\n\n/**\n * A utility to compose multiple refs together\n * Accepts callback refs and RefObject(s)\n */\nfunction composeRefs<T>(...refs: PossibleRef<T>[]): React.RefCallback<T> {\n return (node) => {\n let hasCleanup = false;\n const cleanups = refs.map((ref) => {\n const cleanup = setRef(ref, node);\n if (!hasCleanup && typeof cleanup == 'function') {\n hasCleanup = true;\n }\n return cleanup;\n });\n\n // React <19 will log an error to the console if a callback ref returns a\n // value. We don't use ref cleanups internally so this will only happen if a\n // user's ref callback returns a value, which we only expect if they are\n // using the cleanup functionality added in React 19.\n if (hasCleanup) {\n return () => {\n for (let i = 0; i < cleanups.length; i++) {\n const cleanup = cleanups[i];\n if (typeof cleanup == 'function') {\n cleanup();\n } else {\n setRef(refs[i], null);\n }\n }\n };\n }\n };\n}\n\n/**\n * A custom hook that composes multiple refs\n * Accepts callback refs and RefObject(s)\n */\nfunction useComposedRefs<T>(...refs: PossibleRef<T>[]): React.RefCallback<T> {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return React.useCallback(composeRefs(...refs), refs);\n}\n\nexport { composeRefs, useComposedRefs };\n","import * as React from 'react';\n\nfunction createContext<ContextValueType extends object | null>(\n rootComponentName: string,\n defaultContext?: ContextValueType\n) {\n const Context = React.createContext<ContextValueType | undefined>(defaultContext);\n\n const Provider: React.FC<ContextValueType & { children: React.ReactNode }> = (props) => {\n const { children, ...context } = props;\n // Only re-memoize when prop values change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const value = React.useMemo(() => context, Object.values(context)) as ContextValueType;\n return <Context.Provider value={value}>{children}</Context.Provider>;\n };\n\n Provider.displayName = rootComponentName + 'Provider';\n\n function useContext(consumerName: string) {\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== undefined) return defaultContext;\n // if a defaultContext wasn't specified, it's a required context.\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n\n return [Provider, useContext] as const;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * createContextScope\n * -----------------------------------------------------------------------------------------------*/\n\ntype Scope<C = any> = { [scopeName: string]: React.Context<C>[] } | undefined;\ntype ScopeHook = (scope: Scope) => { [__scopeProp: string]: Scope };\ninterface CreateScope {\n scopeName: string;\n (): ScopeHook;\n}\n\nfunction createContextScope(scopeName: string, createContextScopeDeps: CreateScope[] = []) {\n let defaultContexts: any[] = [];\n\n /* -----------------------------------------------------------------------------------------------\n * createContext\n * ---------------------------------------------------------------------------------------------*/\n\n function createContext<ContextValueType extends object | null>(\n rootComponentName: string,\n defaultContext?: ContextValueType\n ) {\n const BaseContext = React.createContext<ContextValueType | undefined>(defaultContext);\n const index = defaultContexts.length;\n defaultContexts = [...defaultContexts, defaultContext];\n\n const Provider: React.FC<\n ContextValueType & { scope: Scope<ContextValueType>; children: React.ReactNode }\n > = (props) => {\n const { scope, children, ...context } = props;\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n // Only re-memoize when prop values change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const value = React.useMemo(() => context, Object.values(context)) as ContextValueType;\n return <Context.Provider value={value}>{children}</Context.Provider>;\n };\n\n Provider.displayName = rootComponentName + 'Provider';\n\n function useContext(consumerName: string, scope: Scope<ContextValueType | undefined>) {\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== undefined) return defaultContext;\n // if a defaultContext wasn't specified, it's a required context.\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n\n return [Provider, useContext] as const;\n }\n\n /* -----------------------------------------------------------------------------------------------\n * createScope\n * ---------------------------------------------------------------------------------------------*/\n\n const createScope: CreateScope = () => {\n const scopeContexts = defaultContexts.map((defaultContext) => {\n return React.createContext(defaultContext);\n });\n return function useScope(scope: Scope) {\n const contexts = scope?.[scopeName] || scopeContexts;\n return React.useMemo(\n () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n [scope, contexts]\n );\n };\n };\n\n createScope.scopeName = scopeName;\n return [createContext, composeContextScopes(createScope, ...createContextScopeDeps)] as const;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * composeContextScopes\n * -----------------------------------------------------------------------------------------------*/\n\nfunction composeContextScopes(...scopes: CreateScope[]) {\n const baseScope = scopes[0];\n if (scopes.length === 1) return baseScope;\n\n const createScope: CreateScope = () => {\n const scopeHooks = scopes.map((createScope) => ({\n useScope: createScope(),\n scopeName: createScope.scopeName,\n }));\n\n return function useComposedScopes(overrideScopes) {\n const nextScopes = scopeHooks.reduce((nextScopes, { useScope, scopeName }) => {\n // We are calling a hook inside a callback which React warns against to avoid inconsistent\n // renders, however, scoping doesn't have render side effects so we ignore the rule.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const scopeProps = useScope(overrideScopes);\n const currentScope = scopeProps[`__scope${scopeName}`];\n return { ...nextScopes, ...currentScope };\n }, {});\n\n return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n };\n };\n\n createScope.scopeName = baseScope.scopeName;\n return createScope;\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nexport { createContext, createContextScope };\nexport type { CreateScope, Scope };\n","import * as React from 'react';\n\n/**\n * On the server, React emits a warning when calling `useLayoutEffect`.\n * This is because neither `useLayoutEffect` nor `useEffect` run on the server.\n * We use this safe version which suppresses the warning by replacing it with a noop on the server.\n *\n * See: https://reactjs.org/docs/hooks-reference.html#uselayouteffect\n */\nconst useLayoutEffect = globalThis?.document ? React.useLayoutEffect : () => {};\n\nexport { useLayoutEffect };\n","import * as React from 'react';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\n\n// We spaces with `.trim().toString()` to prevent bundlers from trying to `import { useId } from 'react';`\nconst useReactId = (React as any)[' useId '.trim().toString()] || (() => undefined);\nlet count = 0;\n\nfunction useId(deterministicId?: string): string {\n const [id, setId] = React.useState<string | undefined>(useReactId());\n // React versions older than 18 will have client-side ids only.\n useLayoutEffect(() => {\n if (!deterministicId) setId((reactId) => reactId ?? String(count++));\n }, [deterministicId]);\n return deterministicId || (id ? `radix-${id}` : '');\n}\n\nexport { useId };\n","import * as React from 'react';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\n\n// Prevent bundlers from trying to optimize the import\nconst useInsertionEffect: typeof useLayoutEffect =\n (React as any)[' useInsertionEffect '.trim().toString()] || useLayoutEffect;\n\ntype ChangeHandler<T> = (state: T) => void;\ntype SetStateFn<T> = React.Dispatch<React.SetStateAction<T>>;\n\ninterface UseControllableStateParams<T> {\n prop?: T | undefined;\n defaultProp: T;\n onChange?: ChangeHandler<T>;\n caller?: string;\n}\n\nexport function useControllableState<T>({\n prop,\n defaultProp,\n onChange = () => {},\n caller,\n}: UseControllableStateParams<T>): [T, SetStateFn<T>] {\n const [uncontrolledProp, setUncontrolledProp, onChangeRef] = useUncontrolledState({\n defaultProp,\n onChange,\n });\n const isControlled = prop !== undefined;\n const value = isControlled ? prop : uncontrolledProp;\n\n // OK to disable conditionally calling hooks here because they will always run\n // consistently in the same environment. Bundlers should be able to remove the\n // code block entirely in production.\n /* eslint-disable react-hooks/rules-of-hooks */\n if (process.env.NODE_ENV !== 'production') {\n const isControlledRef = React.useRef(prop !== undefined);\n React.useEffect(() => {\n const wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled) {\n const from = wasControlled ? 'controlled' : 'uncontrolled';\n const to = isControlled ? 'controlled' : 'uncontrolled';\n console.warn(\n `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n );\n }\n isControlledRef.current = isControlled;\n }, [isControlled, caller]);\n }\n /* eslint-enable react-hooks/rules-of-hooks */\n\n const setValue = React.useCallback<SetStateFn<T>>(\n (nextValue) => {\n if (isControlled) {\n const value = isFunction(nextValue) ? nextValue(prop) : nextValue;\n if (value !== prop) {\n onChangeRef.current?.(value);\n }\n } else {\n setUncontrolledProp(nextValue);\n }\n },\n [isControlled, prop, setUncontrolledProp, onChangeRef]\n );\n\n return [value, setValue];\n}\n\nfunction useUncontrolledState<T>({\n defaultProp,\n onChange,\n}: Omit<UseControllableStateParams<T>, 'prop'>): [\n Value: T,\n setValue: React.Dispatch<React.SetStateAction<T>>,\n OnChangeRef: React.RefObject<ChangeHandler<T> | undefined>,\n] {\n const [value, setValue] = React.useState(defaultProp);\n const prevValueRef = React.useRef(value);\n\n const onChangeRef = React.useRef(onChange);\n useInsertionEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n\n React.useEffect(() => {\n if (prevValueRef.current !== value) {\n onChangeRef.current?.(value);\n prevValueRef.current = value;\n }\n }, [value, prevValueRef]);\n\n return [value, setValue, onChangeRef];\n}\n\nfunction isFunction(value: unknown): value is (...args: any[]) => any {\n return typeof value === 'function';\n}\n","import * as React from 'react';\nimport { composeRefs } from '@radix-ui/react-compose-refs';\n\n/* -------------------------------------------------------------------------------------------------\n * Slot\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SlotProps extends React.HTMLAttributes<HTMLElement> {\n children?: React.ReactNode;\n}\n\n/* @__NO_SIDE_EFFECTS__ */ export function createSlot(ownerName: string) {\n const SlotClone = createSlotClone(ownerName);\n const Slot = React.forwardRef<HTMLElement, SlotProps>((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n\n if (slottable) {\n // the new element to render is the one passed as a child of `Slottable`\n const newElement = slottable.props.children;\n\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n // because the new element will be the one rendered, we are only interested\n // in grabbing its children (`newElement.props.children`)\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement)\n ? (newElement.props as { children: React.ReactNode }).children\n : null;\n } else {\n return child;\n }\n });\n\n return (\n <SlotClone {...slotProps} ref={forwardedRef}>\n {React.isValidElement(newElement)\n ? React.cloneElement(newElement, undefined, newChildren)\n : null}\n </SlotClone>\n );\n }\n\n return (\n <SlotClone {...slotProps} ref={forwardedRef}>\n {children}\n </SlotClone>\n );\n });\n\n Slot.displayName = `${ownerName}.Slot`;\n return Slot;\n}\n\nconst Slot = createSlot('Slot');\n\n/* -------------------------------------------------------------------------------------------------\n * SlotClone\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SlotCloneProps {\n children: React.ReactNode;\n}\n\n/* @__NO_SIDE_EFFECTS__ */ function createSlotClone(ownerName: string) {\n const SlotClone = React.forwardRef<any, SlotCloneProps>((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props = mergeProps(slotProps, children.props as AnyProps);\n // do not pass ref to React.Fragment for React 19 compatibility\n if (children.type !== React.Fragment) {\n props.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props);\n }\n\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Slottable\n * -----------------------------------------------------------------------------------------------*/\n\nconst SLOTTABLE_IDENTIFIER = Symbol('radix.slottable');\n\ninterface SlottableProps {\n children: React.ReactNode;\n}\n\ninterface SlottableComponent extends React.FC<SlottableProps> {\n __radixId: symbol;\n}\n\n/* @__NO_SIDE_EFFECTS__ */ export function createSlottable(ownerName: string) {\n const Slottable: SlottableComponent = ({ children }) => {\n return <>{children}</>;\n };\n Slottable.displayName = `${ownerName}.Slottable`;\n Slottable.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable;\n}\n\nconst Slottable = createSlottable('Slottable');\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype AnyProps = Record<string, any>;\n\nfunction isSlottable(\n child: React.ReactNode\n): child is React.ReactElement<SlottableProps, typeof Slottable> {\n return (\n React.isValidElement(child) &&\n typeof child.type === 'function' &&\n '__radixId' in child.type &&\n child.type.__radixId === SLOTTABLE_IDENTIFIER\n );\n}\n\nfunction mergeProps(slotProps: AnyProps, childProps: AnyProps) {\n // all child props should override\n const overrideProps = { ...childProps };\n\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n // if the handler exists on both, we compose them\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args: unknown[]) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n }\n // but if it exists only on the slot, we use only this one\n else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n }\n // if it's `style`, we merge them\n else if (propName === 'style') {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === 'className') {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(' ');\n }\n }\n\n return { ...slotProps, ...overrideProps };\n}\n\n// Before React 19 accessing `element.props.ref` will throw a warning and suggest using `element.ref`\n// After React 19 accessing `element.ref` does the opposite.\n// https://github.com/facebook/react/pull/28348\n//\n// Access the ref using the method that doesn't yield a warning.\nfunction getElementRef(element: React.ReactElement) {\n // React <=18 in DEV\n let getter = Object.getOwnPropertyDescriptor(element.props, 'ref')?.get;\n let mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element as any).ref;\n }\n\n // React 19 in DEV\n getter = Object.getOwnPropertyDescriptor(element, 'ref')?.get;\n mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element.props as { ref?: React.Ref<unknown> }).ref;\n }\n\n // Not DEV\n return (element.props as { ref?: React.Ref<unknown> }).ref || (element as any).ref;\n}\n\nexport {\n Slot,\n Slottable,\n //\n Slot as Root,\n};\nexport type { SlotProps };\n","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { createSlot } from '@radix-ui/react-slot';\n\nconst NODES = [\n 'a',\n 'button',\n 'div',\n 'form',\n 'h2',\n 'h3',\n 'img',\n 'input',\n 'label',\n 'li',\n 'nav',\n 'ol',\n 'p',\n 'select',\n 'span',\n 'svg',\n 'ul',\n] as const;\n\ntype Primitives = { [E in (typeof NODES)[number]]: PrimitiveForwardRefComponent<E> };\ntype PrimitivePropsWithRef<E extends React.ElementType> = React.ComponentPropsWithRef<E> & {\n asChild?: boolean;\n};\n\ninterface PrimitiveForwardRefComponent<E extends React.ElementType>\n extends React.ForwardRefExoticComponent<PrimitivePropsWithRef<E>> {}\n\n/* -------------------------------------------------------------------------------------------------\n * Primitive\n * -----------------------------------------------------------------------------------------------*/\n\nconst Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props: PrimitivePropsWithRef<typeof node>, forwardedRef: any) => {\n const { asChild, ...primitiveProps } = props;\n const Comp: any = asChild ? Slot : node;\n\n if (typeof window !== 'undefined') {\n (window as any)[Symbol.for('radix-ui')] = true;\n }\n\n return <Comp {...primitiveProps} ref={forwardedRef} />;\n });\n\n Node.displayName = `Primitive.${node}`;\n\n return { ...primitive, [node]: Node };\n}, {} as Primitives);\n\n/* -------------------------------------------------------------------------------------------------\n * Utils\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Flush custom event dispatch\n * https://github.com/radix-ui/primitives/pull/1378\n *\n * React batches *all* event handlers since version 18, this introduces certain considerations when using custom event types.\n *\n * Internally, React prioritises events in the following order:\n * - discrete\n * - continuous\n * - default\n *\n * https://github.com/facebook/react/blob/a8a4742f1c54493df00da648a3f9d26e3db9c8b5/packages/react-dom/src/events/ReactDOMEventListener.js#L294-L350\n *\n * `discrete` is an important distinction as updates within these events are applied immediately.\n * React however, is not able to infer the priority of custom event types due to how they are detected internally.\n * Because of this, it's possible for updates from custom events to be unexpectedly batched when\n * dispatched by another `discrete` event.\n *\n * In order to ensure that updates from custom events are applied predictably, we need to manually flush the batch.\n * This utility should be used when dispatching a custom event from within another `discrete` event, this utility\n * is not necessary when dispatching known event types, or if dispatching a custom type inside a non-discrete event.\n * For example:\n *\n * dispatching a known click 👎\n * target.dispatchEvent(new Event(‘click’))\n *\n * dispatching a custom type within a non-discrete event 👎\n * onScroll={(event) => event.target.dispatchEvent(new CustomEvent(‘customType’))}\n *\n * dispatching a custom type within a `discrete` event 👍\n * onPointerDown={(event) => dispatchDiscreteCustomEvent(event.target, new CustomEvent(‘customType’))}\n *\n * Note: though React classifies `focus`, `focusin` and `focusout` events as `discrete`, it's not recommended to use\n * this utility with them. This is because it's possible for those handlers to be called implicitly during render\n * e.g. when focus is within a component as it is unmounted, or when managing focus on mount.\n */\n\nfunction dispatchDiscreteCustomEvent<E extends CustomEvent>(target: E['target'], event: E) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = Primitive;\n\nexport {\n Primitive,\n //\n Root,\n //\n dispatchDiscreteCustomEvent,\n};\nexport type { PrimitivePropsWithRef };\n","import * as React from 'react';\n\n/**\n * A custom hook that converts a callback to a ref to avoid triggering re-renders when passed as a\n * prop or avoid re-executing effects when passed as a dependency\n */\nfunction useCallbackRef<T extends (...args: any[]) => any>(callback: T | undefined): T {\n const callbackRef = React.useRef(callback);\n\n React.useEffect(() => {\n callbackRef.current = callback;\n });\n\n // https://github.com/facebook/react/issues/19240\n return React.useMemo(() => ((...args) => callbackRef.current?.(...args)) as T, []);\n}\n\nexport { useCallbackRef };\n","import * as React from 'react';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\n\n/**\n * Listens for when the escape key is down\n */\nfunction useEscapeKeydown(\n onEscapeKeyDownProp?: (event: KeyboardEvent) => void,\n ownerDocument: Document = globalThis?.document\n) {\n const onEscapeKeyDown = useCallbackRef(onEscapeKeyDownProp);\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n onEscapeKeyDown(event);\n }\n };\n ownerDocument.addEventListener('keydown', handleKeyDown, { capture: true });\n return () => ownerDocument.removeEventListener('keydown', handleKeyDown, { capture: true });\n }, [onEscapeKeyDown, ownerDocument]);\n}\n\nexport { useEscapeKeydown };\n","import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { Primitive, dispatchDiscreteCustomEvent } from '@radix-ui/react-primitive';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\nimport { useEscapeKeydown } from '@radix-ui/react-use-escape-keydown';\n\n/* -------------------------------------------------------------------------------------------------\n * DismissableLayer\n * -----------------------------------------------------------------------------------------------*/\n\nconst DISMISSABLE_LAYER_NAME = 'DismissableLayer';\nconst CONTEXT_UPDATE = 'dismissableLayer.update';\nconst POINTER_DOWN_OUTSIDE = 'dismissableLayer.pointerDownOutside';\nconst FOCUS_OUTSIDE = 'dismissableLayer.focusOutside';\n\nlet originalBodyPointerEvents: string;\n\nconst DismissableLayerContext = React.createContext({\n layers: new Set<DismissableLayerElement>(),\n layersWithOutsidePointerEventsDisabled: new Set<DismissableLayerElement>(),\n branches: new Set<DismissableLayerBranchElement>(),\n});\n\ntype DismissableLayerElement = React.ComponentRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface DismissableLayerProps extends PrimitiveDivProps {\n /**\n * When `true`, hover/focus/click interactions will be disabled on elements outside\n * the `DismissableLayer`. Users will need to click twice on outside elements to\n * interact with them: once to close the `DismissableLayer`, and again to trigger the element.\n */\n disableOutsidePointerEvents?: boolean;\n /**\n * Event handler called when the escape key is down.\n * Can be prevented.\n */\n onEscapeKeyDown?: (event: KeyboardEvent) => void;\n /**\n * Event handler called when the a `pointerdown` event happens outside of the `DismissableLayer`.\n * Can be prevented.\n */\n onPointerDownOutside?: (event: PointerDownOutsideEvent) => void;\n /**\n * Event handler called when the focus moves outside of the `DismissableLayer`.\n * Can be prevented.\n */\n onFocusOutside?: (event: FocusOutsideEvent) => void;\n /**\n * Event handler called when an interaction happens outside the `DismissableLayer`.\n * Specifically, when a `pointerdown` event happens outside or focus moves outside of it.\n * Can be prevented.\n */\n onInteractOutside?: (event: PointerDownOutsideEvent | FocusOutsideEvent) => void;\n /**\n * Handler called when the `DismissableLayer` should be dismissed\n */\n onDismiss?: () => void;\n}\n\nconst DismissableLayer = React.forwardRef<DismissableLayerElement, DismissableLayerProps>(\n (props, forwardedRef) => {\n const {\n disableOutsidePointerEvents = false,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n ...layerProps\n } = props;\n const context = React.useContext(DismissableLayerContext);\n const [node, setNode] = React.useState<DismissableLayerElement | null>(null);\n const ownerDocument = node?.ownerDocument ?? globalThis?.document;\n const [, force] = React.useState({});\n const composedRefs = useComposedRefs(forwardedRef, (node) => setNode(node));\n const layers = Array.from(context.layers);\n const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1); // prettier-ignore\n const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled!); // prettier-ignore\n const index = node ? layers.indexOf(node) : -1;\n const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0;\n const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex;\n\n const pointerDownOutside = usePointerDownOutside((event) => {\n const target = event.target as HTMLElement;\n const isPointerDownOnBranch = [...context.branches].some((branch) => branch.contains(target));\n if (!isPointerEventsEnabled || isPointerDownOnBranch) return;\n onPointerDownOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n\n const focusOutside = useFocusOutside((event) => {\n const target = event.target as HTMLElement;\n const isFocusInBranch = [...context.branches].some((branch) => branch.contains(target));\n if (isFocusInBranch) return;\n onFocusOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n\n useEscapeKeydown((event) => {\n const isHighestLayer = index === context.layers.size - 1;\n if (!isHighestLayer) return;\n onEscapeKeyDown?.(event);\n if (!event.defaultPrevented && onDismiss) {\n event.preventDefault();\n onDismiss();\n }\n }, ownerDocument);\n\n React.useEffect(() => {\n if (!node) return;\n if (disableOutsidePointerEvents) {\n if (context.layersWithOutsidePointerEventsDisabled.size === 0) {\n originalBodyPointerEvents = ownerDocument.body.style.pointerEvents;\n ownerDocument.body.style.pointerEvents = 'none';\n }\n context.layersWithOutsidePointerEventsDisabled.add(node);\n }\n context.layers.add(node);\n dispatchUpdate();\n return () => {\n if (\n disableOutsidePointerEvents &&\n context.layersWithOutsidePointerEventsDisabled.size === 1\n ) {\n ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;\n }\n };\n }, [node, ownerDocument, disableOutsidePointerEvents, context]);\n\n /**\n * We purposefully prevent combining this effect with the `disableOutsidePointerEvents` effect\n * because a change to `disableOutsidePointerEvents` would remove this layer from the stack\n * and add it to the end again so the layering order wouldn't be _creation order_.\n * We only want them to be removed from context stacks when unmounted.\n */\n React.useEffect(() => {\n return () => {\n if (!node) return;\n context.layers.delete(node);\n context.layersWithOutsidePointerEventsDisabled.delete(node);\n dispatchUpdate();\n };\n }, [node, context]);\n\n React.useEffect(() => {\n const handleUpdate = () => force({});\n document.addEventListener(CONTEXT_UPDATE, handleUpdate);\n return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);\n }, []);\n\n return (\n <Primitive.div\n {...layerProps}\n ref={composedRefs}\n style={{\n pointerEvents: isBodyPointerEventsDisabled\n ? isPointerEventsEnabled\n ? 'auto'\n : 'none'\n : undefined,\n ...props.style,\n }}\n onFocusCapture={composeEventHandlers(props.onFocusCapture, focusOutside.onFocusCapture)}\n onBlurCapture={composeEventHandlers(props.onBlurCapture, focusOutside.onBlurCapture)}\n onPointerDownCapture={composeEventHandlers(\n props.onPointerDownCapture,\n pointerDownOutside.onPointerDownCapture\n )}\n />\n );\n }\n);\n\nDismissableLayer.displayName = DISMISSABLE_LAYER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DismissableLayerBranch\n * -----------------------------------------------------------------------------------------------*/\n\nconst BRANCH_NAME = 'DismissableLayerBranch';\n\ntype DismissableLayerBranchElement = React.ComponentRef<typeof Primitive.div>;\ninterface DismissableLayerBranchProps extends PrimitiveDivProps {}\n\nconst DismissableLayerBranch = React.forwardRef<\n DismissableLayerBranchElement,\n DismissableLayerBranchProps\n>((props, forwardedRef) => {\n const context = React.useContext(DismissableLayerContext);\n const ref = React.useRef<DismissableLayerBranchElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n context.branches.add(node);\n return () => {\n context.branches.delete(node);\n };\n }\n }, [context.branches]);\n\n return <Primitive.div {...props} ref={composedRefs} />;\n});\n\nDismissableLayerBranch.displayName = BRANCH_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype PointerDownOutsideEvent = CustomEvent<{ originalEvent: PointerEvent }>;\ntype FocusOutsideEvent = CustomEvent<{ originalEvent: FocusEvent }>;\n\n/**\n * Listens for `pointerdown` outside a react subtree. We use `pointerdown` rather than `pointerup`\n * to mimic layer dismissing behaviour present in OS.\n * Returns props to pass to the node we want to check for outside events.\n */\nfunction usePointerDownOutside(\n onPointerDownOutside?: (event: PointerDownOutsideEvent) => void,\n ownerDocument: Document = globalThis?.document\n) {\n const handlePointerDownOutside = useCallbackRef(onPointerDownOutside) as EventListener;\n const isPointerInsideReactTreeRef = React.useRef(false);\n const handleClickRef = React.useRef(() => {});\n\n React.useEffect(() => {\n const handlePointerDown = (event: PointerEvent) => {\n if (event.target && !isPointerInsideReactTreeRef.current) {\n const eventDetail = { originalEvent: event };\n\n function handleAndDispatchPointerDownOutsideEvent() {\n handleAndDispatchCustomEvent(\n POINTER_DOWN_OUTSIDE,\n handlePointerDownOutside,\n eventDetail,\n { discrete: true }\n );\n }\n\n /**\n * On touch devices, we need to wait for a click event because browsers implement\n * a ~350ms delay between the time the user stops touching the display and when the\n * browser executres events. We need to ensure we don't reactivate pointer-events within\n * this timeframe otherwise the browser may execute events that should have been prevented.\n *\n * Additionally, this also lets us deal automatically with cancellations when a click event\n * isn't raised because the page was considered scrolled/drag-scrolled, long-pressed, etc.\n *\n * This is why we also continuously remove the previous listener, because we cannot be\n * certain that it was raised, and therefore cleaned-up.\n */\n if (event.pointerType === 'touch') {\n ownerDocument.removeEventListener('click', handleClickRef.current);\n handleClickRef.current = handleAndDispatchPointerDownOutsideEvent;\n ownerDocument.addEventListener('click', handleClickRef.current, { once: true });\n } else {\n handleAndDispatchPointerDownOutsideEvent();\n }\n } else {\n // We need to remove the event listener in case the outside click has been canceled.\n // See: https://github.com/radix-ui/primitives/issues/2171\n ownerDocument.removeEventListener('click', handleClickRef.current);\n }\n isPointerInsideReactTreeRef.current = false;\n };\n /**\n * if this hook executes in a component that mounts via a `pointerdown` event, the event\n * would bubble up to the document and trigger a `pointerDownOutside` event. We avoid\n * this by delaying the event listener registration on the document.\n * This is not React specific, but rather how the DOM works, ie:\n * ```\n * button.addEventListener('pointerdown', () => {\n * console.log('I will log');\n * document.addEventListener('pointerdown', () => {\n * console.log('I will also log');\n * })\n * });\n */\n const timerId = window.setTimeout(() => {\n ownerDocument.addEventListener('pointerdown', handlePointerDown);\n }, 0);\n return () => {\n window.clearTimeout(timerId);\n ownerDocument.removeEventListener('pointerdown', handlePointerDown);\n ownerDocument.removeEventListener('click', handleClickRef.current);\n };\n }, [ownerDocument, handlePointerDownOutside]);\n\n return {\n // ensures we check React component tree (not just DOM tree)\n onPointerDownCapture: () => (isPointerInsideReactTreeRef.current = true),\n };\n}\n\n/**\n * Listens for when focus happens outside a react subtree.\n * Returns props to pass to the root (node) of the subtree we want to check.\n */\nfunction useFocusOutside(\n onFocusOutside?: (event: FocusOutsideEvent) => void,\n ownerDocument: Document = globalThis?.document\n) {\n const handleFocusOutside = useCallbackRef(onFocusOutside) as EventListener;\n const isFocusInsideReactTreeRef = React.useRef(false);\n\n React.useEffect(() => {\n const handleFocus = (event: FocusEvent) => {\n if (event.target && !isFocusInsideReactTreeRef.current) {\n const eventDetail = { originalEvent: event };\n handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, eventDetail, {\n discrete: false,\n });\n }\n };\n ownerDocument.addEventListener('focusin', handleFocus);\n return () => ownerDocument.removeEventListener('focusin', handleFocus);\n }, [ownerDocument, handleFocusOutside]);\n\n return {\n onFocusCapture: () => (isFocusInsideReactTreeRef.current = true),\n onBlurCapture: () => (isFocusInsideReactTreeRef.current = false),\n };\n}\n\nfunction dispatchUpdate() {\n const event = new CustomEvent(CONTEXT_UPDATE);\n document.dispatchEvent(event);\n}\n\nfunction handleAndDispatchCustomEvent<E extends CustomEvent, OriginalEvent extends Event>(\n name: string,\n handler: ((event: E) => void) | undefined,\n detail: { originalEvent: OriginalEvent } & (E extends CustomEvent<infer D> ? D : never),\n { discrete }: { discrete: boolean }\n) {\n const target = detail.originalEvent.target;\n const event = new CustomEvent(name, { bubbles: false, cancelable: true, detail });\n if (handler) target.addEventListener(name, handler as EventListener, { once: true });\n\n if (discrete) {\n dispatchDiscreteCustomEvent(target, event);\n } else {\n target.dispatchEvent(event);\n }\n}\n\nconst Root = DismissableLayer;\nconst Branch = DismissableLayerBranch;\n\nexport {\n DismissableLayer,\n DismissableLayerBranch,\n //\n Root,\n Branch,\n};\nexport type { DismissableLayerProps };\n","import * as React from 'react';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\n\nconst AUTOFOCUS_ON_MOUNT = 'focusScope.autoFocusOnMount';\nconst AUTOFOCUS_ON_UNMOUNT = 'focusScope.autoFocusOnUnmount';\nconst EVENT_OPTIONS = { bubbles: false, cancelable: true };\n\ntype FocusableTarget = HTMLElement | { focus(): void };\n\n/* -------------------------------------------------------------------------------------------------\n * FocusScope\n * -----------------------------------------------------------------------------------------------*/\n\nconst FOCUS_SCOPE_NAME = 'FocusScope';\n\ntype FocusScopeElement = React.ComponentRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface FocusScopeProps extends PrimitiveDivProps {\n /**\n * When `true`, tabbing from last item will focus first tabbable\n * and shift+tab from first item will focus last tababble.\n * @defaultValue false\n */\n loop?: boolean;\n\n /**\n * When `true`, focus cannot escape the focus scope via keyboard,\n * pointer, or a programmatic focus.\n * @defaultValue false\n */\n trapped?: boolean;\n\n /**\n * Event handler called when auto-focusing on mount.\n * Can be prevented.\n */\n onMountAutoFocus?: (event: Event) => void;\n\n /**\n * Event handler called when auto-focusing on unmount.\n * Can be prevented.\n */\n onUnmountAutoFocus?: (event: Event) => void;\n}\n\nconst FocusScope = React.forwardRef<FocusScopeElement, FocusScopeProps>((props, forwardedRef) => {\n const {\n loop = false,\n trapped = false,\n onMountAutoFocus: onMountAutoFocusProp,\n onUnmountAutoFocus: onUnmountAutoFocusProp,\n ...scopeProps\n } = props;\n const [container, setContainer] = React.useState<HTMLElement | null>(null);\n const onMountAutoFocus = useCallbackRef(onMountAutoFocusProp);\n const onUnmountAutoFocus = useCallbackRef(onUnmountAutoFocusProp);\n const lastFocusedElementRef = React.useRef<HTMLElement | null>(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContainer(node));\n\n const focusScope = React.useRef({\n paused: false,\n pause() {\n this.paused = true;\n },\n resume() {\n this.paused = false;\n },\n }).current;\n\n // Takes care of trapping focus if focus is moved outside programmatically for example\n React.useEffect(() => {\n if (trapped) {\n function handleFocusIn(event: FocusEvent) {\n if (focusScope.paused || !container) return;\n const target = event.target as HTMLElement | null;\n if (container.contains(target)) {\n lastFocusedElementRef.current = target;\n } else {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }\n\n function handleFocusOut(event: FocusEvent) {\n if (focusScope.paused || !container) return;\n const relatedTarget = event.relatedTarget as HTMLElement | null;\n\n // A `focusout` event with a `null` `relatedTarget` will happen in at least two cases:\n //\n // 1. When the user switches app/tabs/windows/the browser itself loses focus.\n // 2. In Google Chrome, when the focused element is removed from the DOM.\n //\n // We let the browser do its thing here because:\n //\n // 1. The browser already keeps a memory of what's focused for when the page gets refocused.\n // 2. In Google Chrome, if we try to focus the deleted focused element (as per below), it\n // throws the CPU to 100%, so we avoid doing anything for this reason here too.\n if (relatedTarget === null) return;\n\n // If the focus has moved to an actual legitimate element (`relatedTarget !== null`)\n // that is outside the container, we move focus to the last valid focused element inside.\n if (!container.contains(relatedTarget)) {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }\n\n // When the focused element gets removed from the DOM, browsers move focus\n // back to the document.body. In this case, we move focus to the container\n // to keep focus trapped correctly.\n function handleMutations(mutations: MutationRecord[]) {\n const focusedElement = document.activeElement as HTMLElement | null;\n if (focusedElement !== document.body) return;\n for (const mutation of mutations) {\n if (mutation.removedNodes.length > 0) focus(container);\n }\n }\n\n document.addEventListener('focusin', handleFocusIn);\n document.addEventListener('focusout', handleFocusOut);\n const mutationObserver = new MutationObserver(handleMutations);\n if (container) mutationObserver.observe(container, { childList: true, subtree: true });\n\n return () => {\n document.removeEventListener('focusin', handleFocusIn);\n document.removeEventListener('focusout', handleFocusOut);\n mutationObserver.disconnect();\n };\n }\n }, [trapped, container, focusScope.paused]);\n\n React.useEffect(() => {\n if (container) {\n focusScopesStack.add(focusScope);\n const previouslyFocusedElement = document.activeElement as HTMLElement | null;\n const hasFocusedCandidate = container.contains(previouslyFocusedElement);\n\n if (!hasFocusedCandidate) {\n const mountEvent = new CustomEvent(AUTOFOCUS_ON_MOUNT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n container.dispatchEvent(mountEvent);\n if (!mountEvent.defaultPrevented) {\n focusFirst(removeLinks(getTabbableCandidates(container)), { select: true });\n if (document.activeElement === previouslyFocusedElement) {\n focus(container);\n }\n }\n }\n\n return () => {\n container.removeEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n\n // We hit a react bug (fixed in v17) with focusing in unmount.\n // We need to delay the focus a little to get around it for now.\n // See: https://github.com/facebook/react/issues/17894\n setTimeout(() => {\n const unmountEvent = new CustomEvent(AUTOFOCUS_ON_UNMOUNT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n container.dispatchEvent(unmountEvent);\n if (!unmountEvent.defaultPrevented) {\n focus(previouslyFocusedElement ?? document.body, { select: true });\n }\n // we need to remove the listener after we `dispatchEvent`\n container.removeEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n\n focusScopesStack.remove(focusScope);\n }, 0);\n };\n }\n }, [container, onMountAutoFocus, onUnmountAutoFocus, focusScope]);\n\n // Takes care of looping focus (when tabbing whilst at the edges)\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (!loop && !trapped) return;\n if (focusScope.paused) return;\n\n const isTabKey = event.key === 'Tab' && !event.altKey && !event.ctrlKey && !event.metaKey;\n const focusedElement = document.activeElement as HTMLElement | null;\n\n if (isTabKey && focusedElement) {\n const container = event.currentTarget as HTMLElement;\n const [first, last] = getTabbableEdges(container);\n const hasTabbableElementsInside = first && last;\n\n // we can only wrap focus if we have tabbable edges\n if (!hasTabbableElementsInside) {\n if (focusedElement === container) event.preventDefault();\n } else {\n if (!event.shiftKey && focusedElement === last) {\n event.preventDefault();\n if (loop) focus(first, { select: true });\n } else if (event.shiftKey && focusedElement === first) {\n event.preventDefault();\n if (loop) focus(last, { select: true });\n }\n }\n }\n },\n [loop, trapped, focusScope.paused]\n );\n\n return (\n <Primitive.div tabIndex={-1} {...scopeProps} ref={composedRefs} onKeyDown={handleKeyDown} />\n );\n});\n\nFocusScope.displayName = FOCUS_SCOPE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * Utils\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Attempts focusing the first element in a list of candidates.\n * Stops when focus has actually moved.\n */\nfunction focusFirst(candidates: HTMLElement[], { select = false } = {}) {\n const previouslyFocusedElement = document.activeElement;\n for (const candidate of candidates) {\n focus(candidate, { select });\n if (document.activeElement !== previouslyFocusedElement) return;\n }\n}\n\n/**\n * Returns the first and last tabbable elements inside a container.\n */\nfunction getTabbableEdges(container: HTMLElement) {\n const candidates = getTabbableCandidates(container);\n const first = findVisible(candidates, container);\n const last = findVisible(candidates.reverse(), container);\n return [first, last] as const;\n}\n\n/**\n * Returns a list of potential tabbable candidates.\n *\n * NOTE: This is only a close approximation. For example it doesn't take into account cases like when\n * elements are not visible. This cannot be worked out easily by just reading a property, but rather\n * necessitate runtime knowledge (computed styles, etc). We deal with these cases separately.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker\n * Credit: https://github.com/discord/focus-layers/blob/master/src/util/wrapFocus.tsx#L1\n */\nfunction getTabbableCandidates(container: HTMLElement) {\n const nodes: HTMLElement[] = [];\n const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {\n acceptNode: (node: any) => {\n const isHiddenInput = node.tagName === 'INPUT' && node.type === 'hidden';\n if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP;\n // `.tabIndex` is not the same as the `tabindex` attribute. It works on the\n // runtime's understanding of tabbability, so this automatically accounts\n // for any kind of element that could be tabbed to.\n return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n },\n });\n while (walker.nextNode()) nodes.push(walker.currentNode as HTMLElement);\n // we do not take into account the order of nodes with positive `tabIndex` as it\n // hinders accessibility to have tab order different from visual order.\n return nodes;\n}\n\n/**\n * Returns the first visible element in a list.\n * NOTE: Only checks visibility up to the `container`.\n */\nfunction findVisible(elements: HTMLElement[], container: HTMLElement) {\n for (const element of elements) {\n // we stop checking if it's hidden at the `container` level (excluding)\n if (!isHidden(element, { upTo: container })) return element;\n }\n}\n\nfunction isHidden(node: HTMLElement, { upTo }: { upTo?: HTMLElement }) {\n if (getComputedStyle(node).visibility === 'hidden') return true;\n while (node) {\n // we stop at `upTo` (excluding it)\n if (upTo !== undefined && node === upTo) return false;\n if (getComputedStyle(node).display === 'none') return true;\n node = node.parentElement as HTMLElement;\n }\n return false;\n}\n\nfunction isSelectableInput(element: any): element is FocusableTarget & { select: () => void } {\n return element instanceof HTMLInputElement && 'select' in element;\n}\n\nfunction focus(element?: FocusableTarget | null, { select = false } = {}) {\n // only focus if that element is focusable\n if (element && element.focus) {\n const previouslyFocusedElement = document.activeElement;\n // NOTE: we prevent scrolling on focus, to minimize jarring transitions for users\n element.focus({ preventScroll: true });\n // only select if its not the same element, it supports selection and we need to select\n if (element !== previouslyFocusedElement && isSelectableInput(element) && select)\n element.select();\n }\n}\n\n/* -------------------------------------------------------------------------------------------------\n * FocusScope stack\n * -----------------------------------------------------------------------------------------------*/\n\ntype FocusScopeAPI = { paused: boolean; pause(): void; resume(): void };\nconst focusScopesStack = createFocusScopesStack();\n\nfunction createFocusScopesStack() {\n /** A stack of focus scopes, with the active one at the top */\n let stack: FocusScopeAPI[] = [];\n\n return {\n add(focusScope: FocusScopeAPI) {\n // pause the currently active focus scope (at the top of the stack)\n const activeFocusScope = stack[0];\n if (focusScope !== activeFocusScope) {\n activeFocusScope?.pause();\n }\n // remove in case it already exists (because we'll re-add it at the top of the stack)\n stack = arrayRemove(stack, focusScope);\n stack.unshift(focusScope);\n },\n\n remove(focusScope: FocusScopeAPI) {\n stack = arrayRemove(stack, focusScope);\n stack[0]?.resume();\n },\n };\n}\n\nfunction arrayRemove<T>(array: T[], item: T) {\n const updatedArray = [...array];\n const index = updatedArray.indexOf(item);\n if (index !== -1) {\n updatedArray.splice(index, 1);\n }\n return updatedArray;\n}\n\nfunction removeLinks(items: HTMLElement[]) {\n return items.filter((item) => item.tagName !== 'A');\n}\n\nconst Root = FocusScope;\n\nexport {\n FocusScope,\n //\n Root,\n};\nexport type { FocusScopeProps };\n","import * as React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\n\n/* -------------------------------------------------------------------------------------------------\n * Portal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'Portal';\n\ntype PortalElement = React.ComponentRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface PortalProps extends PrimitiveDivProps {\n /**\n * An optional container where the portaled content should be appended.\n */\n container?: Element | DocumentFragment | null;\n}\n\nconst Portal = React.forwardRef<PortalElement, PortalProps>((props, forwardedRef) => {\n const { container: containerProp, ...portalProps } = props;\n const [mounted, setMounted] = React.useState(false);\n useLayoutEffect(() => setMounted(true), []);\n const container = containerProp || (mounted && globalThis?.document?.body);\n return container\n ? ReactDOM.createPortal(<Primitive.div {...portalProps} ref={forwardedRef} />, container)\n : null;\n});\n\nPortal.displayName = PORTAL_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = Portal;\n\nexport {\n Portal,\n //\n Root,\n};\nexport type { PortalProps };\n","import * as React from 'react';\n\ntype Machine<S> = { [k: string]: { [k: string]: S } };\ntype MachineState<T> = keyof T;\ntype MachineEvent<T> = keyof UnionToIntersection<T[keyof T]>;\n\n// 🤯 https://fettblog.eu/typescript-union-to-intersection/\ntype UnionToIntersection<T> = (T extends any ? (x: T) => any : never) extends (x: infer R) => any\n ? R\n : never;\n\nexport function useStateMachine<M>(\n initialState: MachineState<M>,\n machine: M & Machine<MachineState<M>>\n) {\n return React.useReducer((state: MachineState<M>, event: MachineEvent<M>): MachineState<M> => {\n const nextState = (machine[state] as any)[event];\n return nextState ?? state;\n }, initialState);\n}\n","import * as React from 'react';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { useStateMachine } from './use-state-machine';\n\ninterface PresenceProps {\n children: React.ReactElement | ((props: { present: boolean }) => React.ReactElement);\n present: boolean;\n}\n\nconst Presence: React.FC<PresenceProps> = (props) => {\n const { present, children } = props;\n const presence = usePresence(present);\n\n const child = (\n typeof children === 'function'\n ? children({ present: presence.isPresent })\n : React.Children.only(children)\n ) as React.ReactElement<{ ref?: React.Ref<HTMLElement> }>;\n\n const ref = useComposedRefs(presence.ref, getElementRef(child));\n const forceMount = typeof children === 'function';\n return forceMount || presence.isPresent ? React.cloneElement(child, { ref }) : null;\n};\n\nPresence.displayName = 'Presence';\n\n/* -------------------------------------------------------------------------------------------------\n * usePresence\n * -----------------------------------------------------------------------------------------------*/\n\nfunction usePresence(present: boolean) {\n const [node, setNode] = React.useState<HTMLElement>();\n const stylesRef = React.useRef<CSSStyleDeclaration | null>(null);\n const prevPresentRef = React.useRef(present);\n const prevAnimationNameRef = React.useRef<string>('none');\n const initialState = present ? 'mounted' : 'unmounted';\n const [state, send] = useStateMachine(initialState, {\n mounted: {\n UNMOUNT: 'unmounted',\n ANIMATION_OUT: 'unmountSuspended',\n },\n unmountSuspended: {\n MOUNT: 'mounted',\n ANIMATION_END: 'unmounted',\n },\n unmounted: {\n MOUNT: 'mounted',\n },\n });\n\n React.useEffect(() => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n prevAnimationNameRef.current = state === 'mounted' ? currentAnimationName : 'none';\n }, [state]);\n\n useLayoutEffect(() => {\n const styles = stylesRef.current;\n const wasPresent = prevPresentRef.current;\n const hasPresentChanged = wasPresent !== present;\n\n if (hasPresentChanged) {\n const prevAnimationName = prevAnimationNameRef.current;\n const currentAnimationName = getAnimationName(styles);\n\n if (present) {\n send('MOUNT');\n } else if (currentAnimationName === 'none' || styles?.display === 'none') {\n // If there is no exit animation or the element is hidden, animations won't run\n // so we unmount instantly\n send('UNMOUNT');\n } else {\n /**\n * When `present` changes to `false`, we check changes to animation-name to\n * determine whether an animation has started. We chose this approach (reading\n * computed styles) because there is no `animationrun` event and `animationstart`\n * fires after `animation-delay` has expired which would be too late.\n */\n const isAnimating = prevAnimationName !== currentAnimationName;\n\n if (wasPresent && isAnimating) {\n send('ANIMATION_OUT');\n } else {\n send('UNMOUNT');\n }\n }\n\n prevPresentRef.current = present;\n }\n }, [present, send]);\n\n useLayoutEffect(() => {\n if (node) {\n let timeoutId: number;\n const ownerWindow = node.ownerDocument.defaultView ?? window;\n /**\n * Triggering an ANIMATION_OUT during an ANIMATION_IN will fire an `animationcancel`\n * event for ANIMATION_IN after we have entered `unmountSuspended` state. So, we\n * make sure we only trigger ANIMATION_END for the currently active animation.\n */\n const handleAnimationEnd = (event: AnimationEvent) => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n // The event.animationName is unescaped for CSS syntax,\n // so we need to escape it to compare with the animationName computed from the style.\n const isCurrentAnimation = currentAnimationName.includes(CSS.escape(event.animationName));\n if (event.target === node && isCurrentAnimation) {\n // With React 18 concurrency this update is applied a frame after the\n // animation ends, creating a flash of visible content. By setting the\n // animation fill mode to \"forwards\", we force the node to keep the\n // styles of the last keyframe, removing the flash.\n //\n // Previously we flushed the update via ReactDom.flushSync, but with\n // exit animations this resulted in the node being removed from the\n // DOM before the synthetic animationEnd event was dispatched, meaning\n // user-provided event handlers would not be called.\n // https://github.com/radix-ui/primitives/pull/1849\n send('ANIMATION_END');\n if (!prevPresentRef.current) {\n const currentFillMode = node.style.animationFillMode;\n node.style.animationFillMode = 'forwards';\n // Reset the style after the node had time to unmount (for cases\n // where the component chooses not to unmount). Doing this any\n // sooner than `setTimeout` (e.g. with `requestAnimationFrame`)\n // still causes a flash.\n timeoutId = ownerWindow.setTimeout(() => {\n if (node.style.animationFillMode === 'forwards') {\n node.style.animationFillMode = currentFillMode;\n }\n });\n }\n }\n };\n const handleAnimationStart = (event: AnimationEvent) => {\n if (event.target === node) {\n // if animation occurred, store its name as the previous animation.\n prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n }\n };\n node.addEventListener('animationstart', handleAnimationStart);\n node.addEventListener('animationcancel', handleAnimationEnd);\n node.addEventListener('animationend', handleAnimationEnd);\n return () => {\n ownerWindow.clearTimeout(timeoutId);\n node.removeEventListener('animationstart', handleAnimationStart);\n node.removeEventListener('animationcancel', handleAnimationEnd);\n node.removeEventListener('animationend', handleAnimationEnd);\n };\n } else {\n // Transition to the unmounted state if the node is removed prematurely.\n // We avoid doing so during cleanup as the node may change but still exist.\n send('ANIMATION_END');\n }\n }, [node, send]);\n\n return {\n isPresent: ['mounted', 'unmountSuspended'].includes(state),\n ref: React.useCallback((node: HTMLElement) => {\n stylesRef.current = node ? getComputedStyle(node) : null;\n setNode(node);\n }, []),\n };\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getAnimationName(styles: CSSStyleDeclaration | null) {\n return styles?.animationName || 'none';\n}\n\n// Before React 19 accessing `element.props.ref` will throw a warning and suggest using `element.ref`\n// After React 19 accessing `element.ref` does the opposite.\n// https://github.com/facebook/react/pull/28348\n//\n// Access the ref using the method that doesn't yield a warning.\nfunction getElementRef(element: React.ReactElement<{ ref?: React.Ref<unknown> }>) {\n // React <=18 in DEV\n let getter = Object.getOwnPropertyDescriptor(element.props, 'ref')?.get;\n let mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element as any).ref;\n }\n\n // React 19 in DEV\n getter = Object.getOwnPropertyDescriptor(element, 'ref')?.get;\n mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n\n // Not DEV\n return element.props.ref || (element as any).ref;\n}\n\nconst Root = Presence;\n\nexport {\n Presence,\n //\n Root,\n};\nexport type { PresenceProps };\n","import * as React from 'react';\n\n/** Number of components which have requested interest to have focus guards */\nlet count = 0;\n\ninterface FocusGuardsProps {\n children?: React.ReactNode;\n}\n\nfunction FocusGuards(props: FocusGuardsProps) {\n useFocusGuards();\n return props.children;\n}\n\n/**\n * Injects a pair of focus guards at the edges of the whole DOM tree\n * to ensure `focusin` & `focusout` events can be caught consistently.\n */\nfunction useFocusGuards() {\n /* eslint-disable no-restricted-globals */\n React.useEffect(() => {\n const edgeGuards = document.querySelectorAll('[data-radix-focus-guard]');\n document.body.insertAdjacentElement('afterbegin', edgeGuards[0] ?? createFocusGuard());\n document.body.insertAdjacentElement('beforeend', edgeGuards[1] ?? createFocusGuard());\n count++;\n\n return () => {\n if (count === 1) {\n document.querySelectorAll('[data-radix-focus-guard]').forEach((node) => node.remove());\n }\n count--;\n };\n }, []);\n /* eslint-enable no-restricted-globals */\n}\n\nfunction createFocusGuard() {\n // eslint-disable-next-line no-restricted-globals\n const element = document.createElement('span');\n element.setAttribute('data-radix-focus-guard', '');\n element.tabIndex = 0;\n element.style.outline = 'none';\n element.style.opacity = '0';\n element.style.position = 'fixed';\n element.style.pointerEvents = 'none';\n return element;\n}\n\nexport {\n FocusGuards,\n //\n FocusGuards as Root,\n //\n useFocusGuards,\n};\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n};\n","export var zeroRightClassName = 'right-scroll-bar-position';\nexport var fullWidthClassName = 'width-before-scroll-bar';\nexport var noScrollbarsClassName = 'with-scroll-bars-hidden';\n/**\n * Name of a CSS variable containing the amount of \"hidden\" scrollbar\n * ! might be undefined ! use will fallback!\n */\nexport var removedBarSizeVariable = '--removed-body-scroll-bar-size';\n","/**\n * Assigns a value for a given ref, no matter of the ref format\n * @param {RefObject} ref - a callback function or ref object\n * @param value - a new value\n *\n * @see https://github.com/theKashey/use-callback-ref#assignref\n * @example\n * const refObject = useRef();\n * const refFn = (ref) => {....}\n *\n * assignRef(refObject, \"refValue\");\n * assignRef(refFn, \"refValue\");\n */\nexport function assignRef(ref, value) {\n if (typeof ref === 'function') {\n ref(value);\n }\n else if (ref) {\n ref.current = value;\n }\n return ref;\n}\n","import { useState } from 'react';\n/**\n * creates a MutableRef with ref change callback\n * @param initialValue - initial ref value\n * @param {Function} callback - a callback to run when value changes\n *\n * @example\n * const ref = useCallbackRef(0, (newValue, oldValue) => console.log(oldValue, '->', newValue);\n * ref.current = 1;\n * // prints 0 -> 1\n *\n * @see https://reactjs.org/docs/hooks-reference.html#useref\n * @see https://github.com/theKashey/use-callback-ref#usecallbackref---to-replace-reactuseref\n * @returns {MutableRefObject}\n */\nexport function useCallbackRef(initialValue, callback) {\n var ref = useState(function () { return ({\n // value\n value: initialValue,\n // last callback\n callback: callback,\n // \"memoized\" public interface\n facade: {\n get current() {\n return ref.value;\n },\n set current(value) {\n var last = ref.value;\n if (last !== value) {\n ref.value = value;\n ref.callback(value, last);\n }\n },\n },\n }); })[0];\n // update callback\n ref.callback = callback;\n return ref.facade;\n}\n","import * as React from 'react';\nimport { assignRef } from './assignRef';\nimport { useCallbackRef } from './useRef';\nvar useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\nvar currentValues = new WeakMap();\n/**\n * Merges two or more refs together providing a single interface to set their value\n * @param {RefObject|Ref} refs\n * @returns {MutableRefObject} - a new ref, which translates all changes to {refs}\n *\n * @see {@link mergeRefs} a version without buit-in memoization\n * @see https://github.com/theKashey/use-callback-ref#usemergerefs\n * @example\n * const Component = React.forwardRef((props, ref) => {\n * const ownRef = useRef();\n * const domRef = useMergeRefs([ref, ownRef]); // 👈 merge together\n * return <div ref={domRef}>...</div>\n * }\n */\nexport function useMergeRefs(refs, defaultValue) {\n var callbackRef = useCallbackRef(defaultValue || null, function (newValue) {\n return refs.forEach(function (ref) { return assignRef(ref, newValue); });\n });\n // handle refs changes - added or removed\n useIsomorphicLayoutEffect(function () {\n var oldValue = currentValues.get(callbackRef);\n if (oldValue) {\n var prevRefs_1 = new Set(oldValue);\n var nextRefs_1 = new Set(refs);\n var current_1 = callbackRef.current;\n prevRefs_1.forEach(function (ref) {\n if (!nextRefs_1.has(ref)) {\n assignRef(ref, null);\n }\n });\n nextRefs_1.forEach(function (ref) {\n if (!prevRefs_1.has(ref)) {\n assignRef(ref, current_1);\n }\n });\n }\n currentValues.set(callbackRef, refs);\n }, [refs]);\n return callbackRef;\n}\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n};\n","import { __assign } from \"tslib\";\nfunction ItoI(a) {\n return a;\n}\nfunction innerCreateMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n var buffer = [];\n var assigned = false;\n var medium = {\n read: function () {\n if (assigned) {\n throw new Error('Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.');\n }\n if (buffer.length) {\n return buffer[buffer.length - 1];\n }\n return defaults;\n },\n useMedium: function (data) {\n var item = middleware(data, assigned);\n buffer.push(item);\n return function () {\n buffer = buffer.filter(function (x) { return x !== item; });\n };\n },\n assignSyncMedium: function (cb) {\n assigned = true;\n while (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n }\n buffer = {\n push: function (x) { return cb(x); },\n filter: function () { return buffer; },\n };\n },\n assignMedium: function (cb) {\n assigned = true;\n var pendingQueue = [];\n if (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n pendingQueue = buffer;\n }\n var executeQueue = function () {\n var cbs = pendingQueue;\n pendingQueue = [];\n cbs.forEach(cb);\n };\n var cycle = function () { return Promise.resolve().then(executeQueue); };\n cycle();\n buffer = {\n push: function (x) {\n pendingQueue.push(x);\n cycle();\n },\n filter: function (filter) {\n pendingQueue = pendingQueue.filter(filter);\n return buffer;\n },\n };\n },\n };\n return medium;\n}\nexport function createMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n return innerCreateMedium(defaults, middleware);\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function createSidecarMedium(options) {\n if (options === void 0) { options = {}; }\n var medium = innerCreateMedium(null);\n medium.options = __assign({ async: true, ssr: false }, options);\n return medium;\n}\n","import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nvar SideCar = function (_a) {\n var sideCar = _a.sideCar, rest = __rest(_a, [\"sideCar\"]);\n if (!sideCar) {\n throw new Error('Sidecar: please provide `sideCar` property to import the right car');\n }\n var Target = sideCar.read();\n if (!Target) {\n throw new Error('Sidecar medium not found');\n }\n return React.createElement(Target, __assign({}, rest));\n};\nSideCar.isSideCarExport = true;\nexport function exportSidecar(medium, exported) {\n medium.useMedium(exported);\n return SideCar;\n}\n","import { createSidecarMedium } from 'use-sidecar';\nexport var effectCar = createSidecarMedium();\n","import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nimport { fullWidthClassName, zeroRightClassName } from 'react-remove-scroll-bar/constants';\nimport { useMergeRefs } from 'use-callback-ref';\nimport { effectCar } from './medium';\nvar nothing = function () {\n return;\n};\n/**\n * Removes scrollbar from the page and contain the scroll within the Lock\n */\nvar RemoveScroll = React.forwardRef(function (props, parentRef) {\n var ref = React.useRef(null);\n var _a = React.useState({\n onScrollCapture: nothing,\n onWheelCapture: nothing,\n onTouchMoveCapture: nothing,\n }), callbacks = _a[0], setCallbacks = _a[1];\n var forwardProps = props.forwardProps, children = props.children, className = props.className, removeScrollBar = props.removeScrollBar, enabled = props.enabled, shards = props.shards, sideCar = props.sideCar, noRelative = props.noRelative, noIsolation = props.noIsolation, inert = props.inert, allowPinchZoom = props.allowPinchZoom, _b = props.as, Container = _b === void 0 ? 'div' : _b, gapMode = props.gapMode, rest = __rest(props, [\"forwardProps\", \"children\", \"className\", \"removeScrollBar\", \"enabled\", \"shards\", \"sideCar\", \"noRelative\", \"noIsolation\", \"inert\", \"allowPinchZoom\", \"as\", \"gapMode\"]);\n var SideCar = sideCar;\n var containerRef = useMergeRefs([ref, parentRef]);\n var containerProps = __assign(__assign({}, rest), callbacks);\n return (React.createElement(React.Fragment, null,\n enabled && (React.createElement(SideCar, { sideCar: effectCar, removeScrollBar: removeScrollBar, shards: shards, noRelative: noRelative, noIsolation: noIsolation, inert: inert, setCallbacks: setCallbacks, allowPinchZoom: !!allowPinchZoom, lockRef: ref, gapMode: gapMode })),\n forwardProps ? (React.cloneElement(React.Children.only(children), __assign(__assign({}, containerProps), { ref: containerRef }))) : (React.createElement(Container, __assign({}, containerProps, { className: className, ref: containerRef }), children))));\n});\nRemoveScroll.defaultProps = {\n enabled: true,\n removeScrollBar: true,\n inert: false,\n};\nRemoveScroll.classNames = {\n fullWidth: fullWidthClassName,\n zeroRight: zeroRightClassName,\n};\nexport { RemoveScroll };\n","var currentNonce;\nexport var setNonce = function (nonce) {\n currentNonce = nonce;\n};\nexport var getNonce = function () {\n if (currentNonce) {\n return currentNonce;\n }\n if (typeof __webpack_nonce__ !== 'undefined') {\n return __webpack_nonce__;\n }\n return undefined;\n};\n","import { getNonce } from 'get-nonce';\nfunction makeStyleTag() {\n if (!document)\n return null;\n var tag = document.createElement('style');\n tag.type = 'text/css';\n var nonce = getNonce();\n if (nonce) {\n tag.setAttribute('nonce', nonce);\n }\n return tag;\n}\nfunction injectStyles(tag, css) {\n // @ts-ignore\n if (tag.styleSheet) {\n // @ts-ignore\n tag.styleSheet.cssText = css;\n }\n else {\n tag.appendChild(document.createTextNode(css));\n }\n}\nfunction insertStyleTag(tag) {\n var head = document.head || document.getElementsByTagName('head')[0];\n head.appendChild(tag);\n}\nexport var stylesheetSingleton = function () {\n var counter = 0;\n var stylesheet = null;\n return {\n add: function (style) {\n if (counter == 0) {\n if ((stylesheet = makeStyleTag())) {\n injectStyles(stylesheet, style);\n insertStyleTag(stylesheet);\n }\n }\n counter++;\n },\n remove: function () {\n counter--;\n if (!counter && stylesheet) {\n stylesheet.parentNode && stylesheet.parentNode.removeChild(stylesheet);\n stylesheet = null;\n }\n },\n };\n};\n","import * as React from 'react';\nimport { stylesheetSingleton } from './singleton';\n/**\n * creates a hook to control style singleton\n * @see {@link styleSingleton} for a safer component version\n * @example\n * ```tsx\n * const useStyle = styleHookSingleton();\n * ///\n * useStyle('body { overflow: hidden}');\n */\nexport var styleHookSingleton = function () {\n var sheet = stylesheetSingleton();\n return function (styles, isDynamic) {\n React.useEffect(function () {\n sheet.add(styles);\n return function () {\n sheet.remove();\n };\n }, [styles && isDynamic]);\n };\n};\n","import { styleHookSingleton } from './hook';\n/**\n * create a Component to add styles on demand\n * - styles are added when first instance is mounted\n * - styles are removed when the last instance is unmounted\n * - changing styles in runtime does nothing unless dynamic is set. But with multiple components that can lead to the undefined behavior\n */\nexport var styleSingleton = function () {\n var useStyle = styleHookSingleton();\n var Sheet = function (_a) {\n var styles = _a.styles, dynamic = _a.dynamic;\n useStyle(styles, dynamic);\n return null;\n };\n return Sheet;\n};\n","export var zeroGap = {\n left: 0,\n top: 0,\n right: 0,\n gap: 0,\n};\nvar parse = function (x) { return parseInt(x || '', 10) || 0; };\nvar getOffset = function (gapMode) {\n var cs = window.getComputedStyle(document.body);\n var left = cs[gapMode === 'padding' ? 'paddingLeft' : 'marginLeft'];\n var top = cs[gapMode === 'padding' ? 'paddingTop' : 'marginTop'];\n var right = cs[gapMode === 'padding' ? 'paddingRight' : 'marginRight'];\n return [parse(left), parse(top), parse(right)];\n};\nexport var getGapWidth = function (gapMode) {\n if (gapMode === void 0) { gapMode = 'margin'; }\n if (typeof window === 'undefined') {\n return zeroGap;\n }\n var offsets = getOffset(gapMode);\n var documentWidth = document.documentElement.clientWidth;\n var windowWidth = window.innerWidth;\n return {\n left: offsets[0],\n top: offsets[1],\n right: offsets[2],\n gap: Math.max(0, windowWidth - documentWidth + offsets[2] - offsets[0]),\n };\n};\n","import * as React from 'react';\nimport { styleSingleton } from 'react-style-singleton';\nimport { fullWidthClassName, zeroRightClassName, noScrollbarsClassName, removedBarSizeVariable } from './constants';\nimport { getGapWidth } from './utils';\nvar Style = styleSingleton();\nexport var lockAttribute = 'data-scroll-locked';\n// important tip - once we measure scrollBar width and remove them\n// we could not repeat this operation\n// thus we are using style-singleton - only the first \"yet correct\" style will be applied.\nvar getStyles = function (_a, allowRelative, gapMode, important) {\n var left = _a.left, top = _a.top, right = _a.right, gap = _a.gap;\n if (gapMode === void 0) { gapMode = 'margin'; }\n return \"\\n .\".concat(noScrollbarsClassName, \" {\\n overflow: hidden \").concat(important, \";\\n padding-right: \").concat(gap, \"px \").concat(important, \";\\n }\\n body[\").concat(lockAttribute, \"] {\\n overflow: hidden \").concat(important, \";\\n overscroll-behavior: contain;\\n \").concat([\n allowRelative && \"position: relative \".concat(important, \";\"),\n gapMode === 'margin' &&\n \"\\n padding-left: \".concat(left, \"px;\\n padding-top: \").concat(top, \"px;\\n padding-right: \").concat(right, \"px;\\n margin-left:0;\\n margin-top:0;\\n margin-right: \").concat(gap, \"px \").concat(important, \";\\n \"),\n gapMode === 'padding' && \"padding-right: \".concat(gap, \"px \").concat(important, \";\"),\n ]\n .filter(Boolean)\n .join(''), \"\\n }\\n \\n .\").concat(zeroRightClassName, \" {\\n right: \").concat(gap, \"px \").concat(important, \";\\n }\\n \\n .\").concat(fullWidthClassName, \" {\\n margin-right: \").concat(gap, \"px \").concat(important, \";\\n }\\n \\n .\").concat(zeroRightClassName, \" .\").concat(zeroRightClassName, \" {\\n right: 0 \").concat(important, \";\\n }\\n \\n .\").concat(fullWidthClassName, \" .\").concat(fullWidthClassName, \" {\\n margin-right: 0 \").concat(important, \";\\n }\\n \\n body[\").concat(lockAttribute, \"] {\\n \").concat(removedBarSizeVariable, \": \").concat(gap, \"px;\\n }\\n\");\n};\nvar getCurrentUseCounter = function () {\n var counter = parseInt(document.body.getAttribute(lockAttribute) || '0', 10);\n return isFinite(counter) ? counter : 0;\n};\nexport var useLockAttribute = function () {\n React.useEffect(function () {\n document.body.setAttribute(lockAttribute, (getCurrentUseCounter() + 1).toString());\n return function () {\n var newCounter = getCurrentUseCounter() - 1;\n if (newCounter <= 0) {\n document.body.removeAttribute(lockAttribute);\n }\n else {\n document.body.setAttribute(lockAttribute, newCounter.toString());\n }\n };\n }, []);\n};\n/**\n * Removes page scrollbar and blocks page scroll when mounted\n */\nexport var RemoveScrollBar = function (_a) {\n var noRelative = _a.noRelative, noImportant = _a.noImportant, _b = _a.gapMode, gapMode = _b === void 0 ? 'margin' : _b;\n useLockAttribute();\n /*\n gap will be measured on every component mount\n however it will be used only by the \"first\" invocation\n due to singleton nature of <Style\n */\n var gap = React.useMemo(function () { return getGapWidth(gapMode); }, [gapMode]);\n return React.createElement(Style, { styles: getStyles(gap, !noRelative, gapMode, !noImportant ? '!important' : '') });\n};\n","var passiveSupported = false;\nif (typeof window !== 'undefined') {\n try {\n var options = Object.defineProperty({}, 'passive', {\n get: function () {\n passiveSupported = true;\n return true;\n },\n });\n // @ts-ignore\n window.addEventListener('test', options, options);\n // @ts-ignore\n window.removeEventListener('test', options, options);\n }\n catch (err) {\n passiveSupported = false;\n }\n}\nexport var nonPassive = passiveSupported ? { passive: false } : false;\n","var alwaysContainsScroll = function (node) {\n // textarea will always _contain_ scroll inside self. It only can be hidden\n return node.tagName === 'TEXTAREA';\n};\nvar elementCanBeScrolled = function (node, overflow) {\n if (!(node instanceof Element)) {\n return false;\n }\n var styles = window.getComputedStyle(node);\n return (\n // not-not-scrollable\n styles[overflow] !== 'hidden' &&\n // contains scroll inside self\n !(styles.overflowY === styles.overflowX && !alwaysContainsScroll(node) && styles[overflow] === 'visible'));\n};\nvar elementCouldBeVScrolled = function (node) { return elementCanBeScrolled(node, 'overflowY'); };\nvar elementCouldBeHScrolled = function (node) { return elementCanBeScrolled(node, 'overflowX'); };\nexport var locationCouldBeScrolled = function (axis, node) {\n var ownerDocument = node.ownerDocument;\n var current = node;\n do {\n // Skip over shadow root\n if (typeof ShadowRoot !== 'undefined' && current instanceof ShadowRoot) {\n current = current.host;\n }\n var isScrollable = elementCouldBeScrolled(axis, current);\n if (isScrollable) {\n var _a = getScrollVariables(axis, current), scrollHeight = _a[1], clientHeight = _a[2];\n if (scrollHeight > clientHeight) {\n return true;\n }\n }\n current = current.parentNode;\n } while (current && current !== ownerDocument.body);\n return false;\n};\nvar getVScrollVariables = function (_a) {\n var scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight;\n return [\n scrollTop,\n scrollHeight,\n clientHeight,\n ];\n};\nvar getHScrollVariables = function (_a) {\n var scrollLeft = _a.scrollLeft, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth;\n return [\n scrollLeft,\n scrollWidth,\n clientWidth,\n ];\n};\nvar elementCouldBeScrolled = function (axis, node) {\n return axis === 'v' ? elementCouldBeVScrolled(node) : elementCouldBeHScrolled(node);\n};\nvar getScrollVariables = function (axis, node) {\n return axis === 'v' ? getVScrollVariables(node) : getHScrollVariables(node);\n};\nvar getDirectionFactor = function (axis, direction) {\n /**\n * If the element's direction is rtl (right-to-left), then scrollLeft is 0 when the scrollbar is at its rightmost position,\n * and then increasingly negative as you scroll towards the end of the content.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollLeft\n */\n return axis === 'h' && direction === 'rtl' ? -1 : 1;\n};\nexport var handleScroll = function (axis, endTarget, event, sourceDelta, noOverscroll) {\n var directionFactor = getDirectionFactor(axis, window.getComputedStyle(endTarget).direction);\n var delta = directionFactor * sourceDelta;\n // find scrollable target\n var target = event.target;\n var targetInLock = endTarget.contains(target);\n var shouldCancelScroll = false;\n var isDeltaPositive = delta > 0;\n var availableScroll = 0;\n var availableScrollTop = 0;\n do {\n if (!target) {\n break;\n }\n var _a = getScrollVariables(axis, target), position = _a[0], scroll_1 = _a[1], capacity = _a[2];\n var elementScroll = scroll_1 - capacity - directionFactor * position;\n if (position || elementScroll) {\n if (elementCouldBeScrolled(axis, target)) {\n availableScroll += elementScroll;\n availableScrollTop += position;\n }\n }\n var parent_1 = target.parentNode;\n // we will \"bubble\" from ShadowDom in case we are, or just to the parent in normal case\n // this is the same logic used in focus-lock\n target = (parent_1 && parent_1.nodeType === Node.DOCUMENT_FRAGMENT_NODE ? parent_1.host : parent_1);\n } while (\n // portaled content\n (!targetInLock && target !== document.body) ||\n // self content\n (targetInLock && (endTarget.contains(target) || endTarget === target)));\n // handle epsilon around 0 (non standard zoom levels)\n if (isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScroll) < 1) || (!noOverscroll && delta > availableScroll))) {\n shouldCancelScroll = true;\n }\n else if (!isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScrollTop) < 1) || (!noOverscroll && -delta > availableScrollTop))) {\n shouldCancelScroll = true;\n }\n return shouldCancelScroll;\n};\n","import { __spreadArray } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScrollBar } from 'react-remove-scroll-bar';\nimport { styleSingleton } from 'react-style-singleton';\nimport { nonPassive } from './aggresiveCapture';\nimport { handleScroll, locationCouldBeScrolled } from './handleScroll';\nexport var getTouchXY = function (event) {\n return 'changedTouches' in event ? [event.changedTouches[0].clientX, event.changedTouches[0].clientY] : [0, 0];\n};\nexport var getDeltaXY = function (event) { return [event.deltaX, event.deltaY]; };\nvar extractRef = function (ref) {\n return ref && 'current' in ref ? ref.current : ref;\n};\nvar deltaCompare = function (x, y) { return x[0] === y[0] && x[1] === y[1]; };\nvar generateStyle = function (id) { return \"\\n .block-interactivity-\".concat(id, \" {pointer-events: none;}\\n .allow-interactivity-\").concat(id, \" {pointer-events: all;}\\n\"); };\nvar idCounter = 0;\nvar lockStack = [];\nexport function RemoveScrollSideCar(props) {\n var shouldPreventQueue = React.useRef([]);\n var touchStartRef = React.useRef([0, 0]);\n var activeAxis = React.useRef();\n var id = React.useState(idCounter++)[0];\n var Style = React.useState(styleSingleton)[0];\n var lastProps = React.useRef(props);\n React.useEffect(function () {\n lastProps.current = props;\n }, [props]);\n React.useEffect(function () {\n if (props.inert) {\n document.body.classList.add(\"block-interactivity-\".concat(id));\n var allow_1 = __spreadArray([props.lockRef.current], (props.shards || []).map(extractRef), true).filter(Boolean);\n allow_1.forEach(function (el) { return el.classList.add(\"allow-interactivity-\".concat(id)); });\n return function () {\n document.body.classList.remove(\"block-interactivity-\".concat(id));\n allow_1.forEach(function (el) { return el.classList.remove(\"allow-interactivity-\".concat(id)); });\n };\n }\n return;\n }, [props.inert, props.lockRef.current, props.shards]);\n var shouldCancelEvent = React.useCallback(function (event, parent) {\n if (('touches' in event && event.touches.length === 2) || (event.type === 'wheel' && event.ctrlKey)) {\n return !lastProps.current.allowPinchZoom;\n }\n var touch = getTouchXY(event);\n var touchStart = touchStartRef.current;\n var deltaX = 'deltaX' in event ? event.deltaX : touchStart[0] - touch[0];\n var deltaY = 'deltaY' in event ? event.deltaY : touchStart[1] - touch[1];\n var currentAxis;\n var target = event.target;\n var moveDirection = Math.abs(deltaX) > Math.abs(deltaY) ? 'h' : 'v';\n // allow horizontal touch move on Range inputs. They will not cause any scroll\n if ('touches' in event && moveDirection === 'h' && target.type === 'range') {\n return false;\n }\n // allow drag selection (iOS); check if selection's anchorNode is the same as target or contains target\n var selection = window.getSelection();\n var anchorNode = selection && selection.anchorNode;\n var isTouchingSelection = anchorNode ? anchorNode === target || anchorNode.contains(target) : false;\n if (isTouchingSelection) {\n return false;\n }\n var canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n if (!canBeScrolledInMainDirection) {\n return true;\n }\n if (canBeScrolledInMainDirection) {\n currentAxis = moveDirection;\n }\n else {\n currentAxis = moveDirection === 'v' ? 'h' : 'v';\n canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n // other axis might be not scrollable\n }\n if (!canBeScrolledInMainDirection) {\n return false;\n }\n if (!activeAxis.current && 'changedTouches' in event && (deltaX || deltaY)) {\n activeAxis.current = currentAxis;\n }\n if (!currentAxis) {\n return true;\n }\n var cancelingAxis = activeAxis.current || currentAxis;\n return handleScroll(cancelingAxis, parent, event, cancelingAxis === 'h' ? deltaX : deltaY, true);\n }, []);\n var shouldPrevent = React.useCallback(function (_event) {\n var event = _event;\n if (!lockStack.length || lockStack[lockStack.length - 1] !== Style) {\n // not the last active\n return;\n }\n var delta = 'deltaY' in event ? getDeltaXY(event) : getTouchXY(event);\n var sourceEvent = shouldPreventQueue.current.filter(function (e) { return e.name === event.type && (e.target === event.target || event.target === e.shadowParent) && deltaCompare(e.delta, delta); })[0];\n // self event, and should be canceled\n if (sourceEvent && sourceEvent.should) {\n if (event.cancelable) {\n event.preventDefault();\n }\n return;\n }\n // outside or shard event\n if (!sourceEvent) {\n var shardNodes = (lastProps.current.shards || [])\n .map(extractRef)\n .filter(Boolean)\n .filter(function (node) { return node.contains(event.target); });\n var shouldStop = shardNodes.length > 0 ? shouldCancelEvent(event, shardNodes[0]) : !lastProps.current.noIsolation;\n if (shouldStop) {\n if (event.cancelable) {\n event.preventDefault();\n }\n }\n }\n }, []);\n var shouldCancel = React.useCallback(function (name, delta, target, should) {\n var event = { name: name, delta: delta, target: target, should: should, shadowParent: getOutermostShadowParent(target) };\n shouldPreventQueue.current.push(event);\n setTimeout(function () {\n shouldPreventQueue.current = shouldPreventQueue.current.filter(function (e) { return e !== event; });\n }, 1);\n }, []);\n var scrollTouchStart = React.useCallback(function (event) {\n touchStartRef.current = getTouchXY(event);\n activeAxis.current = undefined;\n }, []);\n var scrollWheel = React.useCallback(function (event) {\n shouldCancel(event.type, getDeltaXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n var scrollTouchMove = React.useCallback(function (event) {\n shouldCancel(event.type, getTouchXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n React.useEffect(function () {\n lockStack.push(Style);\n props.setCallbacks({\n onScrollCapture: scrollWheel,\n onWheelCapture: scrollWheel,\n onTouchMoveCapture: scrollTouchMove,\n });\n document.addEventListener('wheel', shouldPrevent, nonPassive);\n document.addEventListener('touchmove', shouldPrevent, nonPassive);\n document.addEventListener('touchstart', scrollTouchStart, nonPassive);\n return function () {\n lockStack = lockStack.filter(function (inst) { return inst !== Style; });\n document.removeEventListener('wheel', shouldPrevent, nonPassive);\n document.removeEventListener('touchmove', shouldPrevent, nonPassive);\n document.removeEventListener('touchstart', scrollTouchStart, nonPassive);\n };\n }, []);\n var removeScrollBar = props.removeScrollBar, inert = props.inert;\n return (React.createElement(React.Fragment, null,\n inert ? React.createElement(Style, { styles: generateStyle(id) }) : null,\n removeScrollBar ? React.createElement(RemoveScrollBar, { noRelative: props.noRelative, gapMode: props.gapMode }) : null));\n}\nfunction getOutermostShadowParent(node) {\n var shadowParent = null;\n while (node !== null) {\n if (node instanceof ShadowRoot) {\n shadowParent = node.host;\n node = node.host;\n }\n node = node.parentNode;\n }\n return shadowParent;\n}\n","import { exportSidecar } from 'use-sidecar';\nimport { RemoveScrollSideCar } from './SideEffect';\nimport { effectCar } from './medium';\nexport default exportSidecar(effectCar, RemoveScrollSideCar);\n","import { __assign } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScroll } from './UI';\nimport SideCar from './sidecar';\nvar ReactRemoveScroll = React.forwardRef(function (props, ref) { return (React.createElement(RemoveScroll, __assign({}, props, { ref: ref, sideCar: SideCar }))); });\nReactRemoveScroll.classNames = RemoveScroll.classNames;\nexport default ReactRemoveScroll;\n","var getDefaultParent = function (originalTarget) {\n if (typeof document === 'undefined') {\n return null;\n }\n var sampleTarget = Array.isArray(originalTarget) ? originalTarget[0] : originalTarget;\n return sampleTarget.ownerDocument.body;\n};\nvar counterMap = new WeakMap();\nvar uncontrolledNodes = new WeakMap();\nvar markerMap = {};\nvar lockCount = 0;\nvar unwrapHost = function (node) {\n return node && (node.host || unwrapHost(node.parentNode));\n};\nvar correctTargets = function (parent, targets) {\n return targets\n .map(function (target) {\n if (parent.contains(target)) {\n return target;\n }\n var correctedTarget = unwrapHost(target);\n if (correctedTarget && parent.contains(correctedTarget)) {\n return correctedTarget;\n }\n console.error('aria-hidden', target, 'in not contained inside', parent, '. Doing nothing');\n return null;\n })\n .filter(function (x) { return Boolean(x); });\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @param {String} [controlAttribute] - html Attribute to control\n * @return {Undo} undo command\n */\nvar applyAttributeToOthers = function (originalTarget, parentNode, markerName, controlAttribute) {\n var targets = correctTargets(parentNode, Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n if (!markerMap[markerName]) {\n markerMap[markerName] = new WeakMap();\n }\n var markerCounter = markerMap[markerName];\n var hiddenNodes = [];\n var elementsToKeep = new Set();\n var elementsToStop = new Set(targets);\n var keep = function (el) {\n if (!el || elementsToKeep.has(el)) {\n return;\n }\n elementsToKeep.add(el);\n keep(el.parentNode);\n };\n targets.forEach(keep);\n var deep = function (parent) {\n if (!parent || elementsToStop.has(parent)) {\n return;\n }\n Array.prototype.forEach.call(parent.children, function (node) {\n if (elementsToKeep.has(node)) {\n deep(node);\n }\n else {\n try {\n var attr = node.getAttribute(controlAttribute);\n var alreadyHidden = attr !== null && attr !== 'false';\n var counterValue = (counterMap.get(node) || 0) + 1;\n var markerValue = (markerCounter.get(node) || 0) + 1;\n counterMap.set(node, counterValue);\n markerCounter.set(node, markerValue);\n hiddenNodes.push(node);\n if (counterValue === 1 && alreadyHidden) {\n uncontrolledNodes.set(node, true);\n }\n if (markerValue === 1) {\n node.setAttribute(markerName, 'true');\n }\n if (!alreadyHidden) {\n node.setAttribute(controlAttribute, 'true');\n }\n }\n catch (e) {\n console.error('aria-hidden: cannot operate on ', node, e);\n }\n }\n });\n };\n deep(parentNode);\n elementsToKeep.clear();\n lockCount++;\n return function () {\n hiddenNodes.forEach(function (node) {\n var counterValue = counterMap.get(node) - 1;\n var markerValue = markerCounter.get(node) - 1;\n counterMap.set(node, counterValue);\n markerCounter.set(node, markerValue);\n if (!counterValue) {\n if (!uncontrolledNodes.has(node)) {\n node.removeAttribute(controlAttribute);\n }\n uncontrolledNodes.delete(node);\n }\n if (!markerValue) {\n node.removeAttribute(markerName);\n }\n });\n lockCount--;\n if (!lockCount) {\n // clear\n counterMap = new WeakMap();\n counterMap = new WeakMap();\n uncontrolledNodes = new WeakMap();\n markerMap = {};\n }\n };\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var hideOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-aria-hidden'; }\n var targets = Array.from(Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n var activeParentNode = parentNode || getDefaultParent(originalTarget);\n if (!activeParentNode) {\n return function () { return null; };\n }\n // we should not hide aria-live elements - https://github.com/theKashey/aria-hidden/issues/10\n // and script elements, as they have no impact on accessibility.\n targets.push.apply(targets, Array.from(activeParentNode.querySelectorAll('[aria-live], script')));\n return applyAttributeToOthers(targets, activeParentNode, markerName, 'aria-hidden');\n};\n/**\n * Marks everything except given node(or nodes) as inert\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var inertOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-inert-ed'; }\n var activeParentNode = parentNode || getDefaultParent(originalTarget);\n if (!activeParentNode) {\n return function () { return null; };\n }\n return applyAttributeToOthers(originalTarget, activeParentNode, markerName, 'inert');\n};\n/**\n * @returns if current browser supports inert\n */\nexport var supportsInert = function () {\n return typeof HTMLElement !== 'undefined' && HTMLElement.prototype.hasOwnProperty('inert');\n};\n/**\n * Automatic function to \"suppress\" DOM elements - _hide_ or _inert_ in the best possible way\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var suppressOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-suppressed'; }\n return (supportsInert() ? inertOthers : hideOthers)(originalTarget, parentNode, markerName);\n};\n","import * as React from 'react';\nimport { composeRefs } from '@radix-ui/react-compose-refs';\n\n/* -------------------------------------------------------------------------------------------------\n * Slot\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SlotProps extends React.HTMLAttributes<HTMLElement> {\n children?: React.ReactNode;\n}\n\n/* @__NO_SIDE_EFFECTS__ */ export function createSlot(ownerName: string) {\n const SlotClone = createSlotClone(ownerName);\n const Slot = React.forwardRef<HTMLElement, SlotProps>((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n\n if (slottable) {\n // the new element to render is the one passed as a child of `Slottable`\n const newElement = slottable.props.children;\n\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n // because the new element will be the one rendered, we are only interested\n // in grabbing its children (`newElement.props.children`)\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement)\n ? (newElement.props as { children: React.ReactNode }).children\n : null;\n } else {\n return child;\n }\n });\n\n return (\n <SlotClone {...slotProps} ref={forwardedRef}>\n {React.isValidElement(newElement)\n ? React.cloneElement(newElement, undefined, newChildren)\n : null}\n </SlotClone>\n );\n }\n\n return (\n <SlotClone {...slotProps} ref={forwardedRef}>\n {children}\n </SlotClone>\n );\n });\n\n Slot.displayName = `${ownerName}.Slot`;\n return Slot;\n}\n\nconst Slot = createSlot('Slot');\n\n/* -------------------------------------------------------------------------------------------------\n * SlotClone\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SlotCloneProps {\n children: React.ReactNode;\n}\n\n/* @__NO_SIDE_EFFECTS__ */ function createSlotClone(ownerName: string) {\n const SlotClone = React.forwardRef<any, SlotCloneProps>((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props = mergeProps(slotProps, children.props as AnyProps);\n // do not pass ref to React.Fragment for React 19 compatibility\n if (children.type !== React.Fragment) {\n props.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props);\n }\n\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Slottable\n * -----------------------------------------------------------------------------------------------*/\n\nconst SLOTTABLE_IDENTIFIER = Symbol('radix.slottable');\n\ninterface SlottableProps {\n children: React.ReactNode;\n}\n\ninterface SlottableComponent extends React.FC<SlottableProps> {\n __radixId: symbol;\n}\n\n/* @__NO_SIDE_EFFECTS__ */ export function createSlottable(ownerName: string) {\n const Slottable: SlottableComponent = ({ children }) => {\n return <>{children}</>;\n };\n Slottable.displayName = `${ownerName}.Slottable`;\n Slottable.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable;\n}\n\nconst Slottable = createSlottable('Slottable');\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype AnyProps = Record<string, any>;\n\nfunction isSlottable(\n child: React.ReactNode\n): child is React.ReactElement<SlottableProps, typeof Slottable> {\n return (\n React.isValidElement(child) &&\n typeof child.type === 'function' &&\n '__radixId' in child.type &&\n child.type.__radixId === SLOTTABLE_IDENTIFIER\n );\n}\n\nfunction mergeProps(slotProps: AnyProps, childProps: AnyProps) {\n // all child props should override\n const overrideProps = { ...childProps };\n\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n // if the handler exists on both, we compose them\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args: unknown[]) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n }\n // but if it exists only on the slot, we use only this one\n else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n }\n // if it's `style`, we merge them\n else if (propName === 'style') {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === 'className') {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(' ');\n }\n }\n\n return { ...slotProps, ...overrideProps };\n}\n\n// Before React 19 accessing `element.props.ref` will throw a warning and suggest using `element.ref`\n// After React 19 accessing `element.ref` does the opposite.\n// https://github.com/facebook/react/pull/28348\n//\n// Access the ref using the method that doesn't yield a warning.\nfunction getElementRef(element: React.ReactElement) {\n // React <=18 in DEV\n let getter = Object.getOwnPropertyDescriptor(element.props, 'ref')?.get;\n let mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element as any).ref;\n }\n\n // React 19 in DEV\n getter = Object.getOwnPropertyDescriptor(element, 'ref')?.get;\n mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element.props as { ref?: React.Ref<unknown> }).ref;\n }\n\n // Not DEV\n return (element.props as { ref?: React.Ref<unknown> }).ref || (element as any).ref;\n}\n\nexport {\n Slot,\n Slottable,\n //\n Slot as Root,\n};\nexport type { SlotProps };\n","import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContext, createContextScope } from '@radix-ui/react-context';\nimport { useId } from '@radix-ui/react-id';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { DismissableLayer } from '@radix-ui/react-dismissable-layer';\nimport { FocusScope } from '@radix-ui/react-focus-scope';\nimport { Portal as PortalPrimitive } from '@radix-ui/react-portal';\nimport { Presence } from '@radix-ui/react-presence';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { useFocusGuards } from '@radix-ui/react-focus-guards';\nimport { RemoveScroll } from 'react-remove-scroll';\nimport { hideOthers } from 'aria-hidden';\nimport { createSlot } from '@radix-ui/react-slot';\n\nimport type { Scope } from '@radix-ui/react-context';\n\n/* -------------------------------------------------------------------------------------------------\n * Dialog\n * -----------------------------------------------------------------------------------------------*/\n\nconst DIALOG_NAME = 'Dialog';\n\ntype ScopedProps<P> = P & { __scopeDialog?: Scope };\nconst [createDialogContext, createDialogScope] = createContextScope(DIALOG_NAME);\n\ntype DialogContextValue = {\n triggerRef: React.RefObject<HTMLButtonElement | null>;\n contentRef: React.RefObject<DialogContentElement | null>;\n contentId: string;\n titleId: string;\n descriptionId: string;\n open: boolean;\n onOpenChange(open: boolean): void;\n onOpenToggle(): void;\n modal: boolean;\n};\n\nconst [DialogProvider, useDialogContext] = createDialogContext<DialogContextValue>(DIALOG_NAME);\n\ninterface DialogProps {\n children?: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?(open: boolean): void;\n modal?: boolean;\n}\n\nconst Dialog: React.FC<DialogProps> = (props: ScopedProps<DialogProps>) => {\n const {\n __scopeDialog,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true,\n } = props;\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n const contentRef = React.useRef<DialogContentElement>(null);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: DIALOG_NAME,\n });\n\n return (\n <DialogProvider\n scope={__scopeDialog}\n triggerRef={triggerRef}\n contentRef={contentRef}\n contentId={useId()}\n titleId={useId()}\n descriptionId={useId()}\n open={open}\n onOpenChange={setOpen}\n onOpenToggle={React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen])}\n modal={modal}\n >\n {children}\n </DialogProvider>\n );\n};\n\nDialog.displayName = DIALOG_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DialogTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'DialogTrigger';\n\ntype DialogTriggerElement = React.ComponentRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef<typeof Primitive.button>;\ninterface DialogTriggerProps extends PrimitiveButtonProps {}\n\nconst DialogTrigger = React.forwardRef<DialogTriggerElement, DialogTriggerProps>(\n (props: ScopedProps<DialogTriggerProps>, forwardedRef) => {\n const { __scopeDialog, ...triggerProps } = props;\n const context = useDialogContext(TRIGGER_NAME, __scopeDialog);\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n return (\n <Primitive.button\n type=\"button\"\n aria-haspopup=\"dialog\"\n aria-expanded={context.open}\n aria-controls={context.contentId}\n data-state={getState(context.open)}\n {...triggerProps}\n ref={composedTriggerRef}\n onClick={composeEventHandlers(props.onClick, context.onOpenToggle)}\n />\n );\n }\n);\n\nDialogTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DialogPortal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'DialogPortal';\n\ntype PortalContextValue = { forceMount?: true };\nconst [PortalProvider, usePortalContext] = createDialogContext<PortalContextValue>(PORTAL_NAME, {\n forceMount: undefined,\n});\n\ntype PortalProps = React.ComponentPropsWithoutRef<typeof PortalPrimitive>;\ninterface DialogPortalProps {\n children?: React.ReactNode;\n /**\n * Specify a container element to portal the content into.\n */\n container?: PortalProps['container'];\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst DialogPortal: React.FC<DialogPortalProps> = (props: ScopedProps<DialogPortalProps>) => {\n const { __scopeDialog, forceMount, children, container } = props;\n const context = useDialogContext(PORTAL_NAME, __scopeDialog);\n return (\n <PortalProvider scope={__scopeDialog} forceMount={forceMount}>\n {React.Children.map(children, (child) => (\n <Presence present={forceMount || context.open}>\n <PortalPrimitive asChild container={container}>\n {child}\n </PortalPrimitive>\n </Presence>\n ))}\n </PortalProvider>\n );\n};\n\nDialogPortal.displayName = PORTAL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DialogOverlay\n * -----------------------------------------------------------------------------------------------*/\n\nconst OVERLAY_NAME = 'DialogOverlay';\n\ntype DialogOverlayElement = DialogOverlayImplElement;\ninterface DialogOverlayProps extends DialogOverlayImplProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst DialogOverlay = React.forwardRef<DialogOverlayElement, DialogOverlayProps>(\n (props: ScopedProps<DialogOverlayProps>, forwardedRef) => {\n const portalContext = usePortalContext(OVERLAY_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, props.__scopeDialog);\n return context.modal ? (\n <Presence present={forceMount || context.open}>\n <DialogOverlayImpl {...overlayProps} ref={forwardedRef} />\n </Presence>\n ) : null;\n }\n);\n\nDialogOverlay.displayName = OVERLAY_NAME;\n\ntype DialogOverlayImplElement = React.ComponentRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface DialogOverlayImplProps extends PrimitiveDivProps {}\n\nconst Slot = createSlot('DialogOverlay.RemoveScroll');\n\nconst DialogOverlayImpl = React.forwardRef<DialogOverlayImplElement, DialogOverlayImplProps>(\n (props: ScopedProps<DialogOverlayImplProps>, forwardedRef) => {\n const { __scopeDialog, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, __scopeDialog);\n return (\n // Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll`\n // ie. when `Overlay` and `Content` are siblings\n <RemoveScroll as={Slot} allowPinchZoom shards={[context.contentRef]}>\n <Primitive.div\n data-state={getState(context.open)}\n {...overlayProps}\n ref={forwardedRef}\n // We re-enable pointer-events prevented by `Dialog.Content` to allow scrolling the overlay.\n style={{ pointerEvents: 'auto', ...overlayProps.style }}\n />\n </RemoveScroll>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * DialogContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'DialogContent';\n\ntype DialogContentElement = DialogContentTypeElement;\ninterface DialogContentProps extends DialogContentTypeProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst DialogContent = React.forwardRef<DialogContentElement, DialogContentProps>(\n (props: ScopedProps<DialogContentProps>, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n return (\n <Presence present={forceMount || context.open}>\n {context.modal ? (\n <DialogContentModal {...contentProps} ref={forwardedRef} />\n ) : (\n <DialogContentNonModal {...contentProps} ref={forwardedRef} />\n )}\n </Presence>\n );\n }\n);\n\nDialogContent.displayName = CONTENT_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype DialogContentTypeElement = DialogContentImplElement;\ninterface DialogContentTypeProps\n extends Omit<DialogContentImplProps, 'trapFocus' | 'disableOutsidePointerEvents'> {}\n\nconst DialogContentModal = React.forwardRef<DialogContentTypeElement, DialogContentTypeProps>(\n (props: ScopedProps<DialogContentTypeProps>, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const contentRef = React.useRef<HTMLDivElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, context.contentRef, contentRef);\n\n // aria-hide everything except the content (better supported equivalent to setting aria-modal)\n React.useEffect(() => {\n const content = contentRef.current;\n if (content) return hideOthers(content);\n }, []);\n\n return (\n <DialogContentImpl\n {...props}\n ref={composedRefs}\n // we make sure focus isn't trapped once `DialogContent` has been closed\n // (closed !== unmounted when animating out)\n trapFocus={context.open}\n disableOutsidePointerEvents\n onCloseAutoFocus={composeEventHandlers(props.onCloseAutoFocus, (event) => {\n event.preventDefault();\n context.triggerRef.current?.focus();\n })}\n onPointerDownOutside={composeEventHandlers(props.onPointerDownOutside, (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n\n // If the event is a right-click, we shouldn't close because\n // it is effectively as if we right-clicked the `Overlay`.\n if (isRightClick) event.preventDefault();\n })}\n // When focus is trapped, a `focusout` event may still happen.\n // We make sure we don't trigger our `onDismiss` in such case.\n onFocusOutside={composeEventHandlers(props.onFocusOutside, (event) =>\n event.preventDefault()\n )}\n />\n );\n }\n);\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst DialogContentNonModal = React.forwardRef<DialogContentTypeElement, DialogContentTypeProps>(\n (props: ScopedProps<DialogContentTypeProps>, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const hasInteractedOutsideRef = React.useRef(false);\n const hasPointerDownOutsideRef = React.useRef(false);\n\n return (\n <DialogContentImpl\n {...props}\n ref={forwardedRef}\n trapFocus={false}\n disableOutsidePointerEvents={false}\n onCloseAutoFocus={(event) => {\n props.onCloseAutoFocus?.(event);\n\n if (!event.defaultPrevented) {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n // Always prevent auto focus because we either focus manually or want user agent focus\n event.preventDefault();\n }\n\n hasInteractedOutsideRef.current = false;\n hasPointerDownOutsideRef.current = false;\n }}\n onInteractOutside={(event) => {\n props.onInteractOutside?.(event);\n\n if (!event.defaultPrevented) {\n hasInteractedOutsideRef.current = true;\n if (event.detail.originalEvent.type === 'pointerdown') {\n hasPointerDownOutsideRef.current = true;\n }\n }\n\n // Prevent dismissing when clicking the trigger.\n // As the trigger is already setup to close, without doing so would\n // cause it to close and immediately open.\n const target = event.target as HTMLElement;\n const targetIsTrigger = context.triggerRef.current?.contains(target);\n if (targetIsTrigger) event.preventDefault();\n\n // On Safari if the trigger is inside a container with tabIndex={0}, when clicked\n // we will get the pointer down outside event on the trigger, but then a subsequent\n // focus outside event on the container, we ignore any focus outside event when we've\n // already had a pointer down outside event.\n if (event.detail.originalEvent.type === 'focusin' && hasPointerDownOutsideRef.current) {\n event.preventDefault();\n }\n }}\n />\n );\n }\n);\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype DialogContentImplElement = React.ComponentRef<typeof DismissableLayer>;\ntype DismissableLayerProps = React.ComponentPropsWithoutRef<typeof DismissableLayer>;\ntype FocusScopeProps = React.ComponentPropsWithoutRef<typeof FocusScope>;\ninterface DialogContentImplProps extends Omit<DismissableLayerProps, 'onDismiss'> {\n /**\n * When `true`, focus cannot escape the `Content` via keyboard,\n * pointer, or a programmatic focus.\n * @defaultValue false\n */\n trapFocus?: FocusScopeProps['trapped'];\n\n /**\n * Event handler called when auto-focusing on open.\n * Can be prevented.\n */\n onOpenAutoFocus?: FocusScopeProps['onMountAutoFocus'];\n\n /**\n * Event handler called when auto-focusing on close.\n * Can be prevented.\n */\n onCloseAutoFocus?: FocusScopeProps['onUnmountAutoFocus'];\n}\n\nconst DialogContentImpl = React.forwardRef<DialogContentImplElement, DialogContentImplProps>(\n (props: ScopedProps<DialogContentImplProps>, forwardedRef) => {\n const { __scopeDialog, trapFocus, onOpenAutoFocus, onCloseAutoFocus, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, __scopeDialog);\n const contentRef = React.useRef<HTMLDivElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n\n // Make sure the whole tree has focus guards as our `Dialog` will be\n // the last element in the DOM (because of the `Portal`)\n useFocusGuards();\n\n return (\n <>\n <FocusScope\n asChild\n loop\n trapped={trapFocus}\n onMountAutoFocus={onOpenAutoFocus}\n onUnmountAutoFocus={onCloseAutoFocus}\n >\n <DismissableLayer\n role=\"dialog\"\n id={context.contentId}\n aria-describedby={context.descriptionId}\n aria-labelledby={context.titleId}\n data-state={getState(context.open)}\n {...contentProps}\n ref={composedRefs}\n onDismiss={() => context.onOpenChange(false)}\n />\n </FocusScope>\n {process.env.NODE_ENV !== 'production' && (\n <>\n <TitleWarning titleId={context.titleId} />\n <DescriptionWarning contentRef={contentRef} descriptionId={context.descriptionId} />\n </>\n )}\n </>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * DialogTitle\n * -----------------------------------------------------------------------------------------------*/\n\nconst TITLE_NAME = 'DialogTitle';\n\ntype DialogTitleElement = React.ComponentRef<typeof Primitive.h2>;\ntype PrimitiveHeading2Props = React.ComponentPropsWithoutRef<typeof Primitive.h2>;\ninterface DialogTitleProps extends PrimitiveHeading2Props {}\n\nconst DialogTitle = React.forwardRef<DialogTitleElement, DialogTitleProps>(\n (props: ScopedProps<DialogTitleProps>, forwardedRef) => {\n const { __scopeDialog, ...titleProps } = props;\n const context = useDialogContext(TITLE_NAME, __scopeDialog);\n return <Primitive.h2 id={context.titleId} {...titleProps} ref={forwardedRef} />;\n }\n);\n\nDialogTitle.displayName = TITLE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DialogDescription\n * -----------------------------------------------------------------------------------------------*/\n\nconst DESCRIPTION_NAME = 'DialogDescription';\n\ntype DialogDescriptionElement = React.ComponentRef<typeof Primitive.p>;\ntype PrimitiveParagraphProps = React.ComponentPropsWithoutRef<typeof Primitive.p>;\ninterface DialogDescriptionProps extends PrimitiveParagraphProps {}\n\nconst DialogDescription = React.forwardRef<DialogDescriptionElement, DialogDescriptionProps>(\n (props: ScopedProps<DialogDescriptionProps>, forwardedRef) => {\n const { __scopeDialog, ...descriptionProps } = props;\n const context = useDialogContext(DESCRIPTION_NAME, __scopeDialog);\n return <Primitive.p id={context.descriptionId} {...descriptionProps} ref={forwardedRef} />;\n }\n);\n\nDialogDescription.displayName = DESCRIPTION_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DialogClose\n * -----------------------------------------------------------------------------------------------*/\n\nconst CLOSE_NAME = 'DialogClose';\n\ntype DialogCloseElement = React.ComponentRef<typeof Primitive.button>;\ninterface DialogCloseProps extends PrimitiveButtonProps {}\n\nconst DialogClose = React.forwardRef<DialogCloseElement, DialogCloseProps>(\n (props: ScopedProps<DialogCloseProps>, forwardedRef) => {\n const { __scopeDialog, ...closeProps } = props;\n const context = useDialogContext(CLOSE_NAME, __scopeDialog);\n return (\n <Primitive.button\n type=\"button\"\n {...closeProps}\n ref={forwardedRef}\n onClick={composeEventHandlers(props.onClick, () => context.onOpenChange(false))}\n />\n );\n }\n);\n\nDialogClose.displayName = CLOSE_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getState(open: boolean) {\n return open ? 'open' : 'closed';\n}\n\nconst TITLE_WARNING_NAME = 'DialogTitleWarning';\n\nconst [WarningProvider, useWarningContext] = createContext(TITLE_WARNING_NAME, {\n contentName: CONTENT_NAME,\n titleName: TITLE_NAME,\n docsSlug: 'dialog',\n});\n\ntype TitleWarningProps = { titleId?: string };\n\nconst TitleWarning: React.FC<TitleWarningProps> = ({ titleId }) => {\n const titleWarningContext = useWarningContext(TITLE_WARNING_NAME);\n\n const MESSAGE = `\\`${titleWarningContext.contentName}\\` requires a \\`${titleWarningContext.titleName}\\` for the component to be accessible for screen reader users.\n\nIf you want to hide the \\`${titleWarningContext.titleName}\\`, you can wrap it with our VisuallyHidden component.\n\nFor more information, see https://radix-ui.com/primitives/docs/components/${titleWarningContext.docsSlug}`;\n\n React.useEffect(() => {\n if (titleId) {\n const hasTitle = document.getElementById(titleId);\n if (!hasTitle) console.error(MESSAGE);\n }\n }, [MESSAGE, titleId]);\n\n return null;\n};\n\nconst DESCRIPTION_WARNING_NAME = 'DialogDescriptionWarning';\n\ntype DescriptionWarningProps = {\n contentRef: React.RefObject<DialogContentElement | null>;\n descriptionId?: string;\n};\n\nconst DescriptionWarning: React.FC<DescriptionWarningProps> = ({ contentRef, descriptionId }) => {\n const descriptionWarningContext = useWarningContext(DESCRIPTION_WARNING_NAME);\n const MESSAGE = `Warning: Missing \\`Description\\` or \\`aria-describedby={undefined}\\` for {${descriptionWarningContext.contentName}}.`;\n\n React.useEffect(() => {\n const describedById = contentRef.current?.getAttribute('aria-describedby');\n // if we have an id and the user hasn't set aria-describedby={undefined}\n if (descriptionId && describedById) {\n const hasDescription = document.getElementById(descriptionId);\n if (!hasDescription) console.warn(MESSAGE);\n }\n }, [MESSAGE, contentRef, descriptionId]);\n\n return null;\n};\n\nconst Root = Dialog;\nconst Trigger = DialogTrigger;\nconst Portal = DialogPortal;\nconst Overlay = DialogOverlay;\nconst Content = DialogContent;\nconst Title = DialogTitle;\nconst Description = DialogDescription;\nconst Close = DialogClose;\n\nexport {\n createDialogScope,\n //\n Dialog,\n DialogTrigger,\n DialogPortal,\n DialogOverlay,\n DialogContent,\n DialogTitle,\n DialogDescription,\n DialogClose,\n //\n Root,\n Trigger,\n Portal,\n Overlay,\n Content,\n Title,\n Description,\n Close,\n //\n WarningProvider,\n};\nexport type {\n DialogProps,\n DialogTriggerProps,\n DialogPortalProps,\n DialogOverlayProps,\n DialogContentProps,\n DialogTitleProps,\n DialogDescriptionProps,\n DialogCloseProps,\n};\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n/**\n * Generate neon glow shadow styles\n */\nexport function glow(\n color: \"cyan\" | \"magenta\" | \"emerald\" = \"cyan\",\n intensity: \"low\" | \"medium\" | \"high\" = \"medium\"\n) {\n const colorMap = {\n cyan: \"var(--cyan-neon)\",\n magenta: \"var(--magenta-neon)\",\n emerald: \"var(--emerald-neon)\",\n };\n\n const intensityMap = {\n low: \"0 0 10px\",\n medium: \"0 0 20px, 0 0 40px\",\n high: \"0 0 20px, 0 0 40px, 0 0 80px\",\n };\n\n const hslColor = `hsl(${colorMap[color]})`;\n return `${intensityMap[intensity]} ${hslColor}`;\n}\n\n/**\n * Generate HUD-style conic gradient for progress rings\n */\nexport function hudGrad(\n progress: number = 0.75,\n colors?: { start?: string; middle?: string; end?: string }\n) {\n const defaultColors = {\n start: \"hsl(var(--cyan-neon))\",\n middle: \"hsl(var(--magenta-neon))\",\n end: \"hsl(var(--emerald-neon))\",\n };\n\n const gradColors = { ...defaultColors, ...colors };\n const progressDeg = progress * 360;\n\n return `conic-gradient(from 0deg at 50% 50%, ${gradColors.start} 0deg, ${\n gradColors.middle\n } ${progressDeg / 2}deg, ${\n gradColors.end\n } ${progressDeg}deg, transparent ${progressDeg}deg, transparent 360deg)`;\n}\n\n/**\n * Format numbers with appropriate suffixes (K, M, B)\n */\nexport function formatNumber(num: number): string {\n if (num >= 1e9) return (num / 1e9).toFixed(1) + \"B\";\n if (num >= 1e6) return (num / 1e6).toFixed(1) + \"M\";\n if (num >= 1e3) return (num / 1e3).toFixed(1) + \"K\";\n return num.toString();\n}\n\n/**\n * Animate number changes with a spring-like effect\n */\nexport function animateNumber(\n from: number,\n to: number,\n duration: number = 1000,\n onUpdate: (value: number) => void,\n easing: (t: number) => number = (t) => t * (2 - t) // ease-out quad\n) {\n const startTime = Date.now();\n const delta = to - from;\n\n const animate = () => {\n const elapsed = Date.now() - startTime;\n const progress = Math.min(elapsed / duration, 1);\n const easedProgress = easing(progress);\n const currentValue = from + delta * easedProgress;\n\n onUpdate(Math.round(currentValue));\n\n if (progress < 1) {\n requestAnimationFrame(animate);\n }\n };\n\n requestAnimationFrame(animate);\n}\n\n/**\n * Animate float changes without rounding (for smooth SVG/progress animations)\n */\nexport function animateFloat(\n from: number,\n to: number,\n duration: number = 1000,\n onUpdate: (value: number) => void,\n easing: (t: number) => number = (t) => t * (2 - t)\n) {\n const startTime = Date.now();\n const delta = to - from;\n\n const animate = () => {\n const elapsed = Date.now() - startTime;\n const progress = Math.min(elapsed / duration, 1);\n const easedProgress = easing(progress);\n const currentValue = from + delta * easedProgress;\n\n onUpdate(currentValue);\n\n if (progress < 1) {\n requestAnimationFrame(animate);\n }\n };\n\n requestAnimationFrame(animate);\n}\n\n/**\n * Debounce function for search/input handling\n */\nexport function debounce<T extends (...args: unknown[]) => unknown>(\n func: T,\n wait: number\n): (...args: Parameters<T>) => void {\n let timeout: ReturnType<typeof setTimeout>;\n return (...args: Parameters<T>) => {\n clearTimeout(timeout);\n timeout = setTimeout(() => func(...args), wait);\n };\n}\n\n/**\n * Check if user prefers reduced motion\n */\nexport function prefersReducedMotion(): boolean {\n if (typeof window === \"undefined\") return false;\n return window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n}\n\n// Accessibility\nexport { prefersReducedTransparency, usePrefersReducedTransparency, usePrefersReducedMotion, usePrefersColorScheme, usePrefersHighContrast } from './accessibility';\nexport { useFocusTrap } from './useFocusTrap';\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { XIcon } from \"lucide-react\";\n\nimport { cn } from \"../../lib/utils\";\n\nfunction Dialog({ ...props }: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />;\n}\n\nfunction DialogTrigger({ ...props }: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />;\n}\n\nfunction DialogPortal({ ...props }: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />;\n}\n\nfunction DialogClose({ ...props }: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />;\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean;\n}) {\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n );\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n );\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\", className)}\n {...props}\n />\n );\n}\n\nfunction DialogTitle({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"text-lg leading-none font-semibold\", className)}\n {...props}\n />\n );\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n );\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n};\n","import * as React from 'react';\nimport { composeRefs } from '@radix-ui/react-compose-refs';\n\ndeclare module 'react' {\n interface ReactElement {\n $$typeof?: symbol | string;\n }\n}\n\nconst REACT_LAZY_TYPE = Symbol.for('react.lazy');\n\ninterface LazyReactElement extends React.ReactElement {\n $$typeof: typeof REACT_LAZY_TYPE;\n _payload: PromiseLike<Exclude<React.ReactNode, PromiseLike<any>>>;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Slot\n * -----------------------------------------------------------------------------------------------*/\n\nexport type Usable<T> = PromiseLike<T> | React.Context<T>;\nconst use: typeof React.use | undefined = (React as any)[' use '.trim().toString()];\n\ninterface SlotProps extends React.HTMLAttributes<HTMLElement> {\n children?: React.ReactNode;\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n return typeof value === 'object' && value !== null && 'then' in value;\n}\n\nfunction isLazyComponent(element: React.ReactNode): element is LazyReactElement {\n return (\n element != null &&\n typeof element === 'object' &&\n '$$typeof' in element &&\n element.$$typeof === REACT_LAZY_TYPE &&\n '_payload' in element &&\n isPromiseLike(element._payload)\n );\n}\n\n/* @__NO_SIDE_EFFECTS__ */ export function createSlot(ownerName: string) {\n const SlotClone = createSlotClone(ownerName);\n const Slot = React.forwardRef<HTMLElement, SlotProps>((props, forwardedRef) => {\n let { children, ...slotProps } = props;\n if (isLazyComponent(children) && typeof use === 'function') {\n children = use(children._payload);\n }\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n\n if (slottable) {\n // the new element to render is the one passed as a child of `Slottable`\n const newElement = slottable.props.children;\n\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n // because the new element will be the one rendered, we are only interested\n // in grabbing its children (`newElement.props.children`)\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement)\n ? (newElement.props as { children: React.ReactNode }).children\n : null;\n } else {\n return child;\n }\n });\n\n return (\n <SlotClone {...slotProps} ref={forwardedRef}>\n {React.isValidElement(newElement)\n ? React.cloneElement(newElement, undefined, newChildren)\n : null}\n </SlotClone>\n );\n }\n\n return (\n <SlotClone {...slotProps} ref={forwardedRef}>\n {children}\n </SlotClone>\n );\n });\n\n Slot.displayName = `${ownerName}.Slot`;\n return Slot;\n}\n\nconst Slot = createSlot('Slot');\n\n/* -------------------------------------------------------------------------------------------------\n * SlotClone\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SlotCloneProps {\n children: React.ReactNode;\n}\n\n/* @__NO_SIDE_EFFECTS__ */ function createSlotClone(ownerName: string) {\n const SlotClone = React.forwardRef<any, SlotCloneProps>((props, forwardedRef) => {\n let { children, ...slotProps } = props;\n if (isLazyComponent(children) && typeof use === 'function') {\n children = use(children._payload);\n }\n\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props = mergeProps(slotProps, children.props as AnyProps);\n // do not pass ref to React.Fragment for React 19 compatibility\n if (children.type !== React.Fragment) {\n props.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props);\n }\n\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Slottable\n * -----------------------------------------------------------------------------------------------*/\n\nconst SLOTTABLE_IDENTIFIER = Symbol('radix.slottable');\n\ninterface SlottableProps {\n children: React.ReactNode;\n}\n\ninterface SlottableComponent extends React.FC<SlottableProps> {\n __radixId: symbol;\n}\n\n/* @__NO_SIDE_EFFECTS__ */ export function createSlottable(ownerName: string) {\n const Slottable: SlottableComponent = ({ children }) => {\n return <>{children}</>;\n };\n Slottable.displayName = `${ownerName}.Slottable`;\n Slottable.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable;\n}\n\nconst Slottable = createSlottable('Slottable');\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype AnyProps = Record<string, any>;\n\nfunction isSlottable(\n child: React.ReactNode,\n): child is React.ReactElement<SlottableProps, typeof Slottable> {\n return (\n React.isValidElement(child) &&\n typeof child.type === 'function' &&\n '__radixId' in child.type &&\n child.type.__radixId === SLOTTABLE_IDENTIFIER\n );\n}\n\nfunction mergeProps(slotProps: AnyProps, childProps: AnyProps) {\n // all child props should override\n const overrideProps = { ...childProps };\n\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n // if the handler exists on both, we compose them\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args: unknown[]) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n }\n // but if it exists only on the slot, we use only this one\n else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n }\n // if it's `style`, we merge them\n else if (propName === 'style') {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === 'className') {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(' ');\n }\n }\n\n return { ...slotProps, ...overrideProps };\n}\n\n// Before React 19 accessing `element.props.ref` will throw a warning and suggest using `element.ref`\n// After React 19 accessing `element.ref` does the opposite.\n// https://github.com/facebook/react/pull/28348\n//\n// Access the ref using the method that doesn't yield a warning.\nfunction getElementRef(element: React.ReactElement) {\n // React <=18 in DEV\n let getter = Object.getOwnPropertyDescriptor(element.props, 'ref')?.get;\n let mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element as any).ref;\n }\n\n // React 19 in DEV\n getter = Object.getOwnPropertyDescriptor(element, 'ref')?.get;\n mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element.props as { ref?: React.Ref<unknown> }).ref;\n }\n\n // Not DEV\n return (element.props as { ref?: React.Ref<unknown> }).ref || (element as any).ref;\n}\n\nexport {\n Slot,\n Slottable,\n //\n Slot as Root,\n};\nexport type { SlotProps };\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n \"icon-sm\": \"size-8\",\n \"icon-lg\": \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n);\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n }) {\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nexport { Button, buttonVariants };\n","import * as React from 'react';\nimport { composeRefs } from '@radix-ui/react-compose-refs';\n\n/* -------------------------------------------------------------------------------------------------\n * Slot\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SlotProps extends React.HTMLAttributes<HTMLElement> {\n children?: React.ReactNode;\n}\n\n/* @__NO_SIDE_EFFECTS__ */ export function createSlot(ownerName: string) {\n const SlotClone = createSlotClone(ownerName);\n const Slot = React.forwardRef<HTMLElement, SlotProps>((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n\n if (slottable) {\n // the new element to render is the one passed as a child of `Slottable`\n const newElement = slottable.props.children;\n\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n // because the new element will be the one rendered, we are only interested\n // in grabbing its children (`newElement.props.children`)\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement)\n ? (newElement.props as { children: React.ReactNode }).children\n : null;\n } else {\n return child;\n }\n });\n\n return (\n <SlotClone {...slotProps} ref={forwardedRef}>\n {React.isValidElement(newElement)\n ? React.cloneElement(newElement, undefined, newChildren)\n : null}\n </SlotClone>\n );\n }\n\n return (\n <SlotClone {...slotProps} ref={forwardedRef}>\n {children}\n </SlotClone>\n );\n });\n\n Slot.displayName = `${ownerName}.Slot`;\n return Slot;\n}\n\nconst Slot = createSlot('Slot');\n\n/* -------------------------------------------------------------------------------------------------\n * SlotClone\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SlotCloneProps {\n children: React.ReactNode;\n}\n\n/* @__NO_SIDE_EFFECTS__ */ function createSlotClone(ownerName: string) {\n const SlotClone = React.forwardRef<any, SlotCloneProps>((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props = mergeProps(slotProps, children.props as AnyProps);\n // do not pass ref to React.Fragment for React 19 compatibility\n if (children.type !== React.Fragment) {\n props.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props);\n }\n\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Slottable\n * -----------------------------------------------------------------------------------------------*/\n\nconst SLOTTABLE_IDENTIFIER = Symbol('radix.slottable');\n\ninterface SlottableProps {\n children: React.ReactNode;\n}\n\ninterface SlottableComponent extends React.FC<SlottableProps> {\n __radixId: symbol;\n}\n\n/* @__NO_SIDE_EFFECTS__ */ export function createSlottable(ownerName: string) {\n const Slottable: SlottableComponent = ({ children }) => {\n return <>{children}</>;\n };\n Slottable.displayName = `${ownerName}.Slottable`;\n Slottable.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable;\n}\n\nconst Slottable = createSlottable('Slottable');\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype AnyProps = Record<string, any>;\n\nfunction isSlottable(\n child: React.ReactNode\n): child is React.ReactElement<SlottableProps, typeof Slottable> {\n return (\n React.isValidElement(child) &&\n typeof child.type === 'function' &&\n '__radixId' in child.type &&\n child.type.__radixId === SLOTTABLE_IDENTIFIER\n );\n}\n\nfunction mergeProps(slotProps: AnyProps, childProps: AnyProps) {\n // all child props should override\n const overrideProps = { ...childProps };\n\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n // if the handler exists on both, we compose them\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args: unknown[]) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n }\n // but if it exists only on the slot, we use only this one\n else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n }\n // if it's `style`, we merge them\n else if (propName === 'style') {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === 'className') {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(' ');\n }\n }\n\n return { ...slotProps, ...overrideProps };\n}\n\n// Before React 19 accessing `element.props.ref` will throw a warning and suggest using `element.ref`\n// After React 19 accessing `element.ref` does the opposite.\n// https://github.com/facebook/react/pull/28348\n//\n// Access the ref using the method that doesn't yield a warning.\nfunction getElementRef(element: React.ReactElement) {\n // React <=18 in DEV\n let getter = Object.getOwnPropertyDescriptor(element.props, 'ref')?.get;\n let mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element as any).ref;\n }\n\n // React 19 in DEV\n getter = Object.getOwnPropertyDescriptor(element, 'ref')?.get;\n mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element.props as { ref?: React.Ref<unknown> }).ref;\n }\n\n // Not DEV\n return (element.props as { ref?: React.Ref<unknown> }).ref || (element as any).ref;\n}\n\nexport {\n Slot,\n Slottable,\n //\n Slot as Root,\n};\nexport type { SlotProps };\n","import * as React from 'react';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { createDialogScope } from '@radix-ui/react-dialog';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { createSlottable } from '@radix-ui/react-slot';\n\nimport type { Scope } from '@radix-ui/react-context';\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialog\n * -----------------------------------------------------------------------------------------------*/\n\nconst ROOT_NAME = 'AlertDialog';\n\ntype ScopedProps<P> = P & { __scopeAlertDialog?: Scope };\nconst [createAlertDialogContext, createAlertDialogScope] = createContextScope(ROOT_NAME, [\n createDialogScope,\n]);\nconst useDialogScope = createDialogScope();\n\ntype DialogProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Root>;\ninterface AlertDialogProps extends Omit<DialogProps, 'modal'> {}\n\nconst AlertDialog: React.FC<AlertDialogProps> = (props: ScopedProps<AlertDialogProps>) => {\n const { __scopeAlertDialog, ...alertDialogProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return <DialogPrimitive.Root {...dialogScope} {...alertDialogProps} modal={true} />;\n};\n\nAlertDialog.displayName = ROOT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogTrigger\n * -----------------------------------------------------------------------------------------------*/\nconst TRIGGER_NAME = 'AlertDialogTrigger';\n\ntype AlertDialogTriggerElement = React.ComponentRef<typeof DialogPrimitive.Trigger>;\ntype DialogTriggerProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Trigger>;\ninterface AlertDialogTriggerProps extends DialogTriggerProps {}\n\nconst AlertDialogTrigger = React.forwardRef<AlertDialogTriggerElement, AlertDialogTriggerProps>(\n (props: ScopedProps<AlertDialogTriggerProps>, forwardedRef) => {\n const { __scopeAlertDialog, ...triggerProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return <DialogPrimitive.Trigger {...dialogScope} {...triggerProps} ref={forwardedRef} />;\n }\n);\n\nAlertDialogTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogPortal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'AlertDialogPortal';\n\ntype DialogPortalProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Portal>;\ninterface AlertDialogPortalProps extends DialogPortalProps {}\n\nconst AlertDialogPortal: React.FC<AlertDialogPortalProps> = (\n props: ScopedProps<AlertDialogPortalProps>\n) => {\n const { __scopeAlertDialog, ...portalProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return <DialogPrimitive.Portal {...dialogScope} {...portalProps} />;\n};\n\nAlertDialogPortal.displayName = PORTAL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogOverlay\n * -----------------------------------------------------------------------------------------------*/\n\nconst OVERLAY_NAME = 'AlertDialogOverlay';\n\ntype AlertDialogOverlayElement = React.ComponentRef<typeof DialogPrimitive.Overlay>;\ntype DialogOverlayProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>;\ninterface AlertDialogOverlayProps extends DialogOverlayProps {}\n\nconst AlertDialogOverlay = React.forwardRef<AlertDialogOverlayElement, AlertDialogOverlayProps>(\n (props: ScopedProps<AlertDialogOverlayProps>, forwardedRef) => {\n const { __scopeAlertDialog, ...overlayProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return <DialogPrimitive.Overlay {...dialogScope} {...overlayProps} ref={forwardedRef} />;\n }\n);\n\nAlertDialogOverlay.displayName = OVERLAY_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'AlertDialogContent';\n\ntype AlertDialogContentContextValue = {\n cancelRef: React.MutableRefObject<AlertDialogCancelElement | null>;\n};\n\nconst [AlertDialogContentProvider, useAlertDialogContentContext] =\n createAlertDialogContext<AlertDialogContentContextValue>(CONTENT_NAME);\n\ntype AlertDialogContentElement = React.ComponentRef<typeof DialogPrimitive.Content>;\ntype DialogContentProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>;\ninterface AlertDialogContentProps\n extends Omit<DialogContentProps, 'onPointerDownOutside' | 'onInteractOutside'> {}\n\nconst Slottable = createSlottable('AlertDialogContent');\n\nconst AlertDialogContent = React.forwardRef<AlertDialogContentElement, AlertDialogContentProps>(\n (props: ScopedProps<AlertDialogContentProps>, forwardedRef) => {\n const { __scopeAlertDialog, children, ...contentProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n const contentRef = React.useRef<AlertDialogContentElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n const cancelRef = React.useRef<AlertDialogCancelElement | null>(null);\n\n return (\n <DialogPrimitive.WarningProvider\n contentName={CONTENT_NAME}\n titleName={TITLE_NAME}\n docsSlug=\"alert-dialog\"\n >\n <AlertDialogContentProvider scope={__scopeAlertDialog} cancelRef={cancelRef}>\n <DialogPrimitive.Content\n role=\"alertdialog\"\n {...dialogScope}\n {...contentProps}\n ref={composedRefs}\n onOpenAutoFocus={composeEventHandlers(contentProps.onOpenAutoFocus, (event) => {\n event.preventDefault();\n cancelRef.current?.focus({ preventScroll: true });\n })}\n onPointerDownOutside={(event) => event.preventDefault()}\n onInteractOutside={(event) => event.preventDefault()}\n >\n {/**\n * We have to use `Slottable` here as we cannot wrap the `AlertDialogContentProvider`\n * around everything, otherwise the `DescriptionWarning` would be rendered straight away.\n * This is because we want the accessibility checks to run only once the content is actually\n * open and that behaviour is already encapsulated in `DialogContent`.\n */}\n <Slottable>{children}</Slottable>\n {process.env.NODE_ENV === 'development' && (\n <DescriptionWarning contentRef={contentRef} />\n )}\n </DialogPrimitive.Content>\n </AlertDialogContentProvider>\n </DialogPrimitive.WarningProvider>\n );\n }\n);\n\nAlertDialogContent.displayName = CONTENT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogTitle\n * -----------------------------------------------------------------------------------------------*/\n\nconst TITLE_NAME = 'AlertDialogTitle';\n\ntype AlertDialogTitleElement = React.ComponentRef<typeof DialogPrimitive.Title>;\ntype DialogTitleProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>;\ninterface AlertDialogTitleProps extends DialogTitleProps {}\n\nconst AlertDialogTitle = React.forwardRef<AlertDialogTitleElement, AlertDialogTitleProps>(\n (props: ScopedProps<AlertDialogTitleProps>, forwardedRef) => {\n const { __scopeAlertDialog, ...titleProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return <DialogPrimitive.Title {...dialogScope} {...titleProps} ref={forwardedRef} />;\n }\n);\n\nAlertDialogTitle.displayName = TITLE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogDescription\n * -----------------------------------------------------------------------------------------------*/\n\nconst DESCRIPTION_NAME = 'AlertDialogDescription';\n\ntype AlertDialogDescriptionElement = React.ComponentRef<typeof DialogPrimitive.Description>;\ntype DialogDescriptionProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>;\ninterface AlertDialogDescriptionProps extends DialogDescriptionProps {}\n\nconst AlertDialogDescription = React.forwardRef<\n AlertDialogDescriptionElement,\n AlertDialogDescriptionProps\n>((props: ScopedProps<AlertDialogDescriptionProps>, forwardedRef) => {\n const { __scopeAlertDialog, ...descriptionProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return <DialogPrimitive.Description {...dialogScope} {...descriptionProps} ref={forwardedRef} />;\n});\n\nAlertDialogDescription.displayName = DESCRIPTION_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogAction\n * -----------------------------------------------------------------------------------------------*/\n\nconst ACTION_NAME = 'AlertDialogAction';\n\ntype AlertDialogActionElement = React.ComponentRef<typeof DialogPrimitive.Close>;\ntype DialogCloseProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Close>;\ninterface AlertDialogActionProps extends DialogCloseProps {}\n\nconst AlertDialogAction = React.forwardRef<AlertDialogActionElement, AlertDialogActionProps>(\n (props: ScopedProps<AlertDialogActionProps>, forwardedRef) => {\n const { __scopeAlertDialog, ...actionProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return <DialogPrimitive.Close {...dialogScope} {...actionProps} ref={forwardedRef} />;\n }\n);\n\nAlertDialogAction.displayName = ACTION_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogCancel\n * -----------------------------------------------------------------------------------------------*/\n\nconst CANCEL_NAME = 'AlertDialogCancel';\n\ntype AlertDialogCancelElement = React.ComponentRef<typeof DialogPrimitive.Close>;\ninterface AlertDialogCancelProps extends DialogCloseProps {}\n\nconst AlertDialogCancel = React.forwardRef<AlertDialogCancelElement, AlertDialogCancelProps>(\n (props: ScopedProps<AlertDialogCancelProps>, forwardedRef) => {\n const { __scopeAlertDialog, ...cancelProps } = props;\n const { cancelRef } = useAlertDialogContentContext(CANCEL_NAME, __scopeAlertDialog);\n const dialogScope = useDialogScope(__scopeAlertDialog);\n const ref = useComposedRefs(forwardedRef, cancelRef);\n return <DialogPrimitive.Close {...dialogScope} {...cancelProps} ref={ref} />;\n }\n);\n\nAlertDialogCancel.displayName = CANCEL_NAME;\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype DescriptionWarningProps = {\n contentRef: React.RefObject<AlertDialogContentElement | null>;\n};\n\nconst DescriptionWarning: React.FC<DescriptionWarningProps> = ({ contentRef }) => {\n const MESSAGE = `\\`${CONTENT_NAME}\\` requires a description for the component to be accessible for screen reader users.\n\nYou can add a description to the \\`${CONTENT_NAME}\\` by passing a \\`${DESCRIPTION_NAME}\\` component as a child, which also benefits sighted users by adding visible context to the dialog.\n\nAlternatively, you can use your own component as a description by assigning it an \\`id\\` and passing the same value to the \\`aria-describedby\\` prop in \\`${CONTENT_NAME}\\`. If the description is confusing or duplicative for sighted users, you can use the \\`@radix-ui/react-visually-hidden\\` primitive as a wrapper around your description component.\n\nFor more information, see https://radix-ui.com/primitives/docs/components/alert-dialog`;\n\n React.useEffect(() => {\n const hasDescription = document.getElementById(\n contentRef.current?.getAttribute('aria-describedby')!\n );\n if (!hasDescription) console.warn(MESSAGE);\n }, [MESSAGE, contentRef]);\n\n return null;\n};\n\nconst Root = AlertDialog;\nconst Trigger = AlertDialogTrigger;\nconst Portal = AlertDialogPortal;\nconst Overlay = AlertDialogOverlay;\nconst Content = AlertDialogContent;\nconst Action = AlertDialogAction;\nconst Cancel = AlertDialogCancel;\nconst Title = AlertDialogTitle;\nconst Description = AlertDialogDescription;\n\nexport {\n createAlertDialogScope,\n //\n AlertDialog,\n AlertDialogTrigger,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogContent,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogTitle,\n AlertDialogDescription,\n //\n Root,\n Trigger,\n Portal,\n Overlay,\n Content,\n Action,\n Cancel,\n Title,\n Description,\n};\nexport type {\n AlertDialogProps,\n AlertDialogTriggerProps,\n AlertDialogPortalProps,\n AlertDialogOverlayProps,\n AlertDialogContentProps,\n AlertDialogActionProps,\n AlertDialogCancelProps,\n AlertDialogTitleProps,\n AlertDialogDescriptionProps,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\";\n\nimport { cn } from \"../../lib/utils\";\nimport { buttonVariants } from \"./button\";\n\nfunction AlertDialog({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />;\n}\n\nfunction AlertDialogTrigger({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\n return <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />;\n}\n\nfunction AlertDialogPortal({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n return <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />;\n}\n\nfunction AlertDialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\n return (\n <AlertDialogPrimitive.Overlay\n data-slot=\"alert-dialog-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction AlertDialogContent({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Content>) {\n return (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n data-slot=\"alert-dialog-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg\",\n className\n )}\n {...props}\n />\n </AlertDialogPortal>\n );\n}\n\nfunction AlertDialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n );\n}\n\nfunction AlertDialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\", className)}\n {...props}\n />\n );\n}\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn(\"text-lg font-semibold\", className)}\n {...props}\n />\n );\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n );\n}\n\nfunction AlertDialogAction({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Action>) {\n return <AlertDialogPrimitive.Action className={cn(buttonVariants(), className)} {...props} />;\n}\n\nfunction AlertDialogCancel({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Cancel>) {\n return (\n <AlertDialogPrimitive.Cancel\n className={cn(buttonVariants({ variant: \"outline\" }), className)}\n {...props}\n />\n );\n}\n\nexport {\n AlertDialog,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogTrigger,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n};\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from '../../primitives/ui/dialog';\nimport { Button } from '../../primitives/ui/button';\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from '../../primitives/ui/alert-dialog';\n\nimport { fingerprintGestureSequence } from '../auth/SpeakeasyAuth.js';\nimport { useSpeakeasy } from '../SpeakeasyProvider.js';\nimport type { GestureSequence, GestureStep } from '../types.js';\nimport { SpeakeasyRitualPad } from './SpeakeasyRitualPad.js';\n\ntype RegistrationPhase = 'idle' | 'record' | 'confirm' | 'success';\n\nfunction describeStep(step: GestureStep): string {\n switch (step.type) {\n case 'tap':\n return `tap ×${step.count} (${step.region})`;\n case 'hold':\n return `hold ${Math.round(step.durationMs)}ms (${step.region})`;\n case 'radial_drag':\n return `radial drag ${Math.round(step.fromAngle)}°→${Math.round(step.toAngle)}° (notches ${step.notches})`;\n case 'flick':\n return `flick ${step.direction} (${step.velocity.toFixed(2)}px/ms)`;\n }\n}\n\nexport interface SpeakeasyRegistrationDialogProps {\n trigger?: React.ReactNode;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport function SpeakeasyRegistrationDialog({\n trigger,\n open: openProp,\n onOpenChange,\n}: SpeakeasyRegistrationDialogProps) {\n const [openInternal, setOpenInternal] = useState(false);\n const open = openProp ?? openInternal;\n const setOpen = onOpenChange ?? setOpenInternal;\n\n const { isRegistered, register, clearRegistration } = useSpeakeasy();\n\n const [phase, setPhase] = useState<RegistrationPhase>('idle');\n const [first, setFirst] = useState<GestureSequence | null>(null);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n if (!open) {\n setPhase('idle');\n setFirst(null);\n setError(null);\n }\n }, [open]);\n\n const stepsSummary = useMemo(() => {\n if (!first) return null;\n return first.steps.map(describeStep);\n }, [first]);\n\n const start = useCallback(() => {\n setError(null);\n setFirst(null);\n setPhase('record');\n }, []);\n\n const handleFirst = useCallback(async (sequence: GestureSequence) => {\n setError(null);\n setFirst(sequence);\n setPhase('confirm');\n }, []);\n\n const handleConfirm = useCallback(\n async (sequence: GestureSequence) => {\n if (!first) return;\n const a = fingerprintGestureSequence(first);\n const b = fingerprintGestureSequence(sequence);\n if (a !== b) {\n setError('That didn’t match. Try again.');\n setPhase('record');\n setFirst(null);\n return;\n }\n\n await register(first);\n setError(null);\n setPhase('success');\n },\n [first, register]\n );\n\n return (\n <Dialog open={open} onOpenChange={setOpen}>\n {trigger ? <DialogTrigger asChild>{trigger}</DialogTrigger> : null}\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Speakeasy ritual</DialogTitle>\n <DialogDescription>\n Register a short gesture sequence (3–5 steps). You’ll need to repeat it to confirm.\n </DialogDescription>\n </DialogHeader>\n\n <div style={{ display: 'grid', gap: 12 }}>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 12,\n padding: '10px 12px',\n borderRadius: 10,\n border: '1px solid rgba(255,255,255,0.08)',\n }}\n >\n <div style={{ display: 'grid', gap: 2 }}>\n <div style={{ fontWeight: 600 }}>\n Status: {isRegistered ? 'registered' : 'not registered'}\n </div>\n <div style={{ fontSize: 13, opacity: 0.8 }}>\n Stored secret is a verifier output (not raw gestures).\n </div>\n </div>\n\n {isRegistered ? (\n <AlertDialog>\n <AlertDialogTrigger asChild>\n <Button variant=\"outline\">Clear</Button>\n </AlertDialogTrigger>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Clear ritual?</AlertDialogTitle>\n <AlertDialogDescription>\n This removes the registered verifier from storage. You’ll need to register again to enter.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancel</AlertDialogCancel>\n <AlertDialogAction\n onClick={async () => {\n await clearRegistration();\n setPhase('idle');\n setFirst(null);\n }}\n >\n Clear\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n ) : null}\n </div>\n\n {error ? (\n <div\n style={{\n padding: '10px 12px',\n borderRadius: 10,\n border: '1px solid rgba(239,68,68,0.35)',\n background: 'rgba(239,68,68,0.10)',\n color: 'rgba(255,255,255,0.92)',\n fontSize: 13,\n }}\n >\n {error}\n </div>\n ) : null}\n\n {phase === 'idle' ? (\n <div style={{ display: 'grid', gap: 12 }}>\n <div style={{ fontSize: 13, opacity: 0.85 }}>\n Tip: Use rhythmic taps, a short hold, and a notch-like radial drag.\n </div>\n <div style={{ display: 'flex', justifyContent: 'flex-end', gap: 8 }}>\n <Button onClick={start}>{isRegistered ? 'Replace ritual' : 'Register ritual'}</Button>\n </div>\n </div>\n ) : null}\n\n {phase === 'record' ? (\n <div style={{ display: 'grid', gap: 12, justifyItems: 'center' }}>\n <div style={{ fontWeight: 600 }}>Step 1: Record your ritual</div>\n <SpeakeasyRitualPad onComplete={handleFirst} />\n <div style={{ fontSize: 13, opacity: 0.8, textAlign: 'center' }}>\n Perform your gesture. It will auto-finish after a brief pause.\n </div>\n <div style={{ display: 'flex', justifyContent: 'flex-end', width: '100%' }}>\n <Button variant=\"outline\" onClick={() => setPhase('idle')}>Cancel</Button>\n </div>\n </div>\n ) : null}\n\n {phase === 'confirm' ? (\n <div style={{ display: 'grid', gap: 12, justifyItems: 'center' }}>\n <div style={{ fontWeight: 600 }}>Step 2: Repeat to confirm</div>\n <SpeakeasyRitualPad onComplete={handleConfirm} />\n {stepsSummary ? (\n <div style={{ fontSize: 12, opacity: 0.75, width: '100%' }}>\n <div style={{ fontWeight: 600, marginBottom: 4 }}>Recorded</div>\n <ol style={{ margin: 0, paddingLeft: 18 }}>\n {stepsSummary.map((s, idx) => (\n <li key={idx}>{s}</li>\n ))}\n </ol>\n </div>\n ) : null}\n <div style={{ display: 'flex', justifyContent: 'flex-end', width: '100%', gap: 8 }}>\n <Button\n variant=\"outline\"\n onClick={() => {\n setFirst(null);\n setPhase('record');\n setError(null);\n }}\n >\n Redo\n </Button>\n <Button variant=\"outline\" onClick={() => setPhase('idle')}>Cancel</Button>\n </div>\n </div>\n ) : null}\n\n {phase === 'success' ? (\n <div style={{ display: 'grid', gap: 12 }}>\n <div style={{ fontWeight: 600 }}>Ritual registered.</div>\n <div style={{ fontSize: 13, opacity: 0.85 }}>\n You can now triple-tap to knock and perform your gesture to enter.\n </div>\n </div>\n ) : null}\n </div>\n\n <DialogFooter>\n <Button\n variant=\"outline\"\n onClick={() => {\n setOpen(false);\n }}\n >\n Close\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\nexport default SpeakeasyRegistrationDialog;\n\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from '../../primitives/ui/dialog';\nimport { Button } from '../../primitives/ui/button';\n\nimport { SpeakeasyAuth, type SpeakeasyAuthOptions } from '../auth/SpeakeasyAuth.js';\nimport { SpeakeasyNotReadyError } from '../SpeakeasyProvider.js';\nimport { createCapabilityToken } from '../auth/CapabilityIssuer.js';\nimport { randomHex } from '../auth/crypto.js';\nimport {\n createDefaultDeviceSecretProvider,\n type SpeakeasyDeviceSecretProvider,\n} from '../auth/deviceSecret.js';\nimport { isPanicGesture } from '../doorman/panic.js';\nimport type { CapabilityToken, Challenge, GestureSequence } from '../types.js';\nimport { SpeakeasyRitualPad } from './SpeakeasyRitualPad.js';\n\nexport interface SpeakeasyConsentRequest {\n requester: string;\n purpose: string;\n scopes: string[];\n}\n\nexport interface SpeakeasyConsentDialogProps {\n trigger?: React.ReactNode;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n request: SpeakeasyConsentRequest;\n authOptions?: SpeakeasyAuthOptions;\n deviceSecret?: SpeakeasyAuthOptions['deviceSecret'];\n deviceSecretProvider?: SpeakeasyDeviceSecretProvider;\n issuer?: string;\n ttlMs?: number;\n onGranted: (token: CapabilityToken) => void;\n}\n\ntype ConsentPhase = 'idle' | 'challenged' | 'locked';\n\nconst DEFAULTS = {\n challengeWindowMs: 30_000,\n maxFailures: 3,\n cooldownBaseMs: 1_000,\n lockDurationMs: 300_000,\n};\n\nexport function SpeakeasyConsentDialog({\n trigger,\n open: openProp,\n onOpenChange,\n request,\n authOptions,\n deviceSecret,\n deviceSecretProvider,\n issuer = 'bb-ui:speakeasy:consent',\n ttlMs = 300_000,\n onGranted,\n}: SpeakeasyConsentDialogProps) {\n const [openInternal, setOpenInternal] = useState(false);\n const open = openProp ?? openInternal;\n const setOpen = onOpenChange ?? setOpenInternal;\n\n const [resolvedDeviceSecret, setResolvedDeviceSecret] = useState<\n SpeakeasyAuthOptions['deviceSecret'] | undefined\n >(deviceSecret);\n\n useEffect(() => {\n let cancelled = false;\n if (deviceSecret !== undefined) {\n setResolvedDeviceSecret(deviceSecret);\n return;\n }\n\n const provider = deviceSecretProvider ?? createDefaultDeviceSecretProvider();\n provider.getOrCreateDeviceSecret().then((secret) => {\n if (!cancelled) setResolvedDeviceSecret(secret);\n });\n\n return () => {\n cancelled = true;\n };\n }, [deviceSecret, deviceSecretProvider]);\n\n // Auth is only created once deviceSecret is resolved (prevents race condition)\n const auth = useMemo(() => {\n if (resolvedDeviceSecret === undefined) {\n return null; // Not ready yet\n }\n return new SpeakeasyAuth({\n ...authOptions,\n deviceSecret: resolvedDeviceSecret,\n });\n }, [authOptions, resolvedDeviceSecret]);\n\n const [phase, setPhase] = useState<ConsentPhase>('idle');\n const [challenge, setChallenge] = useState<Challenge | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [failures, setFailures] = useState(0);\n const [cooldownUntil, setCooldownUntil] = useState<number | null>(null);\n const [lockUntil, setLockUntil] = useState<number | null>(null);\n\n useEffect(() => {\n if (!open) {\n setPhase('idle');\n setChallenge(null);\n setError(null);\n setFailures(0);\n setCooldownUntil(null);\n setLockUntil(null);\n }\n }, [open]);\n\n useEffect(() => {\n if (!cooldownUntil) return;\n const remaining = cooldownUntil - Date.now();\n if (remaining <= 0) {\n setCooldownUntil(null);\n return;\n }\n const id = setTimeout(() => setCooldownUntil(null), remaining);\n return () => clearTimeout(id);\n }, [cooldownUntil]);\n\n useEffect(() => {\n if (!lockUntil) return;\n const remaining = lockUntil - Date.now();\n if (remaining <= 0) {\n setLockUntil(null);\n setPhase('idle');\n return;\n }\n const id = setTimeout(() => {\n setLockUntil(null);\n setPhase('idle');\n }, remaining);\n return () => clearTimeout(id);\n }, [lockUntil]);\n\n const begin = useCallback(async () => {\n setError(null);\n\n if (!auth) {\n // User-friendly message for UI (matches SpeakeasyNotReadyError semantics)\n setError('Initializing secure storage. Please wait a moment.');\n return;\n }\n\n if (!(await auth.isRegistered())) {\n setError('No ritual is registered on this device yet.');\n return;\n }\n\n if (lockUntil && Date.now() < lockUntil) {\n setPhase('locked');\n return;\n }\n\n const now = Date.now();\n const next: Challenge = {\n nonce: randomHex(32),\n salt: randomHex(16),\n issuedAt: now,\n expiresAt: now + DEFAULTS.challengeWindowMs,\n };\n setChallenge(next);\n setPhase('challenged');\n }, [auth, lockUntil]);\n\n const onRitualComplete = useCallback(\n async (sequence: GestureSequence) => {\n if (!challenge || !auth) return;\n\n if (Date.now() > challenge.expiresAt) {\n setError('Challenge expired. Try again.');\n setPhase('idle');\n setChallenge(null);\n return;\n }\n\n // Panic ritual always locks in consent flows.\n if (isPanicGesture(sequence)) {\n const now = Date.now();\n setLockUntil(now + DEFAULTS.lockDurationMs);\n setPhase('locked');\n setChallenge(null);\n setError('Locked (panic).');\n return;\n }\n\n const result = await auth.verifyGesture(sequence, challenge);\n if (!result.ok) {\n const nextFailures = failures + 1;\n setFailures(nextFailures);\n\n if (nextFailures >= DEFAULTS.maxFailures) {\n const now = Date.now();\n setLockUntil(now + DEFAULTS.lockDurationMs);\n setPhase('locked');\n setChallenge(null);\n setError('Too many attempts. Locked.');\n return;\n }\n\n const cooldownMs = DEFAULTS.cooldownBaseMs * Math.pow(2, nextFailures - 1);\n setCooldownUntil(Date.now() + cooldownMs);\n setError('Incorrect ritual.');\n setPhase('idle');\n setChallenge(null);\n return;\n }\n\n const verifier = await auth.getVerifier();\n if (!verifier) {\n setError('No ritual is registered on this device yet.');\n setPhase('idle');\n setChallenge(null);\n return;\n }\n\n const token = await createCapabilityToken({\n verifierKeyHex: verifier.hash,\n issuer,\n scopes: request.scopes,\n ttlMs,\n constraints: { maxUses: 1, allowedOrigins: [verifier.domain] },\n });\n\n onGranted(token);\n setOpen(false);\n },\n [auth, challenge, failures, issuer, request.scopes, ttlMs, onGranted, setOpen]\n );\n\n const remainingLockSeconds = lockUntil ? Math.max(0, Math.ceil((lockUntil - Date.now()) / 1000)) : 0;\n const remainingCooldownMs = cooldownUntil ? Math.max(0, cooldownUntil - Date.now()) : 0;\n\n return (\n <Dialog open={open} onOpenChange={setOpen}>\n {trigger ? <DialogTrigger asChild>{trigger}</DialogTrigger> : null}\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Consent gate</DialogTitle>\n <DialogDescription>\n {request.requester} requests speakeasy access for: {request.purpose}\n </DialogDescription>\n </DialogHeader>\n\n <div style={{ display: 'grid', gap: 12 }}>\n {error ? (\n <div\n style={{\n padding: '10px 12px',\n borderRadius: 10,\n border: '1px solid rgba(239,68,68,0.35)',\n background: 'rgba(239,68,68,0.10)',\n color: 'rgba(255,255,255,0.92)',\n fontSize: 13,\n }}\n >\n {error}\n </div>\n ) : null}\n\n {phase === 'locked' ? (\n <div style={{ fontSize: 13, opacity: 0.85 }}>\n Locked. Try again in {remainingLockSeconds}s.\n </div>\n ) : null}\n\n {phase === 'challenged' ? (\n <div style={{ display: 'grid', gap: 12, justifyItems: 'center' }}>\n <div style={{ fontWeight: 600 }}>Perform ritual</div>\n <SpeakeasyRitualPad onComplete={onRitualComplete} />\n </div>\n ) : null}\n\n {phase === 'idle' ? (\n <div style={{ display: 'grid', gap: 10 }}>\n <div style={{ fontSize: 13, opacity: 0.85 }}>\n Scopes: <code>{request.scopes.join(', ')}</code>\n </div>\n <div style={{ display: 'flex', justifyContent: 'flex-end', gap: 8 }}>\n <Button variant=\"outline\" onClick={() => setOpen(false)}>\n Deny\n </Button>\n <Button onClick={begin} disabled={remainingCooldownMs > 0}>\n {remainingCooldownMs > 0\n ? `Cooldown (${Math.ceil(remainingCooldownMs / 1000)}s)`\n : 'Perform ritual'}\n </Button>\n </div>\n </div>\n ) : null}\n </div>\n\n <DialogFooter>\n <Button variant=\"outline\" onClick={() => setOpen(false)}>\n Close\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\nexport default SpeakeasyConsentDialog;\n"]}
|