Skip to content

Commit df1eef4

Browse files
feat: add title and aria-label attributes to btn-icon components (#3619)
Co-authored-by: Chris Simmons <gundamx9740@gmail.com>
1 parent 995732f commit df1eef4

File tree

16 files changed

+63
-21
lines changed

16 files changed

+63
-21
lines changed

.changeset/shaggy-jokes-start.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"@skeletonlabs/skeleton-svelte": minor
3+
"@skeletonlabs/skeleton-react": minor
4+
---
5+
6+
feature: Added `aria-label` and `title` props for icon buttons implemented within the Svelte and React Toast components.

packages/skeleton-react/src/components/Toast/Toast.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,13 @@ export function Toast(props: ToastProps) {
4646
</div>
4747
{api.closable && (
4848
// Dismiss Button
49-
<button className={`${props.btnDismissBase} ${props.btnDismissClasses}`} onClick={api.dismiss} data-testid="toast-dismiss">
49+
<button
50+
className={`${props.btnDismissBase} ${props.btnDismissClasses}`}
51+
title={props.btnDismissTitle}
52+
aria-label={props.btnDismissAriaLabel}
53+
onClick={api.dismiss}
54+
data-testid="toast-dismiss"
55+
>
5056
&times;
5157
</button>
5258
)}

packages/skeleton-react/src/components/Toast/Toaster.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ export function Toaster({
2727
// Dismiss Button
2828
btnDismissBase = 'btn-icon hover:preset-tonal',
2929
btnDismissClasses = '',
30+
btnDismissTitle = 'Dismiss',
31+
btnDismissAriaLabel = 'Dismiss',
3032
// State
3133
stateInfo = 'preset-outlined-surface-200-800 preset-filled-surface-50-950',
3234
stateSuccess = 'preset-filled-success-500',
@@ -57,6 +59,8 @@ export function Toaster({
5759
descriptionClasses={descriptionClasses}
5860
btnDismissBase={btnDismissBase}
5961
btnDismissClasses={btnDismissClasses}
62+
btnDismissTitle={btnDismissTitle}
63+
btnDismissAriaLabel={btnDismissAriaLabel}
6064
stateInfo={stateInfo}
6165
stateError={stateError}
6266
stateWarning={stateWarning}

packages/skeleton-react/src/components/Toast/types.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ export interface ToasterProps {
3838
btnDismissBase?: string;
3939
/** Provide arbitrary classes for the dismiss button. */
4040
btnDismissClasses?: string;
41+
/** Provide the title attribute for the dismiss button. */
42+
btnDismissTitle?: string;
43+
/** Provide the aria-label attribute for the dismiss button. */
44+
btnDismissAriaLabel?: string;
4145

4246
// State ---
4347
/** Provide base classes for info toasts. */

packages/skeleton-svelte/src/components/Toast/Toast.svelte

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,12 @@
4040
</div>
4141
{#if api.closable}
4242
<!-- Dismiss Button -->
43-
<button class="{props.btnDismissBase} {props.btnDismissClasses}" {...api.getCloseTriggerProps()} data-testid="toast-dismiss"
44-
>&times;</button
43+
<button
44+
class="{props.btnDismissBase} {props.btnDismissClasses}"
45+
title={props.btnDismissTitle}
46+
aria-label={props.btnDismissAriaLabel}
47+
{...api.getCloseTriggerProps()}
48+
data-testid="toast-dismiss">&times;</button
4549
>
4650
{/if}
4751
</div>

packages/skeleton-svelte/src/components/Toast/Toaster.svelte

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
// Dismiss Button
2626
btnDismissBase = 'btn-icon hover:preset-tonal',
2727
btnDismissClasses = '',
28+
btnDismissTitle = 'Dismiss',
29+
btnDismissAriaLabel = 'Dismiss',
2830
// State
2931
stateInfo = 'preset-outlined-surface-200-800 preset-filled-surface-50-950',
3032
stateSuccess = 'preset-filled-success-500',
@@ -56,6 +58,8 @@
5658
{descriptionClasses}
5759
{btnDismissBase}
5860
{btnDismissClasses}
61+
{btnDismissTitle}
62+
{btnDismissAriaLabel}
5963
{stateInfo}
6064
{stateError}
6165
{stateWarning}

packages/skeleton-svelte/src/components/Toast/types.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ export interface ToasterProps extends toast.StoreProps {
3939
btnDismissBase?: string;
4040
/** Provide arbitrary classes for the dismiss button. */
4141
btnDismissClasses?: string;
42+
/** Provide the title attribute for the dismiss button. */
43+
btnDismissTitle?: string;
44+
/** Provide the aria-label attribute for the dismiss button. */
45+
btnDismissAriaLabel?: string;
4246

4347
// State ---
4448
/** Provide base classes for info toasts. */

playgrounds/skeleton-react/src/app/components/app-bar/page.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ export default function Page() {
137137
<AppBar>
138138
<AppBar.Toolbar>
139139
<AppBar.ToolbarLead>
140-
<button type="button" className="btn-icon preset-filled-primary-500">
140+
<button type="button" className="btn-icon preset-filled-primary-500" title="Menu" aria-label="Menu">
141141
<Skull size={22} />
142142
</button>
143143
<button type="button" className="btn preset-filled">
@@ -149,7 +149,7 @@ export default function Page() {
149149
<button type="button" className="btn preset-filled">
150150
Skeleton
151151
</button>
152-
<button type="button" className="btn-icon preset-filled-primary-500">
152+
<button type="button" className="btn-icon preset-filled-primary-500" title="Menu" aria-label="Menu">
153153
<Skull size={22} />
154154
</button>
155155
</AppBar.ToolbarTrail>

playgrounds/skeleton-svelte/src/routes/components/app-bars/+page.svelte

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -120,13 +120,13 @@
120120
<button type="button" class="btn preset-filled">Button before the AppBar</button>
121121
<AppBar>
122122
{#snippet lead()}
123-
<button type="button" class="btn-icon preset-filled-primary-500"><Skull size={22} /></button>
123+
<button type="button" class="btn-icon preset-filled-primary-500" title="Menu" aria-label="Menu"><Skull size={22} /></button>
124124
<button type="button" class="btn preset-filled">Skeleton</button>
125125
{/snippet}
126126
Skeleton
127127
{#snippet trail()}
128128
<button type="button" class="btn preset-filled">Skeleton</button>
129-
<button type="button" class="btn-icon preset-filled-primary-500"><Skull size={22} /></button>
129+
<button type="button" class="btn-icon preset-filled-primary-500" title="Menu" aria-label="Menu"><Skull size={22} /></button>
130130
{/snippet}
131131
</AppBar>
132132
<button type="button" class="btn preset-filled">Button after the AppBar</button>
@@ -135,13 +135,13 @@
135135
<div dir="rtl">
136136
<AppBar>
137137
{#snippet lead()}
138-
<button type="button" class="btn-icon preset-filled-primary-500"><Skull size={22} /></button>
138+
<button type="button" class="btn-icon preset-filled-primary-500" title="Menu" aria-label="Menu"><Skull size={22} /></button>
139139
<button type="button" class="btn preset-filled">lead</button>
140140
{/snippet}
141141
skeleton
142142
{#snippet trail()}
143143
<button type="button" class="btn preset-filled">trail</button>
144-
<button type="button" class="btn-icon preset-filled-primary-500"><Skull size={22} /></button>
144+
<button type="button" class="btn-icon preset-filled-primary-500" title="Menu" aria-label="Menu"><Skull size={22} /></button>
145145
{/snippet}
146146
{#snippet headline()}
147147
<h1 class="h1">مرحبا بك</h1>

playgrounds/skeleton-svelte/src/routes/components/popover/+page.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
{#snippet content()}
4545
<header class="flex justify-between">
4646
<p class="font-bold text-xl">Popover</p>
47-
<button class="btn-icon" onclick={popoverClose}>
47+
<button class="btn-icon" onclick={popoverClose} title="Close" aria-label="Close">
4848
<IconX />
4949
</button>
5050
</header>

0 commit comments

Comments
 (0)