import * as React from 'react';
import * as SwitchPrimitives from '@radix-ui/react-switch';
import { type VariantProps } from 'class-variance-authority';
import type { FieldMode, FieldVariant } from '../../components/Field/field-types';
/**
 * Switch — 開關控件
 *
 * ── 結構 ──
 *   Track（pill 形容器）→ Thumb（白色圓 + 2px border + check icon）
 *   Track 寬 = 2 × 高，thumb 直徑 = track 高度
 *
 * ── 尺寸（sm = md）──
 *   sm/md: track 20×40, thumb 20, 白色圓 16, check 12（= checkbox sm/md）
 *   lg:    track 24×48, thumb 24, 白色圓 20, check 16（= checkbox lg）
 *
 * ── 視覺狀態 ──
 *   OFF: track border (neutral-5), thumb 白色 + 2px border-border(neutral-5,與 OFF track 同色)無 check
 *   ON:  track primary, thumb 白色 + 2px primary border + primary check icon
 *   disabled: opacity-disabled（整體透明度）
 *   readOnly: 視覺同一般態，但 pointer-events-none + aria-readonly
 *
 * ── label / description / readOnly ──
 * Switch 可以透過 `label` 和 `description` props 在元件內直接渲染緊鄰的文字，
 * 樣式全部 codify 在元件內（text-body、foreground/fg-secondary、disabled 色）。
 *
 * 單獨使用時：
 *   <Switch label="啟用通知" description="收到新訊息時提醒" />
 *
 * Form 內使用（在 <Field> context 內）：
 *   <Field>
 *     <FieldLabel>啟用通知</FieldLabel>
 *     <Switch />                      ← label/description prop 會被自動忽略
 *     <FieldDescription>收到新訊息時提醒</FieldDescription>
 *   </Field>
 *
 * Field context 透過 useFieldContext() 偵測，避免雙層 label。
 *
 * readOnly 模式：
 *   <Switch readOnly checked={true} label="..." />
 *   視覺維持 ON/OFF 正確狀態，但無法互動、不在 tab order 內、寫入 aria-readonly。
 *   與 disabled 的差異：readonly 不降色（可讀），disabled 降色（弱化）。
 */
declare const switchVariants: (props?: ({
    size?: "sm" | "md" | "lg" | null | undefined;
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
export interface SwitchProps extends React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>, VariantProps<typeof switchVariants> {
    /**
     * Inline label。提供時 Switch 自動包一個 <label> 並連結 htmlFor，
     * 套用 text-body / text-foreground / disabled 色 的 codified 樣式。
     * 在 <Field> context 內時此 prop 會被忽略（由 FieldLabel 接管）。
     */
    label?: React.ReactNode;
    /**
     * Inline description（secondary 文字）。須與 label 搭配使用，
     * 單獨設定 description 無效果。套用 text-body / text-fg-secondary 樣式。
     * 在 <Field> context 內時此 prop 會被忽略（由 FieldDescription 接管）。
     */
    description?: React.ReactNode;
    /**
     * readonly 模式：鎖定互動但維持 ON/OFF 視覺正確。
     * 與 disabled 的差異：readonly 不降色（可讀），disabled 降色（弱化）。
     * 用於表單 readonly 呈現、DataTable cell 非編輯態。
     */
    readOnly?: boolean;
    /**
     * Field mode(2026-05-05 Phase B3 align):
     *   edit     — 一般可互動 Switch(預設)
     *   display  — **純展示**:渲染 ✓ / —(無互動 primitive、無 input chrome);
     *              對齊 Carbon read-only / DataTable boolean cell。
     *              `readonly` 保留 toggle 視覺 + 鎖互動;`display` 完全無 toggle 形體 — 兩者語意分離(field-types.ts)。
     *   readonly — 同 readOnly prop
     *   disabled — 同 disabled prop
     */
    mode?: FieldMode;
    /**
     * Visual chrome — Switch 本體無 input wrapper variant,本 prop 對 Switch 主體無視覺影響;
     * 為對齊 Field 4-mode + chrome 透傳契約而保留(M19 一致性)。
     */
    variant?: FieldVariant;
}
declare const Switch: React.ForwardRefExoticComponent<SwitchProps & React.RefAttributes<HTMLButtonElement>>;
export declare const switchMeta: {
    readonly component: "Switch";
    readonly family: null;
    readonly variants: {};
    readonly sizes: {
        readonly sm: {
            readonly fieldHeight: 28;
            readonly iconSize: 16;
            readonly typography: "body";
        };
        readonly md: {
            readonly fieldHeight: 32;
            readonly iconSize: 16;
            readonly typography: "body";
        };
        readonly lg: {
            readonly fieldHeight: 40;
            readonly iconSize: 20;
            readonly typography: "body";
        };
    };
    readonly states: readonly ["default", "hover", "active", "focus-visible", "disabled"];
    readonly tokens: {
        readonly bg: readonly ["bg-primary"];
        readonly fg: readonly ["text-fg-disabled", "text-fg-secondary", "text-foreground", "text-primary"];
        readonly ring: readonly ["ring-ring"];
    };
    readonly defaultSize: "md";
};
export { Switch, switchVariants };
//# sourceMappingURL=switch.d.ts.map