Skip to content

Commit 8ae717e

Browse files
fix: tab nav focus ring (#151)
* fix: tab nav focus ring * fix: localize links
1 parent 5413c3b commit 8ae717e

File tree

3 files changed

+27
-3
lines changed

3 files changed

+27
-3
lines changed

src/actions/Link.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ export interface LinkProps {
2727
ariaHidden?: boolean
2828
/** Accessible label if link doesn't contain text content */
2929
ariaLabel?: string
30+
/** Indicates whether this link represents the current item within a set */
31+
ariaCurrent?: string
3032
/** Element ID */
3133
id?: string
3234
/** Additional CSS classes */
@@ -53,6 +55,7 @@ const Link = (props: LinkProps) => {
5355
className: classNames.join(" "),
5456
"aria-label": props.ariaLabel,
5557
"aria-hidden": props.ariaHidden,
58+
"aria-current": props.ariaCurrent,
5659
}
5760

5861
if (props.newWindowTarget) {

src/navigation/Tabs.scss

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,11 @@
6363
&:focus-visible,
6464
.tabs-tab-link:focus-visible {
6565
outline: 2px solid var(--seeds-color-highlight-cool);
66-
outline-offset: 2px;
66+
outline-offset: -2px;
67+
}
68+
69+
&:focus-within {
70+
z-index: 2;
6771
}
6872

6973
&:hover {
@@ -110,8 +114,24 @@
110114

111115
.tabs-tab-link {
112116
display: block;
117+
border-radius: inherit;
118+
margin-inline: calc(-1 * var(--tab-padding-inline));
119+
margin-block: calc(-1 * var(--tab-padding-block))
120+
calc(-1 * (var(--tab-padding-block) - var(--tab-active-indicator-width)));
121+
padding-inline: var(--tab-padding-inline);
122+
padding-block: var(--tab-padding-block)
123+
calc(var(--tab-padding-block) - var(--tab-active-indicator-width));
113124
color: inherit;
114125
text-decoration: none;
126+
127+
[data-size="sm"] & {
128+
margin-inline: calc(-1 * var(--tab-padding-inline-sm));
129+
margin-block: calc(-1 * var(--tab-padding-block-sm))
130+
calc(-1 * (var(--tab-padding-block-sm) - var(--tab-active-indicator-width)));
131+
padding-inline: var(--tab-padding-inline-sm);
132+
padding-block: var(--tab-padding-block-sm)
133+
calc(var(--tab-padding-block-sm) - var(--tab-active-indicator-width));
134+
}
115135
}
116136

117137
.tabs-panel {

src/navigation/Tabs.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
TabList as ReactTabList,
66
TabPanel as ReactTabPanel,
77
} from "react-tabs"
8+
import Link from "../actions/Link"
89
import { SeedsSizes } from "../global/sharedTypes"
910
import "./Tabs.scss"
1011

@@ -93,9 +94,9 @@ const Tab = (props: TabProps) => {
9394
if (!disabled && href) {
9495
return (
9596
<li data-active={selected} data-disabled={disabled} className={className.join(" ")}>
96-
<a href={href} aria-current={selected ? "page" : undefined} className="tabs-tab-link">
97+
<Link href={href} ariaCurrent={selected ? "page" : undefined} className="tabs-tab-link">
9798
{props.children}
98-
</a>
99+
</Link>
99100
</li>
100101
)
101102
}

0 commit comments

Comments
 (0)