summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorOliver <oliver@mohlin.dev>2025-04-29 10:01:18 +0200
committerTobias Järvelöv <tobias.jarvelov@mullvad.net>2025-05-19 14:28:48 +0200
commit2bd28fd1dd3abd3957176a8d196884212dc00feb (patch)
treee9a8e41fa86a3794a43d4bffd3be2221964f756b
parent9fee5d31e73ff7631f6dc2da1971f0553c32cb65 (diff)
downloadmullvadvpn-2bd28fd1dd3abd3957176a8d196884212dc00feb.tar.xz
mullvadvpn-2bd28fd1dd3abd3957176a8d196884212dc00feb.zip
Move IconButton styling to styled component
-rw-r--r--desktop/packages/mullvad-vpn/src/renderer/lib/components/icon-button/IconButton.tsx48
1 files changed, 21 insertions, 27 deletions
diff --git a/desktop/packages/mullvad-vpn/src/renderer/lib/components/icon-button/IconButton.tsx b/desktop/packages/mullvad-vpn/src/renderer/lib/components/icon-button/IconButton.tsx
index b7e70e23b4..62cf1a1c3e 100644
--- a/desktop/packages/mullvad-vpn/src/renderer/lib/components/icon-button/IconButton.tsx
+++ b/desktop/packages/mullvad-vpn/src/renderer/lib/components/icon-button/IconButton.tsx
@@ -1,8 +1,8 @@
import React, { forwardRef } from 'react';
-import styled from 'styled-components';
+import styled, { css } from 'styled-components';
import { colors } from '../../foundations';
-import { buttonReset } from '../../styles';
+import { ButtonBase } from '../button';
import { IconProps, iconSizes } from '../icon/Icon';
import { IconButtonIcon } from './components/IconButtonIcon';
import { IconButtonProvider } from './IconButtonContext';
@@ -12,35 +12,29 @@ export interface IconButtonProps extends React.ButtonHTMLAttributes<HTMLButtonEl
size?: IconProps['size'];
}
-const StyledButton = styled.button({
- ...buttonReset,
+const StyledButton = styled(ButtonBase)<{ $size: IconButtonProps['size'] }>`
+ ${({ $size = 'medium' }) => {
+ const size = iconSizes[$size];
+ return css`
+ --size: ${size}px;
- background: 'transparent',
- height: 'var(--size)',
- width: 'var(--size)',
- borderRadius: '100%',
- '&:focus-visible': {
- outline: `2px solid ${colors.white100}`,
- outlineOffset: '1px',
- },
-});
+ background: transparent;
+ height: var(--size);
+ width: var(--size);
+ border-radius: 100%;
+ &:focus-visible {
+ outline: 2px solid ${colors.white100};
+ outline-offset: 1px;
+ }
+ `;
+ }}
+`;
const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(
- ({ variant = 'primary', size: sizeProp = 'medium', disabled, style, ...props }, ref) => {
- const size = iconSizes[sizeProp];
+ ({ variant = 'primary', size = 'medium', disabled, style, ...props }, ref) => {
return (
- <IconButtonProvider size={sizeProp} variant={variant} disabled={disabled}>
- <StyledButton
- ref={ref}
- disabled={disabled}
- style={
- {
- '--size': `${size}px`,
- ...style,
- } as React.CSSProperties
- }
- {...props}
- />
+ <IconButtonProvider size={size} variant={variant} disabled={disabled}>
+ <StyledButton ref={ref} disabled={disabled} $size={size} {...props} />
</IconButtonProvider>
);
},