Skip to content
fandhe-frontendcore v0.4.3
GitHub

QR Code

QR コード(ISO/IEC 18004 Model 2、byte モード)を表示する unstyled 部品です。外部依存ゼロのエンコーダで文字列からモジュール行列を導出する純粋な変換のみを提供し、符号化対象の文字列自体はマークアップへ出力されません。

Themes 版(fandhe-frontend-pre-styled-ui)はこの構造へ既定 CSS を追加するだけの薄いラッパーであり、CSS は持ちません。スタイル済みの表示例は QR Code を参照してください。

アクセシビリティ

  • frame(svg)は aria_label を指定したときのみ role="img" + aria-label を付与します。未指定時はどちらも付与しません(WAI-ARIA 1.2 img ロールは Accessible Name Required のため、名前のない img ロールを名乗って偽の説明文を捏造しません)。aria-labelledby 等の別経路で名前付けしたい場合は attrs に role/aria-labelledby を渡してください。
  • frame には xmlns="http://www.w3.org/2000/svg" を固定付与します(SVG 単体をシリアライズしても名前空間解決できるようにするため)。
  • キーボード操作はありません(QrCode は非インタラクティブな表示部品です。参照サイト ark-ui / chakra-ui もキーボード操作表を持ちません。Radix Primitives / Radix Themes に QR Code は存在しません)。
  • DownloadTrigger(QR 画像のダウンロードボタン)は提供しません。生成画像を a[download] の data: href に載せる経路が必要になりますが、fandhe_frontend_core::is_safe_url が data: URL を拒否し属性ごと欠落するため、静的 SSR の枠内では動作しない部品を追加しない判断です。

関連 API: fandhe-frontend-headless-ui API

Demo

枠線・余白は docs サイト側のデモ枠であり、fandhe-frontend-headless-ui 自体はスタイルを持ちません。

FW

Features

  • Root/Frame/Pattern/Overlay の 4 anatomy パーツを提供する。開閉・選択のような遷移可能な状態を持たないため状態機械は実装せず、自由関数のみで構成される(crate::tabs/crate::field と同じ区分)。
  • QR Model 2(ISO/IEC 18004)byte モードの外部依存ゼロエンコーダで value/ecc から一意にモジュール行列を導出する純粋な変換。符号化対象の value 文字列そのものはマークアップへ一切出力されない。
  • frame(svg)は xmlns を常に固定付与し(イシュー #1634、SVG 単体シリアライズでも名前空間解決できるようにする)、aria_label を指定したときのみ role="img" + aria-label を付与する。未指定時はどちらも付与しない(WAI-ARIA 1.2 img ロールの Accessible Name Required 要件に合わせた fail-closed な是正、イシュー #1634。偽の説明文は捏造しない)。
  • pattern(path)の d 属性値は暗モジュールの座標から内部生成する文字列で、文字集合は M/h/v/z/半角数字/, に閉じる。fill は付与せず styled 層/呼び出し側 CSS の責務とする。
  • 呼び出し側 attrs はフレームワーク固定属性(frame の viewBox/xmlns/role/aria-label、pattern の d)をなりすませない(重複キーは dedup で除外される、イシュー #1634)。

Anatomy

root
  frame
    pattern
  overlay

API Reference

Arguments

NameTypeDefaultDescription
value&str(必須)符号化対象文字列(encode の入力)。マークアップへは一切出力されない。
eccErrorCorrectionLevelErrorCorrectionLevel::L誤り訂正レベル(L/M/Q/H、回復率 約 7%〜約 30%)。
quiet_zoneu32DEFAULT_QUIET_ZONE (4)frame/pattern の静粛帯モジュール数(ISO/IEC 18004 が要求する最小静粛帯)。
aria_labelOption<&str>NoneSome のとき frame へ role="img" + aria-label を付与する。None のときはどちらも付与しない(偽の代替テキストを作らない)。aria-labelledby 等の別経路で名前付けしたい場合は attrs に ("role", "img") を渡せる。

Examples

aria_label を省略した変種

aria_label に None を渡すと role/aria-label とも付与されません(Zag.js 準拠)。名前付けが必要な場合は attrs で role/aria-labelledby を渡してください。

自前 CSS の最小例

headless-ui はスタイルレスであるため、root/frame/pattern/overlay の data-* 属性セレクタで見た目を組み立てます。

利用者が data-scope / data-part 属性セレクタで自前 CSS を当てます。Overlay を使うため誤り訂正レベルは Q 以上を選びます。

FW
CSS
[data-scope="qr-code"][data-part="root"] {
  position: relative;
  display: inline-block;
}
[data-scope="qr-code"][data-part="frame"] {
  width: 160px;
  height: 160px;
}
[data-scope="qr-code"][data-part="pattern"] {
  fill: #111827;
}
[data-scope="qr-code"][data-part="overlay"] {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  background: #ffffff;
  padding: 4px;
  border-radius: 4px;
}

Accessibility

WAI-ARIA

AttributeDescription
roleframe(svg)へ aria_label 指定時のみ "img" を付与する(未指定時は付与しない)。
aria-labelframe へ aria_label 指定時のみ付与する。
(キーボード操作)QrCode は非インタラクティブな表示部品のためキーボード操作を持たない(参照サイト ark-ui / chakra-ui とも同様。Radix Primitives / Radix Themes に QR Code は存在しない)。