diff --git a/core/api.txt b/core/api.txt index 55ace969a9..47b1307e5a 100644 --- a/core/api.txt +++ b/core/api.txt @@ -1471,6 +1471,7 @@ ion-toast,css-prop,--start ion-toast,css-prop,--white-space ion-toast,css-prop,--width ion-toast,part,button +ion-toast,part,button cancel ion-toast,part,container ion-toast,part,header ion-toast,part,icon diff --git a/core/src/components/toast/test/toast.spec.tsx b/core/src/components/toast/test/toast.spec.tsx index 7955acf3d3..d59e7d32e9 100644 --- a/core/src/components/toast/test/toast.spec.tsx +++ b/core/src/components/toast/test/toast.spec.tsx @@ -129,3 +129,18 @@ describe('toast: htmlAttributes', () => { await expect(toast.getAttribute('data-testid')).toBe('basic-toast'); }); }); + +describe('toast: button cancel', () => { + it('should render the cancel button with part button-cancel', async () => { + const page = await newSpecPage({ + components: [Toast], + template: () => , + }); + + const toast = page.body.querySelector('ion-toast'); + + const buttonCancel = toast?.shadowRoot?.querySelector('.toast-button-cancel'); + + expect(buttonCancel.getAttribute('part')).toBe('button cancel'); + }); +}); diff --git a/core/src/components/toast/toast.tsx b/core/src/components/toast/toast.tsx index 33f985e7c8..fcc234ae85 100644 --- a/core/src/components/toast/toast.tsx +++ b/core/src/components/toast/toast.tsx @@ -35,6 +35,7 @@ import type { ToastButton, ToastPosition, ToastLayout } from './toast-interface' * @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use. * * @part button - Any button element that is displayed inside of the toast. + * @part button cancel - Any button element with role "cancel" that is displayed inside of the toast. * @part container - The element that wraps all child elements. * @part header - The header text of the toast. * @part message - The body text of the toast. @@ -422,7 +423,7 @@ export class Toast implements ComponentInterface, OverlayInterface { class={buttonClass(b)} tabIndex={0} onClick={() => this.buttonClick(b)} - part="button" + part={buttonPart(b)} >
{b.icon && ( @@ -586,5 +587,9 @@ const buttonClass = (button: ToastButton): CssClassMap => { }; }; +const buttonPart = (button: ToastButton): string => { + return isCancel(button.role) ? 'button cancel' : 'button'; +}; + type ToastPresentOptions = ToastPosition; type ToastDismissOptions = ToastPosition;