import { type ReactNode } from "react";
import { type ColorTokens, type StyleProp, type ViewStyle, type TextStyle } from "../../style/index.js";
export interface CheckboxProps {
/** Label text (the option's title) shown beside the box. */
children?: ReactNode;
/**
* Optional muted secondary line rendered under the label, for the common
* title-plus-description option (a notification setting, a consent row).
* Supplying it builds the stacked title/description layout inside the control,
* so the caller never hand-composes a Row + Column + two Typography nodes and
* the whole row stays tappable.
*/
description?: ReactNode;
/** Controlled checked state; omit for uncontrolled use. */
checked?: boolean;
/** Initial state for uncontrolled use (a bare is interactive). */
defaultChecked?: boolean;
/**
* Mixed state: some-but-not-all selected. Shown as a dash, not a tick.
* Takes visual precedence over `checked`.
*/
indeterminate?: boolean;
/** Fired with the next checked value when the row is pressed (both modes). */
onChange?: (next: boolean) => void;
/** Alias of onChange, for parity with RN's value-style callbacks. */
onValueChange?: (next: boolean) => void;
/**
* Accessible name for a LABEL-LESS checkbox (one with no `children`, e.g. a
* row selector in a table). With a visible label the label itself is the name;
* without one this is what a screen reader announces.
*/
accessibilityLabel?: string;
/** E2E hook forwarded to the pressable row. */
testID?: string;
small?: boolean;
large?: boolean;
disabled?: boolean;
/** Outer layout composition only (width/flex within a parent), never a restyle hook. */
style?: StyleProp;
}
export type Size = "small" | "base" | "large";
export interface CheckboxSkin {
/** The square box. `filled` = checked or indeterminate. `nudge` aligns the box to a label's first line. */
box: (tokens: ColorTokens, filled: boolean, size: Size, nudge: boolean) => ViewStyle;
/** The check / dash glyph inside a filled box. */
glyph: (tokens: ColorTokens, size: Size) => TextStyle;
/** The label text to the right of the box. */
label: (tokens: ColorTokens, size: Size) => TextStyle;
/** The muted secondary description line, rendered under the label when present. */
description: (tokens: ColorTokens, size: Size) => TextStyle;
/** Opacity applied to the row when disabled. */
disabledOpacity: number;
/** iOS/web dim the row on press; Android uses a ripple instead (null). */
pressedOpacity: number | null;
/** Android ripple over the box; null on iOS/web. */
ripple: ((tokens: ColorTokens) => {
color: string;
borderless: boolean;
radius?: number;
}) | null;
}
/** Build a Checkbox component from a platform skin. */
export declare function createCheckbox(skin: CheckboxSkin): (props: CheckboxProps) => import("react").JSX.Element;
//# sourceMappingURL=checkbox.shared.d.ts.map