import React from "react"; import { motion, HTMLMotionProps, Transition, AnimatePresence } from "framer-motion"; import { cn } from "@root/lib/utils"; import { Power } from "lucide-react"; export interface PowerButtonProps extends HTMLMotionProps<"button"> { checked?: boolean; loading?: boolean; } export const PowerButton = React.forwardRef( ({ className, checked = false, loading = false, ...props }, ref) => { const state = checked ? "on" : "off"; // Единые, мягкие настройки для всех пружинных анимаций const sharedSpring: Transition = { type: "spring", stiffness: 100, damping: 30, mass: 1, }; const glowColors = { on: "rgba(74, 222, 128, 0.6)", off: "rgba(239, 68, 68, 0.4)", }; const shadows = { on: "0px 0px 50px rgba(34, 197, 94, 1)", off: "0px 0px 30px rgba(239, 68, 68, 0.6)", disabled: "none", }; const textColors = { on: "rgb(255, 255, 255)", off: "rgb(239, 68, 68)", disabled: "rgb(100, 116, 139)", }; const isDisabled = props.disabled && !loading; const currentShadow = isDisabled ? shadows.disabled : checked ? shadows.on : shadows.off; const currentColor = isDisabled ? textColors.disabled : checked ? textColors.on : textColors.off; return (
{loading && (
)}
); } );