Novi UI
コンポーネント一覧

NumberField

数量・単価・個数など「増減する数」に使う。電話番号や郵便番号は数字でも数値ではないので Input を使う。

デモ

使い分け

こうする

  • 数量・金額・割合のように増減する数に使う
  • 通貨や % は formatOptions で付ける。文字列に含めない

こうしない

  • 電話番号・郵便番号・注文番号に使わない。数字だが数値ではない。Input にする
  • 空欄を 0 として扱わない。onChange は null を渡す

Props

NumberField の props 一覧
名前型説明
variant'solid' | 'outline' | 'soft' | 'ghost' | 'plain'
size'sm' | 'md' | 'lg'
radius'none' | 'sm' | 'md' | 'lg' | 'full'
labelReactNode
placeholderstring
descriptionReactNode
errorMessageReactNode`isInvalid` のときに表示する。色だけに頼らずテキストを必ず伴う(WCAG 1.4.1)
namestring
valuenumber | null空欄は `null`。`NaN` は使わない
defaultValuenumber
onChange(value: number | null) => void空欄になったときは `null` を受け取る
minValuenumber
maxValuenumber
stepnumber矢印キーと増減ボタンの刻み。既定は 1
formatOptionsIntl.NumberFormatOptions表示の書式。`Intl.NumberFormat` のオプションをそのまま渡す。 @example { style: 'currency', currency: 'JPY' } { style: 'percent' } { style: 'unit', unit: 'kilogram' }
onKeyDownKeyboardEventHandler<HTMLInputElement>キー操作。**IME 変換中のキーはここに届かない**(テーマが core の `useImeSafeKeys` を通す)。
isDisabledboolean
isReadOnlyboolean
isRequiredboolean
isInvalidboolean
classNamesClassNames<typeof numberFieldSlots>

Slot

構成部位に data-slot が出力されます。 CSS の上書きやテストはこれを狙ってください。

  • root必須
  • label
  • inputWrapper必須
  • input必須
  • decrement
  • increment
  • description
  • errorMessage

アクセシビリティ

キーボード操作
キー動作
↑ ↓`step` ずつ増減
PageUp / PageDown大きく増減
Home / End最小 / 最大へ
  • `label` は必須。ArrowUp / ArrowDown で `step` ずつ増減し、`minValue` / `maxValue` で止まる。 増減ボタンは名前を持つ。`description` と `errorMessage` は `aria-describedby` で関連付く。 IME 変換中の Enter は抑制される
  • キーボードだけで操作できます。フォーカスリングはコントラスト比 3:1 以上です。
  • 本文のコントラスト比は light / dark とも 4.5:1 以上を検査で保証しています。
  • prefers-reduced-motion が有効なときはアニメーションを行いません。