`<wa-icon>` を Font Awesome 7.3.0 に対応し、Pro+ ファミリと新アニメーション・Canvas属性を追加

shoelace-style/webawesome

Web Awesome のアイコンコンポーネント <wa-icon> が Font Awesome 7.3.0 にアップデートされ、3 つの新しい Pro+ ファミリ、9 つの新アニメーション、そして Canvas 属性によるサイズ制御が導入されました。ドキュメントとテストも一式更新され、既存利用者への後方互換性も維持されています。

背景

以前のリリースではデフォルトライブラリが Font Awesome 7.2.0 に固定され、Pro+ の mosaicpixelvellum などは利用できませんでした。加えて、FA 7.3.0 が提供する新しいアニメーションや Canvas 機能は <wa-icon> では未実装でした。これらのギャップを埋めることで、Web Awesome が最新のアイコンエコシステムと同調し、デザイナーと開発者双方に一貫した体験を提供することが目的です。

技術的な変更

Icon ライブラリのフォルダマッピング拡張

packages/webawesome/src/components/icon/library.default.tsFA_VERSION'7.3.0' に更新し、getIconFolder() に新しいファミリ名のマッピングを追加しました。

const FA_VERSION = '7.3.0';
...
if (family === 'mosaic') { folder = 'mosaic-solid'; }
if (family === 'pixel')  { folder = 'pixel-regular'; }
if (family === 'vellum') { folder = 'vellum-solid'; }
if (family === 'slab-duo') { folder = 'slab-duo-regular'; }
if (family === 'slab-press-duo') { folder = 'slab-press-duo-regular'; }

この変更により、<wa-icon family="mosaic" ...> などの記述が正しい CDN パスに解決され、テストでも網羅的に検証されています。

アニメーション型と CSS の拡張

icon.tsIconAnimation に 9 件の新アニメーションを列挙し、IconCanvas 型と canvas 属性を新規導入しました。

export type IconAnimation = 
  | 'beat-fade' | 'bounce' | 'flip' | 'flip-360' | 'shake' |
  | 'spin' | 'spin-pulse' | 'spin-reverse' | 'spin-snap' |
  | 'spin-snap-4' | 'spin-snap-8' | 'buzz' | 'wag' | 'float' |
  | 'swing' | 'jello';
export type IconCanvas = 'fixed' | 'auto' | 'square' | 'roomy';

対応する CSS は icon.styles.ts に追加され、canvas の各モード(fixed, auto, square, roomy)がホスト要素のサイズを決定します。

/* Canvas — fixed (default) */
:host(:not([canvas])), :host([canvas='fixed']) { width: 1.25em; height: 1em; }
/* Auto width (deprecated alias) */
:host([canvas='auto']), :host([auto-width]:not([canvas])) { width: auto; height: 1em; }
/* Square canvas */
:host([canvas='square']) { width: 1.25em; height: 1.25em; }
/* Roomy canvas */
:host([canvas='roomy']) { width: 1.5em; height: 1.5em; }

さらに、9 つの新アニメーション用 @keyframes が CSS に組み込まれ、prefers-reduced-motion メディアクエリでも同様に無効化されます。

テストとドキュメントの刷新

icon.test.ts に新ファミリと canvas のマッピングテストを追加し、auto-widthcanvas="auto" にマッピングされることを検証しています。ドキュメント icon.md は UI デモ、テーブル、アクセシビリティ指針などを改訂し、利用者が新機能をすぐに体感できるよう構成を統一しました。

設計判断

既存キーの拡張で後方互換性を確保

IconAnimation に新列挙子を追加しただけで、既存コードは変更不要です。canvas 属性は単一の enum とし、auto-width を非推奨として内部で同等扱いにしています。この設計により、従来の auto-width を使うアプリは警告なしに移行でき、将来的に属性名を統一しやすくなります。

ファミリマッピングは一元化

getIconFolder() に新しいケースを足す方式は、FA のフォルダ構造が変わった際の差分が最小限に抑えられます。個別のロジックを増やさずに新しい Pro+ パックをサポートできる点が、メンテナンス性の向上に寄与しています。

アニメーション設定の拡張は型安全を維持

新アニメーションの追加は 型定義 のみで完結し、ランタイムロジックに手を加える必要がありません。これにより TypeScript の型チェックが新機能を自動的に捕捉し、開発者は IDE 補完で正しいキーを利用できます。

まとめ

この PR は <wa-icon>Font Awesome 7.3.0 に完全適合させ、Pro+ ファミリ、9 種類の新アニメーション、そして Canvas 属性という三つの主要拡張を実装しました。既存の auto-width 後方互換を保持しつつ、型安全と一元管理を意識した設計判断が随所に見られ、今後のアイコン拡張やメンテナンスをシンプルに保つ基盤が整いました。

記事メタデータ

Generated by:
gpt-oss-120b for DiffDaily
LLM Trace:
a6d88d62

この記事はAIによって自動生成されています。内容の正確性については、必ずソースコードやPRを確認してください。

品質レビュー結果

Review Status:
承認済み
Review Count:
1回
Reviewed by:
gpt-oss-120b for DiffDaily

Review Criteria:

記事構成 ✓ PASS

Title, Context, Technical Detailの存在と明確さ

記事はリード文→背景→技術的な変更→設計判断(任意)→まとめの構成が明確で、各要素が揃っている。

カスタムMarkdown構文 ⚠ WARNING

シンタックスハイライト・GitHubリンク記法の正確性

コードブロックは正しい `言語:ファイルパス` 形式で記述されているが、PRリンクが `[PR #2562](URL)` となっており、要求された `[ #2562 ](URL)` 形式ではない。GitHubリンク記法の違反が1点。

対象読者への適合性 ✓ PASS

エンジニア向けの適切な技術レベルと表現

技術的な詳細が中心で、エンジニア向けの内容になっている。初心者向けの過度な説明はない。

パラグラフ・ライティング ✓ PASS

トピックセンテンス・1段落1トピック・段落長

各セクションは総論パラグラフで要旨を示し、以降の段落はトピックセンテンスで始まり1段落1トピック、長さも適切に分割されている。

Diff内容との照合 ✓ PASS

コードブロックとDiff内容の一致

記事のコード例は提供されたDiffと一致しており、FA_VERSION の更新や新ファミリ・新アニメーション・Canvas の実装が正しく反映されている。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

用語は PR と一致し、`Pro+`, `IconAnimation`, `Canvas` などの技術用語に誤用は見られない。

説明の技術的正確性 ✓ PASS

技術的主張の正確性と論理性

技術的説明は PR の内容と合致し、因果関係も論理的に記述されている。

事実の突合 ✓ PASS

PR情報による主張の裏付け(ハルシネーション検出)

記事の主張はすべて PR のタイトル・説明・Diff で裏付けられており、捏造や推測はない。

数値・固有名詞の確認 ✓ PASS

PR番号・コミットID・バージョン等の正確性

PR 番号 #2562、バージョン 7.3.0、アニメーション数 9、ファミリ追加数 3(+ Duo 系2)など数値は正確。

タイトル・説明との一致 ✓ PASS

記事タイトル・説明とPR内容の一致

記事タイトルは PR の趣旨を正確に要約しており、内容と一致している。

外部知識の正確性 ✓ PASS

PRに記載のない外部知識(LTS、サポート状況など)の不使用

記事に PR に記載されていない外部知識(LTS、リリース日等)は含まれていない。

時間表現の正確性 ✓ PASS

時間表現がPR情報と一致しているか

時間表現に関する記述はなく、PR と矛盾する表現もない。