Theming documentation overhaul and interactive component refactor
Web Awesome のテーマ機能に関するドキュメントが大幅に刷新され、インタラクティブな UI コンポーネントとビルド時トランスフォーマが新規実装されました。本稿では変更の背景、具体的な実装内容、そして設計上の判断ポイントを整理します。
背景
Web Awesome のテーマ体系は「テーマ → カラーパレット → バリアント → カラースキーム」の階層構造で提供されていますが、従来のドキュメントはページが分散し、ユーザーが体系全体を俯瞰しにくい状態でした。また、テーマやパレットのプレビューが静的画像に頼っていたため、カスタマイズ手順の体感が不足していました。今回の PR はこれらの課題を解消し、開発者がテーマシステムを容易に理解・試用できるようにすることを目的としています。
技術的な変更
ドキュメント構造の再編
-
theming-overview.mdが新規追加され、テーマ体系の全体像と各セクションへのナビゲーションを提供。 -
customizing.mdが大幅に拡張され、ライト/ダークモードやカラースキームの自動検出、CSS カスタマイズ手順が追記。 - 既存の
themes.njkとcolor-palettes.njkがリファクタリングされ、共通 UI コンポーネント(theme-picker.njk,theme-viewer.njk,color-palette-picker.njk,color-palette-viewer.njk)が抽出・再利用可能化。 - サイドバー (
sidebar.njk) のリンク順序とラベルが新しいオーバービュー構造に合わせて更新。
インタラクティブコンポーネントの追加
-
テーマ選択 UI:
theme-picker.njkは<wa-tab-group>と<wa-tab>を用いてテーマ一覧をタブ表示し、Pro テーマはアクセス権に応じて無効化/バッジ表示するロジックを追加。 -
パレット選択 UI:
color-palette-picker.njkも同様にタブ方式でパレットを切り替え、選択に応じて CSS ファイルを動的に切り替えるスクリプト (tabGroup.addEventListener('wa-tab-show')) を実装。 -
プレビュービューア:
theme-viewer.njkとcolor-palette-viewer.njkがそれぞれテーマ・パレットの実列プレビューを提供し、wa-zoomable-frameとwa-comparisonによりライト/ダーク比較が可能に。 -
ヘルパーマクロ:
pro-badge.njkがマクロ化され、プロ限定アイテムのバッジ生成ロジックが簡潔化され、余計な改行が除去。
ビルドパイプラインの拡張
-
docs/_transformers/dynamic-snippets.jsが新規追加され、Prism ハイライト後に動的スニペット用の<span data-dyn>と<span data-opt>を埋め込むトランスフォーマを提供。これにより、テーマ・パレット選択に応じたコード例がクライアント側でリアルタイムに更新できるようになりました。 -
docs/.eleventy.jsにdynamicSnippetsTransformerのインポートと組み込みが追加され、ビルド時に新トランスフォーマが適用されます。
小規模修正
-
color-scheme-selector.njkにドキュメントへのリンク項目と URL ナビゲーションロジックが挿入。 -
theme-selector.njkのアイコンがbrushからpaletteに変更され、UI の一貫性が向上。 -
button.md、zoomable-frame.md、usage.md、utilities/native.mdなど数カ所のテキスト修正が実施されています。
設計判断
-
UI コンポーネントの抽出: 既存のページ固有実装から共通パーツ(ピッカー・ビューア)へ切り出すことで、テーマ関連ドキュメント全体で UI の一貫性と保守性を確保する判断が示されています。新規コンポーネントは Web Components (
wa-プレフィックス) をそのまま利用し、既存フレームワークと整合性を保ちつつ再利用を促進しています。 -
動的コードスニペット:
dynamicSnippetsTransformerは「ビルド時に静的ハイライトを生成しつつ、ランタイムで差し替え可能なプレースホルダーを残す」アプローチを採用。Prism のトークン構造を壊さない実装は、ハイライトの色付けを維持しながら動的置換を実現できる点で設計上のトレードオフ(ビルド複雑性増加 vs UI リッチ化)を明確にしています。 -
プロ機能のガード:
pro-badge.njkと各 UI のdata-pro-badge/disabled属性による条件表示は、アクセス権チェックをテンプレートレベルで完結させ、サーバーサイドロジックへの依存を回避する設計方針です。これにより、静的サイト生成時点で権限に応じた UI が自動的に調整されます。
まとめ
本 PR はテーマ系ドキュメントを体系化し、インタラクティブコンポーネントと動的スニペット機構を新規実装することで、ユーザーがテーマやカラーパレットを試しながら学習できる環境を整えました。コード面ではテンプレートの抽象化とビルドトランスフォーマの追加により、保守性と拡張性が向上しています。