diff --git a/packages/react/src/components/Forms/Checkbox/index.stories.tsx b/packages/react/src/components/Forms/Checkbox/index.stories.tsx new file mode 100644 index 0000000..014bd1b --- /dev/null +++ b/packages/react/src/components/Forms/Checkbox/index.stories.tsx @@ -0,0 +1,25 @@ +import { ComponentMeta, ComponentStory } from "@storybook/react"; +import React from "react"; +import { Checkbox } from "components/Forms/Checkbox/index"; + +export default { + title: "Components/Forms (WIP)/Checkbox", + component: Checkbox, +} as ComponentMeta; + +const Template: ComponentStory = (args) => ( + +); + +export const Default = Template.bind({}); +Default.args = {}; + +export const Indeterminate = Template.bind({}); +Indeterminate.args = { + indeterminate: true, +}; + +export const Checked = Template.bind({}); +Checked.args = { + checked: true, +}; diff --git a/packages/react/src/components/Forms/Checkbox/index.tsx b/packages/react/src/components/Forms/Checkbox/index.tsx new file mode 100644 index 0000000..820c028 --- /dev/null +++ b/packages/react/src/components/Forms/Checkbox/index.tsx @@ -0,0 +1,17 @@ +import React, { HTMLProps, useEffect, useRef } from "react"; + +export const Checkbox = ({ + indeterminate, + className = "", + ...rest +}: { indeterminate?: boolean } & HTMLProps) => { + const ref = useRef(null!); + + useEffect(() => { + if (typeof indeterminate === "boolean") { + ref.current.indeterminate = !rest.checked && indeterminate; + } + }, [ref, indeterminate]); + + return ; +};