コンテンツにスキップ

ドロップゾーン

hc-dropzone は、ネイティブの <input type="file"> をドロップ面で 飾ります。対話要素はあくまで input です: 包んでいる <label> が クリックでピッカーを開き、キーボードフォーカスは(視覚的に隠されて いるがフォーカス可能な)input に着地し、required / accept / field-errors の配線はいつもどおり input に付きます。ドラッグ& ドロップはポインタ専用のエンハンスメントです — ドロップは dataTransfer.files を input に代入して普通のバブリングする change を発火するため、下流のすべて(フォームシリアライズ、 ファイルアップロードレシピ、 バリデーション)からは、ファイルが「参照」で選ばれなかったことを 見分けられません。

別名: ファイルドロップ、ドラッグ&ドロップアップロード。

.hc-dropzone__files は選択されたファイル名を表示します(ドロップでも 参照でも、change のたびにビヘイビアが設定)。空のときは畳まれます。 ヒントは作者が書くマークアップです — アプリの言語で書いてください。

自動初期化の ./behaviors バンドルに含まれます。ファイルがゾーンの上をドラッグしている間は data-dragover を設定し(スタイルは下記)、ドロップはファイルを input に代入して — 単一ファイルの input は最初の 1 つだけを取り — バブリングする change を発火します。ファイルを運ばないドラッグ (テキスト選択)は無視され、input が disabled のゾーンも同様です。 新しいイベントなし、ネットワークなし。

状態セレクタ効果
ドラッグオーバー[data-dragover]実線のアクセント枠線(--hc-dropzone-dragover-borderdata-color に追従)+ ティント背景。
キーボードフォーカス:focus-within標準のフォーカスリング(フォーカスは input 上)。
無効:has(> .hc-dropzone__input:disabled)ミュート表示、cursor: not-allowed。ビヘイビアはドロップを無視。
無効値:has(> .hc-dropzone__input[aria-invalid="true"])エラー枠線 — 他のコントロール同様、field-errors が設定。

data-size="sm" は密なフォーム向けにパディングを詰めます。

アップロードは ファイルアップロードレシピの 契約です: フォームの data-hx-encoding="multipart/form-data"installUploadProgress() によるライブ進捗、サーバのレスポンスの形は すべてそこにあります。ドロップゾーンはそのフォームに無変更で差し込め ます — ドロップは「参照」と同じネイティブの change に行き着きます。

  • キーボードや支援技術の利用者が必要とするものはすべてネイティブの input です: ラベルによる起動、フォーカス + Enter/Space、制約 バリデーション、 field-errors からの aria-invalid / aria-describedby
  • ドラッグ&ドロップはエンハンスメントです。すべての結果は「参照」 経由で到達可能です。ARIA の発明はありません。
  • 選択された名前はラベル内の見えるテキストです。それ以上の読み上げが 必要なら、トーストと組み合わせてください。
  • 非目標(v1): ペーストによるアップロード、ディレクトリのドロップ。

component トークン(component.tokens.json)— すべて semantic トークンを参照するため、テーマ、アクセント(data-color)、ダーク モードが自動で適用されます:

トークンパス用途
dropzone.bg / fg面の背景とテキスト。
dropzone.border破線の枠線色。
dropzone.hintヒントテキストの色。
dropzone.radius角丸。
dropzone.padding-y / padding-x面のパディング(data-size="sm" が上書き)。
dropzone.dragover-border / dragover-bgドラッグオーバーのアクセント(data-color に追従)。
dropzone.error-border無効値状態の枠線。
生成される CSS 変数を表示
--hc-dropzone-bg | -fg | -border | -hint | -radius
--hc-dropzone-padding-y | -padding-x
--hc-dropzone-dragover-border | -dragover-bg
--hc-dropzone-error-border

レシピでの利用: チャットメッセージ · ファイルアップロード