AIFT Design
Components

TextArea

여러 줄 텍스트 입력 컴포넌트

여러 줄 텍스트 입력 컴포넌트는 긴 텍스트를 입력받는 폼 요소입니다.

기본 사용법

import { TextField, TextFieldTextarea } from '@aift/ui/TextField';export default function Preview() {  return (    <div className="max-w-md space-y-4">      <TextField>        <TextFieldTextarea          placeholder="내용을 입력해주세요."          rows={4}          autoFocus        />      </TextField>    </div>  );}

Label

TextArea에 레이블을 추가할 수 있습니다.

'use client';import { TextField, TextFieldTextarea } from '@aift/ui/TextField';export default function Label() {  return (    <div className="max-w-md space-y-4">      <TextField label="레이블">        <TextFieldTextarea placeholder="레이블이 있는 여러 줄 입력 필드" rows={4} />      </TextField>      <TextField>        <TextFieldTextarea placeholder="레이블 없이 표시되는 여러 줄 입력 필드" rows={4} />      </TextField>    </div>  );}

Message

TextArea의 상태에 따라 메시지를 표시할 수 있습니다.

주의 메시지가 표시됩니다
'use client';import { TextField, TextFieldTextarea } from '@aift/ui/TextField';export default function Message() {  return (    <div className="max-w-md space-y-4">      <TextField>        <TextFieldTextarea placeholder="Enabled" rows={4} />      </TextField>      <TextField warn warnText="주의 메시지가 표시됩니다">        <TextFieldTextarea placeholder="Warning" rows={4} />      </TextField>      <TextField error errorText="오류 메시지가 표시됩니다">        <TextFieldTextarea placeholder="Error" rows={4} />      </TextField>    </div>  );}

Input

TextArea에 값을 입력할 수 있습니다.

Value1:

Value2: 기본 입력 값

'use client';import { useState } from 'react';import { TextField, TextFieldTextarea } from '@aift/ui/TextField';export default function Input() {  const [value1, setValue1] = useState('');  const [value2, setValue2] = useState('기본 입력 값');  return (    <div className="max-w-md space-y-4">      <TextField value={value1} onValueChange={(value) => setValue1(value)}>        <TextFieldTextarea placeholder="텍스트를 입력하세요" rows={4} />      </TextField>      <TextField value={value2} onValueChange={(value) => setValue2(value)}>        <TextFieldTextarea placeholder="텍스트를 입력하세요" rows={4} />      </TextField>      <p>Value1: {value1}</p>      <p>Value2: {value2}</p>    </div>  );}

Disabled

TextArea를 비활성화할 수 있습니다.

'use client';import { TextField, TextFieldTextarea } from '@aift/ui/TextField';export default function Disabled() {  return (    <div className="max-w-md space-y-4">      <TextField>        <TextFieldTextarea placeholder="입력 가능한 필드" rows={4} />      </TextField>      <TextField disabled>        <TextFieldTextarea placeholder="입력 불가능한 필드" rows={4} />      </TextField>    </div>  );}

Close Button

TextArea에 삭제 버튼을 추가할 수 있습니다.

'use client';import { TextField, TextFieldTextarea } from '@aift/ui/TextField';import { useState } from 'react';export default function ClearButton() {  const [value1, setValue1] = useState('');  const [value2, setValue2] = useState('');  return (    <div className="max-w-md space-y-4">      <TextField value={value1} onValueChange={(value) => setValue1(value)}>        <TextFieldTextarea          placeholder="입력 후 삭제 버튼을 클릭하세요"          rows={4}        />      </TextField>      <TextField clearButton={false}>        <TextFieldTextarea          placeholder="삭제 버튼이 없는 입력 필드"          rows={4}        />      </TextField>    </div>  );}

Color

TextArea의 배경색을 설정할 수 있습니다.

'use client';import { TextField, TextFieldTextarea } from '@aift/ui/TextField';export default function Color() {  return (    <div className="max-w-md space-y-4">      <TextField>        <TextFieldTextarea placeholder="흰색 배경 입력 필드" rows={4} />      </TextField>      <TextField>        <TextFieldTextarea placeholder="회색 배경 입력 필드" rows={4} />      </TextField>    </div>  );}

Resize

TextArea의 크기를 조정할 수 있습니다.

