import React from "react"; import {ComponentStory, ComponentMeta} from "@storybook/react"; import {checkbox, colors} from "@nextui-org/theme"; import {CheckIcon, CloseIcon} from "@nextui-org/shared-icons"; import {User} from "@nextui-org/user"; import {Link} from "@nextui-org/link"; import {Chip, ChipProps} from "@nextui-org/chip"; import {clsx} from "@nextui-org/shared-utils"; import {VisuallyHidden} from "@react-aria/visually-hidden"; import { Checkbox, CheckboxIconProps, CheckboxProps, useCheckbox, useCheckboxGroupContext, } from "../src"; export default { title: "Components/Checkbox", component: Checkbox, argTypes: { color: { control: { type: "select", options: ["neutral", "primary", "secondary", "success", "warning", "danger"], }, }, radius: { control: { type: "select", options: ["none", "base", "sm", "md", "lg", "xl", "full"], }, }, size: { control: { type: "select", options: ["xs", "sm", "md", "lg", "xl"], }, }, lineThrough: { control: { type: "boolean", }, }, isDisabled: { control: { type: "boolean", }, }, }, } as ComponentMeta; const defaultProps: CheckboxProps = { ...checkbox.defaultVariants, children: "Option", }; const Template: ComponentStory = (args: CheckboxProps) => ; const ControlledTemplate: ComponentStory = (args: CheckboxProps) => { const [selected, setSelected] = React.useState(true); React.useEffect(() => { // eslint-disable-next-line no-console console.log("Checkbox ", selected); }, [selected]); return (
Subscribe (controlled)

Selected: {selected ? "true" : "false"}

); }; export const Default = Template.bind({}); Default.args = { ...defaultProps, }; export const IsDisabled = Template.bind({}); IsDisabled.args = { ...defaultProps, isDisabled: true, }; export const DefaultSelected = Template.bind({}); DefaultSelected.args = { ...defaultProps, defaultSelected: true, }; export const CustomIconNode = Template.bind({}); CustomIconNode.args = { ...defaultProps, icon: , }; export const CustomIconFunction = Template.bind({}); CustomIconFunction.args = { ...defaultProps, // eslint-disable-next-line react/display-name icon: (props: CheckboxIconProps) => , }; export const AlwaysSelected = Template.bind({}); AlwaysSelected.args = { ...defaultProps, isSelected: true, }; export const IsIndeterminate = Template.bind({}); IsIndeterminate.args = { ...defaultProps, isIndeterminate: true, }; export const LineThrough = Template.bind({}); LineThrough.args = { ...defaultProps, lineThrough: true, }; export const DisableAnimation = Template.bind({}); DisableAnimation.args = { ...defaultProps, disableAnimation: true, }; export const Controlled = ControlledTemplate.bind({}); Controlled.args = { ...defaultProps, }; interface CustomCheckboxProps extends CheckboxProps { userName?: string; userProfile?: { username?: string; avatar?: string; url?: string; }; userRole?: string; status?: string; statusColor?: ChipProps["color"]; } export const CustomWithStyles = (props: CustomCheckboxProps) => { const { value, userName = "Junior Garcia", userProfile = { avatar: "https://avatars.githubusercontent.com/u/30373425?v=4", username: "jrgarciadev", url: "https://twitter.com/jrgarciadev", }, userRole = "Software Developer", status = "Active", statusColor = "secondary", ...otherProps } = props; const groupContext = useCheckboxGroupContext(); const isInGroup = !!groupContext; const [isSelected, setIsSelected] = React.useState(false); const checkboxProps = !isInGroup ? { isSelected, onValueChange: setIsSelected, } : {}; const isChecked = isInGroup && value ? groupContext?.groupState.isSelected(value) : isSelected; return (
@{userProfile.username} } name={userName} />
{userRole} {status}
); }; export const CustomWithHooks = (props: CheckboxProps) => { const { children, isSelected, isFocusVisible, getBaseProps, getLabelProps, getInputProps, } = useCheckbox({ "aria-label": props["aria-label"] || "Toggle status", ...props, }); return ( ); };