import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, FeatureList, } from "@godxjp/ui/data-display"; import { Button, Text } from "@godxjp/ui/general"; import { Flex, PageContainer, ResponsiveGrid } from "@godxjp/ui/layout"; const STARTER = [ { state: "included", label: "ユーザー 10 名まで" }, { state: "included", label: "監査ログ", description: "直近 30 日分を保持します。" }, { state: "limited", label: "API 呼び出し", description: "月 10,000 回を超えると 429 を返します。", }, { state: "excluded", label: "SAML / OIDC シングルサインオン" }, { state: "excluded", label: "監査ログのエクスポート" }, ] as const; const ENTERPRISE = [ { state: "included", label: "ユーザー数 無制限" }, { state: "included", label: "監査ログ", description: "保持期間は契約単位で設定します。" }, { state: "included", label: "API 呼び出し", description: "レート上限は個別に調整します。" }, { state: "included", label: "SAML / OIDC シングルサインオン", description: "SAML 2.0 と OIDC の両方に対応。", }, { state: "included", label: "監査ログのエクスポート" }, ] as const; /** * FeatureList — 先頭の状態グリフ(含む/含まない/制限あり)を持つ「文」のリスト。 * * ListRow は 1 行のエンティティ行(区切り線・末尾アクション)、Timeline は順序のあるイベント * レール、Descriptions は用語/値のグリッド。どれも「折り返す説明文つきの状態リスト」ではない。 * Composed only from real @godxjp/ui components. */ export default function Demo() { return ( 三つの状態 included(✓)· limited(−)· excluded(✗)。色は意味を運ぶ唯一の手段ではありません —— 形が違い、読み上げ用の語も添えられます(WCAG 1.4.1)。excluded を赤で塗らないのは、 「含まれない」は失敗ではなく事実だからです。 折り返しても、グリフは最初の行に揃う グリフの枠は 1 行分(1lh)の高さで、その中央にグリフが置かれます。だから 3 行に 折り返すラベルでも、揃う先は箱の上端ではなく最初の行です。呼び出し側に数値は ありません。 Starter 小さなチームのための最小構成。 Enterprise 監査と SSO を必要とする組織向け。 数量はラベルに組み立てる 「· 10,000 req/mo」のような数量に専用の prop はありません。Text を label に入れる 書き方がすでに合法で audit も通るため、prop を足すと docs/WHAT-BELONGS-HERE.md の問い 1(consumer に手がないか)に落ちます。 API 呼び出し{" "} 10,000 req/mo ), }, { state: "included", label: ( <> ストレージ{" "} 250 GB ), }, ]} /> ); }