import React from 'react'; import type { ExportChange, ExportHistoryGenerator, RepositoryExportHistoryOptions, ExportHistoryReport } from '../../file-system/index.tsx'; /** A single export entry derived from the final report. */ export interface HistoryExportEntry { /** The ID of the export. */ id: string; /** The name of the export. */ name: string; /** The file path of the export. */ filePath: string; /** The changes made to the export. */ changes: ExportChange[]; } export interface HistoryProgressProps { /** Current processing phase. */ phase: string; /** Milliseconds elapsed since the operation started. */ elapsedMs: number; /** Number of commits processed so far. */ commitsProcessed: number; /** Total number of commits to process. */ totalCommits: number; /** Number of unique exports discovered so far. */ exportCount: number; /** Total number of changes discovered so far. */ changeCount: number; } export interface HistoryCompleteProps { /** Completed export history report. */ report: ExportHistoryReport; /** Total milliseconds the operation took. */ elapsedMs: number; /** Final entries after `selectEntries` is applied. */ entries: HistoryExportEntry[]; /** Total number of entries in `entries`. */ exportCount: number; /** Total number of changes across `entries`. */ changeCount: number; /** Default rendered list output. */ children: React.ReactNode; } export interface HistoryListComponents { /** Wraps the final exports list. */ Exports: React.ComponentType<{ entries: HistoryExportEntry[]; children: React.ReactNode; }>; /** Renders a single export entry. `children` is the rendered changes list. */ Export: React.ComponentType<{ entry: HistoryExportEntry; children: React.ReactNode; }>; /** Wraps the changes list for an export entry. */ Changes: React.ComponentType<{ entry: HistoryExportEntry; children: React.ReactNode; }>; /** Renders a single change for an export entry. */ Change: React.ComponentType<{ entry: HistoryExportEntry; change: ExportChange; index: number; isLast: boolean; }>; } export interface HistoryComponents extends HistoryListComponents { /** Optional root wrapper around the entire component output. */ Root: React.ComponentType<{ children: React.ReactNode; }>; /** Renders progress while streaming. */ Progress: React.ComponentType; /** Renders completion output with access to report + projected entries. */ Complete: React.ComponentType; } export interface HistorySelectEntriesContext { /** Completed report from the source. */ report: ExportHistoryReport; /** Default entries derived from the report. */ entries: HistoryExportEntry[]; } /** * Allows selecting/filtering/sorting final entries before rendering. * * Useful for custom views such as "recently added in latest release" while * keeping rendering fully slot-driven. */ export type HistorySelectEntries = (context: HistorySelectEntriesContext) => HistoryExportEntry[]; export interface HistorySourceProvider { /** Creates a fresh export-history generator for this render. */ getExportHistory(options?: RepositoryExportHistoryOptions): ExportHistoryGenerator; } export type HistorySourceFactory = (options?: RepositoryExportHistoryOptions) => ExportHistoryGenerator; export type HistorySource = ExportHistoryGenerator | HistorySourceProvider | HistorySourceFactory; export interface HistoryProps { /** * Export history input. * * Passing a repository is recommended because React server rendering can * replay renders, and repositories create a fresh generator each time. */ source: HistorySource; /** Options forwarded when `source` is a repository-like provider. */ sourceOptions?: RepositoryExportHistoryOptions; /** Override any default slot renderer. */ components?: Partial; /** Select/filter/sort final entries before rendering. */ selectEntries?: HistorySelectEntries; } /** Streams export history from a repository source. */ export declare const History: typeof HistoryWithFallback; declare function HistoryWithFallback(props: HistoryProps): React.JSX.Element; /** Creates sorted history entries from a completed report. */ export declare function getHistoryEntries(report: ExportHistoryReport): HistoryExportEntry[]; /** Finds the most recent release label present in a report. */ export declare function getLatestHistoryRelease(report: ExportHistoryReport): string | undefined; export interface HistoryRecentlyAddedOptions { /** * Release label to filter against. * * Defaults to `'latest'`, which derives the most recent release present in * the report using commit timestamps. */ release?: 'latest' | string; } /** * Selects only "Added" changes for a specific release. * * This is intended for views like "recently added in latest release". */ export declare function getRecentlyAddedHistoryEntries(report: ExportHistoryReport, options?: HistoryRecentlyAddedOptions): HistoryExportEntry[]; export {};