import { type SessionDisplayStatus } from "../../timeline-model.js"; import type { RailSession as Session } from "./session-list-entry.js"; export declare const DEFAULT_VISIBLE_TREE_LEVELS = 3; export declare const MAX_VISUAL_TREE_DEPTH = 3; export declare function sessionStatusLabel(status: SessionDisplayStatus): string; import { sessionHasUpcomingSchedule, sessionInputWait } from "../../session-list-model.js"; export { sessionHasUpcomingSchedule, sessionInputWait }; export declare function sessionWaitLabel(deadlineAt: string, now?: number, compact?: boolean): string; /** Honest user-facing state: lifecycle first, then the effective pause policy. */ export declare function sessionStateLabel(session: Session): string; /** Root-to-parent path for the URL-active session, guarded against corrupt cycles. */ export declare function sessionAncestorPath(activeSessionId: string | null, parentOf: ReadonlyMap): string[]; /** Expand only enough ancestors to show the default number of real tree levels. */ export declare function defaultExpandedAncestors(ancestorPath: readonly string[], manuallyCollapsed: ReadonlySet, visibleLevels?: number): ReadonlySet; export declare function visualTreeDepth(depth: number): number; /** * Whether a session is held by a pause for display. Cancel is implemented as a terminal * status plus a pause fence, so a cancelled session must read "Cancelled", never "Paused". */ export declare function sessionControlPaused(session: { status: string; effectiveControl?: { state: string; } | null | undefined; }): boolean;