nextui/apps/docs/content/components/checkbox/custom-implementation.ts

86 lines
1.8 KiB
TypeScript

const CheckIcon = `export const CheckIcon = (props) =>
(
<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>
);`;
const App = `import { useCheckbox, Chip, VisuallyHidden, tv } from "@nextui-org/react";
import { CheckIcon } from './CheckIcon.jsx'
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-none ring-2 !ring-primary ring-offset-2 ring-offset-background dark:ring-offset-background-dark",
}
}
}
})
export default function App() {
const {
children,
isSelected,
isFocusVisible,
getBaseProps,
getLabelProps,
getInputProps,
} = useCheckbox({
defaultSelected: true,
})
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>
);
}`;
const react = {
"/App.jsx": App,
"./CheckIcon.jsx": CheckIcon,
};
export default {
...react,
};