# @tissue-ui/layout — Design System Catalog > 기계가독 디자인 시스템 카탈로그. @tissue-ui/layout 은 매니페스트 기반 화면 아키타입 + React 프리미티브 라이브러리다. 이 문서는 LAYOUT_MANIFEST(schema 0.11.0, package 0.7.7)에서 자동 생성되며, 에이전트가 아키타입·슬롯·컴포넌트 props·상태를 그대로 소비하도록 만들어졌다. 사람이 보는 문서는 https://ui.tissue.works 참고. ## Install .npmrc 에 스코프 레지스트리를 매핑한다: @tissue-ui:registry=https://forge.tissue.works/npm/ //forge.tissue.works/npm/:_authToken=${TISSUE_NPM_TOKEN} 그다음 설치: npm install @tissue-ui/layout-core @tissue-ui/layout-react @tissue-ui/layout-themes - `@tissue-ui/layout-core` — LAYOUT_MANIFEST + 조회 헬퍼(getArchetype/getElement/getSlot/isElementAllowed). framework-agnostic. - `@tissue-ui/layout-react` — 아키타입 컴포넌트 + 프리미티브 (peer react>=17). - `@tissue-ui/layout-themes` — CSS 변수 브리지(base.css) + 스킨(tissue.css/assetly.css/krds.css) + Tailwind preset. ## Theming layout 은 CSS 변수 브리지 방식이다. 앱에서 base.css 를 먼저 import 하고 스킨 css 를 겹친 뒤, `--tissue-layout-*` 상위 변수만 덮어써 리스킨한다: import "@tissue-ui/layout-themes/base.css"; import "@tissue-ui/layout-themes/tissue.css"; ## Archetypes (6) — 화면 레이아웃 각 아키타입은 슬롯을 가지며, 슬롯의 `allows` 는 그 자리에 넣을 수 있는 element key 목록이다. ### list — List page [ListPage · import from @tissue-ui/layout-react] A collection screen: header with title/actions, an optional filter toolbar, a list body (grid or cards), and an optional pagination footer. slots: - header (required, multiple, layout=space-between): allows: tabs, button-primary, notice-bar - toolbar.left (optional, multiple, layout=row): allows: search, filter-dropdown, tabs - toolbar.right (optional, multiple, layout=row): allows: button-primary, filter-dropdown - body (required, single): allows: grid, card-grid, empty-state - footer (optional, single): allows: pagination ### detail — Detail page [DetailPage · import from @tissue-ui/layout-react] A single-record screen: header with title/status/actions, an optional meta (property) list, a main body of content cards, an optional aside for related panels, and an optional action footer. slots: - header (required, multiple, layout=space-between): allows: page-header, badge, button, tabs, breadcrumb - meta (optional, multiple, layout=row): allows: field, badge - body (required, multiple, layout=column): allows: card, field, empty-state - aside (optional, multiple, layout=column): allows: card, field, badge - footer (optional, multiple, layout=row): allows: button ### dashboard — Dashboard page [DashboardPage · import from @tissue-ui/layout-react] An overview screen: header, a metrics row of KPI tiles, a main body of summary/content cards, and an optional aside for a secondary panel. slots: - header (required, multiple, layout=space-between): allows: page-header, button, tabs - metrics (optional, multiple, layout=grid): allows: metric-card - body (required, multiple, layout=column): allows: card, metric-card, empty-state - aside (optional, multiple, layout=column): allows: card ### form — Form page [FormPage · import from @tissue-ui/layout-react] An edit screen: header with title, a body of labeled form fields (optionally grouped into cards), and a footer of submit/cancel actions. slots: - header (required, multiple, layout=space-between): allows: page-header, button - body (required, multiple, layout=column): allows: form-field, field, card, file-attachment, accordion - footer (optional, multiple, layout=row): allows: button ### centered — Centered page [CenteredPage · import from @tissue-ui/layout-react] A narrow centered column for auth/onboarding: optional brand/title header, a body (usually a form), and an optional footer of links. slots: - header (optional, multiple, layout=space-between): allows: page-header, badge - body (required, multiple, layout=column): allows: card, form-field, button - footer (optional, multiple, layout=row): allows: button ### split — Split page [SplitPage · import from @tissue-ui/layout-react] A master-detail screen: optional header, a sidebar list rail (master), and a body detail pane that reflects the selection. slots: - header (optional, multiple, layout=space-between): allows: page-header, button, tabs - sidebar (required, multiple, layout=column): allows: card, empty-state - body (required, multiple, layout=column): allows: card, field, empty-state ## Primitives (14) — @tissue-ui/layout-react ### button — Button [primitive · stable · import from @tissue-ui/layout-react] Action button. Variants cover primary CTA, secondary, ghost, and destructive. props: - variant: enum(primary|secondary|ghost|danger) — Visual emphasis / intent (default `secondary`). - size: enum(sm|md|lg) — Control height (default `md`). - loading: boolean — Show a spinner and make the button non-interactive. states: default, hover, focus, active, disabled, loading state attributes: data-disabled, data-loading ### badge — Badge [primitive · stable · import from @tissue-ui/layout-react] Small status / label pill, typically next to a title. props: - tone: enum(neutral|blue|green|amber|red|violet) — Semantic color (default `neutral`). states: default ### card — Card [primitive · stable · import from @tissue-ui/layout-react] Bordered surface that groups related content, with an optional title. props: - title: string — Optional card heading. - actions: node — Optional header-right actions. states: default ### field — Field [primitive · stable · import from @tissue-ui/layout-react] A labeled read-only value — one row of a property / metadata list. props: - label: string — Field name. - children: node — Field value. states: default ### metric-card — Metric card [primitive · stable · import from @tissue-ui/layout-react] A KPI tile: an uppercase label, a prominent value, and an optional hint — for dashboard stat rows. props: - label: string — Metric name (rendered uppercase). - value: string — The metric value (string or number). - hint: string — Optional secondary line under the value. states: default ### input — Text input [primitive · stable · import from @tissue-ui/layout-react] Single-line text/password/number input. props: - type: string — HTML input type (default `text`). - placeholder: string — Placeholder text. - disabled: boolean — Disable the control. - error: boolean — Mark the control invalid (aria-invalid + danger border). states: default, hover, focus, disabled, error state attributes: data-disabled, data-error ### select — Select [primitive · stable · import from @tissue-ui/layout-react] Dropdown select; children are