コンポーネント
Checkbox
チェックボックス。オンとオフを選ぶ。複数を同時に選べる
素の input に乗っています
読み上げ・キーボード・フォームへの載り方は、どれもブラウザが持っています。 差し替えているのは見た目だけです。
入った印は兄弟の要素に置いて重ねています(input の中に要素は置けません)。
出し入れは CSS の peer-checked: なので、このコンポーネントは状態を持ちません。
持たせると、値の出どころが input とこのコンポーネントの2つになります。
いまは input だけが値を持つので、素のフォームでも react-hook-form の
register() でも、そのまま載ります。
ラベルは Field が付けます
ラベルを自分では持っていません。 持つと結びつけの経路が2つになり、 片方だけ直したときにずれます。
ラベルが右に来る配置は Field が持っています。
<Field layout="inline" id="terms" label="利用規約に同意する">
<Checkbox />
</Field>チェックの印は塗りを宣言しています
bg-accent のような塗るだけの道はありません。塗りは宣言するもので、
宣言すると背景と前景が対で決まります——中の印は文字色を継ぐので、読める側になります。
押せないときだけ段が落ちます。宣言は CSS では差し替えられませんが、
disabled は描くときに分かるので、そこで分けています。
3つの状態
通常・空・エッジケースの3つは、どのコンポーネントにも必ずあります。
通常default.tsx
通常。ラベルは Field が付ける。
いつでも止められます
空empty.tsx
空。ラベルも説明も無い。
エッジケースedge.tsx
エッジケース。押せないときと、誤りのとき。
同意が要ります
props
Prop
Type
型と説明はコンポーネントのソースから抽出しています。既定値は出していません——cva の defaultVariants は 署名に現れないので、表に出すと「引数のデフォルトが書かれているものだけ」になり、嘘になります。