Tinyrack

OTP Field

アクセシブルな 1 つの input でワンタイムコードを受け取り、分割されたビジュアルサーフェスとして表示します。

主なプロパティ

プロパティ動作
valuedefaultValue で非制御、valueonValueChange で制御状態として動作
input入力、コード全体の貼り付け、削除、フォーカス移動、1 つのネイティブフォーム値をサポート
autocomplete最初のスロットは既定で one-time-code となり、パスワードマネージャーとプラットフォームの自動入力に対応
length値を制限し、完了と妥当性を決定する。同じ数の Input パーツを明示的にレンダリングする必要がある

インストール

pnpm add @tinyrack/ui

長い行はコード領域を横にスクロールして確認できます。

スタイル

@import '@tinyrack/ui/components/otp-field.css';

長い行はコード領域を横にスクロールして確認できます。

インポート

import { TROTPField } from '@tinyrack/ui/components/otp-field';

長い行はコード領域を横にスクロールして確認できます。

プレイグラウンド

使用方法

サイズ パーマリンク

uiSize を指定して OTP スロットの高さを隣の Input、Button、NumberField と揃えます。

貼り付け、完了、拒否された文字 パーマリンク

4 桁の code を貼り付けるか文字を入力し、accepted、completed、rejected の event reason を確認します。

API

TROTPField.RootTROTPField.InputTROTPField.Separator namespace member を使います。同じ subpath は prefix 付きの TROTPFieldRootTROTPFieldInputTROTPFieldSeparator binding と prop/state type も export しますが、bare の RootTRInputTRSeparator binding は export しません。

パーツ主な props
Rootlength, value, defaultValue, onValueChange, onValueComplete, onValueInvalid, validationType, normalizeValue, autoComplete, inputMode, mask, name, form, required, disabled, readOnly, autoSubmit, uiSize, ref, render
Inputネイティブ input props、classNamestyleref、Base UI の render
Separatororientation(既定値は vertical)、TRSeparator props、ref

Root はラベル付きの role="group" をレンダリングします。表示ラベルを用意し、aria-labelledby で関連付けてください。スロット ID はルートの id から派生し、最初のスロットには既定で one-time-code 自動入力が適用されます。uiSize?: 'md' | 'lg'(既定値 md) ですべてのスロットとセパレーターの高さを一括で調整できます。値イベントの details.reason で入力、削除、貼り付け、キーボード変更を区別できます。無効なフィールドはフォームデータから除外され、読み取り専用フィールドは値を送信します。