import type { LaneBoardTick } from "./lane_board"; /** * WHERE THINGS STAND ON A LANE BOARD'S AXIS — the window a board reads, its marks, each span's place as * shares of it, the stretches nothing covers and the tiers overlapping spans stack in. Pure, so the board * places boxes by shares it never measures. */ export type LaneAxisUnit = "hour" | "day"; /** The window a board reads, [from, to). */ export interface LaneAxis { from: Date; to: Date; unit: LaneAxisUnit; } /** A stretch of the axis, [start, end). */ export interface LaneSpan { start: Date; end: Date; } /** One day in hours: `hours` (default 7–19) widened to whole hours covering every span that falls on `day`. */ export declare function hourAxis(day: Date, spans: readonly LaneSpan[], hours?: { from: number; to: number; }): LaneAxis; /** `days` whole days from `from`'s midnight. */ export declare function dayAxis(from: Date, days: number): LaneAxis; /** A mark per hour ("08:00") or per day (label the day number, caption the weekday short, `current` on today, `quiet` on Sat/Sun), each at its share. */ export declare function laneTicks(axis: LaneAxis, locale: string, today: Date): LaneBoardTick[]; /** A span's place as SHARES (0–1) of the axis, clipped to it; null where it falls outside. */ export declare function spanShares(axis: LaneAxis, span: LaneSpan): { left: number; width: number; } | null; /** The stretches of the axis no span covers, in order, each at least `least` ms long. */ export declare function laneGaps(axis: LaneAxis, spans: readonly LaneSpan[], least: number): LaneSpan[]; /** * Each box's stripe (0-based) where it is DRAWN: at least `least` of the axis wide and kept inside it, as the board * draws a short piece of work wide enough to name, so a widened box never hides the next one. */ export declare function blockTiers(boxes: readonly { left: number; width: number; }[], least: number): number[]; /** * The part of a free stretch no DRAWN box covers from its start, as shares — a stretch following a short piece drawn * wide begins where that piece is drawn to end; none where the boxes cover it whole. */ export declare function openStretch(stretch: { left: number; width: number; }, boxes: readonly { left: number; width: number; }[], least: number): { left: number; width: number; } | null;