import { TextField, TextFieldTextarea } from '@aift/ui/TextField';export default function Resize() {  return (    <div className="max-w-md space-y-4">      <TextField>        <TextFieldTextarea          placeholder="크기 조정 불가"          rows={4}          resize="none"        />      </TextField>      <TextField>        <TextFieldTextarea          placeholder="수직 방향으로만 조정 가능"          rows={4}          resize="vertical"        />      </TextField>      <TextField>        <TextFieldTextarea          placeholder="수평 방향으로만 조정 가능"          rows={4}          resize="horizontal"        />      </TextField>      <TextField>        <TextFieldTextarea          placeholder="모든 방향으로 조정 가능"          rows={4}          resize="both"        />      </TextField>    </div>  );}

React Hook Form

React Hook Form을 사용하여 폼을 관리할 수 있습니다.

'use client';import { useController, useForm } from 'react-hook-form';import { TextField, TextFieldTextarea } from '@aift/ui/TextField';import { Button } from '@aift/ui/Button';import { useState } from 'react';interface FormData {  address: string;  description: string;}export default function ReactHookForm() {  const { reset, handleSubmit, formState: { errors, isSubmitting }, control } = useForm<FormData>({    mode: 'onSubmit',    reValidateMode: 'onChange',    defaultValues: {      address: '',      description: '',    },  });  const { field: addressField } = useController({    name: 'address',    control: control,    rules: {      required: '이름은 필수 입력입니다.',    },  });  const { field: descriptionField } = useController({    name: 'description',    control: control,  });  const [formValue, setFormValue] = useState<FormData>();  const onSubmit = (data: FormData) => {    setFormValue(data);  };  return (    <form onSubmit={handleSubmit(onSubmit)} className="space-y-4">      <TextField         required        label="주소"         error={!!errors.address}         errorText={errors.address?.message as string}        value={addressField.value}        onValueChange={addressField.onChange}        name={addressField.name}        inputRef={addressField.ref}        onBlur={addressField.onBlur}      >        <TextFieldTextarea placeholder="입력하세요" rows={4} autoFocus />      </TextField>      <TextField         required        label="설명"         error={!!errors.description}         errorText={errors.description?.message as string}        value={descriptionField.value}        onValueChange={descriptionField.onChange}        name={descriptionField.name}        inputRef={descriptionField.ref}        onBlur={descriptionField.onBlur}      >        <TextFieldTextarea placeholder="입력하세요" rows={4} />      </TextField>      <div className="flex gap-2">        <Button type="button" variant="outlined" onClick={() => reset()}>초기화</Button>        <Button type="submit" disabled={isSubmitting} variant="contained" color="primary">제출</Button>      </div>      {formValue && (        <div className="space-y-2 mt-8">          <p className="text-sm text-neutral-80 font-semibold">주소: {formValue.address}</p>          <p className="text-sm text-neutral-80 font-semibold">설명: {formValue.description}</p>        </div>      )}    </form>  );}

Props

TextField

PropTypeDefaultDescription
labelstring-입력 필드의 레이블
valuestring-입력 값
onChange(e: ChangeEvent<HTMLTextAreaElement>) => void-값 변경 핸들러
disabledbooleanfalse비활성화 여부
errorbooleanfalse에러 상태 (status='destructive')
errorTextstring-에러 텍스트 (error 상태일 때 표시)
warnbooleanfalse경고 상태 (status='cautionary')
warnTextstring-경고 텍스트 (warn 상태일 때 표시)
helperTextstring-도움말 텍스트
size'xsmall' | 'small' | 'medium' | 'large' | 'xlarge' | 'extra''medium'입력 필드 크기
status'default' | 'positive' | 'cautionary' | 'destructive' | 'info''default'입력 필드 상태
requiredbooleanfalse필수 입력 여부
color'white' | 'gray''white'배경색
variant'rounded' | 'rectangled' | 'plain''rounded'스타일 변형
radius'none' | 'small' | 'medium' | 'large' | 'extra' | 'full''medium'테두리 반경
leftSlotReactNode-왼쪽 슬롯 (아이콘 등)
rightSlotReactNode-오른쪽 슬롯 (삭제 버튼 등)
classNamestring-추가 CSS 클래스
idstring-고유 ID
onValueChange(value: string) => void-값 변경 핸들러 (문자열 값)
namestring-input 요소의 name 속성 (react-hook-form 등에서 사용)
inputRefRef<HTMLTextAreaElement>-input 요소의 ref (react-hook-form 등에서 사용)

TextFieldTextarea

PropTypeDefaultDescription
placeholderstring-플레이스홀더 텍스트
rowsnumber-표시할 행 수
resize'none' | 'vertical' | 'horizontal' | 'both''vertical'텍스트 영역 크기 조정 방향
autoFocusboolean

On this page