import { PauseIcon, PlayIcon } from "@octaviaflow/icons";
import { type ComponentPropsWithoutRef, type MouseEvent, type ReactNode } from "react";
import { type CardRadius } from "../Card";
import { type DropdownMenuItem } from "../DropdownMenu";
import { type SparklineProps } from "../Sparkline";
export type PipelineStatus = "queued" | "running" | "succeeded" | "failed" | "skipped" | "paused" | "scheduled";
export interface PipelineCardRoute {
    /** Source connector display name (e.g. "orders.postgres"). */
    source: ReactNode;
    /** Destination connector display name (e.g. "snowflake.prod"). */
    destination: ReactNode;
    /** Optional source logo / icon. */
    sourceIcon?: ReactNode;
    /** Optional destination logo / icon. */
    destinationIcon?: ReactNode;
}
export interface PipelineCardAction {
    /** Display label — also used as aria-label when only a glyph is shown. */
    label: string;
    /** Optional icon node. When provided alongside `iconOnly`, the label hides visually. */
    icon?: ReactNode;
    /** Render only the icon (label remains in the a11y tree as aria-label). */
    iconOnly?: boolean;
    onClick?: (e: MouseEvent<HTMLButtonElement>) => void;
    /** Mark as disabled. */
    disabled?: boolean;
}
export interface PipelineCardSparkline extends Omit<SparklineProps, "data" | "ref"> {
    data: number[];
}
export interface PipelineCardMeta {
    label: ReactNode;
    value: ReactNode;
}
export interface PipelineCardProps extends Omit<ComponentPropsWithoutRef<"div">, "title" | "onChange" | "onClick" | "onDrag" | "onDragStart" | "onDragEnd" | "onAnimationStart"> {
    /** Pipeline / run name. */
    name: ReactNode;
    /** Heading level for the name. Default `"h3"`. */
    nameAs?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
    /** Source → destination route. Renders below the name when provided. */
    route?: PipelineCardRoute;
    /** Live status — drives the ring color + label tone. */
    status: PipelineStatus;
    /** Override the status pill label (defaults to the humanized status). */
    statusLabel?: ReactNode;
    /** Metadata strip (started/ETA/run id/duration). */
    meta?: PipelineCardMeta[];
    /** Recent-runs sparkline (e.g. last N run durations or row counts). */
    sparkline?: PipelineCardSparkline;
    /** Optional sparkline caption (e.g. "Last 24 runs"). */
    sparklineLabel?: ReactNode;
    /** Volume tally — terse tabular text rendered below the sparkline. */
    volume?: ReactNode;
    /** Quick-action buttons (Run / Pause / Re-run / etc.). */
    actions?: PipelineCardAction[];
    /**
     * Overflow menu items. When provided, the card renders a built-in
     * portal-based `DropdownMenu` triggered by the "⋯" button — outside
     * any `overflow:hidden` ancestor, with keyboard navigation and focus
     * trap (React Aria semantics). Items support `icon`, `danger`,
     * `disabled`, and `separator`.
     *
     * Mutually exclusive with `onOverflow`. If both are passed,
     * `overflowItems` wins.
     */
    overflowItems?: DropdownMenuItem[];
    /** Overflow-menu alignment. Default `"end"` (right-aligned). */
    overflowAlign?: "start" | "end";
    /** Override the trigger icon (default `OverflowMenuHorizontalIcon`). */
    overflowIcon?: ReactNode;
    /** Accessible label for the overflow trigger. Default `"More actions"`. */
    overflowLabel?: string;
    /**
     * Escape-hatch: imperative callback fired when the overflow button
     * is clicked. Use this when you need to drive a custom popover /
     * menu from outside (e.g. a Radix-style controlled menu, a Slack-
     * style emoji picker). Ignored when `overflowItems` is set.
     */
    onOverflow?: (e: MouseEvent<HTMLButtonElement>) => void;
    /** Optional tag chips. */
    tags?: ReactNode[];
    /** Visual size. Default `"md"`. */
    size?: "sm" | "md" | "lg";
    /** Render the card as a real `<a>` when href is provided. */
    href?: string;
    /** Whole-card click handler. */
    onClick?: (e: MouseEvent<HTMLDivElement>) => void;
    /** Disable card interaction. */
    disabled?: boolean;
    /** Loading skeleton. */
    loading?: boolean;
    /** Suppress the running-status ring spin animation. */
    disableAnimation?: boolean;
    /** Card corner radius (passes through). */
    radius?: CardRadius;
}
export declare const PipelineCard: import("react").ForwardRefExoticComponent<PipelineCardProps & import("react").RefAttributes<HTMLDivElement>>;
export { PauseIcon, PlayIcon };
export type { DropdownMenuItem } from "../DropdownMenu";
//# sourceMappingURL=PipelineCard.d.ts.map