金額入力CurrencyInputExperimental

Money editor: a currency-symbol-prefixed, thousands-grouped, right-aligned amount input that formats while typing and emits a numeric value. JPY-first; for invoices, payroll, expenses, and any fintech amount field.

プレビュー

入力値は数値として保持し、表示時だけ通貨表記にします。

保存される値

1200000

表示: ¥1,200,000

状態とバリエーション

標準

JPY の金額を数値として保持し、入力中は桁区切りを維持します。

入力値は数値として保持し、表示時だけ通貨表記にします。

保存される値

1200000

表示: ¥1,200,000

通貨違い

currency と locale を組み合わせて、海外請求額の記号と桁区切りを変えます。

入力値は数値として保持し、表示時だけ通貨表記にします。

保存される値

1280

表示: $1,280.00

記号なし

表や一覧で通貨単位が別に示されている場合は showSymbol=false にできます。

表では記号を列見出しに置くため、入力欄では非表示にします。

保存される値

1200000

表示: ¥1,200,000

無効化

確定済み金額は無効化し、操作対象の上で理由を説明します。

入力値は数値として保持し、表示時だけ通貨表記にします。

保存される値

1200000

表示: ¥1,200,000

プロパティ

表は横にスクロールできます
プロパティ初期値説明
labelReactNode-入力欄の上に表示するラベルです。id と紐づけて読み上げにも使います。
descriptionReactNode-入力欄の下に表示する補足文です。aria-describedby に接続されます。
value / defaultValuenumber-金額の数値です。value を渡すと controlled、defaultValue では uncontrolled として動きます。
onValueChange(value: number | undefined) => void-入力値が数値に変換された時に呼ばれます。空欄では undefined を返します。
currencystring"JPY"通貨記号と表示に使う ISO 4217 コードです。
localestring"ja-JP"桁区切りと通貨記号の表示に使う locale です。
showSymbolbooleantrue先頭の通貨記号を表示するかを指定します。
min / maxnumber-入力できる金額の下限と上限です。入力中に範囲内へ丸めます。
disabledboolean-金額入力を無効化します。docs では理由を Tooltip で説明します。

使い方

import * as React from "react";
import { CurrencyInput, formatCurrency } from "@gunjo/ui";

export function InvoiceAmountField() {
  const [amount, setAmount] = React.useState<number | undefined>(1200000);

  return (
    <div className="flex w-full max-w-sm flex-col gap-3">
      <CurrencyInput
        id="invoice-amount"
        label="請求金額"
        description="入力値は数値として保持し、表示時だけ通貨表記にします。"
        value={amount}
        onValueChange={setAmount}
        min={0}
        max={5000000}
        currency="JPY"
        locale="ja-JP"
      />
      <p className="text-sm text-muted-foreground">
        表示: {amount !== undefined ? formatCurrency(amount) : "未入力"}
      </p>
    </div>
  );
}

使用コンポーネント

設計の判断(UIXHERO)

「いつ・なぜ使うか」の判断は、姉妹サイト UIXHERO の記事で解説しています。