diff --git a/.changeset/small-nails-smile.md b/.changeset/small-nails-smile.md new file mode 100644 index 000000000..8960734fe --- /dev/null +++ b/.changeset/small-nails-smile.md @@ -0,0 +1,5 @@ +--- +"@vygruppen/spor-react": minor +--- + +Adds floating label variant on TextArea diff --git a/packages/spor-react/src/input/Textarea.tsx b/packages/spor-react/src/input/Textarea.tsx index 8cc6ead35..a4f5e4d50 100644 --- a/packages/spor-react/src/input/Textarea.tsx +++ b/packages/spor-react/src/input/Textarea.tsx @@ -5,16 +5,17 @@ import { Textarea as ChakraTextarea, TextareaProps as ChakraTextareaProps, useFormControlContext, + InputGroup, } from "@chakra-ui/react"; import React, { useId } from "react"; export type TextareaProps = Exclude & { - label: string; + label?: string; }; /** * Text area that works with the `FormControl` component. * - * Note that it requires you to pass a label. + * Providing a label is optional. * * ```tsx * @@ -30,11 +31,16 @@ export const Textarea = forwardRef((props, ref) => { const formControlProps = useFormControlContext(); const fallbackId = `textarea-${useId()}`; const inputId = props.id ?? formControlProps?.id ?? fallbackId; + return ( - - {label} - - + + + {label && ( + + {label} + + )} + ); }); diff --git a/packages/spor-react/src/theme/components/textarea.ts b/packages/spor-react/src/theme/components/textarea.ts index d2f7de169..2eaebcfca 100644 --- a/packages/spor-react/src/theme/components/textarea.ts +++ b/packages/spor-react/src/theme/components/textarea.ts @@ -5,9 +5,17 @@ const config = defineStyleConfig({ baseStyle: (props) => ({ ...Input.baseStyle!(props).field, minHeight: "5rem", - py: 3, verticalAlign: "top", appearance: "none", + paddingTop: 2, + "&:not(:placeholder-shown)": { + "&:has(+ label)": { + paddingTop: 4 + }, + "& + label": { + transform: "scale(0.825) translateY(-10px)", + }, + }, }), });