コンポーネント
Input
1行の入力欄。誤りをその場で示せる
凹んだ面を宣言します
入力欄は地であって塗りではありません。面の仕組みに乗るので、 背景と文字が対で決まります。塗るだけの道はありません。
誤りは自分で決めません
aria-invalid が付くと境界が変わります。付けるのは Field です——
ここで決めると、Field を使わない書き方だけが誤りを名乗れることになります。
境界の色は文字の役割(border-danger)です。mark ではありません——
深い面の上では mark が要件ぎりぎりまで明るい側へ寄るので、
赤のように、明るい側で彩度が落ちる色は白っぽく見えます。
| ダークモード・凹んだ面での彩度 | |
|---|---|
danger-mark | C* = 21.4(白っぽい) |
danger | C* = 40.8 |
状態の境界は太くします。 1px では色の面積が足りず、違いが読み取りにくいためです。
境界だけで伝えません。 Field が文言も一緒に出します。
満たしていることも表せます
valid を渡すと、境界が変わり、印が出ます。
誤りとは別の仕組みで受け取ります——誤りには aria-invalid という
標準の属性がありますが、満たしていることを表す属性はありません。
そこだけ形が違うのはそのためです。
押せないときは文字が淡くなります
不透明度では表しません。 薄めると前景と背景が同時に下地へ寄り、 読みやすさの保証が効かなくなります。
3つの状態
通常・空・エッジケースの3つは、どのコンポーネントにも必ずあります。
通常default.tsx
通常。凹んだ面を宣言している。
空empty.tsx
空。中身もラベルも無いとき。
エッジケースedge.tsx
エッジケース。誤りのときと、押せないとき。
この形では受け取れません
props
Prop
Type
型と説明はコンポーネントのソースから抽出しています。既定値は出していません——cva の defaultVariants は 署名に現れないので、表に出すと「引数のデフォルトが書かれているものだけ」になり、嘘になります。