import React, { useId } from 'react' import classnames from 'classnames' import { FieldGroup } from '~components/FieldGroup' import { FieldMessage } from '~components/FieldMessage' import { Label } from '~components/Label' import { TextArea, type TextAreaProps } from '~components/TextArea' import styles from './TextAreaField.module.scss' export type TextAreaFieldProps = { labelText: string | React.ReactNode inline?: boolean validationMessage?: string | React.ReactNode description?: string | React.ReactNode variant?: 'default' | 'prominent' } & TextAreaProps /** * {@link https://cultureamp.atlassian.net/wiki/spaces/DesignSystem/pages/3081895966/Text+Area+Field Guidance} | * {@link https://cultureamp.design/?path=/docs/components-text-area-field--docs Storybook} */ export const TextAreaField = ({ labelText, inline = false, validationMessage, description, variant = 'default', id: propsId, reversed = false, status = 'default', disabled, ...restProps }: TextAreaFieldProps): JSX.Element => { const fallbackId = useId() const id = propsId ?? fallbackId const validationMessageAria = validationMessage ? `${id}-field-validation-message` : '' const descriptionAria = description ? `${id}-field-message` : '' const ariaDescribedBy = [validationMessageAria, descriptionAria].reduce( (prev, curr) => (curr ? [curr, prev].join(' ') : prev), '', ) const renderDescriptionOnTop = variant === 'prominent' const renderDescription = (position: 'top' | 'bottom'): JSX.Element | null => { if (!description) return null return (
) } return (
{renderDescriptionOnTop && renderDescription('top')}