From 64ad1edac1c5742f4808494d4a42e84e18861a17 Mon Sep 17 00:00:00 2001 From: kavyansh18 Date: Sat, 5 Sep 2026 20:20:57 +0530 Subject: [PATCH] fix(select): avoid invalid radio group structure --- .../select-modal/select-modal.md.scss | 11 +++++-- .../components/select-modal/select-modal.tsx | 2 +- .../test/basic/select-modal.e2e.ts | 32 +++++++++++++++++++ 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/core/src/components/select-modal/select-modal.md.scss b/core/src/components/select-modal/select-modal.md.scss index bf36299137b..90e8eab000b 100644 --- a/core/src/components/select-modal/select-modal.md.scss +++ b/core/src/components/select-modal/select-modal.md.scss @@ -2,15 +2,22 @@ @import "./select-modal"; @import "../../themes/ionic.mixins.scss"; @import "../item/item.md.vars"; +@import "../list/list.md.vars"; -ion-list ion-radio::part(container) { +ion-radio::part(container) { display: none; } -ion-list ion-radio::part(label) { +ion-radio::part(label) { @include margin(0); } +ion-radio-group { + @include padding($list-md-padding-top, null, $list-md-padding-bottom, null); + + display: block; +} + ion-item { --inner-border-width: 0; } diff --git a/core/src/components/select-modal/select-modal.tsx b/core/src/components/select-modal/select-modal.tsx index 1e1b2ec0bbf..52bf16986f9 100644 --- a/core/src/components/select-modal/select-modal.tsx +++ b/core/src/components/select-modal/select-modal.tsx @@ -226,7 +226,7 @@ export class SelectModal implements ComponentInterface { - {this.multiple === true ? this.renderCheckboxOptions() : this.renderRadioOptions()} + {this.multiple === true ? {this.renderCheckboxOptions()} : this.renderRadioOptions()} ); diff --git a/core/src/components/select-modal/test/basic/select-modal.e2e.ts b/core/src/components/select-modal/test/basic/select-modal.e2e.ts index 11eb4270af9..bf7fb743b63 100644 --- a/core/src/components/select-modal/test/basic/select-modal.e2e.ts +++ b/core/src/components/select-modal/test/basic/select-modal.e2e.ts @@ -101,6 +101,38 @@ configs({ modes: ['md'], directions: ['ltr'] }).forEach(({ title, config }) => { await selectModalPage.ionModalDidDismiss.next(); await expect(selectModalPage.modal).not.toBeVisible(); }); + + test('should render a radio group without a wrapping ion-list', async () => { + await selectModalPage.setup(config, options, false); + + const radioGroup = selectModalPage.selectModal.locator('ion-radio-group'); + await expect(radioGroup).toHaveAttribute('role', 'radiogroup'); + + const list = selectModalPage.selectModal.locator('ion-list'); + await expect(list).toHaveCount(0); + }); + }); + + test.describe('multiple selection', () => { + let selectModalPage: SelectModalPage; + + test.beforeEach(async ({ page }) => { + selectModalPage = new SelectModalPage(page); + }); + + test('should render checkboxes inside an ion-list', async () => { + await selectModalPage.setup(config, options, true); + + const list = selectModalPage.selectModal.locator('ion-list'); + await expect(list).toBeVisible(); + await expect(list).toHaveAttribute('role', 'list'); + + const checkboxes = selectModalPage.selectModal.locator('ion-checkbox'); + await expect(checkboxes).toHaveCount(options.length); + + const radioGroup = selectModalPage.selectModal.locator('ion-radio-group'); + await expect(radioGroup).toHaveCount(0); + }); }); }); });