`<wa-page>` がコア(無償版)へ移行

shoelace-style/webawesome

<wa-page> コンポーネントが Web Awesome Pro(有償)からコア(無償)へ移行され、すべてのユーザーが利用できるようになりました。ページ全体のレイアウトをスキャフォールドする機能が、ライセンスなしで使えるようになります。

背景

<wa-page> はこれまで Web Awesome Pro の一員として提供されており、サイドバーのナビゲーションでも proBadge() マクロと実験的機能アイコン(wa-icon name="flask")を伴う特別なエントリとして扱われていました。今回の変更はそのステータスを解除し、コアコンポーネントとして正式に格上げするものです。

changelog には「Moved <wa-page> from Web Awesome Pro to Web Awesome core」と明記されており、有償プランのリポジトリ側の対応 PR(webawesome-pro#178)とセットで行われています。

技術的な変更

コンポーネント本体(page.ts)とスタイル(page.styles.tspage.mobile.styles.ts)がコアパッケージに追加されました。これにより、Pro 側に依存していた実装がコアリポジトリで完結します。

page.tsWebAwesomeElement を継承した Lit ベースのカスタム要素です。スロットは bannerheadersubheadernavigation-headernavigationnavigation-footermain-headermain-footerasidefooter と多層構成になっており、すべてオプションです。スロットにコンテンツを渡さなければそのエリア自体が非表示になる設計で、必要なセクションだけをオプトインできます。

page.mobile.styles.ts はブレークポイントを引数に取る関数としてモバイル向けスタイルを分離しています。

export default (breakpoint: string = '768px') => `
  @media screen and (width < ${breakpoint}) {
    [part~='navigation'] {
      display: none;
    }

    :host(:not([disable-navigation-toggle])) slot[name~='navigation-toggle'] {
      display: contents;
    }
  }
`;

デスクトップではナビゲーション領域をインラインで表示し、モバイルでは <wa-drawer> に切り替える仕組みです。mobile-breakpoint プロパティでブレークポイントを変更でき、demo-1.html では 920px に設定する例が示されています。

page.styles.ts では CSS カスタムプロパティとして --menu-width--main-width--aside-width などのレイアウト変数を :host スコープで定義しています。また、--banner-height--header-height--subheader-height を使って --scroll-margin-top を自動計算する仕組みも含まれており、固定ヘッダーのある画面でアンカーリンクがヘッダーに隠れる問題を構造的に防いでいます。

サイドバーナビゲーション(sidebar.njk)では、Pro バッジ付きのエントリが2箇所から削除され、通常コンポーネントとして「P」の位置(アルファベット順)に追加されています。

変更前(Pro バッジ付き):

<li>
  <span class="wa-split">
    <a class="wa-cluster wa-gap-xs" href="/docs/components/page/">
      Page
      <wa-icon name="flask" aria-hidden="true" class="icon-shrink de-emphasize"></wa-icon>
    </a>
    {{ proBadge() }}
  </span>
</li>

変更後(通常リンク):

<li><a href="/docs/components/page/">Page</a></li>

ドキュメントとして page.md(コンポーネントリファレンス)、インタラクティブな anatomy デモ(anatomy-demo.html / .css / .js)、および2つのサンプルページ(ドキュメントサイト風・メディアアプリ風)が同時に追加されています。

設計判断

CSS カスタムプロパティによるレイアウト制御 を採用しており、各カラム幅をユーザーがオーバーライドできる設計になっています。documentation.md のサンプルでは --menu-width: 15rem; --aside-width: 15rem; を直接指定しており、グリッドレイアウトの細部をコンポーネント内部に閉じ込めつつ、カスタマイズポイントをカスタムプロパティとして公開するアプローチです。

toPx / toLength 関数についてはコード内に TODO コメントが残されており、「ユーティリティとして抽象化するには命名や文書化が不十分」と明示されています。現段階ではコンポーネント内部に留める判断がされており、将来の整理が予定されていることが読み取れます。

モバイルスタイルを通常スタイルと分離して関数で提供する構造は、ブレークポイントを動的に変更できる mobile-breakpoint プロパティの実装に直結しています。文字列テンプレートとして生成することで @media クエリ内の値をランタイムに差し替えられるようにした判断です。

まとめ

<wa-page> のコア移行は、単なるライセンス変更にとどまらず、スロットベースのレイアウト設計・レスポンシブ対応・スクロールオフセットの自動計算など、成熟したコンポーネントとしての実装を伴う格上げです。Pro からの移行でありながらコードと充実したドキュメントが一緒に追加されたことで、コアユーザーが即日利用を開始できる状態が整っています。

記事メタデータ

Generated by:
Claude Sonnet 4.6 for DiffDaily
LLM Trace:
c0848cf4

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

品質レビュー結果

Review Status:
承認済み
Review Count:
1回
Reviewed by:
Gemini 2.5 Pro for DiffDaily

Review Criteria:

記事構成 ✓ PASS

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

リード文(総論)→背景・技術詳細・設計判断(各論)→まとめ(結論)という「総論→各論→結論」の3部構成が明確に適用されています。必須要素はすべて満たしており、構成は模範的です。

カスタムMarkdown構文 ✓ PASS

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

ファイル名付きシンタックスハイライト(```言語:ファイルパス)およびGitHubのPR番号リンク記法が正しく使用されています。

対象読者への適合性 ✓ PASS

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

コンポーネントの内部実装やリポジトリ構造の変更に言及しており、専門知識を持つエンジニアという対象読者に完全に適合しています。

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

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

各セクションが「総論→各論」で構成され、各段落はトピックセンテンスで始まっています。1段落1トピックの原則が守られ、段落長も適切で非常に読みやすいです。

Diff内容との照合 ✓ PASS

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

記事内で引用されているコードブロック(page.mobile.styles.ts, sidebar.njk)は、提供されたDiff情報と完全に一致しています。ファイル名も正確です。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

「Lit」「カスタム要素」「スロット」「CSSカスタムプロパティ」など、使用されている技術用語はすべて正確で、文脈に適しています。

説明の技術的正確性 ✓ PASS

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

コンポーネントの継承関係、スロット構成、スタイルの実装方法に関する説明は、すべてDiff情報によって裏付けられており、技術的に正確です。

事実の突合 ✓ PASS

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

記事内のすべての主張(Proからコアへの移行、関連PRの存在、TODOコメントの内容など)は、PRのTitle, Description, Diff内の情報で裏付けられており、ハルシネーションは検出されませんでした。

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

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

PR番号(#2244)や関連PR番号(webawesome-pro#178)などの数値・固有名詞はすべて正確に記載されています。

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

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

記事のタイトル「`<wa-page>` がコア(無償版)へ移行」は、PRのタイトル「Move `<wa-page>` from pro to core」の内容を的確に反映しています。

外部知識の正確性 ✓ PASS

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

記事には、PR情報に基づかない外部知識(バージョンサポート状況、リリース日程など)は一切含まれておらず、信頼性が高いです。

時間表現の正確性 ✓ PASS

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

記事内の「移行され」「利用できるようになった」といった時間表現は、PRの内容と整合性が取れています。