コンテンツにスキップ

添付ファイル

hc-attachmentファイルカードです: アイコン、ファイル名、 サイズ、削除ボタンが 1 つのグリッド行に並びます。hc-attachments は それを包むリストです — hc-chips と同じく複数形です。添付ファイルの リストそのものだからで、本物の <ul>/<li> に保つことでセットが 読み上げ可能になります。純 CSS です: ドロップゾーンが ファイルを集め、 ファイルアップロードレシピが マルチパート + 進捗の契約を所有し、 hc-progressinstallUploadProgress() の駆動するバーです。

  • notes.md4 KB

data-state がなければファイルは確定 — アップロード済みで一覧に 載った状態です。アイコンのスロットにはインライン SVG(または絵文字の プレースホルダ)が入ります。装飾なので aria-hidden に保って ください。長いファイル名は行を壊さず、省略記号で切り詰められます。

data-state="uploading" はカードの進捗行を表示します — カードの 全幅にわたるネイティブの hc-progress 要素で、 htmx がフォームをアップロードする間、その valueinstallUploadProgress() が駆動します。data-state="error" は共有の ステータストークンでカードを 色づけします。

  • report.pdf1.2 MB
  • huge.iso9.8 GB

進捗行は data-state="uploading" の間だけ描画されます — サーバの 成功フラグメントは確定カード(状態なし、<progress> なし)をそのまま スワップし、失敗は data-state="error" をスワップします。

添付ファイルカードはファイルアップロードフローの表示側です。 残りの半分はすでに存在します:

  • ドロップゾーンが ファイルを集めます — ドロップはネイティブの <input type="file"> に 代入して普通の change を発火するので、周囲のフォームはいつも どおりシリアライズされます。
  • ファイルアップロードレシピが マルチパート + 進捗の契約を所有します: htmx がフォームを POST し、 installUploadProgress() が実際のアップロード進捗を <progress> 要素へ写し、レスポンスが確定フラグメントを追記してフォームを out-of-band でリセットします。
  • 削除コントロールは本物の <button> で、aria-label にファイル名を 含めます — 素の「×」ではなく「Remove report.pdf」です。
  • <ul>/<li> 構造により、セットは位置と件数つきで読み上げ可能です。 見出しが名前になっていないときはリストに aria-label を与えて ください。
  • <progress> はアクセシブルネームを持ちます(その aria-label も ファイル名を含む)。読み上げられるパーセンテージがどのファイルの ものか分かります。
  • アイコンは装飾(aria-hidden="true")です — アイデンティティは ファイル名のテキストが担います。

component トークン(component.tokens.json):

トークンパス用途
attachment.bg / border / radiusカードの面。
attachment.gapカード内のグリッドギャップとカード間のギャップ。
attachment.padding-block / padding-inlineカードのパディング。
attachment.name-fg / size-fgファイル名 / サイズの文字。
attachment.icon-sizeアイコンと削除ボタンの正方形。
attachment.error-bg / error-borderエラー状態のカード。
生成される CSS 変数を表示
--hc-attachment-bg | -border | -radius | -gap
--hc-attachment-padding-block | -padding-inline
--hc-attachment-name-fg | -size-fg | -icon-size
--hc-attachment-error-bg | -error-border

レシピでの利用: チャットメッセージ