Skip to content

Commit b826d00

Browse files
committed
♿️ Improve accessibility of components
1 parent df2a7b8 commit b826d00

12 files changed

+75
-38
lines changed

.vscode/settings.json

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
11
{
2-
"svelte.plugin.svelte.compilerWarnings": {
3-
"a11y-click-events-have-key-events": "ignore",
4-
"a11y-no-static-element-interactions": "ignore",
5-
"a11y-no-noninteractive-element-interactions": "ignore"
6-
}
2+
"svelte.plugin.svelte.compilerWarnings": {}
73
}

scripts/buildTypes.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,24 @@ const buildTypes = type => {
2020
}
2121

2222
if (type === 'svelte') {
23+
const getTypeName = component => {
24+
const componentsWithSvelteSpecificTypes = [
25+
'Badge'
26+
]
27+
28+
return componentsWithSvelteSpecificTypes.includes(component)
29+
? `Svelte${component}Props`
30+
: `${component}Props`
31+
}
32+
2333
return format(`
2434
${components.map(component => {
25-
return `import type { ${component}Props } from './components/${component}/${component.toLowerCase()}'`
35+
return `import type { ${getTypeName(component)} } from './components/${component}/${component.toLowerCase()}'`
2636
}).join('\n')}
2737
2838
declare module 'webcoreui/${type}' {
2939
${components.map(component => {
30-
return `export function ${component}(_props: ${component}Props): any`
40+
return `export function ${component}(_props: ${getTypeName(component)}): any`
3141
}).join('\n\t')}
3242
}
3343
`)

src/components/Accordion/Accordion.astro

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ const {
1313
<ul class={styles.accordion} data-id="w-accordion">
1414
{items.map((item: AccordionProps['items'][0]) => (
1515
<li>
16-
<div class={styles.title} data-toggle="true">
16+
<button class={styles.title} data-toggle="true">
1717
{item.title}
1818
<Fragment set:html={ArrowDown} />
19-
</div>
19+
</button>
2020
<div class={styles.wrapper}>
2121
<div class={styles.content}>
2222
<Fragment set:html={item.content} />

src/components/Accordion/Accordion.svelte

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,14 @@
1818
<ul class={styles.accordion}>
1919
{#each items as item, index}
2020
<li>
21-
<div
21+
<button
2222
class={styles.title}
2323
data-open={state[index]}
2424
on:click={() => toggle(index)}
2525
>
2626
{item.title}
2727
{@html ArrowDown}
28-
</div>
28+
</button>
2929
<div class={styles.wrapper}>
3030
<div class={styles.content}>
3131
{@html item.content}

src/components/Accordion/Accordion.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ const Accordion = ({ items }: AccordionProps) => {
1717
<ul className={styles.accordion}>
1818
{items.map((item, index) => (
1919
<li key={index}>
20-
<div
20+
<button
2121
className={styles.title}
2222
data-open={state[index]}
2323
onClick={() => toggle(index)}

src/components/Accordion/accordion.module.scss

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,12 @@
2323
display: flex;
2424
justify-content: space-between;
2525
align-items: center;
26+
width: 100%;
27+
background: transparent;
28+
border: 0;
29+
color: #FFF;
30+
font-size: 16px;
31+
padding: 0;
2632
cursor: pointer;
2733

2834
svg {

src/components/Badge/Badge.astro

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,18 @@
22
import type { BadgeProps } from './badge'
33
import styles from './badge.module.scss'
44
5-
interface Props extends BadgeProps {
6-
interactive?: boolean
7-
}
5+
interface Props extends BadgeProps {}
86
97
const {
108
theme,
11-
interactive,
9+
hover,
1210
...rest
1311
} = Astro.props
1412
1513
const classes = [
1614
styles.badge,
1715
theme && styles[theme],
18-
interactive && styles.hover
16+
hover && styles.hover
1917
]
2018
---
2119

src/components/Badge/Badge.svelte

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,27 @@
11
<script lang="ts">
2-
import type { BadgeProps } from './badge'
2+
import type { SvelteBadgeProps } from './badge'
3+
34
import styles from './badge.module.scss'
5+
import { classNames } from '../../utils/classNames'
46
5-
export let theme: BadgeProps['theme'] = null
6-
export let onClick: BadgeProps['onClick'] = null
7+
export let theme: SvelteBadgeProps['theme'] = null
8+
export let onClick: SvelteBadgeProps['onClick'] = null
9+
export let hover: SvelteBadgeProps['hover'] = false
710
8-
const classes = [
11+
const classes = classNames([
912
styles.badge,
1013
theme && styles[theme],
11-
onClick && styles.hover
12-
].filter(Boolean).join(' ')
14+
(onClick || hover) && styles.hover
15+
])
1316
</script>
1417

15-
<span class={classes} on:click={onClick} {...$$restProps}>
16-
<slot />
17-
</span>
18+
{#if onClick}
19+
<button class={classes} on:click={onClick} {...$$restProps}>
20+
<slot />
21+
</button>
22+
{:else}
23+
<span class={classes} {...$$restProps}>
24+
<slot />
25+
</span>
26+
{/if}
27+

src/components/Badge/Badge.tsx

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,32 @@
11
import React from 'react'
22
import type { ReactBadgeProps } from './badge'
3+
34
import styles from './badge.module.scss'
5+
import { classNames } from '../../utils/classNames'
46

5-
const Badge = ({ theme, onClick, children, ...rest }: ReactBadgeProps) => {
6-
const classes = [
7+
const Badge = ({
8+
theme,
9+
onClick,
10+
hover,
11+
children,
12+
...rest
13+
}: ReactBadgeProps) => {
14+
const classes = classNames([
715
styles.badge,
816
theme && styles[theme],
9-
onClick && styles.hover
10-
].filter(Boolean).join(' ')
17+
(onClick || hover) && styles.hover
18+
])
19+
20+
if (onClick) {
21+
return (
22+
<button className={classes} onClick={onClick} {...rest}>
23+
{children}
24+
</button>
25+
)
26+
}
1127

1228
return (
13-
<span className={classes} onClick={onClick} {...rest}>
29+
<span className={classes} {...rest}>
1430
{children}
1531
</span>
1632
)

src/components/Badge/badge.module.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
font-size: 12px;
1111
background: #FFF;
1212
color: #252525;
13+
border: 0;
1314

1415
&.hover {
1516
cursor: pointer;

src/components/Badge/badge.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,14 @@ export type BadgeProps = {
77
| 'warning'
88
| 'alert'
99
| null
10-
onClick?: () => any
10+
hover?: boolean
1111
}
1212

13+
export type SvelteBadgeProps = {
14+
onClick?: (() => any) | null
15+
} & BadgeProps
16+
1317
export type ReactBadgeProps = {
18+
onClick?: (() => any) | null
1419
children: React.ReactNode
1520
} & BadgeProps

svelte.config.js

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,7 @@ export default {
55
onwarn: (warning, handler) => {
66
// Suppress false positive warnings in terminal
77
// Edit .vscode/settings.json to also suppress warnings in VSCode
8-
const ignoreWarnings = [
9-
'a11y-click-events-have-key-events',
10-
'a11y-no-static-element-interactions',
11-
'a11y-no-noninteractive-element-interactions',
12-
'.accordion-title'
13-
]
8+
const ignoreWarnings = []
149

1510
const warningText = [
1611
warning.code,

0 commit comments

Comments
 (0)