nextui/apps/docs/content/components/checkbox/custom-implementation.raw.jsx
WK 8ddc6e795e
fix(theme): use outline-hidden which is equivalent to outline-none (#5486)
* fix: use `outline-hidden` which is equivalent to `outline-none` in v3

* chore: add changeset
2025-07-15 15:54:58 -03:00

71 lines
1.7 KiB
JavaScript

import {useCheckbox, Chip, VisuallyHidden, tv} from "@heroui/react";
export const CheckIcon = (props) => {
return (
<svg
aria-hidden="true"
fill="none"
focusable="false"
height="1em"
stroke="currentColor"
strokeLinecap="round"
strokeLinejoin="round"
strokeWidth={2}
viewBox="0 0 24 24"
width="1em"
{...props}
>
<polyline points="20 6 9 17 4 12" />
</svg>
);
};
export default function App() {
const {children, isSelected, isFocusVisible, getBaseProps, getLabelProps, getInputProps} =
useCheckbox({
defaultSelected: true,
});
const checkbox = tv({
slots: {
base: "border-default hover:bg-default-200",
content: "text-default-500",
},
variants: {
isSelected: {
true: {
base: "border-primary bg-primary hover:bg-primary-500 hover:border-primary-500",
content: "text-primary-foreground pl-1",
},
},
isFocusVisible: {
true: {
base: "outline-hidden ring-2 ring-focus ring-offset-2 ring-offset-background",
},
},
},
});
const styles = checkbox({isSelected, isFocusVisible});
return (
<label {...getBaseProps()}>
<VisuallyHidden>
<input {...getInputProps()} />
</VisuallyHidden>
<Chip
classNames={{
base: styles.base(),
content: styles.content(),
}}
color="primary"
startContent={isSelected ? <CheckIcon className="ml-1" /> : null}
variant="faded"
{...getLabelProps()}
>
{children ? children : isSelected ? "Enabled" : "Disabled"}
</Chip>
</label>
);
}