export interface Commit { hash: string; short: string; parents: string[]; author: string; time: number; subject: string; } export interface Ref { /** Full name, e.g. `refs/heads/main`. */ name: string; target: string; } export interface RepoData { root: string; commits: Commit[]; refs: Ref[]; head_ref: string | null; head: string | null; } export type RefKind = "local" | "remote" | "tag"; export interface FilterRule { pattern: string; /** `hide` hides matching refs; `only` shows only refs that match some `only` rule. */ mode: "hide" | "only"; } export interface FilterState { /** Full ref names hidden with the eye toggle. */ hidden: string[]; rules: FilterRule[]; } /** A commit as shown on screen, with its parent edges after collapsing. */ export interface DisplayRow { commit: Commit; parents: { hash: string; dotted: boolean }[]; /** Set on the first row of a collapsed run: how many commits are hidden below it. */ hiddenCount?: number; } export interface Segment { /** Column numbers; y is 0 (row top), 0.5 (row middle) or 1 (row bottom). */ x1: number; y1: number; x2: number; y2: number; color: number; dotted: boolean; } export interface LaidOutRow { col: number; color: number; segments: Segment[]; } export interface ChangedFile { /** One letter: A added, M modified, D deleted, R renamed, C copied, T type changed. */ status: string; path: string; old_path: string | null; /** Line counts; null for binary files. */ added: number | null; deleted: number | null; } export interface CommitDetails { hash: string; author: string; author_email: string; author_time: number; committer: string; committer_email: string; commit_time: number; parents: string[]; message: string; files: ChangedFile[]; }