"use client"; import {mergeProps} from "@base-ui/react/merge-props"; import {Toggle as BaseToggle} from "@base-ui/react/toggle"; import {useRender} from "@base-ui/react/use-render"; import * as React from "react"; import {cn} from "@/lib/utilities"; import styles from "./toggle.module.css"; export type ToggleVariant = "default" | "outline"; export type ToggleSize = "default" | "sm" | "lg"; export interface ToggleVariantOptions { /** * Controls the rendered visual variant. * @default "default" */ variant?: ToggleVariant; /** * Controls the rendered size variant. * @default "default" */ size?: ToggleSize; /** * Applies additional CSS classes to the component root element. * @default undefined */ className?: string; } /** Returns the CSS module classes used by the toggle wrapper. */ export function toggleVariants({variant = "default", size = "default", className}: Readonly = {}): string { const variantClass = variant === "outline" ? styles.outline : styles.default; const sizeClass = size === "sm" ? styles.sizeSm : size === "lg" ? styles.sizeLg : styles.sizeDefault; return cn(styles.root, variantClass, sizeClass, className); } export interface ToggleProps extends Omit, "className"> { /** * Applies additional CSS classes to the component root element. * @default undefined */ className?: string; /** * Controls the rendered visual variant. * @default "default" */ variant?: ToggleVariant; /** * Controls the rendered size variant. * @default "default" */ size?: ToggleSize; } /** * Renders the toggle control. * * @remarks * - Renders a `