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.2imgロールは 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.2imgロールの 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
overlayAPI Reference
Arguments
| Name | Type | Default | Description |
|---|---|---|---|
value | &str | (必須) | 符号化対象文字列(encode の入力)。マークアップへは一切出力されない。 |
ecc | ErrorCorrectionLevel | ErrorCorrectionLevel::L | 誤り訂正レベル(L/M/Q/H、回復率 約 7%〜約 30%)。 |
quiet_zone | u32 | DEFAULT_QUIET_ZONE (4) | frame/pattern の静粛帯モジュール数(ISO/IEC 18004 が要求する最小静粛帯)。 |
aria_label | Option<&str> | None | Some のとき 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
| Attribute | Description |
|---|---|
| role | frame(svg)へ aria_label 指定時のみ "img" を付与する(未指定時は付与しない)。 |
| aria-label | frame へ aria_label 指定時のみ付与する。 |
| (キーボード操作) | QrCode は非インタラクティブな表示部品のためキーボード操作を持たない(参照サイト ark-ui / chakra-ui とも同様。Radix Primitives / Radix Themes に QR Code は存在しない)。 |