import React from "react"; import {Meta} from "@storybook/react"; import {toggle} from "@heroui/theme"; import {VisuallyHidden} from "@react-aria/visually-hidden"; import {SunFilledIcon, MoonFilledIcon} from "@heroui/shared-icons"; import {clsx} from "@heroui/shared-utils"; import {button} from "@heroui/theme"; import {useForm} from "react-hook-form"; import {Switch, SwitchProps, SwitchThumbIconProps, useSwitch} from "../src"; export default { title: "Components/Switch", component: Switch, argTypes: { color: { control: { type: "select", }, options: ["default", "primary", "secondary", "success", "warning", "danger"], }, size: { control: { type: "select", }, options: ["sm", "md", "lg"], }, isDisabled: { control: { type: "boolean", }, }, disableAnimation: { control: { type: "boolean", }, }, }, } as Meta; const defaultProps = { ...toggle.defaultVariants, }; const WithIconsTemplate = (args: SwitchProps) => { const [isSelected, setIsSelected] = React.useState(true); return (
} isSelected={isSelected} startContent={} onValueChange={setIsSelected} />

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

); }; const ControlledTemplate = (args: SwitchProps) => { const [isSelected, setIsSelected] = React.useState(true); return (

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

); }; const CustomWithClassNamesTemplate = (args: SwitchProps) => { const [isSelected, setIsSelected] = React.useState(true); return (

Enable early access

Get access to new features before they are released.

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

); }; const CustomWithHooksTemplate = (args: SwitchProps) => { const {Component, slots, isSelected, getBaseProps, getInputProps, getWrapperProps} = useSwitch(args); return (
{isSelected ? : }

Lights: {isSelected ? "on" : "off"}

); }; const WithReactHookFormTemplate = (args: SwitchProps) => { const { register, formState: {errors}, handleSubmit, } = useForm({ defaultValues: { defaultTrue: true, defaultFalse: false, requiredField: false, }, }); const onSubmit = (data: any) => { // eslint-disable-next-line no-console console.log(data); alert("Submitted value: " + JSON.stringify(data)); }; return (
By default this switch is true By default this switch is false This switch is required {errors.requiredField && This switch is required}
); }; export const Default = { args: { ...defaultProps, }, }; export const IsReadOnly = { args: { ...defaultProps, isReadOnly: true, defaultSelected: true, }, }; export const WithLabel = { args: { ...defaultProps, children: "Bluetooth", }, }; export const DisableAnimation = { args: { ...defaultProps, disableAnimation: true, }, }; export const WithThumbIcon = { args: { ...defaultProps, size: "xl", thumbIcon: (props: SwitchThumbIconProps) => props.isSelected ? ( ) : ( ), }, }; export const WithIcons = { render: WithIconsTemplate, args: { ...defaultProps, size: "xl", }, }; export const WithReactHookForm = { render: WithReactHookFormTemplate, args: { ...defaultProps, }, }; export const Controlled = { render: ControlledTemplate, args: { ...defaultProps, }, }; export const CustomWithClassNames = { render: CustomWithClassNamesTemplate, args: { ...defaultProps, }, }; export const CustomWithHooks = { render: CustomWithHooksTemplate, args: { ...defaultProps, }, };