Tinyrack

Input

ラベル、ref、妥当性、フォーム送信を保持するトークン化されたネイティブ input です。

主なプロパティ

TRInput はネイティブの <input> をレンダーし、props、ref、イベント、妥当性、フォーム動作を保持します。TRField.Root で包み、TRField.Label を添えてください。フィールドがラベルと入力を関連付けるため、idhtmlFor を自分で書く必要はありません。説明は TRField.Description、検証メッセージは TRField.Error に置くと、フィールドが aria-describedby で関連付けます。

密度の高いコントロールには uiSize="md"、通常のフォームにはデフォルトの md、大きな操作領域が必要な場合は lg を使います。disabledreadOnlyrequired はネイティブの意味と Tinyrack の状態スタイルを保持します。フィールド全体の状態は TRField.Rootdisabledinvalid で指定し、囲むフィールドがない場合にだけ input へ aria-invalid を付けてください。

テキストの隣にアイコンやボタンを置くときは、input を TRInput.Group で包みます。枠線・背景・フォーカスリングはグループが描き、中の input は枠を持たなくなるため、全体がひとつのコントロールとして読めます。コントロールの高さはグループが持つので、サイズは input ではなくグループに指定してください。静的な内容には TRInput.Adornment を使います(ポインターイベントを受け取らないため、クリックしても input にフォーカスが移ります)。押せるものには TRInput.Action を使い、これは既定で type="button" なので囲むフォームを送信しません。アクションには必ずアクセシブルな名前を付け、装飾的なアイコンには aria-hidden を付けてフィールドの名前がひとつに保たれるようにしてください。

インストール

pnpm add @tinyrack/ui

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

スタイル

@import '@tinyrack/ui/components/input.css';

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

インポート

import { TRInput } from '@tinyrack/ui/components/input';
import { TRButton } from '@tinyrack/ui/components/button';

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

プレイグラウンド

使用方法

API

TRInputProps は Base UI Input のプロパティを拡張し、デフォルトが mduiSize?: 'md' | 'lg' を追加します。nametypeautoCompletedisabledreadOnlyrequired などのネイティブ input 属性に加え、refclassNamestyle、イベントハンドラーを転送します。

制御されたテキストには valueonValueChange(value, details) を使い、ネイティブの非制御およびフォームリセット動作には defaultValue を使います。イベントオブジェクトが必要な場合はネイティブの onChange を使います。aria-invalid="true"、Base UI の data-invalid、ネイティブの :invalid はすべて無効状態の枠線を有効にします。render プロパティはレンダリングされる要素を置き換え、Base UI が動作、状態、ref.tr-input スタイルをマージします。

TRInput.Groupdiv をレンダーし、既定が mduiSize?: 'md' | 'lg' を受け取ります。ネイティブの div プロパティと ref を転送します。その中に置かれた input はグループのコントロールスタイルを自動的に受け取るため、グループのクラス名を自分で書く必要はありません。TRInput.Adornmentspan をレンダーし、既定が startside?: 'start' | 'end' を受け取ります。TRInput.Actionbutton をレンダーし、明示的に上書きしない限り type="button" になります。各パーツは TRInputGroupTRInputAdornmentTRInputAction として個別にもエクスポートされ、対応するプロパティ型も提供されます。