FileInput

ファイルを選択し、添付する内容を確認します。

PDFを複数選択できます。選び直すと選択内容を入れ替えます。

1ファイル・必須・エラー・利用不可

画像を1ファイル選択できます。

PDF形式のファイルを選び直してください。

グループ全体が利用不可

使いどころ

  • フォームにファイルを添えて送る時に使います。
  • 既に添えたファイルや保存済みのファイルを一覧で見せる時は FileItem を使います。画像の切り抜く範囲を決める時は ImageCropper を使います。

使い方

label を渡し、name・multiple・accept・required・disabled・form などの標準の属性は、そのまま中の input type="file" に付きます。help・error は Field と同じく欄の下に出して入力に関連付けます。

欄はBasecamp 2のファイルの追加の欄と同じく、白い面に「ここに置ける」ことを示す1px #d5d5d5 の破線の枠(角丸3px)を付け、灰色のクリップのアイコン・灰色(#757575)のドロップの案内・そのすぐ後ろに「ファイルを選択」のリンクの形の操作(青緑の文字に下線)を一文のように並べます。ファイルを欄の上へ運ぶと、枠を青緑の実線にして淡い青緑の面を敷きます。error の時は枠を淡い赤にして淡い赤の面を敷き、アイコンを赤にします。disabled の時は形と面をそのままにし、文字とアイコンだけを灰色にして、ドロップの案内を隠します。タッチの画面ではドロップの案内を出しません。標準のファイル選択に加え、ドロップ・選んだファイルの一覧・選択の解除を持ちます。欄にファイルをドロップすると選んだのと同じになり、選んだファイルは FileItem の形で名前と大きさを並べます。「選択を解除」で選択を空にし、フォーカスを入力に戻します。

選び直しは置き換えで、前に選んだファイルに追加しません。multiple の無い欄に複数のファイルをドロップすると受け付けず、「一度に選択できるのは1ファイルです。」と知らせます。

accept は選択ダイアログと同じく、ドロップにも当てはめます。accept に当てはまらないファイルを含むドロップは受け付けず、「選択できない形式のファイルが含まれています。」と知らせます。拡張子(.pdf)・種類(image/*)・MIME(application/pdf)の書き方を、大文字と小文字を区別せずに比べます。

accept は選ぶ時の手がかりで、送られるファイルの保証ではありません(選択ダイアログでは全てのファイルを選べることがあります)。形式・容量の確かめと、アップロード・保存は送信先で行います。このコンポーネントは送信先や保存先を持ちません。

変更のイベント:選択・ドロップ・解除のどれでも、入力に標準の input・change を発火します。ドロップでは、取り消せる file-drop:beforedrop と、その後の file-drop:drop も発火します。フォームのリセットでは一覧も空に戻します。

JavaScriptが無い時は、標準のファイル選択をそのまま表示して送信できます。ドロップと一覧、選択の解除は使えません。

アクセシビリティ

  • 操作とフォーカスは標準のファイル入力が持ちます。見た目の「ファイルを選択」は入力のラベルで、読み上げからは外します。
  • 選んだファイルの一覧は「〜で選択したファイル」の名前を持ちます。選んだ件数と解除は role="status" で「n件のファイルを選択しました。」「選択を解除しました。」と知らせます。
  • error を渡すと、入力に aria-invalid を付け、誤りの文を aria-describedby に加えます。

イベント

FileInputが発火するイベント
イベント内容
file-drop:beforedropドロップしたファイルを入力に入れる前に出します。取り消せます。detailは { files } で、ドロップした File の配列です。accept に当てはまらないファイルを含むドロップは、このコンポーネントが取り消します。
file-drop:dropドロップしたファイルを入力に入れた後に出します。detailは file-drop:beforedrop と同じです。

API

FileInput

FileInputのprops
名前型既定値説明
label必須string欄の名前。選んだファイルの一覧の読み上げ名(「〜で選択したファイル」)にも使う。
helpstring欄の下に出す補足。ファイル入力のaria-describedbyに関連付ける。
errorstring欄の下に出すエラー文。ファイル入力をaria-invalidにする。形式・容量の検証は利用側で行う。

ほかのpropsはInputへそのまま渡します。

登録するcontroller:file-input(FileInputController)

読み込むCSS:layers.css、reset.css、tokens.css、base.css、layout.css、components/button.css、components/field.css、components/file-input.css、components/file-item.css、components/icon.css

コード

HTML
Hono JSX