import { type RgRule } from "../core/rule.js"; export interface LaneView { /** world-unit at the top edge of the viewport (flow-axis scroll offset) */ scrollY: number; /** screen px per world unit along the flow axis — the ONLY zoom */ zoomY: number; /** viewport width px (the pinned axis: content is laid out in px here) */ width: number; /** viewport height px (the scroll span of the flow axis) */ height: number; } /** flow-axis: world → screen y. */ export declare const worldToScreenY: (v: LaneView, wy: number) => number; /** flow-axis: screen → world y. */ export declare const screenToWorldY: (v: LaneView, sy: number) => number; /** flow-axis world span currently visible (world units per viewport). */ export declare const visibleSpan: (v: LaneView) => number; /** * Zoom by `factor` about a fixed screen-y anchor (keep the world point under * the cursor/center pinned). Clamped to [min, max] zoom. */ export declare function zoomAt(v: LaneView, factor: number, anchorScreenY: number, limits: { min: number; max: number; }): void; /** * Clamp scroll to the source extent. When content is shorter than the * viewport it pins to the top; otherwise it keeps the content edge-to-edge * without overscroll (a little bottom slack so the last row isn't glued to * the edge). */ export declare function clampScroll(v: LaneView, extent: { min: number; max: number; }, bottomSlackPx?: number): void; /** * The readable flow-axis step (world units per readable cell) at the current * zoom — the RG ladder from src/core/grid.ts, applied to the single axis. * Sources use it to choose gridline spacing and aggregation buckets. */ export declare const lodStep: (v: LaneView, rule?: RgRule) => number; //# sourceMappingURL=view.d.ts.map