/**
 * @file CheckboxInput.tsx
 * @input Uses React, useId, ChangeEvent, FieldLabel, FieldStatus, IconType, InputStatus, useTooltip
 * @output Exports CheckboxInput component, CheckboxInputProps
 * @position Core implementation; consumed by index.ts, tested by CheckboxInput.test.tsx
 *
 * SYNC: When modified, update these files to stay in sync:
 * - /packages/core/src/CheckboxInput/CheckboxInput.doc.mjs (props table, features, implementation notes)
 * - /packages/core/src/CheckboxInput/CheckboxInput.test.tsx (tests for new/changed behavior)
 * - /packages/core/src/CheckboxInput/index.ts (exports if types change)
 * - /apps/storybook/stories/CheckboxInput.stories.tsx (storybook stories)
 * - /packages/cli/assets/templates/blocks/components/CheckboxInput/ (showcase blocks)
 */
import { type ChangeEvent, type FocusEvent, type ReactNode } from 'react';
import * as stylex from '@stylexjs/stylex';
import type { BaseProps } from '../BaseProps';
import type { SizeValue } from '../utils/types';
import type { IconType } from '../Icon';
import type { InputStatus } from '../Field/types';
declare const wrapperSizeStyles: Readonly<{
    readonly sm: Readonly<{
        readonly width: stylex.StyleXClassNameFor<"width", 20>;
        readonly height: stylex.StyleXClassNameFor<"height", 20>;
    }>;
    readonly md: Readonly<{
        readonly width: stylex.StyleXClassNameFor<"width", 24>;
        readonly height: stylex.StyleXClassNameFor<"height", 24>;
    }>;
}>;
export type CheckboxInputSize = keyof typeof wrapperSizeStyles;
export interface CheckboxInputProps extends Omit<BaseProps, 'onChange'> {
    /** Ref forwarded to the underlying `<input>` element */
    ref?: React.Ref<HTMLInputElement>;
    /**
     * Label text for the checkbox (always rendered for accessibility).
     */
    label: string;
    /**
     * Whether to visually hide the label (still accessible to screen readers).
     * @default false
     */
    isLabelHidden?: boolean;
    /**
     * Description text displayed below the label.
     */
    description?: string;
    /**
     * Callback fired when the checkbox state changes.
     */
    onChange?: (checked: boolean, e: ChangeEvent<HTMLInputElement>) => void;
    /**
     * Async action on change. Fires after onChange if not prevented.
     */
    changeAction?: (checked: boolean, e: ChangeEvent<HTMLInputElement>) => void | Promise<void>;
    /**
     * Whether the checkbox is in a loading state.
     * @default false
     */
    isLoading?: boolean;
    /**
     * Whether the checkbox is checked, unchecked, or indeterminate.
     */
    value: boolean | 'indeterminate';
    /**
     * Whether the checkbox is disabled.
     * @default false
     */
    isDisabled?: boolean;
    /**
     * The HTML name attribute for the underlying checkbox input.
     * Useful for form submissions.
     */
    htmlName?: string;
    /**
     * Explains why the checkbox is disabled. When set together with
     * `isDisabled`, the checkbox shows a tooltip with this text on hover and
     * keyboard focus, and the control stays focusable (via `aria-disabled`) so
     * the reason is discoverable by keyboard and assistive technology.
     * Activation stays blocked.
     *
     * Use this instead of wrapping a disabled checkbox in `Tooltip` — disabled
     * controls don't emit the pointer events an external tooltip needs.
     *
     * @example
     * ```
     * <CheckboxInput
     *   label="Accept terms"
     *   value={accepted}
     *   isDisabled
     *   disabledMessage="Terms are managed by your administrator"
     * />
     * ```
     */
    disabledMessage?: string;
    /**
     * Whether the checkbox is read-only.
     * Displays the current state at full opacity but prevents interaction.
     * Unlike `isDisabled`, read-only checkboxes are not visually dimmed.
     * @default false
     */
    isReadOnly?: boolean;
    /**
     * Whether the field is optional. Mutually exclusive with isRequired.
     * @default false
     */
    isOptional?: boolean;
    /**
     * Whether the checkbox is required. Mutually exclusive with isOptional.
     * @default false
     */
    isRequired?: boolean;
    /**
     * Width of the field. Numbers are treated as pixels, strings are used as-is
     * (e.g. `'100%'`). Sizes the whole field (label, control, and status) so they
     * stay aligned, unlike setting width via `xstyle`/`className`/`style`.
     */
    width?: SizeValue;
    /**
     * The size of the checkbox.
     * - 'sm': Compact size (28px row height)
     * - 'md': Default size (36px row height)
     * @default 'md'
     */
    size?: CheckboxInputSize;
    /**
     * Callback fired when the checkbox receives focus.
     */
    onFocus?: (e: FocusEvent<HTMLInputElement>) => void;
    /**
     * Callback fired when the checkbox loses focus.
     */
    onBlur?: (e: FocusEvent<HTMLInputElement>) => void;
    /**
     * Icon to display before the label text.
     */
    labelIcon?: ReactNode | IconType;
    /**
     * Status indicator for the checkbox.
     * When set with a message, displays a colored message box below the checkbox.
     */
    status?: InputStatus;
}
/**
 * A checkbox input component for toggling boolean values.
 *
 * @example
 * ```
 * <CheckboxInput
 *   label="Accept terms"
 *   value={accepted}
 *   onChange={setAccepted}
 * />
 * <CheckboxInput
 *   label="Subscribe"
 *   description="Receive weekly updates"
 *   value={subscribed}
 *   onChange={setSubscribed}
 * />
 * ```
 */
export declare function CheckboxInput({ label, isLabelHidden, description, onChange, changeAction, isLoading, value, isDisabled, htmlName, disabledMessage, isReadOnly, isOptional, isRequired, size, onFocus, onBlur, labelIcon, status, width, xstyle, className, style, ref, ...rest }: CheckboxInputProps): import("react").JSX.Element;
export declare namespace CheckboxInput {
    var displayName: string;
}
export {};
//# sourceMappingURL=CheckboxInput.d.ts.map