Collapsible

접거나 펼칠 수 있는 콘텐츠 영역

Basic Usage

기본 Collapsible 컴포넌트입니다.

@peduarte starred 3 repositories

@radix-ui/primitives
tsx
<Collapsible className="w-[350px] space-y-2">
  <div className="flex items-center justify-between space-x-4 px-4">
    <h4 className="text-sm font-semibold">
      @peduarte starred 3 repositories
    </h4>
    <CollapsibleTrigger asChild>
      <Button variant="ghost" size="icon-sm">
        <ChevronsUpDown className="h-4 w-4" />
        <span className="sr-only">Toggle</span>
      </Button>
    </CollapsibleTrigger>
  </div>
  <div className="rounded-md border px-4 py-2 font-mono text-sm">
    @radix-ui/primitives
  </div>
  <CollapsibleContent className="space-y-2">
    <div className="rounded-md border px-4 py-2 font-mono text-sm">
      @radix-ui/colors
    </div>
    <div className="rounded-md border px-4 py-2 font-mono text-sm">
      @stitches/react
    </div>
  </CollapsibleContent>
</Collapsible>

Controlled

open과 onOpenChange로 상태를 제어할 수 있습니다.

Click to expand

tsx
const [isOpen, setIsOpen] = useState(false);

<Collapsible
  open={isOpen}
  onOpenChange={setIsOpen}
  className="w-[350px] space-y-2"
>
  <div className="flex items-center justify-between space-x-4 px-4">
    <h4 className="text-sm font-semibold">
      {isOpen ? 'Click to collapse' : 'Click to expand'}
    </h4>
    <CollapsibleTrigger asChild>
      <Button variant="ghost" size="icon-sm">
        <ChevronsUpDown className="h-4 w-4" />
      </Button>
    </CollapsibleTrigger>
  </div>
  <CollapsibleContent className="space-y-2">
    <div className="rounded-md border px-4 py-3 text-sm">
      This content can be shown or hidden.
    </div>
  </CollapsibleContent>
</Collapsible>

Default Open

defaultOpen prop으로 초기 상태를 열린 상태로 설정할 수 있습니다.

Default Open Section

This section is open by default.
tsx
<Collapsible defaultOpen className="w-[350px] space-y-2">
  <CollapsibleTrigger asChild>
    <Button variant="ghost" size="icon-sm">
      <ChevronsUpDown className="h-4 w-4" />
    </Button>
  </CollapsibleTrigger>
  <CollapsibleContent>
    <div className="rounded-md border px-4 py-3 text-sm">
      This section is open by default.
    </div>
  </CollapsibleContent>
</Collapsible>

Usage

tsx
import {
  Collapsible,
  CollapsibleTrigger,
  CollapsibleContent,
} from '@gpters-internal/ui';

function Example() {
  return (
    <Collapsible>
      <CollapsibleTrigger>Toggle</CollapsibleTrigger>
      <CollapsibleContent>
        Hidden content here
      </CollapsibleContent>
    </Collapsible>
  );
}