feat(SW-184): implementing mobile design

This commit is contained in:
Erik Tiekstra
2024-08-21 14:38:29 +02:00
parent b51a4c46e8
commit a2e2cf575e
44 changed files with 526 additions and 111 deletions

View File

@@ -2,33 +2,46 @@
import { useState } from "react"
import { ChevronDownIcon } from "@/components/Icons"
import { ChevronDownIcon, ChevronRightIcon } from "@/components/Icons"
import Link from "@/components/TempDesignSystem/Link"
import MainMenuButton from "../../MainMenuButton"
import { navigationMenuItemVariants } from "./variants"
import styles from "./navigationMenuItem.module.css"
import { NavigationMenuItemProps } from "@/types/components/header/navigationMenuItem"
export default function MenuItem({ item }: NavigationMenuItemProps) {
export default function MenuItem({ item, variant }: NavigationMenuItemProps) {
const { children, title, href, seeAllLinkText, infoCard } = item
const [isExpanded, setIsExpanded] = useState(false)
const isMobile = variant === "mobile"
function handleButtonClick() {
setIsExpanded((prev) => !prev)
}
return children?.length ? (
<MainMenuButton onClick={handleButtonClick}>
<MainMenuButton
onClick={handleButtonClick}
className={navigationMenuItemVariants({ variant })}
>
{title}
<ChevronDownIcon
className={`${styles.chevron} ${isExpanded ? styles.isExpanded : ""}`}
color="red"
/>
{isMobile ? (
<ChevronRightIcon className={`${styles.chevron}`} color="red" />
) : (
<ChevronDownIcon
className={`${styles.chevron} ${isExpanded ? styles.isExpanded : ""}`}
color="red"
/>
)}
</MainMenuButton>
) : (
<Link href={href} color="burgundy">
<Link
href={href}
color="burgundy"
className={navigationMenuItemVariants({ variant })}
>
{title}
</Link>
)

View File

@@ -1,3 +1,10 @@
.navigationMenuItem.mobile {
display: flex;
justify-content: space-between;
padding: var(--Spacing-x2) 0;
font-size: var(--typography-Subtitle-1-Mobile-fontSize);
}
.chevron {
transition: transform 0.2s;
}

View File

@@ -0,0 +1,15 @@
import { cva } from "class-variance-authority"
import styles from "./navigationMenuItem.module.css"
export const navigationMenuItemVariants = cva(styles.navigationMenuItem, {
variants: {
variant: {
default: styles.default,
mobile: styles.mobile,
},
},
defaultVariants: {
variant: "default",
},
})

View File

@@ -1,15 +1,19 @@
import NavigationMenuItem from "./NavigationMenuItem"
import { navigationMenuVariants } from "./variants"
import styles from "./navigationMenu.module.css"
import { NavigationMenuProps } from "@/types/components/header/navigationMenu"
export default function NavigationMenu({ items }: NavigationMenuProps) {
export default function NavigationMenu({
items,
variant,
}: NavigationMenuProps) {
return (
<ul className={styles.navigationMenu}>
<ul className={navigationMenuVariants({ variant })}>
{items.map((item) => (
<li key={item.id}>
<NavigationMenuItem item={item} />
<li key={item.id} className={styles.item}>
<NavigationMenuItem variant={variant} item={item} />
</li>
))}
</ul>

View File

@@ -1,8 +1,26 @@
.navigationMenu {
list-style: none;
margin: 0;
display: flex;
justify-content: space-between;
align-items: center;
gap: var(--Spacing-x4);
display: none;
}
.navigationMenu.mobile {
display: grid;
width: 100%;
gap: 0;
justify-content: stretch;
padding: var(--Spacing-x-one-and-half) var(--Spacing-x2) var(--Spacing-x2);
}
.navigationMenu.mobile .item {
border-bottom: 1px solid var(--Base-Border-Subtle);
}
@media screen and (min-width: 768px) {
.navigationMenu.default {
display: flex;
}
}

View File

@@ -0,0 +1,15 @@
import { cva } from "class-variance-authority"
import styles from "./navigationMenu.module.css"
export const navigationMenuVariants = cva(styles.navigationMenu, {
variants: {
variant: {
default: styles.default,
mobile: styles.mobile,
},
},
defaultVariants: {
variant: "default",
},
})