컴포지션 — 화면 조립

컴포넌트를 어디에 둘지 매번 고민하지 않아도 됩니다. @tissue-ui/layout 은 화면을 골격(아키타입) + 빈 자리(슬롯) 로 나눠 두고, 각 자리에 어떤 요소를 넣을지 미리 정해 뒀습니다. 정해진 자리에 컴포넌트를 넣기만 하면 반듯한 화면이 됩니다.

1. 아키타입을 고른다

만들 화면의 성격에 맞는 아키타입을 고릅니다 — 목록이면 목록 페이지, 한 건 상세면 상세 페이지, 지표 중심이면 대시보드, 입력이면 … 전체 목록은 레이아웃 에 있습니다.

2. 슬롯을 채운다

아키타입은 header·body·toolbarLeft 같은 슬롯을 prop 으로 받습니다. 각 슬롯에 컴포넌트를 넣으면 아키타입이 간격·정렬·반응형을 알아서 처리합니다.

tsx
<ListPage
  header={<PageHeader title="사용자" actions={<Button variant="primary">새로 만들기</Button>} />}
  toolbarLeft={<Input placeholder="검색" />}
  body={<DataTable caption="사용자 목록" columns={cols} rows={rows} />}
  footer={<Pagination … />}
/>

미리보기

표로 보기
제목·검색·표·페이지 이동이 갖춰진 가장 흔한 목록.

사용자

2
사용자 목록
번호이름역할상태
2홍길동관리자활성
1김영희편집자대기
카드 그리드로 보기
표 대신 본문 자리에 카드 격자를 넣습니다(상품·갤러리 목록에 적합).

상품

티셔츠
재고 12개 · ₩12,000
머그컵
재고 12개 · ₩12,000
스티커
재고 12개 · ₩12,000
빈 목록
항목이 없을 때는 본문 자리에 빈 상태를 넣어 다음 행동을 안내합니다.

주문

아직 주문이 없습니다

첫 주문이 들어오면 여기에 표시됩니다.

선택 · 일괄 작업
표에서 여러 행을 고르고 상단 도구 줄에서 한꺼번에 처리합니다.

구독자

1 선택
구독자
번호이름역할상태
2홍길동관리자활성
1김영희편집자대기

3. 허용 요소를 지킨다

자리마다 넣을 수 있는 요소가 정해져 있습니다(예: 목록 페이지의 본문에는 그리드·카드 그리드·빈 상태). 아키타입 상세 페이지의 슬롯 표에서 파란색으로 눌리는 요소가 그 자리에 넣을 수 있는 컴포넌트입니다. 회색 요소는 실제 컴포넌트가 아니라, 직접 만들거나 다른 패키지에서 가져와 채우는 자리입니다.

코드로 확인하고 싶으면 core 의 함수를 쓰면 됩니다.

tsx
import { isElementAllowed, getArchetype } from "@tissue-ui/layout-core";

isElementAllowed("list", "body", "grid");   // true
isElementAllowed("list", "footer", "grid"); // false — footer 는 pagination 만

4. 한 자리에 여러 개

한 자리에 컴포넌트를 여러 개 넣어도 됩니다. 머리말 하나에 제목·배지·버튼을 나란히 넣거나, 본문에 카드를 여러 장 쌓는 식입니다. 골격은 자리와 정렬만 잡아 주고, 그 안을 무엇으로 채울지는 자유입니다.

어떤 화면에 어떤 자리가 있고 무엇을 넣을 수 있는지는 LAYOUT_MANIFEST 한곳에 정리돼 있습니다. 에이전트도 같은 내용을 llms.txt 로 읽습니다.