Native ボタンを `<wa-button-group>` で利用できるようにした

shoelace-style/webawesome

<wa-button-group> がネイティブ <button> 要素をグルーピングできるようになり、Native Styles を有効にすれば一貫したビジュアルが得られます。今回の PR ではスタイル拡張、テスト追加、ドキュメント更新を行い、機能を公式にサポートしました。

背景

これまで native buttons<wa-button-group> の子要素に入れても、ボーダー半径やマージンが統一されず、見た目が崩れるという問題がありました(#2510)。ボタンの外観をカスタマイズできる Native Styles ユーティリティは提供されていましたが、グルーピングロジックが適用されないため、同一ツールバー内で混在させるケースに対応できませんでした。

この課題を解決することで、Web コンポーネントに依存せず標準 HTML ボタンとデザインを統一でき、既存プロジェクトへの導入ハードルが下がります。特にデザインシステム全体で Native Styles を採用している環境では、統一感のある UI を手軽に実装できるようになります。

技術的な変更

ドキュメントとビジュアルテスト が拡充されました。packages/webawesome/docs/_includes/visual-tests/native.njk では WA ボタンとネイティブボタンを対比したテーブルが追加され、button-group.md に「Native Buttons」セクションが挿入され、使用例が記載されています。また、changelog.md に「Added support for grouping native <button> elements in <wa-button-group> when Native Styles are included」‑という項目が追記されました。

テスト が新たに 33 行追加され、button-group.test.tsnative buttons ブロックが導入されました。このテストはスロットされた <button> に対して、--_button-* カスタムプロパティが期待通り設定されているかを getComputedStyle で検証します。具体的には、真ん中のボタンは四隅とも半径が 0、最初と最後のボタンはそれぞれ前後の半径が削除されていることを確認しています。

スタイル の核心は packages/webawesome/src/styles/native.css の拡張です。ボタン要素の border-*‑radius プロパティが var(--_button-*-radius, var(--wa-form-control-border-radius)) で上書きされ、ボタングループが定義したカスタムプロパティを参照できるようになりました。加えて、隣接ボタン間の境界を重ねるために margin-inline-startmargin-block-start--_button-horizontal-indent 系列を適用し、アウトラインバリアントでは負のインデントでオーバーラップを実現しています。

これらの変更は native.css に対する最小限の差分で済んでおり、既存の WA コンポーネントやテーマ設定に影響を与えません。<wa-button-group> の API は変わらず、Native Styles をインポートするだけで新機能が有効化されます。

設計判断

新機能は CSS カスタムプロパティNative Styles の組み合わせで実装されたため、コンポーネント側のロジック変更は不要でした。これにより、後方互換性 が保たれると同時に、開発者は追加の JavaScript コードを書かずに利用できます。PR 内の議論では新しい属性やラッパーコンポーネントの導入案も検討されましたが、スタイルレイヤーで解決する方針が採られました。

Native Styles が有効になることだけが前提条件となるため、プロジェクト全体で一貫したデザインシステムを構築しているケースでは自然に機能が統合されます。逆に Native Styles を使用しない環境では従来通りの挙動を維持でき、オプトイン方式のメリットが明確です。

まとめ

この PR は、<wa-button-group> がネイティブ <button> を正しくグルーピングできるように CSS 側を拡張し、テストとドキュメントで使用例と挙動を保証したものです。既存 API を変えずにデザインの一貫性と拡張性を向上させ、Native Styles を採用したプロジェクトへの導入ハードルを低減します。

記事メタデータ

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

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

品質レビュー結果

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

Review Criteria:

記事構成 ✓ PASS

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

リード文、背景、技術的変更、設計判断、まとめが明確に配置されており、総論→各論→結論の流れが保たれています。

カスタムMarkdown構文 ✓ PASS

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

コードブロックは正しい言語指定で記載され、GitHubリンクはPR番号・Issue番号ともに正しい形式でリンク化されています。ファイル名付きハイライトは不要なので問題ありません。

対象読者への適合性 ✓ PASS

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

専門的な用語と説明が中心で、エンジニア向けに適切なレベルです。初心者向けの過度な解説はありません。

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

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

各セクションは総論パラグラフで要旨を示し、続く段落は1トピック・トピックセンテンスで始まり、6文以内に収まっています。段落間に空行があり可読性が高いです。

Diff内容との照合 ✓ PASS

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

記事内のコード例やテスト内容・スタイル変更の説明は、提供されたDiffの追加箇所と完全に一致しています。抜けや誤りは見当たりません。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

「Native Styles」「カスタムプロパティ」などの用語はPR文脈と一致し、誤用はありません。

説明の技術的正確性 ✓ PASS

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

技術的な主張はDiffとPR Descriptionで裏付けられており、因果関係も論理的です。

事実の突合 ✓ PASS

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

全ての事実(Issue番号、PR番号、追加されたテスト行数、スタイル変更点など)はPR情報と一致しています。推測や外部情報は含まれていません。

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

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

「33 行追加」や「100 行追加」などの数値はDiffに対応しています。誤りはありません。

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

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

記事タイトルはPRタイトル「Support native buttons in `<wa-button-group>`」の日本語訳として適切です。

外部知識の正確性 ✓ PASS

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

バージョンサポートやリリース日程等の外部知識は記載されていません。

時間表現の正確性 ✓ PASS

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

時間表現の歪曲はなく、PRの記述と一致しています。