import { Card, CardContent, CardDescription, CardHeader, CardTitle, Progress, } from "@godxjp/ui/data-display"; import { Flex, PageContainer } from "@godxjp/ui/layout"; /** * Progress — horizontal 0–100 bar with an optional label and a semantic tone. * Composed only from real @godxjp/ui components. */ export default function Demo() { return ( Tones Tone carries meaning。success(既定)/ warning / destructive。 shape="ring" 同じメーターを弧で描きます。バーと同じ value / tone / size / ARIA のまま、label がリングの内側に入ります。狭いアプリバーで「18 / 42 件」を見出しの横に出したいとき、バー+キャプションの 2 段ではなく 1 マスで済むのが理由です。数値が重要なときではなく、 場所が正方形のときに選びます。 {/* label はリング内の表示であり、同時に読み上げ名でもあります。「何の 18/42 か」を 名前にしたいときは、画面にすでにある見出しを aria-labelledby で指します — bar と同じ規約です。 */} {/* label なし=読み出しのないリング。名前は aria-label から。 */} Breakdown(segments) 1 つの合計を状態ごとに分割します。割合ではなく実数を渡すと、各スライスの比率は コンポーネントが計算します。メーターより背の高いトラックになるのは、0.5rem の pill 上に 3 色を並べると比率が読めなくなるためです。role="img" として、全スライスを 1 つの名前で読み上げます。 Over capacity over=true で 100% を超えた実値を aria-valuetext に残し、破壊的なストライプで区別します。 Labelled / unlabelled label を渡すと bar 下にテキストを表示し aria-labelledby で関連付け。省略時は aria-label="Progress"。 Edge values & clamping value は 0–100 にクランプ(Math.max(0, Math.min(100, value)))。範囲外でも安全に描画。 ); }