import type { BaseProps } from '../BaseProps';
import type { ProgressBarVariantMap } from './index';
/**
 * Progress bar variant type — maps to semantic color tokens.
 * Extensible via module augmentation of ProgressBarVariantMap.
 */
export type ProgressBarVariant = keyof ProgressBarVariantMap;
/**
 * A fixed target mark drawn on the progress track.
 *
 * Positioned by `value` in the same `0..max` scale as the bar's `value` prop —
 * mirroring the object shape of Slider's `marks` so the two APIs stay
 * consistent.
 */
export interface ProgressBarMark {
    /**
     * Position of the mark in the same `0..max` scale as `value`. Values
     * outside the range are clamped to the track edges.
     */
    value: number;
    /**
     * Names the mark. A mark stands for something meaningful on the track — a
     * goal, a threshold, a quarter target — so a label is required: it is the
     * mark's accessible name and the text revealed in a `Tooltip` on hover and
     * keyboard focus. Can be the value itself (e.g. `'70%'`) or something richer
     * (e.g. `'Q1 target: 50%'`).
     */
    label: string;
}
export interface ProgressBarProps extends BaseProps<HTMLDivElement> {
    /** Ref forwarded to the root element */
    ref?: React.Ref<HTMLDivElement>;
    /**
     * Current value of the progress bar.
     * Ignored when `isIndeterminate` is true.
     */
    value?: number;
    /**
     * Maximum value of the progress bar.
     * @default 100
     */
    max?: number;
    /**
     * Accessible label for the progress bar. Required for a11y.
     * Shown visually above the bar unless `isLabelHidden` is true.
     */
    label: string;
    /**
     * When true, the label is visually hidden but remains accessible to screen readers.
     * @default false
     */
    isLabelHidden?: boolean;
    /**
     * When true, displays the formatted value (e.g. "75%") next to the label.
     * Ignored when `isIndeterminate` is true.
     * @default false
     */
    hasValueLabel?: boolean;
    /**
     * Custom formatter for the value label.
     * @default (value, max) => `${Math.round((value / max) * 100)}%`
     */
    formatValueLabel?: (value: number, max: number) => string;
    /**
     * Visual style variant mapped to semantic color tokens.
     * @default 'accent'
     */
    variant?: ProgressBarVariant;
    /**
     * When true, renders an animated indeterminate progress indicator.
     * Use when the progress amount is unknown (e.g. loading, processing).
     * The `value` and `hasValueLabel` props are ignored in this mode.
     * Respects `prefers-reduced-motion` by slowing the animation.
     * @default false
     */
    isIndeterminate?: boolean;
    /**
     * Target marks drawn on the track at fixed points in the same `0..max`
     * scale as `value` — e.g. a goal line. Marks stay visible whether progress
     * is below or past them, and take their color from what they sit on: a mark
     * inside the filled area uses the fill variant's on-color (on-accent,
     * on-warning, on-error, …), while a mark still out on the bare track uses
     * `--color-text-primary` (`--color-text-secondary` on a disabled bar, which
     * dims everything it draws). Each mark's required `label` names it for
     * assistive tech and is revealed via a `Tooltip` on hover/focus. Ignored when
     * `isIndeterminate` is true.
     */
    marks?: ReadonlyArray<ProgressBarMark>;
    /**
     * When true, the progress bar is visually disabled — the fill bar and
     * text use disabled colors. Use for canceled or inactive operations.
     * @default false
     */
    isDisabled?: boolean;
    /**
     * Test ID for testing utilities.
     */
    'data-testid'?: string;
}
/**
 * A progress bar for displaying determinate or indeterminate progress.
 *
 * In determinate mode, displays a known value within a range (upload progress,
 * disk usage, etc). In indeterminate mode, shows an animated loading indicator
 * for unknown progress.
 *
 * ProgressBar is intentionally minimal — compose additional labels, status
 * icons, and descriptions alongside the bar using layout components rather
 * than adding props to ProgressBar itself. The exception is on-track content
 * like `marks`, which are positioned by value over the track.
 *
 * Styles use Astryx theme tokens via StyleX.
 * Wrap your app in <Theme> to apply a theme.
 *
 * @example
 * ```
 * <ProgressBar value={75} label="Upload progress" />
 * <ProgressBar isIndeterminate label="Loading..." />
 * <ProgressBar value={3.2} max={5} label="Disk usage" hasValueLabel
 *   formatValueLabel={(v, m) => `${v} GB / ${m} GB`} />
 * <ProgressBar value={30} label="Canceled" isDisabled hasValueLabel />
 * <ProgressBar value={45} label="Fundraiser" marks={[{value: 80, label: 'Goal'}]} />
 * ```
 *
 * A mark's height, width, and color are directly themeable via the
 * `progressbar-mark` target. The target reflects `data-placement`
 * (`"fill"` when the mark sits inside the filled area, `"track"` when it is
 * still out on the bare track) and `data-variant` (the fill's variant), so a
 * theme can style the two cases separately — e.g. a taller "goal flag" tick
 * that overhangs the bar (centered, so the overhang is symmetric):
 *
 * @example
 * ```
 * defineTheme({
 *   name: 'campaign',
 *   components: {
 *     'progressbar-mark': {base: {height: '16px', backgroundColor: 'red'}},
 *   },
 * });
 * ```
 */
export declare function ProgressBar({ value, max, label, isLabelHidden, hasValueLabel, formatValueLabel, variant, isIndeterminate, isDisabled, marks, xstyle, className, style, 'data-testid': dataTestId, ref, ...rest }: ProgressBarProps): import("react").JSX.Element;
export declare namespace ProgressBar {
    var displayName: string;
}
//# sourceMappingURL=ProgressBar.d.ts.map