summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorOliver <oliver@mohlin.dev>2025-01-07 11:40:30 +0100
committerMarkus Pettersson <markus.pettersson@mullvad.net>2025-01-13 15:02:51 +0100
commit33caf981637a2391eb786293cf52c2c11d8dc548 (patch)
tree3983c8a89105438c3e1e734546be6460c6b9eaac
parent69a6d2b77c9b151505d698c9263e88d100566375 (diff)
downloadmullvadvpn-33caf981637a2391eb786293cf52c2c11d8dc548.tar.xz
mullvadvpn-33caf981637a2391eb786293cf52c2c11d8dc548.zip
Add Header component
-rw-r--r--desktop/packages/mullvad-vpn/src/renderer/lib/components/organisms/header/Header.tsx56
-rw-r--r--desktop/packages/mullvad-vpn/src/renderer/lib/components/organisms/header/components/HeaderMainRow.tsx11
-rw-r--r--desktop/packages/mullvad-vpn/src/renderer/lib/components/organisms/header/components/HeaderSubRow.tsx12
-rw-r--r--desktop/packages/mullvad-vpn/src/renderer/lib/components/organisms/header/components/index.ts2
-rw-r--r--desktop/packages/mullvad-vpn/src/renderer/lib/components/organisms/header/index.ts1
-rw-r--r--desktop/packages/mullvad-vpn/src/renderer/lib/components/organisms/index.ts1
6 files changed, 83 insertions, 0 deletions
diff --git a/desktop/packages/mullvad-vpn/src/renderer/lib/components/organisms/header/Header.tsx b/desktop/packages/mullvad-vpn/src/renderer/lib/components/organisms/header/Header.tsx
new file mode 100644
index 0000000000..1dbfee5b82
--- /dev/null
+++ b/desktop/packages/mullvad-vpn/src/renderer/lib/components/organisms/header/Header.tsx
@@ -0,0 +1,56 @@
+import styled from 'styled-components';
+
+import { Colors, Spacings } from '../../../foundations';
+import { TransientProps } from '../../../types';
+import { Flex } from '../../layout';
+import { HeaderMainRow, HeaderSubRow } from './components';
+
+export type HeaderProps = React.PropsWithChildren<{
+ size?: '1' | '2';
+ variant?: 'default' | 'success' | 'error';
+}>;
+
+const sizes = {
+ '1': '68px',
+ '2': '80px',
+};
+
+const variants = {
+ default: Colors.blue,
+ error: Colors.red,
+ success: Colors.green,
+};
+
+const StyledHeader = styled.header<TransientProps<HeaderProps>>(
+ ({ $size = '1', $variant = 'default' }) => ({
+ height: sizes[$size],
+ minHeight: sizes[$size],
+
+ backgroundColor: variants[$variant],
+ transition: 'height 250ms ease-in-out, min-height 250ms ease-in-out',
+ }),
+);
+
+const Header = ({ size = '1', variant = 'default', children, ...props }: HeaderProps) => {
+ return (
+ <StyledHeader $size={size} $variant={variant} {...props}>
+ <Flex
+ $flexDirection="column"
+ $justifyContent="center"
+ $margin={{
+ horizontal: Spacings.spacing5,
+ top: Spacings.spacing5,
+ bottom: Spacings.spacing3,
+ }}>
+ {children}
+ </Flex>
+ </StyledHeader>
+ );
+};
+
+const HeaderNamespace = Object.assign(Header, {
+ MainRow: HeaderMainRow,
+ SubRow: HeaderSubRow,
+});
+
+export { HeaderNamespace as Header };
diff --git a/desktop/packages/mullvad-vpn/src/renderer/lib/components/organisms/header/components/HeaderMainRow.tsx b/desktop/packages/mullvad-vpn/src/renderer/lib/components/organisms/header/components/HeaderMainRow.tsx
new file mode 100644
index 0000000000..a764fdfd8e
--- /dev/null
+++ b/desktop/packages/mullvad-vpn/src/renderer/lib/components/organisms/header/components/HeaderMainRow.tsx
@@ -0,0 +1,11 @@
+import styled from 'styled-components';
+
+import { Flex } from '../../../layout';
+
+export const HeaderMainRow = styled(Flex).attrs({
+ $justifyContent: 'space-between',
+ $alignItems: ' center',
+})({
+ minHeight: '38px',
+ height: '38px',
+});
diff --git a/desktop/packages/mullvad-vpn/src/renderer/lib/components/organisms/header/components/HeaderSubRow.tsx b/desktop/packages/mullvad-vpn/src/renderer/lib/components/organisms/header/components/HeaderSubRow.tsx
new file mode 100644
index 0000000000..4e5896a26a
--- /dev/null
+++ b/desktop/packages/mullvad-vpn/src/renderer/lib/components/organisms/header/components/HeaderSubRow.tsx
@@ -0,0 +1,12 @@
+import styled from 'styled-components';
+
+import { Spacings } from '../../../../foundations';
+import { Flex } from '../../../layout';
+
+export const HeaderSubRow = styled(Flex).attrs({
+ $flex: 1,
+ $alignItems: 'flex-end',
+ $gap: Spacings.spacing6,
+})({
+ minHeight: '18px',
+});
diff --git a/desktop/packages/mullvad-vpn/src/renderer/lib/components/organisms/header/components/index.ts b/desktop/packages/mullvad-vpn/src/renderer/lib/components/organisms/header/components/index.ts
new file mode 100644
index 0000000000..22215abc57
--- /dev/null
+++ b/desktop/packages/mullvad-vpn/src/renderer/lib/components/organisms/header/components/index.ts
@@ -0,0 +1,2 @@
+export * from './HeaderMainRow';
+export * from './HeaderSubRow';
diff --git a/desktop/packages/mullvad-vpn/src/renderer/lib/components/organisms/header/index.ts b/desktop/packages/mullvad-vpn/src/renderer/lib/components/organisms/header/index.ts
new file mode 100644
index 0000000000..266dec8a1b
--- /dev/null
+++ b/desktop/packages/mullvad-vpn/src/renderer/lib/components/organisms/header/index.ts
@@ -0,0 +1 @@
+export * from './Header';
diff --git a/desktop/packages/mullvad-vpn/src/renderer/lib/components/organisms/index.ts b/desktop/packages/mullvad-vpn/src/renderer/lib/components/organisms/index.ts
new file mode 100644
index 0000000000..677ca79d47
--- /dev/null
+++ b/desktop/packages/mullvad-vpn/src/renderer/lib/components/organisms/index.ts
@@ -0,0 +1 @@
+export * from './header';