ラジオグループのサイズ継承ロジックを修正
<wa-radio-group> のサイズ指定がない場合でも子要素の <wa-radio> が個別のサイズ指定を維持できるようになりました。これにより、グループ全体で統一サイズを使う場合と、個別にサイズを指定する場合の両方を意図通りに制御できます。
背景
<wa-radio-group size="*"> が実装と異なる動作をしていました。#2001 で報告されたとおり、ドキュメントのサイズ変更例が正しく動作せず、ラジオボタンのサイズ指定が意図しない形で上書きされていました。<wa-radio-group> のデフォルト値が 'medium' に設定されていたため、グループにサイズを指定しない場合でも子要素の <wa-radio> の明示的なサイズ指定が上書きされていました。
技術的な変更
packages/webawesome/src/components/radio-group/radio-group.ts の size プロパティと 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は、コンポーネント間のプロパティ継承ロジックの不整合を修正した変更です。デフォルト値の削除と条件分岐の追加により、明示的な指定の有無が実際の動作に正しく反映されるようになり、ドキュメントで示された柔軟なサイズ制御が実現されています。