ラジオグループのサイズ継承ロジックを修正

shoelace-style/webawesome

<wa-radio-group> のサイズ指定がない場合でも子要素の <wa-radio> が個別のサイズ指定を維持できるようになりました。これにより、グループ全体で統一サイズを使う場合と、個別にサイズを指定する場合の両方を意図通りに制御できます。

背景

<wa-radio-group size="*"> が実装と異なる動作をしていました。#2001 で報告されたとおり、ドキュメントのサイズ変更例が正しく動作せず、ラジオボタンのサイズ指定が意図しない形で上書きされていました。<wa-radio-group> のデフォルト値が 'medium' に設定されていたため、グループにサイズを指定しない場合でも子要素の <wa-radio> の明示的なサイズ指定が上書きされていました。

技術的な変更

packages/webawesome/src/components/radio-group/radio-group.tssize プロパティと syncRadioElements() メソッドが修正されました。

変更前:

@property({ reflect: true }) size: 'small' | 'medium' | 'large' = 'medium';

// syncRadioElements()内
radios.forEach((radio, index) => {
  radio.setAttribute('size', this.size);
  // ...
});

変更後:

@property({ reflect: true }) size: 'small' | 'medium' | 'large';

// syncRadioElements()内
radios.forEach((radio, index) => {
  if (this.size) radio.setAttribute('size', this.size);
  // ...
});

デフォルト値 'medium' を削除し、size が設定されている場合のみ子要素に伝播するよう条件分岐を追加しています。これにより、<wa-radio-group> にサイズ指定がない場合は、<wa-radio> の個別指定が維持されます。

updated() ライフサイクルメソッドにも size の変更監視が追加され、サイズ変更時に確実に子要素へ反映されるようになりました:

updated(changedProperties: PropertyValues<this>) {
  if (changedProperties.has('disabled') || changedProperties.has('size') || changedProperties.has('value')) {
    this.syncRadioElements();
  }
}

ドキュメントも修正され、グループ全体で統一サイズを使う例と、個別にサイズを指定する例の両方が明示されています:

<wa-radio-group label="Small options" size="small" value="1">
  <wa-radio value="1">Option 1</wa-radio>
  <wa-radio value="2">Option 2</wa-radio>
  <wa-radio value="3">Option 3</wa-radio>
</wa-radio-group>
<wa-radio-group label="Mixed options" value="medium">
  <wa-radio value="1" size="small">Small</wa-radio>
  <wa-radio value="2" size="medium">Medium</wa-radio>
  <wa-radio value="3" size="large">Large</wa-radio>
</wa-radio-group>

設計判断

デフォルト値の削除 という方針が採用されました。size プロパティに 'medium' のデフォルト値を持たせる代わりに、未定義状態を許容する設計に変更されています。

この判断により、<wa-radio-group> は「サイズを指定すればグループ全体に適用、指定しなければ個別指定を尊重」という明確な振る舞いを持つようになりました。TypeScriptの型定義上は size がオプショナルプロパティになり、実行時の if (this.size) チェックで伝播を制御しています。

<wa-radio> 側のデフォルト値も削除されているため、両コンポーネントの責任範囲が整理されています。グループがサイズを持つ場合はグループが責任を持ち、持たない場合は個別の指定または実装のデフォルトレンダリングに委ねられます。

まとめ

本PRは、コンポーネント間のプロパティ継承ロジックの不整合を修正した変更です。デフォルト値の削除と条件分岐の追加により、明示的な指定の有無が実際の動作に正しく反映されるようになり、ドキュメントで示された柔軟なサイズ制御が実現されています。

記事メタデータ

Generated by:
Claude Sonnet 4.5 for DiffDaily

この記事は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のIssue/PRリンク記法が正しく使用されており、カスタムMarkdown構文の要件を満たしています。

対象読者への適合性 ✓ PASS

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

プロパティ、ライフサイクルメソッドといった用語を適切に使用しており、専門知識を持つエンジニアという対象読者に適合した内容です。

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

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

各セクションが総論から各論へと展開され、各段落がトピックセンテンスで始まるなど、パラグラフ・ライティングの原則が守られており、可読性が高いです。

Diff内容との照合 ✓ PASS

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

記事内で引用されているコードブロック(変更前・変更後)は、提供されたDiff情報と完全に一致しており、正確です。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

「プロパティ継承」「デフォルト値」「ライフサイクルメソッド」などの技術用語が、文脈に沿って正確に使用されています。

説明の技術的正確性 ✓ PASS

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

「デフォルト値の削除」や「条件分岐の追加」といった変更点の説明は、Diffの内容と完全に整合しており、技術的に正確です。

事実の突合 ✓ PASS

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

記事内のすべての主張(問題の背景、技術的変更、設計判断)は、PRのDescriptionやDiff内のコードによって裏付けられており、ハルシネーションは検出されませんでした。

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

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

PR番号(#2005)やIssue番号(#2001)などの固有名詞が正確に記載されています。

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

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

記事のタイトル「ラジオグループのサイズ継承ロジックを修正」は、PRの主題である「Fix radio group size bug」の内容を的確に反映しています。

外部知識の正確性 ✓ PASS

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

記事には、PR情報に記載のないバージョンサポート状況やリリース日程などの外部知識は含まれておらず、事実に基づいた内容となっています。

時間表現の正確性 ✓ PASS

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

「〜されていました」といった過去形の表現が、PRの文脈(以前の動作の問題点)と一致しており、時間表現は正確です。