Get StartedFoundationsComponentsPatternsRulesDevelopAI & ToolsUpdates

Attachment Input

사진·영상·파일 첨부를 다루는 입력으로, 선택·미리보기·업로드 진행·실패·삭제 상태를 관리해요.

설치

pnpm dlx shadcn@latest add https://rebar.conmarket-landing.workers.dev/r/attachment-input.json

Anatomy

Attachment Input은 Trigger와 Preview로 구성돼요. Preview에는 항목에 대한 액션(삭제/재시도)과 업로드 진행 상태를 표시할 수 있어요.

  • Trigger: 파일 선택 창을 여는 80px 버튼이에요. 현재 개수와 최대 개수(3/10)를 보여줘요.
  • Preview: 첨부한 항목이에요. 이미지는 URL.createObjectURL 로 만든 로컬 썸네일을 보여주고, 항목이 사라지면 URL을 해제해요.
  • Remove Button: Preview 우측 상단의 삭제 버튼이에요. 버튼 둘레는 마스크로 뚫려 있어 어떤 배경 위에서도 간격이 투명하게 보여요.
  • Backdrop: 업로드 중(진행률)이나 실패(재시도) 상태를 Preview 위에 덮어 보여줘요.

Properties

Variant

사진·영상을 첨부하는 Media 타입과 파일을 첨부하는 File 타입이 있어요. accept 가 모두 image/* 나 video/* 면 Media 타입(80px 썸네일)이, 그 외에는 File 타입(160px 파일 카드)이 돼요.

Preview Badge

Preview 항목에 배지를 표시할 수 있어요. 주로 첫 번째 Preview에 대표 사진 배지를 표시하는 용도로 사용해요.

  • 배지는 썸네일 하단에 반투명 오버레이로 표시돼요.
  • 배지 레이블은 getItemBadge 로 바꿀 수 있어요.

State

Trigger와 Preview는 각각 다른 상태를 가져요.

  • Trigger: Enabled, Pressed, Disabled 상태가 있으며, 값이 있으면 개수가 Neutral 색으로 표시돼요. 최대 개수에 도달하면 Disabled 돼요.
  • Preview: Enabled, Loading, Error, Disabled, Read Only 상태를 가져요. Read Only에서는 삭제 버튼이 사라지고 흐리게 보여요.
  • Remove Button: Enabled, Pressed, Disabled 상태를 개별로 가져요.

Upload

업로드는 사용처에서 구현하고, 항목의 status(idle · uploading · error)와 progress 만 바꿔 주면 돼요. onRetry 를 넘기면 error 상태 항목에 재시도 버튼이 나타나요. 아래 예시에서 파일 이름에 fail 이 들어가면 실패 상태를 볼 수 있어요.

Dropzone

파일을 드래그 앤 드롭으로 올릴 수 있는 영역이에요. 버튼 클릭과 드래그 앤 드롭 두 가지 방식으로 파일을 고를 수 있어요.

  • 드래그가 들어오면 테두리가 실선으로 바뀌어 활성 상태를 표시해요.
  • 파일을 고르면 Preview가 Dropzone 아래에 표시돼요.

Guidelines

첨부 개수와 형식 알려주기

최대 첨부 개수와 허용 형식은 입력 아래 설명 문구로 미리 알려줘요. 조건에 맞지 않는 파일은 onFileReject 로 받아서 이유를 안내해요.

Do· 조건을 미리 안내

"사진은 최대 5장까지 올릴 수 있어요" 처럼 제한을 먼저 알려줘요.

Don't· 조용히 무시

형식이나 개수 조건에 맞지 않는 파일을 아무 안내 없이 버리지 않아요.

실패는 항목 단위로

업로드에 실패한 항목만 Error 상태로 표시하고 재시도 버튼을 제공해요. 다른 항목의 업로드는 계속 진행돼요.

대표 사진

대표 사진 배지는 목록에서 첫 번째 항목 하나에만 표시해요.

Props

Prop

Type

AttachmentFileEntry

Prop

Type

On this page