Skip to content

Commit 33987df

Browse files
author
Hector Arce De Las Heras
committed
Fix LinkAsButton focus styles
1 parent 2c4db99 commit 33987df

File tree

2 files changed

+62
-22
lines changed

2 files changed

+62
-22
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import styled, { css } from 'styled-components';
2+
3+
import { ButtonSizePropsType, ButtonStateKeyOfType, ButtonStateType } from '@/components/button';
4+
5+
// Apply button border radius to the link when focus-visible
6+
export const LinkAsButtonWrapperStyled = styled.div<{
7+
$styles?: ButtonStateKeyOfType;
8+
$state: ButtonStateType;
9+
$sizeStyles?: ButtonSizePropsType;
10+
}>`
11+
display: inline;
12+
> *:first-child {
13+
display: block;
14+
${({ $sizeStyles, $styles, $state }) => {
15+
if (!$styles?.[$state]) {
16+
return css``;
17+
}
18+
const combinedStyles = { ...$sizeStyles, ...$styles[$state] };
19+
return css`
20+
${combinedStyles.border_radius && `border-radius: ${combinedStyles.border_radius};`}
21+
${combinedStyles.border_top_left_radius &&
22+
`border-top-left-radius: ${combinedStyles.border_top_left_radius};`}
23+
${combinedStyles.border_top_right_radius &&
24+
`border-top-right-radius: ${combinedStyles.border_top_right_radius};`}
25+
${combinedStyles.border_bottom_left_radius &&
26+
`border-bottom-left-radius: ${combinedStyles.border_bottom_left_radius};`}
27+
${combinedStyles.border_bottom_right_radius &&
28+
`border-bottom-right-radius: ${combinedStyles.border_bottom_right_radius};`}
29+
`;
30+
}}
31+
}
32+
`;

src/components/link/linkAsButton/linkAsButtonStandAlone.tsx

Lines changed: 30 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7,37 +7,45 @@ import { Text } from '@/components/text';
77
import { TextDecorationType } from '@/components/text/types';
88

99
import { ILinkAsButtonStandAlone } from '../types/link';
10+
import { LinkAsButtonWrapperStyled } from './linkAsButton.styled';
1011

1112
// eslint-disable-next-line complexity
1213
export const LinkAsButtonStandAloneComponent = (
1314
{ children, url, component, target, role, onClick, ...props }: ILinkAsButtonStandAlone,
1415
ref: React.ForwardedRef<HTMLElement> | undefined
1516
): JSX.Element => {
1617
return (
17-
<Text
18-
ref={ref}
19-
aria-label={props['aria-label']}
20-
component={component}
21-
dataTestId={props.dataTestId}
22-
decoration={TextDecorationType.NONE}
23-
isDisabled={props.state === ButtonStateType.DISABLED}
24-
role={role}
25-
target={target}
26-
url={url}
27-
onClick={onClick}
18+
// Apply button border radius to the link when focus-visible
19+
<LinkAsButtonWrapperStyled
20+
$sizeStyles={props.sizeStyles}
21+
$state={props.state}
22+
$styles={props.styles}
2823
>
29-
<ButtonStyled
30-
as="span"
31-
{...props}
32-
$fullWidth={props.fullWidth}
33-
$iconPosition={props.iconPosition}
34-
$sizeStyles={props.sizeStyles}
35-
$state={props.state}
36-
$styles={props.styles}
24+
<Text
25+
ref={ref}
26+
aria-label={props['aria-label']}
27+
component={component}
28+
dataTestId={props.dataTestId}
29+
decoration={TextDecorationType.NONE}
30+
isDisabled={props.state === ButtonStateType.DISABLED}
31+
role={role}
32+
target={target}
33+
url={url}
34+
onClick={onClick}
3735
>
38-
<ButtonStandAloneStructure {...props}>{children}</ButtonStandAloneStructure>
39-
</ButtonStyled>
40-
</Text>
36+
<ButtonStyled
37+
as="span"
38+
{...props}
39+
$fullWidth={props.fullWidth}
40+
$iconPosition={props.iconPosition}
41+
$sizeStyles={props.sizeStyles}
42+
$state={props.state}
43+
$styles={props.styles}
44+
>
45+
<ButtonStandAloneStructure {...props}>{children}</ButtonStandAloneStructure>
46+
</ButtonStyled>
47+
</Text>
48+
</LinkAsButtonWrapperStyled>
4149
);
4250
};
4351

0 commit comments

Comments
 (0)