Empty

콘텐츠가 없을 때 표시하는 빈 상태 컴포넌트

Basic Usage

기본 Empty 컴포넌트입니다.

No messages
You have no messages in your inbox. Start a conversation to see messages here.
tsx
<Empty className="border">
  <EmptyHeader>
    <EmptyMedia variant="icon">
      <Inbox />
    </EmptyMedia>
    <EmptyTitle>No messages</EmptyTitle>
    <EmptyDescription>
      You have no messages in your inbox. Start a conversation to see messages here.
    </EmptyDescription>
  </EmptyHeader>
</Empty>

With Action

액션 버튼을 추가할 수 있습니다.

No files found
There are no files in this folder. Upload files to get started.
tsx
<Empty className="border">
  <EmptyHeader>
    <EmptyMedia variant="icon">
      <FileX />
    </EmptyMedia>
    <EmptyTitle>No files found</EmptyTitle>
    <EmptyDescription>
      There are no files in this folder. Upload files to get started.
    </EmptyDescription>
  </EmptyHeader>
  <EmptyContent>
    <Button>
      <Plus />
      Upload File
    </Button>
  </EmptyContent>
</Empty>

Search Empty State

검색 결과가 없을 때 사용하는 빈 상태입니다.

No results found
We couldn't find anything matching your search. Try using different keywords.
tsx
<Empty className="border">
  <EmptyHeader>
    <EmptyMedia variant="icon">
      <Search />
    </EmptyMedia>
    <EmptyTitle>No results found</EmptyTitle>
    <EmptyDescription>
      We couldn't find anything matching your search.
      Try using different keywords.
    </EmptyDescription>
  </EmptyHeader>
  <EmptyContent>
    <Button variant="outline">Clear search</Button>
  </EmptyContent>
</Empty>

Media Variants

EmptyMedia는 default와 icon 두 가지 variant를 제공합니다.

Default Variant
Larger icon without background
Icon Variant
Smaller icon with background
tsx
{/* Default variant - larger icon without background */}
<EmptyMedia variant="default">
  <Inbox className="size-16 text-muted-foreground" />
</EmptyMedia>

{/* Icon variant - smaller icon with background */}
<EmptyMedia variant="icon">
  <Inbox />
</EmptyMedia>

Usage

tsx
import {
  Empty,
  EmptyHeader,
  EmptyTitle,
  EmptyDescription,
  EmptyContent,
  EmptyMedia,
} from '@gpters-internal/ui';

function Example() {
  return (
    <Empty>
      <EmptyHeader>
        <EmptyMedia variant="icon">
          <Inbox />
        </EmptyMedia>
        <EmptyTitle>No items</EmptyTitle>
        <EmptyDescription>
          There are no items to display.
        </EmptyDescription>
      </EmptyHeader>
      <EmptyContent>
        <Button>Add Item</Button>
      </EmptyContent>
    </Empty>
  );
}