mirror of
https://github.com/infinilabs/coco-app.git
synced 2025-12-23 14:59:24 +01:00
* chore: shadcn config * feat: add shadcn ui config * style: adjust styles * style: adjust styles * refactor: update style * style: adjust styles * style: adjust styles * style: adjust styles * style: adjust styles * refactor: update * refactor: update * refactor: update * refactor: update * style: adjust styles * style: adjust styles * refactor: update * refactor: update * refactor: update * refactor: update * refactor: update * refactor: update * style: web styles * refactor: update * style: web styles * style: web styles * refactor: update * refactor: update * refactor: update * chhore: add * chore: add * refactor: update * refactor: update * refactor: update * refactor: update * chore: update * refactor: update * refactor: update * refactor: update * refactor: update * refactor: update * refactor: update * chore: rename * refactor: update * refactor: update * chore: add * refactor: update * chore: update * chroe: up * refactor: update * refactor: update * chore: up * refactor: update * chore: up * feat: support for extracting css variables * chore: update * fix: fixed dark mode * refactor: update * refactor: update * refactor: update * refactor: update * docs: update release notes * style: adjust styles * style: adjust styles * refactor: update * refactor: update * refactor: update * refactor: update * refactor: update * refactor: update --------- Co-authored-by: ayang <473033518@qq.com>
37 lines
1.2 KiB
TypeScript
37 lines
1.2 KiB
TypeScript
import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
|
|
import type { ComponentProps } from "react";
|
|
import clsx from "clsx";
|
|
import { CheckIcon } from "lucide-react";
|
|
|
|
interface CheckboxProps
|
|
extends Omit<ComponentProps<typeof CheckboxPrimitive.Root>, "onCheckedChange" | "onChange"> {
|
|
indeterminate?: boolean;
|
|
onChange?: (checked: boolean) => void;
|
|
}
|
|
|
|
const Checkbox = (props: CheckboxProps) => {
|
|
const { indeterminate, className, onChange, checked, ...rest } = props;
|
|
|
|
return (
|
|
<CheckboxPrimitive.Root
|
|
{...rest}
|
|
checked={checked}
|
|
onCheckedChange={(v) => onChange?.(v === true)}
|
|
className={clsx(
|
|
"group h-4 w-4 rounded-sm border border-black/30 dark:border-white/30 data-[state=checked]:bg-[#2F54EB] data-[state=checked]:border-[#2F54EB] transition cursor-pointer inline-flex items-center justify-center",
|
|
className
|
|
)}
|
|
>
|
|
{indeterminate && (
|
|
<div className="h-full w-full flex items-center justify-center group-data-[state=checked]:hidden">
|
|
<div className="h-2 w-2 bg-[#2F54EB]"></div>
|
|
</div>
|
|
)}
|
|
|
|
<CheckIcon className="hidden h-[14px] w-[14px] text-white group-data-[state=checked]:block" />
|
|
</CheckboxPrimitive.Root>
|
|
);
|
|
};
|
|
|
|
export default Checkbox;
|