'use client'; import { motion } from 'framer-motion'; import { cn } from '@/lib/utils'; import { useEffect, useState } from 'react'; import { RabbitIcon, VenetianMaskIcon } from 'lucide-react'; import { useBrickStore } from '@/components/bricks/state/brick-state'; import * as React from 'react'; import * as SwitchPrimitives from '@radix-ui/react-switch'; interface SwitchProps extends React.ComponentPropsWithoutRef { size?: 'sm' | 'default' | 'lg'; } const Switch = React.forwardRef< React.ElementRef, SwitchProps >(({ className, ...props }, ref) => { let containerSizeClasses = ''; let thumbSizeClasses = ''; switch (props.size) { case 'sm': containerSizeClasses = 'h-[16px] w-[28px]'; thumbSizeClasses = 'h-3 w-3 data-[state=checked]:translate-x-3'; break; case 'lg': containerSizeClasses = 'h-[32px] w-[60px]'; thumbSizeClasses = 'h-7 w-7 data-[state=checked]:translate-x-7'; break; case 'default': default: containerSizeClasses = 'h-[24px] w-[44px]'; thumbSizeClasses = 'h-5 w-5 data-[state=checked]:translate-x-5'; break; } return ( {props.children} ); }); Switch.displayName = SwitchPrimitives.Root.displayName; export const ThiefModeToggle = ({ className = '' }: { className?: string }) => { const copyMode = useBrickStore((state) => state.copyModeEnabled); const toggleCopyMode = useBrickStore((state) => state.toggleCopyMode); const [isClient, setIsClient] = useState(false); const copyModeOnClient = isClient && copyMode; useEffect(() => { setIsClient(true); }, []); const animation = { initial: { opacity: 0, translateY: 10 }, animate: { opacity: 1, translateY: 0 }, transition: { duration: 0.3, ease: 'easeInOut', }, exit: { opacity: 0, translateY: -10 }, }; const reverseAnimation = { initial: { opacity: 0, translateY: -10 }, animate: { opacity: 1, translateY: 0 }, transition: { duration: 0.3, ease: 'easeInOut', }, exit: { opacity: 0, translateY: 10 }, }; return (
toggleCopyMode()} className="data-[state=checked]:bg-purple-700/80 data-[state=unchecked]:bg-yellow-300/80 dark:data-[state=checked]:bg-purple-700/80 dark:data-[state=unchecked]:bg-yellow-300/80" > {!copyModeOnClient ? ( ) : ( )}
); };