import { type ReactElement, type ReactNode } from "react";
import { Animated } from "react-native";
import { type ColorTokens, type TextStyle } from "../../style/index.js";
export interface SpinnerProps {
/**
* Optional label rendered beside (or below) the indicator in the spinner's
* canonical muted small type. Supplying it turns the bare indicator into a
* component-owned loading pairing, so the caller never hand-composes a
* Row/Column + Typography beside a . A bare (no
* children) is unchanged.
*/
children?: ReactNode;
/**
* Optional muted secondary line rendered under the label (a progress hint,
* an ETA). Stacks under the label inside the control.
*/
description?: ReactNode;
/**
* Layout axis for the label. Omitted/false: the label sits BESIDE the
* indicator in a snug row (the inline pairing). `stacked`: the indicator sits
* over a centered label column (the panel / section-loader form).
*/
stacked?: boolean;
small?: boolean;
large?: boolean;
primary?: boolean;
muted?: boolean;
foreground?: boolean;
/**
* Accessible description of what is loading. When absent, a string label
* (children) becomes the accessible name; when neither is present it defaults
* to "Loading".
*/
accessibilityLabel?: string;
/** E2E hook forwarded to the root element. */
testID?: string;
}
export interface SpinnerSkin {
render: (args: {
size: number;
color: string;
rotate: Animated.Value;
tokens: ColorTokens;
}) => ReactElement;
/** The label text beside/below the indicator, in the canonical muted small type. */
label: (tokens: ColorTokens) => TextStyle;
/** The muted secondary description line rendered under the label when present. */
description: (tokens: ColorTokens) => TextStyle;
/**
* Whether this skin consumes the shared rotation value. When `false`, the
* shell skips starting the perpetual rotation loop (e.g. the web
* ActivityIndicator animates itself and never reads `rotate`, so driving an
* Animated.Value for it would be a wasted, never-stopping per-instance timer).
* Defaults to `true`.
*/
spins?: boolean;
}
/** Build a Spinner component from a platform skin. */
export declare function createSpinner(skin: SpinnerSkin): (props: SpinnerProps) => import("react").JSX.Element;
//# sourceMappingURL=spinner.shared.d.ts.map