import { useState } from "react"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@godxjp/ui/data-display"; import { Toggle } from "@godxjp/ui/data-entry"; import { Button, Text } from "@godxjp/ui/general"; import { Flex, PageContainer } from "@godxjp/ui/layout"; /** * Toggle · a single pressed/unpressed button (Radix Toggle). Use for toolbar * actions and pinned filters. For multi-option selection use ToggleGroup. * Composed only from real @godxjp/ui components. */ export default function Demo() { const [bold, setBold] = useState(false); const [pinned, setPinned] = useState(true); const [outline, setOutline] = useState(false); const [unread, setUnread] = useState(true); return ( Controlled state Controlled via pressed/onPressedChange. Suitable for toolbar formatting or filter pins. 太字 未払いをピン留め Variants default(押下時だけ面が出る・休止時は透明な 1px 枠)· outline(--background の上の細い枠)· soft(休止時から --secondary で塗られる)。 最初の二つはツールバー向けで、休止しているチップは「何もない」ように見える。 チップとして並べるときは soft。 仕訳フィルタ 消費税対象のみ 草案のみ soft + shape="pill" · チェック可能なタグチップ antd の Tag.CheckableTag にあたる形。soft が休止時の面を、shape が角を担う。shape は Button / Badge と同じ default / pill / sharp の三値で、同じ radius トークンを読む。押下すると面が --primary に反転するので、状態は色だけに依存しない。 取り消せる(×つきの)タグは選択ではなく削除なので Badge の onRemove 側、つまり別のコンポーネントになる。 設計 実装 検証 default(--radius-md) pill sharp soft の面は Badge variant="secondary" / Button variant="secondary" と同じ --secondary。ホバーは不透明な --secondary-hover なので、ページの上でもカードの上でも同じ色になる。 Sizes xs 24px / sm 28px / md 32px / lg 36px · すべて --control-height の同じ段。行の高さが先に決まっている場所では、その段を選ぶ。xs は 24px の密な行にセグメント状のチップを載せるための段で、Button を並べて自作する代わりになる。 極小 標準 24px の密な行 · size="xs" 行の高さが 24px に決まっている監査ログや明細ツールバーでは、xs のチップがそのまま収まる。同じ段の Button size="xs" と高さが一致するので、行が段差にならない。 未読のみ 添付あり いずれも --control-height-xs(24px)。 Count count / overflowCount / showZero / countLabel · Button と同じ語彙。押下状態と数字が 1 つのコントロールに乗るので、ファセットフィルタチップやリアクションチップが real primitive だけで書ける。数字は Intl.NumberFormat でロケール整形され、アクセシブル名は「未読, 12 件」のように読み上げられる。 さらに詳しい実画面は Toggle Count のページを参照。 未読 すべて 下書き ); }