컴포지션 — 화면 조립
컴포넌트를 어디에 둘지 매번 고민하지 않아도 됩니다. @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 로 읽습니다.