import { type ReactNode, type RefObject } from 'react'; import { type ViewportCoords } from './coords'; /** * Viewport state + derived bounds + imperative api surface, exposed via * React context so ruler, playhead, tree column, every lane, and all * interaction handlers read from a single source of truth. */ export interface TimelineViewport extends ViewportCoords { /** Derived: first visible second. */ viewStart: number; /** Derived: last visible second. */ viewEnd: number; setPxPerSecond(v: number): void; setScrollSec(v: number): void; zoomAtCursor(factor: number, cursorX: number): void; fit(): void; /** Scroll so that `time` sits at the horizontal center of the viewport. */ centerOn(time: number): void; setContainerWidth(w: number): void; } export declare function useTimelineViewport(): TimelineViewport; export interface TimelineViewportProviderProps { duration: number; children: ReactNode; /** Initial zoom level; defaults to 36 px/s (matches screenshot baseline). */ initialPxPerSec?: number; } export declare function TimelineViewportProvider({ duration, initialPxPerSec, children, }: TimelineViewportProviderProps): import("react/jsx-runtime").JSX.Element; /** * Wire up a ref to report its measured width back to the viewport. Install * once on the lane-area container; the Provider keeps `containerWidth` in * sync as the element resizes. */ export declare function useObservedWidth(ref: RefObject): void; //# sourceMappingURL=viewport.d.ts.map