"use client"; import * as React from "react"; import { cn } from "../../lib/utils"; // Define button style variants const toggleVariants = { variant: { default: "bg-transparent", outline: "border bg-transparent hover:bg-accent hover:text-accent-foreground", }, size: { default: "h-10 px-3", sm: "h-9 px-2.5", lg: "h-11 px-5", }, }; export interface ToggleProps extends React.ButtonHTMLAttributes { variant?: keyof typeof toggleVariants.variant; size?: keyof typeof toggleVariants.size; pressed?: boolean; defaultPressed?: boolean; // Add defaultPressed prop onPressedChange?: (pressed: boolean) => void; } const Toggle = React.forwardRef( ({ className, variant = "default", size = "default", children, pressed, defaultPressed = false, // Add default value onPressedChange, ...props }, ref) => { // Use internal state if uncontrolled const [isPressed, setIsPressed] = React.useState(defaultPressed); // Determine if we're in controlled or uncontrolled mode const isControlled = pressed !== undefined; const dataState = isControlled ? pressed : isPressed; const handleClick = (event: React.MouseEvent) => { // Don't update internal state if controlled if (!isControlled) { setIsPressed(!isPressed); } // Call the change handler if provided onPressedChange?.(!dataState); // Call the original onClick handler if it exists props.onClick?.(event); }; return ( ); } ); Toggle.displayName = "Toggle"; export { Toggle, toggleVariants };