Skip to content

Commit 661eae0

Browse files
authored
fix(Token): Render <a/> tag as interactive element (#6429)
1 parent d6e61f3 commit 661eae0

File tree

3 files changed

+35
-1
lines changed

3 files changed

+35
-1
lines changed

.changeset/wet-crews-drum.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@primer/react': patch
3+
---
4+
5+
Anchor elements render as interactive elements in TokenBase

packages/react/src/Token/TokenBase.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ const TokenBase = React.forwardRef<HTMLButtonElement | HTMLAnchorElement | HTMLS
7979
}
8080
}}
8181
className={clsx(classes.TokenBase, className)}
82-
data-cursor-is-interactive={isTokenInteractive(rest)}
82+
data-cursor-is-interactive={isTokenInteractive({as, ...rest})}
8383
data-size={size}
8484
id={id?.toString()}
8585
{...rest}

packages/react/src/Token/__tests__/Token.test.tsx

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,35 @@ const testTokenComponent = (Component: React.ComponentType<React.PropsWithChildr
6767

6868
expect(domNode.parentElement).toHaveClass('testing-class')
6969
})
70+
71+
it('renders with correct data-cursor-is-interactive attribute for button element', () => {
72+
const {getByText} = HTMLRender(<Component as="button" text="token" />)
73+
const domNode = getByText('token')
74+
75+
expect(domNode.parentElement).toHaveAttribute('data-cursor-is-interactive', 'true')
76+
})
77+
78+
it('renders with correct data-cursor-is-interactive attribute for anchor element', () => {
79+
const {getByText} = HTMLRender(<Component as="a" text="token" />)
80+
const domNode = getByText('token')
81+
82+
expect(domNode.parentElement).toHaveAttribute('data-cursor-is-interactive', 'true')
83+
})
84+
85+
it('renders with correct data-cursor-is-interactive attribute for span with onClick', () => {
86+
const onClick = vi.fn()
87+
const {getByText} = HTMLRender(<Component text="token" onClick={onClick} />)
88+
const domNode = getByText('token')
89+
90+
expect(domNode.parentElement).toHaveAttribute('data-cursor-is-interactive', 'true')
91+
})
92+
93+
it('renders with correct data-cursor-is-interactive attribute for non-interactive span', () => {
94+
const {getByText} = HTMLRender(<Component text="token" />)
95+
const domNode = getByText('token')
96+
97+
expect(domNode.parentElement).toHaveAttribute('data-cursor-is-interactive', 'false')
98+
})
7099
}
71100

72101
describe('Token components', () => {

0 commit comments

Comments
 (0)