File Upload experimental
Ark UI File Upload 기반 wrapper입니다. drag/drop dropzone, 파일 선택 trigger, 그리고 선택된 파일 목록(이름·용량·삭제)을 제공하며 키보드·ARIA 동작은 primitive가 담당합니다.
Preview
파일을 여기에 끌어다 놓으세요
<script lang="ts">
import * as FileUpload from '@odbd/svelte/file-upload'
</script>
<FileUpload.Root maxFiles={5} accept="image/*">
<FileUpload.Label>이미지 업로드</FileUpload.Label>
<FileUpload.Dropzone>
파일을 여기에 끌어다 놓으세요
<FileUpload.Trigger>파일 선택</FileUpload.Trigger>
</FileUpload.Dropzone>
<FileUpload.Context>
{#snippet render(api)}
{#if api().acceptedFiles.length > 0}
<FileUpload.ItemGroup>
{#each api().acceptedFiles as file (file.name)}
<FileUpload.Item {file}>
<FileUpload.ItemPreview type="image/*">
<FileUpload.ItemPreviewImage />
</FileUpload.ItemPreview>
<FileUpload.ItemName />
<FileUpload.ItemSizeText />
<FileUpload.ItemDeleteTrigger aria-label="삭제">×</FileUpload.ItemDeleteTrigger>
</FileUpload.Item>
{/each}
</FileUpload.ItemGroup>
<FileUpload.ClearTrigger>모두 지우기</FileUpload.ClearTrigger>
{/if}
<!-- 거부된 파일도 보여준다 — 조용히 삼키면 아무 일도 없는 것처럼 보인다 -->
{#if api().rejectedFiles.length > 0}
<p class="file-upload-rejected" role="alert">
{api()
.rejectedFiles.map((rejection) => rejection.file.name)
.join(', ')} — 이미지 파일만 올릴 수 있어요.
</p>
{/if}
{/snippet}
</FileUpload.Context>
<FileUpload.HiddenInput />
</FileUpload.Root>
<style>
.file-upload-rejected {
margin: 0;
color: var(--odbd-color-danger);
font-size: var(--odbd-font-size-sm);
}
</style>
Import
Svelte와 React가 같은 anatomy 계약을 공유합니다. 선택한 프레임워크는 모든 페이지에서 유지됩니다. 패키지 설치는 Getting Started를 참고하세요.
import * as FileUpload from '@odbd/svelte/file-upload' import { FileUpload } from '@odbd/react/file-upload'