import { Card, CardContent, CardHeader, CardTitle, EmptyState } from "@godxjp/ui/data-display"; import { Button } from "@godxjp/ui/general"; import { Flex, PageContainer, ResponsiveGrid } from "@godxjp/ui/layout"; import { AlertTriangle, Archive, CheckCircle2, Inbox, Info, Plus, SearchX, XCircle, } from "lucide-react"; /** * EmptyState — centred zero-state with icon, title, description, and an optional * CTA. Use for non-DataTable lists / zero-state pages (DataTable embeds its own). * * Heading hierarchy: the title is a real heading (default `

`). Pick * `titleLevel` for a VALID page outline (page `

` → section `

` → nested * `

`), never for visual size — the size is fixed by tokens. Below, the page * title is `

` (PageContainer) and each case owns a `` * (`

`), so the empty-state titles are `titleLevel={3}` — or `titleAs="p"` * when the message is not itself a heading. Composed only from real @godxjp/ui. */ export default function Demo() { return ( {/* page — the empty condition IS the page's primary job (onboarding). */} page:主要な空状態(オンボーディング) 新規請求書 } /> {/* page — post-search zero result with a clear recovery. */} page:検索結果ゼロ {/* section — restrained spacing for a subsection inside a normal page. */} section:セクション内の空状態 {/* compact — secondary content; no medallion, minimal padding, and the message is NOT a heading (titleAs="p") because the card already has one. */} compact:補助的な空状態 {/* tone — a semantic confirmation zero-state. */} tone:承認済み(success) {/* tone — the remaining four steps. tone tints the icon medallion only; the copy still carries the meaning, so a zero-state never relies on colour alone. */} tone:warning / destructive / info / muted(既定) ); }