mirror of
https://github.com/Zagrios/bs-manager.git
synced 2026-07-03 14:08:25 +02:00
31 lines
1.5 KiB
TypeScript
31 lines
1.5 KiB
TypeScript
import { BsmIcon } from "../svgs/bsm-icon.component"
|
|
import { useThemeColor } from "renderer/hooks/use-theme-color.hook";
|
|
import { getCorrectTextColor } from "renderer/helpers/correct-text-color"
|
|
import { GlowEffect } from "./glow-effect.component";
|
|
import { motion } from "framer-motion";
|
|
import { useState } from "react";
|
|
|
|
type Props = {className?:string, checked?: boolean, onChange?: (val: boolean) => void, disabled?: boolean}
|
|
|
|
export function BsmCheckbox({className, checked, onChange, disabled} : Props) {
|
|
|
|
const [hovered, setHovered] = useState(false);
|
|
const checkedColor = useThemeColor("first-color");
|
|
const iconColor = getCorrectTextColor(checkedColor);
|
|
|
|
const handleClick = () => {
|
|
if(disabled){ return; }
|
|
onChange && onChange(!checked);
|
|
}
|
|
|
|
return (
|
|
<motion.div className={`${className} group-one`} onHoverStart={() => setHovered(true)} onHoverEnd={() => setHovered(false)}>
|
|
<GlowEffect visible={!disabled && hovered} className="!w-[calc(100%+6px)] !h-[calc(100%+6px)] !-top-[3px] !-left-[3px]"/>
|
|
|
|
<span className={`w-full h-full flex items-center justify-center rounded-md border-2 border-current overflow-hidden bg-light-main-color-3 dark:bg-main-color-1 ${disabled ? "opacity-30 cursor-not-allowed" : "cursor-pointer"}`} onClickCapture={e => {e.stopPropagation(); handleClick()}}>
|
|
<BsmIcon className="w-full h-full" icon="check" style={{color: iconColor, backgroundColor: checkedColor, visibility: checked ? "visible" : "hidden"}}/>
|
|
</span>
|
|
</motion.div>
|
|
)
|
|
}
|