UNPKG

@nipe-solutions/react-spring-bottom-sheet

Version:
55 lines (54 loc) 1.43 kB
import type { OpenChangeReason } from '../public-types.js'; import type { ResolvedLayout } from '../layout/types.js'; export type TransitionPhase = 'closed' | 'opening' | 'open' | 'dragging' | 'settling' | 'closing'; export interface SheetState { phase: TransitionPhase; open: boolean; activeSnapPoint: string | null; position: number; targetPosition: number; velocity: number; dismissReason: OpenChangeReason | null; } export type SheetEvent = { type: 'OPEN_REQUESTED'; reason: OpenChangeReason; snapPoint: string; targetPosition: number; } | { type: 'CLOSE_REQUESTED'; reason: OpenChangeReason; velocity?: number; } | { type: 'DRAG_STARTED'; position: number; } | { type: 'DRAG_MOVED'; position: number; } | { type: 'DRAG_ENDED'; position: number; velocity: number; snapPoint: string; targetPosition: number; } | { type: 'LAYOUT_CHANGED'; layout: ResolvedLayout; } | { type: 'SETTLED'; position: number; }; export interface ControllerDiagnostic { code: 'invalid-transition'; event: SheetEvent['type']; phase: TransitionPhase; } export interface TransitionResult { state: SheetState; diagnostic: ControllerDiagnostic | null; } export interface SheetController { getState(): SheetState; dispatch(event: SheetEvent): void; subscribe(listener: (state: SheetState) => void): () => void; }