import type { HTMLAttributes, ReactNode } from "react"; /** * Stepper — multi-step pipeline progress, promoted from the theo-cloud * dashboard build-timeline (production). Read-only by design: steps are NOT * clickable (pipeline visualization, not a wizard). 100% controlled — live * updates (SSE/polling) belong to the consumer. * * Contract: step `id`s MUST be unique (React keys); at most ONE step should * be `active` (`aria-current="step"` is emitted per active step as-is). * A `label` is required — it names the pipeline for screen readers. * * * * For the simple "wizard position" case, derive the array from an index: * */ export type StepStatus = "pending" | "active" | "done" | "failed"; export interface StepperStepData { /** Unique key for the step (consumer contract: no duplicates). */ id: string; label: string; /** For failed steps, pass the failure cause here — it is read by screen readers inside the same item (F-dom-3). */ description?: string; status: StepStatus; /** Optional slot — prefer `` from this library. */ timestamp?: ReactNode; /** Optional slot rendered ONLY when status === "failed" (the action belongs to the consumer). */ retry?: ReactNode; } export interface StepperProps extends HTMLAttributes { /** Accessible name for the pipeline (aria-label of the list). */ label: string; steps: StepperStepData[]; /** @default "vertical" — both production cases (build/ingest) are vertical. */ orientation?: "vertical" | "horizontal"; } /** * Pure helper for the simple index-driven case: steps before `activeIndex` * are done, the step at it is active, later ones are pending. Out-of-range * indexes are safe: past the end → all done; negative → all pending. */ export declare function deriveSteps(defs: Array>, activeIndex: number): StepperStepData[]; declare const Stepper: import("react").ForwardRefExoticComponent>; export { Stepper };