Files
MattrixwvReactComponents/lib/component/input/checkbox/MattrixwvCheckbox.tsx
2026-02-11 22:18:32 -05:00

89 lines
1.6 KiB
TypeScript

import type { CheckboxProps } from "$/types/InputTypes";
import { Checkbox } from "@headlessui/react";
import clsx from "clsx";
import { forwardRef } from "react";
const MattrixwvCheckbox = forwardRef<HTMLInputElement, CheckboxProps>(({
id,
className,
labelClassName,
name,
size = "sm",
showBox = true,
onChange,
checked,
defaultChecked,
strokeWidth = 2,
value,
disabled,
ariaLabel,
children
}, ref ) => {
return (
<Checkbox
id={id}
className={clsx(
"group",
"flex flex-row items-center justify-start gap-x-2",
{
"cursor-pointer": !disabled,
"cursor-not-allowed": disabled
}
)}
name={name}
checked={checked}
defaultChecked={defaultChecked}
onChange={onChange}
value={value}
disabled={disabled}
aria-label={ariaLabel}
ref={ref}
>
{/* Checkbox */}
<div
className={clsx(
className,
{
"border rounded": showBox
},
{
"": size === "none",
"size-3": size === "xs",
"size-4": size === "sm",
"size-5": size === "md",
"size-6": size === "lg",
"size-7": size === "xl"
}
)}
>
<svg
viewBox="0 0 14 14"
fill="none"
aria-hidden="true"
>
<path
d="M3 8L6 11L11 3.5"
strokeWidth={strokeWidth}
strokeLinecap="round"
strokeLinejoin="round"
/>
</svg>
</div>
{/* Label */}
{
children &&
<div
className={labelClassName}
>
{children}
</div>
}
</Checkbox>
);
});
MattrixwvCheckbox.displayName = "MattrixwvCheckbox";
export default MattrixwvCheckbox;